@@ -5,7 +5,8 @@ import AntiCheat from "./AntiCheat";
55import { wsSocket } from "./Socket" ;
66import * as EliminationRoom from "./EliminationRoom" ;
77import LevelSystem from "../utils/LevelSystem" ;
8- import { ClanData } from "./Clan" ;
8+ import Clan , { ClanData } from "./Clan" ;
9+ import ClanController from "../clans/ClanController" ;
910
1011export 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