2022-04-30 09:41:17 -04:00
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.db.handlers ;
import engine.Enum.ProtectionState ;
import engine.gameManager.DbManager ;
import engine.math.Vector3fImmutable ;
import engine.objects.AbstractGameObject ;
import engine.objects.Building ;
import engine.objects.Shrine ;
import org.joda.time.DateTime ;
import org.pmw.tinylog.Logger ;
2023-05-23 08:20:20 -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 dbShrineHandler extends dbHandlerBase {
public dbShrineHandler () {
this . localClass = Shrine . class ;
this . localObjectType = engine . Enum . GameObjectType . valueOf ( this . localClass . getSimpleName ());
}
2023-05-23 10:27:03 -04:00
public static void addObject ( ArrayList < AbstractGameObject > list , ResultSet rs ) throws SQLException {
String type = rs . getString ( "type" );
switch ( type ) {
case "building" :
Building building = new Building ( rs );
DbManager . addToCache ( building );
list . add ( building );
break ;
case "shrine" :
Shrine shrine = new Shrine ( rs );
DbManager . addToCache ( shrine );
list . add ( shrine );
break ;
}
}
public ArrayList < AbstractGameObject > CREATE_SHRINE ( int parentZoneID , int OwnerUUID , String name , int meshUUID ,
Vector3fImmutable location , float meshScale , int currentHP ,
ProtectionState protectionState , int currentGold , int rank ,
DateTime upgradeDate , int blueprintUUID , float w , float rotY , String shrineType ) {
2022-04-30 09:41:17 -04:00
2023-05-23 08:20:20 -04:00
ArrayList < AbstractGameObject > shrineList = new ArrayList <> ();
2022-04-30 09:41:17 -04:00
2023-05-23 08:20:20 -04:00
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "CALL `shrine_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,? ,? ,?, ?,?);" )) {
2022-04-30 09:41:17 -04:00
2023-05-23 08:20:20 -04:00
preparedStatement . setInt ( 1 , parentZoneID );
preparedStatement . setInt ( 2 , OwnerUUID );
preparedStatement . setString ( 3 , name );
preparedStatement . setInt ( 4 , meshUUID );
preparedStatement . setFloat ( 5 , location . x );
preparedStatement . setFloat ( 6 , location . y );
preparedStatement . setFloat ( 7 , location . z );
preparedStatement . setFloat ( 8 , meshScale );
preparedStatement . setInt ( 9 , currentHP );
preparedStatement . setString ( 10 , protectionState . name ());
preparedStatement . setInt ( 11 , currentGold );
preparedStatement . setInt ( 12 , rank );
2022-04-30 09:41:17 -04:00
2023-05-23 08:20:20 -04:00
if ( upgradeDate != null )
preparedStatement . setTimestamp ( 13 , new java . sql . Timestamp ( upgradeDate . getMillis ()));
else
preparedStatement . setNull ( 13 , java . sql . Types . DATE );
2022-04-30 09:41:17 -04:00
2023-05-23 08:20:20 -04:00
preparedStatement . setInt ( 14 , blueprintUUID );
preparedStatement . setFloat ( 15 , w );
preparedStatement . setFloat ( 16 , rotY );
preparedStatement . setString ( 17 , shrineType );
preparedStatement . execute ();
ResultSet rs = preparedStatement . getResultSet ();
while ( rs . next ())
addObject ( shrineList , rs );
while ( preparedStatement . getMoreResults ()) {
rs = preparedStatement . getResultSet ();
while ( rs . next ())
addObject ( shrineList , rs );
2022-04-30 09:41:17 -04:00
}
2023-05-23 08:20:20 -04:00
2022-04-30 09:41:17 -04:00
} catch ( SQLException e ) {
2023-05-23 08:20:20 -04:00
Logger . error ( e );
2022-04-30 09:41:17 -04:00
}
2023-05-23 08:20:20 -04:00
return shrineList ;
2022-04-30 09:41:17 -04:00
}
public boolean updateFavors ( Shrine shrine , int amount , int oldAmount ) {
2023-05-23 08:20:20 -04:00
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "UPDATE `obj_shrine` SET `shrine_favors`=? WHERE `UID` = ? AND `shrine_favors` = ?" )) {
preparedStatement . setInt ( 1 , amount );
preparedStatement . setLong ( 2 , shrine . getObjectUUID ());
preparedStatement . setInt ( 3 , oldAmount );
return ( preparedStatement . executeUpdate () > 0 );
} catch ( SQLException e ) {
Logger . error ( e );
return false ;
}
2022-04-30 09:41:17 -04:00
}
public void LOAD_ALL_SHRINES () {
2023-05-23 08:20:20 -04:00
Shrine shrine ;
2022-04-30 09:41:17 -04:00
2023-05-23 08:20:20 -04:00
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "SELECT `obj_shrine`.*, `object`.`parent`, `object`.`type` FROM `object` LEFT JOIN `obj_shrine` ON `object`.`UID` = `obj_shrine`.`UID` WHERE `object`.`type` = 'shrine';" )) {
2022-04-30 09:41:17 -04:00
2023-05-23 08:20:20 -04:00
ResultSet rs = preparedStatement . executeQuery ();
2022-04-30 09:41:17 -04:00
while ( rs . next ()) {
2023-05-23 08:20:20 -04:00
shrine = new Shrine ( rs );
shrine . getShrineType (). addShrineToServerList ( shrine );
2022-04-30 09:41:17 -04:00
}
} catch ( SQLException e ) {
2023-05-23 08:20:20 -04:00
Logger . error ( e );
2022-04-30 09:41:17 -04:00
}
}
}