2022-04-30 09:41:17 -04:00
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.db.handlers ;
import engine.gameManager.DbManager ;
2023-10-20 16:11:55 -04:00
import engine.gameManager.ZoneManager ;
2024-05-12 13:36:47 -04:00
import engine.mbEnums ;
2022-04-30 09:41:17 -04:00
import engine.objects.Zone ;
2023-10-20 16:11:55 -04:00
import engine.objects.ZoneTemplate ;
2023-05-23 09:57:17 -04:00
import org.pmw.tinylog.Logger ;
2022-04-30 09:41:17 -04:00
2023-05-23 09:57:17 -04:00
import java.sql.Connection ;
import java.sql.PreparedStatement ;
2022-04-30 09:41:17 -04:00
import java.sql.ResultSet ;
2023-05-23 09:57:17 -04:00
import java.sql.SQLException ;
2022-04-30 09:41:17 -04:00
import java.util.ArrayList ;
public class dbZoneHandler extends dbHandlerBase {
2023-07-15 09:23:48 -04:00
public dbZoneHandler () {
this . localClass = Zone . class ;
2024-04-05 07:59:44 -04:00
this . localObjectType = mbEnums . GameObjectType . valueOf ( this . localClass . getSimpleName ());
2023-07-15 09:23:48 -04:00
}
2022-04-30 09:41:17 -04:00
2023-10-17 08:45:33 -04:00
public ArrayList < Zone > GET_ALL_ZONES () {
ArrayList < Zone > zoneList = new ArrayList <> ();
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "SELECT `obj_zone`.*, `object`.`parent` FROM `object` INNER JOIN `obj_zone` ON `obj_zone`.`UID` = `object`.`UID` ORDER BY `object`.`UID` ASC;" )) {
ResultSet rs = preparedStatement . executeQuery ();
zoneList = getObjectsFromRs ( rs , 2000 );
} catch ( SQLException e ) {
Logger . error ( e );
}
return zoneList ;
}
2023-07-15 09:23:48 -04:00
public Zone GET_BY_UID ( long ID ) {
2022-04-30 09:41:17 -04:00
2024-04-05 07:59:44 -04:00
Zone zone = ( Zone ) DbManager . getFromCache ( mbEnums . GameObjectType . Zone , ( int ) ID );
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
if ( zone != null )
return zone ;
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "SELECT `obj_zone`.*, `object`.`parent` FROM `object` INNER JOIN `obj_zone` ON `obj_zone`.`UID` = `object`.`UID` WHERE `object`.`UID` = ?;" )) {
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
preparedStatement . setLong ( 1 , ID );
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
ResultSet rs = preparedStatement . executeQuery ();
zone = ( Zone ) getObjectFromRs ( rs );
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
} catch ( SQLException e ) {
Logger . error ( e );
}
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
return zone ;
}
2022-04-30 09:41:17 -04:00
2023-10-20 16:11:55 -04:00
public void LOAD_ALL_ZONE_TEMPLATES () {
try ( Connection connection = DbManager . getConnection ();
2023-10-20 16:36:08 -04:00
PreparedStatement preparedStatement = connection . prepareStatement ( "SELECT * FROM static_zone_templates" )) {
2023-10-20 16:11:55 -04:00
ResultSet rs = preparedStatement . executeQuery ();
while ( rs . next ()) {
ZoneTemplate zoneTemplate = new ZoneTemplate ( rs );
ZoneManager . _zone_templates . put ( zoneTemplate . templateID , zoneTemplate );
}
2023-10-20 17:01:42 -04:00
// Add player city
2023-10-20 17:09:27 -04:00
ZoneTemplate zoneTemplate = new ZoneTemplate ();
zoneTemplate . templateID = 0 ;
zoneTemplate . sea_level_type = "PARENT" ;
zoneTemplate . sea_level = 0 ;
zoneTemplate . max_blend = 128 ;
zoneTemplate . min_blend = 128 ;
zoneTemplate . terrain_max_y = 5 ;
2024-04-05 07:59:44 -04:00
zoneTemplate . major_radius = ( int ) mbEnums . CityBoundsType . ZONE . halfExtents ;
zoneTemplate . minor_radius = ( int ) mbEnums . CityBoundsType . ZONE . halfExtents ;
2023-10-20 17:09:27 -04:00
zoneTemplate . terrain_type = "PLANAR" ;
ZoneManager . _zone_templates . put ( zoneTemplate . templateID , zoneTemplate );
2023-10-20 16:11:55 -04:00
} catch ( SQLException e ) {
Logger . error ( e );
}
}
2023-07-15 09:23:48 -04:00
public boolean DELETE_ZONE ( final Zone zone ) {
2022-04-30 09:41:17 -04:00
2023-07-15 09:23:48 -04:00
try ( Connection connection = DbManager . getConnection ();
PreparedStatement preparedStatement = connection . prepareStatement ( "DELETE FROM `object` WHERE `UID` = ? AND `type` = 'zone'" )) {
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
preparedStatement . setInt ( 1 , zone . getObjectUUID ());
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
return ( preparedStatement . executeUpdate () > 0 );
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
} catch ( SQLException e ) {
Logger . error ( e );
}
2023-05-23 09:57:17 -04:00
2023-07-15 09:23:48 -04:00
return false ;
}
2022-04-30 09:41:17 -04:00
}