2022-04-30 09:41:17 -04:00
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.db.handlers ;
2023-05-22 07:18:26 -04:00
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.Mob ;
import org.joda.time.DateTime ;
import org.pmw.tinylog.Logger ;
2023-05-22 07:18:26 -04:00
import java.sql.Connection ;
import java.sql.PreparedStatement ;
2022-04-30 09:41:17 -04:00
import java.sql.ResultSet ;
import java.sql.SQLException ;
import java.util.ArrayList ;
public class dbMobHandler extends dbHandlerBase {
2023-05-23 10:27:03 -04:00
public dbMobHandler () {
this . localClass = Mob . 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-08-26 15:35:42 -04:00
public Mob PERSIST ( Mob toAdd ) {
2023-05-22 07:18:26 -04:00
2023-05-23 10:27:03 -04:00
Mob mobile = null ;
2023-05-22 07:18:26 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ();
2023-08-31 08:03:30 -04:00
PreparedStatement preparedStatement = connection . prepareStatement ( "CALL `mob_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" )) {
2023-05-22 07:18:26 -04:00
2023-08-25 12:11:50 -04:00
preparedStatement . setLong ( 1 , toAdd . parentZoneUUID );
preparedStatement . setInt ( 2 , toAdd . loadID );
preparedStatement . setInt ( 3 , toAdd . guildUUID );
preparedStatement . setFloat ( 4 , toAdd . bindLoc . x );
preparedStatement . setFloat ( 5 , toAdd . bindLoc . y );
preparedStatement . setFloat ( 6 , toAdd . bindLoc . z );
2023-05-23 10:27:03 -04:00
preparedStatement . setInt ( 7 , 0 );
2023-08-25 12:11:50 -04:00
preparedStatement . setFloat ( 8 , toAdd . spawnRadius );
2023-10-23 00:07:48 -04:00
preparedStatement . setInt ( 9 , toAdd . spawnDelay );
2023-08-25 13:41:22 -04:00
preparedStatement . setInt ( 10 , toAdd . contractUUID );
2023-08-25 12:11:50 -04:00
preparedStatement . setInt ( 11 , toAdd . buildingUUID );
preparedStatement . setInt ( 12 , toAdd . level );
preparedStatement . setString ( 13 , toAdd . firstName );
2023-08-31 08:03:30 -04:00
preparedStatement . setString ( 14 , toAdd . behaviourType . toString ());
2023-05-22 07:18:26 -04:00
2023-05-23 10:27:03 -04:00
ResultSet rs = preparedStatement . executeQuery ();
2023-05-22 07:18:26 -04:00
2023-05-23 12:24:11 -04:00
if ( rs . next ()) {
int objectUUID = ( int ) rs . getLong ( "UID" );
2023-05-22 07:18:26 -04:00
2023-05-23 12:24:11 -04:00
if ( objectUUID > 0 )
mobile = GET_MOB ( objectUUID );
}
2023-05-23 14:29:08 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
throw new RuntimeException ( e );
}
return mobile ;
}
2022-04-30 09:41:17 -04:00
2023-10-17 08:45:33 -04:00
public ArrayList < Mob > GET_ALL_MOBS () {
ArrayList < Mob > mobileList = new ArrayList <> ();
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "SELECT `obj_mob`.*, `object`.`parent` FROM `object` INNER JOIN `obj_mob` ON `obj_mob`.`UID` = `object`.`UID` ORDER BY `object`.`UID` ASC;" )) {
ResultSet rs = preparedStatement . executeQuery ();
mobileList = getObjectsFromRs ( rs , 1000 );
} catch ( SQLException e ) {
Logger . error ( e );
}
return mobileList ;
}
2023-05-23 10:27:03 -04:00
public boolean updateUpgradeTime ( Mob mob , DateTime upgradeDateTime ) {
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 obj_mob SET upgradeDate=? "
+ "WHERE UID = ?" )) {
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
if ( upgradeDateTime == null )
preparedStatement . setNull ( 1 , java . sql . Types . DATE );
else
preparedStatement . setTimestamp ( 1 , new java . sql . Timestamp ( upgradeDateTime . getMillis ()));
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setInt ( 2 , mob . getObjectUUID ());
2023-05-22 07:18:26 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . execute ();
return true ;
} catch ( SQLException e ) {
Logger . error ( e );
}
return false ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public int DELETE_MOB ( final Mob mob ) {
2023-05-22 07:18:26 -04:00
2023-05-23 10:27:03 -04:00
int row_count = 0 ;
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "DELETE FROM `object` WHERE `UID` = ?" )) {
2023-05-22 07:18:26 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , mob . getDBID ());
row_count = preparedStatement . executeUpdate ();
2023-05-22 07:18:26 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e );
2023-05-22 07:18:26 -04:00
2023-05-23 10:27:03 -04:00
}
return row_count ;
}
2022-04-30 09:41:17 -04:00
2023-08-25 14:01:47 -04:00
public void LOAD_GUARD_MINIONS ( Mob guardCaptain ) {
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 ( "SELECT * FROM `dyn_guards` WHERE `captainUID` = ?" )) {
2022-04-30 09:41:17 -04:00
2023-08-25 14:01:47 -04:00
preparedStatement . setInt ( 1 , guardCaptain . getObjectUUID ());
2023-05-23 10:27:03 -04:00
ResultSet rs = preparedStatement . executeQuery ();
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
while ( rs . next ()) {
2023-09-04 15:21:04 -04:00
String minionName = rs . getString ( "minionName" );
2023-08-25 14:33:43 -04:00
Mob toCreate = Mob . createGuardMinion ( guardCaptain , guardCaptain . getLevel (), minionName );
2023-05-22 07:18:26 -04:00
2023-05-23 10:27:03 -04:00
if ( toCreate == null )
return ;
2022-04-30 09:41:17 -04:00
2023-08-18 11:33:27 -04:00
if ( toCreate != null )
2023-05-23 10:27:03 -04:00
toCreate . setDeathTime ( System . currentTimeMillis ());
2023-08-18 11:33:27 -04:00
2023-05-23 10:27:03 -04:00
}
2022-04-30 09:41:17 -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-09-09 08:04:56 -04:00
public boolean ADD_GUARD_MINION ( final long captainUID , final String minionName ) {
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ();
2023-09-04 14:58:13 -04:00
PreparedStatement preparedStatement = connection . prepareStatement ( "INSERT INTO `dyn_guards` (`captainUID`, `minionName`) VALUES (?,?)" )) {
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , captainUID );
2023-09-04 14:58:13 -04:00
preparedStatement . setString ( 2 , minionName );
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
return ( preparedStatement . executeUpdate () > 0 );
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e );
return false ;
}
}
2022-04-30 09:41:17 -04:00
2023-09-09 08:04:56 -04:00
public boolean REMOVE_GUARD_MINION ( final long captainUID , final String minionName ) {
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ();
2023-09-04 14:16:36 -04:00
PreparedStatement preparedStatement = connection . prepareStatement ( "DELETE FROM `dyn_guards` WHERE `captainUID`=? AND `minionName`=? LIMIT 1;" )) {
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , captainUID );
2023-09-04 14:16:36 -04:00
preparedStatement . setString ( 2 , minionName );
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
return ( preparedStatement . executeUpdate () > 0 );
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e );
return false ;
}
}
2022-04-30 09:41:17 -04:00
2023-09-09 08:04:56 -04:00
public boolean REMOVE_ALL_MINIONS ( final long captainUID ) {
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "DELETE FROM `dyn_guards` WHERE `captainUID`=?;" )) {
preparedStatement . setLong ( 1 , captainUID );
return ( preparedStatement . executeUpdate () > 0 );
} catch ( SQLException e ) {
Logger . error ( e );
return false ;
}
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public Mob GET_MOB ( final int objectUUID ) {
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
Mob mobile = null ;
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "SELECT `obj_mob`.*, `object`.`parent` FROM `object` INNER JOIN `obj_mob` ON `obj_mob`.`UID` = `object`.`UID` WHERE `object`.`UID` = ?;" )) {
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , objectUUID );
ResultSet rs = preparedStatement . executeQuery ();
mobile = ( Mob ) getObjectFromRs ( rs );
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e );
}
return mobile ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public int MOVE_MOB ( long mobID , long parentID , float locX , float locY , float locZ ) {
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
int row_count = 0 ;
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
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`=?;" )) {
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , parentID );
preparedStatement . setFloat ( 2 , locX );
preparedStatement . setFloat ( 3 , locY );
preparedStatement . setFloat ( 4 , locZ );
preparedStatement . setLong ( 5 , mobID );
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
ResultSet rs = preparedStatement . executeQuery ();
row_count = preparedStatement . executeUpdate ();
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e );
}
return row_count ;
}
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
public String SET_PROPERTY ( final Mob m , String name , Object new_value ) {
2022-04-30 09:41:17 -04:00
2023-05-23 10:27:03 -04:00
String result = "" ;
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "CALL mob_SETPROP(?,?,?)" )) {
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
preparedStatement . setLong ( 1 , m . getObjectUUID ());
preparedStatement . setString ( 2 , name );
preparedStatement . setString ( 3 , String . valueOf ( new_value ));
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
ResultSet rs = preparedStatement . executeQuery ();
2023-05-23 14:29:08 -04:00
if ( rs . next ())
result = rs . getString ( "result" );
2023-05-22 07:29:22 -04:00
2023-05-23 10:27:03 -04:00
} catch ( SQLException e ) {
Logger . error ( e );
}
return result ;
}
2022-04-30 09:41:17 -04:00
}