寻宝:信息边窗
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { MemComBtlTeam } from './../../../domain/battleField/ComBattleTeamField';
|
||||
import { ComBattleInvitation, MemComBtlTeam } from './../../../domain/battleField/ComBattleTeamField';
|
||||
import { difference } from 'underscore';
|
||||
/*
|
||||
* @Author: 梁桐川
|
||||
@@ -14,8 +14,8 @@ import { resResult, getRandSingleEelm, cal } from '../../../pubUtils/util';
|
||||
import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatusHero } from '../../../db/ComBattleTeam';
|
||||
import { ItemModel, ItemType } from '../../../db/Item';
|
||||
import { addItems, handleCost } from '../../../services/role/rewardService';
|
||||
import { checkRoleInQueue, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
||||
import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam, checkTeamStatusAndSend } from '../../../services/comBattleService';
|
||||
import { checkRoleInQueue, getServerName, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
||||
import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam, checkTeamStatusAndSend, getComBtlLvByPlayerLv } from '../../../services/comBattleService';
|
||||
import { setAp } from '../../../services/actionPointService';
|
||||
import { roleLevelup } from '../../../services/normalBattleService';
|
||||
import { getSimpleRoleInfo } from '../../../services/roleService';
|
||||
@@ -689,7 +689,8 @@ export class ComBattleHandler {
|
||||
const { teamCode } = msg;
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
if(!teamStatus) return resResult(STATUS.WRONG_PARMS);
|
||||
await pushTeamInviteMsg(roleId, roleName, serverId, guildCode, teamCode, teamStatus.blueprtId);
|
||||
await pushTeamInviteMsg(roleId, roleName, serverId, teamCode, teamStatus.blueprtId, teamStatus.lv, teamStatus.ceLimit);
|
||||
await ComBattleTeamModel.invite(teamCode, 'world');
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
@@ -707,6 +708,15 @@ export class ComBattleHandler {
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
if(!teamStatus) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
let role = await RoleModel.findByRoleId(targetRoleId, 'lv');
|
||||
if(comBtlLvInvalid(role.lv, [teamStatus.lv])) {
|
||||
return resResult(STATUS.COM_BATTLE_INVITE_LV_NOT_ENOUGH);
|
||||
}
|
||||
if (role.topLineupCe < teamStatus.ceLimit) {
|
||||
return resResult(STATUS.COM_BATTLE_CE_LIMIT);
|
||||
}
|
||||
|
||||
await ComBattleTeamModel.invite(teamCode, targetRoleId);
|
||||
let relation = await getFriendRelationType(roleId, targetRoleId);
|
||||
const msgData = await pushFriendTeamInviteMsg(roleId, roleName, teamCode, teamStatus.blueprtId, targetRoleId, relation);
|
||||
if (!msgData) return resResult(STATUS.WRONG_PARMS);
|
||||
@@ -746,4 +756,28 @@ export class ComBattleHandler {
|
||||
|
||||
return resResult(STATUS.SUCCESS, { list: result });
|
||||
}
|
||||
|
||||
async getTeamInvitation(msg: { }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let role = await RoleModel.findByRoleId(roleId, 'lv topLineupCe');
|
||||
const assistCnt = await getAllAssistCnt(roleId);
|
||||
|
||||
let { minLv, maxLv } = getComBtlLvByPlayerLv(role.lv);
|
||||
let refreshTime = nowSeconds() - 60;
|
||||
const invitations = await ComBattleTeamModel.findInvitations(roleId, minLv, maxLv, role.topLineupCe, refreshTime, 10);
|
||||
let roleIds = invitations.map(cur => cur.capId);
|
||||
let roles = await RoleModel.findByRoleIds(roleIds);
|
||||
const teams: ComBattleInvitation[] = [];
|
||||
for(let invitation of invitations) {
|
||||
let leader = roles.find(role => role.roleId == invitation.capId);
|
||||
if(leader) {
|
||||
let leaderParam = new FriendParams(leader);
|
||||
let serverName = await getServerName(leader.serverId);
|
||||
leaderParam.setServerName(leader.serverId, serverName);
|
||||
teams.push(new ComBattleInvitation(invitation, leaderParam));
|
||||
}
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, { teams, assistCnt });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ export class EntryHandler {
|
||||
}
|
||||
|
||||
let serverName = this.app.getServerId();
|
||||
await roleLogin(role.roleId, user.userCode, serverName, user.pkgName, role.createTime, role.serverId); // 保存在线用户
|
||||
await roleLogin(role.roleId, user.userCode, serverName, role.createTime, role.serverId, role.lv, role.topLineupCe); // 保存在线用户
|
||||
await this.addSession(user, role, session);
|
||||
|
||||
await reportCreateRoleEventToTa(role, this.getIp(session));
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Application, BackendSession, pinus } from 'pinus';
|
||||
import { getRandSingleEelm, resResult } from '../../../pubUtils/util';
|
||||
import { STATUS } from '../../../consts/statusCode';
|
||||
import { GMMailModel, GMMailType } from '../../../db/GMMail';
|
||||
import { delGuildActivityRank, getRoleOnlineInfo } from '../../../services/redisService';
|
||||
import { delGuildActivityRank } from '../../../services/redisService';
|
||||
import { ACTIVITY_TYPE, GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, PUSH_ROUTE, SURVEY_SELECT } from '../../../consts';
|
||||
import { checkActivityEditable, checkActivityGroupType, checkActivityGroupTypeWithId } from '../../../services/activity/activityService';
|
||||
import { ActivityModel } from '../../../db/Activity';
|
||||
|
||||
@@ -13,7 +13,9 @@ import { getRoleOnlineInfo } from './redisService';
|
||||
import { ChatInfoModel } from '../db/ChatInfo';
|
||||
import { AccuseRecModel, AccueseParam } from '../db/AccuseRec';
|
||||
import { getSimpleRoleInfo, getSimpleRoleInfos } from './roleService';
|
||||
import { sendMessageToCityWithSuc, sendMessageToGuildWithSuc, sendMessageToServerWithSuc, sendMessageToTeam, sendMessageToUserWithSuc } from './pushService';
|
||||
import { sendMessageToAllWithSuc, sendMessageToCityWithSuc, sendMessageToGuildWithSuc, sendMessageToServerWithSuc, sendMessageToTeam, sendMessageToUserWithSuc } from './pushService';
|
||||
import { comBtlLvInvalid } from './comBattleService';
|
||||
import { gameData } from '../pubUtils/data';
|
||||
|
||||
export * from './chatChannelService';
|
||||
export * from './sysChatService';
|
||||
@@ -163,6 +165,12 @@ export async function pushGroupMsgToRoom(msg: GroupMessageType) {
|
||||
}
|
||||
}
|
||||
|
||||
export async function pushGroupMsgToAll(msg: GroupMessageType, filterCb?: ({ lv, topLineupCe }) => boolean) {
|
||||
if (!msg) return;
|
||||
const roleInfo = await getSimpleRoleInfo(msg.roleId);
|
||||
await sendMessageToAllWithSuc(PUSH_ROUTE.GROUP_MSG, { ...msg, roleInfo }, filterCb);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取私聊历史消息
|
||||
* @export
|
||||
@@ -369,16 +377,12 @@ export async function delPrivateMsg(roleId: string, targetRoleId: string) {
|
||||
* @description 发送组队一键邀请消息
|
||||
* @param {string} teamCode 队伍唯一标识
|
||||
*/
|
||||
export async function pushTeamInviteMsg(roleId: string, roleName: string, serverId: number, guildCode: string, teamCode: string, blueprtId: number) {
|
||||
export async function pushTeamInviteMsg(roleId: string, roleName: string, serverId: number, teamCode: string, blueprtId: number, blueprtLv: number, ceLimit: number) {
|
||||
let msgDataWorld = await createGroupMsg(roleId, roleName, CHANNEL_PREFIX.WORLD, `${serverId}`, MSG_TYPE.RICH_TEXT, MSG_SOURCE.TEAM_INVITE, JSON.stringify({ roleName, teamCode, blueprtId }), null, null);
|
||||
await pushGroupMsgToRoom(msgDataWorld);
|
||||
|
||||
let msgDataGuild: GroupMessageType;
|
||||
if(guildCode) {
|
||||
msgDataGuild = await createGroupMsg(roleId, roleName, CHANNEL_PREFIX.GUILD, `${guildCode}`, MSG_TYPE.RICH_TEXT, MSG_SOURCE.TEAM_INVITE, JSON.stringify({ roleName, teamCode, blueprtId }), null, null);
|
||||
await pushGroupMsgToRoom(msgDataGuild);
|
||||
}
|
||||
return { msgDataWorld, msgDataGuild };
|
||||
await pushGroupMsgToAll(msgDataWorld, (data: {lv: number, topLineupCe: number}) => {
|
||||
return data.topLineupCe >= ceLimit && !comBtlLvInvalid(data.lv, [blueprtLv]);
|
||||
});
|
||||
return { msgDataWorld };
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -335,6 +335,16 @@ export function comBtlLvInvalid(playerLv: number, blueprtLvs: number[]) {
|
||||
return false
|
||||
}
|
||||
|
||||
export function getComBtlLvByPlayerLv(playerLv: number) {
|
||||
let lvs: number[] = [];
|
||||
for(let [lv, {min, max}] of gameData.comBtlLvRange) {
|
||||
if(playerLv >= min && playerLv <= max) lvs.push(lv);
|
||||
}
|
||||
let minLv = Math.min(...lvs);
|
||||
let maxLv = Math.max(...lvs);
|
||||
return { minLv, maxLv }
|
||||
}
|
||||
|
||||
export async function dismissTeam(teamStatus: MemComBtlTeam, teamMap: Map<string, MemComBtlTeam>, roleId: string, teamDisTimer: Map<string, NodeJS.Timer>) {
|
||||
const { teamCode } = teamStatus;
|
||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||
|
||||
@@ -15,7 +15,7 @@ import { getFriendList, getApplyList } from './friendService';
|
||||
import { getDailyBattleList } from './dailyBattleService';
|
||||
import { getExpeditionStatus } from './expeditionService';
|
||||
import { getTowerStatus, getHungupRewards, getTasks } from './battleService';
|
||||
import { getAllAssistCnt } from './comBattleService';
|
||||
import { getAllAssistCnt, getComBtlLvByPlayerLv } from './comBattleService';
|
||||
import { getDungeonData } from './dungeonService';
|
||||
import { PvpSeasonResultModel } from '../db/PvpSeasonResult';
|
||||
import { nowSeconds, getZeroPoint } from '../pubUtils/timeUtil';
|
||||
@@ -44,6 +44,7 @@ import { HeroParam } from '../domain/roleField/hero';
|
||||
import { pick } from 'underscore';
|
||||
import { sendMessageToAllWithSuc, sendMessageToServerWithSuc, sendMessageToUser, sendMessageToUserWithSuc } from './pushService';
|
||||
import { getSurvey } from './gmService';
|
||||
import { ComBattleTeamModel } from '../db/ComBattleTeam';
|
||||
|
||||
/**
|
||||
* init: 初始的时候是否推送 true-推 false-不推
|
||||
@@ -146,9 +147,7 @@ export async function getModuleData(type: string, data: { role: RoleType, sessio
|
||||
case 'tower': // 镇念塔
|
||||
return await getTowerEntryData(role);
|
||||
case 'comBattle': // 寻宝
|
||||
const assistCnt = await getAllAssistCnt(roleId);
|
||||
const blueprts = await Item.findByRoleAndType(roleId, CONSUME_TYPE.BLUEPRT);
|
||||
return { assistCnt, blueprts }
|
||||
return await getComBattleEntryData(role);
|
||||
case 'dungeon': // 秘境
|
||||
return await getDungeonData(role);
|
||||
case 'pvp': // pvp
|
||||
@@ -289,6 +288,16 @@ async function getGuildEntryData(role: RoleType, sid: string, session: FrontendO
|
||||
return { hasGuild: false }
|
||||
}
|
||||
|
||||
async function getComBattleEntryData(role: RoleType) {
|
||||
let { roleId, lv, topLineupCe } = role;
|
||||
const assistCnt = await getAllAssistCnt(roleId);
|
||||
const blueprts = await Item.findByRoleAndType(roleId, CONSUME_TYPE.BLUEPRT);
|
||||
let { minLv, maxLv } = getComBtlLvByPlayerLv(lv);
|
||||
let refreshTime = nowSeconds() - 60;
|
||||
const invitations = await ComBattleTeamModel.findInvitations(roleId, minLv, maxLv, topLineupCe, refreshTime, 1);
|
||||
return { assistCnt, blueprts, hasInvitation: invitations.length > 0, invitationTime: invitations.length > 0?invitations[0].inviteTime: 0 }
|
||||
}
|
||||
|
||||
export async function pushRefreshTime() {
|
||||
let todayZeroPoint = getZeroPoint();
|
||||
await sendMessageToAllWithSuc(PUSH_ROUTE.REFRESH_TIME, { todayZeroPoint });
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import { HeroModel, HeroType } from '../db/Hero';
|
||||
import Role, { RoleModel, RoleType } from '../db/Role'
|
||||
import { getLvByExp, getExpByLv, gameData, getDicApByLv } from '../pubUtils/data';
|
||||
import { updateUserInfo } from './redisService';
|
||||
import { updateRoleOnlineInfo, updateUserInfo } from './redisService';
|
||||
// import { switchOnFunc } from './funcSwitchService';
|
||||
import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE, STATUS, KING_EXP_RATIO_TYPE, ITEM_CHANGE_REASON, POP_UP_SHOP_CONDITION_TYPE, HERO_SYSTEM_TYPE, PUSH_ROUTE } from '../consts';
|
||||
import { BackendSession, pinus } from 'pinus';
|
||||
@@ -49,6 +49,8 @@ export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kin
|
||||
await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.LV_TO, { oldLv: lv, newLv })
|
||||
// await calculateCeWithRole(HERO_SYSTEM_TYPE.ROLE_LV, roleId, serverId, sid, { lv: newLv });
|
||||
|
||||
await updateRoleOnlineInfo(roleId, { lv: newLv });
|
||||
|
||||
}
|
||||
let actordata: { lv: number, exp: number, getExp: number, mostExp: number }[] = [];
|
||||
for (let i = lv; i <= newLv; i++) {
|
||||
|
||||
@@ -7,7 +7,7 @@ import { EPlace, HeroModel, HeroType, HeroUpdate } from '../db/Hero';
|
||||
import { RoleUpdate, RoleType, RoleModel } from '../db/Role';
|
||||
import { Rank } from './rankService';
|
||||
import { HERO_SYSTEM_TYPE, PUSH_ROUTE, REDIS_KEY } from '../consts';
|
||||
import { updateUserInfo } from './redisService';
|
||||
import { updateRoleOnlineInfo, updateUserInfo } from './redisService';
|
||||
import { GuildModel, GuildType } from '../db/Guild';
|
||||
import { CalCe } from './role/calCe';
|
||||
import { RoleCeModel, RoleCeUpdate } from '../db/RoleCe';
|
||||
@@ -359,11 +359,12 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
|
||||
}
|
||||
}
|
||||
|
||||
let { topLineup, topLineupCe } = calCe.getTopLineup();
|
||||
let { topLineup, topLineupCe, hasTopCeChange } = calCe.getTopLineup();
|
||||
let roleCeUpdate: RoleCeUpdate = calCe.getRoleCeTable();
|
||||
if(topLineupCe > roleCe?.historyLineupCe??0) {
|
||||
roleCeUpdate = { ...roleCeUpdate, historyLineupCe: topLineupCe };
|
||||
}
|
||||
|
||||
roleCe = await RoleCeModel.updateRoleCe(roleId, roleCeUpdate);
|
||||
let role = await RoleModel.incRoleInfo(roleId, { ...roleIncUpdate, ce: roleInc }, { ...roleUpdate, topLineup, topLineupCe });
|
||||
let guild = await GuildModel.updateCe(roleId, roleInc); // 公会更新战力
|
||||
@@ -371,7 +372,7 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
|
||||
saveCeChangeLog(role, roleInc, role.ce, type, changeHids);
|
||||
updateRank(roleId, serverId, topLineupCe, role, pushHeros, guild);
|
||||
sendMessageToUserWithSuc(roleId, PUSH_ROUTE.PLAYER_CE_UPDATE, { ce: role.ce, heros: pushHeros, topLineupCe }, sid);
|
||||
|
||||
if(hasTopCeChange) await updateRoleOnlineInfo(roleId, { topLineupCe });
|
||||
if(guild) {
|
||||
await updateUserInfo(REDIS_KEY.GUILD_INFO, guild.code, [{ field: 'guildCe', value: guild.guildCe }]);
|
||||
}
|
||||
|
||||
@@ -5,12 +5,15 @@ import { getCityChannelSid, getGuildChannelSid, getWorldChannelSid, groupRoomId
|
||||
import { getAllOnlineRoles, getRoleOnlineInfo } from "./redisService";
|
||||
import { errlogger, infologger } from '../util/logger';
|
||||
|
||||
export async function sendMessageToAllWithSuc(route: string, data: any) {
|
||||
await sendMessageToAll(route, resResult(STATUS.SUCCESS, data));
|
||||
export async function sendMessageToAllWithSuc(route: string, data: any, filterCb?: ({ lv, topLineupCe }) => boolean) {
|
||||
await sendMessageToAll(route, resResult(STATUS.SUCCESS, data), filterCb);
|
||||
}
|
||||
|
||||
export async function sendMessageToAll(route: string, data: any) {
|
||||
export async function sendMessageToAll(route: string, data: any, filterCb?: ({ lv, topLineupCe }) => boolean) {
|
||||
let allOnlineUsers = await getAllOnlineRoles();
|
||||
if(filterCb) {
|
||||
allOnlineUsers = allOnlineUsers.filter(filterCb);
|
||||
}
|
||||
let n = Math.ceil(allOnlineUsers.length / PUSH_BATCH); // 一共多少批
|
||||
let sendToUser = (i: number) => {
|
||||
let users = allOnlineUsers.slice(i * PUSH_BATCH, (i + 1) * PUSH_BATCH - 1);
|
||||
|
||||
@@ -310,10 +310,17 @@ export async function clearChannelServers() {
|
||||
* @param userCode user表唯一字符串标识
|
||||
* @param sid connector服的那个sid
|
||||
*/
|
||||
export async function roleLogin(roleId: string, userCode: string, sid: string, pkgName: string, createTime: number, serverId: number) {
|
||||
export async function roleLogin(roleId: string, userCode: string, sid: string, createTime: number, serverId: number, lv: number, topLineupCe: number) {
|
||||
await redisClient().hincrbyAsync(REDIS_KEY.ONLINE_CNT, roleId, 1);
|
||||
await redisClient().hsetAsync(REDIS_KEY.USER_CODE, userCode, roleId);
|
||||
return await redisClient().hsetAsync(REDIS_KEY.ONLINE_USERS, roleId, `${userCode}|${sid}|${pkgName}|${createTime}|${serverId}`);
|
||||
return await redisClient().hsetAsync(REDIS_KEY.ONLINE_USERS, roleId, `${userCode}|${sid}|${createTime}|${serverId}|${lv}|${topLineupCe}`);
|
||||
}
|
||||
|
||||
export async function updateRoleOnlineInfo(roleId: string, updateData: {lv?: number, topLineupCe?: number}) {
|
||||
let info = await getRoleOnlineInfo(roleId);
|
||||
if(info.isOnline) {
|
||||
return await redisClient().hsetAsync(REDIS_KEY.ONLINE_USERS, roleId, `${info.userCode}|${info.sid}|${info.createtime}|${info.serverId}|${updateData?.lv??info.lv}|${updateData?.topLineupCe??info.topLineupCe}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -354,11 +361,13 @@ export async function getRoleOnlineInfo(roleId: string) {
|
||||
if(str) {
|
||||
try {
|
||||
let result = str.split('|');
|
||||
let [userCode, sid, pkgName, createTime, serverId] = result;
|
||||
let [userCode, sid, createTime, serverId, lv, topLineupCe] = result;
|
||||
return {
|
||||
isOnline: true, userCode, sid, pkgName,
|
||||
isOnline: true, userCode, sid,
|
||||
createtime: parseInt(createTime),
|
||||
serverId: parseInt(serverId)
|
||||
serverId: parseInt(serverId),
|
||||
lv: parseInt(lv),
|
||||
topLineupCe: parseInt(topLineupCe)
|
||||
}
|
||||
} catch(e) {
|
||||
return { isOnline: false }
|
||||
@@ -385,13 +394,13 @@ export async function getRoleCreateTime(roleId: string, role?: RoleType) {
|
||||
*/
|
||||
export async function getAllOnlineRoles() {
|
||||
let allRoles = await redisClient().hgetallAsync(REDIS_KEY.ONLINE_USERS);
|
||||
let result = new Array<{roleId: string, userCode: string, sid: string, pkgName: string, serverId: number}>();
|
||||
let result = new Array<{roleId: string, userCode: string, sid: string, serverId: number, lv: number, topLineupCe: number}>();
|
||||
for(let roleId in allRoles) {
|
||||
try{
|
||||
let param = allRoles[roleId].split('|');
|
||||
let [userCode, sid, pkgName, _createTime, serverId] = param;
|
||||
let [userCode, sid, _createTime, serverId, lv, topLineupCe] = param;
|
||||
|
||||
result.push({ roleId, userCode, sid, pkgName, serverId: parseInt(serverId) });
|
||||
result.push({ roleId, userCode, sid, serverId: parseInt(serverId), lv: parseInt(lv), topLineupCe: parseInt(topLineupCe) });
|
||||
|
||||
} catch(e) {
|
||||
continue;
|
||||
|
||||
@@ -15,6 +15,7 @@ export class CalCe {
|
||||
resultCes: Map<number, number> = new Map(); // hid => ce
|
||||
data: CalCeData;
|
||||
attrsByHid: Map<number, { id: number, val: number, str: string }[]> = new Map();
|
||||
originTopHeroCe: number;
|
||||
|
||||
constructor(roleId: string) {
|
||||
this.roleId = roleId;
|
||||
@@ -23,6 +24,7 @@ export class CalCe {
|
||||
public setRoleCe(roleCe: RoleCeType) {
|
||||
this.data = new CalCeData(roleCe)
|
||||
this.originCes = this.calHeroCe();
|
||||
this.originTopHeroCe = this.getTopLineup().topLineupCe;
|
||||
}
|
||||
|
||||
public clearRoleCe() {
|
||||
@@ -126,7 +128,7 @@ export class CalCe {
|
||||
topLineupCe += ce;
|
||||
}
|
||||
}
|
||||
return { topLineup, topLineupCe };
|
||||
return { topLineup, topLineupCe, hasTopCeChange: topLineupCe == this.originTopHeroCe };
|
||||
}
|
||||
|
||||
// 玩家等级
|
||||
|
||||
@@ -147,6 +147,8 @@ export const STATUS = {
|
||||
COM_BATTLE_CREATE_CE_LIMIT: { code: 20635, simStr: '你的战力不足,不可设置该级别限制' },
|
||||
COM_BATTLE_TEAM_NOT_DEFAULT: { code: 20636, simStr: '队伍已过期' },
|
||||
COM_BATTLE_IS_RUNNING: { code: 20637, simStr: '您有队伍正在进行中' },
|
||||
COM_BATTLE_INVITE_LV_NOT_ENOUGH: { code: 20638, simStr: '对方队伍等级不足,无法邀请' },
|
||||
COM_BATTLE_INVITE_CE_LIMIT: { code: 20639, simStr: '对方队伍战力不足,无法邀请' },
|
||||
// 共斗藏宝图合成
|
||||
COM_BLUEPRT_QUALITY_CANNOT_COMPOSE: { code: 20650, simStr: '该品质藏宝图不可合成' },
|
||||
COM_BLUEPRT_COUNT_ERROR: { code: 20651, simStr: '材料数量不足' },
|
||||
|
||||
@@ -2,6 +2,7 @@ import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { EXTERIOR } from '../pubUtils/dicParam';
|
||||
import { ItemReward } from '../domain/dbGeneral';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
|
||||
export class ComRoleStatusHero {
|
||||
@prop({ required: true })
|
||||
@@ -187,10 +188,22 @@ export default class ComBattleTeam extends BaseModel {
|
||||
// 黑名单
|
||||
blacklist: string[] = [];
|
||||
|
||||
// 黑名单
|
||||
// 结束时间
|
||||
@prop({ required: true, default: 0 })
|
||||
endTime: number = 0;
|
||||
|
||||
// 是否发出邀请了
|
||||
@prop({ required: true, default: false })
|
||||
isInviting: boolean = false;
|
||||
|
||||
// 邀请时间
|
||||
@prop({ required: true, default: 0 })
|
||||
inviteTime: number = 0;
|
||||
|
||||
// 邀请对象
|
||||
@prop({ required: true, default: [], type: String, _id: false })
|
||||
inviteTarget: string[] = [];
|
||||
|
||||
public static async createTeam(teamData: ComBattleTeamParam, lean = true) {
|
||||
const team: ComBattleTeamType = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleIds.length}}, {upsert: true, new: true}).lean(lean);
|
||||
return team;
|
||||
@@ -341,6 +354,16 @@ export default class ComBattleTeam extends BaseModel {
|
||||
const team: ComBattleTeamType = await ComBattleTeamModel.findOne({teamCode}).lean(lean);
|
||||
return team;
|
||||
}
|
||||
|
||||
public static async invite(teamCode: string, target: string) {
|
||||
const team: ComBattleTeamType = await ComBattleTeamModel.findOneAndUpdate({teamCode}, { $set: { isInviting: true, inviteTime: nowSeconds()}, $push: { inviteTarget: target }}, {new: true}).lean();
|
||||
return team;
|
||||
}
|
||||
|
||||
public static async findInvitations(roleId: string, minLv: number, maxLv: number, ce: number, refreshTime: number, limit: number) {
|
||||
const invitations: ComBattleTeamType[] = await ComBattleTeamModel.find({ status: 0, isInviting: true, lv: { $gte: minLv, $lte: maxLv }, ceLimit: { $lte: ce }, inviteTime: { $gte: refreshTime } }).sort({ inviteTime: -1 }).limit(limit).lean();
|
||||
return invitations;
|
||||
}
|
||||
}
|
||||
|
||||
export const ComBattleTeamModel = getModelForClass(ComBattleTeam);
|
||||
|
||||
@@ -2,6 +2,7 @@ import { COM_TEAM_STATUS } from '../../consts';
|
||||
import { getBossHpByBlueprtId, getDicBlueprtById } from '../../pubUtils/data';
|
||||
import ComBattleTeam from './../../db/ComBattleTeam';
|
||||
import { cloneDeep } from 'lodash'
|
||||
import { FriendParams } from '../roleField/friend';
|
||||
|
||||
/**
|
||||
* 拷贝敌军数组并添加当前血量字段
|
||||
@@ -48,3 +49,18 @@ export class MemComBtlTeam extends ComBattleTeam {
|
||||
return this.roleStatus.find(cur => cur.roleId == roleId);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export class ComBattleInvitation {
|
||||
blueprtId: number;
|
||||
leader: FriendParams;
|
||||
roleCnt: number;
|
||||
status: number;
|
||||
|
||||
constructor(comBattle: ComBattleTeam, leader: FriendParams) {
|
||||
this.blueprtId = comBattle.blueprtId;
|
||||
this.leader = leader;
|
||||
this.roleCnt = comBattle.roleCnt;
|
||||
this.status = comBattle.status;
|
||||
}
|
||||
}
|
||||
@@ -62,4 +62,4 @@ export interface mailData {
|
||||
export interface guildInter {
|
||||
myUserGuild: UserGuildType;
|
||||
hisUserGuild: UserGuildType;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user