WhiteFace Posted June 28, 2009 Posted June 28, 2009 hello all,With this contrib olympiad info saved into database table olympiad_data. All fully backward compartible - if table is empty - old configuration file loaded (but saved into db). so lets start DP part: CREATE TABLE IF NOT EXISTS `olympiad_data` ( `id` TINYINT UNSIGNED NOT NULL default '0', `current_cycle` MEDIUMINT UNSIGNED NOT NULL default '1', `period` MEDIUMINT UNSIGNED NOT NULL default '0', `olympiad_end` BIGINT UNSIGNED NOT NULL default 0, `validation_end` BIGINT UNSIGNED NOT NULL default 0, `next_weekly_change` BIGINT UNSIGNED NOT NULL default 0, PRIMARY KEY (`id`) ); now do this code: Index: java/net/sf/l2j/gameserver/model/olympiad/Olympiad.java =================================================================== --- java/net/sf/l2j/gameserver/model/olympiad/Olympiad.java (revision 3199) +++ java/net/sf/l2j/gameserver/model/olympiad/Olympiad.java (working copy) @@ -21,7 +21,6 @@ import java.io.File; import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; @@ -66,6 +65,12 @@ private static final String OLYMPIAD_DATA_FILE = "config/olympiad.properties"; public static final String OLYMPIAD_HTML_PATH = "data/html/olympiad/"; + private static final String OLYMPIAD_LOAD_DATA = "SELECT current_cycle, period, olympiad_end, validation_end, " + + "next_weekly_change FROM olympiad_data WHERE id = 0"; + private static final String OLYMPIAD_SAVE_DATA = "INSERT INTO olympiad_data (id, current_cycle, " + + "period, olympiad_end, validation_end, next_weekly_change) VALUES (?,?,?,?,?,?) " + + "ON DUPLICATE KEY UPDATE current_cycle=?, period=?, olympiad_end=?, " + + "validation_end=?, next_weekly_change=?"; private static final String OLYMPIAD_LOAD_NOBLES = "SELECT olympiad_nobles.charId, olympiad_nobles.class_id, " + "characters.char_name, olympiad_nobles.olympiad_points, olympiad_nobles.competitions_done, " + "olympiad_nobles.competitions_won, olympiad_nobles.competitions_lost, olympiad_nobles.competitions_drawn " @@ -162,35 +167,79 @@ { _nobles = new FastMap<Integer, StatsSet>(); - Properties OlympiadProperties = new Properties(); - InputStream is = null; + Connection con = null; + + boolean loaded = false; try { - is = new FileInputStream(new File("./" + OLYMPIAD_DATA_FILE)); - OlympiadProperties.load(is); + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(OLYMPIAD_LOAD_DATA); + ResultSet rset = statement.executeQuery(); + + while (rset.next()) + { + _currentCycle = rset.getInt("current_cycle"); + _period = rset.getInt("period"); + _olympiadEnd = rset.getLong("olympiad_end"); + _validationEnd = rset.getLong("validation_end"); + _nextWeeklyChange = rset.getLong("next_weekly_change"); + loaded = true; + } + + rset.close(); + statement.close(); } catch (Exception e) { - _log.log(Level.SEVERE, "Olympiad System: Error loading olympiad properties: ", e); - return; + _log.log(Level.WARNING, "Olympiad System: Error loading olympiad data from database: ", e); } finally { try { - is.close(); + con.close(); } catch (Exception e) { + e.printStackTrace(); } } + + if (!loaded) + { + _log.log(Level.INFO, "Olympiad System: failed to load data from database, trying to load from file."); + + Properties OlympiadProperties = new Properties(); + InputStream is = null; + try + { + is = new FileInputStream(new File("./" + OLYMPIAD_DATA_FILE)); + OlympiadProperties.load(is); + } + catch (Exception e) + { + _log.log(Level.SEVERE, "Olympiad System: Error loading olympiad properties: ", e); + return; + } + finally + { + try + { + is.close(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + _currentCycle = Integer.parseInt(OlympiadProperties.getProperty("CurrentCycle", "1")); + _period = Integer.parseInt(OlympiadProperties.getProperty("Period", "0")); + _olympiadEnd = Long.parseLong(OlympiadProperties.getProperty("OlympiadEnd", "0")); + _validationEnd = Long.parseLong(OlympiadProperties.getProperty("ValidationEnd", "0")); + _nextWeeklyChange = Long.parseLong(OlympiadProperties.getProperty("NextWeeklyChange", "0")); + } - _currentCycle = Integer.parseInt(OlympiadProperties.getProperty("CurrentCycle", "1")); - _period = Integer.parseInt(OlympiadProperties.getProperty("Period", "0")); - _olympiadEnd = Long.parseLong(OlympiadProperties.getProperty("OlympiadEnd", "0")); - _validationEnd = Long.parseLong(OlympiadProperties.getProperty("ValidationEnd", "0")); - _nextWeeklyChange = Long.parseLong(OlympiadProperties.getProperty("NextWeeklyChange", "0")); - switch (_period) { case 0: @@ -218,7 +267,6 @@ return; } - Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); @@ -256,6 +304,7 @@ } catch (Exception e) { + e.printStackTrace(); } } @@ -1072,7 +1121,43 @@ { saveNobleData(); - Properties OlympiadProperties = new Properties(); + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(OLYMPIAD_SAVE_DATA); + + statement.setInt(1, 0); + statement.setInt(2, _currentCycle); + statement.setInt(3, _period); + statement.setLong(4, _olympiadEnd); + statement.setLong(5, _validationEnd); + statement.setLong(6, _nextWeeklyChange); + statement.setInt(7, _currentCycle); + statement.setInt(8, _period); + statement.setLong(9, _olympiadEnd); + statement.setLong(10, _validationEnd); + statement.setLong(11, _nextWeeklyChange); + + statement.execute(); + statement.close(); + } + catch (SQLException e) + { + _log.log(Level.SEVERE, "Olympiad System: Failed to save olympiad data to database: ", e); + } + finally + { + try + { + con.close(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } +/* Properties OlympiadProperties = new Properties(); FileOutputStream fos = null; try { @@ -1099,7 +1184,7 @@ catch (Exception e) { } - } + }*/ } protected void updateMonthlyData() and you are done credits:_DS_ from l2jserver enjoy Quote
HardCoded Posted June 28, 2009 Posted June 28, 2009 very nice share...Thx man. //keep sharing ;D Quote
yankiller Posted July 23, 2009 Posted July 23, 2009 Heres somthing that works!great share man,i was disappointed cause none of the mods here could work on my server,this one is from the few ones... :) Quote
Zeronimo Posted August 7, 2009 Posted August 7, 2009 Why waste your time with an un-finished product ? DS Said it himself, it's not done, unsecure, and will cause loss on server crashes. Quote
KraSh™ Posted September 25, 2009 Posted September 25, 2009 where to do the code ? :P open your eyes --- java/net/sf/l2j/gameserver/model/olympiad/Olympiad.java (revision 3199) +++ java/net/sf/l2j/gameserver/model/olympiad/Olympiad.java (working copy) Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.