Automating Fishing.

This commit is contained in:
MobiusDev 2015-05-19 17:43:41 +00:00
parent 7d5e51e914
commit 687969b37f
6 changed files with 46 additions and 24 deletions

View File

@ -93,7 +93,7 @@ public final class Fishing extends AbstractEffect
} }
else else
{ {
player.endFishing(false); player.endFishing(false, false);
} }
player.sendPacket(SystemMessageId.YOUR_ATTEMPT_AT_FISHING_HAS_BEEN_CANCELLED); player.sendPacket(SystemMessageId.YOUR_ATTEMPT_AT_FISHING_HAS_BEEN_CANCELLED);
@ -134,7 +134,7 @@ public final class Fishing extends AbstractEffect
return; return;
} }
if (!Config.SERVER_CLASSIC_SUPPORT && (player.getLevel() < 85)) if (player.getLevel() < 85)
{ {
player.sendMessage("You must be level 85 or higher to fish."); player.sendMessage("You must be level 85 or higher to fish.");
return; return;

View File

@ -217,6 +217,7 @@ import com.l2jserver.gameserver.model.fishing.L2Fish;
import com.l2jserver.gameserver.model.fishing.L2Fishing; import com.l2jserver.gameserver.model.fishing.L2Fishing;
import com.l2jserver.gameserver.model.holders.ItemHolder; import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.holders.PlayerEventHolder; 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.holders.SkillUseHolder;
import com.l2jserver.gameserver.model.interfaces.IEventListener; import com.l2jserver.gameserver.model.interfaces.IEventListener;
import com.l2jserver.gameserver.model.interfaces.ILocational; 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.ObservationReturn;
import com.l2jserver.gameserver.network.serverpackets.PartySmallWindowUpdate; import com.l2jserver.gameserver.network.serverpackets.PartySmallWindowUpdate;
import com.l2jserver.gameserver.network.serverpackets.PetInventoryUpdate; 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.PledgeShowMemberListDelete;
import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListUpdate; import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
import com.l2jserver.gameserver.network.serverpackets.PrivateStoreListBuy; import com.l2jserver.gameserver.network.serverpackets.PrivateStoreListBuy;
@ -752,6 +752,7 @@ public final class L2PcInstance extends L2Playable
private int _fishx = 0; private int _fishx = 0;
private int _fishy = 0; private int _fishy = 0;
private int _fishz = 0; private int _fishz = 0;
private final static SkillHolder FISHING_SKILL = new SkillHolder(1312, 1);
private volatile Set<Integer> _transformAllowedSkills; private volatile Set<Integer> _transformAllowedSkills;
private ScheduledFuture<?> _taskRentPet; private ScheduledFuture<?> _taskRentPet;
@ -11899,20 +11900,20 @@ public final class L2PcInstance extends L2Playable
if ((fish == null) || fish.isEmpty()) if ((fish == null) || fish.isEmpty())
{ {
sendMessage("Error - Fish are not defined"); sendMessage("Error - Fish are not defined");
endFishing(false); endFishing(false, false);
return; return;
} }
// Use a copy constructor else the fish data may be over-written below // Use a copy constructor else the fish data may be over-written below
_fish = fish.get(Rnd.get(fish.size())).clone(); _fish = fish.get(Rnd.get(fish.size())).clone();
fish.clear(); 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()) if (!GameTimeController.getInstance().isNight() && _lure.isNightLure())
{ {
_fish.setFishGroup(-1); _fish.setFishGroup(-1);
} }
// sendMessage("Hook x,y: " + _x + "," + _y + " - Water Z, Player Z:" + _z + ", " + getZ()); //debug line, uncoment to show coordinates used in fishing. // 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())); 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(); startLookingForFishTask();
} }
@ -11951,7 +11952,7 @@ public final class L2PcInstance extends L2Playable
checkDelay = _fish.getGutsCheckTime() * 66; 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()); _fishCombat = new L2Fishing(this, _fish, isNoob, isUpperGrade, _lure.getId());
} }
public void endFishing(boolean win) public void endFishing(boolean win, boolean continueFishing)
{ {
_fishing = false; _fishing = false;
_fishx = 0; _fishx = 0;
@ -12256,11 +12257,21 @@ public final class L2PcInstance extends L2Playable
_fishCombat = null; _fishCombat = null;
_lure = null; _lure = null;
// Ends fishing // Ends fishing
broadcastPacket(new ExFishingEnd(win, this)); if (win && continueFishing)
addExpAndSp(_fish.getExp(), _fish.getSp()); // Reward Player with Exp and Sp {
sendPacket(SystemMessageId.YOU_REEL_YOUR_LINE_IN_AND_STOP_FISHING); addExpAndSp(_fish.getExp(), _fish.getSp()); // Reward Player with Exp and Sp
setIsImmobilized(false); }
broadcastPacket(new ExFishingEnd(continueFishing ? (win ? 1 : 0) : 2, this));
stopLookingForFishTask(); 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() public L2Fishing getFishCombat()

View File

@ -50,7 +50,7 @@ public class LookingForFishTask implements Runnable
{ {
if (System.currentTimeMillis() >= _endTaskTime) if (System.currentTimeMillis() >= _endTaskTime)
{ {
_player.endFishing(false); _player.endFishing(false, true);
return; return;
} }
if (_fishGroup == -1) if (_fishGroup == -1)

View File

@ -20,6 +20,7 @@ package com.l2jserver.gameserver.model.fishing;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.data.xml.impl.FishingMonstersData; import com.l2jserver.gameserver.data.xml.impl.FishingMonstersData;
import com.l2jserver.gameserver.instancemanager.FishingChampionshipManager; import com.l2jserver.gameserver.instancemanager.FishingChampionshipManager;
import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Npc;
@ -105,10 +106,10 @@ public class L2Fishing implements Runnable
// Succeeded in getting a bite // Succeeded in getting a bite
// _fisher.sendPacket(SystemMessageId.YOU_VE_GOT_A_BITE); // _fisher.sendPacket(SystemMessageId.YOU_VE_GOT_A_BITE);
// if (_fishAiTask == null) if ((_fishAiTask == null) && _fisher.isFishing())
// { {
// _fishAiTask = ThreadPoolManager.getInstance().scheduleEffectAtFixedRate(this, 1000, 1000); _fishAiTask = ThreadPoolManager.getInstance().scheduleEffectAtFixedRate(this, 1000, 1000);
// } }
// TODO: New fishing system? // TODO: New fishing system?
doDie(true); doDie(true);
@ -169,7 +170,8 @@ public class L2Fishing implements Runnable
} }
} }
} }
_fisher.endFishing(win);
_fisher.endFishing(win, true);
_fisher = null; _fisher = null;
} }

