diff --git a/src/engine/db/handlers/dbBaneHandler.java b/src/engine/db/handlers/dbBaneHandler.java index 23a6bc0b..e15f912a 100644 --- a/src/engine/db/handlers/dbBaneHandler.java +++ b/src/engine/db/handlers/dbBaneHandler.java @@ -88,67 +88,65 @@ public class dbBaneHandler extends dbHandlerBase { return true; } - public boolean SET_BANE_TIME_NEW(int hour, int cityUUID, DateTime placementDate) { - - DateTime toSet = placementDate.withHourOfDay(12 + hour).withMinuteOfHour(0).withSecondOfMinute(0); - - try (Connection connection = DbManager.getConnection(); - PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_banes` SET `liveDate`=? WHERE `cityUUID`=?")) { - - preparedStatement.setTimestamp(1, new java.sql.Timestamp(toSet.getMillis())); - preparedStatement.setLong(2, cityUUID); - - preparedStatement.execute(); - - } catch (SQLException e) { - Logger.error(e); - return false; - } + public boolean SET_BANE_TIME_NEW(int hour, int cityUUID) { try (Connection connection = DbManager.getConnection(); - PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_banes` SET `time_set`=? WHERE `cityUUID`=?")) { - - preparedStatement.setInt(1, 1); - preparedStatement.setLong(2, cityUUID); - - preparedStatement.execute(); + PreparedStatement getStatement = connection.prepareStatement("SELECT `liveDate` FROM `dyn_banes` WHERE `cityUUID`=?"); + PreparedStatement updateStatement = connection.prepareStatement("UPDATE `dyn_banes` SET `liveDate`=?, `time_set`=? WHERE `cityUUID`=?")) { + + // Retrieve the existing liveDate + getStatement.setInt(1, cityUUID); + try (ResultSet rs = getStatement.executeQuery()) { + if (rs.next()) { + DateTime existingDate = new DateTime(rs.getTimestamp("liveDate").getTime()); + // Update only the time + DateTime updatedDate = existingDate.withHourOfDay(hour).withMinuteOfHour(0).withSecondOfMinute(0); + + // Update liveDate and time_set flag + updateStatement.setTimestamp(1, new java.sql.Timestamp(updatedDate.getMillis())); + updateStatement.setInt(2, 1); // time_set flag + updateStatement.setInt(3, cityUUID); + + updateStatement.execute(); + return true; + } + } } catch (SQLException e) { Logger.error(e); - return false; } - return true; + return false; } - public boolean SET_BANE_DAY_NEW(int day, int cityUUID, DateTime placementDate) { - - DateTime toSet = placementDate.plusDays(day); - try (Connection connection = DbManager.getConnection(); - PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_banes` SET `liveDate`=? WHERE `cityUUID`=?")) { - - preparedStatement.setTimestamp(1, new java.sql.Timestamp(toSet.getMillis())); - preparedStatement.setLong(2, cityUUID); - - preparedStatement.execute(); - - } catch (SQLException e) { - Logger.error(e); - return false; - } + public boolean SET_BANE_DAY_NEW(int dayOffset, int cityUUID) { try (Connection connection = DbManager.getConnection(); - PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_banes` SET `day_set`=? WHERE `cityUUID`=?")) { - - preparedStatement.setInt(1, 1); - preparedStatement.setLong(2, cityUUID); - - preparedStatement.execute(); + PreparedStatement getStatement = connection.prepareStatement("SELECT `liveDate` FROM `dyn_banes` WHERE `cityUUID`=?"); + PreparedStatement updateStatement = connection.prepareStatement("UPDATE `dyn_banes` SET `liveDate`=?, `day_set`=? WHERE `cityUUID`=?")) { + + // Retrieve the existing liveDate + getStatement.setInt(1, cityUUID); + try (ResultSet rs = getStatement.executeQuery()) { + if (rs.next()) { + DateTime existingDate = new DateTime(rs.getTimestamp("liveDate").getTime()); + // Update only the day + DateTime updatedDate = existingDate.plusDays(dayOffset); + + // Update liveDate and day_set flag + updateStatement.setTimestamp(1, new java.sql.Timestamp(updatedDate.getMillis())); + updateStatement.setInt(2, 1); // day_set flag + updateStatement.setInt(3, cityUUID); + + updateStatement.execute(); + return true; + } + } } catch (SQLException e) { Logger.error(e); - return false; } - return true; + return false; } + public boolean SET_BANE_CAP_NEW(int count, int cityUUID) { try (Connection connection = DbManager.getConnection(); diff --git a/src/engine/objects/Contract.java b/src/engine/objects/Contract.java index 9d29e9ad..120ff202 100644 --- a/src/engine/objects/Contract.java +++ b/src/engine/objects/Contract.java @@ -212,6 +212,10 @@ public class Contract extends AbstractGameObject { if(bane == null){ return VendorDialog.getHostileVendorDialog(); } + if(bane.timeSet && bane.capSet && bane.daySet){ + vd.getOptions().clear(); + return vd; + } DateTime placement = bane.getPlacementDate(); switch(optionId){ default: @@ -345,12 +349,12 @@ public class Contract extends AbstractGameObject { break; } if (updateBaneDay > 0) { - if(DbManager.BaneQueries.SET_BANE_DAY_NEW(updateBaneDay,bane.getCityUUID(), bane.getPlacementDate())){ + if(DbManager.BaneQueries.SET_BANE_DAY_NEW(updateBaneDay,bane.getCityUUID())){ bane.daySet = true; } } if (updateBaneTime > 0) { - if(DbManager.BaneQueries.SET_BANE_TIME_NEW(updateBaneDay,bane.getCityUUID(), bane.getPlacementDate())){ + if(DbManager.BaneQueries.SET_BANE_TIME_NEW(updateBaneDay,bane.getCityUUID())){ bane.timeSet = true; } }