镇念塔调整
This commit is contained in:
@@ -178,7 +178,6 @@ export class NormalBattleHandler {
|
|||||||
|
|
||||||
let dailyNum = {};
|
let dailyNum = {};
|
||||||
let towerRec = null;
|
let towerRec = null;
|
||||||
let towerBonus = null;
|
|
||||||
let towerStatus = null;
|
let towerStatus = null;
|
||||||
let towerReward = null;
|
let towerReward = null;
|
||||||
if(warInfo.warType == WAR_TYPE.DAILY) {
|
if(warInfo.warType == WAR_TYPE.DAILY) {
|
||||||
@@ -192,13 +191,14 @@ export class NormalBattleHandler {
|
|||||||
await setBattleStatus(this.app, session, roleId, battleId, isSuccess, battleCode);
|
await setBattleStatus(this.app, session, roleId, battleId, isSuccess, battleCode);
|
||||||
} else if (warInfo.warType == WAR_TYPE.TOWER) {
|
} else if (warInfo.warType == WAR_TYPE.TOWER) {
|
||||||
let towerEndResult = await towerBattleEnd(channelService, sid, roleId, battleCode, battleId, isSuccess, heroes);
|
let towerEndResult = await towerBattleEnd(channelService, sid, roleId, battleCode, battleId, isSuccess, heroes);
|
||||||
if(towerEndResult.status == -1) {
|
if(towerEndResult) {
|
||||||
return towerEndResult.resResult;
|
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);
|
let warReward = new WarReward(roleId, roleName, battleId, isSuccess);
|
||||||
@@ -233,10 +233,9 @@ export class NormalBattleHandler {
|
|||||||
|
|
||||||
// 返回值:
|
// 返回值:
|
||||||
// towerStatus: false-本层未通过, true-本层已通过
|
// towerStatus: false-本层未通过, true-本层已通过
|
||||||
// towerBonus: 天梯每隔几层的额外宝箱
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
battleCode, battleId, status, towerStatus,
|
battleCode, battleId, status, towerStatus,
|
||||||
...reward, towerBonus, towerReward,
|
...reward, towerReward,
|
||||||
apJson,
|
apJson,
|
||||||
dailyNum,
|
dailyNum,
|
||||||
heroes: curHeroes,
|
heroes: curHeroes,
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
import { STATUS } from './../../../consts/statusCode';
|
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 { TowerTaskRecModel } from './../../../db/TowerTaskRec';
|
||||||
import { HangUpSpdUpRecModel } from './../../../db/HangUpSpdUpRec';
|
import { HangUpSpdUpRecModel } from './../../../db/HangUpSpdUpRec';
|
||||||
import { HangUpRecordModel } from './../../../db/HangUpRecord';
|
import { HangUpRecordModel } from './../../../db/HangUpRecord';
|
||||||
import { RoleModel } from './../../../db/Role';
|
import { RoleModel } from './../../../db/Role';
|
||||||
import { TowerRecordModel } from './../../../db/TowerRecord';
|
import { TowerRecordModel } from './../../../db/TowerRecord';
|
||||||
import { Application, BackendSession } from 'pinus';
|
import { Application, BackendSession } from 'pinus';
|
||||||
import { getTaskById, getTaskIdByQuality, getTowerDataByLv } from '../../../pubUtils/gamedata';
|
import { getTaskById, getTaskIdByFloor, getTowerDataByLv } from '../../../pubUtils/gamedata';
|
||||||
import { decodeArrayStr, decodeIdCntArrayStr, getRandEelm, resResult } from '../../../pubUtils/util';
|
import { decodeArrayStr, decodeIdCntArrayStr, getRandEelm, resResult, shouldRefresh, getRandomWithWeight } from '../../../pubUtils/util';
|
||||||
import { calcuHangUpReward, checkTaskConditions } from '../../../services/battleService';
|
import { calcuHangUpReward, checkTaskConditions, checkHangUpSpdUpCnt } from '../../../services/battleService';
|
||||||
import { handleFixedReward } from '../../../services/rewardService';
|
import { handleFixedReward, handleReward } from '../../../services/rewardService';
|
||||||
|
|
||||||
export default function(app: Application) {
|
export default function(app: Application) {
|
||||||
return new TowerBattleHandler(app);
|
return new TowerBattleHandler(app);
|
||||||
@@ -33,8 +33,8 @@ export class TowerBattleHandler {
|
|||||||
let towerRec = await TowerRecordModel.getRecordByLv(roleId, towerLv);
|
let towerRec = await TowerRecordModel.getRecordByLv(roleId, towerLv);
|
||||||
if (!towerRec) {
|
if (!towerRec) {
|
||||||
const towerInfo = getTowerDataByLv(towerLv);
|
const towerInfo = getTowerDataByLv(towerLv);
|
||||||
const { warIds } = towerInfo;
|
const { warArray } = towerInfo;
|
||||||
const sts = decodeArrayStr(warIds).map(id => {
|
const sts = decodeArrayStr(warArray, '&').map(id => {
|
||||||
return {warId: parseInt(id), status: false};
|
return {warId: parseInt(id), status: false};
|
||||||
});
|
});
|
||||||
towerRec = await TowerRecordModel.createRecord({roleId, lv: towerLv, warStatus: sts});
|
towerRec = await TowerRecordModel.createRecord({roleId, lv: towerLv, warStatus: sts});
|
||||||
@@ -68,24 +68,18 @@ export class TowerBattleHandler {
|
|||||||
|
|
||||||
async checkHangUpRewards(msg: {}, session: BackendSession) {
|
async checkHangUpRewards(msg: {}, session: BackendSession) {
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
const { multi, timeReward, startTime } = await calcuHangUpReward(roleId);
|
const { timeReward, startTime, deltaTime } = await calcuHangUpReward(roleId);
|
||||||
if (multi == 0) {
|
return resResult(STATUS.SUCCESS, {startTime, hangUpPassTime: deltaTime, rewards: timeReward.map(cur => {return {id: cur.gid, count: cur.count}})});
|
||||||
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]}))});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async recHangUpRewards(msg: {}, session: BackendSession) {
|
async recHangUpRewards(msg: {}, session: BackendSession) {
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let roleName = session.get('roleName');
|
let roleName = session.get('roleName');
|
||||||
const { multi, timeReward, endLv, endTime } = await calcuHangUpReward(roleId);
|
const { timeReward, endLv, endTime, deltaTime, needReceiveGoods } = await calcuHangUpReward(roleId);
|
||||||
if (multi == 0) {
|
|
||||||
return resResult(STATUS.TOWER_HANG_UP_NOT_VALID);
|
const goods = await handleReward(roleId, roleName, timeReward);
|
||||||
}
|
await HangUpRecordModel.updateRec(roleId, roleName, endLv, endTime, needReceiveGoods);
|
||||||
const goods = await handleFixedReward(roleId, roleName, timeReward, multi);
|
return resResult(STATUS.SUCCESS, { endTime, hangUpPassTime: deltaTime, ...goods });
|
||||||
const newRec = await HangUpRecordModel.updateRec(roleId, roleName, endLv, endTime);
|
|
||||||
return resResult(STATUS.SUCCESS, { endTime, ...goods, hangUpRec: newRec });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async hangUpSpeedUp(msg: {speedUpCnt: number}, session: BackendSession) {
|
async hangUpSpeedUp(msg: {speedUpCnt: number}, session: BackendSession) {
|
||||||
@@ -95,31 +89,61 @@ export class TowerBattleHandler {
|
|||||||
return resResult(STATUS.WRONG_PARMS);
|
return resResult(STATUS.WRONG_PARMS);
|
||||||
}
|
}
|
||||||
const curTime = new Date();
|
const curTime = new Date();
|
||||||
const { multi, timeReward, endLv } = await calcuHangUpReward(roleId, true, msg.speedUpCnt, curTime);
|
const { timeReward, endLv, deltaTime, needReceiveGoods } = await calcuHangUpReward(roleId, true, msg.speedUpCnt, curTime);
|
||||||
if (multi <= 0) {
|
|
||||||
resResult(STATUS.TOWER_NOT_ENOUGH_HANG_UP_TIME);
|
|
||||||
}
|
|
||||||
|
|
||||||
const role = await RoleModel.hangUpSpdUp(roleId, multi, curTime);
|
let result = await checkHangUpSpdUpCnt(roleId, msg.speedUpCnt, curTime);
|
||||||
if (!role) {
|
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);
|
return resResult(STATUS.TOWER_HANG_UP_FAILED);
|
||||||
}
|
}
|
||||||
const spdUpRec = await HangUpSpdUpRecModel.updateRec(roleId, roleName, multi, endLv);
|
const spdUpRec = await HangUpSpdUpRecModel.updateRec(roleId, roleName, msg.speedUpCnt, endLv, needReceiveGoods);
|
||||||
const goods = await handleFixedReward(roleId, roleName, timeReward, multi);
|
const goods = await handleReward(roleId, roleName, timeReward);
|
||||||
return resResult(STATUS.SUCCESS, { ...goods, rewardLv: endLv, spdUpRec });
|
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) {
|
async getTasks(msg: {}, session: BackendSession) {
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let roleName = session.get('roleName');
|
let roleName = session.get('roleName');
|
||||||
|
let { towerLv } = await RoleModel.findByRoleId(roleId);
|
||||||
let curTasks = await TowerTaskRecModel.getCurTasks(roleId);
|
let curTasks = await TowerTaskRecModel.getCurTasks(roleId);
|
||||||
if (!curTasks || curTasks.length == 0) {
|
if (!curTasks || curTasks.length == 0) {
|
||||||
let taskIds = [];
|
let taskIds = [];
|
||||||
TOWER_TASK_CONST.RAND_CNT.forEach((cnt, idx) => {
|
const taskList = getTaskIdByFloor(towerLv)||[];
|
||||||
const ids = getTaskIdByQuality(idx + 1);
|
const randomList = taskList.map(taskId => getTaskById(taskId));
|
||||||
const tmp = getRandEelm(ids, cnt);
|
for(let i = 0; i < TOWER_TASK_CONST.RAND_CNT; i++) {
|
||||||
taskIds = taskIds.concat(getRandEelm(ids, cnt));
|
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);
|
curTasks = await TowerTaskRecModel.createTasks(roleId, roleName, taskIds);
|
||||||
}
|
}
|
||||||
return resResult(STATUS.SUCCESS, { curTasks });
|
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) {
|
async sendTaskHero(msg: {batchCode: string, tasks: Array<{taskCode: string, heroes: Array<number>}>}, session: BackendSession) {
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
const curTasks = await TowerTaskRecModel.getCurTasks(roleId);
|
const curTasks = await TowerTaskRecModel.getCurTasks(roleId); // 当前一批的任务
|
||||||
if (!curTasks || curTasks.length == 0) {
|
if (!curTasks || curTasks.length == 0) {
|
||||||
return resResult(STATUS.TOWER_TASK_NOT_FOUND);
|
return resResult(STATUS.TOWER_TASK_NOT_FOUND);
|
||||||
}
|
}
|
||||||
let usedHeroes = [];
|
let usedHeroes = [];
|
||||||
const tasksCode = [];
|
const tasksCode = [];
|
||||||
|
const taskMap = new Map<string, any>()
|
||||||
curTasks.forEach(task => {
|
curTasks.forEach(task => {
|
||||||
usedHeroes = usedHeroes.concat(task.heroes);
|
usedHeroes = usedHeroes.concat(task.heroes);
|
||||||
tasksCode.push(task.taskCode);
|
tasksCode.push(task.taskCode);
|
||||||
|
taskMap.set(task.taskCode, task);
|
||||||
});
|
});
|
||||||
for (let task of msg.tasks) {
|
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);
|
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) {
|
if (tasksCode.indexOf(task.taskCode) === -1) {
|
||||||
return resResult(STATUS.TOWER_TASK_CODE_NOT_FOUND);
|
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 curTime = new Date();
|
||||||
const recs = await TowerTaskRecModel.sendHeroes(roleId, msg.batchCode, msg.tasks, curTime);
|
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);
|
return resResult(STATUS.TOWER_TASK_BATCH_NOT_FOUND);
|
||||||
}
|
}
|
||||||
if ((allFlag || task.taskCode === msg.taskCode) && task.status === 1) {
|
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()) {
|
if (task.sendTime && task.sendTime.getTime() + completeTime * 1000 < curTime.getTime()) {
|
||||||
compTasks.push(task.taskCode);
|
compTasks.push(task.taskCode);
|
||||||
const rewardGoods = await handleFixedReward(roleId, roleName, reward, 1);
|
const rewardGoods = await handleFixedReward(roleId, roleName, reward, 1);
|
||||||
goods = goods.concat(rewardGoods.goods);
|
goods = goods.concat(rewardGoods.goods);
|
||||||
if(bonusCondition) {
|
if(termsForAdd) {
|
||||||
const res = checkTaskConditions(roleId, task.heroes, bonusCondition);
|
const result = checkTaskConditions(roleId, task.heroes, termsForAdd);
|
||||||
const bonusGoods = await handleFixedReward(roleId, roleName, bonus, 1);
|
const bonusGoods = await handleFixedReward(roleId, roleName, result?additionalReward:'', 1);
|
||||||
goods = goods.concat(bonusGoods.goods);
|
goods = goods.concat(bonusGoods.goods);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ import { BattleRecordModel } from './../db/BattleRecord';
|
|||||||
import { TowerRecordModel } from './../db/TowerRecord';
|
import { TowerRecordModel } from './../db/TowerRecord';
|
||||||
import { RoleModel } from './../db/Role';
|
import { RoleModel } from './../db/Role';
|
||||||
import { getHeroInfoById, getJobInfoById, getTowerDataByLv } from "../pubUtils/gamedata"
|
import { getHeroInfoById, getJobInfoById, getTowerDataByLv } from "../pubUtils/gamedata"
|
||||||
import { decodeArrayStr, shouldRefresh, resResult } from '../pubUtils/util';
|
import { decodeArrayStr, shouldRefresh, resResult, decodeStr, cal } from '../pubUtils/util';
|
||||||
import { handleFixedReward } from './rewardService';
|
import { handleFixedReward } from './rewardService';
|
||||||
import { STATUS } from '../consts/statusCode';
|
import { STATUS } from '../consts/statusCode';
|
||||||
|
import { HangUpSpdUpRecModel } from '../db/HangUpSpdUpRec';
|
||||||
|
|
||||||
export async function checkTowerWar(roleId: string, battleId: number, heroes: Array<number>) {
|
export async function checkTowerWar(roleId: string, battleId: number, heroes: Array<number>) {
|
||||||
const battleIdStr = `${battleId}`;
|
const battleIdStr = `${battleId}`;
|
||||||
@@ -18,7 +19,8 @@ export async function checkTowerWar(roleId: string, battleId: number, heroes: Ar
|
|||||||
console.error(`天梯层数异常,lv ${towerLv} by ${roleId}`);
|
console.error(`天梯层数异常,lv ${towerLv} by ${roleId}`);
|
||||||
return { status: -1, resResult: resResult(STATUS.TOWER_INFO_NOT_FOUND) };
|
return { status: -1, resResult: resResult(STATUS.TOWER_INFO_NOT_FOUND) };
|
||||||
}
|
}
|
||||||
const warIds = decodeArrayStr(towerInfo.warIds) || [];
|
const warIds = decodeArrayStr(towerInfo.warArray, '&') || [];
|
||||||
|
console.log(warIds, battleIdStr);
|
||||||
if (warIds.indexOf(battleIdStr) === -1) {
|
if (warIds.indexOf(battleIdStr) === -1) {
|
||||||
return { status: -1, resResult: resResult(STATUS.TOWER_WRONG_BATTLE_ID) };
|
return { status: -1, resResult: resResult(STATUS.TOWER_WRONG_BATTLE_ID) };
|
||||||
}
|
}
|
||||||
@@ -30,7 +32,7 @@ export async function checkTowerWar(roleId: string, battleId: number, heroes: Ar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const curWarStatus = warStatus.find(elem => elem.warId == battleId);
|
const curWarStatus = warStatus.find(elem => elem.warId == battleId);
|
||||||
if (curWarStatus.status) {
|
if (curWarStatus && curWarStatus.status) {
|
||||||
return { status: -1, resResult: resResult(STATUS.TOWER_DUPLICATE_CHALLENGE) };
|
return { status: -1, resResult: resResult(STATUS.TOWER_DUPLICATE_CHALLENGE) };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,25 +62,22 @@ export async function towerBattleEnd(channelService: ChannelService, sid: string
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
let newRec = await TowerRecordModel.updateRecord(roleId, towerLv, battleCode, battleId, heroes, inc);
|
let newRec = await TowerRecordModel.updateRecord(roleId, towerLv, battleCode, battleId, heroes, inc);
|
||||||
let bonusReward = null;
|
|
||||||
let towerReward = null;
|
let towerReward = null;
|
||||||
if (inc === 1) {
|
if (inc === 1) {
|
||||||
await RoleModel.towerLvUp(roleId);
|
await RoleModel.towerLvUp(roleId);
|
||||||
const nextTowerInfo = getTowerDataByLv(towerLv + 1);
|
const nextTowerInfo = getTowerDataByLv(towerLv + 1);
|
||||||
if (nextTowerInfo) {
|
if (nextTowerInfo) {
|
||||||
const { warIds } = nextTowerInfo;
|
const { warArray } = nextTowerInfo;
|
||||||
const sts = decodeArrayStr(warIds).map(id => {
|
const sts = decodeArrayStr(warArray, '&').map(id => {
|
||||||
return {warId: parseInt(id), status: false};
|
return {warId: parseInt(id), status: false};
|
||||||
});
|
});
|
||||||
|
|
||||||
await TowerRecordModel.createRecord({roleId, lv: towerLv + 1, warStatus: sts});
|
await TowerRecordModel.createRecord({roleId, lv: towerLv + 1, warStatus: sts});
|
||||||
|
|
||||||
}
|
}
|
||||||
const { bonus, fixReward } = getTowerDataByLv(towerLv);
|
const { reward } = getTowerDataByLv(towerLv);
|
||||||
if (bonus) {
|
if (reward) {
|
||||||
let result = await handleFixedReward(roleId, roleName, bonus, 1);
|
let result = await handleFixedReward(roleId, roleName, reward, 1);
|
||||||
bonusReward = result.goods;
|
|
||||||
}
|
|
||||||
if (fixReward) {
|
|
||||||
let result = await handleFixedReward(roleId, roleName, fixReward, 1);
|
|
||||||
towerReward = result.goods;
|
towerReward = result.goods;
|
||||||
}
|
}
|
||||||
if (towerLv + 1 >= HANG_UP_CONSTS.ENABLE_LV) {
|
if (towerLv + 1 >= HANG_UP_CONSTS.ENABLE_LV) {
|
||||||
@@ -90,7 +89,7 @@ export async function towerBattleEnd(channelService: ChannelService, sid: string
|
|||||||
status: 0,
|
status: 0,
|
||||||
data: {
|
data: {
|
||||||
newRec,
|
newRec,
|
||||||
bonusReward, towerReward,
|
towerReward,
|
||||||
towerStatus: !!inc
|
towerStatus: !!inc
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -101,41 +100,99 @@ async function startHangUp(roleId: string, roleName: string) {
|
|||||||
await HangUpRecordModel.initRecord(roleId, roleName);
|
await HangUpRecordModel.initRecord(roleId, roleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function checkHangUpSpdUpCnt(roleId: string, cnt: number, curTime: Date) {
|
||||||
|
const role = await RoleModel.findByRoleId(roleId);
|
||||||
|
let {hangUpSpdUpCnt, gold, lastSpdUpTime} = role;
|
||||||
|
if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime, HANG_UP_CONSTS.REFRESH_TIME, 1) && hangUpSpdUpCnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) {
|
||||||
|
hangUpSpdUpCnt = HANG_UP_CONSTS.MAX_SPD_UP_CNT;
|
||||||
|
}
|
||||||
|
if (cnt > hangUpSpdUpCnt) {
|
||||||
|
return {status: -1, resResult:resResult(STATUS.TOWER_HANG_UP_FAILED)}
|
||||||
|
}
|
||||||
|
return {status: 0, data: {hangUpSpdUpCnt, gold, lastSpdUpTime}}
|
||||||
|
}
|
||||||
|
|
||||||
export async function calcuHangUpReward(roleId: string, speedUp = false, speedUpCnt = 1, curTime = new Date()) {
|
export async function calcuHangUpReward(roleId: string, speedUp = false, speedUpCnt = 1, curTime = new Date()) {
|
||||||
let { towerLv, hangUpSpdUpCnt, lastSpdUpTime } = await RoleModel.findByRoleId(roleId);
|
let { towerLv = 1, hangUpSpdUpCnt = 0, lastSpdUpTime } = await RoleModel.findByRoleId(roleId);
|
||||||
let { startTime} = await HangUpRecordModel.getCurRec(roleId);
|
|
||||||
let towerInfo = getTowerDataByLv(towerLv - 1); // towerLv 是当前层,奖励计算按照已经通过的层,即上一层
|
let towerInfo = getTowerDataByLv(towerLv - 1); // towerLv 是当前层,奖励计算按照已经通过的层,即上一层
|
||||||
let multi = 1; // 结算奖励的倍数,受最大时间限制
|
let timeReward = []; // 奖励
|
||||||
let multiReal = 1; // 距开始挂机实际过去的时间单位
|
let needReceiveGoods = []; // 由于小数,未能领取的奖励
|
||||||
if (speedUp) {
|
let baseReward = decodeStr('decimalReward', towerInfo.rewardOfcollect);
|
||||||
if (hangUpSpdUpCnt >= speedUpCnt || shouldRefresh(lastSpdUpTime, new Date, HANG_UP_CONSTS.REFRESH_TIME, 1)) {
|
|
||||||
multi = speedUpCnt;
|
let { startTime } = await HangUpRecordModel.getCurRec(roleId);
|
||||||
} else {
|
let endTime = curTime; // 挂机结束时间,现在到开始时间,经历了10的倍数的时间
|
||||||
multi = 0;
|
let deltaTime = curTime.getTime() - startTime.getTime(); // 累计的挂机时间,受最大时间限制
|
||||||
|
if (deltaTime > HANG_UP_CONSTS.MAX_TIME) {
|
||||||
|
deltaTime = HANG_UP_CONSTS.MAX_TIME;
|
||||||
|
endTime = curTime; // 累积到超过24小时,那么结束时间和下一次开启时间就取整了
|
||||||
|
} else {
|
||||||
|
let multiReal = Math.floor(deltaTime / HANG_UP_CONSTS.UNIT_TIME);// 距开始挂机实际过去的时间单位
|
||||||
|
endTime = new Date(startTime.getTime() + multiReal * HANG_UP_CONSTS.UNIT_TIME)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (speedUp) { // 加速,直接收取6小时收益,小数的累积和普通收取独立
|
||||||
|
if (hangUpSpdUpCnt >= speedUpCnt || !lastSpdUpTime || shouldRefresh(lastSpdUpTime, new Date, HANG_UP_CONSTS.REFRESH_TIME, 1)) { // 可加速
|
||||||
|
let multi = Math.floor(HANG_UP_CONSTS.SPD_UP_REC_TIME / HANG_UP_CONSTS.UNIT_TIME);
|
||||||
|
let spdUpRec = await HangUpSpdUpRecModel.getSpdUpRec(roleId, towerLv - 1);
|
||||||
|
let goods = [];
|
||||||
|
if(spdUpRec) {
|
||||||
|
let { notReceivedGoodsList = [], cnt } = spdUpRec;
|
||||||
|
let notReceivedGoods = notReceivedGoodsList.find(cur => cur.cnt == cnt );
|
||||||
|
goods = notReceivedGoods?notReceivedGoods.goods:[];
|
||||||
|
}
|
||||||
|
for(let {gid, count} of baseReward) {
|
||||||
|
let newCount = cal.mul(count, multi);
|
||||||
|
let oldGoods = goods.find(cur => cur.gid == gid);
|
||||||
|
if(oldGoods) newCount = cal.add(newCount, oldGoods.count);
|
||||||
|
let roundCount = Math.floor(newCount);
|
||||||
|
if(newCount > roundCount) {
|
||||||
|
needReceiveGoods.push({gid, count: cal.sub(newCount, roundCount)});
|
||||||
|
}
|
||||||
|
if(roundCount > 0) {
|
||||||
|
timeReward.push({gid, count: roundCount})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let deltaTime = curTime.getTime() - startTime.getTime();
|
let lastRec = await HangUpRecordModel.getLastRec(roleId);
|
||||||
multiReal = Math.floor(deltaTime / HANG_UP_CONSTS.UNIT_TIME);
|
let notReceivedGoods = lastRec?lastRec.notReceivedGoods: [];
|
||||||
if (deltaTime > HANG_UP_CONSTS.MAX_TIME) deltaTime = HANG_UP_CONSTS.MAX_TIME;
|
|
||||||
multi = Math.floor(deltaTime / HANG_UP_CONSTS.UNIT_TIME);
|
let multi = Math.floor(deltaTime / HANG_UP_CONSTS.UNIT_TIME); // 结算奖励的倍数,受最大时间限制
|
||||||
|
|
||||||
|
console.log(deltaTime, multi, baseReward);
|
||||||
|
for(let {gid, count} of baseReward) {
|
||||||
|
let newCount = cal.mul(count, multi);
|
||||||
|
let oldGoods = notReceivedGoods.find(cur => cur.gid == gid);
|
||||||
|
if(oldGoods) newCount = cal.add(newCount, oldGoods.count);
|
||||||
|
let roundCount = Math.floor(newCount);
|
||||||
|
if(newCount > roundCount) {
|
||||||
|
needReceiveGoods.push({gid, count: cal.sub(newCount, roundCount)});
|
||||||
|
}
|
||||||
|
if(roundCount > 0) {
|
||||||
|
timeReward.push({gid, count: roundCount})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
endLv: towerLv - 1,
|
endLv: towerLv - 1,
|
||||||
startTime,
|
startTime,
|
||||||
endTime: new Date(startTime.getTime() + multiReal * HANG_UP_CONSTS.UNIT_TIME),
|
deltaTime,
|
||||||
timeReward: towerInfo.timeReward,
|
endTime,
|
||||||
multi
|
timeReward,
|
||||||
|
needReceiveGoods
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async function checkCond(roleId: string, heroes, type: number, parm: number, cnt: number) {
|
async function checkCond(roleId: string, heroes, type: number, param: number, cnt: number) {
|
||||||
let heroCnt = 0;
|
let heroCnt = 0;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 1:
|
case 1:
|
||||||
|
let field = param == 1?'star': 'rank';
|
||||||
for(let hid of heroes) {
|
for(let hid of heroes) {
|
||||||
const rec = await HeroModel.findByHidAndRole(hid, roleId);
|
const rec = await HeroModel.findByHidAndRole(hid, roleId);
|
||||||
if (rec.star >= parm) {
|
if (rec[field] >= param) {
|
||||||
heroCnt++;
|
heroCnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -143,7 +200,7 @@ async function checkCond(roleId: string, heroes, type: number, parm: number, cnt
|
|||||||
case 2:
|
case 2:
|
||||||
for(let hid of heroes) {
|
for(let hid of heroes) {
|
||||||
const hInfo = getHeroInfoById(hid);
|
const hInfo = getHeroInfoById(hid);
|
||||||
if (hInfo.camp === parm) {
|
if (hInfo.camp === param) {
|
||||||
heroCnt++;
|
heroCnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,7 +208,7 @@ async function checkCond(roleId: string, heroes, type: number, parm: number, cnt
|
|||||||
case 3:
|
case 3:
|
||||||
for(let hid of heroes) {
|
for(let hid of heroes) {
|
||||||
const hInfo = getHeroInfoById(hid);
|
const hInfo = getHeroInfoById(hid);
|
||||||
if (getJobInfoById(hInfo.jobid) === parm) {
|
if (getJobInfoById(hInfo.jobid) === param) {
|
||||||
heroCnt++;
|
heroCnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -166,18 +223,14 @@ async function checkCond(roleId: string, heroes, type: number, parm: number, cnt
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function checkTaskConditions(roleId: string, heroes: Array<number>, conditionsStr: string) {
|
export async function checkTaskConditions(roleId: string, heroes: Array<number>, conditionsStr: string) {
|
||||||
const condArr = conditionsStr.split('|');
|
let condition = decodeStr('towerTaskCondition', conditionsStr);
|
||||||
if (condArr.length < 1) return false;
|
|
||||||
|
|
||||||
let res = true;
|
let res = true;
|
||||||
for (let cond of condArr) {
|
for (let {type, param, cnt} of condition) {
|
||||||
const condDetail = cond.split('&');
|
const checkRes = await checkCond(roleId, heroes, type, param, cnt);
|
||||||
if (condDetail && condDetail.length === 3) {
|
if (!checkRes) {
|
||||||
const checkRes = await checkCond(roleId, heroes, parseInt(condDetail[0]), parseInt(condDetail[1]), parseInt(condDetail[2]))
|
res = false;
|
||||||
if (!checkRes) {
|
break;
|
||||||
res = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
|||||||
@@ -207,7 +207,6 @@ export async function refreshEvent(num: number, roleId: string, roleName: string
|
|||||||
return ccur.eventId != cur.eventID;
|
return ccur.eventId != cur.eventID;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
console.log(JSON.stringify(randomList));
|
|
||||||
|
|
||||||
let curPoint = new Array<number>();
|
let curPoint = new Array<number>();
|
||||||
for(let i = 0; i < num; i++) {
|
for(let i = 0; i < num; i++) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ module.exports = {
|
|||||||
'id': 'connector-server-1',
|
'id': 'connector-server-1',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'port': 4050,
|
'port': 4050,
|
||||||
'clientHost': 'pinus_test.trgame.cn',
|
'clientHost': 'zyz_web.trgame.cn',
|
||||||
'clientPort': 3050,
|
'clientPort': 3050,
|
||||||
'frontend': true,
|
'frontend': true,
|
||||||
'args': '--inspect=10001'
|
'args': '--inspect=10001'
|
||||||
@@ -29,7 +29,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
'id': 'gate-server-1',
|
'id': 'gate-server-1',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'clientHost': 'pinus_test.trgame.cn',
|
'clientHost': 'zyz_web.trgame.cn',
|
||||||
'clientPort': 3014,
|
'clientPort': 3014,
|
||||||
'frontend': true,
|
'frontend': true,
|
||||||
'args': '--inspect=10003'
|
'args': '--inspect=10003'
|
||||||
@@ -37,7 +37,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
'id': 'gate-server-2',
|
'id': 'gate-server-2',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'clientHost': 'pinus_test.trgame.cn',
|
'clientHost': 'zyz_web.trgame.cn',
|
||||||
'clientPort': 3015,
|
'clientPort': 3015,
|
||||||
'frontend': true,
|
'frontend': true,
|
||||||
'args': '--inspect=10008'
|
'args': '--inspect=10008'
|
||||||
@@ -46,9 +46,9 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
'production': {
|
'production': {
|
||||||
'connector': [
|
'connector': [
|
||||||
{'id': 'connector-server-1', 'port': 4050, 'clientHost': 'pinus_test.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true},
|
{'id': 'connector-server-1', 'port': 4050, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true},
|
||||||
{'id': 'connector-server-2', 'port': 4051, 'clientHost': 'pinus_test.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true},
|
{'id': 'connector-server-2', 'port': 4051, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true},
|
||||||
{'id': 'connector-server-3', 'port': 4052, 'clientHost': 'pinus_test.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true}
|
{'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true}
|
||||||
],
|
],
|
||||||
'chat': [
|
'chat': [
|
||||||
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050},
|
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050},
|
||||||
@@ -62,11 +62,11 @@ module.exports = {
|
|||||||
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054}
|
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054}
|
||||||
],
|
],
|
||||||
'gate': [
|
'gate': [
|
||||||
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'pinus_test.trgame.cn', 'clientPort': 3014, 'frontend': true},
|
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyz_web.trgame.cn', 'clientPort': 3014, 'frontend': true},
|
||||||
{
|
{
|
||||||
'id': 'gate-server-2',
|
'id': 'gate-server-2',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'clientHost': 'pinus_test.trgame.cn',
|
'clientHost': 'zyz_web.trgame.cn',
|
||||||
'clientPort': 3015,
|
'clientPort': 3015,
|
||||||
'frontend': true
|
'frontend': true
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-13
@@ -15,7 +15,7 @@ export const COUNTER = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const ACTION_POIN = {
|
export const ACTION_POIN = {
|
||||||
MAX: 100,
|
MAX: 100000,
|
||||||
PER: 6 * 60 * 1000
|
PER: 6 * 60 * 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -82,11 +82,18 @@ for(let obj of currencyArr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const WAR_TYPE = {
|
export const WAR_TYPE = {
|
||||||
NORMAL: 1,
|
NORMAL: 1, // 主线本
|
||||||
DAILY: 2,
|
VESTIGE: 2, // 遗迹本
|
||||||
EVENT: 3,
|
EVENT: 3, // 事件本
|
||||||
TOWER: 4,
|
DAILY: 4, // 每日
|
||||||
EXPEDITION: 5
|
EXPEDITION: 5, // 远征
|
||||||
|
MYSTERY: 6, // 秘境
|
||||||
|
WARLOARDS: 7, // 群雄
|
||||||
|
TOWER: 8, // 天梯
|
||||||
|
PVP: 9, // PVP
|
||||||
|
GUILD_TIMER: 10, // 军团定时副本
|
||||||
|
GUILD_WEEKLY: 11, // 军团周副本
|
||||||
|
MAIN_ELITE: 12 // 主线精英
|
||||||
};
|
};
|
||||||
|
|
||||||
// 事件,是否开启保存随机记录方式
|
// 事件,是否开启保存随机记录方式
|
||||||
@@ -129,16 +136,17 @@ export const EVENT_START_BATTLE = 101;
|
|||||||
export const EXPEDITION_INCREASE_POINT = 2; // 远征每成功一次累计的点数
|
export const EXPEDITION_INCREASE_POINT = 2; // 远征每成功一次累计的点数
|
||||||
|
|
||||||
export const HANG_UP_CONSTS = {
|
export const HANG_UP_CONSTS = {
|
||||||
ENABLE_LV: 2,
|
ENABLE_LV: 2, // 第几层开始可以挂机
|
||||||
UNIT_TIME: 10 * 60 * 1000,
|
UNIT_TIME: 10 * 60 * 1000, // 每几分钟能有一次收益
|
||||||
MAX_TIME: 12 * 60 * 60 * 1000,
|
MAX_TIME: 24 * 60 * 60 * 1000, // 最多可储存24小时收益
|
||||||
MAX_SPD_UP_CNT: 6,
|
MAX_SPD_UP_CNT: 2, // 每天可以收取多少次
|
||||||
REFRESH_TIME: 5
|
REFRESH_TIME: 5, // 每天的几点刷新
|
||||||
|
SPD_UP_REC_TIME: 6 * 60 * 60 * 1000 // 加速直接获得6小时收益
|
||||||
}
|
}
|
||||||
|
|
||||||
export const TOWER_TASK_CONST = {
|
export const TOWER_TASK_CONST = {
|
||||||
REFRESH_TIME: 5,
|
REFRESH_TIME: 5,
|
||||||
RAND_CNT: [1, 1, 1, 1, 1],
|
RAND_CNT: 5,
|
||||||
MAX_HEROES_NUM: 3
|
MAX_HEROES_NUM: 3
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,4 +174,8 @@ export const EVENT_QUIZ_NUM = 3;
|
|||||||
|
|
||||||
export const DEFAULT_HEROES = [ 312, 314, 311, 309, 315];
|
export const DEFAULT_HEROES = [ 312, 314, 311, 309, 315];
|
||||||
|
|
||||||
export const FIX_SMS_CODE_TELS = ['18855953630', '13911134885'];
|
export const FIX_SMS_CODE_TELS = ['18855953630', '13911134885', '15167549151', '15618654010'];
|
||||||
|
|
||||||
|
export const GONGSHI = {
|
||||||
|
"TOWER_HANG_UP_SPEED_COST": "50*num"
|
||||||
|
};
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export const STATUS = {
|
|||||||
EXPEDITION_POINT_NEED_ALL_RECEIVED: { code: 20410, simStr: '宝箱需要领取完才可以刷新' },
|
EXPEDITION_POINT_NEED_ALL_RECEIVED: { code: 20410, simStr: '宝箱需要领取完才可以刷新' },
|
||||||
// 天梯 20500 - 20599
|
// 天梯 20500 - 20599
|
||||||
TOWER_RESET_ERR: { code: 20501, simStr: '只能重置当前层' },
|
TOWER_RESET_ERR: { code: 20501, simStr: '只能重置当前层' },
|
||||||
TOWER_INFO_NOT_FOUND: { code: 20502, simStr: '天梯层数异常' },
|
TOWER_INFO_NOT_FOUND: { code: 20502, simStr: '镇念塔层数异常' },
|
||||||
TOWER_WRONG_BATTLE_ID: { code: 20503, simStr: '战斗 Id 异常' },
|
TOWER_WRONG_BATTLE_ID: { code: 20503, simStr: '战斗 Id 异常' },
|
||||||
TOWER_DUPLICATE_HERO: { code: 20504, simStr: '使用了重复的武将' },
|
TOWER_DUPLICATE_HERO: { code: 20504, simStr: '使用了重复的武将' },
|
||||||
TOWER_DUPLICATE_CHALLENGE: { code: 20505, simStr: '天梯关卡不能重复挑战' },
|
TOWER_DUPLICATE_CHALLENGE: { code: 20505, simStr: '天梯关卡不能重复挑战' },
|
||||||
@@ -62,6 +62,7 @@ export const STATUS = {
|
|||||||
TOWER_TASK_CODE_NOT_FOUND: { code: 20513, simStr: '未找到此任务编号' },
|
TOWER_TASK_CODE_NOT_FOUND: { code: 20513, simStr: '未找到此任务编号' },
|
||||||
TOWER_TASK_SEND_ERR: { code: 20514, simStr: '任务派遣失败,请检查任务编号' },
|
TOWER_TASK_SEND_ERR: { code: 20514, simStr: '任务派遣失败,请检查任务编号' },
|
||||||
TOWER_TASK_BATCH_NOT_FOUND: { code: 20515, simStr: '派遣编码错误' },
|
TOWER_TASK_BATCH_NOT_FOUND: { code: 20515, simStr: '派遣编码错误' },
|
||||||
|
TOWER_GOLD_NOT_ENOUGH: { code: 20516, simStr: '元宝不足' },
|
||||||
// 共斗 20600 - 20699
|
// 共斗 20600 - 20699
|
||||||
COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' },
|
COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' },
|
||||||
// 养成相关状态 30000 - 39999
|
// 养成相关状态 30000 - 39999
|
||||||
|
|||||||
@@ -2,6 +2,12 @@ import { HANG_UP_CONSTS } from './../consts/consts';
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
||||||
|
|
||||||
|
class Goods {
|
||||||
|
@prop({ required: true })
|
||||||
|
gid: number; // 物品id
|
||||||
|
@prop({ required: false })
|
||||||
|
count: number; // 这次挂机没来得及领取的
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 挂机记录表
|
* 挂机记录表
|
||||||
*/
|
*/
|
||||||
@@ -26,6 +32,9 @@ export default class HangUpRecord extends BaseModel {
|
|||||||
@prop({ required: false })
|
@prop({ required: false })
|
||||||
endTime: Date; // 结束挂机的时间
|
endTime: Date; // 结束挂机的时间
|
||||||
|
|
||||||
|
@prop({ required: true, default: [], type: Goods })
|
||||||
|
notReceivedGoods: Array<Goods>
|
||||||
|
|
||||||
@prop({ required: true, default: false })
|
@prop({ required: true, default: false })
|
||||||
received: boolean; // 是否已经领取,true-领取,false-未领取
|
received: boolean; // 是否已经领取,true-领取,false-未领取
|
||||||
|
|
||||||
@@ -42,11 +51,17 @@ export default class HangUpRecord extends BaseModel {
|
|||||||
return rec;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async updateRec(roleId: string, roleName: string, endLv: number, endTime: Date, lean = true) {
|
public static async getLastRec(roleId: string, lean = true) {
|
||||||
await HangUpRecordModel.findOneAndUpdate({roleId, received: false}, {endLv, endTime, received: true}).lean(lean);
|
const rec = await HangUpRecordModel.findOne({roleId, received: true}).sort({endTime: -1}).lean(lean);
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateRec(roleId: string, roleName: string, endLv: number, endTime: Date, needReceiveGoods: Array<{gid:number, count: number}>, lean = true) {
|
||||||
|
await HangUpRecordModel.findOneAndUpdate({roleId, received: false}, {endLv, endTime, received: true, notReceivedGoods: needReceiveGoods}).lean(lean);
|
||||||
const recDoc = new HangUpRecordModel();
|
const recDoc = new HangUpRecordModel();
|
||||||
const update = Object.assign(recDoc.toJSON(), {roleId, roleName, startTime: endTime});
|
const update = Object.assign(recDoc.toJSON(), {roleId, roleName, startTime: endTime});
|
||||||
const newRec = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: endLv}, update, {upsert: true, new: true}).lean(lean);
|
delete update._id;
|
||||||
|
const newRec = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: endLv, received: false}, update, {upsert: true, new: true}).lean(lean);
|
||||||
return newRec;
|
return newRec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,19 @@
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
||||||
|
|
||||||
|
class Goods {
|
||||||
|
@prop({ required: true })
|
||||||
|
gid: number; // 物品id
|
||||||
|
@prop({ required: false })
|
||||||
|
count: number; // 这次挂机没来得及领取的
|
||||||
|
}
|
||||||
|
|
||||||
|
class NotReceivedGoods {
|
||||||
|
@prop({ required: true })
|
||||||
|
cnt: number; // 加速的次数
|
||||||
|
@prop({ required: true, default: [], type: Goods })
|
||||||
|
goods: Array<Goods>; // 这次挂机没来得及领取的
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 挂机记录表
|
* 挂机记录表
|
||||||
*/
|
*/
|
||||||
@@ -18,9 +31,25 @@ export default class HangUpSpdUpRec extends BaseModel {
|
|||||||
@prop({required: true, default: 1})
|
@prop({required: true, default: 1})
|
||||||
lv: number; // 天梯层数
|
lv: number; // 天梯层数
|
||||||
|
|
||||||
public static async updateRec(roleId, roleName, multi, lv, lean = true ) {
|
@prop({ required: true, default: [], type: NotReceivedGoods })
|
||||||
|
notReceivedGoodsList: Array<NotReceivedGoods>
|
||||||
|
|
||||||
|
public static async getSpdUpRec(roleId, lv, lean = true ) {
|
||||||
|
let rec = await HangUpSpdUpRecModel.findOne({roleId, lv}).lean(lean);
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateRec(roleId, roleName, multi, lv, needReceiveGoods: Array<{gid:number, count: number}>, lean = true ) {
|
||||||
if (multi <= 0) return null;
|
if (multi <= 0) return null;
|
||||||
let rec = await HangUpSpdUpRecModel.findOneAndUpdate({roleId, lv, roleName}, {$inc: {cnt: multi}}, {upsert: true, new: true}).lean(lean);
|
let rec = await HangUpSpdUpRecModel.findOneAndUpdate({roleId, lv, roleName}, {$inc: {cnt: multi}}, {upsert: true, new: true}).lean(lean);
|
||||||
|
if(rec && needReceiveGoods.length > 0) {
|
||||||
|
let {cnt} = rec;
|
||||||
|
let goods = [{
|
||||||
|
cnt: cnt,
|
||||||
|
goods: needReceiveGoods
|
||||||
|
}];
|
||||||
|
await HangUpSpdUpRecModel.findOneAndUpdate({roleId, lv, roleName}, {$push: {notReceivedGoodsList: {$each: goods}}}, {upsert: true, new: true}).lean(lean);
|
||||||
|
}
|
||||||
return rec;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-3
@@ -159,10 +159,10 @@ export default class Role extends BaseModel {
|
|||||||
public static async hangUpSpdUp(roleId: string, cnt: number, curTime: Date, lean = true) {
|
public static async hangUpSpdUp(roleId: string, cnt: number, curTime: Date, lean = true) {
|
||||||
if (cnt < 0) return null;
|
if (cnt < 0) return null;
|
||||||
|
|
||||||
const result = await RoleModel.findOneAndUpdate({roleId}, {$inc: {hangUpSpdUpCnt: -cnt}, lastSpdUpTime: curTime}, {new: true}).lean(lean);
|
const result = await RoleModel.findOne({roleId}).lean(lean);
|
||||||
const lastSpdUpTime = result?result.lastSpdUpTime: curTime;
|
const lastSpdUpTime = result?.lastSpdUpTime;
|
||||||
let role = null;
|
let role = null;
|
||||||
if (shouldRefresh(lastSpdUpTime, curTime, HANG_UP_CONSTS.REFRESH_TIME, 1) && cnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT) {
|
if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime, HANG_UP_CONSTS.REFRESH_TIME, 1) && cnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) {
|
||||||
role = await RoleModel.findOneAndUpdate({roleId}, {hangUpSpdUpCnt: HANG_UP_CONSTS.MAX_SPD_UP_CNT - cnt, lastSpdUpTime: curTime}, {new: true}).lean(lean);
|
role = await RoleModel.findOneAndUpdate({roleId}, {hangUpSpdUpCnt: HANG_UP_CONSTS.MAX_SPD_UP_CNT - cnt, lastSpdUpTime: curTime}, {new: true}).lean(lean);
|
||||||
} else {
|
} else {
|
||||||
role = await RoleModel.findOneAndUpdate({roleId, hangUpSpdUpCnt: {$gte: cnt}}, {$inc: {hangUpSpdUpCnt: -cnt}, lastSpdUpTime: curTime}, {new: true}).lean(lean);
|
role = await RoleModel.findOneAndUpdate({roleId, hangUpSpdUpCnt: {$gte: cnt}}, {$inc: {hangUpSpdUpCnt: -cnt}, lastSpdUpTime: curTime}, {new: true}).lean(lean);
|
||||||
@@ -221,6 +221,11 @@ try {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async costGold(roleId: string, cnt: number, lean = true) {
|
||||||
|
let result = await RoleModel.findOneAndUpdate({roleId, gold: {$gte: cnt}}, { $inc: { gold: -cnt, totalCost: cnt } }, { "new": true}).lean(lean);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public static async pushWarStar(roleId: string, battleId: number, warType: number, star: number, lean = true) {
|
public static async pushWarStar(roleId: string, battleId: number, warType: number, star: number, lean = true) {
|
||||||
let result = await RoleModel.findOneAndUpdate({roleId}, { $addToSet: { warStar: {id: battleId, warType, star }} }, { "new": true, "upsert": true}).lean(lean);
|
let result = await RoleModel.findOneAndUpdate({roleId}, { $addToSet: { warStar: {id: battleId, warType, star }} }, { "new": true, "upsert": true}).lean(lean);
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -35,8 +35,9 @@ export default class TowerRecord extends BaseModel {
|
|||||||
|
|
||||||
public static async createRecord(towerInfo: {roleId: string, lv: number, warStatus: Array<WarStatus>}, lean = true) {
|
public static async createRecord(towerInfo: {roleId: string, lv: number, warStatus: Array<WarStatus>}, lean = true) {
|
||||||
const recDoc = new TowerRecordModel();
|
const recDoc = new TowerRecordModel();
|
||||||
const update = Object.assign(towerInfo, recDoc.toJSON());
|
const update = Object.assign(recDoc.toJSON(), towerInfo );
|
||||||
const { roleId, lv } = towerInfo;
|
const { roleId, lv } = towerInfo;
|
||||||
|
console.log(JSON.stringify(towerInfo))
|
||||||
let rec = await TowerRecordModel.findOneAndUpdate({roleId, lv}, {$set: update}, {upsert: true, new: true}).lean(lean);
|
let rec = await TowerRecordModel.findOneAndUpdate({roleId, lv}, {$set: update}, {upsert: true, new: true}).lean(lean);
|
||||||
return rec;
|
return rec;
|
||||||
}
|
}
|
||||||
@@ -51,12 +52,23 @@ export default class TowerRecord extends BaseModel {
|
|||||||
* @param lean
|
* @param lean
|
||||||
*/
|
*/
|
||||||
public static async updateRecord(roleId: string, lv: number, battleCode: string, warId: number, heroes: Array<number>, inc: number, lean = true) {
|
public static async updateRecord(roleId: string, lv: number, battleCode: string, warId: number, heroes: Array<number>, inc: number, lean = true) {
|
||||||
const rec = await TowerRecordModel.findOneAndUpdate(
|
let tower = await TowerRecordModel.findOne({roleId, lv, 'warStatus.warId': warId});
|
||||||
{roleId, lv, 'warStatus.warId': warId},
|
if(tower) {
|
||||||
{$set: {'warStatus.$.status': true, 'warStatus.$.battleCode': battleCode, passed: inc === 1 ? true : false}, $push: {heroes: {$each: heroes}}},
|
const rec = await TowerRecordModel.findOneAndUpdate(
|
||||||
{new: true, upsert: true}
|
{roleId, lv, 'warStatus.warId': warId},
|
||||||
).lean(lean);
|
{$set: {'warStatus.$.status': true, 'warStatus.$.battleCode': battleCode, passed: inc === 1 ? true : false}, $push: {heroes: {$each: heroes}}},
|
||||||
return rec;
|
{new: true, upsert: true}
|
||||||
|
).lean(lean);
|
||||||
|
return rec;
|
||||||
|
} else {
|
||||||
|
let warStatus = [{warId, status: true,battleCode, passed: inc === 1 ? true : false}];
|
||||||
|
const rec = await TowerRecordModel.findOneAndUpdate(
|
||||||
|
{roleId, lv},
|
||||||
|
{ $push: {heroes: {$each: heroes}, warStatus: {$each: warStatus}}},
|
||||||
|
{new: true, upsert: true}
|
||||||
|
).lean(lean);
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ const wars = ['dic_zyz_gk_main', 'dic_zyz_gk_mainElite', 'dic_zyz_gk_daily', 'di
|
|||||||
const allWarInfos = new Map<number, any>();
|
const allWarInfos = new Map<number, any>();
|
||||||
const towerInfos = new Map<number, any>();
|
const towerInfos = new Map<number, any>();
|
||||||
const towerTaskInfos = new Map<number, any>();
|
const towerTaskInfos = new Map<number, any>();
|
||||||
const towerTasksByQuality = new Map<number, Array<number>>();
|
const towerTasksByFloor = new Map<number, Array<number>>();
|
||||||
const heroInfos = new Map<number, any>();
|
const heroInfos = new Map<number, any>();
|
||||||
const jobInfos = new Map<number, any>();
|
const jobInfos = new Map<number, any>();
|
||||||
const levelInfos = new Map<number, {sum: number, cur: number}>();
|
const levelInfos = new Map<number, {sum: number, cur: number}>();
|
||||||
@@ -28,8 +28,8 @@ function parseTowerData() {
|
|||||||
const towerFile = 'dic_zyz_tower';
|
const towerFile = 'dic_zyz_tower';
|
||||||
const towerData = gamedata['jsons'][towerFile] || [];
|
const towerData = gamedata['jsons'][towerFile] || [];
|
||||||
towerData.forEach(elem => {
|
towerData.forEach(elem => {
|
||||||
if (elem.lv) {
|
if (elem.towerFloor) {
|
||||||
towerInfos.set(elem.lv, elem);
|
towerInfos.set(elem.towerFloor, elem);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -40,9 +40,9 @@ function parseTowerTaskData() {
|
|||||||
towerTaskData.forEach(elem => {
|
towerTaskData.forEach(elem => {
|
||||||
if (elem && elem.taskId) {
|
if (elem && elem.taskId) {
|
||||||
towerTaskInfos.set(elem.taskId, elem);
|
towerTaskInfos.set(elem.taskId, elem);
|
||||||
let tasks = towerTasksByQuality.get(elem.quality) || [];
|
let tasks = towerTasksByFloor.get(elem.suitFloor) || [];
|
||||||
tasks.push(elem.taskId);
|
tasks.push(elem.taskId);
|
||||||
towerTasksByQuality.set(elem.quality, tasks);
|
towerTasksByFloor.set(elem.suitFloor, tasks);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -153,8 +153,8 @@ export function getTaskById(tid: number) {
|
|||||||
return taskInfo;
|
return taskInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getTaskIdByQuality(quality: number) {
|
export function getTaskIdByFloor(floor: number) {
|
||||||
const taskIds = towerTasksByQuality.get(quality);
|
const taskIds = towerTasksByFloor.get(floor);
|
||||||
return taskIds;
|
return taskIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+80
-3
@@ -67,6 +67,18 @@ const moment = require('moment');
|
|||||||
result = x;
|
result = x;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'decimalReward': {
|
||||||
|
let [gid, count] = arr;
|
||||||
|
if(isNaN(gid) || isNaN(count)) throw new Error('data table format wrong');
|
||||||
|
result = { gid: parseInt(gid), count: parseFloat(count) };
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'towerTaskCondition': {
|
||||||
|
let [type, param, cnt] = arr;
|
||||||
|
if(isNaN(type) || isNaN(param)|| isNaN(cnt)) throw new Error('data table format wrong');
|
||||||
|
result = { type: parseInt(type), param: parseInt(param), cnt: parseInt(cnt) };
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
@@ -76,9 +88,14 @@ const moment = require('moment');
|
|||||||
* 将 | 分隔的字符串解析为数组,如:a|b|c 解析为[a, b, c]
|
* 将 | 分隔的字符串解析为数组,如:a|b|c 解析为[a, b, c]
|
||||||
* @param str 要解析的字符串
|
* @param str 要解析的字符串
|
||||||
*/
|
*/
|
||||||
export function decodeArrayStr(str: string) {
|
export function decodeArrayStr(str: string, splitForm='|') {
|
||||||
if(str == '&') str = '';
|
let last = str.substr(str.length-1, 1);
|
||||||
return str.split('|');
|
if(last == '&') str = str.substr(0, str.length - 1);
|
||||||
|
if(str == '') {
|
||||||
|
return []
|
||||||
|
} else {
|
||||||
|
return str.split(splitForm);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -189,3 +206,63 @@ export function resResult(status: {code: number, simStr: string}, data = null, c
|
|||||||
}
|
}
|
||||||
return {code, msg: customMsg || simStr, data};
|
return {code, msg: customMsg || simStr, data};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 消除 js 浮点计算bug
|
||||||
|
|
||||||
|
export const cal = {
|
||||||
|
add: function(a:number, b:number) {
|
||||||
|
var c:number, d:number, e:number;
|
||||||
|
try {
|
||||||
|
c = a.toString().split(".")[1].length;
|
||||||
|
} catch (f) {
|
||||||
|
c = 0;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
d = b.toString().split(".")[1].length;
|
||||||
|
} catch (f) {
|
||||||
|
d = 0;
|
||||||
|
}
|
||||||
|
e = Math.pow(10, Math.max(c, d));
|
||||||
|
return (this.mul(a, e) + this.mul(b, e)) / e;
|
||||||
|
},
|
||||||
|
sub: function sub(a:number, b:number) {
|
||||||
|
var c:number, d:number, e:number;
|
||||||
|
try {
|
||||||
|
c = a.toString().split(".")[1].length;
|
||||||
|
} catch (f) {
|
||||||
|
c = 0;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
d = b.toString().split(".")[1].length;
|
||||||
|
} catch (f) {
|
||||||
|
d = 0;
|
||||||
|
}
|
||||||
|
e = Math.pow(10, Math.max(c, d));
|
||||||
|
return (this.mul(a, e) - this.mul(b, e)) / e;
|
||||||
|
},
|
||||||
|
mul: function mul(a:number, b:number) {
|
||||||
|
var c = 0,
|
||||||
|
d = a.toString(),
|
||||||
|
e = b.toString();
|
||||||
|
try {
|
||||||
|
c += d.split(".")[1].length;
|
||||||
|
} catch (f) {}
|
||||||
|
try {
|
||||||
|
c += e.split(".")[1].length;
|
||||||
|
} catch (f) {}
|
||||||
|
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
|
||||||
|
},
|
||||||
|
div: function div(a:number, b:number) {
|
||||||
|
var c:number, d:number, e = 0,
|
||||||
|
f = 0;
|
||||||
|
try {
|
||||||
|
e = a.toString().split(".")[1].length;
|
||||||
|
} catch (g) {}
|
||||||
|
try {
|
||||||
|
f = b.toString().split(".")[1].length;
|
||||||
|
} catch (g) {}
|
||||||
|
c = Number(a.toString().replace(".", ""));
|
||||||
|
d = Number(b.toString().replace(".", ""));
|
||||||
|
return this.mul(c / d, Math.pow(10, f - e));
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1 +1,127 @@
|
|||||||
[{"war_id":3001,"dispatchJsonId":3001,"bg_img_id":3001,"script_id":0,"fixReward":"&","conditionReward":"&","RandomReward":"&","warType":4,"gk_name":"每日&护送商人","kingExp":100,"lvLimted":10,"turnLimted":20,"forcedCharactor":"&","fobiddenCharactor":"&","victoryInfoInUI":"商人到达安全地区","loseInfoInUI":"商人死亡\n我方全部阵亡","starInfoInUI":"无","cost":15,"sSpineInUI":"1&daobing|1&gongbing","detailUIBg":"zhending","recommendedPower":10008,"previousGk":0,"dailyType":1},{"war_id":3002,"dispatchJsonId":3002,"bg_img_id":3002,"script_id":0,"fixReward":"&","conditionReward":"&","RandomReward":"&","warType":4,"gk_name":"每日&护送商人","kingExp":100,"lvLimted":10,"turnLimted":20,"forcedCharactor":"&","fobiddenCharactor":"&","victoryInfoInUI":"商人到达安全地区","loseInfoInUI":"商人死亡\n我方全部阵亡","starInfoInUI":"无","cost":15,"sSpineInUI":"1&daobing|1&gongbing","detailUIBg":"zhending","recommendedPower":10008,"previousGk":3001,"dailyType":1},{"war_id":3003,"dispatchJsonId":3003,"bg_img_id":3003,"script_id":0,"fixReward":"&","conditionReward":"&","RandomReward":"&","warType":4,"gk_name":"每日&护送商人","kingExp":100,"lvLimted":10,"turnLimted":20,"forcedCharactor":"&","fobiddenCharactor":"&","victoryInfoInUI":"商人到达安全地区","loseInfoInUI":"商人死亡\n我方全部阵亡","starInfoInUI":"无","cost":15,"sSpineInUI":"1&daobing|1&gongbing","detailUIBg":"zhending","recommendedPower":10008,"previousGk":3002,"dailyType":1},{"war_id":3004,"dispatchJsonId":3004,"bg_img_id":3004,"script_id":0,"fixReward":"&","conditionReward":"&","RandomReward":"&","warType":4,"gk_name":"每日&护送商人","kingExp":100,"lvLimted":10,"turnLimted":20,"forcedCharactor":"&","fobiddenCharactor":"&","victoryInfoInUI":"商人到达安全地区","loseInfoInUI":"商人死亡\n我方全部阵亡","starInfoInUI":"无","cost":15,"sSpineInUI":"1&daobing|1&gongbing","detailUIBg":"zhending","recommendedPower":10008,"previousGk":3003,"dailyType":1},{"war_id":3005,"dispatchJsonId":3005,"bg_img_id":3005,"script_id":0,"fixReward":"&","conditionReward":"&","RandomReward":"&","warType":4,"gk_name":"每日&护送商人","kingExp":100,"lvLimted":10,"turnLimted":20,"forcedCharactor":"&","fobiddenCharactor":"&","victoryInfoInUI":"商人到达安全地区","loseInfoInUI":"商人死亡\n我方全部阵亡","starInfoInUI":"无","cost":15,"sSpineInUI":"1&daobing|1&gongbing","detailUIBg":"zhending","recommendedPower":10008,"previousGk":3004,"dailyType":1}]
|
[
|
||||||
|
{
|
||||||
|
"war_id": 3001,
|
||||||
|
"dispatchJsonId": 3001,
|
||||||
|
"bg_img_id": 3001,
|
||||||
|
"script_id": 0,
|
||||||
|
"fixReward": "&",
|
||||||
|
"conditionReward": "&",
|
||||||
|
"RandomReward": "&",
|
||||||
|
"warType": 2,
|
||||||
|
"gk_name": "每日&护送商人",
|
||||||
|
"kingExp": 100,
|
||||||
|
"lvLimted": 10,
|
||||||
|
"turnLimted": 20,
|
||||||
|
"forcedCharactor": "&",
|
||||||
|
"fobiddenCharactor": "&",
|
||||||
|
"victoryInfoInUI": "商人到达安全地区",
|
||||||
|
"loseInfoInUI": "商人死亡\n我方全部阵亡",
|
||||||
|
"starInfoInUI": "无",
|
||||||
|
"cost": 15,
|
||||||
|
"sSpineInUI": "1&daobing|1&gongbing",
|
||||||
|
"detailUIBg": "zhending",
|
||||||
|
"recommendedPower": 10008,
|
||||||
|
"previousGk": 0,
|
||||||
|
"dailyType": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"war_id": 3002,
|
||||||
|
"dispatchJsonId": 3002,
|
||||||
|
"bg_img_id": 3002,
|
||||||
|
"script_id": 0,
|
||||||
|
"fixReward": "&",
|
||||||
|
"conditionReward": "&",
|
||||||
|
"RandomReward": "&",
|
||||||
|
"warType": 2,
|
||||||
|
"gk_name": "每日&护送商人",
|
||||||
|
"kingExp": 100,
|
||||||
|
"lvLimted": 10,
|
||||||
|
"turnLimted": 20,
|
||||||
|
"forcedCharactor": "&",
|
||||||
|
"fobiddenCharactor": "&",
|
||||||
|
"victoryInfoInUI": "商人到达安全地区",
|
||||||
|
"loseInfoInUI": "商人死亡\n我方全部阵亡",
|
||||||
|
"starInfoInUI": "无",
|
||||||
|
"cost": 15,
|
||||||
|
"sSpineInUI": "1&daobing|1&gongbing",
|
||||||
|
"detailUIBg": "zhending",
|
||||||
|
"recommendedPower": 10008,
|
||||||
|
"previousGk": 3001,
|
||||||
|
"dailyType": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"war_id": 3003,
|
||||||
|
"dispatchJsonId": 3003,
|
||||||
|
"bg_img_id": 3003,
|
||||||
|
"script_id": 0,
|
||||||
|
"fixReward": "&",
|
||||||
|
"conditionReward": "&",
|
||||||
|
"RandomReward": "&",
|
||||||
|
"warType": 2,
|
||||||
|
"gk_name": "每日&护送商人",
|
||||||
|
"kingExp": 100,
|
||||||
|
"lvLimted": 10,
|
||||||
|
"turnLimted": 20,
|
||||||
|
"forcedCharactor": "&",
|
||||||
|
"fobiddenCharactor": "&",
|
||||||
|
"victoryInfoInUI": "商人到达安全地区",
|
||||||
|
"loseInfoInUI": "商人死亡\n我方全部阵亡",
|
||||||
|
"starInfoInUI": "无",
|
||||||
|
"cost": 15,
|
||||||
|
"sSpineInUI": "1&daobing|1&gongbing",
|
||||||
|
"detailUIBg": "zhending",
|
||||||
|
"recommendedPower": 10008,
|
||||||
|
"previousGk": 3002,
|
||||||
|
"dailyType": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"war_id": 3004,
|
||||||
|
"dispatchJsonId": 3004,
|
||||||
|
"bg_img_id": 3004,
|
||||||
|
"script_id": 0,
|
||||||
|
"fixReward": "&",
|
||||||
|
"conditionReward": "&",
|
||||||
|
"RandomReward": "&",
|
||||||
|
"warType": 2,
|
||||||
|
"gk_name": "每日&护送商人",
|
||||||
|
"kingExp": 100,
|
||||||
|
"lvLimted": 10,
|
||||||
|
"turnLimted": 20,
|
||||||
|
"forcedCharactor": "&",
|
||||||
|
"fobiddenCharactor": "&",
|
||||||
|
"victoryInfoInUI": "商人到达安全地区",
|
||||||
|
"loseInfoInUI": "商人死亡\n我方全部阵亡",
|
||||||
|
"starInfoInUI": "无",
|
||||||
|
"cost": 15,
|
||||||
|
"sSpineInUI": "1&daobing|1&gongbing",
|
||||||
|
"detailUIBg": "zhending",
|
||||||
|
"recommendedPower": 10008,
|
||||||
|
"previousGk": 3003,
|
||||||
|
"dailyType": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"war_id": 3005,
|
||||||
|
"dispatchJsonId": 3005,
|
||||||
|
"bg_img_id": 3005,
|
||||||
|
"script_id": 0,
|
||||||
|
"fixReward": "&",
|
||||||
|
"conditionReward": "&",
|
||||||
|
"RandomReward": "&",
|
||||||
|
"warType": 2,
|
||||||
|
"gk_name": "每日&护送商人",
|
||||||
|
"kingExp": 100,
|
||||||
|
"lvLimted": 10,
|
||||||
|
"turnLimted": 20,
|
||||||
|
"forcedCharactor": "&",
|
||||||
|
"fobiddenCharactor": "&",
|
||||||
|
"victoryInfoInUI": "商人到达安全地区",
|
||||||
|
"loseInfoInUI": "商人死亡\n我方全部阵亡",
|
||||||
|
"starInfoInUI": "无",
|
||||||
|
"cost": 15,
|
||||||
|
"sSpineInUI": "1&daobing|1&gongbing",
|
||||||
|
"detailUIBg": "zhending",
|
||||||
|
"recommendedPower": 10008,
|
||||||
|
"previousGk": 3004,
|
||||||
|
"dailyType": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔1层",
|
"gk_name": "镇念塔1层&黄天当立",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&1001|1&312|1&1001|1&1004",
|
||||||
"recommendedPower": 10000,
|
"recommendedPower": 10000,
|
||||||
"previousGk": 0
|
"previousGk": 0
|
||||||
},
|
},
|
||||||
@@ -29,8 +30,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔2层",
|
"gk_name": "镇念塔2层&酒池肉林",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -40,6 +41,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&1001|1&314|1&1001|1&1004",
|
||||||
"recommendedPower": 10001,
|
"recommendedPower": 10001,
|
||||||
"previousGk": 10001
|
"previousGk": 10001
|
||||||
},
|
},
|
||||||
@@ -51,8 +53,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔3层",
|
"gk_name": "镇念塔3层&江东旧臣",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -62,6 +64,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&1001|1&1004|1&309|1&1004",
|
||||||
"recommendedPower": 10002,
|
"recommendedPower": 10002,
|
||||||
"previousGk": 10002
|
"previousGk": 10002
|
||||||
},
|
},
|
||||||
@@ -73,8 +76,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔4层",
|
"gk_name": "镇念塔4层&天下无双",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -84,6 +87,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&1001|1&312|1&1001|1&1004",
|
||||||
"recommendedPower": 10003,
|
"recommendedPower": 10003,
|
||||||
"previousGk": 10003
|
"previousGk": 10003
|
||||||
},
|
},
|
||||||
@@ -95,8 +99,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔5层",
|
"gk_name": "镇念塔5层&五子良将",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -106,6 +110,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&1001|1&1006|1&315|1&1004",
|
||||||
"recommendedPower": 10004,
|
"recommendedPower": 10004,
|
||||||
"previousGk": 10004
|
"previousGk": 10004
|
||||||
},
|
},
|
||||||
@@ -117,8 +122,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔6层",
|
"gk_name": "镇念塔5层&五子良将",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -128,8 +133,9 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&1001|1&1006|1&344|1&1004",
|
||||||
"recommendedPower": 10005,
|
"recommendedPower": 10005,
|
||||||
"previousGk": 10005
|
"previousGk": 10004
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"war_id": 10007,
|
"war_id": 10007,
|
||||||
@@ -139,8 +145,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔7层",
|
"gk_name": "镇念塔6层&五虎上将",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -150,6 +156,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&309|1&1006|1&311|1&1004",
|
||||||
"recommendedPower": 10006,
|
"recommendedPower": 10006,
|
||||||
"previousGk": 10006
|
"previousGk": 10006
|
||||||
},
|
},
|
||||||
@@ -161,8 +168,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔8层",
|
"gk_name": "镇念塔7层&鹰视狼顾",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -172,6 +179,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&344|1&314|1&1001|1&1004",
|
||||||
"recommendedPower": 10007,
|
"recommendedPower": 10007,
|
||||||
"previousGk": 10007
|
"previousGk": 10007
|
||||||
},
|
},
|
||||||
@@ -183,8 +191,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔9层",
|
"gk_name": "镇念塔8层&明明如月",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -194,6 +202,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&1001|1&314|1&1001|1&312",
|
||||||
"recommendedPower": 10008,
|
"recommendedPower": 10008,
|
||||||
"previousGk": 10008
|
"previousGk": 10008
|
||||||
},
|
},
|
||||||
@@ -205,8 +214,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔10层",
|
"gk_name": "镇念塔9层&曹氏五虎",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -216,6 +225,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&1004|1&1001|1&314|1&315|1&312",
|
||||||
"recommendedPower": 10009,
|
"recommendedPower": 10009,
|
||||||
"previousGk": 10009
|
"previousGk": 10009
|
||||||
},
|
},
|
||||||
@@ -227,8 +237,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔11层",
|
"gk_name": "镇念塔10层&蛮族之恋",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -238,6 +248,7 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&312|1&344|1&314|1&315|1&311",
|
||||||
"recommendedPower": 10010,
|
"recommendedPower": 10010,
|
||||||
"previousGk": 10010
|
"previousGk": 10010
|
||||||
},
|
},
|
||||||
@@ -249,8 +260,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔12层",
|
"gk_name": "镇念塔10层&名将挑战",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -260,8 +271,9 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&312|1&309|1&314|1&315|1&311",
|
||||||
"recommendedPower": 10011,
|
"recommendedPower": 10011,
|
||||||
"previousGk": 10011
|
"previousGk": 10010
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"war_id": 10013,
|
"war_id": 10013,
|
||||||
@@ -271,8 +283,8 @@
|
|||||||
"fixReward": "&",
|
"fixReward": "&",
|
||||||
"conditionReward": "&",
|
"conditionReward": "&",
|
||||||
"RandomReward": "&",
|
"RandomReward": "&",
|
||||||
"warType": 4,
|
"warType": 8,
|
||||||
"gk_name": "镇念塔&镇念塔13层",
|
"gk_name": "镇念塔10层&桃园结义",
|
||||||
"kingExp": 100,
|
"kingExp": 100,
|
||||||
"lvLimted": 1,
|
"lvLimted": 1,
|
||||||
"turnLimted": 20,
|
"turnLimted": 20,
|
||||||
@@ -282,7 +294,8 @@
|
|||||||
"loseInfoInUI": "我方全部阵亡",
|
"loseInfoInUI": "我方全部阵亡",
|
||||||
"starInfoInUI": "无",
|
"starInfoInUI": "无",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
|
"heroInUI": "1&312|1&344|1&314|1&315|1&309",
|
||||||
"recommendedPower": 10012,
|
"recommendedPower": 10012,
|
||||||
"previousGk": 10012
|
"previousGk": 10010
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1,324 +1,278 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"towerFloor": 1,
|
"towerFloor": 1,
|
||||||
"warArray": "10001&",
|
"warArray": "10001&",
|
||||||
"reward": "13005&1|17002&10|17006&2|17006&3",
|
"reward": "13005&1|17002&10|17006&2|17006&3",
|
||||||
"rewardOfcollect": "&",
|
"rewardOfcollect": "13005&1|17002&1"
|
||||||
"heroGroup": "1004&1001&312&1001&1004"
|
},
|
||||||
},
|
{
|
||||||
{
|
"towerFloor": 2,
|
||||||
"towerFloor": 2,
|
"warArray": "10002&",
|
||||||
"warArray": "10002&",
|
"reward": "13005&1|17002&10|17006&2|17006&3",
|
||||||
"reward": "13005&1|17002&10|17006&2|17006&3",
|
"rewardOfcollect": "13005&1|17002&1"
|
||||||
"rewardOfcollect": "&",
|
},
|
||||||
"heroGroup": "1004&1001&314&1001&1004"
|
{
|
||||||
},
|
"towerFloor": 3,
|
||||||
{
|
"warArray": "10003&",
|
||||||
"towerFloor": 3,
|
"reward": "13005&1|17002&10|17006&2|17006&3",
|
||||||
"warArray": "10003&",
|
"rewardOfcollect": "13005&1|17002&1|17006&0.01"
|
||||||
"reward": "13005&1|17002&10|17006&2|17006&3",
|
},
|
||||||
"rewardOfcollect": "&",
|
{
|
||||||
"heroGroup": "1004&1001&1004&309&1004"
|
"towerFloor": 4,
|
||||||
},
|
"warArray": "10004&",
|
||||||
{
|
"reward": "13005&1|17002&10|17006&2|17006&3",
|
||||||
"towerFloor": 4,
|
"rewardOfcollect": "13005&1|17002&1"
|
||||||
"warArray": "10004&",
|
},
|
||||||
"reward": "13005&1|17002&10|17006&2|17006&3",
|
{
|
||||||
"rewardOfcollect": "&",
|
"towerFloor": 5,
|
||||||
"heroGroup": "1004&1001&312&1001&1004"
|
"warArray": "10005&10006",
|
||||||
},
|
"reward": "13010&1|17003&30|17006&20|17006&20",
|
||||||
{
|
"rewardOfcollect": "13005&2|17002&1"
|
||||||
"towerFloor": 5,
|
},
|
||||||
"warArray": "10005&10006",
|
{
|
||||||
"reward": "13010&1|17003&30|17006&20|17006&20",
|
"towerFloor": 6,
|
||||||
"rewardOfcollect": "&",
|
"warArray": "10007&",
|
||||||
"heroGroup": "1004&1001&1006&315&1004|1004&1001&1006&344&1004"
|
"reward": "13005&1|17002&10|17006&2|17006&8",
|
||||||
},
|
"rewardOfcollect": "13005&2|17002&1"
|
||||||
{
|
},
|
||||||
"towerFloor": 6,
|
{
|
||||||
"warArray": "10007&",
|
"towerFloor": 7,
|
||||||
"reward": "13005&1|17002&10|17006&2|17006&8",
|
"warArray": "10008&",
|
||||||
"rewardOfcollect": "&",
|
"reward": "13005&1|17002&10|17006&2|17006&9",
|
||||||
"heroGroup": "1004&309&1006&311&1004"
|
"rewardOfcollect": "13005&2|17002&1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"towerFloor": 7,
|
"towerFloor": 8,
|
||||||
"warArray": "10008&",
|
"warArray": "10009&",
|
||||||
"reward": "13005&1|17002&10|17006&2|17006&9",
|
"reward": "13005&1|17002&10|17006&2|17006&10",
|
||||||
"rewardOfcollect": "&",
|
"rewardOfcollect": "13005&2|17002&1"
|
||||||
"heroGroup": "1004&344&314&1001&1004"
|
},
|
||||||
},
|
{
|
||||||
{
|
"towerFloor": 9,
|
||||||
"towerFloor": 8,
|
"warArray": "10010&",
|
||||||
"warArray": "10009&",
|
"reward": "13005&1|17002&10|17006&2|17006&11",
|
||||||
"reward": "13005&1|17002&10|17006&2|17006&10",
|
"rewardOfcollect": "13005&2|17002&1"
|
||||||
"rewardOfcollect": "&",
|
},
|
||||||
"heroGroup": "312&1001&1004&1001&314"
|
{
|
||||||
},
|
"towerFloor": 10,
|
||||||
{
|
"warArray": "10011&10012&10013",
|
||||||
"towerFloor": 9,
|
"reward": "13015&1|17004&30|17006&30|17006&30",
|
||||||
"warArray": "10010&",
|
"rewardOfcollect": "13005&2|17002&2"
|
||||||
"reward": "13005&1|17002&10|17006&2|17006&11",
|
},
|
||||||
"rewardOfcollect": "&",
|
{
|
||||||
"heroGroup": "1004&1001&314&315&312"
|
"towerFloor": 11,
|
||||||
},
|
"warArray": "&",
|
||||||
{
|
"reward": "&",
|
||||||
"towerFloor": 10,
|
"rewardOfcollect": "&"
|
||||||
"warArray": "10011&10012&10013",
|
},
|
||||||
"reward": "13015&1|17004&30|17006&30|17006&30",
|
{
|
||||||
"rewardOfcollect": "&",
|
"towerFloor": 12,
|
||||||
"heroGroup": "312&344&314&315&311|312&309&314&315&311|312&344&314&315&309"
|
"warArray": "&",
|
||||||
},
|
"reward": "&",
|
||||||
{
|
"rewardOfcollect": "&"
|
||||||
"towerFloor": 11,
|
},
|
||||||
"warArray": "&",
|
{
|
||||||
"reward": 0,
|
"towerFloor": 13,
|
||||||
"rewardOfcollect": "&",
|
"warArray": "&",
|
||||||
"heroGroup": 0
|
"reward": "&",
|
||||||
},
|
"rewardOfcollect": "&"
|
||||||
{
|
},
|
||||||
"towerFloor": 12,
|
{
|
||||||
"warArray": "&",
|
"towerFloor": 14,
|
||||||
"reward": 0,
|
"warArray": "&",
|
||||||
"rewardOfcollect": "&",
|
"reward": "&",
|
||||||
"heroGroup": 0
|
"rewardOfcollect": "&"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"towerFloor": 13,
|
"towerFloor": 15,
|
||||||
"warArray": "&",
|
"warArray": "&",
|
||||||
"reward": 0,
|
"reward": "&",
|
||||||
"rewardOfcollect": "&",
|
"rewardOfcollect": "&"
|
||||||
"heroGroup": 0
|
},
|
||||||
},
|
{
|
||||||
{
|
"towerFloor": 16,
|
||||||
"towerFloor": 14,
|
"warArray": "&",
|
||||||
"warArray": "&",
|
"reward": "&",
|
||||||
"reward": 0,
|
"rewardOfcollect": "&"
|
||||||
"rewardOfcollect": "&",
|
},
|
||||||
"heroGroup": 0
|
{
|
||||||
},
|
"towerFloor": 17,
|
||||||
{
|
"warArray": "&",
|
||||||
"towerFloor": 15,
|
"reward": "&",
|
||||||
"warArray": "&",
|
"rewardOfcollect": "&"
|
||||||
"reward": 0,
|
},
|
||||||
"rewardOfcollect": "&",
|
{
|
||||||
"heroGroup": 0
|
"towerFloor": 18,
|
||||||
},
|
"warArray": "&",
|
||||||
{
|
"reward": "&",
|
||||||
"towerFloor": 16,
|
"rewardOfcollect": "&"
|
||||||
"warArray": "&",
|
},
|
||||||
"reward": 0,
|
{
|
||||||
"rewardOfcollect": "&",
|
"towerFloor": 19,
|
||||||
"heroGroup": 0
|
"warArray": "&",
|
||||||
},
|
"reward": "&",
|
||||||
{
|
"rewardOfcollect": "&"
|
||||||
"towerFloor": 17,
|
},
|
||||||
"warArray": "&",
|
{
|
||||||
"reward": 0,
|
"towerFloor": 20,
|
||||||
"rewardOfcollect": "&",
|
"warArray": "&",
|
||||||
"heroGroup": 0
|
"reward": "&",
|
||||||
},
|
"rewardOfcollect": "&"
|
||||||
{
|
},
|
||||||
"towerFloor": 18,
|
{
|
||||||
"warArray": "&",
|
"towerFloor": 21,
|
||||||
"reward": 0,
|
"warArray": "&",
|
||||||
"rewardOfcollect": "&",
|
"reward": "&",
|
||||||
"heroGroup": 0
|
"rewardOfcollect": "&"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"towerFloor": 19,
|
"towerFloor": 22,
|
||||||
"warArray": "&",
|
"warArray": "&",
|
||||||
"reward": 0,
|
"reward": "&",
|
||||||
"rewardOfcollect": "&",
|
"rewardOfcollect": "&"
|
||||||
"heroGroup": 0
|
},
|
||||||
},
|
{
|
||||||
{
|
"towerFloor": 23,
|
||||||
"towerFloor": 20,
|
"warArray": "&",
|
||||||
"warArray": "&",
|
"reward": "&",
|
||||||
"reward": 0,
|
"rewardOfcollect": "&"
|
||||||
"rewardOfcollect": "&",
|
},
|
||||||
"heroGroup": 0
|
{
|
||||||
},
|
"towerFloor": 24,
|
||||||
{
|
"warArray": "&",
|
||||||
"towerFloor": 21,
|
"reward": "&",
|
||||||
"warArray": "&",
|
"rewardOfcollect": "&"
|
||||||
"reward": 0,
|
},
|
||||||
"rewardOfcollect": "&",
|
{
|
||||||
"heroGroup": 0
|
"towerFloor": 25,
|
||||||
},
|
"warArray": "&",
|
||||||
{
|
"reward": "&",
|
||||||
"towerFloor": 22,
|
"rewardOfcollect": "&"
|
||||||
"warArray": "&",
|
},
|
||||||
"reward": 0,
|
{
|
||||||
"rewardOfcollect": "&",
|
"towerFloor": 26,
|
||||||
"heroGroup": 0
|
"warArray": "&",
|
||||||
},
|
"reward": "&",
|
||||||
{
|
"rewardOfcollect": "&"
|
||||||
"towerFloor": 23,
|
},
|
||||||
"warArray": "&",
|
{
|
||||||
"reward": 0,
|
"towerFloor": 27,
|
||||||
"rewardOfcollect": "&",
|
"warArray": "&",
|
||||||
"heroGroup": 0
|
"reward": "&",
|
||||||
},
|
"rewardOfcollect": "&"
|
||||||
{
|
},
|
||||||
"towerFloor": 24,
|
{
|
||||||
"warArray": "&",
|
"towerFloor": 28,
|
||||||
"reward": 0,
|
"warArray": "&",
|
||||||
"rewardOfcollect": "&",
|
"reward": "&",
|
||||||
"heroGroup": 0
|
"rewardOfcollect": "&"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"towerFloor": 25,
|
"towerFloor": 29,
|
||||||
"warArray": "&",
|
"warArray": "&",
|
||||||
"reward": 0,
|
"reward": "&",
|
||||||
"rewardOfcollect": "&",
|
"rewardOfcollect": "&"
|
||||||
"heroGroup": 0
|
},
|
||||||
},
|
{
|
||||||
{
|
"towerFloor": 30,
|
||||||
"towerFloor": 26,
|
"warArray": "&",
|
||||||
"warArray": "&",
|
"reward": "&",
|
||||||
"reward": 0,
|
"rewardOfcollect": "&"
|
||||||
"rewardOfcollect": "&",
|
},
|
||||||
"heroGroup": 0
|
{
|
||||||
},
|
"towerFloor": 31,
|
||||||
{
|
"warArray": "&",
|
||||||
"towerFloor": 27,
|
"reward": "&",
|
||||||
"warArray": "&",
|
"rewardOfcollect": "&"
|
||||||
"reward": 0,
|
},
|
||||||
"rewardOfcollect": "&",
|
{
|
||||||
"heroGroup": 0
|
"towerFloor": 32,
|
||||||
},
|
"warArray": "&",
|
||||||
{
|
"reward": "&",
|
||||||
"towerFloor": 28,
|
"rewardOfcollect": "&"
|
||||||
"warArray": "&",
|
},
|
||||||
"reward": 0,
|
{
|
||||||
"rewardOfcollect": "&",
|
"towerFloor": 33,
|
||||||
"heroGroup": 0
|
"warArray": "&",
|
||||||
},
|
"reward": "&",
|
||||||
{
|
"rewardOfcollect": "&"
|
||||||
"towerFloor": 29,
|
},
|
||||||
"warArray": "&",
|
{
|
||||||
"reward": 0,
|
"towerFloor": 34,
|
||||||
"rewardOfcollect": "&",
|
"warArray": "&",
|
||||||
"heroGroup": 0
|
"reward": "&",
|
||||||
},
|
"rewardOfcollect": "&"
|
||||||
{
|
},
|
||||||
"towerFloor": 30,
|
{
|
||||||
"warArray": "&",
|
"towerFloor": 35,
|
||||||
"reward": 0,
|
"warArray": "&",
|
||||||
"rewardOfcollect": "&",
|
"reward": "&",
|
||||||
"heroGroup": 0
|
"rewardOfcollect": "&"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"towerFloor": 31,
|
"towerFloor": 36,
|
||||||
"warArray": "&",
|
"warArray": "&",
|
||||||
"reward": 0,
|
"reward": "&",
|
||||||
"rewardOfcollect": "&",
|
"rewardOfcollect": "&"
|
||||||
"heroGroup": 0
|
},
|
||||||
},
|
{
|
||||||
{
|
"towerFloor": 37,
|
||||||
"towerFloor": 32,
|
"warArray": "&",
|
||||||
"warArray": "&",
|
"reward": "&",
|
||||||
"reward": 0,
|
"rewardOfcollect": "&"
|
||||||
"rewardOfcollect": "&",
|
},
|
||||||
"heroGroup": 0
|
{
|
||||||
},
|
"towerFloor": 38,
|
||||||
{
|
"warArray": "&",
|
||||||
"towerFloor": 33,
|
"reward": "&",
|
||||||
"warArray": "&",
|
"rewardOfcollect": "&"
|
||||||
"reward": 0,
|
},
|
||||||
"rewardOfcollect": "&",
|
{
|
||||||
"heroGroup": 0
|
"towerFloor": 39,
|
||||||
},
|
"warArray": "&",
|
||||||
{
|
"reward": "&",
|
||||||
"towerFloor": 34,
|
"rewardOfcollect": "&"
|
||||||
"warArray": "&",
|
},
|
||||||
"reward": 0,
|
{
|
||||||
"rewardOfcollect": "&",
|
"towerFloor": 40,
|
||||||
"heroGroup": 0
|
"warArray": "&",
|
||||||
},
|
"reward": "&",
|
||||||
{
|
"rewardOfcollect": "&"
|
||||||
"towerFloor": 35,
|
},
|
||||||
"warArray": "&",
|
{
|
||||||
"reward": 0,
|
"towerFloor": 41,
|
||||||
"rewardOfcollect": "&",
|
"warArray": "&",
|
||||||
"heroGroup": 0
|
"reward": "&",
|
||||||
},
|
"rewardOfcollect": "&"
|
||||||
{
|
},
|
||||||
"towerFloor": 36,
|
{
|
||||||
"warArray": "&",
|
"towerFloor": 42,
|
||||||
"reward": 0,
|
"warArray": "&",
|
||||||
"rewardOfcollect": "&",
|
"reward": "&",
|
||||||
"heroGroup": 0
|
"rewardOfcollect": "&"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"towerFloor": 37,
|
"towerFloor": 43,
|
||||||
"warArray": "&",
|
"warArray": "&",
|
||||||
"reward": 0,
|
"reward": "&",
|
||||||
"rewardOfcollect": "&",
|
"rewardOfcollect": "&"
|
||||||
"heroGroup": 0
|
},
|
||||||
},
|
{
|
||||||
{
|
"towerFloor": 44,
|
||||||
"towerFloor": 38,
|
"warArray": "&",
|
||||||
"warArray": "&",
|
"reward": "&",
|
||||||
"reward": 0,
|
"rewardOfcollect": "&"
|
||||||
"rewardOfcollect": "&",
|
},
|
||||||
"heroGroup": 0
|
{
|
||||||
},
|
"towerFloor": 45,
|
||||||
{
|
"warArray": "&",
|
||||||
"towerFloor": 39,
|
"reward": "&",
|
||||||
"warArray": "&",
|
"rewardOfcollect": "&"
|
||||||
"reward": 0,
|
},
|
||||||
"rewardOfcollect": "&",
|
{
|
||||||
"heroGroup": 0
|
"towerFloor": 46,
|
||||||
},
|
"warArray": "&",
|
||||||
{
|
"reward": "&",
|
||||||
"towerFloor": 40,
|
"rewardOfcollect": "&"
|
||||||
"warArray": "&",
|
}
|
||||||
"reward": 0,
|
|
||||||
"rewardOfcollect": "&",
|
|
||||||
"heroGroup": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"towerFloor": 41,
|
|
||||||
"warArray": "&",
|
|
||||||
"reward": 0,
|
|
||||||
"rewardOfcollect": "&",
|
|
||||||
"heroGroup": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"towerFloor": 42,
|
|
||||||
"warArray": "&",
|
|
||||||
"reward": 0,
|
|
||||||
"rewardOfcollect": "&",
|
|
||||||
"heroGroup": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"towerFloor": 43,
|
|
||||||
"warArray": "&",
|
|
||||||
"reward": 0,
|
|
||||||
"rewardOfcollect": "&",
|
|
||||||
"heroGroup": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"towerFloor": 44,
|
|
||||||
"warArray": "&",
|
|
||||||
"reward": 0,
|
|
||||||
"rewardOfcollect": "&",
|
|
||||||
"heroGroup": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"towerFloor": 45,
|
|
||||||
"warArray": "&",
|
|
||||||
"reward": 0,
|
|
||||||
"rewardOfcollect": "&",
|
|
||||||
"heroGroup": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"towerFloor": 46,
|
|
||||||
"warArray": "&",
|
|
||||||
"reward": 0,
|
|
||||||
"rewardOfcollect": "&",
|
|
||||||
"heroGroup": 0
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
@@ -7,7 +7,9 @@
|
|||||||
"bonus": "3&2|4&1",
|
"bonus": "3&2|4&1",
|
||||||
"bonusCondition": "2&2&1",
|
"bonusCondition": "2&2&1",
|
||||||
"actorCnt": 1,
|
"actorCnt": 1,
|
||||||
"completeTime": 30
|
"completeTime": 30,
|
||||||
|
"suitFloor": 1,
|
||||||
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"taskId": 2,
|
"taskId": 2,
|
||||||
@@ -17,7 +19,9 @@
|
|||||||
"bonus": "3&2|4&1",
|
"bonus": "3&2|4&1",
|
||||||
"bonusCondition": "1&5&2",
|
"bonusCondition": "1&5&2",
|
||||||
"actorCnt": 2,
|
"actorCnt": 2,
|
||||||
"completeTime": 120
|
"completeTime": 120,
|
||||||
|
"suitFloor": 1,
|
||||||
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"taskId": 3,
|
"taskId": 3,
|
||||||
@@ -27,7 +31,9 @@
|
|||||||
"bonus": "3&2|4&1",
|
"bonus": "3&2|4&1",
|
||||||
"bonusCondition": "3&1&1",
|
"bonusCondition": "3&1&1",
|
||||||
"actorCnt": 1,
|
"actorCnt": 1,
|
||||||
"completeTime": 50
|
"completeTime": 50,
|
||||||
|
"suitFloor": 1,
|
||||||
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"taskId": 4,
|
"taskId": 4,
|
||||||
@@ -37,7 +43,9 @@
|
|||||||
"bonus": "3&2|4&1",
|
"bonus": "3&2|4&1",
|
||||||
"bonusCondition": "1&5&2|2&2&1|3&1&1",
|
"bonusCondition": "1&5&2|2&2&1|3&1&1",
|
||||||
"actorCnt": 1,
|
"actorCnt": 1,
|
||||||
"completeTime": 50
|
"completeTime": 50,
|
||||||
|
"suitFloor": 1,
|
||||||
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"taskId": 5,
|
"taskId": 5,
|
||||||
@@ -47,7 +55,9 @@
|
|||||||
"bonus": "3&2|4&1",
|
"bonus": "3&2|4&1",
|
||||||
"bonusCondition": "1&5&2|2&2&1|3&1&1",
|
"bonusCondition": "1&5&2|2&2&1|3&1&1",
|
||||||
"actorCnt": 1,
|
"actorCnt": 1,
|
||||||
"completeTime": 30
|
"completeTime": 30,
|
||||||
|
"suitFloor": 1,
|
||||||
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"taskId": 6,
|
"taskId": 6,
|
||||||
@@ -57,7 +67,9 @@
|
|||||||
"bonus": "3&2|4&1",
|
"bonus": "3&2|4&1",
|
||||||
"bonusCondition": "1&5&2|2&2&1|3&1&1",
|
"bonusCondition": "1&5&2|2&2&1|3&1&1",
|
||||||
"actorCnt": 1,
|
"actorCnt": 1,
|
||||||
"completeTime": 30
|
"completeTime": 30,
|
||||||
|
"suitFloor": 1,
|
||||||
|
"weight": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"taskId": 7,
|
"taskId": 7,
|
||||||
@@ -67,6 +79,8 @@
|
|||||||
"bonus": "3&2|4&1",
|
"bonus": "3&2|4&1",
|
||||||
"bonusCondition": "1&5&2|2&2&1|3&1&1",
|
"bonusCondition": "1&5&2|2&2&1|3&1&1",
|
||||||
"actorCnt": 1,
|
"actorCnt": 1,
|
||||||
"completeTime": 30
|
"completeTime": 30,
|
||||||
|
"suitFloor": 1,
|
||||||
|
"weight": 1
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user