package engine.net.client.handlers; import engine.Enum; import engine.Enum.BuildingGroup; import engine.exception.MsgSendException; import engine.gameManager.BuildingManager; import engine.gameManager.SessionManager; import engine.gameManager.ZoneManager; import engine.net.Dispatch; import engine.net.DispatchMessage; import engine.net.client.ClientConnection; import engine.net.client.msg.ClientNetMsg; import engine.net.client.msg.RepairBuildingMsg; import engine.net.client.msg.UpdateObjectMsg; import engine.objects.Building; import engine.objects.City; import engine.objects.PlayerCharacter; import engine.objects.Zone; /* * @Author: * @Summary: Processes application protocol message which handles * protecting and unprotecting city assets */ public class RepairBuildingMsgHandler extends AbstractClientMsgHandler { public RepairBuildingMsgHandler() { super(RepairBuildingMsg.class); } private static void RepairBuilding(Building targetBuilding, ClientConnection origin, RepairBuildingMsg msg) { // Member variable declaration Zone serverZone; Dispatch dispatch; // Member variable assignment if (targetBuilding == null) return; if (!targetBuilding.hasFunds(BuildingManager.GetRepairCost(targetBuilding))) return; PlayerCharacter pc = origin.getPlayerCharacter(); serverZone = ZoneManager.findSmallestZone(pc.getLoc()); if (serverZone.getPlayerCityUUID() == 0 && targetBuilding.getBlueprint() != null && targetBuilding.getBlueprint().getBuildingGroup() != BuildingGroup.MINE) return; City city = City.GetCityFromCache(serverZone.getPlayerCityUUID()); if (city != null) { if (city.getBane() != null && city.protectionEnforced == false) return; } //cannot repair mines during 24/7 activity. if (targetBuilding.getBlueprint() != null && targetBuilding.getBlueprint().getBuildingGroup() == BuildingGroup.MINE && targetBuilding.assetIsProtected() == false) { return; } int maxHP = (int) targetBuilding.getMaxHitPoints(); int repairCost = BuildingManager.GetRepairCost(targetBuilding); int missingHealth = (int) BuildingManager.GetMissingHealth(targetBuilding); if (!targetBuilding.transferGold(-repairCost, false)) return; targetBuilding.modifyHealth(BuildingManager.GetMissingHealth(targetBuilding), null); UpdateObjectMsg uom = new UpdateObjectMsg(targetBuilding, 3); dispatch = Dispatch.borrow(origin.getPlayerCharacter(), uom); DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); RepairBuildingMsg rbm = new RepairBuildingMsg(targetBuilding.getObjectUUID(), maxHP, missingHealth, repairCost, targetBuilding.getStrongboxValue()); dispatch = Dispatch.borrow(origin.getPlayerCharacter(), rbm); DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); } @Override protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException { // Member variable declaration PlayerCharacter player; Building targetBuilding; RepairBuildingMsg msg; // Member variable assignment msg = (RepairBuildingMsg) baseMsg; player = SessionManager.getPlayerCharacter(origin); if (player == null) return true; switch (msg.getType()) { case 0: targetBuilding = BuildingManager.getBuildingFromCache(msg.getBuildingID()); RepairBuilding(targetBuilding, origin, msg); break; // targetBuilding.createFurniture(item.getItemBase().getUseID(), 0, msg.getFurnitureLoc(), Vector3f.ZERO, 0, player); } // dispatch = Dispatch.borrow(player, baseMsg); // DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); return true; } }