feat: edit clan hierarchy (#1164)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled

Re #1144

Reviewed-on: #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, ILongMOTD,
IGuildMemberDatabase, IGuildMemberDatabase,
IGuildLogClassChange, IGuildLogClassChange,
IGuildLogTechChange IGuildLogTechChange,
IGuildRank
} from "@/src/types/guildTypes"; } from "@/src/types/guildTypes";
import { Document, Model, model, Schema, Types } from "mongoose"; import { Document, Model, model, Schema, Types } from "mongoose";
import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel"; import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
@ -58,6 +59,53 @@ const longMOTDSchema = new Schema<ILongMOTD>(
{ _id: false } { _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>( const guildLogTechChangeSchema = new Schema<IGuildLogTechChange>(
{ {
dateTime: Date, dateTime: Date,
@ -81,6 +129,7 @@ const guildSchema = new Schema<IGuildDatabase>(
Name: { type: String, required: true, unique: true }, Name: { type: String, required: true, unique: true },
MOTD: { type: String, default: "" }, MOTD: { type: String, default: "" },
LongMOTD: { type: longMOTDSchema, default: undefined }, LongMOTD: { type: longMOTDSchema, default: undefined },
Ranks: { type: [guildRankSchema], default: defaultRanks },
DojoComponents: { type: [dojoComponentSchema], default: [] }, DojoComponents: { type: [dojoComponentSchema], default: [] },
DojoCapacity: { type: Number, default: 100 }, DojoCapacity: { type: Number, default: 100 },
DojoEnergy: { type: Number, default: 5 }, 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 { contributeToVaultController } from "@/src/controllers/api/contributeToVaultController";
import { createGuildController } from "@/src/controllers/api/createGuildController"; import { createGuildController } from "@/src/controllers/api/createGuildController";
import { creditsController } from "@/src/controllers/api/creditsController"; import { creditsController } from "@/src/controllers/api/creditsController";
import { customizeGuildRanksController } from "@/src/controllers/api/customizeGuildRanksController";
import { declineGuildInviteController } from "@/src/controllers/api/declineGuildInviteController"; import { declineGuildInviteController } from "@/src/controllers/api/declineGuildInviteController";
import { deleteSessionController } from "@/src/controllers/api/deleteSessionController"; import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
import { destroyDojoDecoController } from "@/src/controllers/api/destroyDojoDecoController"; import { destroyDojoDecoController } from "@/src/controllers/api/destroyDojoDecoController";
@ -171,6 +172,7 @@ apiRouter.post("/contributeGuildClass.php", contributeGuildClassController);
apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController); apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
apiRouter.post("/contributeToVault.php", contributeToVaultController); apiRouter.post("/contributeToVault.php", contributeToVaultController);
apiRouter.post("/createGuild.php", createGuildController); apiRouter.post("/createGuild.php", createGuildController);
apiRouter.post("/customizeGuildRanks.php", customizeGuildRanksController);
apiRouter.post("/destroyDojoDeco.php", destroyDojoDecoController); apiRouter.post("/destroyDojoDeco.php", destroyDojoDecoController);
apiRouter.post("/dojoComponentRush.php", dojoComponentRushController); apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);
apiRouter.post("/drones.php", dronesController); apiRouter.post("/drones.php", dronesController);

View File

@ -86,44 +86,7 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s
MOTD: guild.MOTD, MOTD: guild.MOTD,
LongMOTD: guild.LongMOTD, LongMOTD: guild.LongMOTD,
Members: members, Members: members,
Ranks: [ Ranks: guild.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
}
],
Tier: 1, Tier: 1,
Vault: getGuildVault(guild), Vault: getGuildVault(guild),
Class: guild.Class, Class: guild.Class,

View File

@ -26,6 +26,7 @@ export interface IGuildDatabase {
Name: string; Name: string;
MOTD: string; MOTD: string;
LongMOTD?: ILongMOTD; LongMOTD?: ILongMOTD;
Ranks: IGuildRank[];
DojoComponents: IDojoComponentDatabase[]; DojoComponents: IDojoComponentDatabase[];
DojoCapacity: number; DojoCapacity: number;
@ -57,6 +58,27 @@ export interface ILongMOTD {
//authorGuildName: ""; //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 { export interface IGuildMemberDatabase {
accountId: Types.ObjectId; accountId: Types.ObjectId;
guildId: Types.ObjectId; guildId: Types.ObjectId;