From 61e4a4aed4537bc904a15a2d4925ed7e5183da68 Mon Sep 17 00:00:00 2001
From: MagicBot <MagicBot@magicbane.com>
Date: Wed, 7 Jun 2023 13:47:25 -0400
Subject: [PATCH] Realmmap loaded from config to assist with custom maps.

---
 src/engine/gameManager/ConfigManager.java    |   2 +
 src/engine/net/client/msg/WorldRealmMsg.java |   3 +-
 src/engine/server/world/WorldServer.java     | 163 +++++++++----------
 3 files changed, 83 insertions(+), 85 deletions(-)

diff --git a/src/engine/gameManager/ConfigManager.java b/src/engine/gameManager/ConfigManager.java
index a39e5264..8af95ed7 100644
--- a/src/engine/gameManager/ConfigManager.java
+++ b/src/engine/gameManager/ConfigManager.java
@@ -57,6 +57,8 @@ public enum ConfigManager {
 
     MB_WORLD_NAME,
     MB_WORLD_MAPID,
+    MB_WORLD_REALMMAP,
+
     MB_WORLD_PORT,
     MB_WORLD_ACCESS_LVL,
     MB_WORLD_WAREHOUSE_PUSH,
diff --git a/src/engine/net/client/msg/WorldRealmMsg.java b/src/engine/net/client/msg/WorldRealmMsg.java
index 57abbb36..9c2c435b 100644
--- a/src/engine/net/client/msg/WorldRealmMsg.java
+++ b/src/engine/net/client/msg/WorldRealmMsg.java
@@ -26,6 +26,7 @@ import engine.net.ByteBufferReader;
 import engine.net.ByteBufferWriter;
 import engine.net.client.Protocol;
 import engine.objects.Realm;
+import engine.server.world.WorldServer;
 
 
 public class WorldRealmMsg extends ClientNetMsg {
@@ -74,7 +75,7 @@ public class WorldRealmMsg extends ClientNetMsg {
 			realm.serializeForClientMsg(writer);
 
 		writer.putInt(0x0);
-			writer.putInt(3000000);
+		writer.putInt(WorldServer.worldRealmMap);
 
 	}
 
diff --git a/src/engine/server/world/WorldServer.java b/src/engine/server/world/WorldServer.java
index fff2eb8b..bf24a170 100644
--- a/src/engine/server/world/WorldServer.java
+++ b/src/engine/server/world/WorldServer.java
@@ -7,7 +7,6 @@
 //                www.magicbane.com
 
 
-
 package engine.server.world;
 
 import engine.Enum;
@@ -69,6 +68,8 @@ import static java.lang.System.exit;
 public class WorldServer {
 
 	public static int worldMapID = Integer.parseInt(ConfigManager.MB_WORLD_MAPID.getValue());
+	public static int worldRealmMap = Integer.parseInt(ConfigManager.MB_WORLD_REALMMAP.getValue());
+
 	public static int worldUUID = 1; // Root object in database
 	public static Enum.AccountStatus worldAccessLevel = Enum.AccountStatus.valueOf(ConfigManager.MB_WORLD_ACCESS_LVL.getValue());
 	private static LocalDateTime bootTime = LocalDateTime.now();
@@ -98,7 +99,7 @@ public class WorldServer {
 		}
 
 		try {
-			
+
 			worldServer = new WorldServer();
 
 			ConfigManager.serverType = Enum.ServerType.WORLDSERVER;
@@ -106,7 +107,7 @@ public class WorldServer {
 			ConfigManager.handler = new ClientMessagePump(worldServer);
 
 			worldServer.init();
-			
+
 			int retVal = worldServer.exec();
 
 			if (retVal != 0)
@@ -125,13 +126,13 @@ public class WorldServer {
 		NPC npc = NPC.getFromCache(msg.getObjectID());
 		float sellPercent = 1;
 
-		if (npc != null){
-			
+		if (npc != null) {
+
 			if (origin.getPlayerCharacter() != null)
 				sellPercent = npc.getSellPercent(origin.getPlayerCharacter());
 			else
 				sellPercent = npc.getSellPercent();
-			
+
 			msg.setTrainPercent(sellPercent); //TrainMsg.getTrainPercent(npc));
 		}
 
@@ -152,11 +153,8 @@ public class WorldServer {
 		DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
 	}
 
-	public static void shutdown() {
-		exit(1);
-	}
-
 	public static String getUptimeString() {
+
 		String outString = null;
 		java.time.Duration uptimeDuration;
 		String newLine = System.getProperty("line.separator");
@@ -165,7 +163,7 @@ public class WorldServer {
 			outString = "[LUA_UPTIME()]" + newLine;
 			uptimeDuration = java.time.Duration.between(LocalDateTime.now(), WorldServer.bootTime);
 			long uptimeSeconds = Math.abs(uptimeDuration.getSeconds());
-			String uptime =   String.format("%d hours %02d minutes %02d seconds", uptimeSeconds / 3600, (uptimeSeconds % 3600) / 60, (uptimeSeconds % 60));
+			String uptime = String.format("%d hours %02d minutes %02d seconds", uptimeSeconds / 3600, (uptimeSeconds % 3600) / 60, (uptimeSeconds % 60));
 			outString += "uptime: " + uptime;
 			outString += " pop: " + SessionManager.getActivePlayerCharacterCount() + " max pop: " + SessionManager._maxPopulation;
 		} catch (Exception e) {
@@ -174,13 +172,35 @@ public class WorldServer {
 		return outString;
 	}
 
+	public static void writePopulationFile() {
+
+		int population = SessionManager.getActivePlayerCharacterCount();
+		try {
+
+
+			File populationFile = new File(MBServerStatics.DEFAULT_DATA_DIR + ConfigManager.MB_WORLD_NAME.getValue().replaceAll("'", "") + ".pop");
+			FileWriter fileWriter;
+
+			try {
+				fileWriter = new FileWriter(populationFile, false);
+				fileWriter.write(Integer.toString(population));
+				fileWriter.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} catch (Exception e) {
+			Logger.error(e);
+		}
+	}
+
 	private int exec() {
 
 		LocalDateTime nextHeartbeatTime = LocalDateTime.now();
 		LocalDateTime nextPopulationFileTime = LocalDateTime.now();
 		LocalDateTime nextFlashTrashCheckTime = LocalDateTime.now();
 		LocalDateTime nextHourlyJobTime = LocalDateTime.now().withMinute(0).withSecond(0).plusHours(1);
-		LocalDateTime nextWareHousePushTime = LocalDateTime.now();;
+		LocalDateTime nextWareHousePushTime = LocalDateTime.now();
 
 		// Begin execution of main game loop
 
@@ -233,7 +253,7 @@ public class WorldServer {
 			InetAddress addy = InetAddress.getByName(ConfigManager.MB_BIND_ADDR.getValue());
 			int port = Integer.parseInt(ConfigManager.MB_WORLD_PORT.getValue());
 
-			ClientConnectionManager connectionManager =  new ClientConnectionManager(name + ".ClientConnMan", addy,
+			ClientConnectionManager connectionManager = new ClientConnectionManager(name + ".ClientConnMan", addy,
 					port);
 			connectionManager.startup();
 
@@ -263,25 +283,23 @@ public class WorldServer {
 		Guild.getErrantGuild();
 
 		Logger.info("Initializing PowersManager.");
-		// activate powers manager
 		PowersManager.initPowersManager(true);
-		
+
 		Logger.info("Initializing granted Skills for Runes");
 		DbManager.SkillsBaseQueries.LOAD_ALL_RUNE_SKILLS();
-		
+
 		Logger.info("Initializing Player Friends");
 		DbManager.PlayerCharacterQueries.LOAD_PLAYER_FRIENDS();
-		
+
 		Logger.info("Initializing NPC Profits");
 		DbManager.NPCQueries.LOAD_NPC_PROFITS();
-		
+
 		Logger.info("Initializing MeshBounds");
 		MeshBounds.InitializeBuildingBounds();
 
-		// Load ItemBases
 		Logger.info("Loading ItemBases");
 		ItemBase.loadAllItemBases();
-		
+
 		Logger.info("Loading PromotionClasses");
 		DbManager.PromotionQueries.GET_ALL_PROMOTIONS();
 
@@ -294,6 +312,7 @@ public class WorldServer {
 		// Load new loot system
 		Logger.info("Loading New Loot Tables");
 		LootManager.loadLootData();
+
 		//load old loot system (still needed for rolling for now)
 		LootTable.populateLootTables();
 		RuneBaseAttribute.LoadAllAttributes();
@@ -307,7 +326,6 @@ public class WorldServer {
 		Logger.info("Loading Mob Powers for MobBases");
 		PowersManager.LoadAllMobPowers();
 
-		//load item enchantment values
 		Logger.info("Loading item enchants");
 		DbManager.LootQueries.LOAD_ENCHANT_VALUES();
 
@@ -322,10 +340,10 @@ public class WorldServer {
 
 		Logger.info("Loading Kits");
 		DbManager.KitQueries.GET_ALL_KITS();
-		
+
 		Logger.info("Loading World Grid");
 		WorldGrid.InitializeGridObjects();
-		
+
 		Logger.info("Starting InterestManager.");
 		WorldGrid.startLoadJob();
 
@@ -364,18 +382,14 @@ public class WorldServer {
 		SupportMsgType.InitializeSupportMsgType();
 
 		//Load Buildings, Mobs and NPCs for server
+
 		getWorldBuildingsMobsNPCs();
 
 		// Configure realms for serialization
 		// Doing this after the world is loaded
 
 		Logger.info("Configuring realm serialization data");
-
-		try{
-			Realm.configureAllRealms();
-		}catch(Exception e){
-			Logger.error( e.getMessage());
-		}
+		Realm.configureAllRealms();
 
 		Logger.info("Loading Mine data.");
 		Mine.loadAllMines();
@@ -397,23 +411,25 @@ public class WorldServer {
 
 		//pick a startup Hotzone
 		ZoneManager.generateAndSetRandomHotzone();
-		
+
 		Logger.info("Loading All Players from database to Server Cache");
 		long start = System.currentTimeMillis();
-		try{
+
+		try {
 			DbManager.PlayerCharacterQueries.GET_ALL_CHARACTERS();
-		}catch(Exception e){
+		} catch (Exception e) {
 			e.printStackTrace();
 		}
-	
+
 		long end = System.currentTimeMillis();
-		Logger.info("Loading All Players took "  + (end - start) + " ms.");
-		
+
+		Logger.info("Loading All Players took " + (end - start) + " ms.");
+
 		ItemProductionManager.ITEMPRODUCTIONMANAGER.initialize();
 
 		Logger.info("Loading Player Heraldries");
 		DbManager.PlayerCharacterQueries.LOAD_HERALDY();
-		
+
 		Logger.info("Running Heraldry Audit for Deleted Players");
 		Heraldry.AuditHeraldry();
 
@@ -444,17 +460,19 @@ public class WorldServer {
 		DispatchMessage.startMessagePump();
 
 		// Run maintenance
+
 		MaintenanceManager.dailyMaintenance();
 
-		// Disabled but kept in case of emergency
 		Logger.info("Starting Orphan Item Purge");
 		PurgeOprhans.startPurgeThread();
 
 		// Open/Close mines for the current window
+
 		Logger.info("Processing mine window.");
 		HourlyJobThread.processMineWindow();
 
 		// Calculate bootstrap time and rest boot time to current time.
+
 		java.time.Duration bootDuration = java.time.Duration.between(LocalDateTime.now(), bootTime);
 		long bootSeconds = Math.abs(bootDuration.getSeconds());
 		String boottime = String.format("%d hours %02d minutes %02d seconds", bootSeconds / 3600, (bootSeconds % 3600) / 60, (bootSeconds % 60));
@@ -467,15 +485,16 @@ public class WorldServer {
 		System.gc();
 		return true;
 	}
+
 	protected boolean initDatabaselayer() {
 
 		// Try starting a GOM <-> DB connection.
 		try {
 
 			Logger.info("Configuring GameObjectManager to use Database: '"
-					+  ConfigManager.MB_DATABASE_NAME.getValue() + "' on "
-					+  ConfigManager.MB_DATABASE_ADDRESS.getValue() + ':'
-					+  ConfigManager.MB_DATABASE_PORT.getValue());
+					+ ConfigManager.MB_DATABASE_NAME.getValue() + "' on "
+					+ ConfigManager.MB_DATABASE_ADDRESS.getValue() + ':'
+					+ ConfigManager.MB_DATABASE_PORT.getValue());
 
 			DbManager.configureConnectionPool();
 
@@ -493,7 +512,6 @@ public class WorldServer {
 		return true;
 	}
 
-
 	private void getWorldBuildingsMobsNPCs() {
 
 		ArrayList<Zone> rootParent;
@@ -521,10 +539,10 @@ public class WorldServer {
 			try {
 				ZoneManager.addZone(zone.getLoadNum(), zone);
 
-				try{
+				try {
 					zone.generateWorldAltitude();
-				}catch(Exception e){
-					Logger.error( e.getMessage());
+				} catch (Exception e) {
+					Logger.error(e.getMessage());
 					e.printStackTrace();
 				}
 
@@ -539,7 +557,7 @@ public class WorldServer {
 						b.setObjectTypeMask(MBServerStatics.MASK_BUILDING);
 						b.setLoc(b.getLoc());
 					} catch (Exception e) {
-						Logger.error( b.getObjectUUID() + " returned an Error Message :" + e.getMessage());
+						Logger.error(b.getObjectUUID() + " returned an Error Message :" + e.getMessage());
 					}
 				}
 
@@ -551,9 +569,9 @@ public class WorldServer {
 					m.setObjectTypeMask(MBServerStatics.MASK_MOB | m.getTypeMasks());
 					m.setLoc(m.getLoc());
 
-				//ADD GUARDS HERE.
+					//ADD GUARDS HERE.
 					if (m.building != null && m.building.getBlueprint() != null && m.building.getBlueprint().getBuildingGroup() == BuildingGroup.BARRACK)
-					DbManager.MobQueries.LOAD_PATROL_POINTS(m);
+						DbManager.MobQueries.LOAD_PATROL_POINTS(m);
 				}
 
 				//Handle npc's
@@ -572,7 +590,7 @@ public class WorldServer {
 						n.setObjectTypeMask(MBServerStatics.MASK_NPC);
 						n.setLoc(n.getLoc());
 					} catch (Exception e) {
-						Logger.error( n.getObjectUUID() + " returned an Error Message :" + e.getMessage());
+						Logger.error(n.getObjectUUID() + " returned an Error Message :" + e.getMessage());
 					}
 				}
 
@@ -645,10 +663,10 @@ public class WorldServer {
 				System.currentTimeMillis() + delta);
 		playerCharacter.getTimers().put("Logout", jc);
 		playerCharacter.getTimestamps().put("logout", System.currentTimeMillis());
-		
+
 		//send update to friends that you are logged off.
 
-		PlayerFriends.SendFriendsStatus(playerCharacter,false);
+		PlayerFriends.SendFriendsStatus(playerCharacter, false);
 
 	}
 
@@ -673,7 +691,7 @@ public class WorldServer {
 
 		if (player.getPet() != null)
 			player.getPet().dismiss();
-		
+
 		NPCManager.dismissNecroPets(player);
 
 		// Set player inactive so they quit loading for other players
@@ -688,43 +706,20 @@ public class WorldServer {
 			if (group != null)
 				GroupManager.LeaveGroup(player);
 		} catch (MsgSendException e) {
-			Logger.error( e.toString());
+			Logger.error(e.toString());
 		}
-		
+
 		player.respawnLock.writeLock().lock();
-		try{
+		try {
 			if (!player.isAlive())
 				player.respawn(false, false, true);
-		}catch(Exception e){
+		} catch (Exception e) {
 			Logger.error(e);
-		}finally{
+		} finally {
 			player.respawnLock.writeLock().unlock();
 		}
 	}
 
-
-	public static void writePopulationFile() {
-
-		int population = SessionManager.getActivePlayerCharacterCount();
-try {
-	
-
-		File populationFile = new File(MBServerStatics.DEFAULT_DATA_DIR + ConfigManager.MB_WORLD_NAME.getValue().replaceAll("'","") + ".pop");
-		FileWriter fileWriter;
-
-		try {
-			fileWriter = new FileWriter(populationFile, false);
-			fileWriter.write(Integer.toString(population));
-			fileWriter.close();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		
-}catch(Exception e){
-	Logger.error(e);
-}
-	}
-
 	private void processTrashFile() {
 
 		ArrayList<String> machineList;
@@ -742,7 +737,7 @@ try {
 
 		// Build list of trash characters associated with that machineID
 
-		for (String machineID:machineList) {
+		for (String machineID : machineList) {
 			trashList = DbManager.AccountQueries.GET_ALL_CHARS_FOR_MACHINE(machineID);
 
 
@@ -784,7 +779,7 @@ try {
 		// server cache file by now.
 
 		Timer timer = new Timer("Disconnect Trash");
-		timer.schedule(new DisconnectTrashTask( trashList ), 3000L);
+		timer.schedule(new DisconnectTrashTask(trashList), 3000L);
 
 		// Clean up after ourselves
 
@@ -795,7 +790,7 @@ try {
 			e.printStackTrace();
 		}
 
-		}
+	}
 
 	private void processFlashFile() {
 
@@ -823,8 +818,8 @@ try {
 		if (flashString == "")
 			flashString = "Rebooting for to fix bug.";
 
-		Logger.info( "Sending flash from external interface");
-		Logger.info( "Msg: " + flashString);
+		Logger.info("Sending flash from external interface");
+		Logger.info("Msg: " + flashString);
 
 		ChatSystemMsg msg = new ChatSystemMsg(null, flashString);
 		msg.setChannel(engine.Enum.ChatChannelType.FLASH.getChannelID());