Files
Server/src/engine/net/client/handlers/RepairBuildingMsgHandler.java
T

110 lines
3.5 KiB
Java
Raw Normal View History

2022-04-30 09:41:17 -04:00
package engine.net.client.handlers;
import engine.gameManager.BuildingManager;
import engine.gameManager.DispatchManager;
2022-04-30 09:41:17 -04:00
import engine.gameManager.SessionManager;
import engine.gameManager.ZoneManager;
import engine.mbEnums;
import engine.mbEnums.BuildingGroup;
2022-04-30 09:41:17 -04:00
import engine.net.Dispatch;
import engine.net.client.ClientConnection;
import engine.net.client.msg.ClientNetMsg;
import engine.net.client.msg.RepairBuildingMsg;
import engine.net.client.msg.UpdateObjectMsg;
2023-08-10 19:43:37 -05:00
import engine.objects.*;
2022-04-30 09:41:17 -04:00
/*
* @Author:
* @Summary: Processes application protocol message which handles
* protecting and unprotecting city assets
*/
public class RepairBuildingMsgHandler extends AbstractClientMsgHandler {
2023-07-15 09:23:48 -04:00
public RepairBuildingMsgHandler() {
2024-05-12 11:55:12 -04:00
super();
2023-07-15 09:23:48 -04:00
}
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
private static void RepairBuilding(Building targetBuilding, ClientConnection origin, RepairBuildingMsg msg) {
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// Member variable declaration
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
Zone serverZone;
Dispatch dispatch;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// Member variable assignment
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
if (targetBuilding == null)
return;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
if (!targetBuilding.hasFunds(BuildingManager.GetRepairCost(targetBuilding)))
return;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
PlayerCharacter pc = origin.getPlayerCharacter();
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
serverZone = ZoneManager.findSmallestZone(pc.getLoc());
2022-04-30 09:41:17 -04:00
2023-09-20 15:53:41 -04:00
if (serverZone.playerCityUUID == 0 && targetBuilding.getBlueprint() != null && targetBuilding.getBlueprint().getBuildingGroup() != BuildingGroup.MINE)
2023-07-15 09:23:48 -04:00
return;
2022-04-30 09:41:17 -04:00
2023-09-20 15:53:41 -04:00
City city = City.GetCityFromCache(serverZone.playerCityUUID);
2022-04-30 09:41:17 -04:00
2024-03-28 05:10:22 -04:00
if (city != null)
2023-07-15 09:23:48 -04:00
if (city.getBane() != null && city.protectionEnforced == false)
return;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
//cannot repair mines during 24/7 activity.
2022-04-30 09:41:17 -04:00
2024-03-28 05:10:22 -04:00
if (targetBuilding.getBlueprint() != null && targetBuilding.getBlueprint().getBuildingGroup() == BuildingGroup.MINE && Mine.getMineFromTower(targetBuilding.getObjectUUID()).isActive == true)
2024-03-24 09:42:27 -04:00
return;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
int maxHP = (int) targetBuilding.getMaxHitPoints();
int repairCost = BuildingManager.GetRepairCost(targetBuilding);
int missingHealth = (int) BuildingManager.GetMissingHealth(targetBuilding);
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
if (!targetBuilding.transferGold(-repairCost, false))
return;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
targetBuilding.modifyHealth(BuildingManager.GetMissingHealth(targetBuilding), null);
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
UpdateObjectMsg uom = new UpdateObjectMsg(targetBuilding, 3);
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
dispatch = Dispatch.borrow(origin.getPlayerCharacter(), uom);
DispatchManager.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.SECONDARY);
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
RepairBuildingMsg rbm = new RepairBuildingMsg(targetBuilding.getObjectUUID(), maxHP, missingHealth, repairCost, targetBuilding.getStrongboxValue());
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
dispatch = Dispatch.borrow(origin.getPlayerCharacter(), rbm);
DispatchManager.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.SECONDARY);
2023-07-15 09:23:48 -04:00
}
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
@Override
2024-05-12 13:42:11 -04:00
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) {
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// Member variable declaration
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
PlayerCharacter player;
Building targetBuilding;
RepairBuildingMsg msg;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// Member variable assignment
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
msg = (RepairBuildingMsg) baseMsg;
player = SessionManager.getPlayerCharacter(origin);
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
if (player == null)
return true;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
switch (msg.getType()) {
case 0:
targetBuilding = BuildingManager.getBuildingFromCache(msg.getBuildingID());
RepairBuilding(targetBuilding, origin, msg);
break;
}
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
return true;
}
2022-04-30 09:41:17 -04:00
}