升级建筑物
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
import { Application, BackendSession, pinus } from 'pinus';
|
||||
import { resResult, getRandEelm, reduceCe } from '../../../pubUtils/util';
|
||||
import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE } from '../../../consts';
|
||||
import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE } from '../../../consts';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { checkAuth, joinGuild } from '../../../services/guildService';
|
||||
import { checkAuth, joinGuild, costFund } from '../../../services/guildService';
|
||||
import { GuildModel, GuildType } from '../../../db/Guild';
|
||||
import Role, { RoleModel, RoleType } from '../../../db/Role';
|
||||
import { RoleModel, RoleType } from '../../../db/Role';
|
||||
import { GUILD } from '../../../pubUtils/dicParam';
|
||||
import { handleCost } from '../../../services/rewardService';
|
||||
import { getGoldObject } from '../../../pubUtils/itemUtils';
|
||||
import { getSeconds, nowSeconds, getBeforeDaySeconds } from '../../../pubUtils/timeUtil';
|
||||
import { nowSeconds, getBeforeDaySeconds } from '../../../pubUtils/timeUtil';
|
||||
import { GuildListInfo } from '../../../pubUtils/interface';
|
||||
import { UserGuildApplyModel } from '../../../db/UserGuildApply';
|
||||
import User from '../../../db/User';
|
||||
import { hasStructureConsume, getStructureConsume, gameData } from '../../../pubUtils/data';
|
||||
|
||||
export default function (app: Application) {
|
||||
return new GuildHandler(app);
|
||||
@@ -132,6 +132,7 @@ export class GuildHandler {
|
||||
async setAuth(msg: { roleId: string, auth: number }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const { roleId: memberRoleId, auth } = msg;
|
||||
|
||||
const myUserGuild = await UserGuildModel.getMyGuild(roleId, 'auth guildCode');
|
||||
@@ -149,23 +150,39 @@ export class GuildHandler {
|
||||
return resResult(STATUS.GUILD_AUTH_NOT_CHANGE);
|
||||
}
|
||||
|
||||
// TODO 管理员最大数 等策划表
|
||||
// 管理员最大数 等策划表
|
||||
let guild = await GuildModel.findByCode(code, serverId, 'managerCnt lv');
|
||||
if(!guild) {
|
||||
return resResult(STATUS.GUILD_NOT_FOUND);
|
||||
}
|
||||
|
||||
let managerCntInc = 0;
|
||||
if(auth == GUILD_AUTH.LEADER) { // 转让团长
|
||||
managerCntInc = hisUserGuild.auth == GUILD_AUTH.MANAGER?-1: 0;
|
||||
} else {
|
||||
managerCntInc = auth == GUILD_AUTH.MANAGER? 1: -1;
|
||||
}
|
||||
|
||||
let maxManagerCnt = gameData.centerBase.get(guild.lv);
|
||||
if(!maxManagerCnt) return STATUS.DIC_DATA_NOT_FOUND;
|
||||
|
||||
if(guild.managerCnt + managerCntInc > maxManagerCnt.managerNum) {
|
||||
return resResult(STATUS.GUILD_MANAGER_REACH_MAX);
|
||||
}
|
||||
|
||||
const userGuild = await UserGuildModel.updateInfo(memberRoleId, { auth }, 'auth'); // 设置权限
|
||||
if(!userGuild) {
|
||||
return resResult(STATUS.GUILD_MEMBER_NOT_FOUND);
|
||||
}
|
||||
let managerCntInc = 0;
|
||||
|
||||
let updateObject = {};
|
||||
if(auth == GUILD_AUTH.LEADER) { // 转让团长
|
||||
managerCntInc = hisUserGuild.auth == GUILD_AUTH.MANAGER?-1: 0;
|
||||
const role = await RoleModel.findByRoleId(memberRoleId);
|
||||
updateObject['leader'] = role._id;
|
||||
await UserGuildModel.updateInfo(roleId, { auth: GUILD_AUTH.MEMBER }); // 自己降权限
|
||||
} else {
|
||||
managerCntInc = auth == GUILD_AUTH.MANAGER? 1: -1;
|
||||
}
|
||||
const guild = await GuildModel.updateInfo(code, updateObject, { managerCnt: managerCntInc }, 'managerCnt'); // 如果有转让团长设置leader
|
||||
|
||||
guild = await GuildModel.updateInfo(code, updateObject, { managerCnt: managerCntInc }, 'managerCnt'); // 如果有转让团长设置leader
|
||||
// 返回
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
roleId: memberRoleId, auth: userGuild.auth, managerCnt: guild.managerCnt
|
||||
@@ -568,4 +585,49 @@ export class GuildHandler {
|
||||
code, managerCnt: guild.managerCnt, leader
|
||||
});
|
||||
}
|
||||
|
||||
// 升级建筑物等级
|
||||
async upStructure(msg: { code: string, id: number }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const sid = session.get('sid');
|
||||
const { code, id } = msg;
|
||||
|
||||
// 升级建筑物权限
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.UP_STRUCTURE, roleId, code);
|
||||
if (!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
const guild = await GuildModel.findByCode(code, serverId, 'lv structure');
|
||||
if(!guild) {
|
||||
return resResult(STATUS.GUILD_NOT_FOUND);
|
||||
}
|
||||
|
||||
// TODO 加写锁
|
||||
const { lv, structure } = guild;
|
||||
const curStructure = structure.find(cur => cur.id == id);
|
||||
if(!curStructure) {
|
||||
return resResult(STATUS.GUILD_STRUCTURE_NOT_FOUND);
|
||||
}
|
||||
if(id != GUILD_STRUCTURE.ARMY_CENTER && curStructure.lv >= lv) { // 中军大帐以外建筑物
|
||||
if(curStructure.lv >= lv) {
|
||||
return resResult(STATUS.GUILD_STRUCTURE_LV_MAX);
|
||||
}
|
||||
}
|
||||
if(!hasStructureConsume(id, curStructure.lv + 1)) {
|
||||
return resResult(STATUS.GUILD_STRUCTURE_LV_MAX);
|
||||
}
|
||||
const cost = getStructureConsume(id, curStructure.lv);
|
||||
const costResult = await costFund(code, cost, sid);
|
||||
if(!costResult) {
|
||||
return resResult(STATUS.GUILD_FUND_NOT_ENOUGH);
|
||||
}
|
||||
|
||||
const result = await GuildModel.upStructure(code, id, 'code fund structure lv');
|
||||
if(!result) {
|
||||
return resResult(STATUS.GUILD_STRUCTURE_NOT_FOUND);
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, result);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user