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

108 lines
3.2 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.InterestManagement.WorldGrid;
import engine.exception.MsgSendException;
import engine.gameManager.BuildingManager;
import engine.net.client.ClientConnection;
import engine.net.client.msg.ClientNetMsg;
import engine.net.client.msg.DestroyBuildingMsg;
import engine.net.client.msg.ErrorPopupMsg;
import engine.objects.*;
2022-04-30 09:41:17 -04:00
/*
* @Author:
* @Summary: Processes application protocol message where the
* client is requesting a building be destroyed.
*/
public class DestroyBuildingHandler extends AbstractClientMsgHandler {
2023-07-15 09:23:48 -04:00
public DestroyBuildingHandler() {
super(DestroyBuildingMsg.class);
}
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
PlayerCharacter pc = origin.getPlayerCharacter();
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
DestroyBuildingMsg msg;
msg = (DestroyBuildingMsg) baseMsg;
Bane bane = null;
Blueprint blueprint;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
int buildingUUID = msg.getUUID();
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
Building building = BuildingManager.getBuildingFromCache(buildingUUID);
;
if (pc == null || building == null)
return true;
2022-07-27 08:56:45 -04:00
2023-07-15 09:23:48 -04:00
blueprint = building.getBlueprint();
City city = building.getCity();
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// Can't destroy buildings without a blueprint.
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
if (blueprint == null)
return true;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// Cannot destroy Oblivion database derived buildings.
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
if (building.getProtectionState() == Enum.ProtectionState.NPC) {
return true;
}
2022-07-27 08:56:45 -04:00
2023-07-15 09:23:48 -04:00
if (!BuildingManager.PlayerCanControlNotOwner(building, pc))
return true;
2022-07-27 08:56:45 -04:00
2023-07-15 09:23:48 -04:00
// Can't delete siege assets during an active bane.
2022-07-27 08:56:45 -04:00
2023-07-15 09:23:48 -04:00
if (city != null)
bane = city.getBane();
2022-07-27 08:56:45 -04:00
2024-08-29 19:44:51 -05:00
if (bane != null){// && bane.getSiegePhase() == Enum.SiegePhase.WAR) {
2023-07-15 09:23:48 -04:00
ErrorPopupMsg.sendErrorPopup(pc, 171);
return true;
}
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// Can't destroy a tree of life
if (blueprint.getBuildingGroup() == BuildingGroup.TOL)
return true;
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// Can't destroy a shrine
if (blueprint.getBuildingGroup() == BuildingGroup.SHRINE)
return true;
2022-07-27 08:56:45 -04:00
2023-07-15 09:23:48 -04:00
// Cannot destroy mines outside of normal mine mechanics
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
if (blueprint.getBuildingGroup() == BuildingGroup.MINE)
return true;
2022-07-27 08:56:45 -04:00
2023-07-15 09:23:48 -04:00
// Cannot delete rungates
2022-07-27 08:56:45 -04:00
2023-07-15 09:23:48 -04:00
if (blueprint.getBuildingGroup() == BuildingGroup.RUNEGATE)
return true;
2022-07-27 08:56:45 -04:00
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
// Turn off spire if destoying
if (blueprint.getBuildingGroup() == BuildingGroup.SPIRE)
building.disableSpire(true);
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
if (blueprint.getBuildingGroup() == BuildingGroup.WAREHOUSE) {
if (city != null)
city.setWarehouseBuildingID(0);
}
building.setRank(-1);
WorldGrid.RemoveWorldObject(building);
WorldGrid.removeObject(building);
building.getParentZone().zoneBuildingSet.remove(building);
if (building.getBlueprint() != null && building.getBlueprint().getBuildingGroup().equals(BuildingGroup.BARRACK)) {
building.RemoveFromBarracksList();
}
return true;
}
2022-04-30 09:41:17 -04:00
}