修改天梯接口问题,天梯和挂机已测试
This commit is contained in:
@@ -52,7 +52,7 @@ export class NormalBattleHandler {
|
|||||||
}
|
}
|
||||||
dailyNum = { type: checkResult.type, count: checkResult.count, sum: checkResult.sum };
|
dailyNum = { type: checkResult.type, count: checkResult.count, sum: checkResult.sum };
|
||||||
} else if (warInfo.warType == WAR_TYPE.TOWER) {
|
} else if (warInfo.warType == WAR_TYPE.TOWER) {
|
||||||
let checkResult = await checkTowerWar(roleId, battleId);
|
let checkResult = await checkTowerWar(roleId, battleId, heroes);
|
||||||
if(checkResult.status) {
|
if(checkResult.status) {
|
||||||
return {code: 202, data: checkResult.msg}
|
return {code: 202, data: checkResult.msg}
|
||||||
}
|
}
|
||||||
@@ -138,6 +138,7 @@ export class NormalBattleHandler {
|
|||||||
let towerRec = null;
|
let towerRec = null;
|
||||||
let towerBonus = null;
|
let towerBonus = null;
|
||||||
let towerStatus = null;
|
let towerStatus = null;
|
||||||
|
let towerReward = null;
|
||||||
if(warInfo.warType == WAR_TYPE.DAILY) {
|
if(warInfo.warType == WAR_TYPE.DAILY) {
|
||||||
let checkResult = await checkDailyAndIncrease(roleId, battleId, 1, false);
|
let checkResult = await checkDailyAndIncrease(roleId, battleId, 1, false);
|
||||||
if(checkResult.status == -1) {
|
if(checkResult.status == -1) {
|
||||||
@@ -155,6 +156,7 @@ export class NormalBattleHandler {
|
|||||||
towerRec = towerEndResult.data.newRec;
|
towerRec = towerEndResult.data.newRec;
|
||||||
towerBonus = towerEndResult.data.bonusReward;
|
towerBonus = towerEndResult.data.bonusReward;
|
||||||
towerStatus = towerEndResult.data.towerStatus;
|
towerStatus = towerEndResult.data.towerStatus;
|
||||||
|
towerReward = towerEndResult.data.towerReward;
|
||||||
}
|
}
|
||||||
|
|
||||||
let warReward = new WarReward(roleId, roleName, battleId, isSuccess);
|
let warReward = new WarReward(roleId, roleName, battleId, isSuccess);
|
||||||
@@ -204,7 +206,7 @@ export class NormalBattleHandler {
|
|||||||
code: 200,
|
code: 200,
|
||||||
data: {
|
data: {
|
||||||
battleCode, battleId, status, towerStatus,
|
battleCode, battleId, status, towerStatus,
|
||||||
goods: reward, towerBonus,
|
goods: reward, towerBonus, towerReward,
|
||||||
apJson,
|
apJson,
|
||||||
dailyNum
|
dailyNum
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,13 @@ export class TowerBattleHandler {
|
|||||||
await RoleModel.towerLvUp(roleId);
|
await RoleModel.towerLvUp(roleId);
|
||||||
}
|
}
|
||||||
let towerRec = await TowerRecordModel.getRecordByLv(roleId, towerLv);
|
let towerRec = await TowerRecordModel.getRecordByLv(roleId, towerLv);
|
||||||
console.log(roleId, towerLv, towerRec);
|
|
||||||
if (!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: '天梯记录异常' };
|
return { code: 201, data: '天梯记录异常' };
|
||||||
}
|
}
|
||||||
const data = {
|
const data = {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { getTowerDataByLv } from "../util/gamedata"
|
|||||||
import { decodeArrayStr } from '../util/util';
|
import { decodeArrayStr } from '../util/util';
|
||||||
import { handleFixedReward } from './rewardService';
|
import { handleFixedReward } from './rewardService';
|
||||||
|
|
||||||
export async function checkTowerWar(roleId: string, battleId: number) {
|
export async function checkTowerWar(roleId: string, battleId: number, heroes: Array<number>) {
|
||||||
const battleIdStr = `${battleId}`;
|
const battleIdStr = `${battleId}`;
|
||||||
let { towerLv } = await RoleModel.findByRoleId(roleId);
|
let { towerLv } = await RoleModel.findByRoleId(roleId);
|
||||||
const towerInfo = getTowerDataByLv(towerLv);
|
const towerInfo = getTowerDataByLv(towerLv);
|
||||||
@@ -16,19 +16,24 @@ export async function checkTowerWar(roleId: string, battleId: number) {
|
|||||||
console.error(`天梯层数异常,lv ${towerLv} by ${roleId}`);
|
console.error(`天梯层数异常,lv ${towerLv} by ${roleId}`);
|
||||||
return { status: -1, msg: '天梯层数异常' };
|
return { status: -1, msg: '天梯层数异常' };
|
||||||
}
|
}
|
||||||
const warArray = decodeArrayStr(towerInfo.warArray) || [];
|
const warIds = decodeArrayStr(towerInfo.warIds) || [];
|
||||||
if (warArray.indexOf(battleIdStr) === -1) {
|
if (warIds.indexOf(battleIdStr) === -1) {
|
||||||
return { status: -1, msg: '战斗 Id 异常' };
|
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);
|
const curWarStatus = warStatus.find(elem => elem.warId == battleId);
|
||||||
if (curWarStatus.status) {
|
if (curWarStatus.status) {
|
||||||
return {status: -1, msg: '天梯关卡不能重复挑战'};
|
return {status: -1, msg: '天梯关卡不能重复挑战'};
|
||||||
}
|
}
|
||||||
|
|
||||||
return { status: 0, data: {
|
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 newRec = await TowerRecordModel.updateRecord(roleId, towerLv, battleCode, battleId, heroes, inc);
|
||||||
let bonusReward = null;
|
let bonusReward = 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 { wars } = nextTowerInfo;
|
const { warIds } = nextTowerInfo;
|
||||||
const sts = wars.map(id => {
|
const sts = decodeArrayStr(warIds).map(id => {
|
||||||
return {warId: 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 } = getTowerDataByLv(towerLv);
|
const { bonus, fixReward } = getTowerDataByLv(towerLv);
|
||||||
if (bonus) {
|
if (bonus) {
|
||||||
bonusReward = await handleFixedReward(roleId, roleName, bonus, 1);
|
bonusReward = await handleFixedReward(roleId, roleName, bonus, 1);
|
||||||
}
|
}
|
||||||
|
if (fixReward) {
|
||||||
|
towerReward = await handleFixedReward(roleId, roleName, fixReward, 1);
|
||||||
|
}
|
||||||
if (towerLv + 1 >= HANG_UP_CONSTS.ENABLE_LV) {
|
if (towerLv + 1 >= HANG_UP_CONSTS.ENABLE_LV) {
|
||||||
await startHangUp(roleId, roleName);
|
await startHangUp(roleId, roleName);
|
||||||
channelService.pushMessageByUids('hangUpEnable', {code: 200, data: {enable: true}}, [{uid: roleId, sid}]);
|
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,
|
status: 0,
|
||||||
data: {
|
data: {
|
||||||
newRec,
|
newRec,
|
||||||
bonusReward,
|
bonusReward, towerReward,
|
||||||
towerStatus: !!inc
|
towerStatus: !!inc
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export async function handleFixedReward(roleId: string, roleName: string, reward
|
|||||||
for(let goods of rewards) {
|
for(let goods of rewards) {
|
||||||
let goodInfo = getGoodById(goods.gid);
|
let goodInfo = getGoodById(goods.gid);
|
||||||
if(goodInfo.goodType == GOOD_TYPE.EQUIP) { // 装备
|
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) {
|
for(let obj of result) {
|
||||||
returnGoods.push({dropType: goods.type, ...obj})
|
returnGoods.push({dropType: goods.type, ...obj})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,8 +23,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.towerFloor) {
|
if (elem.lv) {
|
||||||
towerInfos.set(elem.towerFloor, elem);
|
towerInfos.set(elem.lv, elem);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export default class TowerRecord extends BaseModel {
|
|||||||
lv: number; // 天梯层数
|
lv: number; // 天梯层数
|
||||||
@prop({ required: true, default: [] })
|
@prop({ required: true, default: [] })
|
||||||
heroes: Array<number>; // 本层已使用武将
|
heroes: Array<number>; // 本层已使用武将
|
||||||
@prop({ required: true, default: [] })
|
@prop({ required: true, type: WarStatus, default: [] })
|
||||||
warStatus: Array<WarStatus>;
|
warStatus: Array<WarStatus>;
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
speedUpCnt: number; // 加速总次数
|
speedUpCnt: number; // 加速总次数
|
||||||
@@ -35,9 +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;
|
||||||
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;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ export default class TowerRecord extends BaseModel {
|
|||||||
public static async resetRecordByLv(roleId: string, lv: number, lean = true) {
|
public static async resetRecordByLv(roleId: string, lv: number, lean = true) {
|
||||||
const rec = await TowerRecordModel.findOneAndUpdate(
|
const rec = await TowerRecordModel.findOneAndUpdate(
|
||||||
{roleId, lv, passed: false},
|
{roleId, lv, passed: false},
|
||||||
{$set: {'warStatus.$.status': false, 'warStatus.$.battleCode': '', heroes: []}},
|
{$set: {'warStatus.$[].status': false, 'warStatus.$[].battleCode': '', heroes: []}},
|
||||||
{new: true}).lean(lean);
|
{new: true}).lean(lean);
|
||||||
return rec;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user