|  |  | @ -1,6 +1,8 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | package engine.gameManager; |  |  |  | package engine.gameManager; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import engine.Enum; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.InterestManagement.WorldGrid; |  |  |  | import engine.InterestManagement.WorldGrid; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import engine.exception.MsgSendException; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.math.Vector3fImmutable; |  |  |  | import engine.math.Vector3fImmutable; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.objects.*; |  |  |  | import engine.objects.*; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.server.MBServerStatics; |  |  |  | import engine.server.MBServerStatics; | 
			
		
	
	
		
		
			
				
					|  |  | @ -57,6 +59,8 @@ public class ArenaManager { | 
			
		
	
		
		
			
				
					
					|  |  |  |             Collections.shuffle(playerQueue); |  |  |  |             Collections.shuffle(playerQueue); | 
			
		
	
		
		
			
				
					
					|  |  |  |             Arena newArena = new Arena(); |  |  |  |             Arena newArena = new Arena(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //set starting time
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             newArena.startTime = System.currentTimeMillis(); | 
			
		
	
		
		
			
				
					
					|  |  |  |             //decide an arena location
 |  |  |  |             //decide an arena location
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             newArena.loc = selectRandomArenaLocation(); |  |  |  |             newArena.loc = selectRandomArenaLocation(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -65,15 +69,16 @@ public class ArenaManager { | 
			
		
	
		
		
			
				
					
					|  |  |  |             newArena.player2 = playerQueue.remove(0); |  |  |  |             newArena.player2 = playerQueue.remove(0); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             // Teleport players to the arena location
 |  |  |  |             // Teleport players to the arena location
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             MovementManager.translocate(newArena.player1, newArena.loc, Regions.GetRegionForTeleport(newArena.loc)); |  |  |  |             Zone sdr = ZoneManager.getZoneByUUID(656); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             MovementManager.translocate(newArena.player2, newArena.loc, Regions.GetRegionForTeleport(newArena.loc)); |  |  |  |             MovementManager.translocate(newArena.player1, Vector3fImmutable.getRandomPointOnCircle(newArena.loc,75f), null); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             MovementManager.translocate(newArena.player2, Vector3fImmutable.getRandomPointOnCircle(newArena.loc,75f), null); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             // Add the new arena to the active arenas list
 |  |  |  |             // Add the new arena to the active arenas list
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             activeArenas.add(newArena); |  |  |  |             activeArenas.add(newArena); | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static void endArena(Arena arena, PlayerCharacter winner, PlayerCharacter loser, String condition) { |  |  |  |     public static void endArena(Arena arena, PlayerCharacter winner, PlayerCharacter loser, String condition) throws MsgSendException { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         if (winner != null && loser != null) { |  |  |  |         if (winner != null && loser != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             Logger.info("[ARENA] The fight between {} and {} is concluded. Victor: {}", |  |  |  |             Logger.info("[ARENA] The fight between {} and {} is concluded. Victor: {}", | 
			
		
	
		
		
			
				
					
					|  |  |  |                     arena.player1.getName(), arena.player2.getName(), winner.getName()); |  |  |  |                     arena.player1.getName(), arena.player2.getName(), winner.getName()); | 
			
		
	
	
		
		
			
				
					|  |  | @ -81,7 +86,14 @@ public class ArenaManager { | 
			
		
	
		
		
			
				
					
					|  |  |  |             Logger.info("[ARENA] The fight between {} and {} is concluded. No Winner Declared.", |  |  |  |             Logger.info("[ARENA] The fight between {} and {} is concluded. No Winner Declared.", | 
			
		
	
		
		
			
				
					
					|  |  |  |                     arena.player1.getName(), arena.player2.getName()); |  |  |  |                     arena.player1.getName(), arena.player2.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |         if(loser != null) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             PlayerCharacter.forceRespawn(loser); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             loser.removeEffectBySource(Enum.EffectSourceType.DeathShroud,41,false); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Teleport players to the arena location
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Zone sdr = ZoneManager.getZoneByUUID(656); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         MovementManager.translocate(arena.player1, Vector3fImmutable.getRandomPointOnCircle(sdr.getLoc(),50f), null); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         MovementManager.translocate(arena.player2, Vector3fImmutable.getRandomPointOnCircle(sdr.getLoc(),50f), null); | 
			
		
	
		
		
			
				
					
					|  |  |  |         activeArenas.remove(arena); |  |  |  |         activeArenas.remove(arena); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -91,20 +103,17 @@ public class ArenaManager { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         while (!locSet) { |  |  |  |         while (!locSet) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             try { |  |  |  |             try { | 
			
		
	
		
		
			
				
					
					|  |  |  |                 // Generate random X and Z coordinates within the range [10,000, 90,000]
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 //float x = ThreadLocalRandom.current().nextInt(30000, 50000);
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 //float z = ThreadLocalRandom.current().nextInt(30000, 50000);
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 float x = ThreadLocalRandom.current().nextInt(114300, 123600); |  |  |  |                 float x = ThreadLocalRandom.current().nextInt(114300, 123600); | 
			
		
	
		
		
			
				
					
					|  |  |  |                 float z = ThreadLocalRandom.current().nextInt(82675, 91700); |  |  |  |                 float z = ThreadLocalRandom.current().nextInt(82675, 91700); | 
			
		
	
		
		
			
				
					
					|  |  |  |                 float y = 0; // Y coordinate is always 0
 |  |  |  |                 float y = 0; // Y coordinate is always 0
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 loc = new Vector3fImmutable(x, y, z); |  |  |  |                 loc = new Vector3fImmutable(x, y, z * -1); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 Zone zone = ZoneManager.findSmallestZone(loc); |  |  |  |                 //Zone zone = ZoneManager.findSmallestZone(loc);
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 if (zone.isContinent() && !ZoneManager.getSeaFloor().equals(zone)) { |  |  |  |                 //if (zone.isContinent() && !ZoneManager.getSeaFloor().equals(zone)) {
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     HashSet<AbstractWorldObject> inRange = WorldGrid.getObjectsInRangePartial(loc,250f, MBServerStatics.MASK_PLAYER); |  |  |  |                 HashSet<AbstractWorldObject> inRange = WorldGrid.getObjectsInRangePartial(loc,500f, MBServerStatics.MASK_PLAYER); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     if(inRange.isEmpty()) |  |  |  |                 if(inRange.isEmpty()) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                         locSet = true; |  |  |  |                     locSet = true; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                 //}
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             }catch(Exception e){ |  |  |  |             }catch(Exception e){ | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |