Refuse DB writes for static world objects

DbManager.refuseStaticWrite logs the handler method and its caller and
stops the write (W3). It guards every write whose row belongs to a
Building, Zone, City, Guild, Mob or NPC: 69 handler methods, including
friends/condemned/patrol lists, guard minions, NPC profits and guild
banish/alliance lists. ID-only methods look the object up in the cache.
Writes that only reference a static object (character guild history,
another guild's alliance row) are not guarded.

Value changes: none; nothing is flagged static yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MagicBotandClaude Opus 5.5 committed 2026-10-27 07:45:31 -04:00
1 parent c89bda35da
commit 731425e85a
7 files changed
+240

No files matched your search

@@ -42,6 +42,9 @@ public class dbBuildingHandler extends dbHandlerBase {
int objectUUID = 0;
if (DbManager.refuseStaticWrite(building))
return 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL `building_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,? ,? ,?, ?);")) {
@@ -81,6 +84,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean DELETE_FROM_DATABASE(final Building b) {
if (DbManager.refuseStaticWrite(b))
return false;
return removeFromBuildings(b);
}
@@ -171,6 +177,9 @@ public class dbBuildingHandler extends dbHandlerBase {
String result = "";
if (DbManager.refuseStaticWrite(b))
return result;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL building_SETPROP(?,?,?)")) {
@@ -194,6 +203,9 @@ public class dbBuildingHandler extends dbHandlerBase {
int rowCount;
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `object` INNER JOIN `obj_building` On `object`.`UID` = `obj_building`.`UID` SET `object`.`parent`=?, `obj_building`.`locationX`=?, `obj_building`.`locationY`=?, `obj_building`.`locationZ`=? WHERE `obj_building`.`UID`=?;")) {
@@ -231,6 +243,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean CHANGE_NAME(Building b, String newName) {
if (DbManager.refuseStaticWrite(b))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_building` SET `name`=? WHERE `UID`=?")) {
@@ -247,6 +262,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean SET_RESERVE(Building b, int reserveAmount) {
if (DbManager.refuseStaticWrite(b))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_building` SET `reserve`=? WHERE `UID`=?")) {
@@ -265,6 +283,9 @@ public class dbBuildingHandler extends dbHandlerBase {
//CAS update to rank
public boolean CHANGE_RANK(final long buildingID, int newRank) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_building` SET `rank`=? WHERE `UID`=?")) {
@@ -281,6 +302,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean UPDATE_BUILDING_HEALTH(final long buildingID, int NewHealth) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_building` SET `currentHP`=? WHERE `UID`=?")) {
@@ -297,6 +321,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean UPDATE_BUILDING_ALTITUDE(final long buildingID, float newAltitude) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_building` SET `locationY`=? WHERE `UID`=?")) {
@@ -313,6 +340,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean UPDATE_PROTECTIONSTATE(final long buildingUUID, ProtectionState protectionState) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingUUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_building` SET `protectionState`=? WHERE `UID`=?")) {
@@ -329,6 +359,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean UPDATE_DOOR_LOCK(final int buildingUUID, int doorFlags) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingUUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_building SET doorState = ? WHERE UID = ?")) {
@@ -345,6 +378,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean ADD_TO_FRIENDS_LIST(final long buildingID, final long friendID, final long guildID, final int friendType) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_building_friends` (`buildingUID`, `playerUID`,`guildUID`, `friendType`) VALUES (?,?,?,?)")) {
@@ -363,6 +399,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean REMOVE_FROM_FRIENDS_LIST(final long buildingID, long friendID, long guildID, int friendType) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_building_friends` WHERE `buildingUID`=? AND `playerUID`=? AND `guildUID` =? AND `friendType` = ?")) {
@@ -381,6 +420,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean REMOVE_FROM_CONDEMNED_LIST(final long buildingID, long friendID, long guildID, int friendType) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_building_condemned` WHERE `buildingUID`=? AND `playerUID`=? AND `guildUID` =? AND `friendType` = ?")) {
@@ -399,6 +441,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public void CLEAR_FRIENDS_LIST(final long buildingID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_building_friends` WHERE `buildingUID`=?")) {
@@ -413,6 +458,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public void CLEAR_CONDEMNED_LIST(final long buildingID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_building_condemned` WHERE `buildingUID`=?")) {
@@ -427,6 +475,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean CLEAR_PATROL(final long buildingID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, buildingID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_building_patrol_points` WHERE `buildingUID`=?")) {
@@ -528,6 +579,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean ADD_TO_CONDEMNLIST(final long parentUID, final long playerUID, final long guildID, final int friendType) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, parentUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_building_condemned` (`buildingUID`, `playerUID`,`guildUID`, `friendType`) VALUES (?,?,?,?)")) {
@@ -546,6 +600,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean ADD_TO_PATROL(final long parentUID, final Vector3fImmutable patrolPoint) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, parentUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_building_patrol_points` (`buildingUID`, `patrolX`,`patrolY`, `patrolZ`) VALUES (?,?,?,?)")) {
@@ -691,6 +748,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean updateBuildingRank(final Building b, int Rank) {
if (DbManager.refuseStaticWrite(b))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_building` SET `rank`=?,"
+ "`upgradeDate`=?, `meshUUID`=?, `currentHP`=? "
@@ -712,6 +772,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean updateReverseKOS(final Building b, boolean reverse) {
if (DbManager.refuseStaticWrite(b))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_building` SET `reverseKOS`=? WHERE `UID` = ?")) {
@@ -728,6 +791,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean updateActiveCondemn(final Condemned condemn, boolean active) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Building, condemn.buildingUUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_building_condemned` SET `active`=? "
+ "WHERE`buildingUID` = ? AND `playerUID` = ? AND `guildUID` = ? AND `friendType` = ?")) {
@@ -748,6 +814,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean updateBuildingOwner(final Building building, int ownerUUID) {
if (DbManager.refuseStaticWrite(building))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_building` SET `ownerUUID`=? "
+ " WHERE `UID` = ?")) {
@@ -765,6 +834,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean updateBuildingUpgradeTime(LocalDateTime upgradeDateTime, Building toUpgrade, int costToUpgrade) {
if (DbManager.refuseStaticWrite(toUpgrade))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_building SET upgradeDate=?, currentGold=? "
+ "WHERE UID = ?")) {
@@ -788,6 +860,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean updateMaintDate(Building building) {
if (DbManager.refuseStaticWrite(building))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_building SET maintDate=? "
+ "WHERE UID = ?")) {
@@ -809,6 +884,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean addTaxes(Building building, TaxType taxType, int amount, boolean enforceKOS) {
if (DbManager.refuseStaticWrite(building))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_building SET taxType=?, taxAmount = ?, enforceKOS = ? "
+ "WHERE UID = ?")) {
@@ -828,6 +906,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean removeTaxes(Building building) {
if (DbManager.refuseStaticWrite(building))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_building SET taxType=?, taxAmount = ?, enforceKOS = ?, taxDate = ? "
+ "WHERE UID = ?")) {
@@ -848,6 +929,9 @@ public class dbBuildingHandler extends dbHandlerBase {
public boolean acceptTaxes(Building building) {
if (DbManager.refuseStaticWrite(building))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_building SET taxDate=? "
+ "WHERE UID = ?")) {
+18
View File
@@ -139,6 +139,9 @@ public class dbCityHandler extends dbHandlerBase {
public boolean updateforceRename(City city, boolean value) {
if (DbManager.refuseStaticWrite(city))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_city` SET `forceRename`=?"
+ " WHERE `UID` = ?")) {
@@ -156,6 +159,9 @@ public class dbCityHandler extends dbHandlerBase {
public boolean updateOpenCity(City city, boolean value) {
if (DbManager.refuseStaticWrite(city))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_city` SET `open`=?"
+ " WHERE `UID` = ?")) {
@@ -173,6 +179,9 @@ public class dbCityHandler extends dbHandlerBase {
public boolean updateTOL(City city, int tolID) {
if (DbManager.refuseStaticWrite(city))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_city` SET `treeOfLifeUUID`=?"
+ " WHERE `UID` = ?")) {
@@ -191,6 +200,9 @@ public class dbCityHandler extends dbHandlerBase {
public boolean renameCity(City city, String name) {
if (DbManager.refuseStaticWrite(city))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_city` SET `name`=?"
+ " WHERE `UID` = ?")) {
@@ -209,6 +221,9 @@ public class dbCityHandler extends dbHandlerBase {
public boolean updateSiegesWithstood(City city, int value) {
if (DbManager.refuseStaticWrite(city))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_city` SET `name`=?"
+ " WHERE `UID` = ?")) {
@@ -227,6 +242,9 @@ public class dbCityHandler extends dbHandlerBase {
public boolean updateRealmTaxDate(City city, LocalDateTime localDateTime) {
if (DbManager.refuseStaticWrite(city))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_city` SET `realmTaxDate` =?"
+ " WHERE `UID` = ?")) {
@@ -95,6 +95,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean ADD_TO_BANISHED_FROM_GUILDLIST(int target, long characterID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, target))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_guild_banishlist` (`GuildID`, `CharacterID`) VALUES (?,?)")) {
@@ -111,6 +114,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean REMOVE_FROM_BANISH_LIST(int target, long characterID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, target))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_guild_banishlist` (`GuildID`, `CharacterID`) VALUES (?,?)")) {
@@ -358,6 +364,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean SET_GUILD_OWNED_CITY(int guildID, int cityID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, guildID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_guild` SET `ownedCity`=? WHERE `UID`=?")) {
@@ -374,6 +383,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean SET_GUILD_LEADER(int objectUUID, int guildID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, guildID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_guild` SET `leaderUID`=? WHERE `UID`=?")) {
@@ -413,6 +425,9 @@ public class dbGuildHandler extends dbHandlerBase {
Guild guild = null;
GuildTag guildTag = g.getGuildTag();
if (DbManager.refuseStaticWrite(g))
return null;
if (guildTag == null)
return null;
@@ -465,6 +480,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean UPDATE_PARENT(int guildUID, int parentUID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, guildUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `object` SET `parent`=? WHERE `UID`=?")) {
@@ -483,6 +501,9 @@ public class dbGuildHandler extends dbHandlerBase {
int row_count = 0;
if (DbManager.refuseStaticWrite(guild))
return 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `object` WHERE `UID` = ?")) {
@@ -497,6 +518,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean UPDATE_MINETIME(int guildUID, int mineTime) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, guildUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_guild` SET `mineTime`=? WHERE `UID`=?")) {
@@ -564,6 +588,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean updateDatabase(final Guild g) {
if (DbManager.refuseStaticWrite(g))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_guild` SET `name`=?, `backgroundColor01`=?, `backgroundColor02`=?, `symbolColor`=?, `backgroundDesign`=?, `symbol`=?, `charter`=?, `motd`=?, `icMotd`=?, `nationMotd`=?, `leaderUID`=? WHERE `UID`=?")) {
@@ -590,6 +617,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean ADD_TO_ALLIANCE_LIST(final long sourceGuildID, final long targetGuildID, boolean isRecommended, boolean isAlly, String recommender) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, sourceGuildID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_guild_allianceenemylist` (`GuildID`, `OtherGuildID`,`isRecommended`, `isAlliance`, `recommender`) VALUES (?,?,?,?,?)")) {
@@ -609,6 +639,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean REMOVE_FROM_ALLIANCE_LIST(final long sourceGuildID, long targetGuildID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, sourceGuildID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_guild_allianceenemylist` WHERE `GuildID`=? AND `OtherGuildID`=?")) {
@@ -625,6 +658,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean UPDATE_RECOMMENDED(final long sourceGuildID, long targetGuildID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, sourceGuildID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_guild_allianceenemylist` SET `isRecommended` = ? WHERE `GuildID`=? AND `OtherGuildID`=?")) {
@@ -641,6 +677,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean UPDATE_ALLIANCE(final long sourceGuildID, long targetGuildID, boolean isAlly) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, sourceGuildID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_guild_allianceenemylist` SET `isAlliance` = ? WHERE `GuildID`=? AND `OtherGuildID`=?")) {
@@ -657,6 +696,9 @@ public class dbGuildHandler extends dbHandlerBase {
public boolean UPDATE_ALLIANCE_AND_RECOMMENDED(final long sourceGuildID, long targetGuildID, boolean isAlly) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Guild, sourceGuildID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_guild_allianceenemylist` SET `isRecommended` = ?, `isAlliance` = ? WHERE `GuildID`=? AND `OtherGuildID`=?")) {
+25
View File
@@ -32,6 +32,9 @@ public class dbMobHandler extends dbHandlerBase {
Mob mobile = null;
if (DbManager.refuseStaticWrite(toAdd))
return null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL `mob_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);")) {
@@ -84,6 +87,9 @@ public class dbMobHandler extends dbHandlerBase {
public boolean updateUpgradeTime(Mob mob, DateTime upgradeDateTime) {
if (DbManager.refuseStaticWrite(mob))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_mob SET upgradeDate=? "
+ "WHERE UID = ?")) {
@@ -106,6 +112,10 @@ public class dbMobHandler extends dbHandlerBase {
public int DELETE_MOB(final Mob mob) {
int row_count = 0;
if (DbManager.refuseStaticWrite(mob))
return 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `object` WHERE `UID` = ?")) {
@@ -146,6 +156,9 @@ public class dbMobHandler extends dbHandlerBase {
public boolean ADD_GUARD_MINION(final long captainUID, final String minionName) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Mob, captainUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_guards` (`captainUID`, `minionName`) VALUES (?,?)")) {
@@ -162,6 +175,9 @@ public class dbMobHandler extends dbHandlerBase {
public boolean REMOVE_GUARD_MINION(final long captainUID, final String minionName) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Mob, captainUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_guards` WHERE `captainUID`=? AND `minionName`=? LIMIT 1;")) {
@@ -178,6 +194,9 @@ public class dbMobHandler extends dbHandlerBase {
public boolean REMOVE_ALL_MINIONS(final long captainUID) {
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Mob, captainUID))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_guards` WHERE `captainUID`=?;")) {
@@ -212,6 +231,9 @@ public class dbMobHandler extends dbHandlerBase {
int row_count = 0;
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.Mob, mobID))
return 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `object` INNER JOIN `obj_mob` On `object`.`UID` = `obj_mob`.`UID` SET `object`.`parent`=?, `obj_mob`.`mob_spawnX`=?, `obj_mob`.`mob_spawnY`=?, `obj_mob`.`mob_spawnZ`=? WHERE `obj_mob`.`UID`=?;")) {
@@ -234,6 +256,9 @@ public class dbMobHandler extends dbHandlerBase {
String result = "";
if (DbManager.refuseStaticWrite(m))
return result;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL mob_SETPROP(?,?,?)")) {
+36
View File
@@ -75,6 +75,9 @@ public class dbNPCHandler extends dbHandlerBase {
NPC npc = null;
if (DbManager.refuseStaticWrite(toAdd))
return null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL `npc_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);")) {
@@ -120,6 +123,9 @@ public class dbNPCHandler extends dbHandlerBase {
npc.removeFromZone();
if (DbManager.refuseStaticWrite(npc))
return 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `object` WHERE `UID` = ?")) {
@@ -172,6 +178,9 @@ public class dbNPCHandler extends dbHandlerBase {
int rowCount;
if (DbManager.refuseStaticWrite(mbEnums.GameObjectType.NPC, npcID))
return 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `object` INNER JOIN `obj_npc` On `object`.`UID` = `obj_npc`.`UID` SET `object`.`parent`=?, `obj_npc`.`npc_spawnX`=?, `obj_npc`.`npc_spawnY`=?, `obj_npc`.`npc_spawnZ`=? WHERE `obj_npc`.`UID`=?;")) {
@@ -195,6 +204,9 @@ public class dbNPCHandler extends dbHandlerBase {
String result = "";
if (DbManager.refuseStaticWrite(n))
return result;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL npc_SETPROP(?,?,?)")) {
@@ -215,6 +227,9 @@ public class dbNPCHandler extends dbHandlerBase {
public void updateDatabase(final NPC npc) {
if (DbManager.refuseStaticWrite(npc))
return;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_npc SET npc_name=?, npc_contractID=?, npc_typeID=?, npc_guildID=?,"
+ " npc_spawnX=?, npc_spawnY=?, npc_spawnZ=?, npc_level=? ,"
@@ -242,6 +257,9 @@ public class dbNPCHandler extends dbHandlerBase {
public boolean updateUpgradeTime(NPC npc, DateTime upgradeDateTime) {
if (DbManager.refuseStaticWrite(npc))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_npc SET upgradeDate=? "
+ "WHERE UID = ?")) {
@@ -264,6 +282,9 @@ public class dbNPCHandler extends dbHandlerBase {
public boolean UPDATE_MOBBASE(NPC npc, int mobBaseID) {
if (DbManager.refuseStaticWrite(npc))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_npc` SET `npc_raceID`=? WHERE `UID`=?")) {
@@ -280,6 +301,9 @@ public class dbNPCHandler extends dbHandlerBase {
public boolean UPDATE_EQUIPSET(NPC npc, int equipSetID) {
if (DbManager.refuseStaticWrite(npc))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_npc` SET `equipsetID`=? WHERE `UID`=?")) {
@@ -296,6 +320,9 @@ public class dbNPCHandler extends dbHandlerBase {
public boolean UPDATE_NAME(NPC npc, String name) {
if (DbManager.refuseStaticWrite(npc))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_npc` SET `npc_name`=? WHERE `UID`=?")) {
@@ -312,6 +339,9 @@ public class dbNPCHandler extends dbHandlerBase {
public boolean UPDATE_RACE(NPC npc, int value) {
if (DbManager.refuseStaticWrite(npc))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_npc` SET `npc_raceID`=? WHERE `UID`=?")) {
@@ -363,6 +393,9 @@ public class dbNPCHandler extends dbHandlerBase {
public boolean UPDATE_PROFITS(NPC npc, ProfitType profitType, float value) {
if (DbManager.refuseStaticWrite(npc))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_npc_profits` SET `" + profitType.dbField + "` = ? WHERE `npcUID`=?")) {
@@ -398,6 +431,9 @@ public class dbNPCHandler extends dbHandlerBase {
public boolean CREATE_PROFITS(NPC npc) {
if (DbManager.refuseStaticWrite(npc))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_npc_profits` (`npcUID`) VALUES (?)")) {
@@ -104,6 +104,9 @@ public class dbZoneHandler extends dbHandlerBase {
public boolean DELETE_ZONE(final Zone zone) {
if (DbManager.refuseStaticWrite(zone))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `object` WHERE `UID` = ? AND `type` = 'zone'")) {
+32
View File
@@ -86,6 +86,38 @@ public enum DbManager {
return staticID;
}
// W3: static world objects never reach the DB. Logs the refused handler method and its caller.
public static boolean refuseStaticWrite(AbstractWorldObject worldObject) {
StackTraceElement[] stack;
String caller;
int frame = 1;
if (worldObject == null || !worldObject.isStaticWorldObject())
return false;
stack = new Throwable().getStackTrace();
while (frame < stack.length - 1 && stack[frame].getClassName().equals(DbManager.class.getName()))
frame++;
caller = (frame + 1 < stack.length) ? stack[frame + 1].toString() : "unknown";
Logger.error("Refused DB write for static " + worldObject.getObjectType() + " " + worldObject.getObjectUUID()
+ " in " + stack[frame] + " called from " + caller);
return true;
}
public static boolean refuseStaticWrite(GameObjectType objectType, long objectUUID) {
AbstractGameObject gameObject = getFromCache(objectType, (int) objectUUID);
if (gameObject instanceof AbstractWorldObject)
return refuseStaticWrite((AbstractWorldObject) gameObject);
return false;
}
public static AbstractGameObject getObject(GameObjectType objectType, int objectUUID) {
AbstractGameObject outObject = null;