2022-04-30 09:41:17 -04:00
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.db.handlers ;
import engine.gameManager.DbManager ;
2024-04-05 07:59:44 -04:00
import engine.mbEnums ;
2022-04-30 09:41:17 -04:00
import engine.objects.CharacterPower ;
import engine.objects.PlayerCharacter ;
import engine.server.MBServerStatics ;
import org.pmw.tinylog.Logger ;
2023-05-26 17:46:26 -04:00
import java.sql.* ;
2022-04-30 09:41:17 -04:00
import java.util.concurrent.ConcurrentHashMap ;
public class dbCharacterPowerHandler extends dbHandlerBase {
2023-05-23 10:27:03 -04:00
public dbCharacterPowerHandler ( ) {
this . localClass = CharacterPower . class ;
2024-04-05 07:59:44 -04:00
this . localObjectType = mbEnums . GameObjectType . valueOf ( this . localClass . getSimpleName ( ) ) ;
2023-05-23 10:27:03 -04:00
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public CharacterPower ADD_CHARACTER_POWER ( CharacterPower toAdd ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
CharacterPower characterPower = null ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
if ( CharacterPower . getOwner ( toAdd ) = = null | | toAdd . getPower ( ) = = null ) {
Logger . error ( " dbCharacterSkillHandler.ADD_Power " , toAdd . getObjectUUID ( ) + " missing owner or powersBase " ) ;
return null ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ( ) ;
2023-05-26 17:46:26 -04:00
PreparedStatement preparedStatement = connection . prepareStatement ( " INSERT INTO `dyn_character_power` (`CharacterID`, `powersBaseToken`, `trains`) VALUES (?, ?, ?); " , Statement . RETURN_GENERATED_KEYS ) ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , CharacterPower . getOwner ( toAdd ) . getObjectUUID ( ) ) ;
preparedStatement . setInt ( 2 , toAdd . getPower ( ) . getToken ( ) ) ;
preparedStatement . setInt ( 3 , toAdd . getTrains ( ) ) ;
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . executeUpdate ( ) ;
ResultSet rs = preparedStatement . getGeneratedKeys ( ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
if ( rs . next ( ) )
characterPower = GET_CHARACTER_POWER ( rs . getInt ( 1 ) ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e ) ;
return null ;
}
return characterPower ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public int DELETE_CHARACTER_POWER ( final int objectUUID ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
int rowCount = 0 ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ( ) ;
PreparedStatement preparedStatement = connection . prepareStatement ( " DELETE FROM `dyn_character_power` WHERE `UID` = ? " ) ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , objectUUID ) ;
rowCount = preparedStatement . executeUpdate ( ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e ) ;
}
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
return rowCount ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public CharacterPower GET_CHARACTER_POWER ( int objectUUID ) {
2022-04-30 09:41:17 -04:00
2024-04-05 07:59:44 -04:00
CharacterPower characterPower = ( CharacterPower ) DbManager . getFromCache ( mbEnums . GameObjectType . CharacterPower , objectUUID ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
if ( characterPower ! = null )
return characterPower ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ( ) ;
PreparedStatement preparedStatement = connection . prepareStatement ( " SELECT * FROM `dyn_character_power` WHERE `UID` = ? " ) ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , objectUUID ) ;
ResultSet rs = preparedStatement . executeQuery ( ) ;
characterPower = ( CharacterPower ) getObjectFromRs ( rs ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e ) ;
}
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
return characterPower ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public ConcurrentHashMap < Integer , CharacterPower > GET_POWERS_FOR_CHARACTER ( PlayerCharacter pc ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
ConcurrentHashMap < Integer , CharacterPower > powers = new ConcurrentHashMap < > ( MBServerStatics . CHM_INIT_CAP , MBServerStatics . CHM_LOAD , MBServerStatics . CHM_THREAD_LOW ) ;
int objectUUID = pc . getObjectUUID ( ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ( ) ;
PreparedStatement preparedStatement = connection . prepareStatement ( " SELECT * FROM `dyn_character_power` WHERE CharacterID = ? " ) ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , objectUUID ) ;
ResultSet rs = preparedStatement . executeQuery ( ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
while ( rs . next ( ) ) {
CharacterPower cp = new CharacterPower ( rs , pc ) ;
if ( cp . getPower ( ) ! = null )
powers . put ( cp . getPower ( ) . getToken ( ) , cp ) ;
}
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e ) ;
}
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
return powers ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public void UPDATE_TRAINS ( final CharacterPower characterPower ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
//skip update if nothing changed
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
if ( ! characterPower . isTrained ( ) )
return ;
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ( ) ;
PreparedStatement preparedStatement = connection . prepareStatement ( " UPDATE `dyn_character_power` SET `trains`=? WHERE `UID`=? " ) ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setShort ( 1 , ( short ) characterPower . getTrains ( ) ) ;
preparedStatement . setInt ( 2 , characterPower . getObjectUUID ( ) ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . execute ( ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e ) ;
}
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
characterPower . setTrained ( false ) ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public void updateDatabase ( final CharacterPower pow ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
if ( pow . getPower ( ) = = null ) {
Logger . error ( " Failed to find powersBase for Power " + pow . getObjectUUID ( ) ) ;
return ;
}
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
if ( CharacterPower . getOwner ( pow ) = = null ) {
Logger . error ( " Failed to find owner for Power " + pow . getObjectUUID ( ) ) ;
return ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ( ) ;
PreparedStatement preparedStatement = connection . prepareStatement ( " UPDATE `dyn_character_power` SET `PowersBaseToken`=?, `CharacterID`=?, `trains`=? WHERE `UID`=? " ) ) {
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setInt ( 1 , pow . getPower ( ) . getToken ( ) ) ;
preparedStatement . setInt ( 2 , CharacterPower . getOwner ( pow ) . getObjectUUID ( ) ) ;
preparedStatement . setShort ( 3 , ( short ) pow . getTrains ( ) ) ;
preparedStatement . setInt ( 4 , pow . getObjectUUID ( ) ) ;
preparedStatement . execute ( ) ;
2023-05-21 15:10:27 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e ) ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
pow . setTrained ( false ) ;
}
2022-04-30 09:41:17 -04:00
}