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) {