镇念塔调整
This commit is contained in:
@@ -178,7 +178,6 @@ export class NormalBattleHandler {
|
||||
|
||||
let dailyNum = {};
|
||||
let towerRec = null;
|
||||
let towerBonus = null;
|
||||
let towerStatus = null;
|
||||
let towerReward = null;
|
||||
if(warInfo.warType == WAR_TYPE.DAILY) {
|
||||
@@ -192,13 +191,14 @@ export class NormalBattleHandler {
|
||||
await setBattleStatus(this.app, session, roleId, battleId, isSuccess, battleCode);
|
||||
} else if (warInfo.warType == WAR_TYPE.TOWER) {
|
||||
let towerEndResult = await towerBattleEnd(channelService, sid, roleId, battleCode, battleId, isSuccess, heroes);
|
||||
if(towerEndResult.status == -1) {
|
||||
return towerEndResult.resResult;
|
||||
if(towerEndResult) {
|
||||
if(towerEndResult.status == -1) {
|
||||
return towerEndResult.resResult;
|
||||
}
|
||||
towerRec = towerEndResult.data.newRec;
|
||||
towerStatus = towerEndResult.data.towerStatus;
|
||||
towerReward = towerEndResult.data.towerReward;
|
||||
}
|
||||
towerRec = towerEndResult.data.newRec;
|
||||
towerBonus = towerEndResult.data.bonusReward;
|
||||
towerStatus = towerEndResult.data.towerStatus;
|
||||
towerReward = towerEndResult.data.towerReward;
|
||||
}
|
||||
|
||||
let warReward = new WarReward(roleId, roleName, battleId, isSuccess);
|
||||
@@ -233,10 +233,9 @@ export class NormalBattleHandler {
|
||||
|
||||
// 返回值:
|
||||
// towerStatus: false-本层未通过, true-本层已通过
|
||||
// towerBonus: 天梯每隔几层的额外宝箱
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
battleCode, battleId, status, towerStatus,
|
||||
...reward, towerBonus, towerReward,
|
||||
...reward, towerReward,
|
||||
apJson,
|
||||
dailyNum,
|
||||
heroes: curHeroes,
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { STATUS } from './../../../consts/statusCode';
|
||||
import { TOWER_TASK_CONST } from './../../../consts/consts';
|
||||
import { TOWER_TASK_CONST, HANG_UP_CONSTS, GONGSHI } from './../../../consts/consts';
|
||||
import { TowerTaskRecModel } from './../../../db/TowerTaskRec';
|
||||
import { HangUpSpdUpRecModel } from './../../../db/HangUpSpdUpRec';
|
||||
import { HangUpRecordModel } from './../../../db/HangUpRecord';
|
||||
import { RoleModel } from './../../../db/Role';
|
||||
import { TowerRecordModel } from './../../../db/TowerRecord';
|
||||
import { Application, BackendSession } from 'pinus';
|
||||
import { getTaskById, getTaskIdByQuality, getTowerDataByLv } from '../../../pubUtils/gamedata';
|
||||
import { decodeArrayStr, decodeIdCntArrayStr, getRandEelm, resResult } from '../../../pubUtils/util';
|
||||
import { calcuHangUpReward, checkTaskConditions } from '../../../services/battleService';
|
||||
import { handleFixedReward } from '../../../services/rewardService';
|
||||
import { getTaskById, getTaskIdByFloor, getTowerDataByLv } from '../../../pubUtils/gamedata';
|
||||
import { decodeArrayStr, decodeIdCntArrayStr, getRandEelm, resResult, shouldRefresh, getRandomWithWeight } from '../../../pubUtils/util';
|
||||
import { calcuHangUpReward, checkTaskConditions, checkHangUpSpdUpCnt } from '../../../services/battleService';
|
||||
import { handleFixedReward, handleReward } from '../../../services/rewardService';
|
||||
|
||||
export default function(app: Application) {
|
||||
return new TowerBattleHandler(app);
|
||||
@@ -33,8 +33,8 @@ export class TowerBattleHandler {
|
||||
let towerRec = await TowerRecordModel.getRecordByLv(roleId, towerLv);
|
||||
if (!towerRec) {
|
||||
const towerInfo = getTowerDataByLv(towerLv);
|
||||
const { warIds } = towerInfo;
|
||||
const sts = decodeArrayStr(warIds).map(id => {
|
||||
const { warArray } = towerInfo;
|
||||
const sts = decodeArrayStr(warArray, '&').map(id => {
|
||||
return {warId: parseInt(id), status: false};
|
||||
});
|
||||
towerRec = await TowerRecordModel.createRecord({roleId, lv: towerLv, warStatus: sts});
|
||||
@@ -68,24 +68,18 @@ export class TowerBattleHandler {
|
||||
|
||||
async checkHangUpRewards(msg: {}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
const { multi, timeReward, startTime } = await calcuHangUpReward(roleId);
|
||||
if (multi == 0) {
|
||||
return resResult(STATUS.TOWER_HANG_UP_NOT_VALID);
|
||||
}
|
||||
const rewards = decodeIdCntArrayStr(timeReward, multi);
|
||||
return resResult(STATUS.SUCCESS, {startTime, rewards: Array.from(rewards, item => ({[item[0]]: item[1]}))});
|
||||
const { timeReward, startTime, deltaTime } = await calcuHangUpReward(roleId);
|
||||
return resResult(STATUS.SUCCESS, {startTime, hangUpPassTime: deltaTime, rewards: timeReward.map(cur => {return {id: cur.gid, count: cur.count}})});
|
||||
}
|
||||
|
||||
async recHangUpRewards(msg: {}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let roleName = session.get('roleName');
|
||||
const { multi, timeReward, endLv, endTime } = await calcuHangUpReward(roleId);
|
||||
if (multi == 0) {
|
||||
return resResult(STATUS.TOWER_HANG_UP_NOT_VALID);
|
||||
}
|
||||
const goods = await handleFixedReward(roleId, roleName, timeReward, multi);
|
||||
const newRec = await HangUpRecordModel.updateRec(roleId, roleName, endLv, endTime);
|
||||
return resResult(STATUS.SUCCESS, { endTime, ...goods, hangUpRec: newRec });
|
||||
const { timeReward, endLv, endTime, deltaTime, needReceiveGoods } = await calcuHangUpReward(roleId);
|
||||
|
||||
const goods = await handleReward(roleId, roleName, timeReward);
|
||||
await HangUpRecordModel.updateRec(roleId, roleName, endLv, endTime, needReceiveGoods);
|
||||
return resResult(STATUS.SUCCESS, { endTime, hangUpPassTime: deltaTime, ...goods });
|
||||
}
|
||||
|
||||
async hangUpSpeedUp(msg: {speedUpCnt: number}, session: BackendSession) {
|
||||
@@ -95,31 +89,61 @@ export class TowerBattleHandler {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
const curTime = new Date();
|
||||
const { multi, timeReward, endLv } = await calcuHangUpReward(roleId, true, msg.speedUpCnt, curTime);
|
||||
if (multi <= 0) {
|
||||
resResult(STATUS.TOWER_NOT_ENOUGH_HANG_UP_TIME);
|
||||
}
|
||||
const { timeReward, endLv, deltaTime, needReceiveGoods } = await calcuHangUpReward(roleId, true, msg.speedUpCnt, curTime);
|
||||
|
||||
const role = await RoleModel.hangUpSpdUp(roleId, multi, curTime);
|
||||
if (!role) {
|
||||
let result = await checkHangUpSpdUpCnt(roleId, msg.speedUpCnt, curTime);
|
||||
if(result.status == -1) return result.resResult;
|
||||
let {data: {hangUpSpdUpCnt, gold}} = result;
|
||||
|
||||
const costGold = this.getHangUpCost(hangUpSpdUpCnt, msg.speedUpCnt);
|
||||
console.log(costGold, gold)
|
||||
if(costGold > gold) {
|
||||
return resResult(STATUS.TOWER_GOLD_NOT_ENOUGH);
|
||||
}
|
||||
await RoleModel.costGold(roleId, costGold);
|
||||
console.log(costGold);
|
||||
|
||||
const spdUpResult = await RoleModel.hangUpSpdUp(roleId, msg.speedUpCnt, curTime);
|
||||
if (!spdUpResult) {
|
||||
return resResult(STATUS.TOWER_HANG_UP_FAILED);
|
||||
}
|
||||
const spdUpRec = await HangUpSpdUpRecModel.updateRec(roleId, roleName, multi, endLv);
|
||||
const goods = await handleFixedReward(roleId, roleName, timeReward, multi);
|
||||
return resResult(STATUS.SUCCESS, { ...goods, rewardLv: endLv, spdUpRec });
|
||||
const spdUpRec = await HangUpSpdUpRecModel.updateRec(roleId, roleName, msg.speedUpCnt, endLv, needReceiveGoods);
|
||||
const goods = await handleReward(roleId, roleName, timeReward);
|
||||
return resResult(STATUS.SUCCESS, { ...goods, hangUpPassTime: deltaTime, rewardLv: endLv, costGold });
|
||||
}
|
||||
|
||||
getHangUpCost(originCnt: number, count: number) {
|
||||
let gold = 0;
|
||||
for(let i = 1; i <= count; i++) {
|
||||
let num = HANG_UP_CONSTS.MAX_SPD_UP_CNT - originCnt + i;
|
||||
if(num < 0) num = i;
|
||||
try {
|
||||
gold += parseInt(eval(GONGSHI.TOWER_HANG_UP_SPEED_COST));
|
||||
} catch(e) {
|
||||
gold += 0;
|
||||
}
|
||||
}
|
||||
return gold
|
||||
}
|
||||
|
||||
async getTasks(msg: {}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let roleName = session.get('roleName');
|
||||
let { towerLv } = await RoleModel.findByRoleId(roleId);
|
||||
let curTasks = await TowerTaskRecModel.getCurTasks(roleId);
|
||||
if (!curTasks || curTasks.length == 0) {
|
||||
let taskIds = [];
|
||||
TOWER_TASK_CONST.RAND_CNT.forEach((cnt, idx) => {
|
||||
const ids = getTaskIdByQuality(idx + 1);
|
||||
const tmp = getRandEelm(ids, cnt);
|
||||
taskIds = taskIds.concat(getRandEelm(ids, cnt));
|
||||
})
|
||||
const taskList = getTaskIdByFloor(towerLv)||[];
|
||||
const randomList = taskList.map(taskId => getTaskById(taskId));
|
||||
for(let i = 0; i < TOWER_TASK_CONST.RAND_CNT; i++) {
|
||||
let list = randomList.filter(taskId => !taskIds.includes(taskId));
|
||||
console.log(taskIds, JSON.stringify(list));
|
||||
let {dic: tmp} = getRandomWithWeight(list);
|
||||
if(tmp) {
|
||||
taskIds.push(tmp.taskId);
|
||||
}
|
||||
}
|
||||
|
||||
curTasks = await TowerTaskRecModel.createTasks(roleId, roleName, taskIds);
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, { curTasks });
|
||||
@@ -127,34 +151,34 @@ export class TowerBattleHandler {
|
||||
|
||||
async sendTaskHero(msg: {batchCode: string, tasks: Array<{taskCode: string, heroes: Array<number>}>}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
const curTasks = await TowerTaskRecModel.getCurTasks(roleId);
|
||||
const curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前一批的任务
|
||||
if (!curTasks || curTasks.length == 0) {
|
||||
return resResult(STATUS.TOWER_TASK_NOT_FOUND);
|
||||
}
|
||||
let usedHeroes = [];
|
||||
const tasksCode = [];
|
||||
const taskMap = new Map<string, any>()
|
||||
curTasks.forEach(task => {
|
||||
usedHeroes = usedHeroes.concat(task.heroes);
|
||||
tasksCode.push(task.taskCode);
|
||||
taskMap.set(task.taskCode, task);
|
||||
});
|
||||
for (let task of msg.tasks) {
|
||||
if (task.heroes.length > TOWER_TASK_CONST.MAX_HEROES_NUM) {
|
||||
let curTask = taskMap.get(task.taskCode); // 数据库中,这个任务的数据
|
||||
let taskInfo = getTaskById(curTask.taskId);
|
||||
if (task.heroes.length > taskInfo.actorNeeded) { // 武将数,从策划表中读取
|
||||
return resResult(STATUS.TOWER_TASK_MAX_HERO);
|
||||
}
|
||||
if (usedHeroes.length > 0) {
|
||||
let used = false;
|
||||
task.heroes.forEach(hid => {
|
||||
if (usedHeroes.indexOf(hid) !== -1) {
|
||||
used = true;
|
||||
}
|
||||
})
|
||||
if (used) {
|
||||
return resResult(STATUS.TOWER_TASK_HERO_HAS_USED);
|
||||
}
|
||||
}
|
||||
if (tasksCode.indexOf(task.taskCode) === -1) {
|
||||
return resResult(STATUS.TOWER_TASK_CODE_NOT_FOUND);
|
||||
}
|
||||
if (usedHeroes.length > 0) { // 是否在其他任务重使用了武将
|
||||
let used = !!task.heroes.find(hid => usedHeroes.indexOf(hid) !== -1);
|
||||
if (used) {
|
||||
return resResult(STATUS.TOWER_TASK_HERO_HAS_USED);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
const curTime = new Date();
|
||||
const recs = await TowerTaskRecModel.sendHeroes(roleId, msg.batchCode, msg.tasks, curTime);
|
||||
@@ -182,14 +206,14 @@ export class TowerBattleHandler {
|
||||
return resResult(STATUS.TOWER_TASK_BATCH_NOT_FOUND);
|
||||
}
|
||||
if ((allFlag || task.taskCode === msg.taskCode) && task.status === 1) {
|
||||
let {completeTime, reward, bonusCondition, bonus} = getTaskById(task.taskId);
|
||||
let {completeTime, reward, termsForAdd, additionalReward} = getTaskById(task.taskId);
|
||||
if (task.sendTime && task.sendTime.getTime() + completeTime * 1000 < curTime.getTime()) {
|
||||
compTasks.push(task.taskCode);
|
||||
const rewardGoods = await handleFixedReward(roleId, roleName, reward, 1);
|
||||
goods = goods.concat(rewardGoods.goods);
|
||||
if(bonusCondition) {
|
||||
const res = checkTaskConditions(roleId, task.heroes, bonusCondition);
|
||||
const bonusGoods = await handleFixedReward(roleId, roleName, bonus, 1);
|
||||
if(termsForAdd) {
|
||||
const result = checkTaskConditions(roleId, task.heroes, termsForAdd);
|
||||
const bonusGoods = await handleFixedReward(roleId, roleName, result?additionalReward:'', 1);
|
||||
goods = goods.concat(bonusGoods.goods);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user