diff --git a/game-server/app/services/activity/monthlyTicketService.ts b/game-server/app/services/activity/monthlyTicketService.ts index e3a16faab..09ebc2ba7 100644 --- a/game-server/app/services/activity/monthlyTicketService.ts +++ b/game-server/app/services/activity/monthlyTicketService.ts @@ -222,8 +222,6 @@ export function getVipRegretCnt(vipStartTime: number) { } export function vipCanSkipTower(recommendCeSum: number, heroesCeSum: number, vipStartTime: number) { - console.log('####', recommendCeSum, heroesCeSum, vipStartTime, ); let ratio = vipStartTime > 0? VIP.VIP_TOWER_SKIP_CE_RATIO_WITH_VIP: VIP.VIP_TOWER_SKIP_CE_RATIO_WITHOUT_VIP; - console.log('#####', VIP.VIP_TOWER_SKIP_CE_RATIO_WITH_VIP, VIP.VIP_TOWER_SKIP_CE_RATIO_WITHOUT_VIP, ratio) return heroesCeSum > recommendCeSum * ratio; } \ No newline at end of file diff --git a/game-server/app/services/role/calCe.ts b/game-server/app/services/role/calCe.ts index 7dc7aaf2b..de2c9ff53 100644 --- a/game-server/app/services/role/calCe.ts +++ b/game-server/app/services/role/calCe.ts @@ -1,7 +1,7 @@ import { ABI_STAGE, ABI_STAGE_TO_TYPE, ABI_TYPE_MAIN, SEID_TYPE } from "../../consts"; import { HeroUpdate } from "../../db/Hero"; import { RoleUpdate, Teraph } from "../../db/Role"; -import { GlobalAttr, HeroAttr, HeroAttrCell, RoleCeType } from "../../db/RoleCe"; +import { AttrCell, EquipAttr, HeroAttr, RoleCeType } from "../../db/RoleCe"; import { AttributeCal } from "../../domain/roleField/attribute"; import { gameData, getHeroStarByQuality, getHeroWakeByQuality, getTeraph } from "../../pubUtils/data"; import { DicRandomEffectPool } from "../../pubUtils/dictionary/DicRandomEffectPool"; @@ -10,10 +10,14 @@ import { addToMap, deepCopy } from "../../pubUtils/util"; class RoleCe { roleId: string; - globalAttrs: Map = new Map(); // attrId => GlobalCe - heroAttrs: Map = new Map(); // hid+attrId => HeroCe + globalAttrs: Map = new Map(); // attrId => GlobalAttr + heroAttrs: Map = new Map(); // hid+attrId => HeroAttr heroAttrsByHid: Map = new Map(); // hid => [hid+attrId] + equipAttrs: Map = new Map(); // hid+eplaceId+attrId => EquipAttr + equipAttrsByHid: Map = new Map(); // hid => [hid+eplaceId+attrId] + equipAttrsByHidAndEplace: Map = new Map(); // hid+eplaceId =>+eplaceId+attrId] heroLv: Map = new Map(); + equipLv: Map = new Map(); // hid+eplaceId => lv setRoleCe(roleCe: RoleCeType) { this.roleId = roleCe.roleId; @@ -28,6 +32,13 @@ class RoleCe { obj.setByRoleCe(cell); } } + for(let { hid, eplaceId, lv, attrs } of roleCe.equipAttrs) { + this.equipLv.set(`${hid}_${eplaceId}`, lv); + for(let cell of attrs) { + let obj = this.getEquipAttrByHidAndId(hid, eplaceId, cell.attrId); + obj.setByRoleCe(cell); + } + } } public getGlobalAttrById(attrId: number) { @@ -62,14 +73,44 @@ class RoleCe { return this.heroAttrs.get(key); } + public getEquipAttrByHidAndId(hid: number, eplaceId: number, attrId: number) { + let key = `${hid}_${eplaceId}_${attrId}`; + if(!this.equipAttrs.has(key)) { + if(ABI_TYPE_MAIN.indexOf(attrId) != -1) { + let obj = new EquipMainAttr(hid, attrId); + this.equipAttrs.set(key, obj); + } else { + let obj = new EquipSubAttr(hid, attrId); + this.equipAttrs.set(key, obj); + } + + if(!this.equipAttrsByHid.has(hid)) { + this.equipAttrsByHid.set(hid, []); + } + this.equipAttrsByHid.get(hid).push(key); + let key2 = `${hid}_${eplaceId}`; + if(!this.equipAttrsByHidAndEplace.has(key2)) { + this.equipAttrsByHidAndEplace.set(key2, { hid, eplaceId, keys: []}); + } + this.equipAttrsByHidAndEplace.get(key2).keys.push(key); + } + return this.equipAttrs.get(key); + } + public calHeroCe() { let ces = new Map(); // hid => [{attrId, val}] for(let [hid, keys] of this.heroAttrsByHid) { let lv = this.heroLv.get(hid)||1; for(let key of keys) { - let { attrId, base, baseUp, starUp, skillRatio, skill, job } = this.heroAttrs.get(key); - let { schoolRatio, title, teraph } = this.getGlobalAttrById(attrId); - let val = ( base + lv * ( baseUp + starUp ) + skill + job) * (1 + skillRatio + schoolRatio ) + teraph + title; + let { attrId, base = 0, job = 0, starUp = 0, connect = 0, favour = 0, talent = 0, equip = 0, equipUp = 0, equipStone = 0 } = this.heroAttrs.get(key); + let { school = 0, teraph = 0, title = 0, scroll = 0, skin = 0 } = this.getGlobalAttrById(attrId); + let val = 0; + if(ABI_TYPE_MAIN.indexOf(attrId)) { + // {[hp1 + lv * hp2 + hp3 * ( 1 + hp4 )] * (1 + hp5 ) + [( hp6+hp7)*(1+hp8)] } * ( 1 + hp9 ) + hp10 + hp11 + val = ((base + job + lv * starUp + connect * ( 1 + favour )) * ( 1 + school + talent ) + equip ) * ( 1 + equipUp ) + equipStone + teraph + title + scroll + skin; + } else { + val = base + job + talent + teraph + school + title + equip + skin; + } if(!ces.has(hid)) ces.set(hid, []); ces.get(hid).push({ id: attrId, val }); } @@ -84,14 +125,14 @@ class RoleCe { } public getRoleCeTable() { - let globalAttrs: GlobalAttr[] = []; + let globalAttrs: AttrCell[] = []; for(let [_, globalAttr] of this.globalAttrs) { globalAttrs.push(globalAttr.getGlobalAttr()); } let heroAttrs: HeroAttr[] = []; for(let [hid, keys] of this.heroAttrsByHid) { let lv = this.heroLv.get(hid); - let attrs: HeroAttrCell[] = []; + let attrs: AttrCell[] = []; for(let key of keys) { let heroAttr = this.heroAttrs.get(key); attrs.push(heroAttr.getHeroAttrCell()); @@ -100,8 +141,20 @@ class RoleCe { hid, lv, attrs }); } + let equipAttrs: EquipAttr[] = []; + for(let [key2, { hid, eplaceId, keys }] of this.equipAttrsByHidAndEplace) { + let lv = this.equipLv.get(key2); + let attrs: AttrCell[] = []; + for(let key of keys) { + let equipAttr = this.equipAttrs.get(key); + attrs.push(equipAttr.getEquipAttrCell()); + } + equipAttrs.push({ + hid, eplaceId, lv, attrs + }); + } return { - roleId: this.roleId, globalAttrs, heroAttrs + roleId: this.roleId, globalAttrs, heroAttrs, equipAttrs } } } @@ -109,11 +162,11 @@ class RoleCe { // 计算函数 export class CalCe extends RoleCe { public setInitHero(role: RoleUpdate, heroes: HeroUpdate[]) { + this.roleId = role.roleId; for(let { hid, skinId, lv, quality, star, starStage, colorStar, colorStarStage, job, jobStage, } of heroes) { this.setHeroBase(hid, skinId); this.setHeroLv(hid, lv); this.setHeroStar(hid, job, quality, star, starStage, colorStar, colorStarStage); - this.setSkill(hid, skinId, star, colorStar); this.setJob(hid, job, jobStage); } this.setTitle(role.title); @@ -127,10 +180,6 @@ export class CalCe extends RoleCe { let heroAttr = this.getHeroAttrByHidAndId(hid, attrId); heroAttr.base = value; } - for(let [attrId, value] of dicHero.baseAbilityUpArr) { - let heroAttr = this.getHeroAttrByHidAndId(hid, attrId); - heroAttr.baseUp = value; - } } // 武将等级 @@ -161,30 +210,6 @@ export class CalCe extends RoleCe { } - // 武将星级解锁被动技能计算 - public setSkill(hid: number, skinId: number, _star: number, _colorStar: number) { - let seidList = new Map(); // type => seid - let dicHero = gameData.hero.get(skinId); - let { starSeidArr, colorStarSeidArr } = gameData.heroSkill.get(dicHero.skill); - for (let { star, value, type } of starSeidArr) { - if (_star >= star) seidList.set(type, value); - } - for (let { star, value, type } of colorStarSeidArr) { - if (_colorStar >= star) seidList.set(type, value); - } - let list: number[] = []; - for(let [_type, value] of seidList) list.push(value); - let { fixUp, ratioUp } = this.addSeidEffect(list); - for(let [attrId, value] of fixUp) { - let heroAttr = this.getHeroAttrByHidAndId(hid, attrId); - heroAttr.skill = value; - } - for(let [attrId, value] of ratioUp) { - let heroAttr = this.getHeroAttrByHidAndId(hid, attrId); - heroAttr.skillRatio = value; - } - } - // 职业基础 public setJob(hid: number, job: number, jobStage: number) { const dicJob = gameData.job.get(job); @@ -284,15 +309,17 @@ export class CalCe extends RoleCe { abstract class GlobalAllAttr { attrId: number; - schoolRatio: number = 0; - title: number = 0; + school: number = 0; teraph: number = 0; + title: number = 0; + scroll: number = 0; + skin: number = 0; constructor(attrId: number) { this.attrId = attrId; } - abstract setByRoleCe(data: GlobalAttr): void; + abstract setByRoleCe(data: AttrCell): void; abstract getValues(): number[]; public getGlobalAttr() { @@ -305,17 +332,21 @@ abstract class GlobalAllAttr { class GlobalMainAttr extends GlobalAllAttr { - public setByRoleCe(globalAttr: GlobalAttr) { + public setByRoleCe(globalAttr: AttrCell) { for(let i = 0; i < globalAttr.values.length; i++) { let value = globalAttr.values[i]; if(value != undefined) { switch(i) { - case GLOBAL_ATTR_INDEX.SCHOOL: - this.schoolRatio = value; break; - case GLOBAL_ATTR_INDEX.TITLE: - this.title = value; break; - case GLOBAL_ATTR_INDEX.TERAPH: + case GLOBAL_MAIN_ATTR_INDEX.SCHOOL: + this.school = value; break; + case GLOBAL_MAIN_ATTR_INDEX.TERAPH: this.teraph = value; break; + case GLOBAL_MAIN_ATTR_INDEX.TITLE: + this.title = value; break; + case GLOBAL_MAIN_ATTR_INDEX.SCROLL: + this.scroll = value; break; + case GLOBAL_MAIN_ATTR_INDEX.SKIN: + this.skin = value; break; } } } @@ -323,14 +354,23 @@ class GlobalMainAttr extends GlobalAllAttr { public getValues() { let values: number[] = []; - for(let i = GLOBAL_ATTR_INDEX.START; i < GLOBAL_ATTR_INDEX.END; i++) { + for(let i = GLOBAL_MAIN_ATTR_INDEX.START; i < GLOBAL_MAIN_ATTR_INDEX.END; i++) { switch(i) { - case GLOBAL_ATTR_INDEX.SCHOOL: - values.push(this.schoolRatio); break; - case GLOBAL_ATTR_INDEX.TITLE: - values.push(this.title); break; - case GLOBAL_ATTR_INDEX.TERAPH: - values.push(this.teraph); break; + case GLOBAL_MAIN_ATTR_INDEX.SCHOOL: + if(this.school) values[i] = this.school; + break; + case GLOBAL_MAIN_ATTR_INDEX.TERAPH: + if(this.teraph) values[i] = this.teraph; + break; + case GLOBAL_MAIN_ATTR_INDEX.TITLE: + if(this.title) values[i] = this.title; + break; + case GLOBAL_MAIN_ATTR_INDEX.SCROLL: + if(this.scroll) values[i] = this.scroll; + break; + case GLOBAL_MAIN_ATTR_INDEX.SKIN: + if(this.skin) values[i] = this.skin; + break; } } return values; @@ -339,17 +379,19 @@ class GlobalMainAttr extends GlobalAllAttr { class GlobalSubAttr extends GlobalAllAttr { - public setByRoleCe(globalAttr: GlobalAttr) { + public setByRoleCe(globalAttr: AttrCell) { for(let i = 0; i < globalAttr.values.length; i++) { let value = globalAttr.values[i]; if(value != undefined) { switch(i) { - case GLOBAL_ATTR_INDEX.SCHOOL: - this.schoolRatio = value; break; - case GLOBAL_ATTR_INDEX.TITLE: - this.title = value; break; - case GLOBAL_ATTR_INDEX.TERAPH: + case GLOBAL_SUB_ATTR_INDEX.SCHOOL: + this.school = value; break; + case GLOBAL_MAIN_ATTR_INDEX.TERAPH: this.teraph = value; break; + case GLOBAL_MAIN_ATTR_INDEX.TITLE: + this.title = value; break; + case GLOBAL_MAIN_ATTR_INDEX.SKIN: + this.skin = value; break; } } } @@ -357,14 +399,20 @@ class GlobalSubAttr extends GlobalAllAttr { public getValues() { let values: number[] = []; - for(let i = GLOBAL_ATTR_INDEX.START; i < GLOBAL_ATTR_INDEX.END; i++) { + for(let i = GLOBAL_MAIN_ATTR_INDEX.START; i < GLOBAL_MAIN_ATTR_INDEX.END; i++) { switch(i) { - case GLOBAL_ATTR_INDEX.SCHOOL: - values.push(this.schoolRatio); break; - case GLOBAL_ATTR_INDEX.TITLE: - values.push(this.title); break; - case GLOBAL_ATTR_INDEX.TERAPH: - values.push(this.teraph); break; + case GLOBAL_MAIN_ATTR_INDEX.SCHOOL: + if(this.school) values[i] = this.school; + break; + case GLOBAL_MAIN_ATTR_INDEX.TERAPH: + if(this.teraph) values[i] = this.teraph; + break; + case GLOBAL_MAIN_ATTR_INDEX.TITLE: + if(this.title) values[i] = this.title; + break; + case GLOBAL_MAIN_ATTR_INDEX.SKIN: + if(this.skin) values[i] = this.skin; + break; } } return values; @@ -375,12 +423,14 @@ abstract class HeroAllAttr { hid: number; attrId: number; base: number = 0; - lv: number = 0; - baseUp: number = 0; - starUp: number = 0; - skillRatio: number = 0; - skill: number = 0; job: number = 0; + starUp: number = 0; + connect: number = 0; + favour: number = 0; + talent: number = 0; + equip: number = 0; + equipUp: number = 0; + equipStone: number = 0; constructor(hid: number, attrId: number, ) { this.hid = hid; @@ -388,7 +438,7 @@ abstract class HeroAllAttr { } - abstract setByRoleCe(data: GlobalAttr): void; + abstract setByRoleCe(data: AttrCell): void; abstract getValues(): number[]; public getHeroAttrCell() { @@ -400,13 +450,29 @@ abstract class HeroAllAttr { } class HeroMainAttr extends HeroAllAttr { - public setByRoleCe(heroAttr: HeroAttrCell) { + public setByRoleCe(heroAttr: AttrCell) { for(let i = 0; i < heroAttr.values.length; i++) { let value = heroAttr.values[i]; if(value != undefined) { switch(i) { - case HERO_ATTR_INDEX.BASE: - this.base = value; + case HERO_MAIN_ATTR_INDEX.BASE: + this.base = value; break; + case HERO_MAIN_ATTR_INDEX.JOB: + this.job = value; break; + case HERO_MAIN_ATTR_INDEX.STAR_UP: + this.starUp = value; break; + case HERO_MAIN_ATTR_INDEX.CONNECT: + this.connect = value; break; + case HERO_MAIN_ATTR_INDEX.FAVOUR: + this.favour = value; break; + case HERO_MAIN_ATTR_INDEX.TALENT: + this.talent = value; break; + case HERO_MAIN_ATTR_INDEX.EQUIP: + this.equip = value; break; + case HERO_MAIN_ATTR_INDEX.EQUIP_UP: + this.equipUp = value; break; + case HERO_MAIN_ATTR_INDEX.EQUIP_STONE: + this.equipStone = value; break; } } } @@ -414,10 +480,35 @@ class HeroMainAttr extends HeroAllAttr { public getValues() { let values: number[] = []; - for(let i = HERO_ATTR_INDEX.START; i < HERO_ATTR_INDEX.END; i++) { + for(let i = HERO_MAIN_ATTR_INDEX.START; i < HERO_MAIN_ATTR_INDEX.END; i++) { switch(i) { - case HERO_ATTR_INDEX.BASE: - values.push(this.base); break; + case HERO_MAIN_ATTR_INDEX.BASE: + if(this.base) values[i] = this.base; + break; + case HERO_MAIN_ATTR_INDEX.JOB: + if(this.job) values[i] = this.job; + break; + case HERO_MAIN_ATTR_INDEX.STAR_UP: + if(this.starUp) values[i] = this.starUp; + break; + case HERO_MAIN_ATTR_INDEX.CONNECT: + if(this.connect) values[i] = this.connect; + break; + case HERO_MAIN_ATTR_INDEX.FAVOUR: + if(this.favour) values[i] = this.favour; + break; + case HERO_MAIN_ATTR_INDEX.TALENT: + if(this.talent) values[i] = this.talent; + break; + case HERO_MAIN_ATTR_INDEX.EQUIP: + if(this.equip) values[i] = this.equip; + break; + case HERO_MAIN_ATTR_INDEX.EQUIP_UP: + if(this.equipUp) values[i] = this.equipUp; + break; + case HERO_MAIN_ATTR_INDEX.EQUIP_STONE: + if(this.equipStone) values[i] = this.equipStone; + break; } } return values; @@ -425,13 +516,19 @@ class HeroMainAttr extends HeroAllAttr { } class HeroSubAttr extends HeroAllAttr { - public setByRoleCe(heroAttr: HeroAttrCell) { + public setByRoleCe(heroAttr: AttrCell) { for(let i = 0; i < heroAttr.values.length; i++) { let value = heroAttr.values[i]; if(value != undefined) { switch(i) { - case HERO_ATTR_INDEX.BASE: - this.base = value; + case HERO_SUB_ATTR_INDEX.BASE: + this.base = value; break; + case HERO_SUB_ATTR_INDEX.JOB: + this.job = value; break; + case HERO_SUB_ATTR_INDEX.TALENT: + this.talent = value; break; + case HERO_SUB_ATTR_INDEX.EQUIP: + this.equip = value; break; } } } @@ -439,27 +536,192 @@ class HeroSubAttr extends HeroAllAttr { public getValues() { let values: number[] = []; - for(let i = HERO_ATTR_INDEX.START; i < HERO_ATTR_INDEX.END; i++) { + for(let i = HERO_SUB_ATTR_INDEX.START; i < HERO_SUB_ATTR_INDEX.END; i++) { switch(i) { - case HERO_ATTR_INDEX.BASE: - values.push(this.base); break; + case HERO_SUB_ATTR_INDEX.BASE: + if(this.base) values[i] = this.base; + break; + case HERO_SUB_ATTR_INDEX.JOB: + if(this.job) values[i] = this.job; + break; + case HERO_SUB_ATTR_INDEX.TALENT: + if(this.talent) values[i] = this.talent; + break; + case HERO_SUB_ATTR_INDEX.EQUIP: + if(this.equip) values[i] = this.equip; + break; } } return values; } } -enum GLOBAL_ATTR_INDEX { +abstract class EquipAllAttr { + hid: number; + eplaceId: number; + attrId: number; + equipQuality: number = 0; + equipStrengthen: number = 0; + equipStar: number = 0; + equipSuit: number = 0; + jewel: number = 0; + stone: number = 0; + + constructor(hid: number, attrId: number, ) { + this.hid = hid; + this.attrId = attrId; + + } + + abstract setByRoleCe(data: AttrCell): void; + abstract getValues(): number[]; + + public getEquipAttrCell() { + return { + attrId: this.attrId, + values: this.getValues() + } + } +} + +class EquipMainAttr extends EquipAllAttr { + public setByRoleCe(equipAttr: AttrCell) { + for(let i = 0; i < equipAttr.values.length; i++) { + let value = equipAttr.values[i]; + if(value != undefined) { + switch(i) { + case EQUIP_MAIN_ATTR_INDEX.EQUIP_QUALITY: + this.equipQuality = value; break; + case EQUIP_MAIN_ATTR_INDEX.EQUIP_STRENGTH: + this.equipStrengthen = value; break; + case EQUIP_MAIN_ATTR_INDEX.EQUIP_STAR: + this.equipStar = value; break; + case EQUIP_MAIN_ATTR_INDEX.EQUIP_SUIT: + this.equipSuit = value; break; + case EQUIP_MAIN_ATTR_INDEX.JEWEL: + this.jewel = value; break; + case EQUIP_MAIN_ATTR_INDEX.STONE: + this.stone = value; break; + } + } + } + } + + public getValues() { + let values: number[] = []; + for(let i = EQUIP_MAIN_ATTR_INDEX.START; i < EQUIP_MAIN_ATTR_INDEX.END; i++) { + switch(i) { + case EQUIP_MAIN_ATTR_INDEX.EQUIP_QUALITY: + if(this.equipQuality) values[i] = this.equipQuality; + break; + case EQUIP_MAIN_ATTR_INDEX.EQUIP_STRENGTH: + if(this.equipStrengthen) values[i] = this.equipStrengthen; + break; + case EQUIP_MAIN_ATTR_INDEX.EQUIP_STAR: + if(this.equipStar) values[i] = this.equipStar; + break; + case EQUIP_MAIN_ATTR_INDEX.EQUIP_SUIT: + if(this.equipSuit) values[i] = this.equipSuit; + break; + case EQUIP_MAIN_ATTR_INDEX.JEWEL: + if(this.jewel) values[i] = this.jewel; + break; + case EQUIP_MAIN_ATTR_INDEX.STONE: + if(this.stone) values[i] = this.stone; + break; + } + } + return values; + } +} + +class EquipSubAttr extends EquipAllAttr { + public setByRoleCe(equipAttr: AttrCell) { + for(let i = 0; i < equipAttr.values.length; i++) { + let value = equipAttr.values[i]; + if(value != undefined) { + switch(i) { + case EQUIP_SUB_ATTR_INDEX.EQUIP_STAR: + this.equipStar = value; break; + case EQUIP_SUB_ATTR_INDEX.JEWEL: + this.jewel = value; break; + } + } + } + } + + public getValues() { + let values: number[] = []; + for(let i = EQUIP_SUB_ATTR_INDEX.START; i < EQUIP_SUB_ATTR_INDEX.END; i++) { + switch(i) { + case EQUIP_SUB_ATTR_INDEX.EQUIP_STAR: + if(this.equipStar) values[i] = this.equipStar; + break; + case EQUIP_SUB_ATTR_INDEX.JEWEL: + if(this.jewel) values[i] = this.jewel; + break; + } + } + return values; + } +} + +enum GLOBAL_MAIN_ATTR_INDEX { START, - SCHOOL = 0, - TITLE = 1, - TERAPH = 2, + SCHOOL = 0, // hp5,百家学宫百分比加成(dic_zyz_schoolRate的mainAttrApercent) + TERAPH = 1, // hp11, 神像加成(直接读数据库teraph字段的值) + TITLE = 2, // hp11, 爵位加成(dic_zyz_title的hp) + SCROLL = 3, // hp11,名将谱加成(dic_zyz_heroScroll的hp) + SKIN = 4, // hp12, 皮肤加成(dic_zyz_fashion的actorAttr) END } -enum HERO_ATTR_INDEX { +enum GLOBAL_SUB_ATTR_INDEX { START, - BASE = 0, // 角色基础属性(dic_zyz_hero的hp) - BASE_UP = 1, + SCHOOL = 0, // attr5, 百家学宫(根据dic_zyz_school中的upAttribute决定书院加的是那些次级属性,具体值读取dic_zyz_schoolRate中的assiAttrAddValue一列) + TERAPH = 1, // attr4, 神像加成(dic_zyz_teraph中的assistAttrValue) + TITLE = 2, // attr6, 爵位(dic_zyz_title中的pdi、mdi) + SKIN = 3, // attr8, 皮肤 + END +} + +enum HERO_MAIN_ATTR_INDEX { + START, + BASE = 0, // hp1, 角色基础属性(dic_zyz_hero的hp) + JOB = 1, // hp1, 职业属性(dic_zyz_job的attr) + STAR_UP = 2, // hp2, 角色升星成长(dic_zyz_hero_star的hp或dic_zyz_hero_wake的hp) + CONNECT = 3, // hp3, 角色羁绊固定值(dic_zyz_friend_ship的attribute) + FAVOUR = 4, // hp4, 声望加成(dic_zyz_friend_ship_level的add) + TALENT = 5, // hp5, 天赋树百分比加成(dic_zyz_hero_talent的levelSeid,然后对应到dic_zyz_se) + EQUIP = 6, // (hp6+hp7)*(1+hp8) 装备,equipAttr加成之后加到这里 + EQUIP_UP = 7, // hp9, 天晶洗练处的主属性百分比加成,equipAttr中计算好加和加入 + EQUIP_STONE = 8, // hp10, 地玉石增加的固定值,equipAttr中计算好和加入 + END +} + +enum HERO_SUB_ATTR_INDEX { + START, + BASE = 0, // attr1,系统参数表中所有人 + JOB = 1, // attr2, 职业的attr + TALENT = 2, // attr3, 天赋树百分比加成 (dic_zyz_hero_talent的levelSeid,然后对应到dic_zyz_se) + EQUIP = 3, // attr7+attr9, 天晶加成和精炼加成,equipAttr加起来 + END +} + +enum EQUIP_MAIN_ATTR_INDEX { + START, + EQUIP_QUALITY = 0, // hp6, 装备升品基础值加成(dic_zyz_equipQuality) + EQUIP_STRENGTH = 1,// hp7, 装备强化值(需改表,改为键值对) + EQUIP_STAR = 2, // hp8, 装备(dic_zyz_equipStar) + EQUIP_SUIT = 3, // hp8, 装备套装加成(dic_zyz_equipSuit) + JEWEL = 4, // hp9, 天晶洗练出的主属性百分比加成,equipAttr加起来 + STONE = 5, // hp10,地玉石增加的固定值,equipAttr加起来 + END +} + +enum EQUIP_SUB_ATTR_INDEX { + START, + JEWEL = 0, // attr7, 天晶随机属性(随机出来的值在dic_zyz_randomEffectPool中读最终值) + EQUIP_STAR = 1, // attr8, 精炼次级属性(dic_zyz_equipStar的subAttr) END } \ No newline at end of file diff --git a/game-server/app/services/role/createHero.ts b/game-server/app/services/role/createHero.ts index 4bcf77620..fae782b4b 100644 --- a/game-server/app/services/role/createHero.ts +++ b/game-server/app/services/role/createHero.ts @@ -23,7 +23,7 @@ import { getInitHeroById } from "../roleService"; import { addItems, combineFigureInfo, unlockFigure, unlockFigureWithoutSave } from "./rewardService"; import { gameData } from "../../pubUtils/data"; import { CalCe } from "./calCe"; -import { RoleCeUpdate } from "../../db/RoleCe"; +import RoleCe, { RoleCeModel, RoleCeUpdate } from "../../db/RoleCe"; export class CreateHeroes { private roleId: string; @@ -102,6 +102,8 @@ export class CreateHeroes { // 更新role表 role = await RoleModel.incRoleInfo(this.roleId, { heroNum: this.incHeroNum, ce: this.incRoleCe }, { heroNumUpdatedAt: nowSeconds(), }); this.setRole(role); + // 更新roleCe表 + await RoleCeModel.updateRoleCe(this.roleId, this.roleCe); // 更新皮肤表 await SkinModel.insertSkins(this.roleId, this.roleName, this.skins) // 更新guild表 diff --git a/shared/db/RoleCe.ts b/shared/db/RoleCe.ts index 5fd8bb26c..792ce74b2 100644 --- a/shared/db/RoleCe.ts +++ b/shared/db/RoleCe.ts @@ -2,7 +2,7 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; // 全局加成 -export class GlobalAttr { +export class AttrCell { @prop({ required: true }) attrId: number; // 属性id @prop({ required: true }) @@ -15,27 +15,19 @@ export class HeroAttr { hid: number; // 武将id @prop({ required: true }) lv: number; - @prop({ required: true, type: () => HeroAttrCell, _id: false }) - attrs: HeroAttrCell[]; + @prop({ required: true, type: () => AttrCell, _id: false }) + attrs: AttrCell[]; } -export class HeroAttrCell { - @prop({ required: true }) - attrId: number; // 属性id - @prop({ required: true }) - values: number[]; // 战力公式中的武将加成的数据,查表后的结果 -} - -// 装备加成 -class EquipAttr { - @prop({ required: true }) - hid: number; // 武将id - @prop({ required: true }) - eplaceId: number; // 装备位置 - @prop({ required: true }) - attrId: number; // 属性id - @prop({ required: true }) - values: number[]; // 战力公式中的武将加成的数据,查表后的结果 +export class EquipAttr { + @prop({ required: true }) + hid: number; // 武将id + @prop({ required: true }) + eplaceId: number; // 装备位置 + @prop({ required: true }) + lv: number; + @prop({ required: true, type: () => AttrCell, _id: false }) + attrs: AttrCell[]; } // 百家学宫加成 @@ -70,8 +62,8 @@ export default class RoleCe extends BaseModel { @prop({ required: true }) roleId: string; // 角色 id - @prop({ required: true, type: GlobalAttr, _id: false }) - globalAttrs: GlobalAttr[] + @prop({ required: true, type: AttrCell, _id: false }) + globalAttrs: AttrCell[] @prop({ required: true, type: HeroAttr, _id: false }) heroAttrs: HeroAttr[] @@ -86,10 +78,14 @@ export default class RoleCe extends BaseModel { scrollAttrs: ScrollAttr[]; public static async findByRoleId(roleId: string) { - let result: RoleCeType[] = await RoleCeModel.find({ roleId }).lean(); + let result: RoleCeType = await RoleCeModel.findOne({ roleId }).lean(); return result; } + public static async updateRoleCe(roleId: string, update: RoleCeUpdate) { + let result: RoleCeType = await RoleCeModel.findOneAndUpdate({ roleId }, { $set: update }, { new: true, upsert: true }).lean(); + return result; + } } export const RoleCeModel = getModelForClass(RoleCe);