diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index a3507ca80..54f8765c5 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -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, diff --git a/game-server/app/servers/battle/handler/towerBattleHandler.ts b/game-server/app/servers/battle/handler/towerBattleHandler.ts index 5493e0ee1..21fd88046 100644 --- a/game-server/app/servers/battle/handler/towerBattleHandler.ts +++ b/game-server/app/servers/battle/handler/towerBattleHandler.ts @@ -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}>}, 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() 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); } } diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index 1a5f5fbc4..4f2f78288 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -6,9 +6,10 @@ import { BattleRecordModel } from './../db/BattleRecord'; import { TowerRecordModel } from './../db/TowerRecord'; import { RoleModel } from './../db/Role'; 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 { STATUS } from '../consts/statusCode'; +import { HangUpSpdUpRecModel } from '../db/HangUpSpdUpRec'; export async function checkTowerWar(roleId: string, battleId: number, heroes: Array) { const battleIdStr = `${battleId}`; @@ -18,7 +19,8 @@ export async function checkTowerWar(roleId: string, battleId: number, heroes: Ar console.error(`天梯层数异常,lv ${towerLv} by ${roleId}`); 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) { 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); - if (curWarStatus.status) { + if (curWarStatus && curWarStatus.status) { 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 bonusReward = null; let towerReward = null; if (inc === 1) { await RoleModel.towerLvUp(roleId); const nextTowerInfo = getTowerDataByLv(towerLv + 1); if (nextTowerInfo) { - const { warIds } = nextTowerInfo; - const sts = decodeArrayStr(warIds).map(id => { + const { warArray } = nextTowerInfo; + const sts = decodeArrayStr(warArray, '&').map(id => { return {warId: parseInt(id), status: false}; }); + await TowerRecordModel.createRecord({roleId, lv: towerLv + 1, warStatus: sts}); + } - const { bonus, fixReward } = getTowerDataByLv(towerLv); - if (bonus) { - let result = await handleFixedReward(roleId, roleName, bonus, 1); - bonusReward = result.goods; - } - if (fixReward) { - let result = await handleFixedReward(roleId, roleName, fixReward, 1); + const { reward } = getTowerDataByLv(towerLv); + if (reward) { + let result = await handleFixedReward(roleId, roleName, reward, 1); towerReward = result.goods; } if (towerLv + 1 >= HANG_UP_CONSTS.ENABLE_LV) { @@ -90,7 +89,7 @@ export async function towerBattleEnd(channelService: ChannelService, sid: string status: 0, data: { newRec, - bonusReward, towerReward, + towerReward, towerStatus: !!inc } }; @@ -101,41 +100,99 @@ async function startHangUp(roleId: string, roleName: string) { 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()) { - let { towerLv, hangUpSpdUpCnt, lastSpdUpTime } = await RoleModel.findByRoleId(roleId); - let { startTime} = await HangUpRecordModel.getCurRec(roleId); + let { towerLv = 1, hangUpSpdUpCnt = 0, lastSpdUpTime } = await RoleModel.findByRoleId(roleId); + let towerInfo = getTowerDataByLv(towerLv - 1); // towerLv 是当前层,奖励计算按照已经通过的层,即上一层 - let multi = 1; // 结算奖励的倍数,受最大时间限制 - let multiReal = 1; // 距开始挂机实际过去的时间单位 - if (speedUp) { - if (hangUpSpdUpCnt >= speedUpCnt || shouldRefresh(lastSpdUpTime, new Date, HANG_UP_CONSTS.REFRESH_TIME, 1)) { - multi = speedUpCnt; - } else { - multi = 0; + let timeReward = []; // 奖励 + let needReceiveGoods = []; // 由于小数,未能领取的奖励 + let baseReward = decodeStr('decimalReward', towerInfo.rewardOfcollect); + + let { startTime } = await HangUpRecordModel.getCurRec(roleId); + let endTime = curTime; // 挂机结束时间,现在到开始时间,经历了10的倍数的时间 + 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 { - let deltaTime = curTime.getTime() - startTime.getTime(); - multiReal = Math.floor(deltaTime / HANG_UP_CONSTS.UNIT_TIME); - if (deltaTime > HANG_UP_CONSTS.MAX_TIME) deltaTime = HANG_UP_CONSTS.MAX_TIME; - multi = Math.floor(deltaTime / HANG_UP_CONSTS.UNIT_TIME); + let lastRec = await HangUpRecordModel.getLastRec(roleId); + let notReceivedGoods = lastRec?lastRec.notReceivedGoods: []; + + 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 { endLv: towerLv - 1, startTime, - endTime: new Date(startTime.getTime() + multiReal * HANG_UP_CONSTS.UNIT_TIME), - timeReward: towerInfo.timeReward, - multi + deltaTime, + endTime, + 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; switch (type) { case 1: + let field = param == 1?'star': 'rank'; for(let hid of heroes) { const rec = await HeroModel.findByHidAndRole(hid, roleId); - if (rec.star >= parm) { + if (rec[field] >= param) { heroCnt++; } } @@ -143,7 +200,7 @@ async function checkCond(roleId: string, heroes, type: number, parm: number, cnt case 2: for(let hid of heroes) { const hInfo = getHeroInfoById(hid); - if (hInfo.camp === parm) { + if (hInfo.camp === param) { heroCnt++; } } @@ -151,7 +208,7 @@ async function checkCond(roleId: string, heroes, type: number, parm: number, cnt case 3: for(let hid of heroes) { const hInfo = getHeroInfoById(hid); - if (getJobInfoById(hInfo.jobid) === parm) { + if (getJobInfoById(hInfo.jobid) === param) { heroCnt++; } } @@ -166,18 +223,14 @@ async function checkCond(roleId: string, heroes, type: number, parm: number, cnt } export async function checkTaskConditions(roleId: string, heroes: Array, conditionsStr: string) { - const condArr = conditionsStr.split('|'); - if (condArr.length < 1) return false; + let condition = decodeStr('towerTaskCondition', conditionsStr); let res = true; - for (let cond of condArr) { - const condDetail = cond.split('&'); - if (condDetail && condDetail.length === 3) { - const checkRes = await checkCond(roleId, heroes, parseInt(condDetail[0]), parseInt(condDetail[1]), parseInt(condDetail[2])) - if (!checkRes) { - res = false; - break; - } + for (let {type, param, cnt} of condition) { + const checkRes = await checkCond(roleId, heroes, type, param, cnt); + if (!checkRes) { + res = false; + break; } } return res; diff --git a/game-server/app/services/eventSercive.ts b/game-server/app/services/eventSercive.ts index 91d95d848..f7e2ab40e 100644 --- a/game-server/app/services/eventSercive.ts +++ b/game-server/app/services/eventSercive.ts @@ -207,7 +207,6 @@ export async function refreshEvent(num: number, roleId: string, roleName: string return ccur.eventId != cur.eventID; }); }); - console.log(JSON.stringify(randomList)); let curPoint = new Array(); for(let i = 0; i < num; i++) { diff --git a/game-server/config/servers.ts b/game-server/config/servers.ts index 6fccefaf7..63703b939 100644 --- a/game-server/config/servers.ts +++ b/game-server/config/servers.ts @@ -5,7 +5,7 @@ module.exports = { 'id': 'connector-server-1', 'host': '127.0.0.1', 'port': 4050, - 'clientHost': 'pinus_test.trgame.cn', + 'clientHost': 'zyz_web.trgame.cn', 'clientPort': 3050, 'frontend': true, 'args': '--inspect=10001' @@ -29,7 +29,7 @@ module.exports = { { 'id': 'gate-server-1', 'host': '127.0.0.1', - 'clientHost': 'pinus_test.trgame.cn', + 'clientHost': 'zyz_web.trgame.cn', 'clientPort': 3014, 'frontend': true, 'args': '--inspect=10003' @@ -37,7 +37,7 @@ module.exports = { { 'id': 'gate-server-2', 'host': '127.0.0.1', - 'clientHost': 'pinus_test.trgame.cn', + 'clientHost': 'zyz_web.trgame.cn', 'clientPort': 3015, 'frontend': true, 'args': '--inspect=10008' @@ -46,9 +46,9 @@ module.exports = { }, 'production': { 'connector': [ - {'id': 'connector-server-1', 'port': 4050, 'clientHost': 'pinus_test.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-3', 'port': 4052, 'clientHost': 'pinus_test.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, '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': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true}, + {'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true} ], 'chat': [ {'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} ], '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', 'host': '127.0.0.1', - 'clientHost': 'pinus_test.trgame.cn', + 'clientHost': 'zyz_web.trgame.cn', 'clientPort': 3015, 'frontend': true } diff --git a/shared/consts/consts.ts b/shared/consts/consts.ts index 890376dd7..0e8fed06f 100644 --- a/shared/consts/consts.ts +++ b/shared/consts/consts.ts @@ -15,7 +15,7 @@ export const COUNTER = { }; export const ACTION_POIN = { - MAX: 100, + MAX: 100000, PER: 6 * 60 * 1000 }; @@ -82,11 +82,18 @@ for(let obj of currencyArr) { } export const WAR_TYPE = { - NORMAL: 1, - DAILY: 2, - EVENT: 3, - TOWER: 4, - EXPEDITION: 5 + NORMAL: 1, // 主线本 + VESTIGE: 2, // 遗迹本 + EVENT: 3, // 事件本 + DAILY: 4, // 每日 + 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 HANG_UP_CONSTS = { - ENABLE_LV: 2, - UNIT_TIME: 10 * 60 * 1000, - MAX_TIME: 12 * 60 * 60 * 1000, - MAX_SPD_UP_CNT: 6, - REFRESH_TIME: 5 + ENABLE_LV: 2, // 第几层开始可以挂机 + UNIT_TIME: 10 * 60 * 1000, // 每几分钟能有一次收益 + MAX_TIME: 24 * 60 * 60 * 1000, // 最多可储存24小时收益 + MAX_SPD_UP_CNT: 2, // 每天可以收取多少次 + REFRESH_TIME: 5, // 每天的几点刷新 + SPD_UP_REC_TIME: 6 * 60 * 60 * 1000 // 加速直接获得6小时收益 } export const TOWER_TASK_CONST = { REFRESH_TIME: 5, - RAND_CNT: [1, 1, 1, 1, 1], + RAND_CNT: 5, 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 FIX_SMS_CODE_TELS = ['18855953630', '13911134885']; \ No newline at end of file +export const FIX_SMS_CODE_TELS = ['18855953630', '13911134885', '15167549151', '15618654010']; + +export const GONGSHI = { + "TOWER_HANG_UP_SPEED_COST": "50*num" +}; diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index e383fc79b..222bf6ac8 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -48,7 +48,7 @@ export const STATUS = { EXPEDITION_POINT_NEED_ALL_RECEIVED: { code: 20410, simStr: '宝箱需要领取完才可以刷新' }, // 天梯 20500 - 20599 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_DUPLICATE_HERO: { code: 20504, simStr: '使用了重复的武将' }, TOWER_DUPLICATE_CHALLENGE: { code: 20505, simStr: '天梯关卡不能重复挑战' }, @@ -62,6 +62,7 @@ export const STATUS = { TOWER_TASK_CODE_NOT_FOUND: { code: 20513, simStr: '未找到此任务编号' }, TOWER_TASK_SEND_ERR: { code: 20514, simStr: '任务派遣失败,请检查任务编号' }, TOWER_TASK_BATCH_NOT_FOUND: { code: 20515, simStr: '派遣编码错误' }, + TOWER_GOLD_NOT_ENOUGH: { code: 20516, simStr: '元宝不足' }, // 共斗 20600 - 20699 COM_BATTLE_DUP_ENTER: { code: 20601, simStr: '不能重复加入' }, // 养成相关状态 30000 - 39999 diff --git a/shared/db/HangUpRecord.ts b/shared/db/HangUpRecord.ts index 1dbe81c3f..6e7682bf5 100644 --- a/shared/db/HangUpRecord.ts +++ b/shared/db/HangUpRecord.ts @@ -2,6 +2,12 @@ import { HANG_UP_CONSTS } from './../consts/consts'; import BaseModel from './BaseModel'; 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 }) endTime: Date; // 结束挂机的时间 + @prop({ required: true, default: [], type: Goods }) + notReceivedGoods: Array + @prop({ required: true, default: false }) received: boolean; // 是否已经领取,true-领取,false-未领取 @@ -42,11 +51,17 @@ export default class HangUpRecord extends BaseModel { return rec; } - public static async updateRec(roleId: string, roleName: string, endLv: number, endTime: Date, lean = true) { - await HangUpRecordModel.findOneAndUpdate({roleId, received: false}, {endLv, endTime, received: true}).lean(lean); + public static async getLastRec(roleId: string, lean = true) { + 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 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; } diff --git a/shared/db/HangUpSpdUpRec.ts b/shared/db/HangUpSpdUpRec.ts index 61a425845..f250fd0e5 100644 --- a/shared/db/HangUpSpdUpRec.ts +++ b/shared/db/HangUpSpdUpRec.ts @@ -2,6 +2,19 @@ import BaseModel from './BaseModel'; 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; // 这次挂机没来得及领取的 +} /** * 挂机记录表 */ @@ -18,9 +31,25 @@ export default class HangUpSpdUpRec extends BaseModel { @prop({required: true, default: 1}) lv: number; // 天梯层数 - public static async updateRec(roleId, roleName, multi, lv, lean = true ) { + @prop({ required: true, default: [], type: NotReceivedGoods }) + notReceivedGoodsList: Array + + 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; 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; } diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 086ab3f5d..19c46381f 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -159,10 +159,10 @@ export default class Role extends BaseModel { public static async hangUpSpdUp(roleId: string, cnt: number, curTime: Date, lean = true) { if (cnt < 0) return null; - const result = await RoleModel.findOneAndUpdate({roleId}, {$inc: {hangUpSpdUpCnt: -cnt}, lastSpdUpTime: curTime}, {new: true}).lean(lean); - const lastSpdUpTime = result?result.lastSpdUpTime: curTime; + const result = await RoleModel.findOne({roleId}).lean(lean); + const lastSpdUpTime = result?.lastSpdUpTime; 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); } else { role = await RoleModel.findOneAndUpdate({roleId, hangUpSpdUpCnt: {$gte: cnt}}, {$inc: {hangUpSpdUpCnt: -cnt}, lastSpdUpTime: curTime}, {new: true}).lean(lean); @@ -221,6 +221,11 @@ try { 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) { let result = await RoleModel.findOneAndUpdate({roleId}, { $addToSet: { warStar: {id: battleId, warType, star }} }, { "new": true, "upsert": true}).lean(lean); return result; diff --git a/shared/db/TowerRecord.ts b/shared/db/TowerRecord.ts index 9c7cf88ac..91e12b4c2 100644 --- a/shared/db/TowerRecord.ts +++ b/shared/db/TowerRecord.ts @@ -35,8 +35,9 @@ export default class TowerRecord extends BaseModel { public static async createRecord(towerInfo: {roleId: string, lv: number, warStatus: Array}, lean = true) { const recDoc = new TowerRecordModel(); - const update = Object.assign(towerInfo, recDoc.toJSON()); + const update = Object.assign(recDoc.toJSON(), 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); return rec; } @@ -51,12 +52,23 @@ export default class TowerRecord extends BaseModel { * @param lean */ public static async updateRecord(roleId: string, lv: number, battleCode: string, warId: number, heroes: Array, inc: number, lean = true) { - const rec = await TowerRecordModel.findOneAndUpdate( - {roleId, lv, 'warStatus.warId': warId}, - {$set: {'warStatus.$.status': true, 'warStatus.$.battleCode': battleCode, passed: inc === 1 ? true : false}, $push: {heroes: {$each: heroes}}}, - {new: true, upsert: true} - ).lean(lean); - return rec; + let tower = await TowerRecordModel.findOne({roleId, lv, 'warStatus.warId': warId}); + if(tower) { + const rec = await TowerRecordModel.findOneAndUpdate( + {roleId, lv, 'warStatus.warId': warId}, + {$set: {'warStatus.$.status': true, 'warStatus.$.battleCode': battleCode, passed: inc === 1 ? true : false}, $push: {heroes: {$each: heroes}}}, + {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; + } } diff --git a/shared/pubUtils/gamedata.ts b/shared/pubUtils/gamedata.ts index 0c06922d4..27778f0dd 100644 --- a/shared/pubUtils/gamedata.ts +++ b/shared/pubUtils/gamedata.ts @@ -6,7 +6,7 @@ const wars = ['dic_zyz_gk_main', 'dic_zyz_gk_mainElite', 'dic_zyz_gk_daily', 'di const allWarInfos = new Map(); const towerInfos = new Map(); const towerTaskInfos = new Map(); -const towerTasksByQuality = new Map>(); +const towerTasksByFloor = new Map>(); const heroInfos = new Map(); const jobInfos = new Map(); const levelInfos = new Map(); @@ -28,8 +28,8 @@ function parseTowerData() { const towerFile = 'dic_zyz_tower'; const towerData = gamedata['jsons'][towerFile] || []; towerData.forEach(elem => { - if (elem.lv) { - towerInfos.set(elem.lv, elem); + if (elem.towerFloor) { + towerInfos.set(elem.towerFloor, elem); } }); } @@ -40,9 +40,9 @@ function parseTowerTaskData() { towerTaskData.forEach(elem => { if (elem && elem.taskId) { towerTaskInfos.set(elem.taskId, elem); - let tasks = towerTasksByQuality.get(elem.quality) || []; + let tasks = towerTasksByFloor.get(elem.suitFloor) || []; 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; } -export function getTaskIdByQuality(quality: number) { - const taskIds = towerTasksByQuality.get(quality); +export function getTaskIdByFloor(floor: number) { + const taskIds = towerTasksByFloor.get(floor); return taskIds; } diff --git a/shared/pubUtils/util.ts b/shared/pubUtils/util.ts index 796d96ecf..97d64ca72 100644 --- a/shared/pubUtils/util.ts +++ b/shared/pubUtils/util.ts @@ -67,6 +67,18 @@ const moment = require('moment'); result = x; 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; }; @@ -76,9 +88,14 @@ const moment = require('moment'); * 将 | 分隔的字符串解析为数组,如:a|b|c 解析为[a, b, c] * @param str 要解析的字符串 */ -export function decodeArrayStr(str: string) { - if(str == '&') str = ''; - return str.split('|'); +export function decodeArrayStr(str: string, splitForm='|') { + let last = str.substr(str.length-1, 1); + if(last == '&') str = str.substr(0, str.length - 1); + if(str == '') { + return [] + } else { + return str.split(splitForm); + } } /** @@ -188,4 +205,64 @@ export function resResult(status: {code: number, simStr: string}, data = null, c console.log(`normal err, code: ${code}, des: ${customMsg || simStr}`); } return {code, msg: customMsg || simStr, data}; -} \ No newline at end of file +} + +// 消除 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)); + } +}; \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_gk_daily.json b/shared/resource/jsons/dic_zyz_gk_daily.json index 31dbcddac..2dd95d899 100644 --- a/shared/resource/jsons/dic_zyz_gk_daily.json +++ b/shared/resource/jsons/dic_zyz_gk_daily.json @@ -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}] \ No newline at end of file +[ + { + "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 + } +] \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_gk_tower.json b/shared/resource/jsons/dic_zyz_gk_tower.json index e5498a7e9..b15a53f71 100644 --- a/shared/resource/jsons/dic_zyz_gk_tower.json +++ b/shared/resource/jsons/dic_zyz_gk_tower.json @@ -7,8 +7,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔1层", + "warType": 8, + "gk_name": "镇念塔1层&黄天当立", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -18,6 +18,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&1001|1&312|1&1001|1&1004", "recommendedPower": 10000, "previousGk": 0 }, @@ -29,8 +30,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔2层", + "warType": 8, + "gk_name": "镇念塔2层&酒池肉林", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -40,6 +41,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&1001|1&314|1&1001|1&1004", "recommendedPower": 10001, "previousGk": 10001 }, @@ -51,8 +53,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔3层", + "warType": 8, + "gk_name": "镇念塔3层&江东旧臣", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -62,6 +64,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&1001|1&1004|1&309|1&1004", "recommendedPower": 10002, "previousGk": 10002 }, @@ -73,8 +76,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔4层", + "warType": 8, + "gk_name": "镇念塔4层&天下无双", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -84,6 +87,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&1001|1&312|1&1001|1&1004", "recommendedPower": 10003, "previousGk": 10003 }, @@ -95,8 +99,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔5层", + "warType": 8, + "gk_name": "镇念塔5层&五子良将", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -106,6 +110,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&1001|1&1006|1&315|1&1004", "recommendedPower": 10004, "previousGk": 10004 }, @@ -117,8 +122,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔6层", + "warType": 8, + "gk_name": "镇念塔5层&五子良将", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -128,8 +133,9 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&1001|1&1006|1&344|1&1004", "recommendedPower": 10005, - "previousGk": 10005 + "previousGk": 10004 }, { "war_id": 10007, @@ -139,8 +145,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔7层", + "warType": 8, + "gk_name": "镇念塔6层&五虎上将", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -150,6 +156,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&309|1&1006|1&311|1&1004", "recommendedPower": 10006, "previousGk": 10006 }, @@ -161,8 +168,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔8层", + "warType": 8, + "gk_name": "镇念塔7层&鹰视狼顾", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -172,6 +179,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&344|1&314|1&1001|1&1004", "recommendedPower": 10007, "previousGk": 10007 }, @@ -183,8 +191,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔9层", + "warType": 8, + "gk_name": "镇念塔8层&明明如月", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -194,6 +202,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&1001|1&314|1&1001|1&312", "recommendedPower": 10008, "previousGk": 10008 }, @@ -205,8 +214,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔10层", + "warType": 8, + "gk_name": "镇念塔9层&曹氏五虎", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -216,6 +225,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&1004|1&1001|1&314|1&315|1&312", "recommendedPower": 10009, "previousGk": 10009 }, @@ -227,8 +237,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔11层", + "warType": 8, + "gk_name": "镇念塔10层&蛮族之恋", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -238,6 +248,7 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&312|1&344|1&314|1&315|1&311", "recommendedPower": 10010, "previousGk": 10010 }, @@ -249,8 +260,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔12层", + "warType": 8, + "gk_name": "镇念塔10层&名将挑战", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -260,8 +271,9 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&312|1&309|1&314|1&315|1&311", "recommendedPower": 10011, - "previousGk": 10011 + "previousGk": 10010 }, { "war_id": 10013, @@ -271,8 +283,8 @@ "fixReward": "&", "conditionReward": "&", "RandomReward": "&", - "warType": 4, - "gk_name": "镇念塔&镇念塔13层", + "warType": 8, + "gk_name": "镇念塔10层&桃园结义", "kingExp": 100, "lvLimted": 1, "turnLimted": 20, @@ -282,7 +294,8 @@ "loseInfoInUI": "我方全部阵亡", "starInfoInUI": "无", "cost": 15, + "heroInUI": "1&312|1&344|1&314|1&315|1&309", "recommendedPower": 10012, - "previousGk": 10012 + "previousGk": 10010 } ] \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_tower.json b/shared/resource/jsons/dic_zyz_tower.json index b4c9840e6..e79a34670 100644 --- a/shared/resource/jsons/dic_zyz_tower.json +++ b/shared/resource/jsons/dic_zyz_tower.json @@ -1,324 +1,278 @@ [ - { - "towerFloor": 1, - "warArray": "10001&", - "reward": "13005&1|17002&10|17006&2|17006&3", - "rewardOfcollect": "&", - "heroGroup": "1004&1001&312&1001&1004" - }, - { - "towerFloor": 2, - "warArray": "10002&", - "reward": "13005&1|17002&10|17006&2|17006&3", - "rewardOfcollect": "&", - "heroGroup": "1004&1001&314&1001&1004" - }, - { - "towerFloor": 3, - "warArray": "10003&", - "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", - "rewardOfcollect": "&", - "heroGroup": "1004&1001&312&1001&1004" - }, - { - "towerFloor": 5, - "warArray": "10005&10006", - "reward": "13010&1|17003&30|17006&20|17006&20", - "rewardOfcollect": "&", - "heroGroup": "1004&1001&1006&315&1004|1004&1001&1006&344&1004" - }, - { - "towerFloor": 6, - "warArray": "10007&", - "reward": "13005&1|17002&10|17006&2|17006&8", - "rewardOfcollect": "&", - "heroGroup": "1004&309&1006&311&1004" - }, - { - "towerFloor": 7, - "warArray": "10008&", - "reward": "13005&1|17002&10|17006&2|17006&9", - "rewardOfcollect": "&", - "heroGroup": "1004&344&314&1001&1004" - }, - { - "towerFloor": 8, - "warArray": "10009&", - "reward": "13005&1|17002&10|17006&2|17006&10", - "rewardOfcollect": "&", - "heroGroup": "312&1001&1004&1001&314" - }, - { - "towerFloor": 9, - "warArray": "10010&", - "reward": "13005&1|17002&10|17006&2|17006&11", - "rewardOfcollect": "&", - "heroGroup": "1004&1001&314&315&312" - }, - { - "towerFloor": 10, - "warArray": "10011&10012&10013", - "reward": "13015&1|17004&30|17006&30|17006&30", - "rewardOfcollect": "&", - "heroGroup": "312&344&314&315&311|312&309&314&315&311|312&344&314&315&309" - }, - { - "towerFloor": 11, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 12, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 13, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 14, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 15, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 16, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 17, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 18, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 19, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 20, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 21, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 22, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 23, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 24, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 25, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 26, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 27, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 28, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 29, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 30, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 31, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 32, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 33, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 34, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 35, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 36, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 37, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 38, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 39, - "warArray": "&", - "reward": 0, - "rewardOfcollect": "&", - "heroGroup": 0 - }, - { - "towerFloor": 40, - "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 - } + { + "towerFloor": 1, + "warArray": "10001&", + "reward": "13005&1|17002&10|17006&2|17006&3", + "rewardOfcollect": "13005&1|17002&1" + }, + { + "towerFloor": 2, + "warArray": "10002&", + "reward": "13005&1|17002&10|17006&2|17006&3", + "rewardOfcollect": "13005&1|17002&1" + }, + { + "towerFloor": 3, + "warArray": "10003&", + "reward": "13005&1|17002&10|17006&2|17006&3", + "rewardOfcollect": "13005&1|17002&1|17006&0.01" + }, + { + "towerFloor": 4, + "warArray": "10004&", + "reward": "13005&1|17002&10|17006&2|17006&3", + "rewardOfcollect": "13005&1|17002&1" + }, + { + "towerFloor": 5, + "warArray": "10005&10006", + "reward": "13010&1|17003&30|17006&20|17006&20", + "rewardOfcollect": "13005&2|17002&1" + }, + { + "towerFloor": 6, + "warArray": "10007&", + "reward": "13005&1|17002&10|17006&2|17006&8", + "rewardOfcollect": "13005&2|17002&1" + }, + { + "towerFloor": 7, + "warArray": "10008&", + "reward": "13005&1|17002&10|17006&2|17006&9", + "rewardOfcollect": "13005&2|17002&1" + }, + { + "towerFloor": 8, + "warArray": "10009&", + "reward": "13005&1|17002&10|17006&2|17006&10", + "rewardOfcollect": "13005&2|17002&1" + }, + { + "towerFloor": 9, + "warArray": "10010&", + "reward": "13005&1|17002&10|17006&2|17006&11", + "rewardOfcollect": "13005&2|17002&1" + }, + { + "towerFloor": 10, + "warArray": "10011&10012&10013", + "reward": "13015&1|17004&30|17006&30|17006&30", + "rewardOfcollect": "13005&2|17002&2" + }, + { + "towerFloor": 11, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 12, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 13, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 14, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 15, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 16, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 17, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 18, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 19, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 20, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 21, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 22, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 23, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 24, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 25, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 26, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 27, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 28, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 29, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 30, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 31, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 32, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 33, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 34, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 35, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 36, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 37, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 38, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 39, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 40, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 41, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 42, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 43, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 44, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 45, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + }, + { + "towerFloor": 46, + "warArray": "&", + "reward": "&", + "rewardOfcollect": "&" + } ] \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_tower_tasks.json b/shared/resource/jsons/dic_zyz_tower_tasks.json index 13db3c28a..776eb41ba 100644 --- a/shared/resource/jsons/dic_zyz_tower_tasks.json +++ b/shared/resource/jsons/dic_zyz_tower_tasks.json @@ -7,7 +7,9 @@ "bonus": "3&2|4&1", "bonusCondition": "2&2&1", "actorCnt": 1, - "completeTime": 30 + "completeTime": 30, + "suitFloor": 1, + "weight": 1 }, { "taskId": 2, @@ -17,7 +19,9 @@ "bonus": "3&2|4&1", "bonusCondition": "1&5&2", "actorCnt": 2, - "completeTime": 120 + "completeTime": 120, + "suitFloor": 1, + "weight": 1 }, { "taskId": 3, @@ -27,7 +31,9 @@ "bonus": "3&2|4&1", "bonusCondition": "3&1&1", "actorCnt": 1, - "completeTime": 50 + "completeTime": 50, + "suitFloor": 1, + "weight": 1 }, { "taskId": 4, @@ -37,7 +43,9 @@ "bonus": "3&2|4&1", "bonusCondition": "1&5&2|2&2&1|3&1&1", "actorCnt": 1, - "completeTime": 50 + "completeTime": 50, + "suitFloor": 1, + "weight": 1 }, { "taskId": 5, @@ -47,7 +55,9 @@ "bonus": "3&2|4&1", "bonusCondition": "1&5&2|2&2&1|3&1&1", "actorCnt": 1, - "completeTime": 30 + "completeTime": 30, + "suitFloor": 1, + "weight": 1 }, { "taskId": 6, @@ -57,7 +67,9 @@ "bonus": "3&2|4&1", "bonusCondition": "1&5&2|2&2&1|3&1&1", "actorCnt": 1, - "completeTime": 30 + "completeTime": 30, + "suitFloor": 1, + "weight": 1 }, { "taskId": 7, @@ -67,6 +79,8 @@ "bonus": "3&2|4&1", "bonusCondition": "1&5&2|2&2&1|3&1&1", "actorCnt": 1, - "completeTime": 30 + "completeTime": 30, + "suitFloor": 1, + "weight": 1 } ] \ No newline at end of file