寻宝:修改掉落bug;修改战斗结果判断
This commit is contained in:
@@ -2,23 +2,25 @@
|
|||||||
* @Author: 梁桐川
|
* @Author: 梁桐川
|
||||||
* @Date: 2020-11-30 15:05:48
|
* @Date: 2020-11-30 15:05:48
|
||||||
* @Last Modified by: 梁桐川
|
* @Last Modified by: 梁桐川
|
||||||
* @Last Modified time: 2020-12-02 00:51:27
|
* @Last Modified time: 2020-12-02 13:08:30
|
||||||
*/
|
*/
|
||||||
import { COM_BATTLE_ASSIST_TIME, COM_BATTLE_ROBOT_ROUND_LMT, COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, COM_TEAM_STATUS } from './../../../consts/consts';
|
import { COM_BATTLE_ASSIST_TIME, COM_BATTLE_ROBOT_ROUND_LMT, COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, COM_TEAM_STATUS } from './../../../consts/consts';
|
||||||
import { IT_TYPE, GOLD_COST_RATIO, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_BATTLE_CAP_TIME, COM_BATTLE_TIME_LMT, COM_BATTLE_CAP_START_TIME } from './../../../consts/consts';
|
import { IT_TYPE, GOLD_COST_RATIO, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_BATTLE_CAP_TIME, COM_BATTLE_TIME_LMT, COM_BATTLE_CAP_START_TIME, COM_BATTLE_ASSIST_REWARD_RATIO } from './../../../consts/consts';
|
||||||
import { getGoodById, getBossHpByBlueprtId, getComBtlSetByQuality, getBlueprtComposeByQuality, getBluePrtByQuality } from '../../../pubUtils/gamedata';
|
import { getGoodById, getBossHpByBlueprtId, getComBtlSetByQuality, getBlueprtComposeByQuality, getBluePrtByQuality, getWarById, getWarIdByBlueprtId } from '../../../pubUtils/gamedata';
|
||||||
import { COM_TEAM_ENABLE_LV } from '../../../consts/consts';
|
import { COM_TEAM_ENABLE_LV } from '../../../consts/consts';
|
||||||
import { ComBattleTeamModel } from '../../../db/ComBattleTeam';
|
import { ComBattleTeamModel } from '../../../db/ComBattleTeam';
|
||||||
import Role, { RoleModel } from '../../../db/Role';
|
import Role, { RoleModel } from '../../../db/Role';
|
||||||
import { STATUS } from '../../../consts/statusCode';
|
import { STATUS } from '../../../consts/statusCode';
|
||||||
import { Application, BackendSession } from 'pinus';
|
import { Application, BackendSession } from 'pinus';
|
||||||
import { resResult, getRandomByLen, calculateNum, getRandValue } from '../../../pubUtils/util';
|
import { resResult, getRandomByLen, calculateNum, getRandValue, ratioReward } from '../../../pubUtils/util';
|
||||||
import { RoleStatus } from '../../../db/ComBattleTeam';
|
import { RoleStatus } from '../../../db/ComBattleTeam';
|
||||||
import { ItemModel } from '../../../db/Item';
|
import { ItemModel } from '../../../db/Item';
|
||||||
import { handleReward } from '../../../services/rewardService';
|
import { handleFixedReward, handleReward } from '../../../services/rewardService';
|
||||||
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
||||||
import { transBossHpArr } from '../../../services/battleService';
|
import { transBossHpArr } from '../../../services/battleService';
|
||||||
import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult, clearComBtlTimer } from '../../../services/comBattleService';
|
import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult, clearComBtlTimer } from '../../../services/comBattleService';
|
||||||
|
import { setAp } from '../../../services/actionPointService';
|
||||||
|
import { roleLevelup } from '../../../services/normalBattleService';
|
||||||
|
|
||||||
export default function(app: Application) {
|
export default function(app: Application) {
|
||||||
return new ComBattleHandler(app);
|
return new ComBattleHandler(app);
|
||||||
@@ -381,7 +383,8 @@ export class ComBattleHandler {
|
|||||||
*/
|
*/
|
||||||
async setupHeroes(msg: {teamCode: string, heroes: Array<number>, battleCode: string}, session: BackendSession) {
|
async setupHeroes(msg: {teamCode: string, heroes: Array<number>, battleCode: string}, session: BackendSession) {
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let { teamCode, heroes, battleCode } = msg;
|
let { teamCode, heroes, battleCode = 'default' } = msg;
|
||||||
|
if (!heroes || heroes.length === 0) return resResult(STATUS.COM_BATTLE_HEROES_ERR);
|
||||||
let teamStatus = this.teamMap.get(teamCode);
|
let teamStatus = this.teamMap.get(teamCode);
|
||||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||||
|
|
||||||
@@ -532,8 +535,8 @@ export class ComBattleHandler {
|
|||||||
if (boss.curHp >= deltaHp) {
|
if (boss.curHp >= deltaHp) {
|
||||||
totalHurtHp += deltaHp;
|
totalHurtHp += deltaHp;
|
||||||
boss.curHp -= deltaHp;
|
boss.curHp -= deltaHp;
|
||||||
} else {
|
} else if (boss.curHp > 0) {
|
||||||
totalHurtHp += deltaHp;
|
totalHurtHp += boss.curHp;
|
||||||
boss.curHp = 0;
|
boss.curHp = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -585,18 +588,13 @@ export class ComBattleHandler {
|
|||||||
let result = battleSt === COM_TEAM_STATUS.WIN;
|
let result = battleSt === COM_TEAM_STATUS.WIN;
|
||||||
let team = await ComBattleTeamModel.syncTeamData({teamCode, status: battleSt, roleStatus: teamStatus.roleStatus});
|
let team = await ComBattleTeamModel.syncTeamData({teamCode, status: battleSt, roleStatus: teamStatus.roleStatus});
|
||||||
if (!team) return resResult(STATUS.COM_BATTLE_RESULT_ERR);
|
if (!team) return resResult(STATUS.COM_BATTLE_RESULT_ERR);
|
||||||
let battleCode = 'default';
|
|
||||||
teamStatus.roleStatus.forEach(st => {
|
|
||||||
if (st.roleId === roleId) {
|
|
||||||
battleCode = st.battleCode;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// 战斗胜利扣减藏宝图
|
// 战斗胜利扣减藏宝图
|
||||||
if (result) {
|
if (result) {
|
||||||
let res = await ItemModel.decreaseItems(roleId, [{id: teamStatus.blueprtId, count: 1}]);
|
let res = await ItemModel.decreaseItems(teamStatus.capId, [{id: teamStatus.blueprtId, count: 1}]);
|
||||||
if (!res) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH);
|
if (!res) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
channel.pushMessage('onTeamComplete', {teamCode, battleCode, result});
|
channel.pushMessage('onTeamComplete', {teamCode, result});
|
||||||
}
|
}
|
||||||
return resResult(STATUS.SUCCESS);
|
return resResult(STATUS.SUCCESS);
|
||||||
}
|
}
|
||||||
@@ -630,6 +628,53 @@ export class ComBattleHandler {
|
|||||||
return resResult(STATUS.SUCCESS, { bossCurHp: teamStatus.bossCurHp });
|
return resResult(STATUS.SUCCESS, { bossCurHp: teamStatus.bossCurHp });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 寻宝结算
|
||||||
|
* @param {{teamCode: string}} msg 寻宝队伍编号
|
||||||
|
* @param {BackendSession} session
|
||||||
|
* @returns 掉落物品和玩家升级信息
|
||||||
|
* @memberof ComBattleHandler
|
||||||
|
*/
|
||||||
|
async comBattleEnd(msg: {teamCode: string}, session: BackendSession) {
|
||||||
|
let roleId = session.get('roleId');
|
||||||
|
let roleName = session.get('roleId');
|
||||||
|
let { teamCode } = msg;
|
||||||
|
let team = await ComBattleTeamModel.getTeamByCode(teamCode);
|
||||||
|
if (!team || team.status !== COM_TEAM_STATUS.WIN) return resResult(STATUS.COM_BATTLE_REWARD_ERR);
|
||||||
|
let roleSt: RoleStatus = null;
|
||||||
|
team.roleStatus.forEach(st => {
|
||||||
|
if (st && st.roleId === roleId) {
|
||||||
|
roleSt = st;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (roleSt.gotReward) return resResult(STATUS.COM_BATTLE_REWARDED);
|
||||||
|
let warInfo = getWarById(getWarIdByBlueprtId(team.blueprtId));
|
||||||
|
if (!warInfo) return resResult(STATUS.BATTLE_MISS_INFO);
|
||||||
|
|
||||||
|
if(!warInfo.hasOwnProperty('cost')) {
|
||||||
|
warInfo['cost'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const now = Date.now(); // 当前时间戳
|
||||||
|
let apJson = await setAp(now, roleId, -1 * warInfo.cost); // 扣除体力
|
||||||
|
if(!apJson) {
|
||||||
|
return resResult(STATUS.BATTLE_ACTION_POINT_LACK);
|
||||||
|
}
|
||||||
|
let fixRewardStr = warInfo['fixReward'];
|
||||||
|
if (!roleSt.isCap) {
|
||||||
|
if (roleSt.isFrd) {
|
||||||
|
fixRewardStr = '&';
|
||||||
|
} else {
|
||||||
|
fixRewardStr = ratioReward(fixRewardStr, COM_BATTLE_ASSIST_REWARD_RATIO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await ComBattleTeamModel.updateRewardSt(roleId, true);
|
||||||
|
const goods = await handleFixedReward(roleId, roleName, fixRewardStr, 1);
|
||||||
|
let actordata = await roleLevelup(roleId, warInfo.kingExp, this.app, session);// 主公升级经验
|
||||||
|
|
||||||
|
return resResult(STATUS.SUCCESS, { ...goods, ...actordata });
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 获取自己一段时间内的寻宝记录
|
* @description 获取自己一段时间内的寻宝记录
|
||||||
* @param {{}} msg
|
* @param {{}} msg
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import { RScriptRecordModel } from '../../../db/RScriptRecord';
|
|||||||
import { updateWarStar, checkBattleHeroes, roleLevelup } from '../../../services/normalBattleService';
|
import { updateWarStar, checkBattleHeroes, roleLevelup } from '../../../services/normalBattleService';
|
||||||
import { checkDungeonNum, checkDungeonAndIncrease } from '../../../services/dungeonService';
|
import { checkDungeonNum, checkDungeonAndIncrease } from '../../../services/dungeonService';
|
||||||
import { switchOnFunc } from '../../../services/funcSwitchService';
|
import { switchOnFunc } from '../../../services/funcSwitchService';
|
||||||
import { checkComBattleDrop } from '../../../services/comBattleService';
|
|
||||||
|
|
||||||
export default function(app: Application) {
|
export default function(app: Application) {
|
||||||
return new NormalBattleHandler(app);
|
return new NormalBattleHandler(app);
|
||||||
@@ -162,6 +161,10 @@ export class NormalBattleHandler {
|
|||||||
if(!warInfo) {
|
if(!warInfo) {
|
||||||
return resResult(STATUS.BATTLE_MISS_INFO);
|
return resResult(STATUS.BATTLE_MISS_INFO);
|
||||||
}
|
}
|
||||||
|
// 寻宝不使用通用战斗模块结算
|
||||||
|
if (warInfo.warType == WAR_TYPE.WARLOARDS) {
|
||||||
|
return resResult(STATUS.BATTLE_END_WRONG_TYPE);
|
||||||
|
}
|
||||||
if(!warInfo.hasOwnProperty('cost')) {
|
if(!warInfo.hasOwnProperty('cost')) {
|
||||||
warInfo['cost'] = 0;
|
warInfo['cost'] = 0;
|
||||||
}
|
}
|
||||||
@@ -220,15 +223,6 @@ export class NormalBattleHandler {
|
|||||||
return checkResult.resResult;
|
return checkResult.resResult;
|
||||||
}
|
}
|
||||||
dungeonNum = Object.assign(dungeonNum, checkResult.data)
|
dungeonNum = Object.assign(dungeonNum, checkResult.data)
|
||||||
} else if (warInfo.warType == WAR_TYPE.WARLOARDS) {
|
|
||||||
let checkResult = await checkComBattleDrop(roleId, battleCode);
|
|
||||||
if (checkResult.status === -1) {
|
|
||||||
return checkResult.resResult;
|
|
||||||
}
|
|
||||||
// 寻宝会根据是否队长重新计算掉落
|
|
||||||
if (checkResult.fixReward) {
|
|
||||||
warReward.resetFixReward(checkResult.fixReward);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isSuccess) { // 挑战胜利
|
if(isSuccess) { // 挑战胜利
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { STATUS } from './../consts/statusCode';
|
import { STATUS } from './../consts/statusCode';
|
||||||
import { COM_BATTLE_ROBOT_ID_NAME, COM_BATTLE_ROBOT_CE_RATIO, COM_BATTLE_ROBOT_ROUND_LMT, COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, COM_TEAM_STATUS } from './../consts/consts';
|
import { COM_BATTLE_ROBOT_ID_NAME, COM_BATTLE_ROBOT_CE_RATIO, COM_BATTLE_ROBOT_ROUND_LMT, COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, COM_TEAM_STATUS, COM_BATTLE_ASSIST_REWARD_RATIO } from './../consts/consts';
|
||||||
import { RoleStatus, ComBattleTeamModel } from './../db/ComBattleTeam';
|
import { RoleStatus, ComBattleTeamModel } from './../db/ComBattleTeam';
|
||||||
import { getBluePrtByQuality, getRewardByBlueprtId } from "../pubUtils/gamedata";
|
import { getBluePrtByQuality, getRewardByBlueprtId } from "../pubUtils/gamedata";
|
||||||
import { getRandEelm, getRandValue, resResult, ratioReward } from "../pubUtils/util";
|
import { getRandEelm, getRandValue, resResult, ratioReward } from "../pubUtils/util";
|
||||||
@@ -47,7 +47,8 @@ export function checkComBattleResult(teamStatus) {
|
|||||||
let robotRestHurt = 0;
|
let robotRestHurt = 0;
|
||||||
// 看看是否还有活人
|
// 看看是否还有活人
|
||||||
teamStatus.roleStatus.forEach(st => {
|
teamStatus.roleStatus.forEach(st => {
|
||||||
if (!st.isRobot && st.killed.length < st.heroes.length) {
|
// 设置了阵容,且阵容人数和阵亡人数一样,说明玩家战败
|
||||||
|
if (!st.isRobot && st.heroes && st.heroes.length > 0 && st.killed.length < st.heroes.length) {
|
||||||
allPlayerKilled = false
|
allPlayerKilled = false
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -73,6 +74,13 @@ export function checkComBattleResult(teamStatus) {
|
|||||||
return COM_TEAM_STATUS.FIGHTING;
|
return COM_TEAM_STATUS.FIGHTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 计算寻宝结算-deprecated
|
||||||
|
* @export
|
||||||
|
* @param {string} roleId
|
||||||
|
* @param {string} battleCode
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export async function checkComBattleDrop(roleId: string, battleCode: string) {
|
export async function checkComBattleDrop(roleId: string, battleCode: string) {
|
||||||
let team = await ComBattleTeamModel.getTeamByRoleAndBattleCode(roleId, battleCode);
|
let team = await ComBattleTeamModel.getTeamByRoleAndBattleCode(roleId, battleCode);
|
||||||
if (team.status !== COM_TEAM_STATUS.WIN) return { status: -1, resResult: resResult(STATUS.COM_BATTLE_REWARD_ERR) };
|
if (team.status !== COM_TEAM_STATUS.WIN) return { status: -1, resResult: resResult(STATUS.COM_BATTLE_REWARD_ERR) };
|
||||||
@@ -89,10 +97,10 @@ export async function checkComBattleDrop(roleId: string, battleCode: string) {
|
|||||||
fixReward = '&';
|
fixReward = '&';
|
||||||
// TODO: 消耗品情谊点添加
|
// TODO: 消耗品情谊点添加
|
||||||
} else {
|
} else {
|
||||||
fixReward = ratioReward(fixReward, COM_BATTLE_ROBOT_HURT_CH_RATIO);
|
fixReward = ratioReward(fixReward, COM_BATTLE_ASSIST_REWARD_RATIO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await ComBattleTeamModel.updateRewardSt(roleId, battleCode, true);
|
await ComBattleTeamModel.updateRewardSt(roleId, true);
|
||||||
return {status: 0, fixReward};
|
return {status: 0, fixReward};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export async function handleFixedReward(roleId: string, roleName: string, reward
|
|||||||
let reward = decodeStr('fixReward', rewardStr);
|
let reward = decodeStr('fixReward', rewardStr);
|
||||||
let rewards = [];
|
let rewards = [];
|
||||||
for(let obj of reward)
|
for(let obj of reward)
|
||||||
rewards.push({ ...obj, count: obj.count * multi});
|
rewards.push({ ...obj, count: Math.ceil(obj.count * multi)});
|
||||||
const result = await handleReward(roleId, roleName, reward);
|
const result = await handleReward(roleId, roleName, reward);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export const STATUS = {
|
|||||||
BATTLE_STATUS_WRONG: { code: 20005, simStr: '关卡状态错误' },
|
BATTLE_STATUS_WRONG: { code: 20005, simStr: '关卡状态错误' },
|
||||||
BATTLE_HERO_NOT_FOUND: { code: 20006, simStr: '使用的武将不存在' },
|
BATTLE_HERO_NOT_FOUND: { code: 20006, simStr: '使用的武将不存在' },
|
||||||
BATTLE_CONSUMES_NOT_ENOUGH: { code: 20007, simStr: '道具不足' },
|
BATTLE_CONSUMES_NOT_ENOUGH: { code: 20007, simStr: '道具不足' },
|
||||||
|
BATTLE_END_WRONG_TYPE: { code: 20008, simStr: '此类型无法使用通用结算' },
|
||||||
|
|
||||||
// 主线 20100 - 20199
|
// 主线 20100 - 20199
|
||||||
BATTLE_INFO_VALIDATE_ERR: { code: 20101, simStr: '关卡信息不同' },
|
BATTLE_INFO_VALIDATE_ERR: { code: 20101, simStr: '关卡信息不同' },
|
||||||
@@ -99,6 +100,8 @@ export const STATUS = {
|
|||||||
COM_BATTLE_HURT_NUM_ERR: { code: 20625, simStr: '血量计算错误' },
|
COM_BATTLE_HURT_NUM_ERR: { code: 20625, simStr: '血量计算错误' },
|
||||||
COM_BATTLE_START_ERR: { code: 20626, simStr: '开始战斗失败' },
|
COM_BATTLE_START_ERR: { code: 20626, simStr: '开始战斗失败' },
|
||||||
COM_BATTLE_REWARD_ERR: { code: 20627, simStr: '不能领取奖励' },
|
COM_BATTLE_REWARD_ERR: { code: 20627, simStr: '不能领取奖励' },
|
||||||
|
COM_BATTLE_REWARDED: { code: 20628, simStr: '奖励已领取' },
|
||||||
|
COM_BATTLE_HEROES_ERR: { code: 20629, simStr: '阵容异常' },
|
||||||
|
|
||||||
// 共斗藏宝图合成
|
// 共斗藏宝图合成
|
||||||
COM_BLUEPRT_QUALITY_CANNOT_COMPOSE: { code: 20630, simStr: '该品质藏宝图不可合成' },
|
COM_BLUEPRT_QUALITY_CANNOT_COMPOSE: { code: 20630, simStr: '该品质藏宝图不可合成' },
|
||||||
|
|||||||
@@ -133,8 +133,8 @@ export default class ComBattleTeam extends BaseModel {
|
|||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async updateRewardSt(roleId: string, battleCode: string, gotReward: boolean, lean = true) {
|
public static async updateRewardSt(roleId: string, gotReward: boolean, lean = true) {
|
||||||
const team = await ComBattleTeamModel.findOneAndUpdate({ roleIds: roleId, 'roleStatus.battleCode': battleCode}, {$set: {'roleStatus.$.gotReward': gotReward}}).lean(lean);
|
const team = await ComBattleTeamModel.findOneAndUpdate({ roleIds: roleId, 'roleStatus.roleId': roleId}, {$set: {'roleStatus.$.gotReward': gotReward}}).lean(lean);
|
||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,6 +224,11 @@ export default class ComBattleTeam extends BaseModel {
|
|||||||
const team = await ComBattleTeamModel.findOne({roleIds: roleId, 'roleStatus.battleCode': battleCode}).lean(lean);
|
const team = await ComBattleTeamModel.findOne({roleIds: roleId, 'roleStatus.battleCode': battleCode}).lean(lean);
|
||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async getTeamByCode(teamCode: string, lean = true) {
|
||||||
|
const team = await ComBattleTeamModel.findOne({teamCode}).lean(lean);
|
||||||
|
return team;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ComBattleTeamModel = getModelForClass(ComBattleTeam);
|
export const ComBattleTeamModel = getModelForClass(ComBattleTeam);
|
||||||
Reference in New Issue
Block a user