Skip to content

Commit 36d164a

Browse files
committed
implement Player.leaveClan
1 parent 838e47b commit 36d164a

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

backend/structures/Player.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import AntiCheat from "./AntiCheat";
55
import { wsSocket } from "./Socket";
66
import * as EliminationRoom from "./EliminationRoom";
77
import LevelSystem from "../utils/LevelSystem";
8-
import { ClanData } from "./Clan";
8+
import Clan, { ClanData } from "./Clan";
9+
import ClanController from "../clans/ClanController";
910

1011
export enum Role {
1112
GUEST = -1,
@@ -183,6 +184,21 @@ export default class Player {
183184
}
184185
}
185186

187+
public static async joinClan(clan: ClanData, player: Player | String, base: Base): Promise<ClanData> {
188+
const targetPlayer = player instanceof Player ? player.owner : player,
189+
parsedMembers = JSON.parse(clan.members);
190+
191+
if (!clan.joinable) throw new Error("This clan is not joinable");
192+
if (parsedMembers.includes(targetPlayer)) throw new Error("Requested user is already in this clan");
193+
if (parsedMembers.length >= ClanController.MemberLimit) throw new Error("Clan is full");
194+
if (await base.db.get("SELECT clan FROM accounts WHERE clan = ?", clan.name)) throw new Error("Requested user is already in another clan");
195+
196+
parsedMembers.push(targetPlayer);
197+
await base.db.run("UPDATE accounts SET clan = ? WHERE username = ?", clan.name, targetPlayer);
198+
await base.db.run("UPDATE clans SET members = ? WHERE name = ?", JSON.stringify(parsedMembers), clan.name);
199+
return clan;
200+
}
201+
186202
public static async leaveClan(clan: ClanData, player: Player | string, base: Base): Promise<ClanData> {
187203
const targetPlayer = player instanceof Player ? player.owner : player,
188204
parsedMembers = JSON.parse(clan.members);

0 commit comments

Comments
 (0)