You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
568 lines
21 KiB
568 lines
21 KiB
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . |
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· |
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ |
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ |
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ |
|
// Magicbane Emulator Project © 2013 - 2022 |
|
// www.magicbane.com |
|
|
|
|
|
package engine.db.handlers; |
|
|
|
import engine.Enum; |
|
import engine.gameManager.DbManager; |
|
import engine.objects.AbstractWorldObject; |
|
import engine.objects.Heraldry; |
|
import engine.objects.PlayerCharacter; |
|
import engine.objects.PlayerFriends; |
|
import engine.server.MBServerStatics; |
|
import org.pmw.tinylog.Logger; |
|
|
|
import java.sql.Connection; |
|
import java.sql.PreparedStatement; |
|
import java.sql.ResultSet; |
|
import java.sql.SQLException; |
|
import java.util.ArrayList; |
|
import java.util.concurrent.ConcurrentHashMap; |
|
|
|
public class dbPlayerCharacterHandler extends dbHandlerBase { |
|
|
|
public dbPlayerCharacterHandler() { |
|
this.localClass = PlayerCharacter.class; |
|
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName()); |
|
} |
|
|
|
public PlayerCharacter ADD_PLAYER_CHARACTER(final PlayerCharacter toAdd) { |
|
|
|
PlayerCharacter playerCharacter = null; |
|
|
|
if (toAdd.getAccount() == null) |
|
return null; |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("CALL `character_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);")) { |
|
|
|
preparedStatement.setLong(1, toAdd.getAccount().getObjectUUID()); |
|
preparedStatement.setString(2, toAdd.getFirstName()); |
|
preparedStatement.setString(3, toAdd.getLastName()); |
|
preparedStatement.setInt(4, toAdd.getRace().getRaceRuneID()); |
|
preparedStatement.setInt(5, toAdd.getBaseClass().getObjectUUID()); |
|
preparedStatement.setInt(6, toAdd.getStrMod()); |
|
preparedStatement.setInt(7, toAdd.getDexMod()); |
|
preparedStatement.setInt(8, toAdd.getConMod()); |
|
preparedStatement.setInt(9, toAdd.getIntMod()); |
|
preparedStatement.setInt(10, toAdd.getSpiMod()); |
|
preparedStatement.setInt(11, toAdd.getExp()); |
|
preparedStatement.setInt(12, toAdd.getSkinColor()); |
|
preparedStatement.setInt(13, toAdd.getHairColor()); |
|
preparedStatement.setByte(14, toAdd.getHairStyle()); |
|
preparedStatement.setInt(15, toAdd.getBeardColor()); |
|
preparedStatement.setByte(16, toAdd.getBeardStyle()); |
|
|
|
ResultSet rs = preparedStatement.executeQuery(); |
|
|
|
int objectUUID = (int) rs.getLong("UID"); |
|
|
|
if (objectUUID > 0) |
|
playerCharacter = GET_PLAYER_CHARACTER(objectUUID); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
|
|
return playerCharacter; |
|
} |
|
|
|
public boolean SET_IGNORE_LIST(int sourceID, int targetID, boolean toIgnore, String charName) { |
|
|
|
String queryString = ""; |
|
|
|
if (toIgnore) |
|
queryString = "INSERT INTO `dyn_character_ignore` (`accountUID`, `ignoringUID`, `characterName`) VALUES (?, ?, ?)"; |
|
else |
|
queryString = "DELETE FROM `dyn_character_ignore` WHERE `accountUID` = ? && `ignoringUID` = ?"; |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement(queryString)) { |
|
|
|
preparedStatement.setLong(1, sourceID); |
|
preparedStatement.setLong(2, targetID); |
|
|
|
if (toIgnore) |
|
preparedStatement.setString(3, charName); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public ArrayList<PlayerCharacter> GET_CHARACTERS_FOR_ACCOUNT(final int id) { |
|
|
|
ArrayList<PlayerCharacter> characterList = new ArrayList<>(); |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_character`.*, `object`.`parent` FROM `object` INNER JOIN `obj_character` ON `obj_character`.`UID` = `object`.`UID` WHERE `object`.`parent`=? && `obj_character`.`char_isActive`='1';")) { |
|
|
|
preparedStatement.setLong(1, id); |
|
ResultSet rs = preparedStatement.executeQuery(); |
|
characterList = getObjectsFromRs(rs, 10); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
|
|
return characterList; |
|
} |
|
|
|
public ArrayList<PlayerCharacter> GET_ALL_CHARACTERS() { |
|
|
|
ArrayList<PlayerCharacter> characterList = new ArrayList<>(); |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_character`.*, `object`.`parent` FROM `object` INNER JOIN `obj_character` ON `obj_character`.`UID` = `object`.`UID` WHERE `obj_character`.`char_isActive`='1';")) { |
|
|
|
ResultSet rs = preparedStatement.executeQuery(); |
|
characterList = getObjectsFromRs(rs, 2000); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
|
|
return characterList; |
|
} |
|
|
|
/** |
|
* <code>getFirstName</code> looks up the first name of a PlayerCharacter by |
|
* first checking the GOM cache and then querying the database. |
|
* PlayerCharacter objects that are not already cached won't be instantiated |
|
* and cached. |
|
*/ |
|
|
|
public ConcurrentHashMap<Integer, String> GET_IGNORE_LIST(final int objectUUID, final boolean skipActiveCheck) { |
|
|
|
ConcurrentHashMap<Integer, String> ignoreList = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_character_ignore` WHERE `accountUID` = ?;")) { |
|
|
|
preparedStatement.setLong(1, objectUUID); |
|
|
|
ResultSet rs = preparedStatement.executeQuery(); |
|
|
|
while (rs.next()) { |
|
int ignoreCharacterID = rs.getInt("ignoringUID"); |
|
|
|
if (ignoreCharacterID == 0) |
|
continue; |
|
|
|
String name = rs.getString("characterName"); |
|
ignoreList.put(ignoreCharacterID, name); |
|
} |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
|
|
return ignoreList; |
|
} |
|
|
|
public PlayerCharacter GET_PLAYER_CHARACTER(final int objectUUID) { |
|
|
|
if (objectUUID == 0) |
|
return null; |
|
|
|
PlayerCharacter playerCharacter = (PlayerCharacter) DbManager.getFromCache(Enum.GameObjectType.PlayerCharacter, objectUUID); |
|
|
|
if (playerCharacter != null) |
|
return playerCharacter; |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_character`.*, `object`.`parent` FROM `object` INNER JOIN `obj_character` ON `obj_character`.`UID` = `object`.`UID` WHERE `object`.`UID` = ?")) { |
|
|
|
preparedStatement.setLong(1, objectUUID); |
|
|
|
ResultSet rs = preparedStatement.executeQuery(); |
|
playerCharacter = (PlayerCharacter) getObjectFromRs(rs); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return playerCharacter; |
|
} |
|
|
|
public boolean IS_CHARACTER_NAME_UNIQUE(final String firstName) { |
|
|
|
boolean unique = true; |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `char_firstname` FROM `obj_character` WHERE `char_isActive`=1 && `char_firstname`=?")) { |
|
|
|
preparedStatement.setString(1, firstName); |
|
|
|
ResultSet rs = preparedStatement.executeQuery(); |
|
|
|
if (rs.next()) |
|
unique = false; |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
|
|
return unique; |
|
} |
|
|
|
public boolean UPDATE_NAME(String oldFirstName, String newFirstName, String newLastName) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `char_firstname`=?, `char_lastname`=? WHERE `char_firstname`=? AND `char_isActive`='1'")) { |
|
|
|
preparedStatement.setString(1, newFirstName); |
|
preparedStatement.setString(2, newLastName); |
|
preparedStatement.setString(3, oldFirstName); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean SET_DELETED(final PlayerCharacter pc) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `char_isActive`=? WHERE `UID` = ?")) { |
|
|
|
preparedStatement.setBoolean(1, !pc.isDeleted()); |
|
preparedStatement.setLong(2, pc.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean SET_ACTIVE(final PlayerCharacter pc, boolean status) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `char_isActive`=? WHERE `UID` = ?")) { |
|
|
|
preparedStatement.setBoolean(1, status); |
|
preparedStatement.setLong(2, pc.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean SET_BIND_BUILDING(final PlayerCharacter pc, int bindBuildingID) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `char_bindBuilding`=? WHERE `UID` = ?")) { |
|
|
|
preparedStatement.setInt(1, bindBuildingID); |
|
preparedStatement.setLong(2, pc.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean SET_ANNIVERSERY(final PlayerCharacter pc, boolean flag) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `anniversery`=? WHERE `UID` = ?")) { |
|
|
|
preparedStatement.setBoolean(1, flag); |
|
preparedStatement.setLong(2, pc.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
|
|
public boolean UPDATE_CHARACTER_EXPERIENCE(final PlayerCharacter pc) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `char_experience`=? WHERE `UID` = ?")) { |
|
|
|
preparedStatement.setInt(1, pc.getExp()); |
|
preparedStatement.setLong(2, pc.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean UPDATE_GUILD(final PlayerCharacter pc, int guildUUID) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `guildUID`=? WHERE `UID` = ?")) { |
|
|
|
preparedStatement.setInt(1, guildUUID); |
|
preparedStatement.setLong(2, pc.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean UPDATE_CHARACTER_STATS(final PlayerCharacter pc) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `char_strMod`=?, `char_dexMod`=?, `char_conMod`=?, `char_intMod`=?, `char_spiMod`=? WHERE `UID`=?")) { |
|
|
|
preparedStatement.setInt(1, pc.getStrMod()); |
|
preparedStatement.setInt(2, pc.getDexMod()); |
|
preparedStatement.setInt(3, pc.getConMod()); |
|
preparedStatement.setInt(4, pc.getIntMod()); |
|
preparedStatement.setInt(5, pc.getSpiMod()); |
|
preparedStatement.setLong(6, pc.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public String SET_PROPERTY(final PlayerCharacter playerCharacter, String name, Object new_value) { |
|
|
|
String result = ""; |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("CALL character_SETPROP(?,?,?)")) { |
|
|
|
preparedStatement.setLong(1, playerCharacter.getObjectUUID()); |
|
preparedStatement.setString(2, name); |
|
preparedStatement.setString(3, String.valueOf(new_value)); |
|
|
|
ResultSet rs = preparedStatement.executeQuery(); |
|
result = rs.getString("result"); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return result; |
|
} |
|
|
|
public boolean SET_PROMOTION_CLASS(PlayerCharacter player, int promotionClassID) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `char_promotionClassID`=? WHERE `UID`=?;")) { |
|
|
|
preparedStatement.setInt(1, promotionClassID); |
|
preparedStatement.setInt(2, player.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean SET_INNERCOUNCIL(PlayerCharacter player, boolean isInnerCouncil) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `guild_isInnerCouncil`=? WHERE `UID`=?;")) { |
|
|
|
preparedStatement.setBoolean(1, isInnerCouncil); |
|
preparedStatement.setInt(2, player.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean SET_FULL_MEMBER(PlayerCharacter player, boolean isFullMember) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `guild_isFullMember`=? WHERE `UID`=?;")) { |
|
|
|
preparedStatement.setBoolean(1, isFullMember); |
|
preparedStatement.setInt(2, player.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean SET_TAX_COLLECTOR(PlayerCharacter player, boolean isTaxCollector) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `guild_isTaxCollector`=? WHERE `UID`=?;")) { |
|
|
|
preparedStatement.setBoolean(1, isTaxCollector); |
|
preparedStatement.setInt(2, player.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean SET_RECRUITER(PlayerCharacter player, boolean isRecruiter) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `guild_isRecruiter`=? WHERE `UID`=?;")) { |
|
|
|
preparedStatement.setBoolean(1, isRecruiter); |
|
preparedStatement.setInt(2, player.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean SET_GUILD_TITLE(PlayerCharacter player, int title) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_character` SET `guild_title`=? WHERE `UID`=?;")) { |
|
|
|
preparedStatement.setInt(1, title); |
|
preparedStatement.setInt(2, player.getObjectUUID()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean ADD_FRIEND(int source, long friend) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_character_friends` (`playerUID`, `friendUID`) VALUES (?, ?)")) { |
|
|
|
preparedStatement.setLong(1, source); |
|
preparedStatement.setLong(2, friend); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean REMOVE_FRIEND(int source, int friend) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_character_friends` WHERE (`playerUID`=?) AND (`friendUID`=?)")) { |
|
|
|
preparedStatement.setLong(1, source); |
|
preparedStatement.setLong(2, friend); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public void LOAD_PLAYER_FRIENDS() { |
|
|
|
PlayerFriends playerFriend; |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM dyn_character_friends")) { |
|
|
|
ResultSet rs = preparedStatement.executeQuery(); |
|
|
|
while (rs.next()) |
|
playerFriend = new PlayerFriends(rs); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
|
|
prepareCallable("SELECT * FROM dyn_character_friends"); |
|
} |
|
|
|
public boolean ADD_HERALDY(int source, AbstractWorldObject character) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_character_heraldy` (`playerUID`, `characterUID`,`characterType`) VALUES (?, ?,?)")) { |
|
|
|
preparedStatement.setLong(1, source); |
|
preparedStatement.setLong(2, character.getObjectUUID()); |
|
preparedStatement.setInt(3, character.getObjectType().ordinal()); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public boolean REMOVE_HERALDY(int source, int characterUID) { |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_character_heraldy` WHERE (`playerUID`=?) AND (`characterUID`=?)")) { |
|
|
|
preparedStatement.setLong(1, source); |
|
preparedStatement.setLong(2, characterUID); |
|
|
|
return (preparedStatement.executeUpdate() > 0); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
return false; |
|
} |
|
|
|
public void LOAD_HERALDY() { |
|
|
|
Heraldry heraldy; |
|
|
|
try (Connection connection = DbManager.getConnection(); |
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM dyn_character_heraldy")) { |
|
|
|
ResultSet rs = preparedStatement.executeQuery(); |
|
|
|
while (rs.next()) |
|
heraldy = new Heraldry(rs); |
|
|
|
} catch (SQLException e) { |
|
Logger.error(e); |
|
} |
|
} |
|
|
|
}
|
|
|