diff --git a/fixture/clientdb/ZoneMusic.dbc b/fixture/clientdb/ZoneMusic.dbc new file mode 100755 index 0000000..92914db Binary files /dev/null and b/fixture/clientdb/ZoneMusic.dbc differ diff --git a/src/lib/clientdb/record/ZoneMusicRecord.ts b/src/lib/clientdb/record/ZoneMusicRecord.ts new file mode 100644 index 0000000..0a48b15 --- /dev/null +++ b/src/lib/clientdb/record/ZoneMusicRecord.ts @@ -0,0 +1,24 @@ +import * as io from '@wowserhq/io'; +import ClientDbRecord from '../ClientDbRecord.js'; + +const recordIo = io.struct({ + id: io.int32le, + 'setName.string': io.uint32le, + silenceIntervalMin: io.array(io.int32le, { size: 2 }), + silenceIntervalMax: io.array(io.int32le, { size: 2 }), + sounds: io.array(io.int32le, { size: 2 }), +}); + +class ZoneMusicRecord extends ClientDbRecord { + setName: string; + silenceIntervalMin: number; + silenceIntervalMax: number; + sounds: number[]; + + constructor() { + super(recordIo); + } +} + +export default ZoneMusicRecord; +export { ZoneMusicRecord }; diff --git a/src/lib/clientdb/records.ts b/src/lib/clientdb/records.ts index d8cd464..19f5d7f 100644 --- a/src/lib/clientdb/records.ts +++ b/src/lib/clientdb/records.ts @@ -3,3 +3,4 @@ export * from './record/LightRecord.js'; export * from './record/LightFloatBandRecord.js'; export * from './record/LightIntBandRecord.js'; export * from './record/LightParamsRecord.js'; +export * from './record/ZoneMusicRecord.js'; diff --git a/src/spec/clientdb/ClientDb.spec.ts b/src/spec/clientdb/ClientDb.spec.ts index a5ab25a..cbd7bce 100644 --- a/src/spec/clientdb/ClientDb.spec.ts +++ b/src/spec/clientdb/ClientDb.spec.ts @@ -2,6 +2,7 @@ import { describe, expect, test } from 'vitest'; import ClientDb from '../../lib/clientdb/ClientDb.js'; import LightRecord from '../../lib/clientdb/record/LightRecord.js'; import AreaTableRecord from '../../lib/clientdb/record/AreaTableRecord.js'; +import ZoneMusicRecord from '../../lib/clientdb/record/ZoneMusicRecord.js'; describe('ClientDb', () => { describe('load', () => { @@ -13,6 +14,15 @@ describe('ClientDb', () => { expect(record.lightParamsId).toEqual([14, 15, 494, 15, 4, 0, 0, 0]); }); + test('should load dbc with non-localized strings from valid file', () => { + const dbc = new ClientDb(ZoneMusicRecord).load('./fixture/clientdb/ZoneMusic.dbc'); + const record = dbc.getRecordByIndex(1); + + expect(record.id).toBe(2); + expect(record.setName).toBe('Zone-EvilForest'); + expect(record.sounds).toEqual([2524, 2534]); + }); + test('should load dbc with localized strings from valid file', () => { const dbc = new ClientDb(AreaTableRecord).load('./fixture/clientdb/AreaTable.dbc'); const record = dbc.getRecordByIndex(1);