Closes gh-61. Resetting zone when last player leaves (joining when a zone has been deserted for a while kinda sucks).

This commit is contained in:
taoneill 2011-02-23 12:58:50 -05:00
parent b775997046
commit 29353f9c73

View File

@ -964,33 +964,43 @@ public class Warzone {
public void handlePlayerLeave(Player player, Location destination) { public void handlePlayerLeave(Player player, Location destination) {
Team playerTeam = war.getPlayerTeam(player.getName()); Team playerTeam = war.getPlayerTeam(player.getName());
if(playerTeam !=null) { if(playerTeam !=null) {
Warzone zone = war.getPlayerTeamWarzone(player.getName());
playerTeam.removePlayer(player.getName()); playerTeam.removePlayer(player.getName());
playerTeam.resetSign(); playerTeam.resetSign();
if(zone != null) { if(this.isFlagThief(player.getName())) {
if(zone.isFlagThief(player.getName())) { Team victim = this.getVictimTeamForThief(player.getName());
Team victim = zone.getVictimTeamForThief(player.getName()); victim.getFlagVolume().resetBlocks();
victim.getFlagVolume().resetBlocks(); victim.initializeTeamFlag();
victim.initializeTeamFlag(); this.removeThief(player.getName());
zone.removeThief(player.getName()); for(Team t : this.getTeams()) {
for(Team t : zone.getTeams()) { t.teamcast("Team " + victim.getName() + " flag was returned.");
t.teamcast("Team " + victim.getName() + " flag was returned.");
}
}
if(zone.getLobby() != null) {
zone.getLobby().resetTeamGateSign(playerTeam);
}
if(zone.hasPlayerInventory(player.getName())) {
zone.restorePlayerInventory(player);
}
player.teleportTo(destination);
war.msg(player, "Left the zone. Your inventory has (hopefully) been restored.");
if(war.getWarHub() != null) {
war.getWarHub().resetZoneSign(zone);
} }
} }
if(this.getLobby() != null) {
this.getLobby().resetTeamGateSign(playerTeam);
}
if(this.hasPlayerInventory(player.getName())) {
this.restorePlayerInventory(player);
}
player.teleportTo(destination);
war.msg(player, "Left the zone. Your inventory has (hopefully) been restored.");
if(war.getWarHub() != null) {
war.getWarHub().resetZoneSign(this);
}
boolean zoneEmpty = true;
for(Team team : this.getTeams()) {
if(team.getPlayers().size() > 0) {
zoneEmpty = false;
break;
}
}
if(zoneEmpty) {
// reset the zone for a new game when the last player leaves
int resetBlocks = this.getVolume().resetBlocks();
this.initializeZone();
war.logInfo("Last player left warzone " + this.getName() + ". " + resetBlocks + " blocks reset automatically.");
}
} }
} }
public boolean isEnemyTeamFlagBlock(Team playerTeam, Block block) { public boolean isEnemyTeamFlagBlock(Team playerTeam, Block block) {