View File

@ -20,6 +20,7 @@ package com.l2jserver.gameserver.network.clientpackets;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.SkillHolder; import com.l2jserver.gameserver.model.holders.SkillHolder;
import com.l2jserver.gameserver.network.SystemMessageId;
/** /**
* @author Mobius * @author Mobius
@ -41,11 +42,19 @@ public class RequestExAutoFish extends L2GameClientPacket
protected void runImpl() protected void runImpl()
{ {
final L2PcInstance activeChar = getActiveChar(); final L2PcInstance activeChar = getActiveChar();
if ((activeChar == null) || activeChar.isFishing()) if (activeChar == null)
{ {
return; 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 @Override

View File

@ -22,14 +22,14 @@ import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
/** /**
* @author -Wooden- * @author Mobius
*/ */
public class ExFishingEnd extends L2GameServerPacket public class ExFishingEnd extends L2GameServerPacket
{ {
private final boolean _win; private final int _win;
private final L2Character _activeChar; private final L2Character _activeChar;
public ExFishingEnd(boolean win, L2PcInstance character) public ExFishingEnd(int win, L2PcInstance character)
{ {
_win = win; _win = win;
_activeChar = character; _activeChar = character;
@ -41,6 +41,6 @@ public class ExFishingEnd extends L2GameServerPacket
writeC(0xFE); writeC(0xFE);
writeH(0x1F); writeH(0x1F);
writeD(_activeChar.getObjectId()); writeD(_activeChar.getObjectId());
writeC(_win ? 1 : 0); writeC(_win); // lose 0 - win 1 - quit 2
} }
} }