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

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