@ -308,8 +308,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
@@ -308,8 +308,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
Building siegeBuilding ;
PlacementInfo buildingList ;
City serverCity ;
int numAttackerBuildings = 0 ;
int numDefenderBuildings = 0 ;
// Retrieve the building details we're placing
@ -359,8 +357,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
@@ -359,8 +357,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
serverCity = player . getGuild ( ) . getOwnedCity ( ) ;
}
if ( ( serverCity ! = null ) & &
( serverCity . getBane ( ) ! = null ) ) {
@ -377,95 +373,104 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
@@ -377,95 +373,104 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
}
// cant place siege equipment off city zone.
// Create the siege Building
siegeBuilding = createStructure ( player , msg . getFirstPlacementInfo ( ) , serverZone ) ;
if ( serverCity = = null )
return true ;
// Oops something went really wrong
if ( siegeBuilding = = null )
return false ;
if ( serverCity . getBane ( ) = = null )
// If there is a bane placed, we limit 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 )
return true ;
// passes validation: can assign auto-protection to war asset
// If there is an bane placed, we protect 2x the stone rank's worth of attacker assets
if ( serverCity . getBane ( ) ! = null )
if ( serverCity . isLocationOnCityGrid ( siegeBuilding . getBounds ( ) ) )
if ( player . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )
return true ;
// and 1x the tree rank's worth of assets automatically
siegeBuilding . setProtectionState ( ProtectionState . PROTECTED ) ;
// No bane placed. We're done!
return true ;
}
HashSet < AbstractWorldObject > awoList = WorldGrid . getObjectsInRangePartial ( serverCity , 1000 , MBServerStatics . MASK_BUILDING ) ;
private boolean validateSiegeLimits ( PlayerCharacter playerCharacter , ClientConnection origin , Bane bane ) {
for ( AbstractWorldObject awo : awoList ) {
Building building = ( Building ) awo ;
City serverCity = bane . getCity ( ) ;
HashSet < AbstractWorldObject > awoList ;
int maxAttackerAssets = serverCity . getBane ( ) . getStone ( ) . getRank ( ) * 2 ;
int maxDefenderAssets = serverCity . getRank ( ) ;
int numDefenderBuildings = 0 ;
int numAttackerBuildings = 0 ;
// Count bow for attackers and defenders
if ( building . getBlueprint ( ) ! = null )
if ( ! building . getBlueprint ( ) . isSiegeEquip ( ) )
continue ;
awoList = WorldGrid . getObjectsInRangePartial ( serverCity , 1000 , MBServerStatics . MASK_BUILDING ) ;
if ( ! building . getLoc ( ) . isInsideCircle ( serverCity . getLoc ( ) , Enum . CityBoundsType . SIEGE . extents ) )
continue ;
for ( AbstractWorldObject awo : awoList ) {
Building building = ( Building ) awo ;
if ( building . getGuild ( ) = = null )
if ( building . getBlueprint ( ) ! = null )
if ( ! building . getBlueprint ( ) . isSiegeEquip ( ) )
continue ;
if ( building . getGuild ( ) . isErrant ( ) )
continue ;
if ( ! building . getLoc ( ) . isInsideCircle ( serverCity . getLoc ( ) , Enum . CityBoundsType . SIEGE . extents ) )
continue ;
if ( ! building . getGuild ( ) . equals ( serverCity . getGuild ( ) ) & & ! building . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )
continue ;
if ( building . getGuild ( ) = = null )
continue ;
// Only count auto protected buildings
if ( building . getProtectionState ( ) ! = ProtectionState . PROTECTED )
continue ;
if ( building . getGuild ( ) . isErrant ( ) )
continue ;
if ( building . getGuild ( ) . equals ( serverCity . getGuild ( ) ) )
numDefenderBuildings + + ;
else if ( building . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )
numAttackerBuildings + + ;
if ( ! building . getGuild ( ) . equals ( serverCity . getGuild ( ) ) & & ! building . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )
continue ;
// Validate bane limits on siege assets
// Only count auto protected buildings
if ( building . getProtectionState ( ) ! = ProtectionState . PROTECTED )
continue ;
int maxAttackerAssets = serverCity . getBane ( ) . getStone ( ) . getRank ( ) * 2 ;
int maxDefenderAssets = serverCity . getRank ( ) ;
if ( building . getGuild ( ) . equals ( serverCity . getGuild ( ) ) )
numDefenderBuildings + + ;
if ( building . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )
numAttackerBuildings + + ;
// Validate bane limits on siege assets
if ( player . getGuild ( ) . equals ( serverCity . getGuild ( ) ) ) {
if ( playerCharact er . getGuild ( ) . equals ( serverCity . getGuild ( ) ) ) {
//defender attempting to place asset
if ( numDefenderBuildings > = maxDefenderAssets ) {
PlaceAssetMsg . sendPlaceAssetError ( origin , 62 , "" ) ;
return tru e;
if ( numDefenderBuildings > = maxDefenderAssets ) {
PlaceAssetMsg . sendPlaceAssetError ( origin , 62 , "" ) ;
return fals e;
}
}
else if ( player . getGuild ( ) . equals ( serverCity . getBane ( ) . getStone ( ) . getGuild ( ) ) ) {
if ( playerCharacter . getGuild ( ) . equals ( serverCity . getBane ( ) . getStone ( ) . getGuild ( ) ) ) {
//attacker attempting to place asset
if ( numAttackerBuildings > = maxAttackerAssets ) {
PlaceAssetMsg . sendPlaceAssetError ( origin , 61 , "" ) ;
return tru e;
if ( numAttackerBuildings > = maxAttackerAssets ) {
PlaceAssetMsg . sendPlaceAssetError ( origin , 61 , "" ) ;
return fals e;
}
}
else {
//third party attempting to place asset, early exit
return true ;
}
}
// passes validation: can assign auto-protection to war asset
if ( serverCity . getBane ( ) ! = null )
if ( serverCity . isLocationOnCityGrid ( siegeBuilding . getBounds ( ) ) )
if ( player . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )
return true ;
siegeBuilding . setProtectionState ( ProtectionState . PROTECTED ) ;
// No bane placed. We're done!
return true ;
// Passed validation
return true ;
}
private boolean placeTreeOfLife ( PlayerCharacter playerCharacter , ClientConnection origin , PlaceAssetMsg msg ) {
Realm serverRealm ;