创建公会
This commit is contained in:
48
shared/consts/constModules/guildConst.ts
Normal file
48
shared/consts/constModules/guildConst.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
// 军团建筑
|
||||
export enum GUILD_STRUCTURE {
|
||||
START = 1,
|
||||
ARMY_CENTER = 1, // 中军大帐
|
||||
EQUIP_PRODUCE = 2, // 炼器堂
|
||||
BOSS = 3, // 演武台
|
||||
TRAIN = 4, // 练兵场
|
||||
DONATE = 5, // 捐献所
|
||||
WISH_POOL = 6, // 许愿池
|
||||
SHOP = 7, // 商店
|
||||
END
|
||||
}
|
||||
|
||||
// 权限
|
||||
export enum GUILD_AUTH {
|
||||
LEADER = 1, // 团长
|
||||
MANAGER = 2, // 管理员
|
||||
MEMBER = 3, // 成员
|
||||
OTHERS = 4 // 未加入公会的其他人
|
||||
}
|
||||
|
||||
// 职位
|
||||
export enum GUILD_JOB {
|
||||
JIANGJUN = 1,
|
||||
FUJIANGJUN = 2,
|
||||
XIAOWEI = 3,
|
||||
SHIZHANG = 4,
|
||||
WUZHANG = 5,
|
||||
SHIBING = 6
|
||||
}
|
||||
|
||||
// 操作
|
||||
export enum GUILD_OPERATE {
|
||||
CREATE_GUILD = 1, // 创建公会
|
||||
}
|
||||
|
||||
// 军团状态
|
||||
export enum GUILD_STATUS {
|
||||
RUNNING = 1, // 运转中
|
||||
DISMISSED = 2 // 解散
|
||||
}
|
||||
|
||||
// 成员状态
|
||||
export enum USER_GUILD_STATUS {
|
||||
ON = 1, // 成员
|
||||
QUIT = 2, // 退出
|
||||
DISMISSED = 3 // 解散
|
||||
}
|
||||
@@ -297,6 +297,7 @@ export const FILENAME = {
|
||||
DIC_PVP_HERO_REWARD: 'dic_pvp_heroAccountReward',
|
||||
DIC_PVP_RANK_REWARD: 'dic_pvp_rankReward',
|
||||
DIC_PVP_BOX: 'dic_pvp_boxReward',
|
||||
DIC_GUILD_AUTH: 'auth'
|
||||
}
|
||||
|
||||
export const WAR_RELATE_TABLES = [
|
||||
@@ -318,4 +319,4 @@ export const EQUIP_STRENGTHEN_TYPE = {
|
||||
SINGLE: 1, // 单件单级强化
|
||||
SINGLE_QUICK: 2, // 单件一键强化
|
||||
ALL_QUICK: 3 // 武将全部装备栏一键强化
|
||||
}
|
||||
}
|
||||
@@ -4,4 +4,5 @@ export * from './constModules/calcuConst';
|
||||
export * from './constModules/heroConst';
|
||||
export * from './constModules/itemConst';
|
||||
export * from './constModules/sysConst';
|
||||
export * from './constModules/guildConst';
|
||||
export * from './statusCode';
|
||||
@@ -104,11 +104,6 @@ export const STATUS = {
|
||||
COM_BATTLE_REWARD_ERR: { code: 20627, simStr: '不能领取奖励' },
|
||||
COM_BATTLE_REWARDED: { code: 20628, simStr: '奖励已领取' },
|
||||
COM_BATTLE_HEROES_ERR: { code: 20629, simStr: '阵容异常' },
|
||||
|
||||
// PVP 20700-20799
|
||||
PVP_ROLE_NOT_FOUND: { code: 20700, simStr: '未找到该对手' },
|
||||
PVP_NOT_OPEN: { code: 20701, simStr: 'pvp尚未开启' },
|
||||
PVP_REFRESH_CNT_REACH_MAX: { code: 20702, simStr: '刷新对手次数超过最大值' },
|
||||
|
||||
// 共斗藏宝图合成
|
||||
COM_BLUEPRT_QUALITY_CANNOT_COMPOSE: { code: 20630, simStr: '该品质藏宝图不可合成' },
|
||||
@@ -119,6 +114,19 @@ export const STATUS = {
|
||||
DUNGEON_REFRESH_TIMES_LACK: { code: 20701, simStr: '购买次数不足' },
|
||||
DUNGEON_TIMES_LACK: { code: 20701, simStr: '挑战次数不足' },
|
||||
|
||||
// PVP 20800-20899
|
||||
PVP_ROLE_NOT_FOUND: { code: 20700, simStr: '未找到该对手' },
|
||||
PVP_NOT_OPEN: { code: 20701, simStr: 'pvp尚未开启' },
|
||||
PVP_REFRESH_CNT_REACH_MAX: { code: 20702, simStr: '刷新对手次数超过最大值' },
|
||||
PVP_NOT_REACH_BOX_SCORE: {code: 20703, simStr: '未达到宝箱领取军功'},
|
||||
PVP_BOX_IS_GOT: {code: 20704, simStr: '宝箱已经领取'},
|
||||
PVP_CHALLENGE_TIMES_NOT_ENOUGH: {code: 20705, simStr: '挑战次数不足'},
|
||||
|
||||
// 军团 20900-20999
|
||||
GUILD_AUTH_NOT_ENOUGH: { code: 20900, simStr: '权限不足' },
|
||||
GUILD_NAME_DUP: { code: 20901, simStr: '公会名重复' },
|
||||
GUILD_CREATE_ERROR: { code: 20902, simStr: '创建失败' },
|
||||
|
||||
// 通用 30000 - 30099
|
||||
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
||||
ROLE_MATERIAL_NOT_ENOUGH: { code: 30001, simStr: '材料数量不足' },
|
||||
@@ -183,10 +191,6 @@ export const STATUS = {
|
||||
ROLE_SCHOOL_POSITION_LOCKED: {code: 30604, simStr: '该位置未解锁'},
|
||||
ROLE_SCHOOL_POSITION_UNLOCK_NOT_NEED: {code: 30605, simStr: '该位置已解锁'},
|
||||
ROLE_SCROLL_REACH_MAX: {code: 30606, simStr: '已经升到可以升的最高等级'},
|
||||
// pvp 30800-30899
|
||||
PVP_NOT_REACH_BOX_SCORE: {code: 30800, simStr: '未达到宝箱领取军功'},
|
||||
PVP_BOX_IS_GOT: {code: 30801, simStr: '宝箱已经领取'},
|
||||
PVP_CHALLENGE_TIMES_NOT_ENOUGH: {code: 30802, simStr: '挑战次数不足'},
|
||||
|
||||
// 社交相关状态 40000 - 49999
|
||||
// 运营模块相关状态 50000 - 59999
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
|
||||
import Role from './Role';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
import { GUILD_STRUCTURE, GUILD_STATUS } from '../consts';
|
||||
|
||||
class Structure {
|
||||
@prop({ required: true })
|
||||
@@ -11,8 +13,9 @@ class Structure {
|
||||
|
||||
@index({ roleId: 1 })
|
||||
export default class Guild extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
code: string;
|
||||
code: string;
|
||||
|
||||
@prop({ required: true })
|
||||
name: string;
|
||||
@@ -27,10 +30,10 @@ export default class Guild extends BaseModel {
|
||||
peopleNum: number;
|
||||
|
||||
@prop({ required: true })
|
||||
leader: Ref<Role>;
|
||||
leader: Ref<Role>;
|
||||
|
||||
@prop({ required: true, default: true })
|
||||
isAuto: boolean;
|
||||
isAuto: boolean;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
ceCondition: number;
|
||||
@@ -59,15 +62,42 @@ export default class Guild extends BaseModel {
|
||||
@prop({ required: true, type: String, default: [] })
|
||||
members: string[]; // 军团成员的roleId,用于增加战力的时候加入总战力
|
||||
|
||||
@prop({ required: true, type: Structure, default: [] })
|
||||
@prop({ required: true, type: Structure, default: getInitStructure(), _id: false })
|
||||
structure: Structure[]
|
||||
|
||||
@prop({ required: true })
|
||||
status:number;
|
||||
|
||||
@prop({ required: true, default: GUILD_STATUS.RUNNING, enum: GUILD_STATUS })
|
||||
status: number;
|
||||
|
||||
public static async createGuild(params: CreateParam) {
|
||||
const doc = new GuildModel();
|
||||
const update = Object.assign(doc.toJSON(), params);
|
||||
delete update._id;
|
||||
const code = genCode(6);
|
||||
const result: GuildType = await GuildModel.findOneAndUpdate({ code }, update, { upsert: true, new: true })
|
||||
.select('code name icon notice introduce lv fund peopleNum manageNum activeDaily activeWeekly ceCondition isAuto leader structure')
|
||||
.populate('leader', 'name sHid headHid lv updatedAt', 'Role')
|
||||
.lean();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async checkName(name: string) {
|
||||
const result = await GuildModel.findOne({ name, status: 1 }).lean();
|
||||
return !!result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export const GuildModel = getModelForClass(Guild);
|
||||
|
||||
export interface GuildType extends Pick<DocumentType<Guild>, keyof Guild> { };
|
||||
export type GuildUpdateParam = Partial<GuildType>; // 将所有字段变成可选项
|
||||
export type GuildUpdateParam = Partial<GuildType>; // 将所有字段变成可选项
|
||||
type CreateParam = Pick<GuildType, 'name'|'icon'|'notice'|'leader'|'members'|'ce'>
|
||||
|
||||
function getInitStructure() {
|
||||
let structure = new Array<Structure>();
|
||||
for (let id = GUILD_STRUCTURE.START; id < GUILD_STRUCTURE.END; id++) {
|
||||
structure.push({ id, lv: 1 });
|
||||
}
|
||||
return structure;
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
|
||||
import Role from './Role';
|
||||
import Guild from './Guild';
|
||||
import { GUILD_AUTH, USER_GUILD_STATUS, GUILD_JOB } from '../consts';
|
||||
|
||||
class ActiveRecord {
|
||||
@prop({ required: true })
|
||||
@@ -20,10 +22,13 @@ export default class UserGuild extends BaseModel {
|
||||
@prop({ required: true })
|
||||
role: Ref<Role>;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
@prop({ required: true })
|
||||
guild: Ref<Guild>;
|
||||
|
||||
@prop({ required: true, default: GUILD_AUTH.MEMBER, enum: GUILD_AUTH })
|
||||
auth: number;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
@prop({ required: true, default: GUILD_JOB.SHIBING, enum: GUILD_JOB })
|
||||
job: number;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
@@ -32,7 +37,7 @@ export default class UserGuild extends BaseModel {
|
||||
@prop({ required: true, default: 0 })
|
||||
honourWeek: number;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
@prop({ required: true, default: USER_GUILD_STATUS.ON, enum: USER_GUILD_STATUS})
|
||||
status: number;
|
||||
|
||||
@prop({ required: true, type: ActiveRecord, default: [] })
|
||||
@@ -41,9 +46,26 @@ export default class UserGuild extends BaseModel {
|
||||
@prop({ required: true, default: new Date() })
|
||||
refTimeWeekly: number;
|
||||
|
||||
public static async getMyGuild(roleId: string) {
|
||||
const myGuild: UserGuildType = await UserGuildModel.findOne({ roleId, status: USER_GUILD_STATUS.ON }).populate('guild').lean();
|
||||
return myGuild||{ auth: GUILD_AUTH.OTHERS };
|
||||
}
|
||||
|
||||
|
||||
public static async createUserGuild(params: UserGuildCreateParam) {
|
||||
const doc = new UserGuildModel();
|
||||
const update = Object.assign(doc.toJSON(), params);
|
||||
delete update._id;
|
||||
const result: UserGuildType = await UserGuildModel.findOneAndUpdate({ guildCode: params.guildCode, status: USER_GUILD_STATUS.ON }, update, { upsert: true, new: true })
|
||||
.select('honour job auth')
|
||||
.lean();
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const GuildModel = getModelForClass(UserGuild);
|
||||
export const UserGuildModel = getModelForClass(UserGuild);
|
||||
|
||||
export interface GuildType extends Pick<DocumentType<UserGuild>, keyof UserGuild> { };
|
||||
export type GuildUpdateParam = Partial<GuildType>; // 将所有字段变成可选项
|
||||
export interface UserGuildType extends Pick<DocumentType<UserGuild>, keyof UserGuild> { };
|
||||
export type UserGuildUpdateParam = Partial<UserGuildType>; // 将所有字段变成可选项
|
||||
type UserGuildCreateParam = Pick<UserGuildType, 'guildCode'|'roleId'|'role'|'guild'|'auth'|'job'>;
|
||||
@@ -43,6 +43,8 @@ import { dicGkPvp, dicGkPvps } from './dictionary/DicGkPvp';
|
||||
import { dicHeroRewads } from './dictionary/DicPvpHeroReward';
|
||||
import { dicRankRewads, dicRankMax } from './dictionary/DicPvpRankReward';
|
||||
import { dicPvpBoxs } from './dictionary/DicPvpBox';
|
||||
import { dicGuildAuth } from './dictionary/DicGuildAuth';
|
||||
|
||||
export const gameData = {
|
||||
blurprtCompose: dicBlueprtCompose,
|
||||
blueprtPossibility: dicBlueprtPossibility,
|
||||
@@ -102,6 +104,7 @@ export const gameData = {
|
||||
pvpRankRewards: dicRankRewads,
|
||||
pvpBoxs: dicPvpBoxs,
|
||||
pvpRankMax: dicRankMax,
|
||||
guildAuth: dicGuildAuth
|
||||
};
|
||||
|
||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||
|
||||
@@ -35,3 +35,6 @@ export const PVP = {
|
||||
PVP_OPPONENT_FREEREFRESH: 3, // pvp挑战对手每日免费刷新次数
|
||||
PVP_WINREWARD_UPLIMIT: 10, // 连胜奖励军功加成上限
|
||||
};
|
||||
export const GUILD = {
|
||||
GUILD_CREATE_COST: 10, // 创建公会消耗元宝
|
||||
};
|
||||
|
||||
23
shared/pubUtils/dictionary/DicGuildAuth.ts
Normal file
23
shared/pubUtils/dictionary/DicGuildAuth.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
// 公会权限
|
||||
import { readJsonFile, parseNumberList } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
|
||||
export interface DicGuildAuth {
|
||||
|
||||
// id
|
||||
readonly id: number;
|
||||
// 权限 TODO 策划字段未定
|
||||
readonly auths: number[];
|
||||
|
||||
}
|
||||
|
||||
const str = readJsonFile(FILENAME.DIC_GUILD_AUTH);
|
||||
let arr = JSON.parse(str);
|
||||
|
||||
export const dicGuildAuth = new Map<number, number[]>();
|
||||
|
||||
arr.forEach(o => {
|
||||
let auths = parseNumberList(o.auths)
|
||||
dicGuildAuth.set(o.id, auths);
|
||||
});
|
||||
arr = undefined;
|
||||
@@ -5,7 +5,7 @@ import { ItemModel } from '../db/Item';
|
||||
import { EquipModel, RandSe, Holes } from './../db/Equip';
|
||||
import { BagInter, EquipInter } from './interface';
|
||||
import { gameData } from './data';
|
||||
import { RANDOM_SE_COUNT, FIX_ATTRIBUTES_RAN, ITID } from '../consts';
|
||||
import { RANDOM_SE_COUNT, FIX_ATTRIBUTES_RAN, ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../consts';
|
||||
import { getRandValueByMinMax, getRandEelm } from './util';
|
||||
|
||||
import { findWhere } from 'underscore';
|
||||
@@ -59,3 +59,11 @@ export async function addEquips(roleId: string, roleName: string, weapon: EquipI
|
||||
const equip = await EquipModel.createEquip({roleId, roleName, id, name, quality, suitId, randRange, ePlaceId: type, randSe, holes, hid});
|
||||
return equip
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取元宝物品 { id, count }
|
||||
* @param count 元宝数量
|
||||
*/
|
||||
export function getGoldObject(count: number) {
|
||||
return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD), count};
|
||||
}
|
||||
1
shared/resource/jsons/auth.json
Normal file
1
shared/resource/jsons/auth.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"id": 1, "auths": "4"}]
|
||||
Reference in New Issue
Block a user