From 7b65c1856b36339f3eb73d816c1c28c8df5e8163 Mon Sep 17 00:00:00 2001 From: luying Date: Tue, 20 Oct 2020 20:18:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=BB=E8=A7=92=E7=AD=89?= =?UTF-8?q?=E7=BA=A7=E5=8D=87=E7=BA=A7=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/normalBattleHandler.ts | 31 +++++------------ game-server/app/services/battleService.ts | 23 ++++++++++++- shared/db/Role.ts | 6 ++++ shared/pubUtils/gamedata.ts | 33 +++++++++++++++++++ shared/resource/jsons/dic_zyz_charexp.json | 1 + shared/resource/jsons/dic_zyz_kingexp.json | 1 + 6 files changed, 71 insertions(+), 24 deletions(-) create mode 100644 shared/resource/jsons/dic_zyz_charexp.json create mode 100644 shared/resource/jsons/dic_zyz_kingexp.json diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index aedb2aa9d..f83ac789d 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -5,7 +5,7 @@ import { getWarById, } from '../../../pubUtils/gamedata'; import { genCode } from '../../../pubUtils/util'; import { WAR_TYPE, EVENT_START_BATTLE } from '../../../consts/consts'; import { checkDaily, checkDailyAndIncrease } from '../../../services/dailyBattleService'; -import { checkTowerWar, towerBattleEnd } from '../../../services/battleService'; +import { checkTowerWar, towerBattleEnd, roleLevelup } from '../../../services/battleService'; import { WarReward } from '../../../services/warRewardService'; import { getAp, setAp } from '../../../services/actionPointService'; import { setBattleStatus, startEvent } from '../../../services/eventSercive'; @@ -181,6 +181,8 @@ export class NormalBattleHandler { }, true); let { status } = updateResult; + let actordata = await roleLevelup(roleId, warInfo.kingExp)// 主公升级经验 + let curHeroes = []; for(let hid of heroes) { let hero = await HeroModel.findByHidAndRole(hid, roleId); @@ -201,28 +203,8 @@ export class NormalBattleHandler { goods: reward, towerBonus, towerReward, apJson, dailyNum, - kingExp: warInfo.kingExp, heroes: curHeroes, - actordata: [ - { - lv : 20, - exp : 700, - getExp : 1300, - mostExp : 2000 - }, - { - lv : 21, - exp : 0, - getExp : 3000, - mostExp : 3000 - }, - { - lv : 22, - exp : 0, - getExp : 700, - mostExp : 4000, - } - ] + ...actordata }); } @@ -266,6 +248,8 @@ export class NormalBattleHandler { let warReward = new WarReward(roleId, roleName, battleId, true); let result = await warReward.saveReward(count); + let actordata = await roleLevelup(roleId, warInfo.kingExp * count)// 主公升级经验 + // 扫荡记录 await BattleSweepRecordModel.saveBattleSweepRecordById(roleId, battleId, { $set: { @@ -280,7 +264,8 @@ export class NormalBattleHandler { battleId, count, goods: result, apJson, - dailyNum + dailyNum, + ...actordata }); } diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index 1a4efda79..c62996451 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -5,7 +5,7 @@ import { HANG_UP_CONSTS } from './../consts/consts'; import { BattleRecordModel } from './../db/BattleRecord'; import { TowerRecordModel } from './../db/TowerRecord'; import { RoleModel } from './../db/Role'; -import { getHeroInfoById, getJobInfoById, getTowerDataByLv } from "../pubUtils/gamedata" +import { getHeroInfoById, getJobInfoById, getTowerDataByLv, getLvByExp, getExpByLv } from "../pubUtils/gamedata" import { decodeArrayStr, shouldRefresh } from '../pubUtils/util'; import { handleFixedReward } from './rewardService'; import { resResult } from '../pubUtils/util'; @@ -180,4 +180,25 @@ export async function checkTaskConditions(roleId: string, heroes: Array, } } return res; +} + + +export async function roleLevelup(roleId: string, kingExp: number) { + let role = await RoleModel.findByRoleId(roleId); + let {lv = 1, exp = 0} = role; + exp += kingExp; + let newLv = getLvByExp(exp); + await RoleModel.levelup(roleId, newLv, exp); + let actordata = []; + for(let i = lv; i <= newLv; i++) { + let {sum, cur} = getExpByLv(i); + let getExp = sum > exp? sum - exp: 0; + actordata.push({ + lv : i, + exp : cur - getExp, + getExp : getExp, + mostExp : cur + }) + } + return {actordata, lv, exp}; } \ No newline at end of file diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 93ef62603..f0337b5d6 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -170,6 +170,12 @@ export default class Role extends BaseModel { let role = await RoleModel.findOneAndUpdate({roleId}, {$inc: { expeditionPoint: point }}, {new: true}).lean(lean); return role; } + + public static async levelup(roleId: string, lv: number, exp: number, lean = true) { + console.log(lv, exp) + let role = await RoleModel.findOneAndUpdate({roleId}, {$set: { exp, lv }}, {new: true}).lean(lean); + return role; + } } export const RoleModel = getModelForClass(Role); diff --git a/shared/pubUtils/gamedata.ts b/shared/pubUtils/gamedata.ts index 89df521bc..0c06922d4 100644 --- a/shared/pubUtils/gamedata.ts +++ b/shared/pubUtils/gamedata.ts @@ -9,6 +9,7 @@ const towerTaskInfos = new Map(); const towerTasksByQuality = new Map>(); const heroInfos = new Map(); const jobInfos = new Map(); +const levelInfos = new Map(); function parseWarData() { let result = null; @@ -66,6 +67,19 @@ function parseJobData() { }); } + +function parseLevelInfo() { + const jobFile = 'dic_zyz_kingexp'; + const levelData = gamedata['jsons'][jobFile] || []; + let exp = 0; + levelData.forEach(elem => { + if (elem && elem.level) { + exp += elem.exp; + levelInfos.set(elem.level, { sum: exp, cur: elem.exp }); + } + }); +} + function initData (folder: string) { if(!gamedata.hasOwnProperty(folder)) { gamedata[folder] = {}; @@ -96,6 +110,7 @@ function parseData() { parseTowerTaskData(); parseHeroData(); parseJobData(); + parseLevelInfo(); } initData('jsons'); // 加载一般json @@ -151,4 +166,22 @@ export function getHeroInfoById(hid: number) { export function getJobInfoById(jid: number) { const jobInfo = jobInfos.get(jid); return jobInfo; +} + +export function getLvByExp(exp: number) { + let curLv = 0; + let entries = levelInfos.entries(); + for (let [lv, {sum}] of entries) { + console.log(lv, sum) + if(exp < sum) { + curLv = lv; break; + } + } + + return curLv; +} + +export function getExpByLv(lv: number) { + console.log(lv) + return levelInfos.get(lv); } \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_charexp.json b/shared/resource/jsons/dic_zyz_charexp.json new file mode 100644 index 000000000..f2e30297e --- /dev/null +++ b/shared/resource/jsons/dic_zyz_charexp.json @@ -0,0 +1 @@ +[{"level":1,"exp":1000},{"level":2,"exp":4000},{"level":3,"exp":9000},{"level":4,"exp":16000},{"level":5,"exp":25000},{"level":6,"exp":36000},{"level":7,"exp":49000},{"level":8,"exp":64000},{"level":9,"exp":81000},{"level":10,"exp":100000},{"level":11,"exp":121000},{"level":12,"exp":144000},{"level":13,"exp":169000},{"level":14,"exp":196000},{"level":15,"exp":225000},{"level":16,"exp":256000},{"level":17,"exp":289000},{"level":18,"exp":324000},{"level":19,"exp":361000},{"level":20,"exp":400000},{"level":21,"exp":441000},{"level":22,"exp":484000},{"level":23,"exp":529000},{"level":24,"exp":576000},{"level":25,"exp":625000},{"level":26,"exp":676000},{"level":27,"exp":729000},{"level":28,"exp":784000},{"level":29,"exp":841000},{"level":30,"exp":900000},{"level":31,"exp":961000},{"level":32,"exp":1024000},{"level":33,"exp":1089000},{"level":34,"exp":1156000},{"level":35,"exp":1225000},{"level":36,"exp":1296000},{"level":37,"exp":1369000},{"level":38,"exp":1444000},{"level":39,"exp":1521000},{"level":40,"exp":1600000},{"level":41,"exp":1681000},{"level":42,"exp":1764000},{"level":43,"exp":1849000},{"level":44,"exp":1936000},{"level":45,"exp":2025000},{"level":46,"exp":2116000},{"level":47,"exp":2209000},{"level":48,"exp":2304000},{"level":49,"exp":2401000},{"level":50,"exp":2500000},{"level":51,"exp":2601000},{"level":52,"exp":2704000},{"level":53,"exp":2809000},{"level":54,"exp":2916000},{"level":55,"exp":3025000},{"level":56,"exp":3136000},{"level":57,"exp":3249000},{"level":58,"exp":3364000},{"level":59,"exp":3481000},{"level":60,"exp":3600000},{"level":61,"exp":3721000},{"level":62,"exp":3844000},{"level":63,"exp":3969000},{"level":64,"exp":4096000},{"level":65,"exp":4225000},{"level":66,"exp":4356000},{"level":67,"exp":4489000},{"level":68,"exp":4624000},{"level":69,"exp":4761000},{"level":70,"exp":4900000},{"level":71,"exp":5041000},{"level":72,"exp":5184000},{"level":73,"exp":5329000},{"level":74,"exp":5476000},{"level":75,"exp":5625000},{"level":76,"exp":5776000},{"level":77,"exp":5929000},{"level":78,"exp":6084000},{"level":79,"exp":6241000},{"level":80,"exp":6400000},{"level":81,"exp":6561000},{"level":82,"exp":6724000},{"level":83,"exp":6889000},{"level":84,"exp":7056000},{"level":85,"exp":7225000},{"level":86,"exp":7396000},{"level":87,"exp":7569000},{"level":88,"exp":7744000},{"level":89,"exp":7921000},{"level":90,"exp":8100000},{"level":91,"exp":8281000},{"level":92,"exp":8464000},{"level":93,"exp":8649000},{"level":94,"exp":8836000},{"level":95,"exp":9025000},{"level":96,"exp":9216000},{"level":97,"exp":9409000},{"level":98,"exp":9604000},{"level":99,"exp":9801000},{"level":100,"exp":10000000}] \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_kingexp.json b/shared/resource/jsons/dic_zyz_kingexp.json new file mode 100644 index 000000000..a47e2bba9 --- /dev/null +++ b/shared/resource/jsons/dic_zyz_kingexp.json @@ -0,0 +1 @@ +[{"level":1,"exp":100},{"level":2,"exp":400},{"level":3,"exp":900},{"level":4,"exp":1600},{"level":5,"exp":2500},{"level":6,"exp":3600},{"level":7,"exp":4900},{"level":8,"exp":6400},{"level":9,"exp":8100},{"level":10,"exp":10000},{"level":11,"exp":12100},{"level":12,"exp":14400},{"level":13,"exp":16900},{"level":14,"exp":19600},{"level":15,"exp":22500},{"level":16,"exp":25600},{"level":17,"exp":28900},{"level":18,"exp":32400},{"level":19,"exp":36100},{"level":20,"exp":40000},{"level":21,"exp":44100},{"level":22,"exp":48400},{"level":23,"exp":52900},{"level":24,"exp":57600},{"level":25,"exp":62500},{"level":26,"exp":67600},{"level":27,"exp":72900},{"level":28,"exp":78400},{"level":29,"exp":84100},{"level":30,"exp":90000},{"level":31,"exp":96100},{"level":32,"exp":102400},{"level":33,"exp":108900},{"level":34,"exp":115600},{"level":35,"exp":122500},{"level":36,"exp":129600},{"level":37,"exp":136900},{"level":38,"exp":144400},{"level":39,"exp":152100},{"level":40,"exp":160000},{"level":41,"exp":168100},{"level":42,"exp":176400},{"level":43,"exp":184900},{"level":44,"exp":193600},{"level":45,"exp":202500},{"level":46,"exp":211600},{"level":47,"exp":220900},{"level":48,"exp":230400},{"level":49,"exp":240100},{"level":50,"exp":250000},{"level":51,"exp":260100},{"level":52,"exp":270400},{"level":53,"exp":280900},{"level":54,"exp":291600},{"level":55,"exp":302500},{"level":56,"exp":313600},{"level":57,"exp":324900},{"level":58,"exp":336400},{"level":59,"exp":348100},{"level":60,"exp":360000},{"level":61,"exp":372100},{"level":62,"exp":384400},{"level":63,"exp":396900},{"level":64,"exp":409600},{"level":65,"exp":422500},{"level":66,"exp":435600},{"level":67,"exp":448900},{"level":68,"exp":462400},{"level":69,"exp":476100},{"level":70,"exp":490000},{"level":71,"exp":504100},{"level":72,"exp":518400},{"level":73,"exp":532900},{"level":74,"exp":547600},{"level":75,"exp":562500},{"level":76,"exp":577600},{"level":77,"exp":592900},{"level":78,"exp":608400},{"level":79,"exp":624100},{"level":80,"exp":640000},{"level":81,"exp":656100},{"level":82,"exp":672400},{"level":83,"exp":688900},{"level":84,"exp":705600},{"level":85,"exp":722500},{"level":86,"exp":739600},{"level":87,"exp":756900},{"level":88,"exp":774400},{"level":89,"exp":792100},{"level":90,"exp":810000},{"level":91,"exp":828100},{"level":92,"exp":846400},{"level":93,"exp":864900},{"level":94,"exp":883600},{"level":95,"exp":902500},{"level":96,"exp":921600},{"level":97,"exp":940900},{"level":98,"exp":960400},{"level":99,"exp":980100},{"level":100,"exp":1000000}] \ No newline at end of file