Public Repository for the Magicbane Shadowbane Emulator
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

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;
}
}