From 7ccabe714f2a4811e32edd26b4a813fd0abca3b2 Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 28 Apr 2022 20:28:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=98=E5=8A=9B=EF=BC=9A=E8=A3=85=E5=A4=87?= =?UTF-8?q?=E4=B8=8A=E7=9A=84=E6=88=98=E5=8A=9B=E7=AE=97=E6=B3=95=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/services/role/calCe.ts | 102 ++++++++++++++++++++----- 1 file changed, 84 insertions(+), 18 deletions(-) diff --git a/game-server/app/services/role/calCe.ts b/game-server/app/services/role/calCe.ts index b5e0f85ce..a6914a42d 100644 --- a/game-server/app/services/role/calCe.ts +++ b/game-server/app/services/role/calCe.ts @@ -267,39 +267,76 @@ export class CalCe { // 装备升品 public setEquipQuality(hid: number, eplaceId: number, equipId: number, quality: number, qualityStage: number) { + this.data.clearHeroAttrByHid(hid, 'equipQuality'); this.data.clearEquipAttrByHidAndEplace(hid, eplaceId, 'equipQuality'); let dicEquipQuality = getEquipQualityIdByEquipIdAndPoint(equipId, quality, qualityStage); + let map = new Map(); // attrId => val for(let { id, num } of dicEquipQuality.attribute) { - let equipAttr = this.data.getEquipAttrByHidAndId(hid, eplaceId, id); - let heroAttr = this.data.getHeroAttrByHidAndId(hid, id); - heroAttr.equipQuality += num - equipAttr.equipQuality; - equipAttr.equipQuality = num; + if(!map.has(id)) { + map.set(id, num); + } else { + map.set(id, map.get(id) + num); + } } + for(let [id, val] of map) { + let equipAttr = this.data.getEquipAttrByHidAndId(hid, eplaceId, id); + equipAttr.equipQuality = val; + } + let equips = this.data.getEquipAttrsByHid(hid); + for(let { hid, attrId, equipQuality } of equips) { + let heroAttr = this.data.getHeroAttrByHidAndId(hid, attrId); + heroAttr.equipQuality = equipQuality; + } + } // 装备强化 public setEquipStrength(hid: number, eplaceId: number, equipId: number, lv: number) { + this.data.clearHeroAttrByHid(hid, 'equipStrengthen'); this.data.clearEquipAttrByHidAndEplace(hid, eplaceId, 'equipStrengthen'); let dicEquipStrenth = getEquipStrenthenAttr(equipId, lv); + let map = new Map(); // attrId => val for(let { id, num } of dicEquipStrenth.attr) { + if(!map.has(id)) { + map.set(id, num); + } else { + map.set(id, map.get(id) + num); + } + } + for(let [id, val] of map) { let equipAttr = this.data.getEquipAttrByHidAndId(hid, eplaceId, id); - let heroAttr = this.data.getHeroAttrByHidAndId(hid, id); - heroAttr.equipStrength = num - equipAttr.equipStrengthen; - equipAttr.equipStrengthen = num; + equipAttr.equipStrengthen = val; + } + let equips = this.data.getEquipAttrsByHid(hid); + for(let { hid, attrId, equipStrengthen } of equips) { + let heroAttr = this.data.getHeroAttrByHidAndId(hid, attrId); + heroAttr.equipStrength = equipStrengthen; } } // 装备精炼(升星) public setEquipStar(hid: number, eplaceId: number, equipId: number, star: number, starStage: number) { + this.data.clearHeroAttrByHid(hid, 'equipStar'); this.data.clearEquipAttrByHidAndEplace(hid, eplaceId, 'equipStar'); let dicEquipStar = getEquipStarAttrByStage(equipId, star, starStage); if(dicEquipStar) { let { mainAttr, subAttr } = dicEquipStar; + let map = new Map(); // attrId => val for(let { id, num } of [...mainAttr, ...subAttr]) { + if(!map.has(id)) { + map.set(id, num); + } else { + map.set(id, map.get(id) + num); + } + } + for(let [id, val] of map) { let equipAttr = this.data.getEquipAttrByHidAndId(hid, eplaceId, id); - let heroAttr = this.data.getHeroAttrByHidAndId(hid, id); - heroAttr.equipStar = num - equipAttr.equipStar; - equipAttr.equipStar = num; + equipAttr.equipStar = val; + } + let equips = this.data.getEquipAttrsByHid(hid); + for(let { hid, attrId, equipStar } of equips) { + let heroAttr = this.data.getHeroAttrByHidAndId(hid, attrId); + heroAttr.equipStar = equipStar; } } } @@ -325,6 +362,7 @@ export class CalCe { // 天晶 public setJewel(hid: number, eplaceId: number, stones: Stone[], jewel: JewelType) { + this.data.clearHeroAttrByHid(hid, 'jewel'); this.data.clearEquipAttrByHidAndEplace(hid, eplaceId, 'jewel'); let seids: number[] = []; if(jewel) { @@ -335,12 +373,23 @@ export class CalCe { } } let { ratioUp } = this.addSeidEffect(seids); - for(let [attrId, val] of ratioUp) { - let equipAttr = this.data.getEquipAttrByHidAndId(hid, eplaceId, attrId); - let heroAttr = this.data.getHeroAttrByHidAndId(hid, attrId); - heroAttr.jewel += val - equipAttr.jewel; + let map = new Map(); // attrId => val + for(let [id, num] of ratioUp) { + if(!map.has(id)) { + map.set(id, num); + } else { + map.set(id, map.get(id) + num); + } + } + for(let [id, val] of map) { + let equipAttr = this.data.getEquipAttrByHidAndId(hid, eplaceId, id); equipAttr.jewel = val; } + let equips = this.data.getEquipAttrsByHid(hid); + for(let { hid, attrId, jewel } of equips) { + let heroAttr = this.data.getHeroAttrByHidAndId(hid, attrId); + heroAttr.jewel = jewel; + } } public isRandSeUnLock(jewelId: number, randSeId: number, stones: Stone[]) { @@ -359,18 +408,30 @@ export class CalCe { // 地玉 public setStone(hid: number, eplaceId: number, stones: Stone[]) { + this.data.clearHeroAttrByHid(hid, 'stone'); this.data.clearEquipAttrByHidAndEplace(hid, eplaceId, 'stone'); + let map = new Map(); // attrId => val for(let { stone } of stones) { let dicStone = gameData.stone.get(stone); if(dicStone) { for(let { id, num } of dicStone.attribute) { - let equipAttr = this.data.getEquipAttrByHidAndId(hid, eplaceId, id); - let heroAttr = this.data.getHeroAttrByHidAndId(hid, id); - heroAttr.stone += num - equipAttr.stone; - equipAttr.stone = num; + if(!map.has(id)) { + map.set(id, num); + } else { + map.set(id, map.get(id) + num); + } } } } + for(let [id, val] of map) { + let equipAttr = this.data.getEquipAttrByHidAndId(hid, eplaceId, id); + equipAttr.stone = val; + } + let equips = this.data.getEquipAttrsByHid(hid); + for(let { hid, attrId, stone } of equips) { + let heroAttr = this.data.getHeroAttrByHidAndId(hid, attrId); + heroAttr.stone = stone; + } } @@ -625,6 +686,11 @@ class CalCeData { return this.equipAttrs.get(key); } + public getEquipAttrsByHid(hid: number) { + let keys = this.equipAttrsByHid.get(hid); + return keys.map(key => this.equipAttrs.get(key)); + } + public getEquipAttrsByHidAndEplace(hid: number, eplaceId: number) { let key2 = `${hid}_${eplaceId}`; if(!this.equipAttrsByHidAndEplace.has(key2)) return []