diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 9c25d24cd..7c0de881b 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -51,23 +51,23 @@ export class RoleHandler { hid, lv: DEFAULT_HERO_LV, exp: getHeroExpByLv(DEFAULT_HERO_LV - 1) || 0 }); } - let heroes = await createHeroes(roleId, roleName, sid, serverId, funcs, heroInfos); + await createHeroes(roleId, roleName, sid, serverId, funcs, heroInfos); session.set('roleName', roleName); session.push('roleName', () => { }); let items = [].concat(DEFAULT_ITEMS, DEFAULT_EQUIPS, [getGoldObject(DEFAULT_GOLD)], [getCoinObject(DEFAULT_COIN)]); await addItems(roleId, roleName, sid, items); - role = await RoleModel.updateRoleInfo(roleId, { hasInit: true, roleName }, true) + let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.INIT, sid, roleId, { hasInit: true, roleName }); let battleId = SCRIPT.SCRIPT_BATTLE_ID; let warInfo = gameData.war.get(battleId); await RScriptRecordModel.setScript(roleId, battleId, warInfo.warType, 2, SCRIPT.SCRIPT_NAME); - await checkPvp(role); + await checkPvp(calResult.role); return resResult(STATUS.SUCCESS, { - roleId, roleName, ...heroes + roleId, roleName, heroes: calResult.heros }) } @@ -98,14 +98,14 @@ export class RoleHandler { return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let update = { title: title + 1 } - role = await calAllHeroCe(HERO_SYSTEM_TYPE.TITLE, sid, roleId, update); + let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TITLE, sid, roleId, update); // 任务 await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TITLE, 1, false, { title }); //成长任务 await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.ROLE_TITLE, update.title) - return resResult(STATUS.SUCCESS, { roleId, title: role.title }); + return resResult(STATUS.SUCCESS, { roleId: calResult.role, title: role.title }); } //神像强化 @@ -143,12 +143,12 @@ export class RoleHandler { if (!result) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); - role = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH, sid, roleId, { teraphs }, [id]); + let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH, sid, roleId, { teraphs }, [id]); // 任务 await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, count, true, {}); - return resResult(STATUS.SUCCESS, { roleId, teraphs: role.teraphs }); + return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs }); } //神像进阶 @@ -187,12 +187,12 @@ export class RoleHandler { if (!result) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); - role = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH_UP, sid, roleId, { teraphs }, [id]); + let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH_UP, sid, roleId, { teraphs }, [id]); // 神像进阶,进阶一次就触发一次礼包弹框 await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.ROLE_TERAPH_STAGE_UP, 1) - return resResult(STATUS.SUCCESS, { roleId, teraphs: role.teraphs }); + return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs }); } // 获得百家学宫 diff --git a/game-server/app/services/playerCeService.ts b/game-server/app/services/playerCeService.ts index 8d320d2c9..de585f4c0 100644 --- a/game-server/app/services/playerCeService.ts +++ b/game-server/app/services/playerCeService.ts @@ -22,7 +22,8 @@ interface calPlayerReturn { guild?: GuildType; hero?: HeroType; pushHeros: {hid: number, ce: number, incHeroCe: number}[]; - topLineupCe: number + topLineupCe: number; + heros?: HeroType[] } //修改并下发战力 @@ -53,7 +54,7 @@ export async function calAllHeroCe(type:number, sid: string, roleId: string, upd if(result.pushHeros.length > 0) { return await pushCalAllHeroCe(roleId, sid, result); } else { - return result.role; + return result; } } @@ -68,7 +69,7 @@ export async function pushCalAllHeroCe(roleId: string, sid: string, calResult: c } updateRank(roleId, serverId, topLineupCe, role, pushHeros); - return role; + return calResult; } diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 119cc5c11..6a1f8f7ff 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -3,7 +3,6 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose'; import User from './User'; import { shouldRefresh, reduceCe } from '../pubUtils/util'; -import { initRoleAtrr } from '../pubUtils/playerCe'; import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil'; import { Figure } from '../domain/dbGeneral'; import { BAG, EXTERIOR } from '../pubUtils/dicParam'; @@ -330,7 +329,6 @@ export default class Role extends BaseModel { const doc = new RoleModel(); const update = Object.assign(doc.toJSON(), roleInfo, { userInfo: user, serverType: user.serverType, serverId }); const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean); - initRoleAtrr(role); return role; } diff --git a/shared/pubUtils/dictionary/DicJob.ts b/shared/pubUtils/dictionary/DicJob.ts index 5d94bd40a..a4c079f1c 100644 --- a/shared/pubUtils/dictionary/DicJob.ts +++ b/shared/pubUtils/dictionary/DicJob.ts @@ -63,7 +63,7 @@ function parseCeAttr(maxStage: number, str: string) { if (!str) return result; let decodeArr = decodeArrayListStr(str); for (let i = 1; i <= maxStage; i++) { - let [id, attr] = decodeArr[i]||[i.toString(), "0"]; + let [id, attr] = decodeArr[i - 1]||[i.toString(), "0"]; if (isNaN(parseInt(id)) || isNaN(parseInt(attr))) { throw new Error('data table format wrong'); } diff --git a/shared/pubUtils/playerCe.ts b/shared/pubUtils/playerCe.ts index 41c6a4308..35eecc803 100644 --- a/shared/pubUtils/playerCe.ts +++ b/shared/pubUtils/playerCe.ts @@ -62,7 +62,7 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU let heros = await HeroModel.findByRole(roleId); let roleAttrs = await reCalRoleAttr(type, heros, role, update, args); - if(!roleAttrs) return {role, pushHeros: [], ce: role.ce, topLineupCe: role.topLineupCe, serverId: role.serverId}; // 无加成 + if(!roleAttrs) return {role, pushHeros: [], ce: role.ce, topLineupCe: role.topLineupCe, serverId: role.serverId, heros }; // 无加成 let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>(); @@ -92,7 +92,7 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU role = await RoleModel.updateRoleInfo(roleId, update); let guild = await GuildModel.updateCe(roleId, allIncCe); // 公会更新战力 - return { role, pushHeros, ce: role.ce, topLineupCe: role.topLineupCe, guild, serverId: role.serverId } + return { role, pushHeros, ce: role.ce, topLineupCe: role.topLineupCe, guild, serverId: role.serverId, heros } } @@ -100,6 +100,9 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU async function reCalRoleAttr(type: number, heros: Array, role: RoleType, update: RoleUpdate, args: Array) { let { attr: roleAttrs } = role; switch (type) { + case HERO_SYSTEM_TYPE.INIT: + roleAttrs = calRoleInit(role); + break; case HERO_SYSTEM_TYPE.ADD_SKIN: roleAttrs = calHeroAddSkin(role, args); break; @@ -253,6 +256,22 @@ export function calHeroInitIncAttr(hero: HeroType, addSeidList: Array, r // } } +/** + * 初始全局加成 + * @param args + * @param ceAttr + */ + function calRoleInit(role: RoleType) { + let { attr: roleAttrs, teraphs } = role; + delete role._id; + roleAttrs = calTitle({...role, title: 0}, role); // 计算初始爵位带来的全局 + for(let {id} of teraphs) { + roleAttrs = calTeraphMainAttr({ ...role, teraphs: [] }, role, id); + } + role.attr = roleAttrs; + return roleAttrs; +} + /** * 添加皮肤全局加成 * @param args @@ -617,6 +636,7 @@ export function calHeroFavourUpIncAttr(originHero: HeroType, update: HeroUpdate) let { favourLv: oldFavourLv, attr: heroAttrs } = originHero; let { favourLv = oldFavourLv } = update; + let currentFiendShipLevel = gameData.friendShipLevelMap.get(favourLv); let difAdd = currentFiendShipLevel.add; if (oldFavourLv && oldFavourLv > 0) { // 减上一级好感 @@ -627,7 +647,7 @@ export function calHeroFavourUpIncAttr(originHero: HeroType, update: HeroUpdate) for (let {shipId, level} of originHero.connections) { let dicHeroFriendShip = getFriendShipById(shipId, level); for (let attr of dicHeroFriendShip.attributes) { - let fixUp = attr.number * (HERO_CE_RATIO + difAdd); + let fixUp = (attr.number + difAdd ) * HERO_CE_RATIO; updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); } } @@ -1050,22 +1070,21 @@ function calTitle(role: RoleType, update: RoleUpdate) { let { title: oldTitle, attr: roleAttrs } = role; let { title: newTitle = oldTitle } = update; - for(let title = oldTitle; title <= newTitle; title++) { - let dicTitle = gameData.title.get(title); - if(!dicTitle) break; - - for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) { - if(dicTitle.mainAttrValue.has(i)) { - let fixUp = dicTitle.mainAttrValue.get(i) * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, i, { inc: { fixUp }}); - } - if(dicTitle.assiAttrValue.has(i)) { - let fixUp = dicTitle.assiAttrValue.get(i) * HERO_CE_RATIO; - updateRoleAttr(roleAttrs, i, { inc: { fixUp }}); - } + let dicOldTitle = gameData.title.get(oldTitle)||{ mainAttrValue: new Map(), assiAttrValue: new Map() }; + let dicNewTitle = gameData.title.get(newTitle); + console.log('***** oldTitle, newTitle', oldTitle, newTitle); + + for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) { + if (dicNewTitle.mainAttrValue.has(i) || dicOldTitle.mainAttrValue.has(i)) { + console.log() + let fixUp = ((dicNewTitle.mainAttrValue.get(i) || 0) - (dicOldTitle.mainAttrValue.get(i) || 0)) * HERO_CE_RATIO; + updateRoleAttr(roleAttrs, i, { inc: { fixUp } }); + } + if (dicNewTitle.assiAttrValue.has(i) || dicOldTitle.mainAttrValue.has(i)) { + let fixUp = ((dicNewTitle.assiAttrValue.get(i) || 0) - (dicOldTitle.assiAttrValue.get(i) || 0)) * HERO_CE_RATIO; + updateRoleAttr(roleAttrs, i, { inc: { fixUp } }); } } - return roleAttrs; } @@ -1124,13 +1143,4 @@ function calTeraphAssistAttr(role: RoleType, update: RoleUpdate, id: number) { updateRoleAttr(roleAttrs, attrId, { inc: { ratioUp } }); }); return roleAttrs; -} - -/** - * 全局加成初始化 - * @param role - */ -export function initRoleAtrr(role: RoleType) { - delete role._id; - calTitle({...role, title: 0}, role); // 计算初始爵位带来的全局 -} +} \ No newline at end of file