@@ -16,6 +16,7 @@ import FileAsync from 'lowdb/adapters/FileAsync';
16
16
import { PacketFactory } from "../packets/PacketFactory" ;
17
17
import { getWeaponDamage , getWeaponAttackDetails , getItemCost , getPlaceable } from "../items/items" ;
18
18
import { gameObjectSizes , GameObjectType } from "../gameobjects/gameobjects" ;
19
+ import { isNull } from 'util' ;
19
20
20
21
let currentGame : Game | null = null ;
21
22
@@ -120,6 +121,13 @@ export default class Game {
120
121
}
121
122
122
123
this . state . gameObjects . filter ( gameObj => gameObj . ownerSID != client . player ?. id ) ;
124
+
125
+ let tribeIndex = this . state . tribes . findIndex (
126
+ tribe => tribe . ownerSID == client . player ?. id
127
+ ) ;
128
+
129
+ if ( tribeIndex > - 1 )
130
+ this . state . removeTribe ( tribeIndex ) ;
123
131
}
124
132
} ) ;
125
133
@@ -394,11 +402,14 @@ export default class Game {
394
402
) ;
395
403
396
404
for ( let hitPlayer of hitPlayers ) {
405
+ if ( hitPlayer . clanName == player . clanName && hitPlayer . clanName != null ) continue ;
406
+
397
407
let dmg = getWeaponDamage ( player . weapon , player . weaponVariant ) ;
398
408
399
409
hitPlayer . health -= dmg ;
400
410
if ( hitPlayer . health <= 0 && hitPlayer . client ) {
401
411
this . killPlayer ( hitPlayer ) ;
412
+ player . kills ++ ;
402
413
} else {
403
414
let attackDetails = getWeaponAttackDetails ( player . weapon ) ;
404
415
let knockback = attackDetails . kbMultiplier * 0.3 ;
@@ -706,14 +717,37 @@ export default class Game {
706
717
let tribe = this . state . tribes . find (
707
718
( tribe ) => tribe . name === packet . data [ 0 ]
708
719
) ;
720
+ let ownerClient = this . state . players . find ( player => player . id === tribe ?. ownerSID ) ?. client ;
709
721
710
722
if ( tribe ) {
711
- client . player . clanName = tribe . name ;
723
+ ownerClient ?. tribeJoinQueue . push ( client . player ) ;
724
+ ownerClient ?. socket . send (
725
+ packetFactory . serializePacket (
726
+ new Packet (
727
+ PacketType . JOIN_REQUEST ,
728
+ [ client . player . id , client . player . name ]
729
+ )
730
+ )
731
+ )
732
+ }
712
733
713
- if ( ! tribe . membersSIDs . includes ( client . player . id ) )
714
- tribe . membersSIDs . push ( client . player . id ) ;
734
+ }
735
+ break ;
736
+ case PacketType . CLAN_ACC_JOIN :
737
+ if ( client . tribeJoinQueue . length && client . player && packet . data [ 1 ] ) {
738
+ let tribe = this . state . tribes . find (
739
+ ( tribe ) => tribe . ownerSID === client . player ?. id
740
+ ) ;
741
+ let player = client . tribeJoinQueue [ 0 ] ;
742
+
743
+ if ( tribe && player . clanName === null ) {
744
+ player . clanName = tribe . name ;
745
+
746
+ this . state . joinClan ( player , tribe ) ;
715
747
}
716
748
}
749
+
750
+ client . tribeJoinQueue . splice ( 0 , 1 ) ;
717
751
break ;
718
752
case PacketType . AUTO_ATK :
719
753
if ( client . player )
@@ -786,6 +820,19 @@ export default class Game {
786
820
}
787
821
}
788
822
break ;
823
+ case PacketType . LEAVE_CLAN :
824
+ if ( client . player ) {
825
+ let tribeIndex = this . state . tribes . findIndex ( tribe => tribe . membersSIDs . includes ( client . player ?. id as number ) ) ;
826
+ let tribe = this . state . tribes [ tribeIndex ] ;
827
+
828
+ if ( tribe && tribe . ownerSID == client . player . id ) {
829
+ this . state . removeTribe ( tribeIndex ) ;
830
+ client . tribeJoinQueue = [ ] ;
831
+ } else {
832
+ this . state . leaveClan ( client . player , tribeIndex ) ;
833
+ }
834
+ }
835
+ break ;
789
836
}
790
837
}
791
838
}
0 commit comments