Files
Server/src/engine/db/handlers/dbGuildHandler.java
T
MagicBotandClaude Opus 5.5 731425e85a 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>
2026-10-27 07:45:31 -04:00

741 lines
27 KiB
Java

// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2026
// https://www.magicbane.com
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.GuildHistoryType;
import engine.objects.*;
import engine.server.world.WorldServer;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
import java.sql.*;
import java.util.ArrayList;
public class dbGuildHandler extends dbHandlerBase {
public dbGuildHandler() {
this.localClass = Guild.class;
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public static ArrayList<PlayerCharacter> GET_GUILD_BANISHED(final int id) {
return new ArrayList<>();
// Bugfix
// prepareCallable("SELECT * FROM `obj_character`, `dyn_guild_banishlist` WHERE `obj_character.char_isActive` = 1 AND `dyn_guild_banishlist.CharacterID` = `obj_character.UID` AND `obj_character.GuildID`=?");
//prepareCallable("SELECT * FROM `obj_character` `,` `dyn_guild_banishlist` WHERE obj_character.char_isActive = 1 AND dyn_guild_banishlist.CharacterID = obj_character.UID AND dyn_guild_banishlist.GuildID = ?");
//setLong(1, (long) id);
//return getObjectList();
}
public static void LOAD_GUILD_HISTORY_FOR_PLAYER(PlayerCharacter playerCharacter) {
if (playerCharacter == null)
return;
ArrayList<GuildHistory> guildList = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_guild_allianceenemylist` WHERE `GuildID` = ?")) {
preparedStatement.setInt(1, playerCharacter.getObjectUUID());
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
GuildHistory guildEntry = new GuildHistory(rs);
guildList.add(guildEntry);
}
} catch (SQLException e) {
Logger.error(e);
}
playerCharacter.setGuildHistory(guildList);
}
public int BANISH_FROM_GUILD_OFFLINE(final int target, boolean sourceIsGuildLeader) {
String queryString;
int rowCount;
// Only a Guild Leader can remove inner council
if (sourceIsGuildLeader)
queryString = "UPDATE `obj_character` SET `guildUID`=NULL, `guild_isInnerCouncil`=0, `guild_isTaxCollector`=0,"
+ " `guild_isRecruiter`=0, `guild_isFullMember`=0, `guild_title`=0 WHERE `UID`=?";
else
queryString = "UPDATE `obj_character` SET `guildUID`=NULL, `guild_isInnerCouncil`=0, `guild_isTaxCollector`=0,"
+ " `guild_isRecruiter`=0, `guild_isFullMember`=0, `guild_title`=0 WHERE `UID`=? && `guild_isInnerCouncil`=0";
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(queryString)) {
preparedStatement.setLong(1, target);
rowCount = preparedStatement.executeUpdate();
} catch (SQLException e) {
Logger.error(e);
return 0;
}
return rowCount;
}
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 (?,?)")) {
preparedStatement.setLong(1, target);
preparedStatement.setLong(2, characterID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
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 (?,?)")) {
preparedStatement.setLong(1, target);
preparedStatement.setLong(2, characterID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean ADD_TO_GUILDHISTORY(int target, PlayerCharacter playerCharacter, DateTime historyDate, GuildHistoryType historyType) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_character_guildhistory` (`GuildID`, `CharacterID`, `historyDate`, `historyType`) VALUES (?,?,?,?)")) {
preparedStatement.setLong(1, target);
preparedStatement.setLong(2, playerCharacter.getObjectUUID());
if (historyDate == null)
preparedStatement.setNull(3, java.sql.Types.DATE);
else
preparedStatement.setTimestamp(3, new Timestamp(historyDate.getMillis()));
preparedStatement.setString(4, historyType.name());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
//TODO Need to get this working.
public ArrayList<Guild> GET_GUILD_HISTORY_OF_PLAYER(final int id) {
ArrayList<Guild> guildList = null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT g.* FROM `obj_guild` g, `dyn_character_guildhistory` l WHERE g.`UID` = l.`GuildID` && l.`CharacterID` = ?")) {
preparedStatement.setLong(1, id);
ResultSet rs = preparedStatement.executeQuery();
guildList = getObjectsFromRs(rs, 20);
} catch (SQLException e) {
Logger.error(e);
}
return guildList;
}
public ArrayList<Guild> GET_GUILD_ALLIES(final int id) {
ArrayList<Guild> guildList = null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT g.* FROM `obj_guild` g, `dyn_guild_allianceenemylist` l "
+ "WHERE l.isAlliance = 1 && l.OtherGuildID = g.UID && l.GuildID=?")) {
preparedStatement.setLong(1, id);
ResultSet rs = preparedStatement.executeQuery();
guildList = getObjectsFromRs(rs, 20);
} catch (SQLException e) {
Logger.error(e);
}
return guildList;
}
public ArrayList<Guild> GET_GUILD_ENEMIES(final int id) {
ArrayList<Guild> guildList = null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT g.* FROM `obj_guild` g, `dyn_guild_allianceenemylist` l "
+ "WHERE l.isAlliance = 0 && l.OtherGuildID = g.UID && l.GuildID=?")) {
preparedStatement.setLong(1, id);
ResultSet rs = preparedStatement.executeQuery();
guildList = getObjectsFromRs(rs, 20);
} catch (SQLException e) {
Logger.error(e);
}
return guildList;
}
public ArrayList<PlayerCharacter> GET_GUILD_KOS_CHARACTER(final int id) {
ArrayList<PlayerCharacter> kosList = null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT c.* FROM `obj_character` c, `dyn_guild_characterkoslist` l WHERE c.`char_isActive` = 1 && l.`KOSCharacterID` = c.`UID` && l.`GuildID`=?")) {
preparedStatement.setLong(1, id);
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
int playerUUID = rs.getInt(1);
PlayerCharacter kosPlayer = PlayerCharacter.getPlayerCharacter(playerUUID);
if (kosPlayer != null)
kosList.add(kosPlayer);
}
} catch (SQLException e) {
Logger.error(e);
}
return kosList;
}
public ArrayList<Guild> GET_GUILD_KOS_GUILD(final int id) {
ArrayList<Guild> guildList = null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT g.* FROM `obj_guild` g, `dyn_guild_guildkoslist` l "
+ "WHERE l.KOSGuildID = g.UID && l.GuildID = ?")) {
preparedStatement.setLong(1, id);
ResultSet rs = preparedStatement.executeQuery();
guildList = getObjectsFromRs(rs, 20);
} catch (SQLException e) {
Logger.error(e);
}
return guildList;
}
public ArrayList<Guild> GET_SUB_GUILDS(final int guildID) {
ArrayList<Guild> guildList = null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_guild`.*, `object`.`parent` FROM `object` INNER JOIN `obj_guild` ON `obj_guild`.`UID` = `object`.`UID` WHERE `object`.`parent` = ?;")) {
preparedStatement.setInt(1, guildID);
ResultSet rs = preparedStatement.executeQuery();
guildList = getObjectsFromRs(rs, 20);
} catch (SQLException e) {
Logger.error(e);
}
return guildList;
}
public Guild GET_GUILD(int id) {
Guild guild = (Guild) DbManager.getFromCache(mbEnums.GameObjectType.Guild, id);
if (guild != null)
return guild;
if (id == 0)
return Guild.getErrantGuild();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_guild`.*, `object`.`parent` FROM `obj_guild` INNER JOIN `object` ON `object`.`UID` = `obj_guild`.`UID` WHERE `object`.`UID`=?")) {
preparedStatement.setLong(1, id);
ResultSet rs = preparedStatement.executeQuery();
guild = (Guild) getObjectFromRs(rs);
} catch (SQLException e) {
Logger.error(e);
}
return guild;
}
public ArrayList<Guild> GET_ALL_GUILDS() {
ArrayList<Guild> guildList = null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_guild`.*, `object`.`parent` FROM `obj_guild` INNER JOIN `object` ON `object`.`UID` = `obj_guild`.`UID`")) {
ResultSet rs = preparedStatement.executeQuery();
guildList = getObjectsFromRs(rs, 100);
} catch (SQLException e) {
Logger.error(e);
}
return guildList;
}
public boolean IS_CREST_UNIQUE(final GuildTag gt) {
boolean valid = false;
String queryString;
// Ignore bg symbol if bg color is the same as fg color.
if (gt.backgroundColor01 == gt.backgroundColor02)
queryString = "SELECT `name` FROM `obj_guild` WHERE `backgroundColor01`=? && `backgroundColor02`=? && `symbolColor`=? && `symbol`=?;";
else
queryString = "SELECT `name` FROM `obj_guild` WHERE `backgroundColor01`=? && `backgroundColor02`=? && `symbolColor`=? && `backgroundDesign`=? && `symbol`=?;";
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(queryString)) {
if (gt.backgroundColor01 == gt.backgroundColor02) {
preparedStatement.setInt(1, gt.backgroundColor01);
preparedStatement.setInt(2, gt.backgroundColor02);
preparedStatement.setInt(3, gt.symbolColor);
preparedStatement.setInt(4, gt.symbol);
} else {
preparedStatement.setInt(1, gt.backgroundColor01);
preparedStatement.setInt(2, gt.backgroundColor02);
preparedStatement.setInt(3, gt.symbolColor);
preparedStatement.setInt(4, gt.backgroundDesign);
preparedStatement.setInt(5, gt.symbol);
}
ResultSet rs = preparedStatement.executeQuery();
if (!rs.next())
valid = true;
} catch (SQLException e) {
Logger.error(e);
}
return valid;
}
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`=?")) {
preparedStatement.setLong(1, cityID);
preparedStatement.setLong(2, guildID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
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`=?")) {
preparedStatement.setLong(1, objectUUID);
preparedStatement.setLong(2, guildID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean IS_NAME_UNIQUE(final String name) {
boolean valid = false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `name` FROM `obj_guild` WHERE `name`=?;")) {
preparedStatement.setString(1, name);
ResultSet rs = preparedStatement.executeQuery();
if (!rs.next())
valid = true;
} catch (SQLException e) {
Logger.error(e);
}
return valid;
}
public Guild SAVE_TO_DATABASE(Guild g) {
Guild guild = null;
GuildTag guildTag = g.getGuildTag();
if (DbManager.refuseStaticWrite(g))
return null;
if (guildTag == null)
return null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL `guild_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
preparedStatement.setLong(1, WorldServer.worldUUID);
preparedStatement.setLong(2, g.getGuildLeaderUUID());
preparedStatement.setString(3, g.getName());
preparedStatement.setInt(4, guildTag.backgroundColor01);
preparedStatement.setInt(5, guildTag.backgroundColor02);
preparedStatement.setInt(6, guildTag.symbolColor);
preparedStatement.setInt(7, guildTag.backgroundDesign);
preparedStatement.setInt(8, guildTag.symbol);
preparedStatement.setInt(9, g.charter.templateID);
preparedStatement.setString(10, g.getLeadershipType());
preparedStatement.setString(11, g.getMotto());
ResultSet rs = preparedStatement.executeQuery();
if (rs.next()) {
int objectUUID = (int) rs.getLong("UID");
if (objectUUID > 0)
guild = GET_GUILD(objectUUID);
}
} catch (SQLException e) {
Logger.error(e);
}
return guild;
}
public boolean UPDATE_GUILD_RANK_OFFLINE(int target, int newRank, int guildId) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `guild_title`=? WHERE `UID`=? && `guildUID`=?")) {
preparedStatement.setInt(1, newRank);
preparedStatement.setInt(2, target);
preparedStatement.setInt(3, guildId);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
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`=?")) {
preparedStatement.setInt(1, parentUID);
preparedStatement.setInt(2, guildUID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public int DELETE_GUILD(final Guild guild) {
int row_count = 0;
if (DbManager.refuseStaticWrite(guild))
return 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `object` WHERE `UID` = ?")) {
preparedStatement.setLong(1, guild.getObjectUUID());
row_count = preparedStatement.executeUpdate();
} catch (SQLException e) {
Logger.error(e);
}
return row_count;
}
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`=?")) {
preparedStatement.setInt(1, mineTime);
preparedStatement.setInt(2, guildUID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
// *** Refactor: Why are we saving tags/charter in update?
// It's not like this shit ever changes.
public int UPDATE_GUILD_STATUS_OFFLINE(int target, boolean isInnerCouncil, boolean isRecruiter, boolean isTaxCollector, int guildId) {
int updateMask = 0;
int row_count = 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `guild_isInnerCouncil`, `guild_isTaxCollector`, `guild_isRecruiter` FROM `obj_character` WHERE `UID`=? && `guildUID`=?")) {
preparedStatement.setLong(1, target);
preparedStatement.setLong(2, guildId);
ResultSet rs = preparedStatement.executeQuery();
//If the first query had no results, neither will the second
//Determine what is different
if (rs.first()) {
if (rs.getBoolean("guild_isInnerCouncil") != isInnerCouncil)
updateMask |= 4;
if (rs.getBoolean("guild_isRecruiter") != isRecruiter)
updateMask |= 2;
if (rs.getBoolean("guild_isTaxCollector") != isTaxCollector)
updateMask |= 1;
}
} catch (SQLException e) {
Logger.error(e);
}
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `guild_isInnerCouncil`=?, `guild_isTaxCollector`=?, `guild_isRecruiter`=?, `guild_isFullMember`=? WHERE `UID`=? && `guildUID`=?")) {
preparedStatement.setBoolean(1, isInnerCouncil);
preparedStatement.setBoolean(2, isRecruiter);
preparedStatement.setBoolean(3, isTaxCollector);
preparedStatement.setBoolean(4, ((updateMask > 0))); //If you are becoming an officer, or where an officer, your a full member...
preparedStatement.setLong(5, target);
preparedStatement.setLong(6, guildId);
row_count = preparedStatement.executeUpdate();
} catch (SQLException e) {
Logger.error(e);
}
return row_count;
}
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`=?")) {
preparedStatement.setString(1, g.getName());
preparedStatement.setInt(2, g.getGuildTag().backgroundColor01);
preparedStatement.setInt(3, g.getGuildTag().backgroundColor02);
preparedStatement.setInt(4, g.getGuildTag().symbolColor);
preparedStatement.setInt(5, g.getGuildTag().backgroundDesign);
preparedStatement.setInt(6, g.getGuildTag().symbol);
preparedStatement.setInt(7, g.charter.templateID);
preparedStatement.setString(8, g.getMOTD());
preparedStatement.setString(9, g.getICMOTD());
preparedStatement.setString(10, "");
preparedStatement.setInt(11, g.getGuildLeaderUUID());
preparedStatement.setLong(12, g.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
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 (?,?,?,?,?)")) {
preparedStatement.setLong(1, sourceGuildID);
preparedStatement.setLong(2, targetGuildID);
preparedStatement.setBoolean(3, isRecommended);
preparedStatement.setBoolean(4, isAlly);
preparedStatement.setString(5, recommender);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
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`=?")) {
preparedStatement.setLong(1, sourceGuildID);
preparedStatement.setLong(2, targetGuildID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
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`=?")) {
preparedStatement.setLong(1, sourceGuildID);
preparedStatement.setLong(2, targetGuildID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
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`=?")) {
preparedStatement.setLong(1, sourceGuildID);
preparedStatement.setLong(2, targetGuildID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
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`=?")) {
preparedStatement.setByte(1, (byte) 0);
preparedStatement.setBoolean(2, isAlly);
preparedStatement.setLong(3, sourceGuildID);
preparedStatement.setLong(4, targetGuildID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
public void LOAD_ALL_ALLIANCES_FOR_GUILD(Guild guild) {
if (guild == null)
return;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_guild_allianceenemylist` WHERE `GuildID` = ?")) {
preparedStatement.setInt(1, guild.getObjectUUID());
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
GuildAlliances guildAlliance = new GuildAlliances(rs);
guild.guildAlliances.put(guildAlliance.getAllianceGuild(), guildAlliance);
}
} catch (SQLException e) {
Logger.error(e);
}
}
}