寻宝:增加 boss 返回字段;修改领取奖励更新
This commit is contained in:
@@ -2,13 +2,13 @@
|
|||||||
* @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 17:33:14
|
* @Last Modified time: 2020-12-02 21:05:48
|
||||||
*/
|
*/
|
||||||
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, COM_BATTLE_ASSIST_REWARD_RATIO } 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, getWarById, getWarIdByBlueprtId } 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, BossHp } 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';
|
||||||
@@ -48,14 +48,14 @@ class ComTeam {
|
|||||||
// boss 当前血量
|
// boss 当前血量
|
||||||
bossCurHp: number;
|
bossCurHp: number;
|
||||||
// 单个 boss 血量状态
|
// 单个 boss 血量状态
|
||||||
bossHpArr: Array<{dataId: number, hp: number, curHp: number}>;
|
bossHpArr: Array<BossHp>;
|
||||||
// 品质
|
// 品质
|
||||||
quality: number;
|
quality: number;
|
||||||
// 当前回合
|
// 当前回合
|
||||||
curRnd: number;
|
curRnd: number;
|
||||||
// 队伍中人数
|
// 队伍中人数
|
||||||
roleCnt: number;
|
roleCnt: number;
|
||||||
constructor(teamCode: string, pub: boolean, blueprtId: number, status: number, capId: string, ceLimit: number, bossHp: number, quality: number, bossHpArr:Array<{dataId: number, hp: number, curHp: number}> ) {
|
constructor(teamCode: string, pub: boolean, blueprtId: number, status: number, capId: string, ceLimit: number, bossHp: number, quality: number, bossHpArr:Array<BossHp> ) {
|
||||||
this.teamCode = teamCode;
|
this.teamCode = teamCode;
|
||||||
this.pub = pub;
|
this.pub = pub;
|
||||||
this.blueprtId = blueprtId;
|
this.blueprtId = blueprtId;
|
||||||
@@ -170,7 +170,7 @@ export class ComBattleHandler {
|
|||||||
channel.pushMessage('onTeamJoin', {teamInfo: team});
|
channel.pushMessage('onTeamJoin', {teamInfo: team});
|
||||||
}
|
}
|
||||||
// TODO: 代码抽象
|
// TODO: 代码抽象
|
||||||
if (team.roleIds && team.roleIds.length === 3) {
|
if (team && team.roleIds && team.roleIds.length === 3) {
|
||||||
let timer = setTimeout(async () => {
|
let timer = setTimeout(async () => {
|
||||||
thiz.dismiss({teamCode}, session);
|
thiz.dismiss({teamCode}, session);
|
||||||
}, COM_BATTLE_CAP_START_TIME);
|
}, COM_BATTLE_CAP_START_TIME);
|
||||||
@@ -503,7 +503,7 @@ export class ComBattleHandler {
|
|||||||
let thiz = this;
|
let thiz = this;
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
let teamStatus = thiz.teamMap.get(teamCode);
|
let teamStatus = thiz.teamMap.get(teamCode);
|
||||||
if (teamStatus.status === COM_TEAM_STATUS.FIGHTING) {
|
if (teamStatus && teamStatus.status === COM_TEAM_STATUS.FIGHTING) {
|
||||||
let channelService = thiz.app.get('channelService');
|
let channelService = thiz.app.get('channelService');
|
||||||
let channel = channelService.getChannel(teamCode, false);
|
let channel = channelService.getChannel(teamCode, false);
|
||||||
let team = await ComBattleTeamModel.syncTeamData({teamCode, status: COM_TEAM_STATUS.LOOSE, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr});
|
let team = await ComBattleTeamModel.syncTeamData({teamCode, status: COM_TEAM_STATUS.LOOSE, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr});
|
||||||
@@ -672,11 +672,19 @@ export class ComBattleHandler {
|
|||||||
return resResult(STATUS.BATTLE_ACTION_POINT_LACK);
|
return resResult(STATUS.BATTLE_ACTION_POINT_LACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
await ComBattleTeamModel.updateRewardSt(roleId, true);
|
await ComBattleTeamModel.updateRewardSt(teamCode, roleId, true);
|
||||||
const goods = await handleFixedReward(roleId, roleName, roleSt.fixReward, 1);
|
const goods = await handleFixedReward(roleId, roleName, roleSt.fixReward, 1);
|
||||||
let actordata = await roleLevelup(roleId, warInfo.kingExp, this.app, session);// 主公升级经验
|
let actordata = await roleLevelup(roleId, warInfo.kingExp, this.app, session);// 主公升级经验
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { ...goods, ...actordata, teamInfo: {status, roleStatus, bossHpArr} });
|
return resResult(STATUS.SUCCESS, { ...goods, ...actordata, teamInfo: {status, teamCode, roleStatus, bossHpArr} });
|
||||||
|
}
|
||||||
|
|
||||||
|
async getComBtlStatus(msg: {teamCode: string}, session: BackendSession) {
|
||||||
|
let { teamCode } = msg;
|
||||||
|
let team = await ComBattleTeamModel.getTeamByCode(teamCode);
|
||||||
|
let { roleStatus, status, bossHpArr } = team;
|
||||||
|
|
||||||
|
return resResult(STATUS.SUCCESS, { teamInfo: {status, teamCode, roleStatus, bossHpArr} });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -379,7 +379,7 @@ export function getRandRobot(cnt = 1, withAttr = false) {
|
|||||||
* 拷贝敌军数组并添加当前血量字段
|
* 拷贝敌军数组并添加当前血量字段
|
||||||
* @param source 原敌军数组,不包含当前血量字段
|
* @param source 原敌军数组,不包含当前血量字段
|
||||||
*/
|
*/
|
||||||
export function transBossHpArr(source: Array<{dataId: number, hp: number}>): Array<{dataId: number, hp: number, curHp: number}> {
|
export function transBossHpArr(source: Array<{dataId: number, hp: number, actorId: number}>): Array<{dataId: number, hp: number, curHp: number, actorId: number}> {
|
||||||
let desArr = [];
|
let desArr = [];
|
||||||
source.forEach(elem => {
|
source.forEach(elem => {
|
||||||
let { hp } = elem;
|
let { hp } = elem;
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ export async function checkComBattleDrop(roleId: string, battleCode: string) {
|
|||||||
fixReward = ratioReward(fixReward, COM_BATTLE_ASSIST_REWARD_RATIO);
|
fixReward = ratioReward(fixReward, COM_BATTLE_ASSIST_REWARD_RATIO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await ComBattleTeamModel.updateRewardSt(roleId, true);
|
await ComBattleTeamModel.updateRewardSt(team.teamCode, roleId, true);
|
||||||
return {status: 0, fixReward};
|
return {status: 0, fixReward};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,21 @@ export class RoleStatus {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class BossHp {
|
||||||
|
// boss 战场标识
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
dataId: number;
|
||||||
|
// boss 战场标识
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
actorId: number;
|
||||||
|
// 总血量
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
hp: number;
|
||||||
|
// 当前血量
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
curHp: number;
|
||||||
|
}
|
||||||
|
|
||||||
@index({ teamCode: 1 })
|
@index({ teamCode: 1 })
|
||||||
@index({ roleIds: 1 })
|
@index({ roleIds: 1 })
|
||||||
@index({ status: 1, blueprtId: 1, pub: 1})
|
@index({ status: 1, blueprtId: 1, pub: 1})
|
||||||
@@ -107,8 +122,8 @@ export default class ComBattleTeam extends BaseModel {
|
|||||||
roleCnt: number;
|
roleCnt: number;
|
||||||
|
|
||||||
// 单个 boss 血量状态
|
// 单个 boss 血量状态
|
||||||
@prop({ required: false, default: [] })
|
@prop({ required: false, type: BossHp, default: [] })
|
||||||
bossHpArr: Array<{dataId: number, hp: number, curHp: number}>;
|
bossHpArr: Array<BossHp>;
|
||||||
|
|
||||||
public static async createTeam(teamData: {teamCode: string, roleIds: Array<string>, pub: boolean, blueprtId: number, quality: number, status: number, roleStatus: Array<RoleStatus>, capId: string, ceLimit: number}, lean = true) {
|
public static async createTeam(teamData: {teamCode: string, roleIds: Array<string>, pub: boolean, blueprtId: number, quality: number, status: number, roleStatus: Array<RoleStatus>, capId: string, ceLimit: number}, lean = true) {
|
||||||
const team = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleIds.length}}, {upsert: true, new: true}).lean(lean);
|
const team = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleIds.length}}, {upsert: true, new: true}).lean(lean);
|
||||||
@@ -140,12 +155,13 @@ export default class ComBattleTeam extends BaseModel {
|
|||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async updateRewardSt(roleId: string, gotReward: boolean, lean = true) {
|
public static async updateRewardSt(teamCode: string, roleId: string, gotReward: boolean, lean = true) {
|
||||||
const team = await ComBattleTeamModel.findOneAndUpdate({ roleIds: roleId, 'roleStatus.roleId': roleId}, {$set: {'roleStatus.$.gotReward': gotReward}}).lean(lean);
|
const team = await ComBattleTeamModel.findOneAndUpdate({ teamCode, 'roleStatus.roleId': roleId}, {$set: {'roleStatus.$.gotReward': gotReward}}).lean(lean);
|
||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async syncTeamData(teamData: {teamCode: string, status: number, roleStatus: Array<RoleStatus>, bossHpArr: Array<{dataId: number, hp: number, curHp: number}>}, lean = true) {
|
public static async syncTeamData(teamData: {teamCode: string, status: number, roleStatus: Array<RoleStatus>, bossHpArr: Array<BossHp>}, lean = true) {
|
||||||
|
console.log('syncTeamData bossHpArr: ', teamData.bossHpArr);
|
||||||
const team = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleStatus.length}}, {new: true}).lean(lean);
|
const team = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleStatus.length}}, {new: true}).lean(lean);
|
||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ const olySeidInfo = new Map<number, any>();
|
|||||||
const expeditionInfo = new Map<number, any> ();
|
const expeditionInfo = new Map<number, any> ();
|
||||||
const comBtlInfo = new Map<number, {quality: number, name: string, assistanceTime: number, assistanceLevel: number}>();
|
const comBtlInfo = new Map<number, {quality: number, name: string, assistanceTime: number, assistanceLevel: number}>();
|
||||||
const btlBossHpSum = new Map<number, number>();
|
const btlBossHpSum = new Map<number, number>();
|
||||||
const btlBossHp = new Map<number, Array<{dataId: number, hp: number}>>();
|
const btlBossHp = new Map<number, Array<{dataId: number, hp: number, actorId: number}>>();
|
||||||
const blueprtToWar = new Map<number, number>();
|
const blueprtToWar = new Map<number, number>();
|
||||||
const goodInfo = new Map<number, any>();
|
const goodInfo = new Map<number, any>();
|
||||||
const blueprt = new Map<number, Array<number>>();
|
const blueprt = new Map<number, Array<number>>();
|
||||||
@@ -364,12 +364,12 @@ export function getBossHpByWarId(warId: number) {
|
|||||||
const warInfo = getWarJsons(warId).json;
|
const warInfo = getWarJsons(warId).json;
|
||||||
if (warInfo && warInfo.length) {
|
if (warInfo && warInfo.length) {
|
||||||
warInfo.forEach(hero => {
|
warInfo.forEach(hero => {
|
||||||
let { attribute, dataId, relation } = hero;
|
let { attribute, dataId, relation, actorId } = hero;
|
||||||
if (relation === 2) {
|
if (relation === 2) {
|
||||||
let attriData = decodeIdCntArrayStr(attribute, 1);
|
let attriData = decodeIdCntArrayStr(attribute, 1);
|
||||||
const hp = parseInt(attriData.get('1'));
|
const hp = parseInt(attriData.get('1'));
|
||||||
if (hp > 0) {
|
if (hp > 0) {
|
||||||
bossHpArr.push({dataId, hp});
|
bossHpArr.push({dataId, hp, actorId});
|
||||||
bossHpSum += hp;
|
bossHpSum += hp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user