军团:动态
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { Application, BackendSession, pinus } from 'pinus';
|
||||
import { resResult, getRandEelm, reduceCe } from '../../../pubUtils/util';
|
||||
import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE } from '../../../consts';
|
||||
import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME } from '../../../consts';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { checkAuth, joinGuild, costFund } from '../../../services/guildService';
|
||||
import { GuildModel, GuildType } from '../../../db/Guild';
|
||||
@@ -12,6 +12,7 @@ import { nowSeconds, getBeforeDaySeconds } from '../../../pubUtils/timeUtil';
|
||||
import { GuildListInfo } from '../../../pubUtils/interface';
|
||||
import { UserGuildApplyModel } from '../../../db/UserGuildApply';
|
||||
import { hasStructureConsume, getStructureConsume, gameData } from '../../../pubUtils/data';
|
||||
import { GuildRecModel } from '../../../db/GuildRec';
|
||||
|
||||
export default function (app: Application) {
|
||||
return new GuildHandler(app);
|
||||
@@ -25,6 +26,7 @@ export class GuildHandler {
|
||||
async createGuild(msg: { name: string, icon: number, notice: string }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const sid = session.get('sid');
|
||||
const serverId = session.get('serverId');
|
||||
const { name, icon, notice } = msg;
|
||||
@@ -56,11 +58,15 @@ export class GuildHandler {
|
||||
if(!userGuild) return resResult(STATUS.GUILD_CREATE_ERROR);
|
||||
|
||||
await RoleModel.joinGuild(roleId);
|
||||
await UserGuildApplyModel.deleteApply(roleId); // 删除玩家所有对其他公会的申请
|
||||
|
||||
// TODO 加入排行
|
||||
const rank = 0;
|
||||
// TODO 加入channel
|
||||
|
||||
// 添加动态
|
||||
await GuildRecModel.createGuildRec(roleId, guild.code, GUILD_REC_TYPE.JOIN_GUILD, [roleName]);
|
||||
|
||||
// 返回
|
||||
const result = { ...guild, rank, myInfo: userGuild};
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
@@ -132,6 +138,7 @@ export class GuildHandler {
|
||||
async setAuth(msg: { roleId: string, auth: number }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
const { roleId: memberRoleId, auth } = msg;
|
||||
|
||||
@@ -174,15 +181,23 @@ export class GuildHandler {
|
||||
if(!userGuild) {
|
||||
return resResult(STATUS.GUILD_MEMBER_NOT_FOUND);
|
||||
}
|
||||
|
||||
|
||||
const role = await RoleModel.findByRoleId(memberRoleId);
|
||||
let updateObject = {};
|
||||
if(auth == GUILD_AUTH.LEADER) { // 转让团长
|
||||
const role = await RoleModel.findByRoleId(memberRoleId);
|
||||
updateObject['leader'] = role._id;
|
||||
await UserGuildModel.updateInfo(roleId, { auth: GUILD_AUTH.MEMBER }); // 自己降权限
|
||||
}
|
||||
|
||||
guild = await GuildModel.updateInfo(code, updateObject, { managerCnt: managerCntInc }, 'managerCnt'); // 如果有转让团长设置leader
|
||||
|
||||
// 添加动态
|
||||
if(auth == GUILD_AUTH.MANAGER) {
|
||||
await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.SET_MANAGER, [role.roleName]);
|
||||
} else if (auth == GUILD_AUTH.LEADER) {
|
||||
await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.SET_LEADER, [roleName, role.roleName]);
|
||||
}
|
||||
|
||||
// 返回
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
roleId: memberRoleId, auth: userGuild.auth, managerCnt: guild.managerCnt
|
||||
@@ -225,6 +240,7 @@ export class GuildHandler {
|
||||
async applyGuild(msg: { code: string }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
const { code } = msg;
|
||||
|
||||
@@ -256,6 +272,9 @@ export class GuildHandler {
|
||||
return joinResult.resResult;
|
||||
}
|
||||
|
||||
// 添加动态
|
||||
await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.JOIN_GUILD, [roleName]);
|
||||
|
||||
hasGuild = true;
|
||||
} else { // 不自动加入,插入申请表
|
||||
await UserGuildApplyModel.createUserGuildApply(role, guild, GUILD_APPLY_TYPE.APPLY);
|
||||
@@ -305,6 +324,10 @@ export class GuildHandler {
|
||||
for(let { roleId } of applyList) {
|
||||
const joinResult = await joinGuild(code, guild.lv, roleId, serverId);
|
||||
if(joinResult.status == 0) continue;
|
||||
|
||||
// 添加动态
|
||||
await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.JOIN_GUILD, [joinResult.roleName]);
|
||||
|
||||
roleIds.push(roleId);
|
||||
}
|
||||
} else { // 拒绝申请,删除申请
|
||||
@@ -418,6 +441,9 @@ export class GuildHandler {
|
||||
return joinResult.resResult;
|
||||
}
|
||||
|
||||
// 添加动态
|
||||
await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.JOIN_GUILD, [joinResult.roleName]);
|
||||
|
||||
code = guild.code;
|
||||
}
|
||||
await UserGuildApplyModel.deleteApplyByApplyCode([applyCode]); // 删除这条邀请
|
||||
@@ -496,6 +522,7 @@ export class GuildHandler {
|
||||
async quit(msg: { code: string }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
const { code } = msg;
|
||||
|
||||
@@ -512,6 +539,9 @@ export class GuildHandler {
|
||||
const guild = await GuildModel.quit(code, roleId, serverId);
|
||||
if(!guild) return resResult(STATUS.GUILD_QUIT_ERROR);
|
||||
|
||||
// 添加动态
|
||||
await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.QUIT_GUILD, [roleName]);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { hasGuild: role.hasGuild });
|
||||
}
|
||||
|
||||
@@ -542,6 +572,10 @@ export class GuildHandler {
|
||||
|
||||
// TODO 发送邮件,发送推送
|
||||
|
||||
|
||||
// 添加动态
|
||||
await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.QUIT_GUILD, [role.roleName]);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { memberCnt: guild.memberCnt });
|
||||
}
|
||||
|
||||
@@ -561,7 +595,7 @@ export class GuildHandler {
|
||||
if (!checkHisAuth) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
// 离线72小时
|
||||
const { loginTime } = await RoleModel.findByRoleId(leaderRoleId);
|
||||
const { roleName: oldRoleName, loginTime } = await RoleModel.findByRoleId(leaderRoleId);
|
||||
if (loginTime > getBeforeDaySeconds(3)) {
|
||||
return resResult(STATUS.GUILD_LEADER_LOGIN);
|
||||
}
|
||||
@@ -580,6 +614,10 @@ export class GuildHandler {
|
||||
|
||||
const guild = await GuildModel.updateInfo(code, { leader: topUser._id }, { managerCnt: managerCntInc }, 'managerCnt'); // 如果有转让团长设置leader
|
||||
|
||||
// 添加动态
|
||||
await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.IMPEACH, [ oldRoleName, topUser.roleName]);
|
||||
|
||||
|
||||
const leader = { ...topUser, ce: reduceCe(topUser.ce) }
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
code, managerCnt: guild.managerCnt, leader
|
||||
@@ -627,7 +665,27 @@ export class GuildHandler {
|
||||
if(!result) {
|
||||
return resResult(STATUS.GUILD_STRUCTURE_NOT_FOUND);
|
||||
}
|
||||
const resultStructure = result.structure.find(cur => cur.id == id);
|
||||
|
||||
// 添加动态
|
||||
const structureName = GUILD_STRUCTURE_NAME.get(id);
|
||||
await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.STRUCTURE_UP, [structureName, resultStructure.lv.toString()]);
|
||||
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
|
||||
|
||||
// 获取动态
|
||||
async getRec(msg: { code: string }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const { code } = msg;
|
||||
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.GET_REC, roleId, code);
|
||||
if (!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
const list = await GuildRecModel.getGuildRec(code);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { list });
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import { STATUS } from "../consts";
|
||||
import { RoleModel } from "../db/Role";
|
||||
import { UserGuildModel, UserGuildType } from "../db/UserGuild";
|
||||
import { UserGuildApplyModel } from "../db/UserGuildApply";
|
||||
import { GuildRecModel } from "../db/GuildRec";
|
||||
|
||||
/**
|
||||
* @description 检查该玩家是否有权限做操作
|
||||
@@ -52,7 +53,7 @@ export async function joinGuild(code: string, lv: number, roleId: string, server
|
||||
|
||||
await UserGuildApplyModel.deleteApply(roleId); // 删除玩家所有对其他公会的申请
|
||||
|
||||
return { status: 1, guild, userGuild }
|
||||
return { status: 1, guild, userGuild, roleName: role.roleName }
|
||||
}
|
||||
|
||||
export async function costFund(code: string, cost: number, sid: string) {
|
||||
|
||||
@@ -7,10 +7,21 @@ export enum GUILD_STRUCTURE {
|
||||
TRAIN = 4, // 练兵场
|
||||
DONATE = 5, // 捐献所
|
||||
WISH_POOL = 6, // 许愿池
|
||||
SHOP = 7, // 商店
|
||||
STORE = 7, // 商店
|
||||
END
|
||||
}
|
||||
|
||||
// 建筑名
|
||||
export const GUILD_STRUCTURE_NAME = new Map([
|
||||
[ GUILD_STRUCTURE.ARMY_CENTER, '中军大帐'],
|
||||
[ GUILD_STRUCTURE.EQUIP_PRODUCE, '炼器堂'],
|
||||
[ GUILD_STRUCTURE.BOSS, '演武台'],
|
||||
[ GUILD_STRUCTURE.TRAIN, '练兵场'],
|
||||
[ GUILD_STRUCTURE.DONATE, '捐献所'],
|
||||
[ GUILD_STRUCTURE.WISH_POOL, '许愿池'],
|
||||
[ GUILD_STRUCTURE.STORE, '商店']
|
||||
])
|
||||
|
||||
// 权限
|
||||
export enum GUILD_AUTH {
|
||||
LEADER = 1, // 团长
|
||||
@@ -88,4 +99,19 @@ export enum GUILD_APPLY_STATUS {
|
||||
export enum GUILD_APPLY_TYPE {
|
||||
APPLY = 1, // 申请
|
||||
INVITE = 2 // 邀请
|
||||
}
|
||||
|
||||
// 公会动态id
|
||||
export enum GUILD_REC_TYPE {
|
||||
JOIN_GUILD = 1, // 加入军团 roleName
|
||||
QUIT_GUILD = 2, // 离开军团 roleName
|
||||
SET_MANAGER = 3, // 提升管理 roleName
|
||||
STRUCTURE_UP = 4, // 建筑物升级 structureName lv
|
||||
EQUIP_PRODUCE = 5, // 装备碎片研发 lvmin lvmax quality
|
||||
BOSS_END = 6, // 演武台击杀boss bossName
|
||||
BOSS_START = 7, // 演武台boss 开启 bossName
|
||||
TRAIN_END = 8, // 练兵场压制 warName
|
||||
TRAIN_START = 9, // 练兵场开启 warName
|
||||
SET_LEADER = 10, // 转让团长 guildName roleName
|
||||
IMPEACH = 11, // 弹劾 roleName roleName
|
||||
}
|
||||
45
shared/db/GuildRec.ts
Normal file
45
shared/db/GuildRec.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
import { GUILD_REC_TYPE } from '../consts';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
|
||||
@index({ guildCode: 1 })
|
||||
export default class GuildRec extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
recCode: string;
|
||||
|
||||
@prop({ required: true, select: false })
|
||||
roleId: string;
|
||||
|
||||
@prop({ required: true, select: false })
|
||||
guildCode: string;
|
||||
|
||||
@prop({ required: true, default: GUILD_REC_TYPE.JOIN_GUILD, enum: GUILD_REC_TYPE })
|
||||
type: number;
|
||||
|
||||
@prop({ required: true, type: String, default: [] })
|
||||
params: string[];
|
||||
|
||||
@prop({ required: true, default: nowSeconds() })
|
||||
createTime: number;
|
||||
|
||||
public static async createGuildRec(roleId: string, guildCode: string, type: number, params: string[]) {
|
||||
const doc = new GuildRecModel();
|
||||
const update = Object.assign(doc.toJSON(), { roleId, guildCode, type, params });
|
||||
delete update._id;
|
||||
const recCode = genCode(10);
|
||||
const result: GuildRecType = await GuildRecModel.findOneAndUpdate({ recCode }, params, { upsert: true, new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async getGuildRec(guildCode: string) {
|
||||
const result: GuildRecType[] = await GuildRecModel.find({ guildCode }).lean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const GuildRecModel = getModelForClass(GuildRec);
|
||||
|
||||
export interface GuildRecType extends Pick<DocumentType<GuildRec>, keyof GuildRec> { };
|
||||
Reference in New Issue
Block a user