You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
3.1 KiB
82 lines
3.1 KiB
package engine.objects; |
|
|
|
import engine.InterestManagement.WorldGrid; |
|
import engine.gameManager.ArenaManager; |
|
import engine.gameManager.ChatManager; |
|
import engine.gameManager.MovementManager; |
|
import engine.math.Vector3fImmutable; |
|
import engine.server.MBServerStatics; |
|
|
|
import java.util.HashSet; |
|
|
|
public class Arena { |
|
public PlayerCharacter player1; |
|
public PlayerCharacter player2; |
|
public Long startTime; |
|
public Vector3fImmutable loc; |
|
|
|
public Arena(){ |
|
|
|
} |
|
public Boolean disqualify() { |
|
HashSet<AbstractWorldObject> inRange = WorldGrid.getObjectsInRangePartial(this.loc, 250f, MBServerStatics.MASK_PLAYER); |
|
HashSet<AbstractWorldObject> warningRange = WorldGrid.getObjectsInRangePartial(this.loc, 500f, MBServerStatics.MASK_PLAYER); |
|
for(AbstractWorldObject obj : warningRange){ |
|
PlayerCharacter pc = (PlayerCharacter)obj; |
|
if(pc.equals(this.player1) || pc.equals(this.player2)) |
|
continue; |
|
|
|
ChatManager.chatSystemInfo(pc, "WARNING!! You are entering an arena zone!"); |
|
} |
|
//boot out all non competitors |
|
for(AbstractWorldObject obj : inRange){ |
|
if(obj.equals(this.player1)) |
|
continue; |
|
|
|
if(obj.equals(this.player2)) |
|
continue; |
|
|
|
PlayerCharacter intruder = (PlayerCharacter)obj; |
|
MovementManager.translocate(intruder,new Vector3fImmutable(88853,32,45079),Regions.GetRegionForTeleport(new Vector3fImmutable(88853,32,45079))); |
|
} |
|
|
|
if (!inRange.contains(this.player1) && inRange.contains(this.player2)) { |
|
ArenaManager.endArena(this,this.player2,this.player1,"Player Has Left Arena"); |
|
return true; |
|
} else if (!inRange.contains(this.player2) && inRange.contains(this.player1)) { |
|
ArenaManager.endArena(this,this.player1,this.player2,"Player Has Left Arena"); |
|
return true; |
|
}else if (!inRange.contains(this.player2) && !inRange.contains(this.player1)) { |
|
ArenaManager.endArena(this,null,null,"Both Parties Have Left The Arena"); |
|
return true; |
|
} |
|
return false; |
|
} |
|
|
|
public Boolean checkToComplete(){ |
|
|
|
if(this.startTime == null) |
|
this.startTime = System.currentTimeMillis(); |
|
|
|
if(System.currentTimeMillis() - this.startTime < 10000L) |
|
return false; |
|
|
|
if(this.disqualify()) |
|
return true; |
|
|
|
if(!this.player1.isAlive() && this.player2.isAlive()){ |
|
ArenaManager.endArena(this,this.player2,this.player1,"Player Has Died"); |
|
return true; |
|
} else if(this.player1.isAlive() && !this.player2.isAlive()){ |
|
ArenaManager.endArena(this,this.player1,this.player2,"Player Has Died"); |
|
return true; |
|
} else if(!this.player1.isAlive() && !this.player2.isAlive()){ |
|
ArenaManager.endArena(this,null,null,"Both Players Have Died"); |
|
return true; |
|
} else if(this.startTime + 300000L < System.currentTimeMillis()){ |
|
ArenaManager.endArena(this,null,null,"Time Has Elapsed"); |
|
return true; |
|
} |
|
return false; |
|
} |
|
}
|
|
|