diff --git a/src/engine/net/client/handlers/PlaceAssetMsgHandler.java b/src/engine/net/client/handlers/PlaceAssetMsgHandler.java index 7d327dc4..218ceea1 100644 --- a/src/engine/net/client/handlers/PlaceAssetMsgHandler.java +++ b/src/engine/net/client/handlers/PlaceAssetMsgHandler.java @@ -307,6 +307,7 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { Building siegeBuilding; PlacementInfo buildingList; City serverCity; + Bane bane; // Retrieve the building details we're placing @@ -324,44 +325,56 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { return false; } - // Checks validation conditions arising when placing - // generic structures. - - if (validateBuildingPlacement(serverZone, msg, origin, player, buildingList) == false) - return false; - - // If there is a bane placed, only the attackers and defenders can - // place siege assets - serverCity = ZoneManager.getCityAtLocation(buildingList.getLoc()); - //no city found + // No valid player city found - if (serverCity == null) { + if (serverCity == null || serverZone.isPlayerCity() == false) { PlaceAssetMsg.sendPlaceAssetError(origin, 52, ""); // Cannot place outisde a guild zone return false; } // No bane no bow - if (serverCity.getBane() == null) { + bane = serverCity.getBane(); + + if (bane == null) { PlaceAssetMsg.sendPlaceAssetError(origin, 66, ""); // There is no bane circle to support this building of war return false; } - // Set the server zone to the city zone in order to account for being inside // the siege bounds buffer area serverZone = serverCity.getParent(); + // Must belong to either attacker or defenders. + if ((player.getGuild().equals(serverCity.getBane().getOwner().getGuild()) == false) && (player.getGuild().equals(serverCity.getGuild()) == false)) { PlaceAssetMsg.sendPlaceAssetError(origin, 54, ""); // Must belong to attacker or defender return false; } - // If there is a bane placed, we limit placement to 2x the stone rank's worth of attacker assets + // Player must be GL or IC of the bane guild to place bow. + + if(GuildStatusController.isGuildLeader(player.getGuildStatus()) == false + && GuildStatusController.isInnerCouncil(player.getGuildStatus()) == false) + { + PlaceAssetMsg.sendPlaceAssetError(origin, 10, player.getName()); // You must be a guild leader to place this asset + return false; + } + + //cannot place on grid until bane is live + + if(bane.getSiegePhase() != SiegePhase.WAR && + serverCity.isLocationOnCityGrid(buildingList.getLoc()) == true) + { + PlaceAssetMsg.sendPlaceAssetError(origin, 53, player.getName()); // Buildings of war cannot be placed around a city grid unless there is an active bane + return false; + } + + // If there is a bane placed, we limit bow placement to 2x the stone rank's worth of attacker assets // and 1x the tree rank for defenders if (validateSiegeLimits(player, origin, serverCity.getBane()) == false) @@ -380,8 +393,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { siegeBuilding.setProtectionState(ProtectionState.PROTECTED); - // No bane placed. We're done! - return true; } @@ -1230,85 +1241,23 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { RealmType currentRealm; - if(Blueprint.getBlueprint(placementInfo.getBlueprintUUID()).isSiegeEquip() == false) - { if (serverZone.isPlayerCity() == false) { PlaceAssetMsg.sendPlaceAssetError(origin, 52, player.getName()); return false; } + City city = ZoneManager.getCityAtLocation(placementInfo.getLoc()); if (player.getGuild().equals(city.getGuild()) == false) { PlaceAssetMsg.sendPlaceAssetError(origin, 40, player.getName()); return false; } + if (city.isLocationOnCityGrid(placementInfo.getLoc()) == false) { PlaceAssetMsg.sendPlaceAssetError(origin, 41, player.getName()); return false; } - } - else - { - City city = ZoneManager.getCityAtLocation(placementInfo.getLoc()); - if(city == null) - { - PlaceAssetMsg.sendPlaceAssetError(origin, 52, player.getName()); - return false; - } - Bane bane = city.getBane(); - //check if player is owner/IC of tree or bane - if (player.getGuild().equals(city.getGuild()) == true) - { - //is from owners guild - if(GuildStatusController.isGuildLeader(player.getGuildStatus()) == false && GuildStatusController.isInnerCouncil(player.getGuildStatus()) == false) - { - PlaceAssetMsg.sendPlaceAssetError(origin, 57, player.getName()); - return false; - } - } - else - { - //is not from owners guild - if(bane == null) - { - //bane was null - PlaceAssetMsg.sendPlaceAssetError(origin, 66, player.getName()); - return false; - } - if(city == null) - { - //city was null - PlaceAssetMsg.sendPlaceAssetError(origin, 67, player.getName()); - return false; - } - //check if player is from siege guild - if(player.getGuild().equals(bane.getOwner().getGuild()) == false) - { - PlaceAssetMsg.sendPlaceAssetError(origin, 54, player.getName()); - return false; - } - - //check if player is GL or IC of the bane guild - if(GuildStatusController.isGuildLeader(player.getGuildStatus()) == false && GuildStatusController.isInnerCouncil(player.getGuildStatus()) == false) - { - PlaceAssetMsg.sendPlaceAssetError(origin, 71, player.getName()); - return false; - } - - //cannot place on grid until bane is live - if(bane.getSiegePhase() != SiegePhase.WAR && city.isLocationOnCityGrid(placementInfo.getLoc()) == true) - { - PlaceAssetMsg.sendPlaceAssetError(origin, 71, player.getName()); - return false; - } - if(city.isLocationWithinSiegeBounds(placementInfo.getLoc()) == false && city.isLocationOnCityZone(placementInfo.getLoc()) == false) - { - PlaceAssetMsg.sendPlaceAssetError(origin, 66, player.getName()); - return false; - } - } - } // Retrieve the building details we're placing if (serverZone.isNPCCity() == true) {