Rewrite of how /vanish is handled in game servers (PC-Bug-413)

Fixes all /vanish based issues where players would be not correctly
handled while toggling /vanish in game servers.
This commit is contained in:
Sam 2016-06-03 13:13:19 +01:00
parent ee10751e23
commit 1ff06adf18

View File

@ -82,6 +82,7 @@ import nautilus.game.arcade.command.WriteCommand;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.game.Game;
import nautilus.game.arcade.game.Game.GameState;
import nautilus.game.arcade.game.GameTeam.PlayerState;
import nautilus.game.arcade.game.GameServerConfig;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.games.event.EventModule;
@ -627,37 +628,11 @@ public class ArcadeManager extends MiniPlugin implements IRelation
@EventHandler
public void StaffIncognito(IncognitoStatusChangeEvent event)
{
if (event.getNewState() && _game != null && _game.IsPlaying(event.getPlayer()) && _game.IsLive())
{
addSpectator(event.getPlayer(), true);
event.setCancelled(true);
return;
}
if (event.getNewState())
if(event.getNewState()) //Is going into incognito
{
UtilServer.broadcast(F.sys("Quit", event.getPlayer().getName()));
if (_game == null || _game.GetState() != GameState.Live)
{
_specList.add(event.getPlayer());
}
}
else
{
UtilServer.broadcast(F.sys("Join", event.getPlayer().getName()));
if (_game != null && isSpectator(event.getPlayer()))
{
if (_game.GetState() != GameState.Live)
{
_specList.remove(event.getPlayer());
}
event.show(false);
}
}
if (_game.GetCountdown() > 0 && event.getNewState())
if(_game.GetCountdown() > 0) //Lobby is counting down
{
// Clean
if (_game != null)
@ -676,9 +651,33 @@ public class ArcadeManager extends MiniPlugin implements IRelation
}
}
}
else if (!(_game.IsLive() && event.getNewState()))
else if(_game.GetState() != GameState.Recruit) //Game is NOT in lobby
{
addSpectator(event.getPlayer(), true);
_specList.add(event.getPlayer());
if(_game.GetTeam(event.getPlayer()) != null)
_game.GetTeam(event.getPlayer()).SetPlayerState(event.getPlayer(), PlayerState.OUT);
}
else //Game is in lobby
{
_specList.add(event.getPlayer());
}
}
else //Is coming out of incognito
{
UtilServer.broadcast(F.sys("Join", event.getPlayer().getName()));
if(!_game.IsLive())
{
_specList.remove(event.getPlayer());
if(_game.GetTeam(event.getPlayer()) != null)
_game.GetTeam(event.getPlayer()).SetPlayerState(event.getPlayer(), PlayerState.IN);
}
if (_game != null && isSpectator(event.getPlayer()))
{
event.show(false);
}
}
}