Fixed nonexistent oracle teleport back to town.

This commit is contained in:
MobiusDevelopment 2020-07-02 03:02:55 +00:00
parent 8ab8cd7046
commit 169487938e
8 changed files with 52 additions and 20 deletions

View File

@ -16,6 +16,7 @@
*/ */
package teleports.OracleTeleport; package teleports.OracleTeleport;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -275,6 +276,14 @@ public class OracleTeleport extends Quest
htmltext = "rift_back.htm"; htmltext = "rift_back.htm";
st.exitQuest(true); 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")) else if (event.equalsIgnoreCase("Festival"))
{ {

View File

@ -0,0 +1,4 @@
<html><body>Rift Post:<br>
I cannot find your original location.<br1>
I will return you to a random return point.
</body></html>

View File

@ -1466,18 +1466,12 @@ public class PlayerInstance extends Playable
{ {
event = ""; event = "";
} }
if (event.length() == 0)
if (!_quests.containsKey(quest))
{ {
return retval; return retval;
} }
QuestState qs = getQuestState(quest); QuestState qs = getQuestState(quest);
if ((qs == null) && (event.length() == 0))
{
return retval;
}
if (qs == null) if (qs == null)
{ {
Quest q = null; Quest q = null;
@ -1492,9 +1486,10 @@ public class PlayerInstance extends Playable
} }
qs = q.newQuestState(this); 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)) if ((object instanceof NpcInstance) && isInsideRadius(object, NpcInstance.INTERACTION_DISTANCE, false, false))
{ {
final NpcInstance npc = (NpcInstance) object; final NpcInstance npc = (NpcInstance) object;
@ -1509,7 +1504,6 @@ public class PlayerInstance extends Playable
{ {
showQuestWindow(quest, State.getStateName(qs.getState())); showQuestWindow(quest, State.getStateName(qs.getState()));
} }
retval = qs; retval = qs;
} }
} }

View File

@ -295,6 +295,15 @@ public class RequestBypassToServer extends GameClientPacket
} }
else 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()); player.processQuestEvent(p.substring(0, idx), p.substring(idx).trim());
} }
} }

View File

@ -16,6 +16,7 @@
*/ */
package teleports.OracleTeleport; package teleports.OracleTeleport;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -275,6 +276,14 @@ public class OracleTeleport extends Quest
htmltext = "rift_back.htm"; htmltext = "rift_back.htm";
st.exitQuest(true); 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")) else if (event.equalsIgnoreCase("Festival"))
{ {

View File

@ -0,0 +1,4 @@
<html><body>Rift Post:<br>
I cannot find your original location.<br1>
I will return you to a random return point.
</body></html>

View File

@ -1480,18 +1480,12 @@ public class PlayerInstance extends Playable
{ {
event = ""; event = "";
} }
if (event.length() == 0)
if (!_quests.containsKey(quest))
{ {
return retval; return retval;
} }
QuestState qs = getQuestState(quest); QuestState qs = getQuestState(quest);
if ((qs == null) && (event.length() == 0))
{
return retval;
}
if (qs == null) if (qs == null)
{ {
Quest q = null; Quest q = null;
@ -1506,9 +1500,10 @@ public class PlayerInstance extends Playable
} }
qs = q.newQuestState(this); 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)) if ((object instanceof NpcInstance) && isInsideRadius(object, NpcInstance.INTERACTION_DISTANCE, false, false))
{ {
final NpcInstance npc = (NpcInstance) object; final NpcInstance npc = (NpcInstance) object;
@ -1523,7 +1518,6 @@ public class PlayerInstance extends Playable
{ {
showQuestWindow(quest, State.getStateName(qs.getState())); showQuestWindow(quest, State.getStateName(qs.getState()));
} }
retval = qs; retval = qs;
} }
} }

View File

@ -295,6 +295,15 @@ public class RequestBypassToServer extends GameClientPacket
} }
else 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()); player.processQuestEvent(p.substring(0, idx), p.substring(idx).trim());
} }
} }