diff --git a/src/engine/db/handlers/dbBuildingHandler.java b/src/engine/db/handlers/dbBuildingHandler.java index ae4ac9f5..3fbc5f19 100644 --- a/src/engine/db/handlers/dbBuildingHandler.java +++ b/src/engine/db/handlers/dbBuildingHandler.java @@ -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 = ?")) { diff --git a/src/engine/db/handlers/dbCityHandler.java b/src/engine/db/handlers/dbCityHandler.java index b03ee0ca..28b83dd8 100644 --- a/src/engine/db/handlers/dbCityHandler.java +++ b/src/engine/db/handlers/dbCityHandler.java @@ -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` = ?")) { diff --git a/src/engine/db/handlers/dbGuildHandler.java b/src/engine/db/handlers/dbGuildHandler.java index e7ed61e0..38485301 100644 --- a/src/engine/db/handlers/dbGuildHandler.java +++ b/src/engine/db/handlers/dbGuildHandler.java @@ -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`=?")) { diff --git a/src/engine/db/handlers/dbMobHandler.java b/src/engine/db/handlers/dbMobHandler.java index 172d8541..5e36bfa9 100644 --- a/src/engine/db/handlers/dbMobHandler.java +++ b/src/engine/db/handlers/dbMobHandler.java @@ -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(?,?,?)")) { diff --git a/src/engine/db/handlers/dbNPCHandler.java b/src/engine/db/handlers/dbNPCHandler.java index d95a8e12..012083a8 100644 --- a/src/engine/db/handlers/dbNPCHandler.java +++ b/src/engine/db/handlers/dbNPCHandler.java @@ -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 (?)")) { diff --git a/src/engine/db/handlers/dbZoneHandler.java b/src/engine/db/handlers/dbZoneHandler.java index 339444ec..d5314a25 100644 --- a/src/engine/db/handlers/dbZoneHandler.java +++ b/src/engine/db/handlers/dbZoneHandler.java @@ -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'")) { diff --git a/src/engine/gameManager/DbManager.java b/src/engine/gameManager/DbManager.java index 1f8a33f4..2efece7f 100644 --- a/src/engine/gameManager/DbManager.java +++ b/src/engine/gameManager/DbManager.java @@ -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;