Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Fishing Tournament

Iniciado por Swarlog, Ago 03, 2025, 01:37 AM

Tema anterior - Siguiente tema

Swarlog

### Eclipse Workspace Patch 1.0
#P L2J_Server_BETA
Index: java/com/l2jserver/gameserver/GameServer.java
===================================================================
--- java/com/l2jserver/gameserver/GameServer.java	(revision 6469)
+++ java/com/l2jserver/gameserver/GameServer.java	(working copy)
@@ -102,6 +102,7 @@
 import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
 import com.l2jserver.gameserver.instancemanager.DayNightSpawnManager;
 import com.l2jserver.gameserver.instancemanager.DimensionalRiftManager;
+import com.l2jserver.gameserver.instancemanager.FishingChampionshipManager;
 import com.l2jserver.gameserver.instancemanager.FortManager;
 import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
 import com.l2jserver.gameserver.instancemanager.FourSepulchersManager;
@@ -375,6 +376,11 @@
 			CoupleManager.getInstance();
 		}
 		
+		if (Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
+		{
+			FishingChampionshipManager.getInstance();
+		}
+		
 		TaskManager.getInstance();
 		
 		AntiFeedManager.getInstance().registerEvent(AntiFeedManager.GAME_ID);
Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java	(revision 6469)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -12187,7 +12187,7 @@
 	
 	public void startFishCombat(boolean isNoob, boolean isUpperGrade)
 	{
-		_fishCombat = new L2Fishing(this, _fish, isNoob, isUpperGrade);
+		_fishCombat = new L2Fishing(this, _fish, isNoob, isUpperGrade, _lure.getId());
 	}
 	
 	public void endFishing(boolean win)
Index: java/com/l2jserver/Config.java
===================================================================
--- java/com/l2jserver/Config.java	(revision 6469)
+++ java/com/l2jserver/Config.java	(working copy)
@@ -612,6 +612,13 @@
 	public static float ALT_LOTTERY_4_NUMBER_RATE;
 	public static float ALT_LOTTERY_3_NUMBER_RATE;
 	public static long ALT_LOTTERY_2_AND_1_NUMBER_PRIZE;
+	public static boolean ALT_FISH_CHAMPIONSHIP_ENABLED;
+	public static int ALT_FISH_CHAMPIONSHIP_REWARD_ITEM;
+	public static int ALT_FISH_CHAMPIONSHIP_REWARD_1;
+	public static int ALT_FISH_CHAMPIONSHIP_REWARD_2;
+	public static int ALT_FISH_CHAMPIONSHIP_REWARD_3;
+	public static int ALT_FISH_CHAMPIONSHIP_REWARD_4;
+	public static int ALT_FISH_CHAMPIONSHIP_REWARD_5;
 	public static boolean ALT_ITEM_AUCTION_ENABLED;
 	public static int ALT_ITEM_AUCTION_EXPIRED_AFTER;
 	public static long ALT_ITEM_AUCTION_TIME_EXTENDS_ON_BID;
@@ -1938,6 +1945,13 @@
 			ALT_LOTTERY_4_NUMBER_RATE = General.getFloat("AltLottery4NumberRate", 0.2f);
 			ALT_LOTTERY_3_NUMBER_RATE = General.getFloat("AltLottery3NumberRate", 0.2f);
 			ALT_LOTTERY_2_AND_1_NUMBER_PRIZE = General.getLong("AltLottery2and1NumberPrize", 200);
+			ALT_FISH_CHAMPIONSHIP_ENABLED = General.getBoolean("AltFishChampionshipEnabled", true);
+			ALT_FISH_CHAMPIONSHIP_REWARD_ITEM = General.getInt("AltFishChampionshipRewardItemId", 57);
+			ALT_FISH_CHAMPIONSHIP_REWARD_1 = General.getInt("AltFishChampionshipReward1", 800000);
+			ALT_FISH_CHAMPIONSHIP_REWARD_2 = General.getInt("AltFishChampionshipReward2", 500000);
+			ALT_FISH_CHAMPIONSHIP_REWARD_3 = General.getInt("AltFishChampionshipReward3", 300000);
+			ALT_FISH_CHAMPIONSHIP_REWARD_4 = General.getInt("AltFishChampionshipReward4", 200000);
+			ALT_FISH_CHAMPIONSHIP_REWARD_5 = General.getInt("AltFishChampionshipReward5", 100000);
 			ALT_ITEM_AUCTION_ENABLED = General.getBoolean("AltItemAuctionEnabled", true);
 			ALT_ITEM_AUCTION_EXPIRED_AFTER = General.getInt("AltItemAuctionExpiredAfter", 14);
 			ALT_ITEM_AUCTION_TIME_EXTENDS_ON_BID = General.getInt("AltItemAuctionTimeExtendsOnBid", 0) * 1000;
Index: java/com/l2jserver/gameserver/Shutdown.java
===================================================================
--- java/com/l2jserver/gameserver/Shutdown.java	(revision 6469)
+++ java/com/l2jserver/gameserver/Shutdown.java	(working copy)
@@ -30,6 +30,7 @@
 import com.l2jserver.gameserver.instancemanager.CHSiegeManager;
 import com.l2jserver.gameserver.instancemanager.CastleManorManager;
 import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
+import com.l2jserver.gameserver.instancemanager.FishingChampionshipManager;
 import com.l2jserver.gameserver.instancemanager.GlobalVariablesManager;
 import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.instancemanager.HellboundManager;
@@ -567,6 +568,13 @@
 		GlobalVariablesManager.getInstance().storeMe();
 		_log.info("Global Variables Manager: Variables saved(" + tc.getEstimatedTimeAndRestartCounter() + "ms).");
 		
+		// Save Fishing tournament data
+		if (Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
+		{
+			FishingChampionshipManager.getInstance().shutdown();
+			_log.info("Fishing Championship data has been saved.");
+		}
+		
 		// Save items on ground before closing
 		if (Config.SAVE_DROPPED_ITEM)
 		{
Index: java/com/l2jserver/gameserver/model/actor/instance/L2FishermanInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2FishermanInstance.java	(revision 6470)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2FishermanInstance.java	(working copy)
@@ -20,15 +20,19 @@
 
 import java.util.List;
 
+import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.SkillData;
 import com.l2jserver.gameserver.datatables.SkillTreesData;
 import com.l2jserver.gameserver.enums.InstanceType;
+import com.l2jserver.gameserver.instancemanager.FishingChampionshipManager;
 import com.l2jserver.gameserver.model.L2SkillLearn;
+import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.base.AcquireSkillType;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
+import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 public final class L2FishermanInstance extends L2MerchantInstance
@@ -63,6 +67,35 @@
 		{
 			showFishSkillList(player);
 		}
+		else if (command.startsWith("FishingChampionship"))
+		{
+			if (Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
+			{
+				FishingChampionshipManager.getInstance().showChampScreen(player, this);
+			}
+			else
+			{
+				sendHtml(player, this, "no_fish_event001.htm");
+			}
+		}
+		else if (command.startsWith("FishingReward"))
+		{
+			if (Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
+			{
+				if (FishingChampionshipManager.getInstance().isWinner(player.getName()))
+				{
+					FishingChampionshipManager.getInstance().getReward(player);
+				}
+				else
+				{
+					sendHtml(player, this, "no_fish_event_reward001.htm");
+				}
+			}
+			else
+			{
+				sendHtml(player, this, "no_fish_event001.htm");
+			}
+		}
 		else
 		{
 			super.onBypassFeedback(player, command);
@@ -107,4 +140,11 @@
 			player.sendPacket(asl);
 		}
 	}
+	
+	private static void sendHtml(L2PcInstance player, L2Npc npc, String htmlName)
+	{
+		final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
+		html.setFile(player.getHtmlPrefix(), "data/html/fisherman/championship/" + htmlName);
+		player.sendPacket(html);
+	}
 }
Index: dist/game/config/General.properties
===================================================================
--- dist/game/config/General.properties	(revision 6469)
+++ dist/game/config/General.properties	(working copy)
@@ -716,6 +716,24 @@
 
 
 # ---------------------------------------------------------------------------
+# Fishing Tournament
+# ---------------------------------------------------------------------------
+
+# Enable or disable the Fishing Tournament system
+AltFishChampionshipEnabled = True
+
+# Item Id used as reward
+AltFishChampionshipRewardItemId = 57
+
+# Item count used as reward (for the 5 first winners)
+AltFishChampionshipReward1 = 800000
+AltFishChampionshipReward2 = 500000
+AltFishChampionshipReward3 = 300000
+AltFishChampionshipReward4 = 200000
+AltFishChampionshipReward5 = 100000
+
+
+# ---------------------------------------------------------------------------
 # Item Auction
 # ---------------------------------------------------------------------------
 
Index: java/com/l2jserver/gameserver/instancemanager/FishingChampionshipManager.java
===================================================================
--- java/com/l2jserver/gameserver/instancemanager/FishingChampionshipManager.java	(revision 0)
+++ java/com/l2jserver/gameserver/instancemanager/FishingChampionshipManager.java	(working copy)
@@ -0,0 +1,549 @@
+/*
+ * Copyright (C) 2004-2014 L2J Server
+ * 
+ * This file is part of L2J Server.
+ * 
+ * L2J Server is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J Server is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.instancemanager;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.datatables.ItemTable;
+import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.util.Rnd;
+
+/**
+ * @author n0nam3
+ * @date 08/08/2010 15:11
+ */
+public class FishingChampionshipManager
+{
+	protected static final Logger _log = Logger.getLogger(FishingChampionshipManager.class.getName());
+	
+	private static final String INSERT = "INSERT INTO fishing_championship(player_name,fish_length,rewarded) VALUES (?,?,?)";
+	private static final String DELETE = "DELETE FROM fishing_championship";
+	private static final String SELECT = "SELECT `player_name`, `fish_length`, `rewarded` FROM fishing_championship";
+	
+	private static final FishingChampionshipManager _instance = new FishingChampionshipManager();
+	
+	public static FishingChampionshipManager getInstance()
+	{
+		return _instance;
+	}
+	
+	protected long _enddate = 0;
+	protected final List<String> _playersName = new ArrayList<>();
+	protected final List<String> _fishLength = new ArrayList<>();
+	protected final List<String> _winPlayersName = new ArrayList<>();
+	protected final List<String> _winFishLength = new ArrayList<>();
+	protected final List<Fisher> _tmpPlayers = new ArrayList<>();
+	protected final List<Fisher> _winPlayers = new ArrayList<>();
+	protected double _minFishLength = 0;
+	protected boolean _needRefresh = true;
+	
+	private FishingChampionshipManager()
+	{
+		restoreData();
+		refreshWinResult();
+		recalculateMinLength();
+		
+		if (_enddate <= System.currentTimeMillis())
+		{
+			_enddate = System.currentTimeMillis();
+			new finishChamp().run();
+		}
+		else
+		{
+			ThreadPoolManager.getInstance().scheduleGeneral(new finishChamp(), _enddate - System.currentTimeMillis());
+		}
+	}
+	
+	protected void setEndOfChamp()
+	{
+		Calendar finishtime = Calendar.getInstance();
+		finishtime.setTimeInMillis(_enddate);
+		finishtime.set(Calendar.MINUTE, 0);
+		finishtime.set(Calendar.SECOND, 0);
+		finishtime.add(Calendar.DAY_OF_MONTH, 6);
+		finishtime.set(Calendar.DAY_OF_WEEK, 3);
+		finishtime.set(Calendar.HOUR_OF_DAY, 19);
+		_enddate = finishtime.getTimeInMillis();
+	}
+	
+	private void restoreData()
+	{
+		_enddate = GlobalVariablesManager.getInstance().getLong("fishChampionshipEnd", 0);
+		
+		try (Connection con = L2DatabaseFactory.getInstance().getConnection())
+		{
+			PreparedStatement statement = con.prepareStatement(SELECT);
+			ResultSet rs = statement.executeQuery();
+			while (rs.next())
+			{
+				int rewarded = rs.getInt("rewarded");
+				if (rewarded == 0)
+				{
+					_tmpPlayers.add(new Fisher(rs.getString("player_name"), rs.getDouble("fish_length"), 0));
+				}
+				else if (rewarded > 0)
+				{
+					_winPlayers.add(new Fisher(rs.getString("player_name"), rs.getDouble("fish_length"), rewarded));
+				}
+			}
+			rs.close();
+			statement.close();
+		}
+		catch (SQLException e)
+		{
+			_log.log(Level.WARNING, "FishingChampionshipManager: can't restore fishing championship info: " + e.getMessage(), e);
+		}
+	}
+	
+	public synchronized void newFish(L2PcInstance pl, int lureId)
+	{
+		if (!Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
+		{
+			return;
+		}
+		
+		double len = Rnd.get(60, 89) + (Rnd.get(0, 1000) / 1000.);
+		if ((lureId >= 8484) && (lureId <= 8486))
+		{
+			len += Rnd.get(0, 3000) / 1000.;
+		}
+		
+		pl.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAUGHT_FISH_S1_LENGTH).addString(String.valueOf(len)));
+		
+		if (_tmpPlayers.size() < 5)
+		{
+			for (Fisher fisher : _tmpPlayers)
+			{
+				if (fisher.getName().equalsIgnoreCase(pl.getName()))
+				{
+					if (fisher.getLength() < len)
+					{
+						fisher.setLength(len);
+						pl.sendPacket(SystemMessageId.REGISTERED_IN_FISH_SIZE_RANKING);
+						recalculateMinLength();
+					}
+					return;
+				}
+			}
+			_tmpPlayers.add(new Fisher(pl.getName(), len, 0));
+			pl.sendPacket(SystemMessageId.REGISTERED_IN_FISH_SIZE_RANKING);
+			recalculateMinLength();
+		}
+		else if (_minFishLength < len)
+		{
+			for (Fisher fisher : _tmpPlayers)
+			{
+				if (fisher.getName().equalsIgnoreCase(pl.getName()))
+				{
+					if (fisher.getLength() < len)
+					{
+						fisher.setLength(len);
+						pl.sendPacket(SystemMessageId.REGISTERED_IN_FISH_SIZE_RANKING);
+						recalculateMinLength();
+					}
+					return;
+				}
+			}
+			
+			Fisher minFisher = null;
+			double minLen = 99999.;
+			for (Fisher fisher : _tmpPlayers)
+			{
+				if (fisher.getLength() < minLen)
+				{
+					minFisher = fisher;
+					minLen = minFisher.getLength();
+				}
+			}
+			_tmpPlayers.remove(minFisher);
+			_tmpPlayers.add(new Fisher(pl.getName(), len, 0));
+			pl.sendPacket(SystemMessageId.REGISTERED_IN_FISH_SIZE_RANKING);
+			recalculateMinLength();
+		}
+	}
+	
+	private void recalculateMinLength()
+	{
+		double minLen = 99999.;
+		for (Fisher fisher : _tmpPlayers)
+		{
+			if (fisher.getLength() < minLen)
+			{
+				minLen = fisher.getLength();
+			}
+		}
+		_minFishLength = minLen;
+	}
+	
+	public long getTimeRemaining()
+	{
+		return (_enddate - System.currentTimeMillis()) / 60000;
+	}
+	
+	public String getWinnerName(int par)
+	{
+		if (_winPlayersName.size() >= par)
+		{
+			return _winPlayersName.get(par - 1);
+		}
+		
+		return "None";
+	}
+	
+	public String getCurrentName(int par)
+	{
+		if (_playersName.size() >= par)
+		{
+			return _playersName.get(par - 1);
+		}
+		
+		return "None";
+	}
+	
+	public String getFishLength(int par)
+	{
+		if (_winFishLength.size() >= par)
+		{
+			return _winFishLength.get(par - 1);
+		}
+		
+		return "0";
+	}
+	
+	public String getCurrentFishLength(int par)
+	{
+		if (_fishLength.size() >= par)
+		{
+			return _fishLength.get(par - 1);
+		}
+		
+		return "0";
+	}
+	
+	public boolean isWinner(String playerName)
+	{
+		for (String name : _winPlayersName)
+		{
+			if (name.equals(playerName))
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public void getReward(L2PcInstance pl)
+	{
+		for (Fisher fisher : _winPlayers)
+		{
+			if (fisher.getName().equalsIgnoreCase(pl.getName()))
+			{
+				if (fisher.getRewardType() != 2)
+				{
+					int rewardCnt = 0;
+					for (int x = 0; x < _winPlayersName.size(); x++)
+					{
+						if (_winPlayersName.get(x).equalsIgnoreCase(pl.getName()))
+						{
+							switch (x)
+							{
+								case 0:
+									rewardCnt = Config.ALT_FISH_CHAMPIONSHIP_REWARD_1;
+									break;
+								
+								case 1:
+									rewardCnt = Config.ALT_FISH_CHAMPIONSHIP_REWARD_2;
+									break;
+								
+								case 2:
+									rewardCnt = Config.ALT_FISH_CHAMPIONSHIP_REWARD_3;
+									break;
+								
+								case 3:
+									rewardCnt = Config.ALT_FISH_CHAMPIONSHIP_REWARD_4;
+									break;
+								
+								case 4:
+									rewardCnt = Config.ALT_FISH_CHAMPIONSHIP_REWARD_5;
+									break;
+							}
+						}
+					}
+					fisher.setRewardType(2);
+					if (rewardCnt > 0)
+					{
+						pl.addItem("fishing_reward", Config.ALT_FISH_CHAMPIONSHIP_REWARD_ITEM, rewardCnt, null, true);
+						
+						final NpcHtmlMessage html = new NpcHtmlMessage();
+						html.setFile(pl.getHtmlPrefix(), "data/html/fisherman/championship/fish_event_reward001.htm");
+						pl.sendPacket(html);
+					}
+				}
+			}
+		}
+	}
+	
+	public void showMidResult(L2PcInstance pl)
+	{
+		final NpcHtmlMessage html = new NpcHtmlMessage();
+		
+		if (_needRefresh)
+		{
+			html.setFile(pl.getHtmlPrefix(), "data/html/fisherman/championship/fish_event003.htm");
+			pl.sendPacket(html);
+			
+			refreshResult();
+			ThreadPoolManager.getInstance().scheduleGeneral(new needRefresh(), 60000);
+			return;
+		}
+		
+		html.setFile(pl.getHtmlPrefix(), "data/html/fisherman/championship/fish_event002.htm");
+		
+		String str = null;
+		for (int x = 1; x <= 5; x++)
+		{
+			str += "<tr><td width=70 align=center>" + x + "</td>";
+			str += "<td width=110 align=center>" + getCurrentName(x) + "</td>";
+			str += "<td width=80 align=center>" + getCurrentFishLength(x) + "</td></tr>";
+		}
+		html.replace("%TABLE%", str);
+		html.replace("%prizeItem%", ItemTable.getInstance().getTemplate(Config.ALT_FISH_CHAMPIONSHIP_REWARD_ITEM).getName());
+		html.replace("%prizeFirst%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_1));
+		html.replace("%prizeTwo%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_2));
+		html.replace("%prizeThree%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_3));
+		html.replace("%prizeFour%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_4));
+		html.replace("%prizeFive%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_5));
+		pl.sendPacket(html);
+	}
+	
+	public void showChampScreen(L2PcInstance pl, L2NpcInstance npc)
+	{
+		final NpcHtmlMessage html = new NpcHtmlMessage();
+		html.setFile(pl.getHtmlPrefix(), "data/html/fisherman/championship/fish_event001.htm");
+		
+		String str = null;
+		for (int x = 1; x <= 5; x++)
+		{
+			str += "<tr><td width=70 align=center>" + x + "</td>";
+			str += "<td width=110 align=center>" + getWinnerName(x) + "</td>";
+			str += "<td width=80 align=center>" + getFishLength(x) + "</td></tr>";
+		}
+		html.replace("%TABLE%", str);
+		html.replace("%prizeItem%", ItemTable.getInstance().getTemplate(Config.ALT_FISH_CHAMPIONSHIP_REWARD_ITEM).getName());
+		html.replace("%prizeFirst%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_1));
+		html.replace("%prizeTwo%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_2));
+		html.replace("%prizeThree%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_3));
+		html.replace("%prizeFour%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_4));
+		html.replace("%prizeFive%", String.valueOf(Config.ALT_FISH_CHAMPIONSHIP_REWARD_5));
+		html.replace("%refresh%", String.valueOf(getTimeRemaining()));
+		html.replace("%objectId%", String.valueOf(npc.getObjectId()));
+		pl.sendPacket(html);
+	}
+	
+	public void shutdown()
+	{
+		GlobalVariablesManager.getInstance().set("fishChampionshipEnd", _enddate);
+		
+		try (Connection con = L2DatabaseFactory.getInstance().getConnection())
+		{
+			PreparedStatement statement = con.prepareStatement(DELETE);
+			statement.execute();
+			statement.close();
+			
+			for (Fisher fisher : _winPlayers)
+			{
+				statement = con.prepareStatement(INSERT);
+				statement.setString(1, fisher.getName());
+				statement.setDouble(2, fisher.getLength());
+				statement.setInt(3, fisher.getRewardType());
+				statement.execute();
+				statement.close();
+			}
+			
+			for (Fisher fisher : _tmpPlayers)
+			{
+				statement = con.prepareStatement(INSERT);
+				statement.setString(1, fisher.getName());
+				statement.setDouble(2, fisher.getLength());
+				statement.setInt(3, 0);
+				statement.execute();
+				statement.close();
+			}
+		}
+		catch (SQLException e)
+		{
+			_log.log(Level.WARNING, "FishingChampionshipManager: can't update infos: " + e.getMessage(), e);
+		}
+	}
+	
+	private synchronized void refreshResult()
+	{
+		_needRefresh = false;
+		
+		_playersName.clear();
+		_fishLength.clear();
+		
+		Fisher fisher1;
+		Fisher fisher2;
+		
+		for (int x = 0; x <= (_tmpPlayers.size() - 1); x++)
+		{
+			for (int y = 0; y <= (_tmpPlayers.size() - 2); y++)
+			{
+				fisher1 = _tmpPlayers.get(y);
+				fisher2 = _tmpPlayers.get(y + 1);
+				if (fisher1.getLength() < fisher2.getLength())
+				{
+					_tmpPlayers.set(y, fisher2);
+					_tmpPlayers.set(y + 1, fisher1);
+				}
+			}
+		}
+		
+		for (int x = 0; x <= (_tmpPlayers.size() - 1); x++)
+		{
+			_playersName.add(_tmpPlayers.get(x).getName());
+			_fishLength.add(String.valueOf(_tmpPlayers.get(x).getLength()));
+		}
+	}
+	
+	protected void refreshWinResult()
+	{
+		_winPlayersName.clear();
+		_winFishLength.clear();
+		
+		Fisher fisher1;
+		Fisher fisher2;
+		
+		for (int x = 0; x <= (_winPlayers.size() - 1); x++)
+		{
+			for (int y = 0; y <= (_winPlayers.size() - 2); y++)
+			{
+				fisher1 = _winPlayers.get(y);
+				fisher2 = _winPlayers.get(y + 1);
+				if (fisher1.getLength() < fisher2.getLength())
+				{
+					_winPlayers.set(y, fisher2);
+					_winPlayers.set(y + 1, fisher1);
+				}
+			}
+		}
+		
+		for (int x = 0; x <= (_winPlayers.size() - 1); x++)
+		{
+			_winPlayersName.add(_winPlayers.get(x).getName());
+			_winFishLength.add(String.valueOf(_winPlayers.get(x).getLength()));
+		}
+	}
+	
+	private class finishChamp implements Runnable
+	{
+		protected finishChamp()
+		{
+			// Do nothing
+		}
+		
+		@Override
+		public void run()
+		{
+			_winPlayers.clear();
+			for (Fisher fisher : _tmpPlayers)
+			{
+				fisher.setRewardType(1);
+				_winPlayers.add(fisher);
+			}
+			_tmpPlayers.clear();
+			
+			refreshWinResult();
+			setEndOfChamp();
+			shutdown();
+			
+			_log.info("FishingChampionshipManager : new event period start.");
+			ThreadPoolManager.getInstance().scheduleGeneral(new finishChamp(), _enddate - System.currentTimeMillis());
+		}
+	}
+	
+	private class needRefresh implements Runnable
+	{
+		protected needRefresh()
+		{
+			// Do nothing
+		}
+		
+		@Override
+		public void run()
+		{
+			_needRefresh = true;
+		}
+	}
+	
+	private class Fisher
+	{
+		private double _length;
+		private final String _name;
+		private int _reward;
+		
+		public Fisher(String name, double length, int rewardType)
+		{
+			_name = name;
+			_length = length;
+			_reward = rewardType;
+		}
+		
+		public void setLength(double value)
+		{
+			_length = value;
+		}
+		
+		public void setRewardType(int value)
+		{
+			_reward = value;
+		}
+		
+		public String getName()
+		{
+			return _name;
+		}
+		
+		public int getRewardType()
+		{
+			return _reward;
+		}
+		
+		public double getLength()
+		{
+			return _length;
+		}
+	}
+}
\ No newline at end of file
Index: java/com/l2jserver/gameserver/model/fishing/L2Fishing.java
===================================================================
--- java/com/l2jserver/gameserver/model/fishing/L2Fishing.java	(revision 6469)
+++ java/com/l2jserver/gameserver/model/fishing/L2Fishing.java	(working copy)
@@ -23,6 +23,7 @@
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.datatables.FishingMonstersData;
 import com.l2jserver.gameserver.datatables.NpcData;
+import com.l2jserver.gameserver.instancemanager.FishingChampionshipManager;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
@@ -51,6 +52,7 @@
 	private final double _regenHp;
 	private final boolean _isUpperGrade;
 	private int _lureType;
+	private final int _lureId;
 	
 	@Override
 	public void run()
@@ -78,7 +80,7 @@
 		}
 	}
 	
-	public L2Fishing(L2PcInstance Fisher, L2Fish fish, boolean isNoob, boolean isUpperGrade)
+	public L2Fishing(L2PcInstance Fisher, L2Fish fish, boolean isNoob, boolean isUpperGrade, int lureId)
 	{
 		_fisher = Fisher;
 		_fishMaxHp = fish.getFishHp();
@@ -87,6 +89,7 @@
 		_fishId = fish.getItemId();
 		_time = fish.getCombatDuration();
 		_isUpperGrade = isUpperGrade;
+		_lureId = lureId;
 		if (isUpperGrade)
 		{
 			_deceptiveMode = Rnd.get(100) >= 90 ? 1 : 0;
@@ -161,6 +164,7 @@
 				{
 					_fisher.sendPacket(SystemMessageId.YOU_CAUGHT_SOMETHING);
 					_fisher.addItem("Fishing", _fishId, 1, null, true);
+					FishingChampionshipManager.getInstance().newFish(_fisher, _lureId);
 				}
 			}
 		}
Index: java/com/l2jserver/gameserver/network/clientpackets/RequestExFishRanking.java
===================================================================
--- java/com/l2jserver/gameserver/network/clientpackets/RequestExFishRanking.java	(revision 6469)
+++ java/com/l2jserver/gameserver/network/clientpackets/RequestExFishRanking.java	(working copy)
@@ -18,6 +18,10 @@
  */
 package com.l2jserver.gameserver.network.clientpackets;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.instancemanager.FishingChampionshipManager;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+
 /**
  * Format: (ch) just a trigger
  * @author -Wooden-
@@ -35,7 +39,16 @@
 	@Override
 	protected void runImpl()
 	{
-		_log.info("C5: RequestExFishRanking");
+		final L2PcInstance activeChar = getClient().getActiveChar();
+		if (activeChar == null)
+		{
+			return;
+		}
+		
+		if (Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
+		{
+			FishingChampionshipManager.getInstance().showMidResult(activeChar);
+		}
 	}
 	
 	@Override
@@ -43,4 +56,4 @@
 	{
 		return _C__D0_18_REQUESTEXFISHRANKING;
 	}
-}
\ No newline at end of file
+}