diff --git a/packages-user/data-base/src/hero/equipment.test.ts b/packages-user/data-base/src/hero/equipment.test.ts index 61badae..66ec220 100644 --- a/packages-user/data-base/src/hero/equipment.test.ts +++ b/packages-user/data-base/src/hero/equipment.test.ts @@ -248,6 +248,29 @@ describe('HeroEquipment equip and unequip', () => { expect(env.equipment.unequip(0)).toBeUndefined(); }); + // 验证两个不同槽位同时装备后合并最终属性,卸下其中一件后另一槽修饰器保留 + it('merges the final attributes of two equipped slots', () => { + const env = createEnv(); + registerItem(env, createItem(10, 'sword', [0], [['atk', 5]])); + registerItem(env, createItem(11, 'shield', [1], [['def', 3]])); + env.equipment.setSlots(['weapon', 'armor']); + const sword = env.store.add(10); + const shield = env.store.add(11); + + expect(env.equipment.equip(sword, 0)).toBeUndefined(); + expect(env.equipment.equip(shield, 1)).toBeUndefined(); + expect(env.equipment.getEquipped(0)).toBe(sword); + expect(env.equipment.getEquipped(1)).toBe(shield); + expect(env.equipment.equipped(sword)).toBe(true); + expect(env.equipment.equipped(shield)).toBe(true); + expect(env.attribute.getFinalAttribute('atk')).toBe(15); + expect(env.attribute.getFinalAttribute('def')).toBe(8); + + expect(env.equipment.unequip(0)).toBe(sword); + expect(env.attribute.getFinalAttribute('atk')).toBe(10); + expect(env.attribute.getFinalAttribute('def')).toBe(8); + }); + // 验证 getEquips 按槽位顺序输出装备状态或空位 it('lists slots in order with their equipment states', () => { const env = createEnv(); diff --git a/packages-user/data-base/src/map/mapState.test.ts b/packages-user/data-base/src/map/mapState.test.ts index 7a87932..9b99d93 100644 --- a/packages-user/data-base/src/map/mapState.test.ts +++ b/packages-user/data-base/src/map/mapState.test.ts @@ -114,6 +114,26 @@ describe('MapState floor registration', () => { expect(mapState.maps).toEqual(['F1']); }); + // 验证 createMap 创建的地图可直接写入并读取图层、块、点事件与事件层绑定 + it('generates and reads content on a map created by createMap', () => { + const mapState = createFixture(); + const map = mapState.createMap('F1', 2, 2); + const layer = map.addLayer(); + map.setLayerAlias(layer, 'event'); + map.setEventLayer(layer); + layer.setBlock(5, 0, 0); + layer.setZIndex(0); + layer.event(1, 0)!.set(9, 'gen-event'); + + expect(mapState.getMap('F1')).toBe(map); + expect(map.getLayerByAlias('event')).toBe(layer); + expect(map.eventLayer).toBe(layer); + expect(layer.getBlock(0, 0)).toBe(5); + expect(layer.getBlock(1, 0)).toBe(0); + expect(layer.event(1, 0)!.get()).toEqual(new Map([[9, 'gen-event']])); + expect(map.dirty()).toBe(true); + }); + // 验证 setMapList 去重并保持传入顺序 it('stores a de-duplicated ordered floor list', () => { const mapState = createFixture();