From b244ccce8125a4571dacdee43584994f46b6f594 Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Tue, 12 Jul 2022 21:09:53 +0000
Subject: [PATCH] Fixed boat visibility and dock heading issues.
---
.../dist/game/data/Boats.xml | 8 +++---
.../dist/game/data/xsd/Boats.xsd | 3 ++-
.../gameserver/data/xml/BoatData.java | 4 ++-
.../gameserver/model/actor/instance/Boat.java | 25 +++++++++++++++++--
.../model/actor/knownlist/BoatKnownList.java | 16 ++++++++++++
.../dist/game/data/Boats.xml | 10 ++++----
.../dist/game/data/xsd/Boats.xsd | 3 ++-
.../gameserver/data/xml/BoatData.java | 4 ++-
.../gameserver/model/actor/instance/Boat.java | 25 +++++++++++++++++--
.../model/actor/knownlist/BoatKnownList.java | 16 ++++++++++++
10 files changed, 97 insertions(+), 17 deletions(-)
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/Boats.xml b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/Boats.xml
index 0acca8df26..d81941b260 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/Boats.xml
+++ b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/Boats.xml
@@ -130,8 +130,8 @@
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/xsd/Boats.xsd b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/xsd/Boats.xsd
index 49542a56a1..99cb42a166 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/xsd/Boats.xsd
+++ b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/xsd/Boats.xsd
@@ -32,7 +32,8 @@
-
+
+
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/data/xml/BoatData.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/data/xml/BoatData.java
index 320c97e133..0a22646bd5 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/data/xml/BoatData.java
+++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/data/xml/BoatData.java
@@ -123,8 +123,10 @@ public class BoatData implements IXmlReader
final CreatureTemplate template = new CreatureTemplate(npcDat);
final Boat boat = new Boat(IdManager.getInstance().getNextId(), template);
- boat.getLocation().setHeading(set.getInt("heading"));
boat.setXYZ(set.getInt("spawnX"), set.getInt("spawnY"), set.getInt("spawnZ"));
+ boat.dockHeadingA = set.getInt("dockHeadingA", -1);
+ boat.dockHeadingB = set.getInt("dockHeadingB", -1);
+ boat.setHeading(boat.dockHeadingA);
boat.setPathA(set.getInt("pathIdA"), set.getInt("ticketA"), set.getInt("xTeleNoTicketA"), set.getInt("yTeleNoTicketA"), set.getInt("zTeleNoTicketA"), set.getString("announcerA"), set.getString("message10A"), set.getString("message5A"), set.getString("message1A"), set.getString("message0A"), set.getString("messageBeginA"), paths.get(set.getInt("pathIdA")));
boat.setPathB(set.getInt("pathIdB"), set.getInt("ticketB"), set.getInt("xTeleNoTicketB"), set.getInt("yTeleNoTicketB"), set.getInt("zTeleNoTicketB"), set.getString("announcerB"), set.getString("message10B"), set.getString("message5B"), set.getString("message1B"), set.getString("message0B"), set.getString("messageBeginB"), paths.get(set.getInt("pathIdB")));
boat.spawn();
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/Boat.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/Boat.java
index 97e14f3c4c..fb79200977 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/Boat.java
+++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/Boat.java
@@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.enums.ChatType;
+import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.knownlist.BoatKnownList;
@@ -45,10 +46,12 @@ import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager;
public class Boat extends Creature
{
public float boatSpeed;
+ public int dockHeadingA;
+ public int dockHeadingB;
public VehicleDeparture vd = null;
private int lastx = -1;
private int lasty = -1;
- protected int cycle = 0;
+ protected int cycle = 1;
protected int runstate = 0;
protected BoatPathHolder pathA;
protected BoatPathHolder pathB;
@@ -352,10 +355,20 @@ public class Boat extends Creature
if (cycle == 1)
{
sm = new CreatureSay(0, ChatType.SHOUT, pathA.npc, pathA.sysmessb);
+ // Proper dock heading.
+ if (dockHeadingA != -1)
+ {
+ setHeading(dockHeadingA);
+ }
}
else
{
sm = new CreatureSay(0, ChatType.SHOUT, pathB.npc, pathB.sysmessb);
+ // Proper dock heading.
+ if (dockHeadingB != -1)
+ {
+ setHeading(dockHeadingB);
+ }
}
ps = new PlaySound(0, "itemsound.ship_arrival_departure", this);
for (Player player : knownPlayers)
@@ -372,8 +385,16 @@ public class Boat extends Creature
public void spawn()
{
- cycle = 1;
+ // Add to World.
+ setSpawned(true);
+ setWorldRegion(World.getInstance().getRegion(getLocation()));
+ World.getInstance().storeObject(this);
+ getWorldRegion().addVisibleObject(this);
+
+ // Start AI.
beginCycle();
+
+ // Broadcast vehicle info to nearby players.
final Collection knownPlayers = getKnownList().getKnownPlayers().values();
if ((knownPlayers == null) || knownPlayers.isEmpty())
{
diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/knownlist/BoatKnownList.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/knownlist/BoatKnownList.java
index 7dc8539bff..fef4e4b1b1 100644
--- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/knownlist/BoatKnownList.java
+++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/knownlist/BoatKnownList.java
@@ -19,6 +19,8 @@ package org.l2jmobius.gameserver.model.actor.knownlist;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.actor.instance.Boat;
+import org.l2jmobius.gameserver.network.serverpackets.VehicleInfo;
/**
* @author Maktakien
@@ -30,6 +32,20 @@ public class BoatKnownList extends CreatureKnownList
super(creature);
}
+ @Override
+ public boolean addKnownObject(WorldObject object)
+ {
+ if (super.addKnownObject(object))
+ {
+ if (object.isPlayer())
+ {
+ object.getActingPlayer().sendPacket(new VehicleInfo((Boat) getActiveObject()));
+ }
+ return true;
+ }
+ return false;
+ }
+
@Override
public int getDistanceToForgetObject(WorldObject object)
{
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml b/L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml
index 8b7b9d478e..a48fd252b1 100644
--- a/L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml
+++ b/L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml
@@ -151,9 +151,9 @@
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Boats.xsd b/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Boats.xsd
index 49542a56a1..99cb42a166 100644
--- a/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Boats.xsd
+++ b/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Boats.xsd
@@ -32,7 +32,8 @@
-
+
+
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/data/xml/BoatData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/data/xml/BoatData.java
index 320c97e133..0a22646bd5 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/data/xml/BoatData.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/data/xml/BoatData.java
@@ -123,8 +123,10 @@ public class BoatData implements IXmlReader
final CreatureTemplate template = new CreatureTemplate(npcDat);
final Boat boat = new Boat(IdManager.getInstance().getNextId(), template);
- boat.getLocation().setHeading(set.getInt("heading"));
boat.setXYZ(set.getInt("spawnX"), set.getInt("spawnY"), set.getInt("spawnZ"));
+ boat.dockHeadingA = set.getInt("dockHeadingA", -1);
+ boat.dockHeadingB = set.getInt("dockHeadingB", -1);
+ boat.setHeading(boat.dockHeadingA);
boat.setPathA(set.getInt("pathIdA"), set.getInt("ticketA"), set.getInt("xTeleNoTicketA"), set.getInt("yTeleNoTicketA"), set.getInt("zTeleNoTicketA"), set.getString("announcerA"), set.getString("message10A"), set.getString("message5A"), set.getString("message1A"), set.getString("message0A"), set.getString("messageBeginA"), paths.get(set.getInt("pathIdA")));
boat.setPathB(set.getInt("pathIdB"), set.getInt("ticketB"), set.getInt("xTeleNoTicketB"), set.getInt("yTeleNoTicketB"), set.getInt("zTeleNoTicketB"), set.getString("announcerB"), set.getString("message10B"), set.getString("message5B"), set.getString("message1B"), set.getString("message0B"), set.getString("messageBeginB"), paths.get(set.getInt("pathIdB")));
boat.spawn();
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/Boat.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/Boat.java
index 97e14f3c4c..fb79200977 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/Boat.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/Boat.java
@@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.enums.ChatType;
+import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.knownlist.BoatKnownList;
@@ -45,10 +46,12 @@ import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager;
public class Boat extends Creature
{
public float boatSpeed;
+ public int dockHeadingA;
+ public int dockHeadingB;
public VehicleDeparture vd = null;
private int lastx = -1;
private int lasty = -1;
- protected int cycle = 0;
+ protected int cycle = 1;
protected int runstate = 0;
protected BoatPathHolder pathA;
protected BoatPathHolder pathB;
@@ -352,10 +355,20 @@ public class Boat extends Creature
if (cycle == 1)
{
sm = new CreatureSay(0, ChatType.SHOUT, pathA.npc, pathA.sysmessb);
+ // Proper dock heading.
+ if (dockHeadingA != -1)
+ {
+ setHeading(dockHeadingA);
+ }
}
else
{
sm = new CreatureSay(0, ChatType.SHOUT, pathB.npc, pathB.sysmessb);
+ // Proper dock heading.
+ if (dockHeadingB != -1)
+ {
+ setHeading(dockHeadingB);
+ }
}
ps = new PlaySound(0, "itemsound.ship_arrival_departure", this);
for (Player player : knownPlayers)
@@ -372,8 +385,16 @@ public class Boat extends Creature
public void spawn()
{
- cycle = 1;
+ // Add to World.
+ setSpawned(true);
+ setWorldRegion(World.getInstance().getRegion(getLocation()));
+ World.getInstance().storeObject(this);
+ getWorldRegion().addVisibleObject(this);
+
+ // Start AI.
beginCycle();
+
+ // Broadcast vehicle info to nearby players.
final Collection knownPlayers = getKnownList().getKnownPlayers().values();
if ((knownPlayers == null) || knownPlayers.isEmpty())
{
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/knownlist/BoatKnownList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/knownlist/BoatKnownList.java
index 7dc8539bff..fef4e4b1b1 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/knownlist/BoatKnownList.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/knownlist/BoatKnownList.java
@@ -19,6 +19,8 @@ package org.l2jmobius.gameserver.model.actor.knownlist;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.actor.instance.Boat;
+import org.l2jmobius.gameserver.network.serverpackets.VehicleInfo;
/**
* @author Maktakien
@@ -30,6 +32,20 @@ public class BoatKnownList extends CreatureKnownList
super(creature);
}
+ @Override
+ public boolean addKnownObject(WorldObject object)
+ {
+ if (super.addKnownObject(object))
+ {
+ if (object.isPlayer())
+ {
+ object.getActingPlayer().sendPacket(new VehicleInfo((Boat) getActiveObject()));
+ }
+ return true;
+ }
+ return false;
+ }
+
@Override
public int getDistanceToForgetObject(WorldObject object)
{