寻宝:修改奖励
This commit is contained in:
@@ -71,7 +71,7 @@ export class ComBattleHandler {
|
|||||||
|
|
||||||
// 创建队伍数据结构
|
// 创建队伍数据结构
|
||||||
let comTeam = new MemComBtlTeam(teamCode, pub, blueprtId, roleId, ceLimit, sid);
|
let comTeam = new MemComBtlTeam(teamCode, pub, blueprtId, roleId, ceLimit, sid);
|
||||||
addRoleToTeam(comTeam, roleInfo, true, false);
|
addRoleToTeam(comTeam, roleInfo, sid, true, false);
|
||||||
addUserToTeamChannel(teamCode, true, roleId, sid);
|
addUserToTeamChannel(teamCode, true, roleId, sid);
|
||||||
// 将正在匹配的符合要求的玩家加入队伍,并推送入队消息
|
// 将正在匹配的符合要求的玩家加入队伍,并推送入队消息
|
||||||
await addValidSearchingRoles(comTeam);
|
await addValidSearchingRoles(comTeam);
|
||||||
@@ -135,7 +135,7 @@ export class ComBattleHandler {
|
|||||||
|
|
||||||
let isFrd = await getFrd(roleId);
|
let isFrd = await getFrd(roleId);
|
||||||
// 将玩家加入队伍
|
// 将玩家加入队伍
|
||||||
addRoleToTeam(comTeam, roleInfo, false, isFrd);
|
addRoleToTeam(comTeam, roleInfo, sid, false, isFrd);
|
||||||
addUserToTeamChannel(teamCode, true, roleId, sid);
|
addUserToTeamChannel(teamCode, true, roleId, sid);
|
||||||
|
|
||||||
// 创建并添加机器人
|
// 创建并添加机器人
|
||||||
@@ -195,7 +195,7 @@ export class ComBattleHandler {
|
|||||||
|
|
||||||
// 加入队伍
|
// 加入队伍
|
||||||
if (!validToJoin(teamStatus, roleId)) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
if (!validToJoin(teamStatus, roleId)) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||||
let roleStatus = new RoleStatus(role, false, isFrd);
|
let roleStatus = new RoleStatus(role, sid, false, isFrd);
|
||||||
const team = await ComBattleTeamModel.addRole(teamCode, roleStatus);
|
const team = await ComBattleTeamModel.addRole(teamCode, roleStatus);
|
||||||
if (!team) {
|
if (!team) {
|
||||||
return resResult(STATUS.COM_BATTLE_JOIN_ERR);
|
return resResult(STATUS.COM_BATTLE_JOIN_ERR);
|
||||||
@@ -550,13 +550,6 @@ export class ComBattleHandler {
|
|||||||
roleSt = st;
|
roleSt = st;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (roleSt.gotReward) return resResult(STATUS.COM_BATTLE_REWARDED);
|
|
||||||
let warInfo = getWarByBlueprtId(blueprtId);
|
|
||||||
if (!warInfo) return resResult(STATUS.BATTLE_MISS_INFO);
|
|
||||||
|
|
||||||
await ComBattleTeamModel.updateRewardSt(teamCode, roleId, true);
|
|
||||||
const goods = await addItems(roleId, roleName, sid, roleSt.rewards, ITEM_CHANGE_REASON.COM_BATTLE_END);
|
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { teamInfo: {status, teamCode, roleStatus, bossHpArr} });
|
return resResult(STATUS.SUCCESS, { teamInfo: {status, teamCode, roleStatus, bossHpArr} });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,17 +10,18 @@ import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, ComBattleReward } fr
|
|||||||
import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax, getRandEelmWithWeight, getRobotInfo, getRandSingleEelm } from "../pubUtils/util";
|
import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax, getRandEelmWithWeight, getRobotInfo, getRandSingleEelm } from "../pubUtils/util";
|
||||||
import { getRandRobot } from "./battleService";
|
import { getRandRobot } from "./battleService";
|
||||||
import { Channel, ChannelService, pinus } from 'pinus';
|
import { Channel, ChannelService, pinus } from 'pinus';
|
||||||
import { TREASURE, EXTERIOR } from '../pubUtils/dicParam';
|
import { TREASURE, EXTERIOR, FRIEND } from '../pubUtils/dicParam';
|
||||||
import { getFriendLvAdd } from './friendService';
|
import { getFriendLvAdd } from './friendService';
|
||||||
import { getRoleIds } from '../pubUtils/friendUtil';
|
import { getRoleIds } from '../pubUtils/friendUtil';
|
||||||
import { getTeamSearchByLv, rmRoleFromQueue } from './redisService';
|
import { getTeamSearchByLv, rmRoleFromQueue } from './redisService';
|
||||||
import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById } from '../pubUtils/data';
|
import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById } from '../pubUtils/data';
|
||||||
import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
|
import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
|
||||||
import { getFriendPointObject, handleCost } from './role/rewardService';
|
import { addItems, getFriendPointObject, handleCost } from './role/rewardService';
|
||||||
import { addUserToTeamChannel, delTeamChannel, sendMessageToTeam, sendMessageToUsersWithSuc, sendMessageToUserWithSuc } from './pushService';
|
import { addUserToTeamChannel, delTeamChannel, sendMessageToTeam, sendMessageToUsersWithSuc, sendMessageToUserWithSuc } from './pushService';
|
||||||
import { checkTaskInComBattleEnd } from './task/taskService';
|
import { checkTaskInComBattleEnd } from './task/taskService';
|
||||||
import moment = require('moment');
|
import moment = require('moment');
|
||||||
import { RewardInter } from '../pubUtils/interface';
|
import { RewardInter } from '../pubUtils/interface';
|
||||||
|
import { FriendPointModel } from '../db/FriendPoint';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在给定的品质列表中随机返回一定数量的藏宝图Id
|
* 在给定的品质列表中随机返回一定数量的藏宝图Id
|
||||||
@@ -66,7 +67,7 @@ export function getRandComBtlRobots(topLineupCe: number, ceLimit: number, lv: nu
|
|||||||
roleName: robotRoleName,
|
roleName: robotRoleName,
|
||||||
ce: robotCe,
|
ce: robotCe,
|
||||||
lv: robotLv
|
lv: robotLv
|
||||||
}, false, false, robot, true);
|
}, '', false, false, robot, true);
|
||||||
robotStArr.push(robotStatus);
|
robotStArr.push(robotStatus);
|
||||||
robotIdArr.push(robotRoleId);
|
robotIdArr.push(robotRoleId);
|
||||||
});
|
});
|
||||||
@@ -158,14 +159,22 @@ export function setComBtlTimer(teamCode: string, timer: NodeJS.Timer, timerMap:
|
|||||||
|
|
||||||
export async function getRealReward(blueprtId: number, roleSts: RoleStatus[], roleSt: RoleStatus, hasTimeExtraReward: boolean): Promise<ComBattleReward[]> {
|
export async function getRealReward(blueprtId: number, roleSts: RoleStatus[], roleSt: RoleStatus, hasTimeExtraReward: boolean): Promise<ComBattleReward[]> {
|
||||||
let dicReward = getRewardByBlueprtId(blueprtId);
|
let dicReward = getRewardByBlueprtId(blueprtId);
|
||||||
if(!dicReward) return [];
|
if(!dicReward || roleSt.isRobot) return [];
|
||||||
|
|
||||||
let fixRewards: RewardInter[], extraRewards: RewardInter[];
|
let fixRewards: RewardInter[] = [], extraRewards: RewardInter[] = [];
|
||||||
if (roleSt.isCap) {
|
if (roleSt.isCap) {
|
||||||
fixRewards.push(...dicReward.captainReward);
|
fixRewards.push(...dicReward.captainReward);
|
||||||
} else {
|
} else {
|
||||||
if (roleSt.isFrd) {
|
if (roleSt.isFrd) {
|
||||||
fixRewards.push(getFriendPointObject(TREASURE.REWARD_FRIENDPOINT));
|
// 情谊值有上限,送到上限为止
|
||||||
|
let frdPointRec = await FriendPointModel.getFrdPointRecToday(roleSt.roleId, FRIEND_DROP_TYPE.COM_BATTLE);
|
||||||
|
let { comBattleCnt = 0 } = frdPointRec || {};
|
||||||
|
if(comBattleCnt < FRIEND.FRIEND_FRIENDPOINT_MAX) {
|
||||||
|
let count = FRIEND.FRIEND_FRIENDPOINT_MAX - comBattleCnt > TREASURE.REWARD_FRIENDPOINT? TREASURE.REWARD_FRIENDPOINT: FRIEND.FRIEND_FRIENDPOINT_MAX - comBattleCnt;
|
||||||
|
fixRewards.push(getFriendPointObject(count));
|
||||||
|
await FriendPointModel.updateComBattleCntToday(roleSt.roleId, roleSt.roleName, count, FRIEND.FRIEND_FRIENDPOINT_MAX, FRIEND_DROP_TYPE.COM_BATTLE);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
fixRewards.push(...dicReward.teammateReward)
|
fixRewards.push(...dicReward.teammateReward)
|
||||||
}
|
}
|
||||||
@@ -252,6 +261,9 @@ export async function handleComBtlProgress(teamStatus: MemComBtlTeam, robotHurtT
|
|||||||
});
|
});
|
||||||
for (let st of teamStatus.roleStatus) {
|
for (let st of teamStatus.roleStatus) {
|
||||||
st.rewards = await getRealReward(teamStatus.blueprtId, teamStatus.roleStatus, st, teamStatus.hasTimeExtraReward);
|
st.rewards = await getRealReward(teamStatus.blueprtId, teamStatus.roleStatus, st, teamStatus.hasTimeExtraReward);
|
||||||
|
await addItems(st.roleId, st.roleName, st.sid, st.rewards, ITEM_CHANGE_REASON.COM_BATTLE_END);
|
||||||
|
await ComBattleTeamModel.updateRewardSt(teamCode, st.roleId, true);
|
||||||
|
|
||||||
};
|
};
|
||||||
await checkTaskInComBattleEnd(teamStatus.roleStatus, teamStatus.capId);
|
await checkTaskInComBattleEnd(teamStatus.roleStatus, teamStatus.capId);
|
||||||
}
|
}
|
||||||
@@ -451,14 +463,14 @@ async function teammateValid(roleInfo: Partial<RoleType>, roleId: string, roleId
|
|||||||
* @param {number} ceLimit
|
* @param {number} ceLimit
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export async function getValidTeammateRoleSt(roleId: string, roleIds: string[], ceLimit: number) {
|
export async function getValidTeammateRoleSt(roleId: string, roleIds: string[], ceLimit: number, sid: string) {
|
||||||
let roleInfo = await RoleModel.findByRoleId(roleId, null, true);
|
let roleInfo = await RoleModel.findByRoleId(roleId, null, true);
|
||||||
|
|
||||||
const valid = await teammateValid(roleInfo, roleId, roleIds, ceLimit);
|
const valid = await teammateValid(roleInfo, roleId, roleIds, ceLimit);
|
||||||
if (!valid) return null;
|
if (!valid) return null;
|
||||||
|
|
||||||
let isFrd = await getFrd(roleId);
|
let isFrd = await getFrd(roleId);
|
||||||
const result = new RoleStatus(roleInfo, false, isFrd);
|
const result = new RoleStatus(roleInfo, sid, false, isFrd);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -509,8 +521,8 @@ export async function hasEnoughBlueprt(roleId: string, sid: string, blueprtId: n
|
|||||||
* @param {boolean} isCap
|
* @param {boolean} isCap
|
||||||
* @param {boolean} isFrd
|
* @param {boolean} isFrd
|
||||||
*/
|
*/
|
||||||
export function addRoleToTeam(comTeam: MemComBtlTeam, roleInfo: RoleType, isCap: boolean, isFrd: boolean) {
|
export function addRoleToTeam(comTeam: MemComBtlTeam, roleInfo: RoleType, sid: string, isCap: boolean, isFrd: boolean) {
|
||||||
const roleSt = new RoleStatus(roleInfo, isCap, isFrd);
|
const roleSt = new RoleStatus(roleInfo, sid, isCap, isFrd);
|
||||||
addRoleStToTeam(comTeam, roleSt);
|
addRoleStToTeam(comTeam, roleSt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -539,7 +551,7 @@ export async function addValidSearchingRoles(comTeam: MemComBtlTeam) {
|
|||||||
if (teammates && teammates.length) {
|
if (teammates && teammates.length) {
|
||||||
for (let teammate of teammates) {
|
for (let teammate of teammates) {
|
||||||
const { roleId: teammateRoleId, sid } = teammate;
|
const { roleId: teammateRoleId, sid } = teammate;
|
||||||
const st = await getValidTeammateRoleSt(teammateRoleId, comTeam.roleIds, comTeam.ceLimit);
|
const st = await getValidTeammateRoleSt(teammateRoleId, comTeam.roleIds, comTeam.ceLimit, sid);
|
||||||
if (!st) continue;
|
if (!st) continue;
|
||||||
await rmRoleFromQueue(teammateRoleId, sid); // 匹配成功后删除redis中该用户的匹配记录
|
await rmRoleFromQueue(teammateRoleId, sid); // 匹配成功后删除redis中该用户的匹配记录
|
||||||
addRoleStToTeam(comTeam, st);
|
addRoleStToTeam(comTeam, st);
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ export class RoleStatus {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
roleName: string;
|
roleName: string;
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
|
sid: string;
|
||||||
|
@prop({ required: true })
|
||||||
guildCode: string;
|
guildCode: string;
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
isCap: boolean;
|
isCap: boolean;
|
||||||
@@ -96,7 +98,7 @@ export class RoleStatus {
|
|||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
frdRatio: number = 0;
|
frdRatio: number = 0;
|
||||||
|
|
||||||
constructor(role: RoleUpdate, isCap: boolean, isFrd: boolean, heroes: ComRoleStatusHero[] = [], isRobot = false) {
|
constructor(role: RoleUpdate, sid: string, isCap: boolean, isFrd: boolean, heroes: ComRoleStatusHero[] = [], isRobot = false) {
|
||||||
if(role) {
|
if(role) {
|
||||||
this.roleId = role.roleId||'';
|
this.roleId = role.roleId||'';
|
||||||
this.roleName = role.roleName||'';
|
this.roleName = role.roleName||'';
|
||||||
@@ -107,6 +109,7 @@ export class RoleStatus {
|
|||||||
this.topLineupCe = role.topLineupCe||0;
|
this.topLineupCe = role.topLineupCe||0;
|
||||||
this.lv = role.lv||1;
|
this.lv = role.lv||1;
|
||||||
}
|
}
|
||||||
|
this.sid = sid;
|
||||||
this.isCap = isCap;
|
this.isCap = isCap;
|
||||||
this.totalDmg = 0;
|
this.totalDmg = 0;
|
||||||
this.isFrd = isFrd;
|
this.isFrd = isFrd;
|
||||||
|
|||||||
@@ -45,6 +45,13 @@ export default class FriendPoint extends BaseModel {
|
|||||||
return rec;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async updateComBattleCntToday(roleId: string, roleName: string, cntInc: number, maxPerDay: number, type: number, lean = true) {
|
||||||
|
const curTime = getZeroPointD();
|
||||||
|
// 当 oldCnt + cntInc > maxPerDay 时需计算实际可以获得的点数:cntInc - (newCnt - maxPerDay)
|
||||||
|
const rec: FriendPointType = await FriendPointModel.findOneAndUpdate({roleId, roleName, createdAt: {$gte: curTime}, comBattleCnt: {$lt: maxPerDay}, type}, {$inc: {comBattleCnt: cntInc}}, {upsert: true, new: true}).lean(lean);
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 某个类型当天情谊点获取情况
|
* @description 某个类型当天情谊点获取情况
|
||||||
* @static
|
* @static
|
||||||
|
|||||||
@@ -88,7 +88,6 @@ export function loadWar() {
|
|||||||
o.fixReward = parseFixReward(o.fixReward);
|
o.fixReward = parseFixReward(o.fixReward);
|
||||||
o.conditionReward = parseConditionReward(o.conditionReward);
|
o.conditionReward = parseConditionReward(o.conditionReward);
|
||||||
o.randomReward = parseRandomReward(o.RandomReward||o.randomReward);
|
o.randomReward = parseRandomReward(o.RandomReward||o.randomReward);
|
||||||
o.teammateReward = parseFixReward(o.teammateReward);
|
|
||||||
o.fobiddenCharactor = parseForbiddenChara(o.fobiddenCharactor);
|
o.fobiddenCharactor = parseForbiddenChara(o.fobiddenCharactor);
|
||||||
o.mapseid = parseNumberList(o.mapseid);
|
o.mapseid = parseNumberList(o.mapseid);
|
||||||
if(o.script_id && isString(o.script_id)) {
|
if(o.script_id && isString(o.script_id)) {
|
||||||
@@ -113,8 +112,9 @@ export function loadWar() {
|
|||||||
o.winReward = parseTrainReward(o.winReward);
|
o.winReward = parseTrainReward(o.winReward);
|
||||||
o.failReward = parseTrainReward(o.failReward);
|
o.failReward = parseTrainReward(o.failReward);
|
||||||
} else if (o.warType == WAR_TYPE.COM_BATTLE) {
|
} else if (o.warType == WAR_TYPE.COM_BATTLE) {
|
||||||
|
console.log('####', o)
|
||||||
let reward = {
|
let reward = {
|
||||||
captainReward: parseGoodStr(o.fixReward),
|
captainReward: o.fixReward,
|
||||||
teammateReward: parseGoodStr(o.teammateReward),
|
teammateReward: parseGoodStr(o.teammateReward),
|
||||||
captainTimeReward: parseGoodStr(o.time_captain_normalReward),
|
captainTimeReward: parseGoodStr(o.time_captain_normalReward),
|
||||||
teammateTimeReward: parseGoodStr(o.time_normalReward),
|
teammateTimeReward: parseGoodStr(o.time_normalReward),
|
||||||
|
|||||||
Reference in New Issue
Block a user