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
{
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;

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.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<Integer> _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()

View File

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

View File

@ -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;
}

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.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

View File

@ -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
}
}