|
|
|
@@ -1,12 +1,21 @@
|
|
|
|
|
import { Application, BackendSession, pinus } from 'pinus';
|
|
|
|
|
import { resResult } from '../../../pubUtils/util';
|
|
|
|
|
import { STATUS } from '../../../consts/statusCode';
|
|
|
|
|
import { getRoleOnlineInfo } from '../../../services/redisService';
|
|
|
|
|
import { getRoleOnlineInfo, updateUserInfo } from '../../../services/redisService';
|
|
|
|
|
import { addItems, createHeroes } from '../../../services/rewardService';
|
|
|
|
|
import { RewardInter } from '../../../pubUtils/interface';
|
|
|
|
|
import { getExpByLv } from '../../../pubUtils/data';
|
|
|
|
|
import { RoleModel } from '../../../db/Role';
|
|
|
|
|
import { BLOCK_TYPE, ITEM_CHANGE_REASON } from '../../../consts';
|
|
|
|
|
import { RoleModel, RoleType } from '../../../db/Role';
|
|
|
|
|
import { BLOCK_TYPE, GUILD_DISMISS_WAY, GUILD_STRUCTURE, ITEM_CHANGE_REASON, REDIS_KEY, TA_EVENT } from '../../../consts';
|
|
|
|
|
import { GuildFormParam } from '../../../domain/backEndField/params';
|
|
|
|
|
import { GuildModel, GuildUpdateParam } from '../../../db/Guild';
|
|
|
|
|
import { getGuildChannelSid } from '../../../services/chatService';
|
|
|
|
|
import { pushGuildNoticeUpdateMsg } from '../../../services/sysChatService'
|
|
|
|
|
import { Rank } from '../../../services/rankService';
|
|
|
|
|
import { UserGuildModel } from '../../../db/UserGuild';
|
|
|
|
|
import { UserGuildApplyModel } from '../../../db/UserGuildApply';
|
|
|
|
|
import { reportTAEvent } from '../../../services/sdkService';
|
|
|
|
|
|
|
|
|
|
let timer: NodeJS.Timer;
|
|
|
|
|
export default function (app: Application) {
|
|
|
|
|
return new GmRoleHandler(app);
|
|
|
|
@@ -57,4 +66,94 @@ export class GmRoleHandler {
|
|
|
|
|
}
|
|
|
|
|
return resResult(STATUS.SUCCESS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async updateGuild(msg: GuildFormParam, session: BackendSession ) {
|
|
|
|
|
const uid = session.get('uid');
|
|
|
|
|
let params = new GuildFormParam(msg);
|
|
|
|
|
if(!params.checkParams()) return resResult(STATUS.WRONG_PARMS);
|
|
|
|
|
|
|
|
|
|
let guild = await GuildModel.findByCode(params.code);
|
|
|
|
|
let structure = guild.structure||[];
|
|
|
|
|
|
|
|
|
|
let updateParams: GuildUpdateParam = { code: params.code };
|
|
|
|
|
if(params.name && guild.name != params.name) updateParams.name = params.name;
|
|
|
|
|
if(params.fund != undefined && guild.fund != params.fund) updateParams.fund = params.fund;
|
|
|
|
|
if(params.notice && guild.notice != params.notice) updateParams.notice = params.notice;
|
|
|
|
|
if(params.lv && guild.lv != params.lv) updateParams.lv = params.lv;
|
|
|
|
|
for(let id = GUILD_STRUCTURE.START; id < GUILD_STRUCTURE.END; id ++) {
|
|
|
|
|
let curStructure = structure.find(cur => cur.id == id);
|
|
|
|
|
let lv = params.lv;
|
|
|
|
|
switch(id) {
|
|
|
|
|
case GUILD_STRUCTURE.ARMY_CENTER:
|
|
|
|
|
lv = params.lv; break;
|
|
|
|
|
case GUILD_STRUCTURE.EQUIP_PRODUCE:
|
|
|
|
|
lv = params.equipProduce; break;
|
|
|
|
|
case GUILD_STRUCTURE.BOSS:
|
|
|
|
|
lv = params.boss; break;
|
|
|
|
|
case GUILD_STRUCTURE.TRAIN:
|
|
|
|
|
lv = params.train; break;
|
|
|
|
|
case GUILD_STRUCTURE.DONATE:
|
|
|
|
|
lv = params.donate; break;
|
|
|
|
|
case GUILD_STRUCTURE.WISH_POOL:
|
|
|
|
|
lv = params.wishPool; break;
|
|
|
|
|
case GUILD_STRUCTURE.STORE:
|
|
|
|
|
lv = params.store; break;
|
|
|
|
|
}
|
|
|
|
|
if(curStructure) {
|
|
|
|
|
curStructure.lv = lv;
|
|
|
|
|
} else {
|
|
|
|
|
structure.push({ id, lv });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
updateParams.structure = structure;
|
|
|
|
|
let chatSid = await getGuildChannelSid(params.code);
|
|
|
|
|
console.log('*****', params.code, updateParams)
|
|
|
|
|
this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, params.code, updateParams);
|
|
|
|
|
// 设置玩家名
|
|
|
|
|
if(updateParams.name != undefined || updateParams.lv != undefined) {
|
|
|
|
|
let arr = [];
|
|
|
|
|
if(updateParams.name != undefined) arr.push({ field: 'name', value: updateParams.name });
|
|
|
|
|
if(updateParams.lv != undefined) arr.push({ field: 'lv', value: updateParams.lv });
|
|
|
|
|
await updateUserInfo(REDIS_KEY.GUILD_INFO, params.code, arr);
|
|
|
|
|
}
|
|
|
|
|
if (updateParams.lv != undefined) {
|
|
|
|
|
let r = new Rank(REDIS_KEY.GUILD_LV_RANK, { serverId: guild.serverId });
|
|
|
|
|
await r.setRankWithGuildInfo2(guild.code, updateParams.lv, guild.activeWeekly, guild.lvUpdateTime, guild);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
guild = await GuildModel.updateInfo(params.code, updateParams);
|
|
|
|
|
return resResult(STATUS.SUCCESS);
|
|
|
|
|
}
|
|
|
|
|
async dismissGuild(msg: { code: string }, session: BackendSession) {
|
|
|
|
|
|
|
|
|
|
const { code } = msg;
|
|
|
|
|
|
|
|
|
|
let guild = await GuildModel.findByCode(code, null, '+serverId');
|
|
|
|
|
if(!guild) return resResult(STATUS.GUILD_NOT_FOUND);
|
|
|
|
|
|
|
|
|
|
let serverId = guild.serverId;
|
|
|
|
|
guild = await GuildModel.dismiss(code, serverId);
|
|
|
|
|
if (!guild) return resResult(STATUS.GUILD_DELETE_ERROR);
|
|
|
|
|
|
|
|
|
|
await UserGuildModel.dismiss(code);
|
|
|
|
|
const { members } = guild;
|
|
|
|
|
await RoleModel.dissmissGuild(members);
|
|
|
|
|
await UserGuildApplyModel.deleteApplyByGuild(code);
|
|
|
|
|
|
|
|
|
|
await this.app.rpc.connector.connectorRemote.setOtherUserGuildSession.broadcast(members.map(roleId => { return { roleId, userGuild: null } })); // 更新session
|
|
|
|
|
|
|
|
|
|
// 删除channel
|
|
|
|
|
|
|
|
|
|
let chatSid = await getGuildChannelSid(code);
|
|
|
|
|
this.app.rpc.chat.guildRemote.dismiss.toServer(chatSid, code);
|
|
|
|
|
|
|
|
|
|
let r = new Rank(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId });
|
|
|
|
|
await r.removeFromRank({ guildCode: code });
|
|
|
|
|
let r2 = new Rank(REDIS_KEY.GUILD_LV_RANK, { serverId });
|
|
|
|
|
await r2.removeFromRank({ guildCode: code });
|
|
|
|
|
let leader = <RoleType>guild.leader;
|
|
|
|
|
reportTAEvent(leader.roleId, TA_EVENT.GUILD_DISMISS, { name: guild.name, way: GUILD_DISMISS_WAY.BACKEND });
|
|
|
|
|
|
|
|
|
|
return resResult(STATUS.SUCCESS, { code, status: guild.status });
|
|
|
|
|
}
|
|
|
|
|
}
|