全局:加载json方法全部改为最新

This commit is contained in:
luying
2021-05-06 20:25:05 +08:00
parent 2ef00e8179
commit 0315269387
36 changed files with 401 additions and 920 deletions
+30 -31
View File
@@ -5,27 +5,26 @@ import { HANG_UP_CONSTS, TOWER_TASK_CONST, REDIS_KEY, TASK_TYPE } from './../con
import { BattleRecordModel } from './../db/BattleRecord';
import { TowerRecordModel } from './../db/TowerRecord';
import { RoleModel } from './../db/Role';
import { getHeroInfoById, getJobInfoById, getTowerDataByLv, getTaskById, getGamedata, getWarJsons } from "../pubUtils/gamedata"
import { decodeArrayStr, shouldRefresh, resResult, decodeStr, cal, getRandomWithWeight, getRefTime, decodeStrSingle, genCode } from '../pubUtils/util';
import { shouldRefresh, resResult, cal, getRandEelmWithWeight, getRefTime } from '../pubUtils/util';
import { STATUS } from '../consts/statusCode';
import { HangUpSpdUpRecModel } from '../db/HangUpSpdUpRec';
import { TowerTaskRecModel } from '../db/TowerTaskRec';
import { cloneDeep } from 'lodash';
import { Rank } from './rankService';
import { checkTask } from './taskService';
import { getRandExpedition } from '../pubUtils/data';
import { getRandExpedition, gameData } from '../pubUtils/data';
import { ItemInter, RewardInter } from '../pubUtils/interface';
export async function checkTowerWar(roleId: string, battleId: number, heroes: Array<number>) {
const battleIdStr = `${battleId}`;
let { towerLv } = await RoleModel.findByRoleId(roleId);
const towerInfo = getTowerDataByLv(towerLv);
const towerInfo = gameData.tower.get(towerLv);
if (!towerInfo) {
console.error(`天梯层数异常,lv ${towerLv} by ${roleId}`);
return { status: -1, resResult: resResult(STATUS.TOWER_INFO_NOT_FOUND) };
}
const warIds = decodeArrayStr(towerInfo.warArray, '&') || [];
const warIds = towerInfo.warArray;
if (warIds.indexOf(battleIdStr) === -1) {
if (warIds.indexOf(battleId) === -1) {
return { status: -1, resResult: resResult(STATUS.TOWER_WRONG_BATTLE_ID) };
}
@@ -70,24 +69,24 @@ export async function towerBattleEnd(sid: string, funcs: number[], roleId: strin
}
})
let newRec = await TowerRecordModel.updateRecord(roleId, towerLv, battleCode, battleId, heroes, inc);
let towerReward = null;
let towerReward: RewardInter[] = null;
if (inc === 1) {
let role = await RoleModel.towerLvUp(roleId);
// 更新redis
let r = new Rank(REDIS_KEY.TOWER_RANK, { serverId });
await r.setRankWithRoleInfo(roleId, towerLv + 1, role.towerUpTime.getTime(), role);
const nextTowerInfo = getTowerDataByLv(towerLv + 1);
const nextTowerInfo = gameData.tower.get(towerLv + 1);
if (nextTowerInfo) {
const { warArray } = nextTowerInfo;
const sts = decodeArrayStr(warArray, '&').map(id => {
return {warId: parseInt(id), status: false};
const sts = warArray.map(id => {
return {warId: id, status: false};
});
await TowerRecordModel.createRecord({roleId, lv: towerLv + 1, warStatus: sts});
}
const { reward } = getTowerDataByLv(towerLv);
const { reward } = gameData.tower.get(towerLv);
if (reward) towerReward = reward;
if (towerLv + 1 == HANG_UP_CONSTS.ENABLE_LV) {
await startHangUp(roleId, roleName);
@@ -129,10 +128,10 @@ export async function calcuHangUpReward(roleId: string, speedUp = false, speedUp
return {status: -1, resResult: resResult(STATUS.TOWER_HANG_UP_NOT_START)}
}
let towerInfo = getTowerDataByLv(towerLv - 1); // towerLv 是当前层,奖励计算按照已经通过的层,即上一层
let towerInfo = gameData.tower.get(towerLv - 1); // towerLv 是当前层,奖励计算按照已经通过的层,即上一层
let timeReward = []; // 奖励
let needReceiveGoods = []; // 由于小数,未能领取的奖励
let baseReward = decodeStr('decimalReward', towerInfo.rewardOfcollect);
let baseReward = towerInfo.rewardOfcollect;
let { startTime } = await HangUpRecordModel.getCurRec(roleId);
let endTime = curTime; // 挂机结束时间,现在到开始时间,经历了10的倍数的时间
@@ -217,7 +216,7 @@ async function checkCond(roleId: string, heroes, type: number, param: number, cn
case 2:
for(let seqId of heroes) {
let {hid} = await HeroModel.findBySeqIdAndRole(seqId, roleId);
const hInfo = getHeroInfoById(hid);
const hInfo = gameData.hero.get(hid);
if (hInfo.camp === param) {
heroCnt++;
}
@@ -226,8 +225,8 @@ async function checkCond(roleId: string, heroes, type: number, param: number, cn
case 3:
for(let seqId of heroes) {
let {hid} = await HeroModel.findBySeqIdAndRole(seqId, roleId);
const hInfo = getHeroInfoById(hid);
if (getJobInfoById(hInfo.jobid).job_class === param) {
const hInfo = gameData.hero.get(hid);
if (gameData.job.get(hInfo.jobid).job_class === param) {
heroCnt++;
}
}
@@ -241,12 +240,11 @@ async function checkCond(roleId: string, heroes, type: number, param: number, cn
return false;
}
export async function checkTaskConditions(roleId: string, heroes: Array<number>, conditionsStr: string) {
let condition = decodeStr('towerTaskCondition', conditionsStr);
export async function checkTaskConditions(roleId: string, heroes: number[], condition: { type: number, param: number, count: number }[]) {
let res = true;
for (let {type, param, cnt} of condition) {
const checkRes = await checkCond(roleId, heroes, type, param, cnt);
for (let {type, param, count} of condition) {
const checkRes = await checkCond(roleId, heroes, type, param, count);
if (!checkRes) {
res = false;
break;
@@ -264,10 +262,9 @@ export async function checkTaskConditions(roleId: string, heroes: Array<number>,
*/
export async function createCurTasks(towerLv: number, batchCode: string, roleId: string, roleName: string, hideNum: number, showNum: number, rids: Array<number>) {
let randomList = [];
let dicTask = getGamedata('dic_zyz_search');
for(let task of dicTask) {
let {suitFloor} = task;
let {min, max} = decodeStrSingle('suitLevelSingle', suitFloor);
let dicTask = gameData.towerTask;
for(let [ _id, task] of dicTask) {
let {suitFloor: {min, max} } = task;
let flag = max?(towerLv >= min && towerLv <= max): (towerLv >= min);
if(flag) {
randomList.push(task);
@@ -279,7 +276,7 @@ export async function createCurTasks(towerLv: number, batchCode: string, roleId:
let taskIds = [];
for(let i = 0; i < num; i++) {
let list = randomList.filter(cur => !rids.includes(cur.taskId));
let {dic: tmp} = getRandomWithWeight(list);
let {dic: tmp} = getRandEelmWithWeight(list);
if(tmp) {
taskIds.push(tmp.taskId);
rids.push(tmp.taskId)
@@ -339,14 +336,16 @@ export function getTaskStatus(status: number, completeTime: Date, curTime: Date)
export async function getTasksReward(roleId: string, curTime: Date) {
let oldTasks = await TowerTaskRecModel.getCurTasks(roleId);
let goods = [];
let goods: ItemInter[] = [];
for(let task of oldTasks) {
let {completeTime, reward, termsForAdd, additionalReward} = getTaskById(task.taskId);
let {completeTime, reward, termsForAdd, additionalReward} = gameData.towerTask.get(task.taskId);
if (task.sendTime && task.sendTime.getTime() + completeTime * 1000 < curTime.getTime()) {
goods = goods.concat(decodeStr('fixReward', reward));
goods = goods.concat(reward);
if(termsForAdd) {
const result = checkTaskConditions(roleId, task.heroes, termsForAdd);
goods = goods.concat(decodeStr('fixReward', result?additionalReward:''));
if(result) {
goods = goods.concat(additionalReward);
}
}
}
}
@@ -365,7 +364,7 @@ export function getRandRobot(cnt = 1, withAttr = false) {
let robots = [];
for (let info of setInfo) {
if (!info || !info.warId) continue;
const warInfo = getWarJsons(info.warId).json;
const warInfo = gameData.warJson.get(info.warId);
if (!warInfo || !warInfo.length) continue;
let heroes = [];