| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -48,6 +48,8 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public static long lastCityUpdate = 0; | 
					 | 
					 | 
					 | 
					    public static long lastCityUpdate = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public final HashSet<Integer> _playerMemory = new HashSet<>(); | 
					 | 
					 | 
					 | 
					    public final HashSet<Integer> _playerMemory = new HashSet<>(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    private final boolean isOpen = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    private final boolean reverseKOS = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public java.time.LocalDateTime established; | 
					 | 
					 | 
					 | 
					    public java.time.LocalDateTime established; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public boolean hasBeenTransfered = false; | 
					 | 
					 | 
					 | 
					    public boolean hasBeenTransfered = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public LocalDateTime realmTaxDate; | 
					 | 
					 | 
					 | 
					    public LocalDateTime realmTaxDate; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -55,7 +57,8 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public volatile boolean protectionEnforced = true; | 
					 | 
					 | 
					 | 
					    public volatile boolean protectionEnforced = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public ArrayList<Building> cityBarracks; | 
					 | 
					 | 
					 | 
					    public ArrayList<Building> cityBarracks; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public ArrayList<Integer> cityOutlaws = new ArrayList<>(); | 
					 | 
					 | 
					 | 
					    public ArrayList<Integer> cityOutlaws = new ArrayList<>(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    protected Zone parentZone; | 
					 | 
					 | 
					 | 
					    public Zone parentZone; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    public int parentZoneUUID; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private String cityName; | 
					 | 
					 | 
					 | 
					    private String cityName; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private String motto; | 
					 | 
					 | 
					 | 
					    private String motto; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private String description; | 
					 | 
					 | 
					 | 
					    private String description; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -73,15 +76,12 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private boolean forceRename = false; | 
					 | 
					 | 
					 | 
					    private boolean forceRename = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private boolean noTeleport = false; //used by npc cities
 | 
					 | 
					 | 
					 | 
					    private boolean noTeleport = false; //used by npc cities
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private boolean noRepledge = false; //used by npc cities
 | 
					 | 
					 | 
					 | 
					    private boolean noRepledge = false; //used by npc cities
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private final boolean isOpen = false; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private int treeOfLifeID; | 
					 | 
					 | 
					 | 
					    private int treeOfLifeID; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private Vector3fImmutable location = Vector3fImmutable.ZERO; | 
					 | 
					 | 
					 | 
					    private Vector3fImmutable location = Vector3fImmutable.ZERO; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Players who have entered the city (used for adding and removing affects)
 | 
					 | 
					 | 
					 | 
					    // Players who have entered the city (used for adding and removing affects)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private Vector3fImmutable bindLoc; | 
					 | 
					 | 
					 | 
					    private Vector3fImmutable bindLoc; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private int warehouseBuildingID = 0; | 
					 | 
					 | 
					 | 
					    private int warehouseBuildingID = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private boolean open = false; | 
					 | 
					 | 
					 | 
					    private boolean open = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private boolean reverseKOS = false; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    private String hash; | 
					 | 
					 | 
					 | 
					    private String hash; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    /** | 
					 | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -91,6 +91,7 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public City(ResultSet rs) throws SQLException { | 
					 | 
					 | 
					 | 
					    public City(ResultSet rs) throws SQLException { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        super(rs); | 
					 | 
					 | 
					 | 
					        super(rs); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        try { | 
					 | 
					 | 
					 | 
					        try { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            this.parentZoneUUID = rs.getInt("parent"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.cityName = rs.getString("name"); | 
					 | 
					 | 
					 | 
					            this.cityName = rs.getString("name"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.motto = rs.getString("motto"); | 
					 | 
					 | 
					 | 
					            this.motto = rs.getString("motto"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.isNpc = rs.getByte("isNpc"); | 
					 | 
					 | 
					 | 
					            this.isNpc = rs.getByte("isNpc"); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -126,7 +127,9 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    this.location.getY(), | 
					 | 
					 | 
					 | 
					                    this.location.getY(), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    this.location.getZ() + this.bindZ); | 
					 | 
					 | 
					 | 
					                    this.location.getZ() + this.bindZ); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.radiusType = rs.getInt("radiusType"); | 
					 | 
					 | 
					 | 
					            this.radiusType = rs.getInt("radiusType"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            float bindradiustemp = rs.getFloat("bindRadius"); | 
					 | 
					 | 
					 | 
					            float bindradiustemp = rs.getFloat("bindRadius"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (bindradiustemp > 2) | 
					 | 
					 | 
					 | 
					            if (bindradiustemp > 2) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                bindradiustemp -= 2; | 
					 | 
					 | 
					 | 
					                bindradiustemp -= 2; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -135,30 +138,8 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.forceRename = rs.getInt("forceRename") == 1; | 
					 | 
					 | 
					 | 
					            this.forceRename = rs.getInt("forceRename") == 1; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.open = rs.getInt("open") == 1; | 
					 | 
					 | 
					 | 
					            this.open = rs.getInt("open") == 1; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (this.cityName.equals("Perdition") || this.cityName.equals("Bastion")) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                this.noTeleport = true; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                this.noRepledge = true; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } else { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                this.noTeleport = false; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                this.noRepledge = false; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.hash = rs.getString("hash"); | 
					 | 
					 | 
					 | 
					            this.hash = rs.getString("hash"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (this.motto.isEmpty()) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                Guild guild = this.getGuild(); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if (guild != null && guild.isEmptyGuild() == false) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    this.motto = guild.getMotto(); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            Zone zone = ZoneManager.getZoneByUUID(rs.getInt("parent")); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (zone != null) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                setParent(zone); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            //npc cities without heightmaps except swampstone are specials.
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.realmID = rs.getInt("realmID"); | 
					 | 
					 | 
					 | 
					            this.realmID = rs.getInt("realmID"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } catch (Exception e) { | 
					 | 
					 | 
					 | 
					        } catch (Exception e) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -567,30 +548,6 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        return this.parentZone; | 
					 | 
					 | 
					 | 
					        return this.parentZone; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public void setParent(Zone zone) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        try { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.parentZone = zone; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.location = new Vector3fImmutable(zone.absX, zone.absY, zone.absZ); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.bindLoc = new Vector3fImmutable(this.location.x + this.bindX, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    this.location.y, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    this.location.z + this.bindZ); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            // set city bounds
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            Bounds cityBounds = Bounds.borrow(); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            cityBounds.setBounds(new Vector2f(this.location.x + 64, this.location.z + 64), // location x and z are offset by 64 from the center of the city.
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    new Vector2f(Enum.CityBoundsType.GRID.halfExtents, Enum.CityBoundsType.GRID.halfExtents), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    0.0f); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.setBounds(cityBounds); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } catch (Exception e) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            Logger.error(e); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public AbstractCharacter getOwner() { | 
					 | 
					 | 
					 | 
					    public AbstractCharacter getOwner() { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (this.getTOL() == null) | 
					 | 
					 | 
					 | 
					        if (this.getTOL() == null) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -720,9 +677,31 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    @Override | 
					 | 
					 | 
					 | 
					    @Override | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public void runAfterLoad() { | 
					 | 
					 | 
					 | 
					    public void runAfterLoad() { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // Set city bounds
 | 
					 | 
					 | 
					 | 
					        this.setObjectTypeMask(MBServerStatics.MASK_CITY); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // *** Note: Moved to SetParent()
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        //     for some undocumented reason
 | 
					 | 
					 | 
					 | 
					        // Set parent
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        this.parentZone = ZoneManager.getZoneByUUID(this.parentZoneUUID); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        // If it's not a player city then must be an NPC city
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (!parentZone.guild_zone) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            parentZone.isNPCCity = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        // Set location for this city
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        this.location = new Vector3fImmutable(this.parentZone.absX, this.parentZone.absY, this.parentZone.absZ); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        this.bindLoc = new Vector3fImmutable(this.location.x + this.bindX, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                this.location.y, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                this.location.z + this.bindZ); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        // set city bounds
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        Bounds cityBounds = Bounds.borrow(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        cityBounds.setBounds(new Vector2f(this.location.x + 64, this.location.z + 64), // location x and z are offset by 64 from the center of the city.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                new Vector2f(Enum.CityBoundsType.GRID.halfExtents, Enum.CityBoundsType.GRID.halfExtents), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                0.0f); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        this.setBounds(cityBounds); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // Set city motto to current guild motto
 | 
					 | 
					 | 
					 | 
					        // Set city motto to current guild motto
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -749,8 +728,10 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                for (Guild sub : this.getGuild().getSubGuildList()) { | 
					 | 
					 | 
					 | 
					                for (Guild sub : this.getGuild().getSubGuildList()) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if ((sub.getGuildState() == GuildState.Protectorate) || | 
					 | 
					 | 
					 | 
					                    if ((sub.getGuildState() == GuildState.Protectorate) || | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            (sub.getGuildState() == GuildState.Province)) | 
					 | 
					 | 
					 | 
					                            (sub.getGuildState() == GuildState.Province)) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        this.isCapital = 1; | 
					 | 
					 | 
					 | 
					                        this.isCapital = 1; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                } | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            ArrayList<PlayerCharacter> guildList = Guild.GuildRoster(this.getGuild()); | 
					 | 
					 | 
					 | 
					            ArrayList<PlayerCharacter> guildList = Guild.GuildRoster(this.getGuild()); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -758,6 +739,26 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            this.population = guildList.size(); | 
					 | 
					 | 
					 | 
					            this.population = guildList.size(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (this.cityName.equals("Perdition") || this.cityName.equals("Bastion")) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            this.noTeleport = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            this.noRepledge = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } else { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            this.noTeleport = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            this.noRepledge = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        // Add city entry to data warehouse if newly created
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if ((ConfigManager.serverType.equals(Enum.ServerType.WORLDSERVER)) && (this.getHash() == null)) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            this.setHash(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            if (DataWarehouse.recordExists(Enum.DataRecordType.CITY, this.getObjectUUID()) == false) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                CityRecord cityRecord = CityRecord.borrow(this, Enum.RecordEventType.CREATE); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                DataWarehouse.pushToWarehouse(cityRecord); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // Banes are loaded for this city from the database at this point
 | 
					 | 
					 | 
					 | 
					        // Banes are loaded for this city from the database at this point
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (this.getBane() == null) | 
					 | 
					 | 
					 | 
					        if (this.getBane() == null) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -765,12 +766,12 @@ public class City extends AbstractWorldObject { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // if this city is baned, add the siege effect
 | 
					 | 
					 | 
					 | 
					        // if this city is baned, add the siege effect
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        try { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        this.getTOL().addEffectBit((1 << 16)); | 
					 | 
					 | 
					 | 
					        this.getTOL().addEffectBit((1 << 16)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        this.getBane().getStone().addEffectBit((1 << 19)); | 
					 | 
					 | 
					 | 
					        this.getBane().getStone().addEffectBit((1 << 19)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } catch (Exception e) { | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            Logger.info("Failed ao add bane effects on city." + e.getMessage()); | 
					 | 
					 | 
					 | 
					        // Spawn city
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        this.setLoc(this.getLoc()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public void addCityEffect(EffectsBase effectBase, int rank) { | 
					 | 
					 | 
					 | 
					    public void addCityEffect(EffectsBase effectBase, int rank) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |