150 lines
4.8 KiB
TypeScript
150 lines
4.8 KiB
TypeScript
import { gameData } from "../pubUtils/data";
|
|
import { GuildModel, GuildType } from "../db/Guild";
|
|
import { resResult, shouldRefreshWeek, shouldRefresh } from "../pubUtils/util";
|
|
import { STATUS } from "../consts";
|
|
import { RoleModel } from "../db/Role";
|
|
import { UserGuildModel, UserGuildType } from "../db/UserGuild";
|
|
import { UserGuildApplyModel } from "../db/UserGuildApply";
|
|
|
|
/**
|
|
* @description 检查该玩家是否有权限做操作
|
|
* @param func 操作id
|
|
* @param auth 权限
|
|
*/
|
|
export async function checkAuth(func: number, roleId: string, code?: string, userGuild?: UserGuildType) {
|
|
const auth = await UserGuildModel.getMyAuth(roleId, code, userGuild);
|
|
const dicGuildAuth = gameData.guildAuth.get(func);
|
|
console.log(auth, dicGuildAuth)
|
|
if(!dicGuildAuth) return false;
|
|
|
|
return dicGuildAuth.includes(auth);
|
|
}
|
|
|
|
/**
|
|
* @description 加入公会
|
|
* @param code 公会code
|
|
* @param lv 公会当前等级,判断人数用
|
|
* @param roleId 加入的玩家
|
|
*/
|
|
export async function joinGuild(code: string, lv: number, roleId: string, serverId: number) {
|
|
|
|
// TODO 加redlock
|
|
|
|
const result = await RoleModel.joinGuild(roleId);
|
|
if(!result) {
|
|
return { status: 0, resResult: resResult(STATUS.GUILD_HAS_JOIN) };
|
|
}
|
|
|
|
const dicCenterBase = gameData.centerBase.get(lv);
|
|
if(!dicCenterBase) {
|
|
return { status: 0, resResult: resResult(STATUS.DIC_DATA_NOT_FOUND) };
|
|
}
|
|
const maxMemberCnt = dicCenterBase.peopleNum;
|
|
const guild = await GuildModel.addGuild(code, roleId, maxMemberCnt, serverId);
|
|
if(!guild) {
|
|
return { status: 0, resResult: resResult(STATUS.GUILD_MEMBER_MAX) };
|
|
}
|
|
|
|
const role = await RoleModel.findByRoleId(roleId);
|
|
const userGuild = await UserGuildModel.createUserGuild(guild.code, role, false);
|
|
if(!userGuild) {
|
|
return { status: 0, resResult: resResult(STATUS.GUILD_CREATE_ERROR) };
|
|
}
|
|
|
|
await UserGuildApplyModel.deleteApply(roleId); // 删除玩家所有对其他公会的申请
|
|
|
|
return { status: 1, guild, userGuild, roleName: role.roleName }
|
|
}
|
|
|
|
/**
|
|
* 消耗军团资金
|
|
* @param code 军团唯一code
|
|
* @param cost 消耗值
|
|
* @param sid 推送channel
|
|
*/
|
|
export async function costFund(code: string, cost: number, sid: string) {
|
|
const guild = await GuildModel.costFund(code, cost);
|
|
// TODO 推送
|
|
return guild;
|
|
}
|
|
|
|
/**
|
|
* 刷新军团活跃
|
|
* @param guildCode 军团唯一code
|
|
* @param serverId 区
|
|
*/
|
|
export async function getGuildWithRefActive(guildCode: string, serverId: number) {
|
|
|
|
// TODO 加写锁
|
|
let guild = await GuildModel.findByCode(guildCode, serverId, '+refTimeDaily +refTimeWeekly');
|
|
if(!guild) return false;
|
|
|
|
console.log(JSON.stringify(guild));
|
|
const now = new Date();
|
|
let { activeDaily, activeWeekly, refTimeDaily, refTimeWeekly} = guild;
|
|
let isRefWeek = shouldRefreshWeek(refTimeWeekly, now, 1, 0);
|
|
if(isRefWeek) {
|
|
activeWeekly = 0; refTimeWeekly = now;
|
|
}
|
|
let isRefDaily = shouldRefresh(refTimeDaily, now, 0);
|
|
if(isRefDaily) {
|
|
activeDaily = 0; refTimeDaily = now;
|
|
}
|
|
|
|
if(isRefWeek || isRefDaily) {
|
|
guild = await GuildModel.updateInfo(guildCode, { activeDaily, activeWeekly, refTimeDaily, refTimeWeekly }, {});
|
|
}
|
|
return guild;
|
|
}
|
|
|
|
/**
|
|
* 增加活跃
|
|
* @param guildCode 军团唯一code
|
|
* @param serverId 区
|
|
* @param active 增加的活跃
|
|
*/
|
|
export async function addGuildActive(guildCode: string, serverId: number, active: number) {
|
|
|
|
// TODO 加写锁
|
|
let guild = await GuildModel.findByCode(guildCode, serverId, '+refTimeDaily +refTimeWeekly');
|
|
if(!guild) return false;
|
|
|
|
const now = new Date();
|
|
let { activeDaily, activeWeekly, refTimeDaily, refTimeWeekly} = guild;
|
|
let isRefWeek = shouldRefreshWeek(refTimeWeekly, now, 1, 0);
|
|
if(isRefWeek) {
|
|
activeWeekly = 0; refTimeWeekly = now;
|
|
}
|
|
let isRefDaily = shouldRefresh(refTimeDaily, now, 0);
|
|
if(isRefDaily) {
|
|
activeDaily = 0; refTimeDaily = now;
|
|
}
|
|
|
|
activeWeekly += active; activeDaily += active;
|
|
|
|
guild = await GuildModel.updateInfo(guildCode, { activeDaily, activeWeekly, refTimeDaily, refTimeWeekly }, {});
|
|
return guild;
|
|
}
|
|
|
|
/**
|
|
* 获取用户公会表并刷新活跃
|
|
* @param roleId 用户id
|
|
* @param select 筛选字段
|
|
*/
|
|
export async function getUserGuildWithRefActive(roleId: string, select: string) {
|
|
let userGuild = await UserGuildModel.getMyGuild(roleId, select? select + ' +refTimeDaily': '+refTimeDaily');
|
|
if(!userGuild) return false;
|
|
let { receivedActive, refTimeDaily } = userGuild;
|
|
|
|
const now = new Date();
|
|
let isRefDaily = shouldRefresh(refTimeDaily, now, 0);
|
|
if(isRefDaily) {
|
|
receivedActive = 0; refTimeDaily = now;
|
|
|
|
userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily }, select);
|
|
if(!userGuild) return false;
|
|
}
|
|
|
|
return userGuild;
|
|
}
|