浏览代码

Olympiad info now saved to the sql table 'olympiad_data', not in file olympiad.properties.
CAUTION: DP UPDATE REQUIRED OR OLYMPIAD INFO WILL BE LOST !
Syatem is backward compartible: if table is empty then info loaded from file and saved into db.

_DS_ 16 年之前
父节点
当前提交
a354fa5066
共有 1 个文件被更改,包括 101 次插入17 次删除
  1. 101 17
      L2_GameServer/java/net/sf/l2j/gameserver/model/olympiad/Olympiad.java

+ 101 - 17
L2_GameServer/java/net/sf/l2j/gameserver/model/olympiad/Olympiad.java

@@ -21,7 +21,6 @@ package net.sf.l2j.gameserver.model.olympiad;
 
 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 @@ public class Olympiad
 	
 	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 (0,?,?,?,?,?) "
+			+ "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,34 +167,78 @@ public class Olympiad
 	{
 		_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();
 			}
 		}
-		
-		_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"));
+
+		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"));
+		}
 		
 		switch (_period)
 		{
@@ -218,7 +267,6 @@ public class Olympiad
 				return;
 		}
 		
-		Connection con = null;
 		try
 		{
 			con = L2DatabaseFactory.getInstance().getConnection();
@@ -256,6 +304,7 @@ public class Olympiad
 			}
 			catch (Exception e)
 			{
+				e.printStackTrace();
 			}
 		}
 		
@@ -1072,7 +1121,42 @@ public class Olympiad
 	{
 		saveNobleData();
 		
-		Properties OlympiadProperties = new Properties();
+		Connection con = null;
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			PreparedStatement statement = con.prepareStatement(OLYMPIAD_SAVE_DATA);
+
+			statement.setInt(1, _currentCycle);
+			statement.setInt(2, _period);
+			statement.setLong(3, _olympiadEnd);
+			statement.setLong(4, _validationEnd);
+			statement.setLong(5, _nextWeeklyChange);
+			statement.setInt(6, _currentCycle);
+			statement.setInt(7, _period);
+			statement.setLong(8, _olympiadEnd);
+			statement.setLong(9, _validationEnd);
+			statement.setLong(10, _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 +1183,7 @@ public class Olympiad
 			catch (Exception e)
 			{
 			}
-		}
+		}*/
 	}
 	
 	protected void updateMonthlyData()