Fixed boat visibility and dock heading issues.

This commit is contained in:
MobiusDevelopment 2022-07-12 21:09:53 +00:00
parent 38366a9017
commit b244ccce81
10 changed files with 97 additions and 17 deletions

View File

@ -130,8 +130,8 @@
<point speed1="150" speed2="800" x="111264" y="226240" z="-3610" time="-1" />
</path>
<!-- Load after paths, since boats need paths on initialization. -->
<boat name="TI_Gludin_TI" id="1" spawnX="-96622" spawnY="261660" spawnZ="-3610" heading="32768" pathIdA="1" ticketA="1074" xTeleNoTicketA="-96777" yTeleNoTicketA="258970" zTeleNoTicketA="-3623" announcerA=" Passenger Boat Info" message10A="The ferry arrived at Talking Island Harbor. The ferry will leave for Gludin Harbor after anchoring for ten minutes." message5A="The ferry will leave for Gludin Harbor in five minutes." message1A="The ferry will leave for Gludin Harbor in one minute." message0A="The ferry will be leaving soon for Gludin Harbor." messageBeginA="The ferry is leaving for Gludin Harbor." pathIdB="2" ticketB="1075" xTeleNoTicketB="-90015" yTeleNoTicketB="150422" zTeleNoTicketB="-3610" announcerB=" Passenger Boat Info" message10B="The ferry has arrived at Gludin Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5B="The ferry will leave for Talking Island Harbor in five minutes." message1B="The ferry will leave for Talking Island Harbor in one minute." message0B="The ferry will be leaving soon for Talking Island Harbor." messageBeginB="The ferry is leaving for Talking Island Harbor." />
<boat name="TI_Giran_TI" id="2" spawnX="48950" spawnY="190613" spawnZ="-3610" heading="60800" pathIdA="3" ticketA="3946" xTeleNoTicketA="46763" yTeleNoTicketA="187041" zTeleNoTicketA="-3451" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Giran Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5A="We depart for Talking Island Harbor in five minutes." message1A="We depart for Talking Island Harbor in one minute." message0A="All aboard for Talking Island!" messageBeginA="We are now leaving for Talking Island!" pathIdB="4" ticketB="3945" xTeleNoTicketB="-96777" yTeleNoTicketB="258970" zTeleNoTicketB="-3623" announcerB=" Passenger Boat Info" message10B="The ferry arrived at Talking Island Harbor.The ferry will leave for Giran Harbor after anchoring for ten minutes." message5B="The ferry will leave for Giran Harbor in five minutes." message1B="The ferry will leave for Giran Harbor in one minute. Those wishing to ride should make haste to get on." message0B="The ferry will be leaving soon for Giran Harbor." messageBeginB="The ferry is leaving for Giran Harbor." />
<boat name="Gludin_Rune_Gludin" id="3" spawnX="-95686" spawnY="150514" spawnZ="-3610" heading="16723" pathIdA="5" ticketA="7905" xTeleNoTicketA="-90015" yTeleNoTicketA="150422" zTeleNoTicketA="-3000" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Gludin Harbor. Departure for Rune Harbor will take place after anchoring for ten minutes." message5A="Departure for Rune Harbor will take place in five minutes!" message1A="Departure for Rune Harbor will take place in one minute!" message0A="Make haste! We will be departing for Rune shortly." messageBeginA="We are now departing for Rune Harbor. Hold on and enjoy the ride!" pathIdB="6" ticketB="7904" xTeleNoTicketB="35929" yTeleNoTicketB="-39403" zTeleNoTicketB="-3152" announcerB=" Passenger Boat Info" message10B="Arrived at Rune Harbor. Departure for Gludin Harbor will take place after anchoring for ten minutes" message5B="Departure for Gludin Harbor will take place in five minutes." message1B="Departure for Gludin Harbor will take place in one minute." message0B="Make haste! We will be departing for Gludin shortly." messageBeginB="We are now departing for Gludin Harbor. Hold on and enjoy the ride!" />
<boat name="Innadril_Tour" id="4" spawnX="111264" spawnY="226240" spawnZ="-3610" heading="32768" pathIdA="7" ticketA="0" xTeleNoTicketA="107092" yTeleNoTicketA="219098" zTeleNoTicketA="-3952" announcerA="Passenger Boat Info" message10A="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5A="The Innadril pleasure boat will leave in five minutes." message1A="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0A="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginA="Innadril pleasure boat is leaving." pathIdB="7" ticketB="0" xTeleNoTicketB="107092" yTeleNoTicketB="219098" zTeleNoTicketB="-3952" announcerB="Passenger Boat Info" message10B="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5B="The Innadril pleasure boat will leave in five minutes." message1B="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0B="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginB="Innadril pleasure boat is leaving." />
<boat name="TI_Gludin_TI" id="1" spawnX="-96622" spawnY="261660" spawnZ="-3610" dockHeadingA="32768" dockHeadingB="-32777" pathIdA="1" ticketA="1074" xTeleNoTicketA="-96777" yTeleNoTicketA="258970" zTeleNoTicketA="-3623" announcerA=" Passenger Boat Info" message10A="The ferry arrived at Talking Island Harbor. The ferry will leave for Gludin Harbor after anchoring for ten minutes." message5A="The ferry will leave for Gludin Harbor in five minutes." message1A="The ferry will leave for Gludin Harbor in one minute." message0A="The ferry will be leaving soon for Gludin Harbor." messageBeginA="The ferry is leaving for Gludin Harbor." pathIdB="2" ticketB="1075" xTeleNoTicketB="-90015" yTeleNoTicketB="150422" zTeleNoTicketB="-3610" announcerB=" Passenger Boat Info" message10B="The ferry has arrived at Gludin Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5B="The ferry will leave for Talking Island Harbor in five minutes." message1B="The ferry will leave for Talking Island Harbor in one minute." message0B="The ferry will be leaving soon for Talking Island Harbor." messageBeginB="The ferry is leaving for Talking Island Harbor." />
<boat name="TI_Giran_TI" id="2" spawnX="48950" spawnY="190613" spawnZ="-3610" dockHeadingA="60800" dockHeadingB="-37877" pathIdA="3" ticketA="3946" xTeleNoTicketA="46763" yTeleNoTicketA="187041" zTeleNoTicketA="-3451" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Giran Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5A="We depart for Talking Island Harbor in five minutes." message1A="We depart for Talking Island Harbor in one minute." message0A="All aboard for Talking Island!" messageBeginA="We are now leaving for Talking Island!" pathIdB="4" ticketB="3945" xTeleNoTicketB="-96777" yTeleNoTicketB="258970" zTeleNoTicketB="-3623" announcerB=" Passenger Boat Info" message10B="The ferry arrived at Talking Island Harbor.The ferry will leave for Giran Harbor after anchoring for ten minutes." message5B="The ferry will leave for Giran Harbor in five minutes." message1B="The ferry will leave for Giran Harbor in one minute. Those wishing to ride should make haste to get on." message0B="The ferry will be leaving soon for Giran Harbor." messageBeginB="The ferry is leaving for Giran Harbor." />
<boat name="Gludin_Rune_Gludin" id="3" spawnX="-95686" spawnY="150514" spawnZ="-3610" dockHeadingA="16723" dockHeadingB="-24577" pathIdA="5" ticketA="7905" xTeleNoTicketA="-90015" yTeleNoTicketA="150422" zTeleNoTicketA="-3000" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Gludin Harbor. Departure for Rune Harbor will take place after anchoring for ten minutes." message5A="Departure for Rune Harbor will take place in five minutes!" message1A="Departure for Rune Harbor will take place in one minute!" message0A="Make haste! We will be departing for Rune shortly." messageBeginA="We are now departing for Rune Harbor. Hold on and enjoy the ride!" pathIdB="6" ticketB="7904" xTeleNoTicketB="35929" yTeleNoTicketB="-39403" zTeleNoTicketB="-3152" announcerB=" Passenger Boat Info" message10B="Arrived at Rune Harbor. Departure for Gludin Harbor will take place after anchoring for ten minutes" message5B="Departure for Gludin Harbor will take place in five minutes." message1B="Departure for Gludin Harbor will take place in one minute." message0B="Make haste! We will be departing for Gludin shortly." messageBeginB="We are now departing for Gludin Harbor. Hold on and enjoy the ride!" />
<boat name="Innadril_Tour" id="4" spawnX="111264" spawnY="226240" spawnZ="-3610" dockHeadingA="32768" dockHeadingB="32768" pathIdA="7" ticketA="0" xTeleNoTicketA="107092" yTeleNoTicketA="219098" zTeleNoTicketA="-3952" announcerA="Passenger Boat Info" message10A="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5A="The Innadril pleasure boat will leave in five minutes." message1A="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0A="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginA="Innadril pleasure boat is leaving." pathIdB="7" ticketB="0" xTeleNoTicketB="107092" yTeleNoTicketB="219098" zTeleNoTicketB="-3952" announcerB="Passenger Boat Info" message10B="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5B="The Innadril pleasure boat will leave in five minutes." message1B="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0B="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginB="Innadril pleasure boat is leaving." />
</list>

View File

@ -32,7 +32,8 @@
<xs:attribute type="xs:int" name="spawnX" use="required"/>
<xs:attribute type="xs:int" name="spawnY" use="required"/>
<xs:attribute type="xs:short" name="spawnZ" use="required"/>
<xs:attribute type="xs:int" name="heading" use="required"/>
<xs:attribute type="xs:int" name="dockHeadingA" use="required"/>
<xs:attribute type="xs:int" name="dockHeadingB" use="optional"/>
<xs:attribute type="xs:byte" name="pathIdA" use="required"/>
<xs:attribute type="xs:short" name="ticketA" use="required"/>
<xs:attribute type="xs:int" name="xTeleNoTicketA" use="required"/>

View File

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

View File

@ -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<Player> knownPlayers = getKnownList().getKnownPlayers().values();
if ((knownPlayers == null) || knownPlayers.isEmpty())
{

View File

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

View File

@ -151,9 +151,9 @@
<point speed1="180" speed2="1800" x="37890" y="-35765" z="-3610" time="-1" />
</path>
<!-- Load after paths, since boats need paths on initialization. -->
<boat name="TI_Gludin_TI" id="1" spawnX="-96622" spawnY="261660" spawnZ="-3610" heading="32768" pathIdA="1" ticketA="1074" xTeleNoTicketA="-96777" yTeleNoTicketA="258970" zTeleNoTicketA="-3623" announcerA=" Passenger Boat Info" message10A="The ferry arrived at Talking Island Harbor. The ferry will leave for Gludin Harbor after anchoring for ten minutes." message5A="The ferry will leave for Gludin Harbor in five minutes." message1A="The ferry will leave for Gludin Harbor in one minute." message0A="The ferry will be leaving soon for Gludin Harbor." messageBeginA="The ferry is leaving for Gludin Harbor." pathIdB="2" ticketB="1075" xTeleNoTicketB="-90015" yTeleNoTicketB="150422" zTeleNoTicketB="-3610" announcerB=" Passenger Boat Info" message10B="The ferry has arrived at Gludin Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5B="The ferry will leave for Talking Island Harbor in five minutes." message1B="The ferry will leave for Talking Island Harbor in one minute." message0B="The ferry will be leaving soon for Talking Island Harbor." messageBeginB="The ferry is leaving for Talking Island Harbor." />
<boat name="TI_Giran_TI" id="2" spawnX="48950" spawnY="190613" spawnZ="-3610" heading="60800" pathIdA="3" ticketA="3946" xTeleNoTicketA="46763" yTeleNoTicketA="187041" zTeleNoTicketA="-3451" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Giran Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5A="We depart for Talking Island Harbor in five minutes." message1A="We depart for Talking Island Harbor in one minute." message0A="All aboard for Talking Island!" messageBeginA="We are now leaving for Talking Island!" pathIdB="4" ticketB="3945" xTeleNoTicketB="-96777" yTeleNoTicketB="258970" zTeleNoTicketB="-3623" announcerB=" Passenger Boat Info" message10B="The ferry arrived at Talking Island Harbor.The ferry will leave for Giran Harbor after anchoring for ten minutes." message5B="The ferry will leave for Giran Harbor in five minutes." message1B="The ferry will leave for Giran Harbor in one minute. Those wishing to ride should make haste to get on." message0B="The ferry will be leaving soon for Giran Harbor." messageBeginB="The ferry is leaving for Giran Harbor." />
<boat name="Gludin_Rune_Gludin" id="3" spawnX="-95686" spawnY="150514" spawnZ="-3610" heading="16723" pathIdA="5" ticketA="7905" xTeleNoTicketA="-90015" yTeleNoTicketA="150422" zTeleNoTicketA="-3000" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Gludin Harbor. Departure for Rune Harbor will take place after anchoring for ten minutes." message5A="Departure for Rune Harbor will take place in five minutes!" message1A="Departure for Rune Harbor will take place in one minute!" message0A="Make haste! We will be departing for Rune shortly." messageBeginA="We are now departing for Rune Harbor. Hold on and enjoy the ride!" pathIdB="6" ticketB="7904" xTeleNoTicketB="35929" yTeleNoTicketB="-39403" zTeleNoTicketB="-3152" announcerB=" Passenger Boat Info" message10B="Arrived at Rune Harbor. Departure for Gludin Harbor will take place after anchoring for ten minutes" message5B="Departure for Gludin Harbor will take place in five minutes." message1B="Departure for Gludin Harbor will take place in one minute." message0B="Make haste! We will be departing for Gludin shortly." messageBeginB="We are now departing for Gludin Harbor. Hold on and enjoy the ride!" />
<boat name="Innadril_Tour" id="4" spawnX="111264" spawnY="226240" spawnZ="-3610" heading="32768" pathIdA="7" ticketA="0" xTeleNoTicketA="107092" yTeleNoTicketA="219098" zTeleNoTicketA="-3952" announcerA="Passenger Boat Info" message10A="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5A="The Innadril pleasure boat will leave in five minutes." message1A="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0A="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginA="Innadril pleasure boat is leaving." pathIdB="7" ticketB="0" xTeleNoTicketB="107092" yTeleNoTicketB="219098" zTeleNoTicketB="-3952" announcerB="Passenger Boat Info" message10B="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5B="The Innadril pleasure boat will leave in five minutes." message1B="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0B="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginB="Innadril pleasure boat is leaving." />
<boat name="Rune_Primeval_Rune" id="5" spawnX="37885" spawnY="-35767" spawnZ="-3615" heading="0" pathIdA="8" ticketA="8924" xTeleNoTicketA="34513" yTeleNoTicketA="-38009" zTeleNoTicketA="-3610" announcerA="Passenger Boat Info" message10A="The boat for Primeval Isle has arrived. It will anchor for ten minutes." message5A="The boat for Primeval Isle will leave in five minutes." message1A="The boat for Primeval Isle will leave in one minute. Those wishing to ride should make haste to get on." message0A="The boat for Primeval Isle is leaving soon. Those wishing to ride should make haste to get on." messageBeginA="The boat for Primeval Isle is leaving." pathIdB="9" ticketB="8925" xTeleNoTicketB="10449" yTeleNoTicketB="-25180" zTeleNoTicketB="-3688" announcerB="Passenger Boat Info" message10B="The boat from Rune arrived. It will anchor for ten minutes." message5B="The boat for Rune will leave in five minutes." message1B="The boat for Rune will leave in one minute. Those wishing to ride should make haste to get on." message0B="The boat for Rune is leaving soon. Those wishing to ride should make haste to get on." messageBeginB="The boat for Rune is leaving." />
<boat name="TI_Gludin_TI" id="1" spawnX="-96622" spawnY="261660" spawnZ="-3610" dockHeadingA="32768" dockHeadingB="-32777" pathIdA="1" ticketA="1074" xTeleNoTicketA="-96777" yTeleNoTicketA="258970" zTeleNoTicketA="-3623" announcerA=" Passenger Boat Info" message10A="The ferry arrived at Talking Island Harbor. The ferry will leave for Gludin Harbor after anchoring for ten minutes." message5A="The ferry will leave for Gludin Harbor in five minutes." message1A="The ferry will leave for Gludin Harbor in one minute." message0A="The ferry will be leaving soon for Gludin Harbor." messageBeginA="The ferry is leaving for Gludin Harbor." pathIdB="2" ticketB="1075" xTeleNoTicketB="-90015" yTeleNoTicketB="150422" zTeleNoTicketB="-3610" announcerB=" Passenger Boat Info" message10B="The ferry has arrived at Gludin Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5B="The ferry will leave for Talking Island Harbor in five minutes." message1B="The ferry will leave for Talking Island Harbor in one minute." message0B="The ferry will be leaving soon for Talking Island Harbor." messageBeginB="The ferry is leaving for Talking Island Harbor." />
<boat name="TI_Giran_TI" id="2" spawnX="48950" spawnY="190613" spawnZ="-3610" dockHeadingA="60800" dockHeadingB="-37877" pathIdA="3" ticketA="3946" xTeleNoTicketA="46763" yTeleNoTicketA="187041" zTeleNoTicketA="-3451" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Giran Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5A="We depart for Talking Island Harbor in five minutes." message1A="We depart for Talking Island Harbor in one minute." message0A="All aboard for Talking Island!" messageBeginA="We are now leaving for Talking Island!" pathIdB="4" ticketB="3945" xTeleNoTicketB="-96777" yTeleNoTicketB="258970" zTeleNoTicketB="-3623" announcerB=" Passenger Boat Info" message10B="The ferry arrived at Talking Island Harbor.The ferry will leave for Giran Harbor after anchoring for ten minutes." message5B="The ferry will leave for Giran Harbor in five minutes." message1B="The ferry will leave for Giran Harbor in one minute. Those wishing to ride should make haste to get on." message0B="The ferry will be leaving soon for Giran Harbor." messageBeginB="The ferry is leaving for Giran Harbor." />
<boat name="Gludin_Rune_Gludin" id="3" spawnX="-95686" spawnY="150514" spawnZ="-3610" dockHeadingA="16723" dockHeadingB="-24577" pathIdA="5" ticketA="7905" xTeleNoTicketA="-90015" yTeleNoTicketA="150422" zTeleNoTicketA="-3000" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Gludin Harbor. Departure for Rune Harbor will take place after anchoring for ten minutes." message5A="Departure for Rune Harbor will take place in five minutes!" message1A="Departure for Rune Harbor will take place in one minute!" message0A="Make haste! We will be departing for Rune shortly." messageBeginA="We are now departing for Rune Harbor. Hold on and enjoy the ride!" pathIdB="6" ticketB="7904" xTeleNoTicketB="35929" yTeleNoTicketB="-39403" zTeleNoTicketB="-3152" announcerB=" Passenger Boat Info" message10B="Arrived at Rune Harbor. Departure for Gludin Harbor will take place after anchoring for ten minutes" message5B="Departure for Gludin Harbor will take place in five minutes." message1B="Departure for Gludin Harbor will take place in one minute." message0B="Make haste! We will be departing for Gludin shortly." messageBeginB="We are now departing for Gludin Harbor. Hold on and enjoy the ride!" />
<boat name="Innadril_Tour" id="4" spawnX="111264" spawnY="226240" spawnZ="-3610" dockHeadingA="32768" dockHeadingB="32768" pathIdA="7" ticketA="0" xTeleNoTicketA="107092" yTeleNoTicketA="219098" zTeleNoTicketA="-3952" announcerA="Passenger Boat Info" message10A="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5A="The Innadril pleasure boat will leave in five minutes." message1A="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0A="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginA="Innadril pleasure boat is leaving." pathIdB="7" ticketB="0" xTeleNoTicketB="107092" yTeleNoTicketB="219098" zTeleNoTicketB="-3952" announcerB="Passenger Boat Info" message10B="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5B="The Innadril pleasure boat will leave in five minutes." message1B="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0B="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginB="Innadril pleasure boat is leaving." />
<boat name="Rune_Primeval_Rune" id="5" spawnX="37885" spawnY="-35767" spawnZ="-3615" dockHeadingA="0" dockHeadingB="0" pathIdA="8" ticketA="8924" xTeleNoTicketA="34513" yTeleNoTicketA="-38009" zTeleNoTicketA="-3610" announcerA="Passenger Boat Info" message10A="The boat for Primeval Isle has arrived. It will anchor for ten minutes." message5A="The boat for Primeval Isle will leave in five minutes." message1A="The boat for Primeval Isle will leave in one minute. Those wishing to ride should make haste to get on." message0A="The boat for Primeval Isle is leaving soon. Those wishing to ride should make haste to get on." messageBeginA="The boat for Primeval Isle is leaving." pathIdB="9" ticketB="8925" xTeleNoTicketB="10449" yTeleNoTicketB="-25180" zTeleNoTicketB="-3688" announcerB="Passenger Boat Info" message10B="The boat from Rune arrived. It will anchor for ten minutes." message5B="The boat for Rune will leave in five minutes." message1B="The boat for Rune will leave in one minute. Those wishing to ride should make haste to get on." message0B="The boat for Rune is leaving soon. Those wishing to ride should make haste to get on." messageBeginB="The boat for Rune is leaving." />
</list>

View File

@ -32,7 +32,8 @@
<xs:attribute type="xs:int" name="spawnX" use="required"/>
<xs:attribute type="xs:int" name="spawnY" use="required"/>
<xs:attribute type="xs:short" name="spawnZ" use="required"/>
<xs:attribute type="xs:int" name="heading" use="required"/>
<xs:attribute type="xs:int" name="dockHeadingA" use="required"/>
<xs:attribute type="xs:int" name="dockHeadingB" use="optional"/>
<xs:attribute type="xs:byte" name="pathIdA" use="required"/>
<xs:attribute type="xs:short" name="ticketA" use="required"/>
<xs:attribute type="xs:int" name="xTeleNoTicketA" use="required"/>

View File

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

View File

@ -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<Player> knownPlayers = getKnownList().getKnownPlayers().values();
if ((knownPlayers == null) || knownPlayers.isEmpty())
{

View File

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