diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index c4cd6c876..2a76b7579 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -6,7 +6,7 @@ import { difference } from 'underscore'; * @Last Modified by: 梁桐川 * @Last Modified time: 2021-03-10 20:15:30 */ -import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY, MSG_SOURCE, QUALITY_TYPE, ROLE_SELECT, TASK_TYPE } from './../../../consts'; +import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY, MSG_SOURCE, QUALITY_TYPE, ROLE_SELECT, TASK_TYPE, KING_EXP_RATIO_TYPE } from './../../../consts'; import Role, { RoleModel } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; import { Application, BackendSession } from 'pinus'; @@ -593,7 +593,7 @@ export class ComBattleHandler { await ComBattleTeamModel.updateRewardSt(teamCode, roleId, true); const goods = await addItems(roleId, roleName, sid, roleSt.fixReward); - let actordata = await roleLevelup(roleId, warInfo.kingExp, session);// 主公升级经验 + let actordata = await roleLevelup(KING_EXP_RATIO_TYPE.BATTLE, roleId, warInfo.kingExp, session);// 主公升级经验 // 任务 await checkTaskWithGoods(roleId, sid, funcs, TASK_TYPE.COM_BATTLE_DROP, goods); diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts index 59b46df42..198046e6b 100644 --- a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -6,7 +6,7 @@ import { ExpeditionPointModel } from '../../../db/ExpeditionPoint'; import { RoleModel } from '../../../db/Role'; import { calculateSumCE, genCode } from '../../../pubUtils/util'; import { getPointRewardStatus, getResetRemainCnt, findOrCreateEnemies, getExpeditionStatus } from '../../../services/expeditionService'; -import { EXPEDITION_CONST, EXPEDITION_WAR_RECORD_STATUS, LINEUP_NUM, TASK_TYPE } from '../../../consts'; +import { EXPEDITION_CONST, EXPEDITION_WAR_RECORD_STATUS, KING_EXP_RATIO_TYPE, LINEUP_NUM, TASK_TYPE } from '../../../consts'; import { WarReward } from '../../../services/warRewardService'; import { addItems } from '../../../services/rewardService'; import { getAp, setAp } from '../../../services/actionPointService'; @@ -233,7 +233,7 @@ export class ExpeditionBattleHandler { let warReward = new WarReward(roleId, roleName, sid, battleId, isSuccess); let reward = await warReward.saveReward(1); - let actordata = await roleLevelup(roleId, isSuccess ? warInfo.kingExp : 0, session);// 主公升级经验 + let actordata = await roleLevelup(KING_EXP_RATIO_TYPE.BATTLE, roleId, isSuccess ? warInfo.kingExp : 0, session);// 主公升级经验 if (isSuccess) { // 更新下一关状态 await ExpeditionWarRecordModel.updateStatus(expeditionCode, expeditionId + 1, EXPEDITION_WAR_RECORD_STATUS.WAITING); diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index 64010fb18..b4eb21327 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { BattleRecordModel } from '../../../db/BattleRecord'; import { BattleSweepRecordModel } from '../../../db/BattleSweepRecord'; import { genCode } from '../../../pubUtils/util'; -import { WAR_TYPE, EVENT_STATUS, FUNC_OPT_TYPE, MSG_SOURCE, REDIS_KEY, TASK_TYPE } from '../../../consts'; +import { WAR_TYPE, EVENT_STATUS, FUNC_OPT_TYPE, MSG_SOURCE, REDIS_KEY, TASK_TYPE, KING_EXP_RATIO_TYPE } from '../../../consts'; import { checkDaily, checkDailyAndIncrease } from '../../../services/dailyBattleService'; import { checkTowerWar, towerBattleEnd } from '../../../services/battleService'; import { WarReward } from '../../../services/warRewardService'; @@ -257,7 +257,7 @@ export class NormalBattleHandler { }, true); let { status } = updateResult; - let actordata = await roleLevelup(roleId, isSuccess ? warInfo.kingExp : 0, session);// 主公升级经验 + let actordata = await roleLevelup(KING_EXP_RATIO_TYPE.BATTLE, roleId, isSuccess ? warInfo.kingExp : 0, session);// 主公升级经验 await checkTaskInBattleEnd(serverId, roleId, sid, funcs, battleId, dbHeroes, star); // 返回值: @@ -317,7 +317,7 @@ export class NormalBattleHandler { let warReward = new WarReward(roleId, roleName, sid, battleId, true); let result = await warReward.saveReward(count); - let actordata = await roleLevelup(roleId, warInfo.kingExp * count, session)// 主公升级经验 + let actordata = await roleLevelup(KING_EXP_RATIO_TYPE.BATTLE, roleId, warInfo.kingExp * count, session)// 主公升级经验 // 扫荡记录 await BattleSweepRecordModel.saveBattleSweepRecordById(roleId, battleId, { diff --git a/game-server/app/servers/role/handler/taskHandler.ts b/game-server/app/servers/role/handler/taskHandler.ts index f68249070..7b81e9968 100644 --- a/game-server/app/servers/role/handler/taskHandler.ts +++ b/game-server/app/servers/role/handler/taskHandler.ts @@ -1,6 +1,6 @@ import { Application, BackendSession, pinus, HandlerService, } from "pinus"; import { resResult, parseGoodStr, getRandSingleEelm } from "../../../pubUtils/util"; -import { STATUS, TASK_FUN_TYPE, SHOP_REFRESH_TYPE } from "../../../consts"; +import { STATUS, TASK_FUN_TYPE, SHOP_REFRESH_TYPE, KING_EXP_RATIO_TYPE } from "../../../consts"; import { gameData } from "../../../pubUtils/data"; import { UserTaskRecModel } from "../../../db/UserTaskRec"; import { addItems } from "../../../services/rewardService"; @@ -63,8 +63,7 @@ export class ShopHandler { } point = userTask.dailyTaskPoint; weeklyPoint = userTask.dailyTaskPointWeekly; - let { lv } = await RoleModel.findByRoleId(roleId, 'lv'); - expItem = { id: dic.exp.id, count: dic.exp.count * gameData.taskExp.get(lv) }; + expItem = { id: dic.exp.id, count: dic.exp.count }; } else if (type == TASK_FUN_TYPE.ACHIEVEMENT) { let dic = dicTask; let userTask = await UserTaskModel.incInfo(roleId, { achievementPoint: dic.point }); @@ -81,7 +80,7 @@ export class ShopHandler { let goods = await addItems(roleId, roleName, sid, taskReward); if (expItem && expItem.count > 0) { - await roleLevelup(roleId, expItem.count, session); + await roleLevelup(KING_EXP_RATIO_TYPE.TASK, roleId, expItem.count, session); goods.push(expItem); } diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index 2a2629352..e9f2a321b 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -4,7 +4,7 @@ import Role, { RoleModel, RoleType } from '../db/Role' import { getLvByExp, getExpByLv, gameData, getDicApByLv } from '../pubUtils/data'; import { updateUserInfo } from './redisService'; import { switchOnFunc } from './funcSwitchService'; -import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE, STATUS } from '../consts'; +import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE, STATUS, KING_EXP_RATIO_TYPE } from '../consts'; import { BackendSession, pinus } from 'pinus'; import { REDIS_KEY } from '../consts'; import { Rank } from './rankService'; @@ -14,14 +14,15 @@ import { RScriptRecordModel } from '../db/RScriptRecord'; import { setAp } from './actionPointService'; import { resResult } from '../pubUtils/util'; -export async function roleLevelup(roleId: string, kingExp: number = 0, session: BackendSession) { +export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kingExp: number = 0, session: BackendSession) { const serverId = session.get('serverId'); const sid = session.get('sid'); const funcs = session.get('funcs'); let role = await RoleModel.findByRoleId(roleId); let { lv = 1, exp = 0 } = role; let canGetExp = lv < gameData.maxPlayerLv.max; // 当主公超过最大级后,挑战结算不再获得经验值 - let newExp = canGetExp ? exp + kingExp : exp; + let ratio = gameData.kingExpRaio.get(lv)?.get(type)||0; + let newExp = canGetExp ? exp + Math.floor(kingExp * ratio) : exp; let newLv = getLvByExp(newExp); // 等级超过最高级之后,经验依然可以稍微溢出一些,以备下一次提升等级 // let nextExpObj = getExpByLv(newLv + 1); diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 3eef68c65..4fb771a49 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -460,7 +460,7 @@ export const FILENAME = { DIC_AP: 'dic_zyz_ap', DIC_AP_BUY_COST: 'dic_zyz_daliyAP', DIC_GK_NEWHERO: 'dic_zyz_gk_newhero', - DIC_TASK_EXP: 'dic_zyz_mainTaskExp', + DIC_EXP_RATIO: 'dic_zyz_mainTaskExp', DIC_GK_PROBATION: 'dic_zyz_gk_probation', DIC_QUENCH_QUALITY: 'dic_zyz_quench_quality', DIC_QUENCH_CONSUME: 'dic_zyz_quench_consume', @@ -709,4 +709,10 @@ export enum RECEIVE_MAIL_TYPE { export enum ROBOT_SYS_TYPE { COM_BTL = 1, PVP = 2 +} + +// 武将等级和经验比类型 +export enum KING_EXP_RATIO_TYPE { + TASK = 1, + BATTLE = 2, } \ No newline at end of file diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 87ddd8a75..a1594e81a 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -87,7 +87,7 @@ import { dicTaskTypeDesc, loadTaskType } from './dictionary/DicTaskType'; import { dicServerName, dicServerGroupName, loadServerName } from "./dictionary/DicServerName"; import { dicAp, loadAp, dicApMaxLevel } from './dictionary/DicAp'; import { dicApBuy, dicApMaxBuyTimes, loadApBuy } from "./dictionary/DicApBuy"; -import { dicTaskExp, loadTskExp} from './dictionary/DicTaskExp'; +import { dicKingExpRatio, loadKingExpRatio } from './dictionary/DicKingExpRatio'; import { dicQuenchByQuality, dicQuenchRangeByQuality, dicQuenchRangeByQualityAndGrade, loadQuenchQuality } from './dictionary/DicQuenchQuality'; import { dicQuenchConsume, loadQuenchConsume } from './dictionary/DicQuenchConsume'; import { dicHoliday, loadHoliday } from './dictionary/DicHoliday'; @@ -219,7 +219,7 @@ export const gameData = { apMaxLevel: dicApMaxLevel, apBuy: dicApBuy, apMaxBuyTimes: dicApMaxBuyTimes, - taskExp: dicTaskExp, + kingExpRaio: dicKingExpRatio, quenchRangeByQuality: dicQuenchRangeByQuality, quenchRangeByQualityAndGrade: dicQuenchRangeByQualityAndGrade, quenchConsume: dicQuenchConsume, @@ -864,7 +864,7 @@ function loadDatas() { loadServerName(); loadAp(); loadApBuy(); - loadTskExp(); + loadKingExpRatio(); loadQuenchQuality(); loadQuenchConsume(); loadEquipAttributeRatio(); diff --git a/shared/pubUtils/dictionary/DicKingExpRatio.ts b/shared/pubUtils/dictionary/DicKingExpRatio.ts new file mode 100644 index 000000000..7acc043a2 --- /dev/null +++ b/shared/pubUtils/dictionary/DicKingExpRatio.ts @@ -0,0 +1,25 @@ +// 任务奖励主公经验 +import { readFileAndParse, } from '../util' +import { FILENAME, KING_EXP_RATIO_TYPE, } from '../../consts' + +export interface DicKingExpRatio { + // 主公等级 + readonly lv: number; + // 主公经验 + readonly exp: number; + // 关卡获得的武将经验 + readonly expGk: number; +} + +export const dicKingExpRatio = new Map>(); +export function loadKingExpRatio() { + + let arr1 = readFileAndParse(FILENAME.DIC_EXP_RATIO); + arr1.forEach(o => { + let map = new Map(); + map.set(KING_EXP_RATIO_TYPE.TASK, o.exp); + map.set(KING_EXP_RATIO_TYPE.BATTLE, o.expGk); + dicKingExpRatio.set(o.lv, map); + }); + arr1 = undefined; +} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicTaskExp.ts b/shared/pubUtils/dictionary/DicTaskExp.ts deleted file mode 100644 index 539f20d80..000000000 --- a/shared/pubUtils/dictionary/DicTaskExp.ts +++ /dev/null @@ -1,20 +0,0 @@ -// 任务奖励主公经验 -import { readFileAndParse, } from '../util' -import { FILENAME, } from '../../consts' - -export interface DicTaskExp { - // 主公等级 - readonly lv: number; - // 主公经验 - readonly exp: number; -} - -export const dicTaskExp = new Map(); -export function loadTskExp() { - - let arr1 = readFileAndParse(FILENAME.DIC_TASK_EXP); - arr1.forEach(o => { - dicTaskExp.set(o.lv, o.exp); - }); - arr1 = undefined; -} \ No newline at end of file