feat: edit clan hierarchy (#1164)

Re #1144

Reviewed-on: OpenWF/SpaceNinjaServer#1164
This commit is contained in:
Sainan 2025-03-13 02:14:29 -07:00
parent 516df61633
commit b7800b6d20
5 changed files with 91 additions and 39 deletions

View 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[];
}

View File

@ -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 },

View File

@ -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);

View File

@ -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,

View File

@ -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;