package engine.net.client.handlers; import engine.Enum; import engine.Enum.DispatchChannel; import engine.exception.MsgSendException; import engine.gameManager.BuildingManager; import engine.gameManager.SessionManager; import engine.net.Dispatch; import engine.net.DispatchMessage; import engine.net.client.ClientConnection; import engine.net.client.msg.ClientNetMsg; import engine.net.client.msg.PlaceAssetMsg; import engine.net.client.msg.TransferGoldToFromBuildingMsg; import engine.net.client.msg.UpdateGoldMsg; import engine.objects.Building; import engine.objects.CharacterItemManager; import engine.objects.Item; import engine.objects.PlayerCharacter; import org.pmw.tinylog.Logger; /* * @Author: * @Summary: Processes application protocol message which transfers * gold between a building's strongbox and a player character. */ public class TransferGoldToFromBuildingMsgHandler extends AbstractClientMsgHandler { public TransferGoldToFromBuildingMsgHandler() { super(TransferGoldToFromBuildingMsg.class); } @Override protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException { PlayerCharacter player; Building building; CharacterItemManager itemMan; Item goldItem; TransferGoldToFromBuildingMsg msg; Dispatch dispatch; player = SessionManager.getPlayerCharacter(origin); if (player == null) return true; msg = (TransferGoldToFromBuildingMsg) baseMsg; building = BuildingManager.getBuildingFromCache(msg.getObjectID()); if (building == null) return true; if (msg.getDirection() == 2) { if (!ManageCityAssetMsgHandler.playerCanManageNotFriends(player, building)) return true; if (building.setReserve(msg.getUnknown01(), player)) { dispatch = Dispatch.borrow(player, msg); DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); } return true; } // if (building.getTimeStamp(MBServerStatics.STRONGBOX_DELAY_STRING) > System.currentTimeMillis()){ // ErrorPopupMsg.sendErrorMsg(player, MBServerStatics.STRONGBOX_DELAY_OUTPUT); // return true; // } //building.getTimestamps().put(MBServerStatics.STRONGBOX_DELAY_STRING, System.currentTimeMillis() + MBServerStatics.ONE_MINUTE); itemMan = player.getCharItemManager(); goldItem = itemMan.getGoldInventory(); if (goldItem == null) { Logger.error("Could not access gold item"); return true; } // Update in-game gold values for player and building try { if (!itemMan.transferGoldToFromBuilding(msg.getAmount(), building)) return true; UpdateGoldMsg ugm = new UpdateGoldMsg(player); ugm.configure(); dispatch = Dispatch.borrow(player, ugm); DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); // Refresh the player's inventory if it's currently open // Refresh the tree's window to update strongbox msg.setAmount(building.getStrongboxValue()); dispatch = Dispatch.borrow(player, msg); DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); } catch (Exception e) { PlaceAssetMsg.sendPlaceAssetError(player.getClientConnection(), 1, "A Serious error has occurred. Please post details for to ensure transaction integrity"); } return true; } }