添加主角等级升级逻辑

This commit is contained in:
luying
2020-10-20 20:18:15 +08:00
parent 3332d16cc6
commit 7b65c1856b
6 changed files with 71 additions and 24 deletions

View File

@@ -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
});
}

View File

@@ -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<number>,
}
}
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};
}

View File

@@ -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);

View File

@@ -9,6 +9,7 @@ const towerTaskInfos = new Map<number, any>();
const towerTasksByQuality = new Map<number, Array<number>>();
const heroInfos = new Map<number, any>();
const jobInfos = new Map<number, any>();
const levelInfos = new Map<number, {sum: number, cur: number}>();
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);
}

View File

@@ -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}]

View File

@@ -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}]