XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFESpaceNinjaServer

feat: edit clan hierarchy (#1164)

Re #1144 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1164

b7800b6d
Sainan <sainan@calamity.inc>
提交于

代码差异

5 个文件 +91 -39
Added src/controllers/api/customizeGuildRanksController.ts +16 -0
@@ -0,0 +1,16 @@
1 import { getGuildForRequest } from "@/src/services/guildService";
2 import { IGuildRank } from "@/src/types/guildTypes";
3 import { RequestHandler } from "express";
4
5 export const customizeGuildRanksController: RequestHandler = async (req, res) => {
6 const guild = await getGuildForRequest(req);
7 const payload = JSON.parse(String(req.body)) as ICustomizeGuildRanksRequest;
8 // TODO: Verify permissions
9 guild.Ranks = payload.GuildRanks;
10 await guild.save();
11 res.end();
12 };
13
14 interface ICustomizeGuildRanksRequest {
15 GuildRanks: IGuildRank[];
16 }
Modified src/models/guildModel.ts +50 -1
@@ -6,7 +6,8 @@ import {
6 6 ILongMOTD,
7 7 IGuildMemberDatabase,
8 8 IGuildLogClassChange,
9 IGuildLogTechChange
9 IGuildLogTechChange,
10 IGuildRank
10 11 } from "@/src/types/guildTypes";
11 12 import { Document, Model, model, Schema, Types } from "mongoose";
12 13 import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
@@ -58,6 +59,53 @@ const longMOTDSchema = new Schema<ILongMOTD>(
58 59 { _id: false }
59 60 );
60 61
62 const guildRankSchema = new Schema<IGuildRank>(
63 {
64 Name: String,
65 Permissions: Number
66 },
67 { _id: false }
68 );
69
70 const defaultRanks: IGuildRank[] = [
71 {
72 Name: "/Lotus/Language/Game/Rank_Creator",
73 Permissions: 16351
74 },
75 {
76 Name: "/Lotus/Language/Game/Rank_Warlord",
77 Permissions: 16351
78 },
79 {
80 Name: "/Lotus/Language/Game/Rank_General",
81 Permissions: 4318
82 },
83 {
84 Name: "/Lotus/Language/Game/Rank_Officer",
85 Permissions: 4314
86 },
87 {
88 Name: "/Lotus/Language/Game/Rank_Leader",
89 Permissions: 4106
90 },
91 {
92 Name: "/Lotus/Language/Game/Rank_Sage",
93 Permissions: 4304
94 },
95 {
96 Name: "/Lotus/Language/Game/Rank_Soldier",
97 Permissions: 4098
98 },
99 {
100 Name: "/Lotus/Language/Game/Rank_Initiate",
101 Permissions: 4096
102 },
103 {
104 Name: "/Lotus/Language/Game/Rank_Utility",
105 Permissions: 4096
106 }
107 ];
108
61 109 const guildLogTechChangeSchema = new Schema<IGuildLogTechChange>(
62 110 {
63 111 dateTime: Date,
@@ -81,6 +129,7 @@ const guildSchema = new Schema<IGuildDatabase>(
81 129 Name: { type: String, required: true, unique: true },
82 130 MOTD: { type: String, default: "" },
83 131 LongMOTD: { type: longMOTDSchema, default: undefined },
132 Ranks: { type: [guildRankSchema], default: defaultRanks },
84 133 DojoComponents: { type: [dojoComponentSchema], default: [] },
85 134 DojoCapacity: { type: Number, default: 100 },
86 135 DojoEnergy: { type: Number, default: 5 },
Modified src/routes/api.ts +2 -0
@@ -22,6 +22,7 @@ import { contributeToDojoComponentController } from "@/src/controllers/api/contr
22 22 import { contributeToVaultController } from "@/src/controllers/api/contributeToVaultController";
23 23 import { createGuildController } from "@/src/controllers/api/createGuildController";
24 24 import { creditsController } from "@/src/controllers/api/creditsController";
25 import { customizeGuildRanksController } from "@/src/controllers/api/customizeGuildRanksController";
25 26 import { declineGuildInviteController } from "@/src/controllers/api/declineGuildInviteController";
26 27 import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
27 28 import { destroyDojoDecoController } from "@/src/controllers/api/destroyDojoDecoController";
@@ -171,6 +172,7 @@ apiRouter.post("/contributeGuildClass.php", contributeGuildClassController);
171 172 apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
172 173 apiRouter.post("/contributeToVault.php", contributeToVaultController);
173 174 apiRouter.post("/createGuild.php", createGuildController);
175 apiRouter.post("/customizeGuildRanks.php", customizeGuildRanksController);
174 176 apiRouter.post("/destroyDojoDeco.php", destroyDojoDecoController);
175 177 apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);
176 178 apiRouter.post("/drones.php", dronesController);
Modified src/services/guildService.ts +1 -38
@@ -86,44 +86,7 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s
86 86 MOTD: guild.MOTD,
87 87 LongMOTD: guild.LongMOTD,
88 88 Members: members,
89 Ranks: [
90 {
91 Name: "/Lotus/Language/Game/Rank_Creator",
92 Permissions: 16351
93 },
94 {
95 Name: "/Lotus/Language/Game/Rank_Warlord",
96 Permissions: 14303
97 },
98 {
99 Name: "/Lotus/Language/Game/Rank_General",
100 Permissions: 4318
101 },
102 {
103 Name: "/Lotus/Language/Game/Rank_Officer",
104 Permissions: 4314
105 },
106 {
107 Name: "/Lotus/Language/Game/Rank_Leader",
108 Permissions: 4106
109 },
110 {
111 Name: "/Lotus/Language/Game/Rank_Sage",
112 Permissions: 4304
113 },
114 {
115 Name: "/Lotus/Language/Game/Rank_Soldier",
116 Permissions: 4098
117 },
118 {
119 Name: "/Lotus/Language/Game/Rank_Initiate",
120 Permissions: 4096
121 },
122 {
123 Name: "/Lotus/Language/Game/Rank_Utility",
124 Permissions: 4096
125 }
126 ],
89 Ranks: guild.Ranks,
127 90 Tier: 1,
128 91 Vault: getGuildVault(guild),
129 92 Class: guild.Class,
Modified src/types/guildTypes.ts +22 -0
@@ -26,6 +26,7 @@ export interface IGuildDatabase {
26 26 Name: string;
27 27 MOTD: string;
28 28 LongMOTD?: ILongMOTD;
29 Ranks: IGuildRank[];
29 30
30 31 DojoComponents: IDojoComponentDatabase[];
31 32 DojoCapacity: number;
@@ -57,6 +58,27 @@ export interface ILongMOTD {
57 58 //authorGuildName: "";
58 59 }
59 60
61 // 32 seems to be reserved
62 export enum GuildPermission {
63 Ruler = 1, // Change clan hierarchy
64 Advertiser = 8192,
65 Recruiter = 2, // Invite members
66 Regulator = 4, // Kick members
67 Promoter = 8, // Promote and demote members
68 Architect = 16, // Create and destroy rooms
69 Decorator = 1024, // Create and destroy decos
70 Treasurer = 64, // Contribute from vault and edit tax rate
71 Tech = 128, // Queue research
72 ChatModerator = 512,
73 Herald = 2048, // Change MOTD
74 Fabricator = 4096 // Replicate research
75 }
76
77 export interface IGuildRank {
78 Name: string;
79 Permissions: number;
80 }
81
60 82 export interface IGuildMemberDatabase {
61 83 accountId: Types.ObjectId;
62 84 guildId: Types.ObjectId;