diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 916ff257b..b13a5138b 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -1,19 +1,16 @@ import {Application, BackendSession, createTcpMailBox, ChannelService} from 'pinus'; import { handleCost } from '../../../services/rewardService'; import { calPlayerCeAndSave, getAllAttrStage } from '../../../services/playerCeService'; -import { resResult, getItems, decodeStr } from '../../../pubUtils/util'; +import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; import {HeroModel} from '../../../db/Hero'; import {CURRENCY_BY_TYPE, CURRENCY_TYPE, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE, ITID} from '../../../consts/consts'; -import {getJobInfoById, getMaxGradeByjobClass, getHidAndLevelByShipId, getGoodById, getJobByGradeAndClass, getFriendShipById, getFriendShipLevels, getFashionsById} from '../../../pubUtils/gamedata'; import { ABI_STAGE } from '../../../consts/abilityConst'; import { RoleModel } from '../../../db/Role'; import { ItemModel } from '../../../db/Item'; -import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp } from '../../../pubUtils/data'; +import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getFriendShipById } from '../../../pubUtils/data'; import { RewardInter } from '../../../pubUtils/interface'; -const _ = require('underscore'); - export default function(app: Application) { return new HeroHandler(app); } @@ -276,7 +273,7 @@ export class HeroHandler { let hero = await HeroModel.findByHidAndRole(hid, roleId, false); if (!hero) return resResult(STATUS.HERO_NOT_FIND); - let heroJob = getJobInfoById(hero.job); + let heroJob = gameData.job.get(hero.job); let nextHeroJob = getJobByGradeAndClass(heroJob.job_class, heroJob.grade + 1); if (nextHeroJob.unlockLevel > hero.lv) return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL); @@ -284,8 +281,7 @@ export class HeroHandler { return resResult(STATUS.HERO_JOB_STAGE_REACH_MAX_STAGE); if (hero.job >= getMaxGradeByjobClass(heroJob.job_class)) return resResult(STATUS.HERO_JOB_REACH_MAX_STAGE); - let cousumeGoods = getItems(heroJob.trainingConsume); - let result = await handleCost(roleId, sid, cousumeGoods); + let result = await handleCost(roleId, sid, heroJob.trainingConsume); if(!result) { return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); } @@ -304,14 +300,13 @@ export class HeroHandler { if (!hero) return resResult(STATUS.HERO_NOT_FIND); let curJob = hero.job; - let heroJob = getJobInfoById(curJob); + let heroJob = gameData.job.get(curJob); let nextHeroJob = getJobByGradeAndClass(heroJob.job_class, heroJob.grade + 1); if (nextHeroJob.unlockLevel > hero.lv) return resResult(STATUS.NOT_REACH_UNLOCK_LEVEL); if (curJob >= getMaxGradeByjobClass(heroJob.job_class)) return resResult(STATUS.HERO_JOB_REACH_MAX_STAGE); - let cousumeGoods = getItems(heroJob.upGradeConsume); - let result = await handleCost(roleId, sid, cousumeGoods); + let result = await handleCost(roleId, sid, heroJob.upGradeConsume); if(!result) { return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); } @@ -327,7 +322,7 @@ export class HeroHandler { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); let { shipId } = msg; - let shipHidAndLevel = getHidAndLevelByShipId(shipId); + let shipHidAndLevel = gameData.friendShipHidAandIds.get(shipId); if (!shipHidAndLevel) return resResult(STATUS.HERO_CONECTION_IS_NOT_EXIT); let hero = await HeroModel.findByHidAndRole(shipHidAndLevel.actorId, roleId, false); @@ -380,7 +375,7 @@ export class HeroHandler { let lastLv = hero.favourLv; if (!hero) return resResult(STATUS.HERO_NOT_FIND); - let friendShipLevels = getFriendShipLevels(); + let friendShipLevels = gameData.friendShipLevel; if (friendShipLevels[friendShipLevels.length - 1].level <= hero.favourLv) return resResult(STATUS.HERO_FAVOUR_LEVEL_REACH_MAXT); //计算消耗物品转化的经验 @@ -421,7 +416,7 @@ export class HeroHandler { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); let { id } = msg; - let skinInfo = getFashionsById(id); + let skinInfo = gameData.fashion.get(id); if (!skinInfo) return resResult(STATUS.HERO_SKIN_NOT_FIND); let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId, false); diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index b849f1425..ae6dee11f 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -62,6 +62,12 @@ export const gameData = { friendShipLevel: dicFriendShipLevel }; +// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据 + +/** + * 根据主公当前经验获得当前等级 + * @param exp 累积经验 + */ export function getLvByExp(exp: number) { let curLv = 0; let entries = gameData.kingexp.entries(); @@ -73,10 +79,18 @@ export function getLvByExp(exp: number) { return curLv; } +/** + * 根据主公当前等级,获得累积经验,1=> 1级满经验 + * @param lv 等级 + */ export function getExpByLv(lv: number) { return gameData.kingexp.get(lv); } +/** + * 根据武将当前经验获得当前等级 + * @param exp 累积经验 + */ export function getHeroLvByExp(exp: number) { let curLv = 0; let entries = gameData.charexp.entries(); @@ -88,6 +102,10 @@ export function getHeroLvByExp(exp: number) { return curLv; } +/** + * 根据武将当前等级,获得累积经验,1=> 1级满经验 + * @param lv + */ export function getHeroExpByLv(lv: number) { return gameData.charexp.get(lv); } @@ -137,4 +155,17 @@ export function getHeroStarByQuality(quality: number, star: number) { export function getHeroWakeByQuality(quality: number, star: number) { return gameData.heroWake.get(`${quality}_${star}`); +} + +export function getMaxGradeByjobClass(jobClass: number) { + const job = gameData.jobClassMaxGrades.get(jobClass); + return job?.jobid; +} + +export function getJobByGradeAndClass(jobClass: number, grade: number) { + return gameData.jobClassAndgrades.get(jobClass +'_' + grade); +} + +export function getFriendShipById(shipId: number, level: number) { + return gameData.friendShips.get(shipId +'_' + level); } \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicHeroQualityUp.ts b/shared/pubUtils/dictionary/DicHeroQualityUp.ts index 491767d15..e0f54b14e 100644 --- a/shared/pubUtils/dictionary/DicHeroQualityUp.ts +++ b/shared/pubUtils/dictionary/DicHeroQualityUp.ts @@ -1,5 +1,5 @@ // 武将技能表 -import {parseReward, decodeArrayListStr, readJsonFile} from '../util' +import {parseReward, readJsonFile} from '../util' import { FILENAME } from '../../consts/consts' import { RewardInter } from '../interface'; diff --git a/shared/pubUtils/dictionary/DicJob.ts b/shared/pubUtils/dictionary/DicJob.ts index 04109a669..3fd87e466 100644 --- a/shared/pubUtils/dictionary/DicJob.ts +++ b/shared/pubUtils/dictionary/DicJob.ts @@ -1,6 +1,7 @@ // 兵种表 -import {readJsonFile, parseNumberList} from '../util' +import {readJsonFile, parseNumberList, parseReward} from '../util' import { FILENAME } from '../../consts/consts' +import { RewardInter } from '../interface'; export interface DicJob { // 兵种id @@ -17,6 +18,10 @@ export interface DicJob { readonly type: number; // 特性 readonly seid: Array; + // 训练消耗 + readonly trainingConsume: Array; + // 升阶消耗 + readonly upGradeConsume: Array; // 生命训练提升 readonly hp: number; // 攻击力训练提升 @@ -41,6 +46,8 @@ export const jobClassAndgrades = new Map { o.seid = parseNumberList(o.seid); + o.trainingConsume = parseReward(o.trainingConsume); + o.upGradeConsume = parseReward(o.upGradeConsume); dicJob.set(o.jobid, o); let jobClass = jobClassMaxGrades.get(o.job_class); if (!!jobClass && jobClass.grade < o.grade) {