寻宝:修改掉落bug;修改战斗结果判断

This commit is contained in:
liangtongchuan
2020-12-02 13:13:09 +08:00
parent a001ec4478
commit 3515f99260
6 changed files with 88 additions and 33 deletions

View File

@@ -2,23 +2,25 @@
* @Author: 梁桐川
* @Date: 2020-11-30 15:05:48
* @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 { 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 { getGoodById, getBossHpByBlueprtId, getComBtlSetByQuality, getBlueprtComposeByQuality, getBluePrtByQuality } from '../../../pubUtils/gamedata';
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, getWarById, getWarIdByBlueprtId } from '../../../pubUtils/gamedata';
import { COM_TEAM_ENABLE_LV } from '../../../consts/consts';
import { ComBattleTeamModel } from '../../../db/ComBattleTeam';
import Role, { RoleModel } from '../../../db/Role';
import { STATUS } from '../../../consts/statusCode';
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 { ItemModel } from '../../../db/Item';
import { handleReward } from '../../../services/rewardService';
import { handleFixedReward, handleReward } from '../../../services/rewardService';
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
import { transBossHpArr } from '../../../services/battleService';
import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult, clearComBtlTimer } from '../../../services/comBattleService';
import { setAp } from '../../../services/actionPointService';
import { roleLevelup } from '../../../services/normalBattleService';
export default function(app: Application) {
return new ComBattleHandler(app);
@@ -381,7 +383,8 @@ export class ComBattleHandler {
*/
async setupHeroes(msg: {teamCode: string, heroes: Array<number>, battleCode: string}, session: BackendSession) {
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);
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) {
totalHurtHp += deltaHp;
boss.curHp -= deltaHp;
} else {
totalHurtHp += deltaHp;
} else if (boss.curHp > 0) {
totalHurtHp += boss.curHp;
boss.curHp = 0;
}
}
@@ -585,18 +588,13 @@ export class ComBattleHandler {
let result = battleSt === COM_TEAM_STATUS.WIN;
let team = await ComBattleTeamModel.syncTeamData({teamCode, status: battleSt, roleStatus: teamStatus.roleStatus});
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) {
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);
}
channel.pushMessage('onTeamComplete', {teamCode, battleCode, result});
channel.pushMessage('onTeamComplete', {teamCode, result});
}
return resResult(STATUS.SUCCESS);
}
@@ -630,6 +628,53 @@ export class ComBattleHandler {
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 获取自己一段时间内的寻宝记录
* @param {{}} msg

View File

@@ -17,7 +17,6 @@ import { RScriptRecordModel } from '../../../db/RScriptRecord';
import { updateWarStar, checkBattleHeroes, roleLevelup } from '../../../services/normalBattleService';
import { checkDungeonNum, checkDungeonAndIncrease } from '../../../services/dungeonService';
import { switchOnFunc } from '../../../services/funcSwitchService';
import { checkComBattleDrop } from '../../../services/comBattleService';
export default function(app: Application) {
return new NormalBattleHandler(app);
@@ -162,6 +161,10 @@ export class NormalBattleHandler {
if(!warInfo) {
return resResult(STATUS.BATTLE_MISS_INFO);
}
// 寻宝不使用通用战斗模块结算
if (warInfo.warType == WAR_TYPE.WARLOARDS) {
return resResult(STATUS.BATTLE_END_WRONG_TYPE);
}
if(!warInfo.hasOwnProperty('cost')) {
warInfo['cost'] = 0;
}
@@ -220,15 +223,6 @@ export class NormalBattleHandler {
return checkResult.resResult;
}
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) { // 挑战胜利

View File

@@ -1,5 +1,5 @@
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 { getBluePrtByQuality, getRewardByBlueprtId } from "../pubUtils/gamedata";
import { getRandEelm, getRandValue, resResult, ratioReward } from "../pubUtils/util";
@@ -47,7 +47,8 @@ export function checkComBattleResult(teamStatus) {
let robotRestHurt = 0;
// 看看是否还有活人
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
}
});
@@ -73,6 +74,13 @@ export function checkComBattleResult(teamStatus) {
return COM_TEAM_STATUS.FIGHTING;
}
/**
* @description 计算寻宝结算-deprecated
* @export
* @param {string} roleId
* @param {string} battleCode
* @returns
*/
export async function checkComBattleDrop(roleId: string, battleCode: string) {
let team = await ComBattleTeamModel.getTeamByRoleAndBattleCode(roleId, battleCode);
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 = '&';
// TODO: 消耗品情谊点添加
} 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};
}

View File

@@ -11,7 +11,7 @@ export async function handleFixedReward(roleId: string, roleName: string, reward
let reward = decodeStr('fixReward', rewardStr);
let rewards = [];
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);
return result;
}

View File

@@ -22,6 +22,7 @@ export const STATUS = {
BATTLE_STATUS_WRONG: { code: 20005, simStr: '关卡状态错误' },
BATTLE_HERO_NOT_FOUND: { code: 20006, simStr: '使用的武将不存在' },
BATTLE_CONSUMES_NOT_ENOUGH: { code: 20007, simStr: '道具不足' },
BATTLE_END_WRONG_TYPE: { code: 20008, simStr: '此类型无法使用通用结算' },
// 主线 20100 - 20199
BATTLE_INFO_VALIDATE_ERR: { code: 20101, simStr: '关卡信息不同' },
@@ -99,6 +100,8 @@ export const STATUS = {
COM_BATTLE_HURT_NUM_ERR: { code: 20625, simStr: '血量计算错误' },
COM_BATTLE_START_ERR: { code: 20626, 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: '该品质藏宝图不可合成' },

View File

@@ -133,8 +133,8 @@ export default class ComBattleTeam extends BaseModel {
return team;
}
public static async updateRewardSt(roleId: string, battleCode: string, gotReward: boolean, lean = true) {
const team = await ComBattleTeamModel.findOneAndUpdate({ roleIds: roleId, 'roleStatus.battleCode': battleCode}, {$set: {'roleStatus.$.gotReward': gotReward}}).lean(lean);
public static async updateRewardSt(roleId: string, gotReward: boolean, lean = true) {
const team = await ComBattleTeamModel.findOneAndUpdate({ roleIds: roleId, 'roleStatus.roleId': roleId}, {$set: {'roleStatus.$.gotReward': gotReward}}).lean(lean);
return team;
}
@@ -224,6 +224,11 @@ export default class ComBattleTeam extends BaseModel {
const team = await ComBattleTeamModel.findOne({roleIds: roleId, 'roleStatus.battleCode': battleCode}).lean(lean);
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);