From 687969b37f3d7e1276c7daff723c0ea0d9cc43e1 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 19 May 2015 17:43:41 +0000 Subject: [PATCH] Automating Fishing. --- .../handlers/effecthandlers/Fishing.java | 4 +-- .../model/actor/instance/L2PcInstance.java | 31 +++++++++++++------ .../tasks/player/LookingForFishTask.java | 2 +- .../gameserver/model/fishing/L2Fishing.java | 12 ++++--- .../clientpackets/RequestExAutoFish.java | 13 ++++++-- .../network/serverpackets/ExFishingEnd.java | 8 ++--- 6 files changed, 46 insertions(+), 24 deletions(-) diff --git a/trunk/dist/game/data/scripts/handlers/effecthandlers/Fishing.java b/trunk/dist/game/data/scripts/handlers/effecthandlers/Fishing.java index 13c8a256b2..ec8e9ea0bb 100644 --- a/trunk/dist/game/data/scripts/handlers/effecthandlers/Fishing.java +++ b/trunk/dist/game/data/scripts/handlers/effecthandlers/Fishing.java @@ -93,7 +93,7 @@ public final class Fishing extends AbstractEffect } else { - player.endFishing(false); + player.endFishing(false, false); } player.sendPacket(SystemMessageId.YOUR_ATTEMPT_AT_FISHING_HAS_BEEN_CANCELLED); @@ -134,7 +134,7 @@ public final class Fishing extends AbstractEffect return; } - if (!Config.SERVER_CLASSIC_SUPPORT && (player.getLevel() < 85)) + if (player.getLevel() < 85) { player.sendMessage("You must be level 85 or higher to fish."); return; diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java index 144b92857e..0fffb52e2d 100644 --- a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java +++ b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java @@ -217,6 +217,7 @@ import com.l2jserver.gameserver.model.fishing.L2Fish; import com.l2jserver.gameserver.model.fishing.L2Fishing; import com.l2jserver.gameserver.model.holders.ItemHolder; import com.l2jserver.gameserver.model.holders.PlayerEventHolder; +import com.l2jserver.gameserver.model.holders.SkillHolder; import com.l2jserver.gameserver.model.holders.SkillUseHolder; import com.l2jserver.gameserver.model.interfaces.IEventListener; import com.l2jserver.gameserver.model.interfaces.ILocational; @@ -302,7 +303,6 @@ import com.l2jserver.gameserver.network.serverpackets.ObservationMode; import com.l2jserver.gameserver.network.serverpackets.ObservationReturn; import com.l2jserver.gameserver.network.serverpackets.PartySmallWindowUpdate; import com.l2jserver.gameserver.network.serverpackets.PetInventoryUpdate; -import com.l2jserver.gameserver.network.serverpackets.PlaySound; import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListDelete; import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListUpdate; import com.l2jserver.gameserver.network.serverpackets.PrivateStoreListBuy; @@ -752,6 +752,7 @@ public final class L2PcInstance extends L2Playable private int _fishx = 0; private int _fishy = 0; private int _fishz = 0; + private final static SkillHolder FISHING_SKILL = new SkillHolder(1312, 1); private volatile Set _transformAllowedSkills; private ScheduledFuture _taskRentPet; @@ -11899,20 +11900,20 @@ public final class L2PcInstance extends L2Playable if ((fish == null) || fish.isEmpty()) { sendMessage("Error - Fish are not defined"); - endFishing(false); + endFishing(false, false); return; } // Use a copy constructor else the fish data may be over-written below _fish = fish.get(Rnd.get(fish.size())).clone(); fish.clear(); - sendPacket(SystemMessageId.YOU_CAST_YOUR_LINE_AND_START_TO_FISH); + // sendPacket(SystemMessageId.YOU_CAST_YOUR_LINE_AND_START_TO_FISH); if (!GameTimeController.getInstance().isNight() && _lure.isNightLure()) { _fish.setFishGroup(-1); } // sendMessage("Hook x,y: " + _x + "," + _y + " - Water Z, Player Z:" + _z + ", " + getZ()); //debug line, uncoment to show coordinates used in fishing. broadcastPacket(new ExFishingStart(this, _fish.getFishGroup(), _x, _y, _z, _lure.isNightLure())); - sendPacket(new PlaySound(1, "SF_P_01", 0, 0, 0, 0, 0)); + // sendPacket(new PlaySound(1, "SF_P_01", 0, 0, 0, 0, 0)); startLookingForFishTask(); } @@ -11951,7 +11952,7 @@ public final class L2PcInstance extends L2Playable checkDelay = _fish.getGutsCheckTime() * 66; } } - _taskforfish = ThreadPoolManager.getInstance().scheduleEffectAtFixedRate(new LookingForFishTask(this, _fish.getStartCombatTime(), _fish.getFishGuts(), _fish.getFishGroup(), isNoob, isUpperGrade), 10000, checkDelay); + _taskforfish = ThreadPoolManager.getInstance().scheduleEffectAtFixedRate(new LookingForFishTask(this, _fish.getStartCombatTime(), _fish.getFishGuts(), _fish.getFishGroup(), isNoob, isUpperGrade), Rnd.get(10000, 40000), checkDelay); } } @@ -12242,7 +12243,7 @@ public final class L2PcInstance extends L2Playable _fishCombat = new L2Fishing(this, _fish, isNoob, isUpperGrade, _lure.getId()); } - public void endFishing(boolean win) + public void endFishing(boolean win, boolean continueFishing) { _fishing = false; _fishx = 0; @@ -12256,11 +12257,21 @@ public final class L2PcInstance extends L2Playable _fishCombat = null; _lure = null; // Ends fishing - broadcastPacket(new ExFishingEnd(win, this)); - addExpAndSp(_fish.getExp(), _fish.getSp()); // Reward Player with Exp and Sp - sendPacket(SystemMessageId.YOU_REEL_YOUR_LINE_IN_AND_STOP_FISHING); - setIsImmobilized(false); + if (win && continueFishing) + { + addExpAndSp(_fish.getExp(), _fish.getSp()); // Reward Player with Exp and Sp + } + broadcastPacket(new ExFishingEnd(continueFishing ? (win ? 1 : 0) : 2, this)); stopLookingForFishTask(); + if (!continueFishing) + { + sendPacket(SystemMessageId.YOU_REEL_YOUR_LINE_IN_AND_STOP_FISHING); + setIsImmobilized(false); + } + else + { + useMagic(FISHING_SKILL.getSkill(), false, true); + } } public L2Fishing getFishCombat() diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/tasks/player/LookingForFishTask.java b/trunk/java/com/l2jserver/gameserver/model/actor/tasks/player/LookingForFishTask.java index 83e7b78717..e46837299d 100644 --- a/trunk/java/com/l2jserver/gameserver/model/actor/tasks/player/LookingForFishTask.java +++ b/trunk/java/com/l2jserver/gameserver/model/actor/tasks/player/LookingForFishTask.java @@ -50,7 +50,7 @@ public class LookingForFishTask implements Runnable { if (System.currentTimeMillis() >= _endTaskTime) { - _player.endFishing(false); + _player.endFishing(false, true); return; } if (_fishGroup == -1) diff --git a/trunk/java/com/l2jserver/gameserver/model/fishing/L2Fishing.java b/trunk/java/com/l2jserver/gameserver/model/fishing/L2Fishing.java index bdb6493687..fd541700ab 100644 --- a/trunk/java/com/l2jserver/gameserver/model/fishing/L2Fishing.java +++ b/trunk/java/com/l2jserver/gameserver/model/fishing/L2Fishing.java @@ -20,6 +20,7 @@ package com.l2jserver.gameserver.model.fishing; import java.util.concurrent.Future; +import com.l2jserver.gameserver.ThreadPoolManager; import com.l2jserver.gameserver.data.xml.impl.FishingMonstersData; import com.l2jserver.gameserver.instancemanager.FishingChampionshipManager; import com.l2jserver.gameserver.model.actor.L2Npc; @@ -105,10 +106,10 @@ public class L2Fishing implements Runnable // Succeeded in getting a bite // _fisher.sendPacket(SystemMessageId.YOU_VE_GOT_A_BITE); - // if (_fishAiTask == null) - // { - // _fishAiTask = ThreadPoolManager.getInstance().scheduleEffectAtFixedRate(this, 1000, 1000); - // } + if ((_fishAiTask == null) && _fisher.isFishing()) + { + _fishAiTask = ThreadPoolManager.getInstance().scheduleEffectAtFixedRate(this, 1000, 1000); + } // TODO: New fishing system? doDie(true); @@ -169,7 +170,8 @@ public class L2Fishing implements Runnable } } } - _fisher.endFishing(win); + + _fisher.endFishing(win, true); _fisher = null; } diff --git a/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestExAutoFish.java b/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestExAutoFish.java index d5be684046..a542499142 100644 --- a/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestExAutoFish.java +++ b/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestExAutoFish.java @@ -20,6 +20,7 @@ package com.l2jserver.gameserver.network.clientpackets; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.holders.SkillHolder; +import com.l2jserver.gameserver.network.SystemMessageId; /** * @author Mobius @@ -41,11 +42,19 @@ public class RequestExAutoFish extends L2GameClientPacket protected void runImpl() { final L2PcInstance activeChar = getActiveChar(); - if ((activeChar == null) || activeChar.isFishing()) + if (activeChar == null) { return; } - activeChar.useMagic(FISHING_SKILL.getSkill(), false, true); + if (activeChar.isFishing()) + { + activeChar.endFishing(true, false);// TODO: Correct Animation + } + else + { + activeChar.sendPacket(SystemMessageId.YOU_CAST_YOUR_LINE_AND_START_TO_FISH); + activeChar.useMagic(FISHING_SKILL.getSkill(), false, true); + } } @Override diff --git a/trunk/java/com/l2jserver/gameserver/network/serverpackets/ExFishingEnd.java b/trunk/java/com/l2jserver/gameserver/network/serverpackets/ExFishingEnd.java index e0ec10a4a7..c0bca93b8e 100644 --- a/trunk/java/com/l2jserver/gameserver/network/serverpackets/ExFishingEnd.java +++ b/trunk/java/com/l2jserver/gameserver/network/serverpackets/ExFishingEnd.java @@ -22,14 +22,14 @@ import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; /** - * @author -Wooden- + * @author Mobius */ public class ExFishingEnd extends L2GameServerPacket { - private final boolean _win; + private final int _win; private final L2Character _activeChar; - public ExFishingEnd(boolean win, L2PcInstance character) + public ExFishingEnd(int win, L2PcInstance character) { _win = win; _activeChar = character; @@ -41,6 +41,6 @@ public class ExFishingEnd extends L2GameServerPacket writeC(0xFE); writeH(0x1F); writeD(_activeChar.getObjectId()); - writeC(_win ? 1 : 0); + writeC(_win); // lose 0 - win 1 - quit 2 } } \ No newline at end of file