Index: C:/L2J/L2_GameServer_c4/java/net/sf/l2j/gameserver/Shutdown.java =================================================================== --- C:/L2J/L2_GameServer_c4/java/net/sf/l2j/gameserver/Shutdown.java (revisione 1616) +++ C:/L2J/L2_GameServer_c4/java/net/sf/l2j/gameserver/Shutdown.java (copia locale) @@ -347,19 +347,16 @@ disconnectAllCharacters(); // Save Seven Signs data before closing. - synchronized (this) - { - try { - SevenSigns.getInstance().saveSevenSignsData(null, true); - - // Seven Signs data is now saved along with Festival data. - if (!SevenSigns.getInstance().isSealValidationPeriod()) - SevenSignsFestival.getInstance().saveFestivalData(false); - } - catch (Exception e) { - System.err.println("Failed to save Seven Signs configuration: " + e); - } + try { + SevenSigns.getInstance().saveSevenSignsData(null, true); + + // Seven Signs data is now saved along with Festival data. + if (!SevenSigns.getInstance().isSealValidationPeriod()) + SevenSignsFestival.getInstance().saveFestivalData(false); } + catch (Exception e) { + System.err.println("Failed to save Seven Signs configuration: " + e); + } System.err.println("Data saved. All players disconnected, shutting down."); try { Index: C:/L2J/L2_GameServer_c4/java/net/sf/l2j/gameserver/SevenSignsFestival.java =================================================================== --- C:/L2J/L2_GameServer_c4/java/net/sf/l2j/gameserver/SevenSignsFestival.java (revisione 1616) +++ C:/L2J/L2_GameServer_c4/java/net/sf/l2j/gameserver/SevenSignsFestival.java (copia locale) @@ -3,6 +3,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.InputStream; +import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.List; @@ -1019,7 +1020,27 @@ statement.close(); con.close(); - Properties festivalData = new Properties(); + String query = "SELECT festival_cycle, "; + for(int i = 0; i < FESTIVAL_COUNT-1; i++) + query += "accumulated_bonus" + String.valueOf(i) + ", "; + query += "accumulated_bonus" + String.valueOf(FESTIVAL_COUNT -1) + " "; + query += "FROM seven_signs_status WHERE id=1"; + Connection con2 = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement2 = con2.prepareStatement(query); + ResultSet rset2 = statement2.executeQuery(); + + while(rset2.next()) + { + _festivalCycle = rset2.getInt("festival_cycle"); + for(int i = 0; i < FESTIVAL_COUNT; i++) + _accumulatedBonuses.add(i, rset2.getInt("accumulated_bonus" + String.valueOf(i))); + + } + + if (Config.DEBUG) + _log.info("SevenSignsFestival: Loaded data from SQL."); + + /*Properties festivalData = new Properties(); InputStream is = new FileInputStream(new File("./" + FESTIVAL_DATA_FILE)); festivalData.load(is); is.close(); @@ -1030,7 +1051,7 @@ _accumulatedBonuses.add(i, Integer.parseInt(festivalData.getProperty("AccumulatedBonus_" + i, "0"))); if (Config.DEBUG) - _log.info("SevenSignsFestival: Loaded data from signs.properties."); + _log.info("SevenSignsFestival: Loaded data from signs.properties.");*/ } /** @@ -2205,4 +2226,4 @@ _npcId = -1; } } -} \ No newline at end of file +} Index: C:/L2J/L2_GameServer_c4/java/net/sf/l2j/gameserver/SevenSigns.java =================================================================== --- C:/L2J/L2_GameServer_c4/java/net/sf/l2j/gameserver/SevenSigns.java (revisione 1616) +++ C:/L2J/L2_GameServer_c4/java/net/sf/l2j/gameserver/SevenSigns.java (copia locale) @@ -4,6 +4,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; +import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Calendar; @@ -340,7 +341,9 @@ // Schedule a time for the next period change. SevenSignsPeriodChange sspc = new SevenSignsPeriodChange(); + SevenSignsUpdateSystem ssus = new SevenSignsUpdateSystem(); ClientScheduler.getInstance().scheduleMed(sspc, milliToChange); + ClientScheduler.getInstance().scheduleMedAtFixedRate(ssus, 1000*60*60, 1000*60*60); // Thanks to http://rainbow.arch.scriptmania.com/scri..._countdown.html for help with this. double numSecs = (milliToChange / 1000) % 60; @@ -824,8 +827,46 @@ rset.close(); statement.close(); con.close(); - - Properties SevenSignsProp = new Properties(); + + Connection con2 = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement2 = con2.prepareStatement("SELECT * FROM seven_signs_status WHERE id=1"); + ResultSet rset2 = statement2.executeQuery(); + + while(rset2.next()) + { + _currentCycle = rset2.getInt("current_cycle"); + _activePeriod = rset2.getInt("active_period"); + _previousWinner = rset2.getInt("previous_winner"); + + _dawnStoneScore = rset2.getInt("dawn_stone_score"); + _dawnFestivalScore = rset2.getInt("dawn_festival_score"); + _duskStoneScore = rset2.getInt("dusk_stone_score"); + _duskFestivalScore = rset2.getInt("dusk_festival_score"); + + _signsSealOwners.put(SEAL_AVARICE, rset2.getInt("avarice_owner")); + _signsSealOwners.put(SEAL_GNOSIS, rset2.getInt("gnosis_owner")); + _signsSealOwners.put(SEAL_STRIFE, rset2.getInt("strife_owner")); + + _signsDawnSealTotals.put(SEAL_AVARICE, rset2.getInt("avarice_dawn_score")); + _signsDawnSealTotals.put(SEAL_GNOSIS, rset2.getInt("gnosis_dawn_score")); + _signsDawnSealTotals.put(SEAL_STRIFE, rset2.getInt("strife_dawn_score")); + _signsDuskSealTotals.put(SEAL_AVARICE, rset2.getInt("avarice_dusk_score")); + _signsDuskSealTotals.put(SEAL_GNOSIS, rset2.getInt("gnosis_dusk_score")); + _signsDuskSealTotals.put(SEAL_STRIFE, rset2.getInt("strife_dusk_score")); + } + + rset2.close(); + statement2.close(); + con2.close(); + + Connection con3 = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement3 = con3.prepareStatement("UPDATE seven_signs_status SET date=? WHERE id=1"); + statement3.setInt(1, Calendar.getInstance().get(Calendar.DAY_OF_WEEK)); + statement3.execute(); + statement3.close(); + con3.close(); + + /*Properties SevenSignsProp = new Properties(); InputStream is = new FileInputStream(new File("./" + SEVEN_SIGNS_DATA_FILE)); SevenSignsProp.load(is); is.close(); @@ -848,7 +889,7 @@ _signsDawnSealTotals.put(SEAL_STRIFE, Integer.parseInt(SevenSignsProp.getProperty("StrifeDawnScore", "0"))); _signsDuskSealTotals.put(SEAL_AVARICE, Integer.parseInt(SevenSignsProp.getProperty("AvariceDuskScore", "0"))); _signsDuskSealTotals.put(SEAL_GNOSIS, Integer.parseInt(SevenSignsProp.getProperty("GnosisDuskScore", "0"))); - _signsDuskSealTotals.put(SEAL_STRIFE, Integer.parseInt(SevenSignsProp.getProperty("StrifeDuskScore", "0"))); + _signsDuskSealTotals.put(SEAL_STRIFE, Integer.parseInt(SevenSignsProp.getProperty("StrifeDuskScore", "0")));*/ // Festival data is loaded now after the Seven Signs engine data. } @@ -896,8 +937,54 @@ } con.close(); + + Connection con2 = L2DatabaseFactory.getInstance().getConnection(); + + if(updateSettings) { + + String query = "UPDATE seven_signs_status SET current_cycle=?, active_period=?, previous_winner=?, " + + "dawn_stone_score=?, dawn_festival_score=?, dusk_stone_score=?, dusk_festival_score=?, " + + "avarice_owner=?, gnosis_owner=?, strife_owner=?, avarice_dawn_score=?, gnosis_dawn_score=?, " + + "strife_dawn_score=?, avarice_dusk_score=?, gnosis_dusk_score=?, strife_dusk_score=?, " + + "festival_cycle=?, "; + for(int i = 0; i < (SevenSignsFestival.FESTIVAL_COUNT); i++) + query += "accumulated_bonus" + String.valueOf(i) + "=?, "; + query += "date=? WHERE id=1"; + + PreparedStatement statement2 = con2.prepareStatement(query); + + statement2.setInt(1, _currentCycle); + statement2.setInt(2, _activePeriod); + statement2.setInt(3, _previousWinner); + statement2.setInt(4, _dawnStoneScore); + statement2.setInt(5, _dawnFestivalScore); + statement2.setInt(6, _duskStoneScore); + statement2.setInt(7, _duskFestivalScore); + statement2.setInt(8, _signsSealOwners.get(SEAL_AVARICE)); + statement2.setInt(9, _signsSealOwners.get(SEAL_GNOSIS)); + statement2.setInt(10,_signsSealOwners.get(SEAL_STRIFE)); + statement2.setInt(11,_signsDawnSealTotals.get(SEAL_AVARICE)); + statement2.setInt(12,_signsDawnSealTotals.get(SEAL_GNOSIS)); + statement2.setInt(13,_signsDawnSealTotals.get(SEAL_STRIFE)); + statement2.setInt(14,_signsDuskSealTotals.get(SEAL_AVARICE)); + statement2.setInt(15,_signsDuskSealTotals.get(SEAL_GNOSIS)); + statement2.setInt(16,_signsDuskSealTotals.get(SEAL_STRIFE)); + + statement2.setInt(17,SevenSignsFestival.getInstance().getCurrentFestivalCycle()); + for(int i = 0; i < SevenSignsFestival.FESTIVAL_COUNT; i++) + statement2.setInt(18+i,SevenSignsFestival.getInstance().getAccumulatedBonus(i)); + statement2.setInt(18 + SevenSignsFestival.FESTIVAL_COUNT,Calendar.getInstance().get(Calendar.DAY_OF_WEEK)); + + statement2.execute(); + statement2.close(); + + if (Config.DEBUG) + _log.info("SevenSigns: Updated data in SQL database."); + + } + con2.close(); - if (updateSettings) { + /*if (updateSettings) { Properties SevenSignsProp = new Properties(); FileOutputStream fos = new FileOutputStream(new File(Config.DATAPACK_ROOT, SEVEN_SIGNS_DATA_FILE)); @@ -932,7 +1019,7 @@ if (Config.DEBUG) _log.info("SevenSigns: Updated data in signs.properties file."); - } + }*/ } /** @@ -1463,4 +1550,14 @@ ClientScheduler.getInstance().scheduleMed(sspc, getMilliToPeriodChange()); } } -} \ No newline at end of file + + private class SevenSignsUpdateSystem implements Runnable { + public void run() { + try { + saveSevenSignsData(null, true); + } catch (Exception e) { + _log.severe("SevenSigns: Failed to save configuration: " + e); + } + } + } +}