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

129 lines
3.9 KiB
Java
Raw Normal View History

2022-04-30 09:41:17 -04:00
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;
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() {
super(RepairBuildingMsg.class);
}
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
2023-07-15 09:23:48 -04:00
if (city != null) {
if (city.getBane() != null && city.protectionEnforced == false)
return;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
}
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
2023-08-10 19:43:37 -05:00
if (targetBuilding.getBlueprint() != null && targetBuilding.getBlueprint().getBuildingGroup() == BuildingGroup.MINE && Mine.getMineFromTower(targetBuilding.getObjectUUID()).isActive == true) {
return;
2023-07-15 09:23:48 -04:00
}
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);
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.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);
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
}
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
@Override
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException {
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;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
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
// targetBuilding.createFurniture(item.getItemBase().getUseID(), 0, msg.getFurnitureLoc(), Vector3f.ZERO, 0, player);
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
}
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// dispatch = Dispatch.borrow(player, baseMsg);
// DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
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
2023-07-15 09:23:48 -04:00
}
2022-04-30 09:41:17 -04:00
}