|  |  | @ -130,7 +130,7 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		boolean close = true; |  |  |  | 		boolean close = true; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		lock.writeLock().lock(); |  |  |  | 		lock.writeLock().lock(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 		boolean isSiege = false; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		try { |  |  |  | 		try { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			switch (buildingBlueprint.getBuildingGroup()) { |  |  |  | 			switch (buildingBlueprint.getBuildingGroup()) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -230,7 +230,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		buildingList = msg.getFirstPlacementInfo(); |  |  |  | 		buildingList = msg.getFirstPlacementInfo(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		serverZone = ZoneManager.findSmallestZone(buildingList.getLoc()); |  |  |  | 		serverZone = ZoneManager.findSmallestZone(buildingList.getLoc()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// Early exit if something went horribly wrong
 |  |  |  | 		// Early exit if something went horribly wrong
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// with locating the current or zone
 |  |  |  | 		// with locating the current or zone
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -1249,6 +1248,85 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		RealmType currentRealm; |  |  |  | 		RealmType currentRealm; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		if(Blueprint.getBlueprint(placementInfo.getBlueprintUUID()).isSiegeEquip() == false) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if (serverZone.isPlayerCity() == false) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 57, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			City city = ZoneManager.getCityAtLocation(placementInfo.getLoc()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if (player.getGuild().equals(city.getGuild()) == false) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 57, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if (city.isLocationOnCityGrid(placementInfo.getLoc()) == false) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 57, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			City city = ZoneManager.getCityAtLocation(placementInfo.getLoc()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if(city == null) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 57, 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, 57, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(city == null) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					//city was null
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 57, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				//check if player is from siege guild
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(player.getGuild().equals(bane.getOwner().getGuild()) == false) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 57, 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, 57, 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, 57, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if(city.isLocationWithinSiegeBounds(placementInfo.getLoc()) == false && city.isLocationOnCityZone(placementInfo.getLoc()) == false) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 57, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// Retrieve the building details we're placing
 |  |  |  | 		// Retrieve the building details we're placing
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (serverZone.isNPCCity() == true) { |  |  |  | 		if (serverZone.isNPCCity() == true) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -1259,7 +1337,14 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// Errant guilds cannot place assets
 |  |  |  | 		// Errant guilds cannot place assets
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (player.getGuild().getGuildState() == GuildState.Errant) { |  |  |  | 		if (player.getGuild().getGuildState() == GuildState.Errant) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 1, "Only soverign or sworn guilds may place assets."); |  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 1, "Only sovereign or sworn guilds may place assets."); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		// Player must be GL or IC of a guild to place buildings.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		if (GuildStatusController.isGuildLeader(player.getGuildStatus()) == false && GuildStatusController.isInnerCouncil(player.getGuildStatus()) == false) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 10, ""); // You must be a guild leader
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return false; |  |  |  | 			return false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -1373,8 +1458,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 9, "");  //You must be a guild member to place this asset
 |  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 9, "");  //You must be a guild member to place this asset
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return false; |  |  |  | 				return false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return true; |  |  |  | 		return true; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } |