From 169487938e929a379c4ed7b6d84a83a864c02af6 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Thu, 2 Jul 2020 03:02:55 +0000 Subject: [PATCH] Fixed nonexistent oracle teleport back to town. --- .../teleports/OracleTeleport/OracleTeleport.java | 9 +++++++++ .../teleports/OracleTeleport/rift_back_unknown.htm | 4 ++++ .../model/actor/instance/PlayerInstance.java | 14 ++++---------- .../clientpackets/RequestBypassToServer.java | 9 +++++++++ .../teleports/OracleTeleport/OracleTeleport.java | 9 +++++++++ .../teleports/OracleTeleport/rift_back_unknown.htm | 4 ++++ .../model/actor/instance/PlayerInstance.java | 14 ++++---------- .../clientpackets/RequestBypassToServer.java | 9 +++++++++ 8 files changed, 52 insertions(+), 20 deletions(-) create mode 100644 L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/teleports/OracleTeleport/rift_back_unknown.htm create mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/scripts/teleports/OracleTeleport/rift_back_unknown.htm diff --git a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/teleports/OracleTeleport/OracleTeleport.java b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/teleports/OracleTeleport/OracleTeleport.java index 5f29e23a01..2fdbe57b7e 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/teleports/OracleTeleport/OracleTeleport.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/teleports/OracleTeleport/OracleTeleport.java @@ -16,6 +16,7 @@ */ package teleports.OracleTeleport; +import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -275,6 +276,14 @@ public class OracleTeleport extends Quest htmltext = "rift_back.htm"; st.exitQuest(true); } + else + { + final Location loc = RETURN_LOCS[Rnd.get(RETURN_LOCS.length)]; + player.teleToLocation(loc.getX(), loc.getY(), loc.getZ()); + htmltext = "rift_back_unknown.htm"; + player.setIn7sDungeon(false); + st.exitQuest(true); + } } else if (event.equalsIgnoreCase("Festival")) { diff --git a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/teleports/OracleTeleport/rift_back_unknown.htm b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/teleports/OracleTeleport/rift_back_unknown.htm new file mode 100644 index 0000000000..25088ab928 --- /dev/null +++ b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/teleports/OracleTeleport/rift_back_unknown.htm @@ -0,0 +1,4 @@ +Rift Post:
+I cannot find your original location. +I will return you to a random return point. + \ No newline at end of file diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 81c885a3c0..6b38d882ba 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1466,18 +1466,12 @@ public class PlayerInstance extends Playable { event = ""; } - - if (!_quests.containsKey(quest)) + if (event.length() == 0) { return retval; } QuestState qs = getQuestState(quest); - if ((qs == null) && (event.length() == 0)) - { - return retval; - } - if (qs == null) { Quest q = null; @@ -1492,9 +1486,10 @@ public class PlayerInstance extends Playable } qs = q.newQuestState(this); } - if ((qs != null) && (getLastQuestNpcObject() > 0)) + + if ((qs != null) && (_questNpcObject > 0)) { - final WorldObject object = World.getInstance().findObject(getLastQuestNpcObject()); + final WorldObject object = World.getInstance().findObject(_questNpcObject); if ((object instanceof NpcInstance) && isInsideRadius(object, NpcInstance.INTERACTION_DISTANCE, false, false)) { final NpcInstance npc = (NpcInstance) object; @@ -1509,7 +1504,6 @@ public class PlayerInstance extends Playable { showQuestWindow(quest, State.getStateName(qs.getState())); } - retval = qs; } } diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java index b32aabac34..4e0480b74c 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java @@ -295,6 +295,15 @@ public class RequestBypassToServer extends GameClientPacket } else { + final WorldObject object = player.getTarget(); + if ((object instanceof NpcInstance) && (player.getLastQuestNpcObject() != object.getObjectId())) + { + final WorldObject lastQuestNpc = World.getInstance().findObject(player.getLastQuestNpcObject()); + if ((lastQuestNpc == null) || !player.isInsideRadius(lastQuestNpc, NpcInstance.INTERACTION_DISTANCE, false, false)) + { + player.setLastQuestNpcObject(object.getObjectId()); + } + } player.processQuestEvent(p.substring(0, idx), p.substring(idx).trim()); } } diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/scripts/teleports/OracleTeleport/OracleTeleport.java b/L2J_Mobius_C6_Interlude/dist/game/data/scripts/teleports/OracleTeleport/OracleTeleport.java index 5f29e23a01..2fdbe57b7e 100644 --- a/L2J_Mobius_C6_Interlude/dist/game/data/scripts/teleports/OracleTeleport/OracleTeleport.java +++ b/L2J_Mobius_C6_Interlude/dist/game/data/scripts/teleports/OracleTeleport/OracleTeleport.java @@ -16,6 +16,7 @@ */ package teleports.OracleTeleport; +import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -275,6 +276,14 @@ public class OracleTeleport extends Quest htmltext = "rift_back.htm"; st.exitQuest(true); } + else + { + final Location loc = RETURN_LOCS[Rnd.get(RETURN_LOCS.length)]; + player.teleToLocation(loc.getX(), loc.getY(), loc.getZ()); + htmltext = "rift_back_unknown.htm"; + player.setIn7sDungeon(false); + st.exitQuest(true); + } } else if (event.equalsIgnoreCase("Festival")) { diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/scripts/teleports/OracleTeleport/rift_back_unknown.htm b/L2J_Mobius_C6_Interlude/dist/game/data/scripts/teleports/OracleTeleport/rift_back_unknown.htm new file mode 100644 index 0000000000..25088ab928 --- /dev/null +++ b/L2J_Mobius_C6_Interlude/dist/game/data/scripts/teleports/OracleTeleport/rift_back_unknown.htm @@ -0,0 +1,4 @@ +Rift Post:
+I cannot find your original location. +I will return you to a random return point. + \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 8426e57e0c..2efa670fd3 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -1480,18 +1480,12 @@ public class PlayerInstance extends Playable { event = ""; } - - if (!_quests.containsKey(quest)) + if (event.length() == 0) { return retval; } QuestState qs = getQuestState(quest); - if ((qs == null) && (event.length() == 0)) - { - return retval; - } - if (qs == null) { Quest q = null; @@ -1506,9 +1500,10 @@ public class PlayerInstance extends Playable } qs = q.newQuestState(this); } - if ((qs != null) && (getLastQuestNpcObject() > 0)) + + if ((qs != null) && (_questNpcObject > 0)) { - final WorldObject object = World.getInstance().findObject(getLastQuestNpcObject()); + final WorldObject object = World.getInstance().findObject(_questNpcObject); if ((object instanceof NpcInstance) && isInsideRadius(object, NpcInstance.INTERACTION_DISTANCE, false, false)) { final NpcInstance npc = (NpcInstance) object; @@ -1523,7 +1518,6 @@ public class PlayerInstance extends Playable { showQuestWindow(quest, State.getStateName(qs.getState())); } - retval = qs; } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java index b32aabac34..4e0480b74c 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestBypassToServer.java @@ -295,6 +295,15 @@ public class RequestBypassToServer extends GameClientPacket } else { + final WorldObject object = player.getTarget(); + if ((object instanceof NpcInstance) && (player.getLastQuestNpcObject() != object.getObjectId())) + { + final WorldObject lastQuestNpc = World.getInstance().findObject(player.getLastQuestNpcObject()); + if ((lastQuestNpc == null) || !player.isInsideRadius(lastQuestNpc, NpcInstance.INTERACTION_DISTANCE, false, false)) + { + player.setLastQuestNpcObject(object.getObjectId()); + } + } player.processQuestEvent(p.substring(0, idx), p.substring(idx).trim()); } }