Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Fishing Tournament

Iniciado por Swarlog, Sep 01, 2022, 12:56 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
+}