@@ -103,7 +103,6 @@ export class BaseGame<State extends BaseState> {
103103 onAddPlayer ?( user : User , ctx : string ) : ActionResponse ;
104104 onAfterAddPlayer ?( player : Player ) : void ;
105105 onRemovePlayer ?( player : Player , ctx : string | User ) : ActionResponse < 'end' | null > ;
106- onForfeitPlayer ?( player : Player , ctx : string | User ) : ActionResponse ;
107106 onReplacePlayer ?( turn : BaseState [ 'turn' ] , withPlayer : User ) : ActionResponse ;
108107 onAfterReplacePlayer ?( player : Player ) : void ;
109108 onStart ?( ) : ActionResponse ;
@@ -357,9 +356,9 @@ export class BaseGame<State extends BaseState> {
357356 const staffAction = typeof ctx === 'string' ;
358357 const player = Object . values ( this . players ) . find ( p => p . id === ( typeof ctx === 'string' ? ctx : ctx . id ) ) ;
359358 if ( ! player ) return { success : false , error : this . $T ( 'GAME.NOT_PLAYING' ) } ;
359+ const removePlayer = this . onRemovePlayer ?.( player , ctx ) ;
360+ if ( removePlayer ?. success === false ) return removePlayer ;
360361 if ( this . started ) {
361- const forfeitPlayer = this . onForfeitPlayer ?.( player , ctx ) ;
362- if ( forfeitPlayer ?. success === false ) return forfeitPlayer ;
363362 player . out = true ;
364363 this . spectators . push ( player . id ) ;
365364 this . log . push ( { action : staffAction ? 'dq' : 'forfeit' , turn : player . turn , time : new Date ( ) , ctx : null } ) ;
@@ -370,14 +369,13 @@ export class BaseGame<State extends BaseState> {
370369 cb : ( ) => {
371370 const playersLeft = Object . values ( this . players ) . filter ( ( player : Player ) => ! player . out ) ;
372371 if ( playersLeft . length <= 1 ) this . end ( 'dq' ) ;
372+ else if ( removePlayer ?. data === 'end' ) this . end ( ) ;
373373 else if ( this . turn === player . turn ) this . endTurn ( ) ; // Needs to be run AFTER consumer has finished DQing
374374 this . backup ( ) ;
375375 } ,
376376 } ,
377377 } ;
378378 }
379- const removePlayer = this . onRemovePlayer ?.( player , ctx ) ;
380- if ( removePlayer ?. success === false ) return removePlayer ;
381379 delete this . players [ player . turn ] ;
382380 return {
383381 success : true ,
0 commit comments