feat: edit clan hierarchy (#1164)
Re #1144 Reviewed-on: OpenWF/SpaceNinjaServer#1164
This commit is contained in:
parent
516df61633
commit
b7800b6d20
16
src/controllers/api/customizeGuildRanksController.ts
Normal file
16
src/controllers/api/customizeGuildRanksController.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { getGuildForRequest } from "@/src/services/guildService";
|
||||
import { IGuildRank } from "@/src/types/guildTypes";
|
||||
import { RequestHandler } from "express";
|
||||
|
||||
export const customizeGuildRanksController: RequestHandler = async (req, res) => {
|
||||
const guild = await getGuildForRequest(req);
|
||||
const payload = JSON.parse(String(req.body)) as ICustomizeGuildRanksRequest;
|
||||
// TODO: Verify permissions
|
||||
guild.Ranks = payload.GuildRanks;
|
||||
await guild.save();
|
||||
res.end();
|
||||
};
|
||||
|
||||
interface ICustomizeGuildRanksRequest {
|
||||
GuildRanks: IGuildRank[];
|
||||
}
|
@ -6,7 +6,8 @@ import {
|
||||
ILongMOTD,
|
||||
IGuildMemberDatabase,
|
||||
IGuildLogClassChange,
|
||||
IGuildLogTechChange
|
||||
IGuildLogTechChange,
|
||||
IGuildRank
|
||||
} from "@/src/types/guildTypes";
|
||||
import { Document, Model, model, Schema, Types } from "mongoose";
|
||||
import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
|
||||
@ -58,6 +59,53 @@ const longMOTDSchema = new Schema<ILongMOTD>(
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
const guildRankSchema = new Schema<IGuildRank>(
|
||||
{
|
||||
Name: String,
|
||||
Permissions: Number
|
||||
},
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
const defaultRanks: IGuildRank[] = [
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Creator",
|
||||
Permissions: 16351
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Warlord",
|
||||
Permissions: 16351
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_General",
|
||||
Permissions: 4318
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Officer",
|
||||
Permissions: 4314
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Leader",
|
||||
Permissions: 4106
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Sage",
|
||||
Permissions: 4304
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Soldier",
|
||||
Permissions: 4098
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Initiate",
|
||||
Permissions: 4096
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Utility",
|
||||
Permissions: 4096
|
||||
}
|
||||
];
|
||||
|
||||
const guildLogTechChangeSchema = new Schema<IGuildLogTechChange>(
|
||||
{
|
||||
dateTime: Date,
|
||||
@ -81,6 +129,7 @@ const guildSchema = new Schema<IGuildDatabase>(
|
||||
Name: { type: String, required: true, unique: true },
|
||||
MOTD: { type: String, default: "" },
|
||||
LongMOTD: { type: longMOTDSchema, default: undefined },
|
||||
Ranks: { type: [guildRankSchema], default: defaultRanks },
|
||||
DojoComponents: { type: [dojoComponentSchema], default: [] },
|
||||
DojoCapacity: { type: Number, default: 100 },
|
||||
DojoEnergy: { type: Number, default: 5 },
|
||||
|
@ -22,6 +22,7 @@ import { contributeToDojoComponentController } from "@/src/controllers/api/contr
|
||||
import { contributeToVaultController } from "@/src/controllers/api/contributeToVaultController";
|
||||
import { createGuildController } from "@/src/controllers/api/createGuildController";
|
||||
import { creditsController } from "@/src/controllers/api/creditsController";
|
||||
import { customizeGuildRanksController } from "@/src/controllers/api/customizeGuildRanksController";
|
||||
import { declineGuildInviteController } from "@/src/controllers/api/declineGuildInviteController";
|
||||
import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
|
||||
import { destroyDojoDecoController } from "@/src/controllers/api/destroyDojoDecoController";
|
||||
@ -171,6 +172,7 @@ apiRouter.post("/contributeGuildClass.php", contributeGuildClassController);
|
||||
apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
|
||||
apiRouter.post("/contributeToVault.php", contributeToVaultController);
|
||||
apiRouter.post("/createGuild.php", createGuildController);
|
||||
apiRouter.post("/customizeGuildRanks.php", customizeGuildRanksController);
|
||||
apiRouter.post("/destroyDojoDeco.php", destroyDojoDecoController);
|
||||
apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);
|
||||
apiRouter.post("/drones.php", dronesController);
|
||||
|
@ -86,44 +86,7 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s
|
||||
MOTD: guild.MOTD,
|
||||
LongMOTD: guild.LongMOTD,
|
||||
Members: members,
|
||||
Ranks: [
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Creator",
|
||||
Permissions: 16351
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Warlord",
|
||||
Permissions: 14303
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_General",
|
||||
Permissions: 4318
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Officer",
|
||||
Permissions: 4314
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Leader",
|
||||
Permissions: 4106
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Sage",
|
||||
Permissions: 4304
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Soldier",
|
||||
Permissions: 4098
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Initiate",
|
||||
Permissions: 4096
|
||||
},
|
||||
{
|
||||
Name: "/Lotus/Language/Game/Rank_Utility",
|
||||
Permissions: 4096
|
||||
}
|
||||
],
|
||||
Ranks: guild.Ranks,
|
||||
Tier: 1,
|
||||
Vault: getGuildVault(guild),
|
||||
Class: guild.Class,
|
||||
|
@ -26,6 +26,7 @@ export interface IGuildDatabase {
|
||||
Name: string;
|
||||
MOTD: string;
|
||||
LongMOTD?: ILongMOTD;
|
||||
Ranks: IGuildRank[];
|
||||
|
||||
DojoComponents: IDojoComponentDatabase[];
|
||||
DojoCapacity: number;
|
||||
@ -57,6 +58,27 @@ export interface ILongMOTD {
|
||||
//authorGuildName: "";
|
||||
}
|
||||
|
||||
// 32 seems to be reserved
|
||||
export enum GuildPermission {
|
||||
Ruler = 1, // Change clan hierarchy
|
||||
Advertiser = 8192,
|
||||
Recruiter = 2, // Invite members
|
||||
Regulator = 4, // Kick members
|
||||
Promoter = 8, // Promote and demote members
|
||||
Architect = 16, // Create and destroy rooms
|
||||
Decorator = 1024, // Create and destroy decos
|
||||
Treasurer = 64, // Contribute from vault and edit tax rate
|
||||
Tech = 128, // Queue research
|
||||
ChatModerator = 512,
|
||||
Herald = 2048, // Change MOTD
|
||||
Fabricator = 4096 // Replicate research
|
||||
}
|
||||
|
||||
export interface IGuildRank {
|
||||
Name: string;
|
||||
Permissions: number;
|
||||
}
|
||||
|
||||
export interface IGuildMemberDatabase {
|
||||
accountId: Types.ObjectId;
|
||||
guildId: Types.ObjectId;
|
||||
|
Loading…
x
Reference in New Issue
Block a user