forked from MagicBane/Server
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.0 KiB
131 lines
4.0 KiB
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; |
|
|
|
} |
|
|
|
|
|
}
|
|
|