From c06f422297ed8439967bf5cd01992f201a471b37 Mon Sep 17 00:00:00 2001 From: liangtongchuan Date: Wed, 14 Oct 2020 01:16:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A4=A9=E6=A2=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E9=97=AE=E9=A2=98=EF=BC=8C=E5=A4=A9=E6=A2=AF=E5=92=8C?= =?UTF-8?q?=E6=8C=82=E6=9C=BA=E5=B7=B2=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/normalBattleHandler.ts | 6 ++-- .../battle/handler/towerBattleHandler.ts | 8 +++-- game-server/app/services/battleService.ts | 29 ++++++++++++------- game-server/app/services/rewardService.ts | 2 +- game-server/app/util/gamedata.ts | 4 +-- shared/db/TowerRecord.ts | 8 ++--- shared/resource/jsons/dic_zyz_tower.json | 24 +++++++++++++++ 7 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 shared/resource/jsons/dic_zyz_tower.json diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index cf88fe972..aca341e81 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -52,7 +52,7 @@ export class NormalBattleHandler { } dailyNum = { type: checkResult.type, count: checkResult.count, sum: checkResult.sum }; } else if (warInfo.warType == WAR_TYPE.TOWER) { - let checkResult = await checkTowerWar(roleId, battleId); + let checkResult = await checkTowerWar(roleId, battleId, heroes); if(checkResult.status) { return {code: 202, data: checkResult.msg} } @@ -138,6 +138,7 @@ export class NormalBattleHandler { let towerRec = null; let towerBonus = null; let towerStatus = null; + let towerReward = null; if(warInfo.warType == WAR_TYPE.DAILY) { let checkResult = await checkDailyAndIncrease(roleId, battleId, 1, false); if(checkResult.status == -1) { @@ -155,6 +156,7 @@ export class NormalBattleHandler { towerRec = towerEndResult.data.newRec; towerBonus = towerEndResult.data.bonusReward; towerStatus = towerEndResult.data.towerStatus; + towerReward = towerEndResult.data.towerReward; } let warReward = new WarReward(roleId, roleName, battleId, isSuccess); @@ -204,7 +206,7 @@ export class NormalBattleHandler { code: 200, data: { battleCode, battleId, status, towerStatus, - goods: reward, towerBonus, + goods: reward, towerBonus, towerReward, apJson, dailyNum } diff --git a/game-server/app/servers/battle/handler/towerBattleHandler.ts b/game-server/app/servers/battle/handler/towerBattleHandler.ts index d1b375b3c..3b78422c8 100644 --- a/game-server/app/servers/battle/handler/towerBattleHandler.ts +++ b/game-server/app/servers/battle/handler/towerBattleHandler.ts @@ -28,9 +28,13 @@ export class TowerBattleHandler { await RoleModel.towerLvUp(roleId); } let towerRec = await TowerRecordModel.getRecordByLv(roleId, towerLv); - console.log(roleId, towerLv, towerRec); if (!towerRec) { - // await TowerRecordModel.createRecord({roleId, lv: towerLv, warStatus: []}); + const towerInfo = getTowerDataByLv(towerLv); + const { warIds } = towerInfo; + const sts = decodeArrayStr(warIds).map(id => { + return {warId: parseInt(id), status: false}; + }); + await TowerRecordModel.createRecord({roleId, lv: towerLv, warStatus: sts}); return { code: 201, data: '天梯记录异常' }; } const data = { diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index f712a8507..b02dbfde7 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -8,7 +8,7 @@ import { getTowerDataByLv } from "../util/gamedata" import { decodeArrayStr } from '../util/util'; import { handleFixedReward } from './rewardService'; -export async function checkTowerWar(roleId: string, battleId: number) { +export async function checkTowerWar(roleId: string, battleId: number, heroes: Array) { const battleIdStr = `${battleId}`; let { towerLv } = await RoleModel.findByRoleId(roleId); const towerInfo = getTowerDataByLv(towerLv); @@ -16,19 +16,24 @@ export async function checkTowerWar(roleId: string, battleId: number) { console.error(`天梯层数异常,lv ${towerLv} by ${roleId}`); return { status: -1, msg: '天梯层数异常' }; } - const warArray = decodeArrayStr(towerInfo.warArray) || []; - if (warArray.indexOf(battleIdStr) === -1) { + const warIds = decodeArrayStr(towerInfo.warIds) || []; + if (warIds.indexOf(battleIdStr) === -1) { return { status: -1, msg: '战斗 Id 异常' }; } - let { heroes = [], warStatus = [] } = await TowerRecordModel.getRecordByLv(roleId, towerLv); + let { heroes: recHeroes = [], warStatus = [] } = await TowerRecordModel.getRecordByLv(roleId, towerLv); + for (let hid of heroes) { + if (recHeroes.indexOf(hid) !== -1) { + return { status: -1, msg: '使用了重复的武将' }; + } + } const curWarStatus = warStatus.find(elem => elem.warId == battleId); if (curWarStatus.status) { return {status: -1, msg: '天梯关卡不能重复挑战'}; } return { status: 0, data: { - heroes, warStatus: curWarStatus + heroes: recHeroes, warStatus: curWarStatus }}; } @@ -54,20 +59,24 @@ 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 { wars } = nextTowerInfo; - const sts = wars.map(id => { - return {warId: id, status: false}; + const { warIds } = nextTowerInfo; + const sts = decodeArrayStr(warIds).map(id => { + return {warId: parseInt(id), status: false}; }); await TowerRecordModel.createRecord({roleId, lv: towerLv + 1, warStatus: sts}); } - const { bonus } = getTowerDataByLv(towerLv); + const { bonus, fixReward } = getTowerDataByLv(towerLv); if (bonus) { bonusReward = await handleFixedReward(roleId, roleName, bonus, 1); } + if (fixReward) { + towerReward = await handleFixedReward(roleId, roleName, fixReward, 1); + } if (towerLv + 1 >= HANG_UP_CONSTS.ENABLE_LV) { await startHangUp(roleId, roleName); channelService.pushMessageByUids('hangUpEnable', {code: 200, data: {enable: true}}, [{uid: roleId, sid}]); @@ -77,7 +86,7 @@ export async function towerBattleEnd(channelService: ChannelService, sid: string status: 0, data: { newRec, - bonusReward, + bonusReward, towerReward, towerStatus: !!inc } }; diff --git a/game-server/app/services/rewardService.ts b/game-server/app/services/rewardService.ts index af7e778e2..cd46c0349 100644 --- a/game-server/app/services/rewardService.ts +++ b/game-server/app/services/rewardService.ts @@ -14,7 +14,7 @@ export async function handleFixedReward(roleId: string, roleName: string, reward for(let goods of rewards) { let goodInfo = getGoodById(goods.gid); if(goodInfo.goodType == GOOD_TYPE.EQUIP) { // 装备 - let result = await rewardWeapons(roleId, roleName, goodInfo, {id: goods.gid, cnt: goods.count }); + let result = await rewardWeapons(roleId, roleName, goodInfo, {id: goods.gid, cnt: goods.count * multi }); for(let obj of result) { returnGoods.push({dropType: goods.type, ...obj}) } diff --git a/game-server/app/util/gamedata.ts b/game-server/app/util/gamedata.ts index f8fe30d60..42c2e50f3 100644 --- a/game-server/app/util/gamedata.ts +++ b/game-server/app/util/gamedata.ts @@ -23,8 +23,8 @@ function parseTowerData() { const towerFile = 'dic_zyz_tower'; const towerData = gamedata['jsons'][towerFile] || []; towerData.forEach(elem => { - if (elem.towerFloor) { - towerInfos.set(elem.towerFloor, elem); + if (elem.lv) { + towerInfos.set(elem.lv, elem); } }); } diff --git a/shared/db/TowerRecord.ts b/shared/db/TowerRecord.ts index 1347eaf14..4295add22 100644 --- a/shared/db/TowerRecord.ts +++ b/shared/db/TowerRecord.ts @@ -22,7 +22,7 @@ export default class TowerRecord extends BaseModel { lv: number; // 天梯层数 @prop({ required: true, default: [] }) heroes: Array; // 本层已使用武将 - @prop({ required: true, default: [] }) + @prop({ required: true, type: WarStatus, default: [] }) warStatus: Array; @prop({ required: true, default: 0 }) speedUpCnt: number; // 加速总次数 @@ -35,9 +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; - let rec = await TowerRecordModel.findOneAndUpdate({roleId, lv}, update, {upsert: true, new: true}).lean(lean); + let rec = await TowerRecordModel.findOneAndUpdate({roleId, lv}, {$set: update}, {upsert: true, new: true}).lean(lean); return rec; } @@ -68,7 +68,7 @@ export default class TowerRecord extends BaseModel { public static async resetRecordByLv(roleId: string, lv: number, lean = true) { const rec = await TowerRecordModel.findOneAndUpdate( {roleId, lv, passed: false}, - {$set: {'warStatus.$.status': false, 'warStatus.$.battleCode': '', heroes: []}}, + {$set: {'warStatus.$[].status': false, 'warStatus.$[].battleCode': '', heroes: []}}, {new: true}).lean(lean); return rec; } diff --git a/shared/resource/jsons/dic_zyz_tower.json b/shared/resource/jsons/dic_zyz_tower.json new file mode 100644 index 000000000..dbfa1b84f --- /dev/null +++ b/shared/resource/jsons/dic_zyz_tower.json @@ -0,0 +1,24 @@ +[ + { + "lv": 1, + "warIds": "10001|10002", + "fixReward": "1&2|2&1", + "bonus": "&", + "timeReward": "5&2|6&1", + "name": "" + }, { + "lv": 2, + "warIds": "10003", + "fixReward": "1&3|2&2", + "bonus": "&", + "timeReward": "5&3|6&2", + "name": "" + }, { + "lv": 3, + "warIds": "10004|10005|10006", + "fixReward": "1&4|2&3", + "bonus": "&", + "timeReward": "5&4|6&3", + "name": "" + } +] \ No newline at end of file