Browse Source

Begin refactor of cities

magicbox-1.5.2
MagicBot 1 year ago
parent
commit
694b10d3b2
  1. 29
      src/engine/gameManager/ZoneManager.java
  2. 3
      src/engine/net/client/handlers/PlaceAssetMsgHandler.java
  3. 121
      src/engine/objects/City.java

29
src/engine/gameManager/ZoneManager.java

@ -10,8 +10,6 @@ package engine.gameManager;
import engine.Enum; import engine.Enum;
import engine.InterestManagement.Terrain; import engine.InterestManagement.Terrain;
import engine.db.archive.CityRecord;
import engine.db.archive.DataWarehouse;
import engine.math.Bounds; import engine.math.Bounds;
import engine.math.Vector2f; import engine.math.Vector2f;
import engine.math.Vector3f; import engine.math.Vector3f;
@ -424,33 +422,6 @@ public enum ZoneManager {
return validLocation; return validLocation;
} }
public static void loadCities(Zone zone) {
ArrayList<City> cities = DbManager.CityQueries.GET_CITIES_BY_ZONE(zone.getObjectUUID());
for (City city : cities) {
city.setParent(zone);
city.setObjectTypeMask(MBServerStatics.MASK_CITY);
city.setLoc(city.getLoc()); // huh?
//not player city, must be npc city..
if (!zone.guild_zone)
zone.isNPCCity = true;
if ((ConfigManager.serverType.equals(Enum.ServerType.WORLDSERVER)) && (city.getHash() == null)) {
city.setHash();
if (DataWarehouse.recordExists(Enum.DataRecordType.CITY, city.getObjectUUID()) == false) {
CityRecord cityRecord = CityRecord.borrow(city, Enum.RecordEventType.CREATE);
DataWarehouse.pushToWarehouse(cityRecord);
}
}
}
}
public static float calculateGlobalZoneHeight(Zone zone) { public static float calculateGlobalZoneHeight(Zone zone) {
float worldAlttitude = MBServerStatics.SEA_FLOOR_ALTITUDE; float worldAlttitude = MBServerStatics.SEA_FLOOR_ALTITUDE;

3
src/engine/net/client/handlers/PlaceAssetMsgHandler.java

@ -794,9 +794,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
zoneObject.global_height = ZoneManager.calculateGlobalZoneHeight(zoneObject); zoneObject.global_height = ZoneManager.calculateGlobalZoneHeight(zoneObject);
cityObject.setParent(zoneObject);
cityObject.setObjectTypeMask(MBServerStatics.MASK_CITY); // *** Refactor : should have it already
//Link the tree of life with the new zone //Link the tree of life with the new zone
treeObject.setObjectTypeMask(MBServerStatics.MASK_BUILDING); treeObject.setObjectTypeMask(MBServerStatics.MASK_BUILDING);

121
src/engine/objects/City.java

@ -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) { // Spawn city
Logger.info("Failed ao add bane effects on city." + e.getMessage());
} this.setLoc(this.getLoc());
} }
public void addCityEffect(EffectsBase effectBase, int rank) { public void addCityEffect(EffectsBase effectBase, int rank) {

Loading…
Cancel
Save