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());
}
}