From 2727d79c03a2f7fc6d45b7bffccf50bafa5c3721 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 16 May 2015 18:51:36 +0000 Subject: [PATCH] New Fishing changes. --- .../actor/instance/L2FishermanInstance.java | 2 +- .../gameserver/model/fishing/L2Fishing.java | 14 ++-- .../gameserver/model/zone/ZoneId.java | 1 + .../model/zone/type/L2FishingZone.java | 76 ++++++++++++++++++- .../network/L2GamePacketHandler.java | 2 +- .../clientpackets/RequestExAutoFish.java | 56 ++++++++++++++ .../serverpackets/ExAutoFishAvailable.java | 42 ++++++++++ 7 files changed, 183 insertions(+), 10 deletions(-) create mode 100644 trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestExAutoFish.java create mode 100644 trunk/java/com/l2jserver/gameserver/network/serverpackets/ExAutoFishAvailable.java diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2FishermanInstance.java b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2FishermanInstance.java index 8e433405db..e7962a1f76 100644 --- a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2FishermanInstance.java +++ b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2FishermanInstance.java @@ -131,7 +131,7 @@ public final class L2FishermanInstance extends L2MerchantInstance 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); + html.setFile(player.getHtmlPrefix(), "html/fisherman/championship/" + htmlName); player.sendPacket(html); } } diff --git a/trunk/java/com/l2jserver/gameserver/model/fishing/L2Fishing.java b/trunk/java/com/l2jserver/gameserver/model/fishing/L2Fishing.java index d0fe990579..bdb6493687 100644 --- a/trunk/java/com/l2jserver/gameserver/model/fishing/L2Fishing.java +++ b/trunk/java/com/l2jserver/gameserver/model/fishing/L2Fishing.java @@ -20,7 +20,6 @@ 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; @@ -104,12 +103,15 @@ public class L2Fishing implements Runnable _fisher.broadcastPacket(new ExFishingStartCombat(_fisher, _time, _fishMaxHp, _mode, lureType, _deceptiveMode)); _fisher.sendPacket(new PlaySound(1, "SF_S_01", 0, 0, 0, 0, 0)); // Succeeded in getting a bite - _fisher.sendPacket(SystemMessageId.YOU_VE_GOT_A_BITE); + // _fisher.sendPacket(SystemMessageId.YOU_VE_GOT_A_BITE); - if (_fishAiTask == null) - { - _fishAiTask = ThreadPoolManager.getInstance().scheduleEffectAtFixedRate(this, 1000, 1000); - } + // if (_fishAiTask == null) + // { + // _fishAiTask = ThreadPoolManager.getInstance().scheduleEffectAtFixedRate(this, 1000, 1000); + // } + + // TODO: New fishing system? + doDie(true); } public void changeHp(int hp, int pen) diff --git a/trunk/java/com/l2jserver/gameserver/model/zone/ZoneId.java b/trunk/java/com/l2jserver/gameserver/model/zone/ZoneId.java index b382594958..462b0c10ac 100644 --- a/trunk/java/com/l2jserver/gameserver/model/zone/ZoneId.java +++ b/trunk/java/com/l2jserver/gameserver/model/zone/ZoneId.java @@ -32,6 +32,7 @@ public enum ZoneId LANDING, NO_LANDING, WATER, + FISHING, JAIL, MONSTER_TRACK, CASTLE, diff --git a/trunk/java/com/l2jserver/gameserver/model/zone/type/L2FishingZone.java b/trunk/java/com/l2jserver/gameserver/model/zone/type/L2FishingZone.java index d377c52aa7..4d6550fe8b 100644 --- a/trunk/java/com/l2jserver/gameserver/model/zone/type/L2FishingZone.java +++ b/trunk/java/com/l2jserver/gameserver/model/zone/type/L2FishingZone.java @@ -18,15 +18,29 @@ */ package com.l2jserver.gameserver.model.zone.type; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Future; + +import com.l2jserver.Config; +import com.l2jserver.gameserver.ThreadPoolManager; import com.l2jserver.gameserver.model.actor.L2Character; +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.zone.L2ZoneType; +import com.l2jserver.gameserver.model.zone.ZoneId; +import com.l2jserver.gameserver.network.serverpackets.ExAutoFishAvailable; /** * A fishing zone - * @author durgus + * @author durgus, Darky999 */ public class L2FishingZone extends L2ZoneType { + private final Map> _task = new HashMap<>(); + int _fishx = 0; + int _fishy = 0; + int _fishz = 0; + public L2FishingZone(int id) { super(id); @@ -35,11 +49,50 @@ public class L2FishingZone extends L2ZoneType @Override protected void onEnter(L2Character character) { + if (character.isPlayer()) + { + character.setInsideZone(ZoneId.FISHING, true); + } + + if (character.isPlayer() && !Config.SERVER_CLASSIC_SUPPORT) + { + final L2PcInstance plr = (L2PcInstance) character; + stopTask(plr); + _task.put(plr.getObjectId(), ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new FishReq(plr), 100, 7000)); + } } @Override protected void onExit(L2Character character) { + if (character.isPlayer()) + { + character.setInsideZone(ZoneId.FISHING, false); + } + stopTask(character); + _task.remove(character.getObjectId()); + } + + @Override + public void onDieInside(L2Character character) + { + onExit(character); + } + + @Override + public void onReviveInside(L2Character character) + { + onEnter(character); + } + + protected void stopTask(L2Character character) + { + _task.remove(character.getObjectId()); + Future t = _task.get(character.getObjectId()); + if (t != null) + { + t.cancel(false); + } } /* @@ -49,4 +102,23 @@ public class L2FishingZone extends L2ZoneType { return getZone().getHighZ(); } -} + + class FishReq implements Runnable + { + private final L2PcInstance player; + + FishReq(L2PcInstance pl) + { + player = pl; + } + + @Override + public void run() + { + if (!player.isFishing()) + { + player.sendPacket(new ExAutoFishAvailable(player)); + } + } + } +} \ No newline at end of file diff --git a/trunk/java/com/l2jserver/gameserver/network/L2GamePacketHandler.java b/trunk/java/com/l2jserver/gameserver/network/L2GamePacketHandler.java index 4a38f58f00..edcb052c00 100644 --- a/trunk/java/com/l2jserver/gameserver/network/L2GamePacketHandler.java +++ b/trunk/java/com/l2jserver/gameserver/network/L2GamePacketHandler.java @@ -1663,7 +1663,7 @@ public final class L2GamePacketHandler implements IPacketHandler, // msg = new ExSendClientINI(); break; case 0x104: - // msg = new RequestExAutoFish(); + msg = new RequestExAutoFish(); break; default: printDebugDoubleOpcode(opcode, id2, buf, state, client); diff --git a/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestExAutoFish.java b/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestExAutoFish.java new file mode 100644 index 0000000000..d5be684046 --- /dev/null +++ b/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestExAutoFish.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2004-2015 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 . + */ +package com.l2jserver.gameserver.network.clientpackets; + +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.holders.SkillHolder; + +/** + * @author Mobius + */ +public class RequestExAutoFish extends L2GameClientPacket +{ + private final static SkillHolder FISHING_SKILL = new SkillHolder(1312, 1); + + public RequestExAutoFish() + { + } + + @Override + protected void readImpl() + { + } + + @Override + protected void runImpl() + { + final L2PcInstance activeChar = getActiveChar(); + if ((activeChar == null) || activeChar.isFishing()) + { + return; + } + activeChar.useMagic(FISHING_SKILL.getSkill(), false, true); + } + + @Override + public String getType() + { + return getClass().getSimpleName(); + } +} diff --git a/trunk/java/com/l2jserver/gameserver/network/serverpackets/ExAutoFishAvailable.java b/trunk/java/com/l2jserver/gameserver/network/serverpackets/ExAutoFishAvailable.java new file mode 100644 index 0000000000..3664771d6f --- /dev/null +++ b/trunk/java/com/l2jserver/gameserver/network/serverpackets/ExAutoFishAvailable.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2004-2015 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 . + */ +package com.l2jserver.gameserver.network.serverpackets; + +import com.l2jserver.gameserver.model.actor.L2Character; + +/** + * @author Mobius + */ +public class ExAutoFishAvailable extends L2GameServerPacket +{ + private final L2Character _activeChar; + + public ExAutoFishAvailable(L2Character character) + { + _activeChar = character; + } + + @Override + protected void writeImpl() + { + writeC(0xFE); + writeH(0x179); + writeD(_activeChar.getObjectId()); + } +} \ No newline at end of file