Boat data moved from CSV to XML.

This commit is contained in:
MobiusDevelopment
2020-01-29 00:21:41 +00:00
parent 393e53514c
commit 78bf4dc9b3
12 changed files with 575 additions and 553 deletions

View File

@@ -64,13 +64,14 @@ import org.l2jmobius.gameserver.datatables.sql.TeleportLocationTable;
import org.l2jmobius.gameserver.datatables.xml.AdminData;
import org.l2jmobius.gameserver.datatables.xml.ArmorSetData;
import org.l2jmobius.gameserver.datatables.xml.AugmentationData;
import org.l2jmobius.gameserver.datatables.xml.BoatData;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
import org.l2jmobius.gameserver.datatables.xml.FenceData;
import org.l2jmobius.gameserver.datatables.xml.FishData;
import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.datatables.xml.RecipeData;
import org.l2jmobius.gameserver.datatables.xml.ManorSeedData;
import org.l2jmobius.gameserver.datatables.xml.RecipeData;
import org.l2jmobius.gameserver.datatables.xml.StaticObjectData;
import org.l2jmobius.gameserver.datatables.xml.SummonItemData;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
@@ -86,7 +87,6 @@ import org.l2jmobius.gameserver.idfactory.IdFactory;
import org.l2jmobius.gameserver.instancemanager.AuctionManager;
import org.l2jmobius.gameserver.instancemanager.AutoSaveManager;
import org.l2jmobius.gameserver.instancemanager.AwayManager;
import org.l2jmobius.gameserver.instancemanager.BoatManager;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager;
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
@@ -350,7 +350,7 @@ public class GameServer
CrownManager.getInstance();
Util.printSection("Boat");
BoatManager.getInstance();
BoatData.getInstance();
Util.printSection("Doors");
DoorData.getInstance().load();

View File

@@ -0,0 +1,196 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.l2jmobius.gameserver.datatables.xml;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.idfactory.IdFactory;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.instance.BoatInstance;
import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate;
import org.l2jmobius.gameserver.model.holders.BoatPathHolder.BoatPoint;
/**
* @author Mobius
*/
public class BoatData implements IXmlReader
{
private static final Logger LOGGER = Logger.getLogger(BoatData.class.getName());
private final Map<Integer, BoatInstance> _boats = new HashMap<>();
private final Map<Integer, Map<Integer, BoatPoint>> _paths = new HashMap<>();
protected BoatData()
{
load();
}
@Override
public void load()
{
_boats.clear();
_paths.clear();
parseDatapackFile("data/Boats.xml");
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _boats.size() + " boats.");
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _paths.size() + " paths.");
}
@Override
public void parseDocument(Document doc, File f)
{
if (!Config.ALLOW_BOAT)
{
return;
}
try
{
int id;
int index;
final StatSet set = new StatSet();
final Node n = doc.getFirstChild();
for (Node node = n.getFirstChild(); node != null; node = node.getNextSibling())
{
if ("boat".equalsIgnoreCase(node.getNodeName()))
{
final NamedNodeMap attrs = node.getAttributes();
for (int i = 0; i < attrs.getLength(); i++)
{
final Node attr = attrs.item(i);
set.set(attr.getNodeName(), attr.getNodeValue());
}
final String name = set.getString("name");
final StatSet npcDat = new StatSet();
npcDat.set("npcId", set.getInt("id"));
npcDat.set("level", 0);
npcDat.set("jClass", "boat");
npcDat.set("baseSTR", 0);
npcDat.set("baseCON", 0);
npcDat.set("baseDEX", 0);
npcDat.set("baseINT", 0);
npcDat.set("baseWIT", 0);
npcDat.set("baseMEN", 0);
npcDat.set("baseShldDef", 0);
npcDat.set("baseShldRate", 0);
npcDat.set("baseAccCombat", 38);
npcDat.set("baseEvasRate", 38);
npcDat.set("baseCritRate", 38);
npcDat.set("collision_radius", 0);
npcDat.set("collision_height", 0);
npcDat.set("sex", "male");
npcDat.set("type", "");
npcDat.set("baseAtkRange", 0);
npcDat.set("baseMpMax", 0);
npcDat.set("baseCpMax", 0);
npcDat.set("rewardExp", 0);
npcDat.set("rewardSp", 0);
npcDat.set("basePAtk", 0);
npcDat.set("baseMAtk", 0);
npcDat.set("basePAtkSpd", 0);
npcDat.set("aggroRange", 0);
npcDat.set("baseMAtkSpd", 0);
npcDat.set("rhand", 0);
npcDat.set("lhand", 0);
npcDat.set("armor", 0);
npcDat.set("baseWalkSpd", 0);
npcDat.set("baseRunSpd", 0);
npcDat.set("name", name);
npcDat.set("baseHpMax", 50000);
npcDat.set("baseHpReg", 3.e-3f);
npcDat.set("baseMpReg", 3.e-3f);
npcDat.set("basePDef", 100);
npcDat.set("baseMDef", 100);
final CreatureTemplate template = new CreatureTemplate(npcDat);
final BoatInstance boat = new BoatInstance(IdFactory.getInstance().getNextId(), template, name);
boat.getPosition().setHeading(set.getInt("heading"));
boat.setXYZ(set.getInt("spawnX"), set.getInt("spawnY"), set.getInt("spawnZ"));
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();
_boats.put(boat.getObjectId(), boat);
}
else if ("path".equalsIgnoreCase(node.getNodeName()))
{
index = 0;
id = Integer.parseInt(node.getAttributes().getNamedItem("id").getNodeValue());
_paths.put(id, new HashMap<Integer, BoatPoint>());
for (Node b = node.getFirstChild(); b != null; b = b.getNextSibling())
{
if (!"point".equalsIgnoreCase(b.getNodeName()))
{
continue;
}
final NamedNodeMap attrs = b.getAttributes();
for (int i = 0; i < attrs.getLength(); i++)
{
final Node attr = attrs.item(i);
set.set(attr.getNodeName(), attr.getNodeValue());
}
final BoatPoint point = new BoatPoint();
point.speed1 = set.getInt("speed1");
point.speed2 = set.getInt("speed2");
point.x = set.getInt("x");
point.y = set.getInt("y");
point.z = set.getInt("z");
point.time = set.getInt("time");
_paths.get(id).put(index++, point);
}
}
}
}
catch (Exception e)
{
LOGGER.warning(getClass().getSimpleName() + ": Error while reading boat data: " + e);
}
}
public BoatInstance getBoat(int boatId)
{
return _boats.get(boatId);
}
public Map<Integer, BoatPoint> getBoatPath(int pathId)
{
return _paths.get(pathId);
}
public static final BoatData getInstance()
{
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder
{
protected static final BoatData INSTANCE = new BoatData();
}
}

View File

@@ -1,233 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.l2jmobius.gameserver.instancemanager;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.idfactory.IdFactory;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.instance.BoatInstance;
import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate;
public class BoatManager
{
private static final Logger LOGGER = Logger.getLogger(BoatManager.class.getName());
public static final BoatManager getInstance()
{
return SingletonHolder.INSTANCE;
}
private Map<Integer, BoatInstance> _staticItems = new HashMap<>();
public BoatManager()
{
LOGGER.info("Initializing BoatManager");
load();
}
private final void load()
{
if (!Config.ALLOW_BOAT)
{
return;
}
FileReader reader = null;
BufferedReader buff = null;
LineNumberReader lnr = null;
try
{
final File boatData = new File(Config.DATAPACK_ROOT, "data/csv/boat.csv");
reader = new FileReader(boatData);
buff = new BufferedReader(reader);
lnr = new LineNumberReader(buff);
String line = null;
while ((line = lnr.readLine()) != null)
{
if ((line.trim().length() == 0) || line.startsWith("#"))
{
continue;
}
final BoatInstance boat = parseLine(line);
boat.spawn();
_staticItems.put(boat.getObjectId(), boat);
}
}
catch (FileNotFoundException e)
{
LOGGER.warning("boat.csv is missing in data folder");
}
catch (Exception e)
{
LOGGER.warning("error while creating boat table " + e);
}
finally
{
if (lnr != null)
{
try
{
lnr.close();
}
catch (Exception e1)
{
LOGGER.warning("Problem with BoatManager " + e1.getMessage());
}
}
if (buff != null)
{
try
{
buff.close();
}
catch (Exception e1)
{
LOGGER.warning("Problem with BoatManager " + e1.getMessage());
}
}
if (reader != null)
{
try
{
reader.close();
}
catch (Exception e1)
{
LOGGER.warning("Problem with BoatManager " + e1.getMessage());
}
}
}
}
private BoatInstance parseLine(String line)
{
BoatInstance boat;
final StringTokenizer st = new StringTokenizer(line, ";");
final String name = st.nextToken();
final int id = Integer.parseInt(st.nextToken());
final int xspawn = Integer.parseInt(st.nextToken());
final int yspawn = Integer.parseInt(st.nextToken());
final int zspawn = Integer.parseInt(st.nextToken());
final int heading = Integer.parseInt(st.nextToken());
final StatSet npcDat = new StatSet();
npcDat.set("npcId", id);
npcDat.set("level", 0);
npcDat.set("jClass", "boat");
npcDat.set("baseSTR", 0);
npcDat.set("baseCON", 0);
npcDat.set("baseDEX", 0);
npcDat.set("baseINT", 0);
npcDat.set("baseWIT", 0);
npcDat.set("baseMEN", 0);
npcDat.set("baseShldDef", 0);
npcDat.set("baseShldRate", 0);
npcDat.set("baseAccCombat", 38);
npcDat.set("baseEvasRate", 38);
npcDat.set("baseCritRate", 38);
npcDat.set("collision_radius", 0);
npcDat.set("collision_height", 0);
npcDat.set("sex", "male");
npcDat.set("type", "");
npcDat.set("baseAtkRange", 0);
npcDat.set("baseMpMax", 0);
npcDat.set("baseCpMax", 0);
npcDat.set("rewardExp", 0);
npcDat.set("rewardSp", 0);
npcDat.set("basePAtk", 0);
npcDat.set("baseMAtk", 0);
npcDat.set("basePAtkSpd", 0);
npcDat.set("aggroRange", 0);
npcDat.set("baseMAtkSpd", 0);
npcDat.set("rhand", 0);
npcDat.set("lhand", 0);
npcDat.set("armor", 0);
npcDat.set("baseWalkSpd", 0);
npcDat.set("baseRunSpd", 0);
npcDat.set("name", name);
npcDat.set("baseHpMax", 50000);
npcDat.set("baseHpReg", 3.e-3f);
npcDat.set("baseMpReg", 3.e-3f);
npcDat.set("basePDef", 100);
npcDat.set("baseMDef", 100);
final CreatureTemplate template = new CreatureTemplate(npcDat);
boat = new BoatInstance(IdFactory.getInstance().getNextId(), template, name);
boat.getPosition().setHeading(heading);
boat.setXYZ(xspawn, yspawn, zspawn);
int idWaypoint1 = Integer.parseInt(st.nextToken());
int idWTicket1 = Integer.parseInt(st.nextToken());
int ntx1 = Integer.parseInt(st.nextToken());
int nty1 = Integer.parseInt(st.nextToken());
int ntz1 = Integer.parseInt(st.nextToken());
String npc1 = st.nextToken();
String mess10 = st.nextToken();
String mess5 = st.nextToken();
String mess1 = st.nextToken();
String mess0 = st.nextToken();
String messb = st.nextToken();
boat.setTrajet1(idWaypoint1, idWTicket1, ntx1, nty1, ntz1, npc1, mess10, mess5, mess1, mess0, messb);
idWaypoint1 = Integer.parseInt(st.nextToken());
idWTicket1 = Integer.parseInt(st.nextToken());
ntx1 = Integer.parseInt(st.nextToken());
nty1 = Integer.parseInt(st.nextToken());
ntz1 = Integer.parseInt(st.nextToken());
npc1 = st.nextToken();
mess10 = st.nextToken();
mess5 = st.nextToken();
mess1 = st.nextToken();
mess0 = st.nextToken();
messb = st.nextToken();
boat.setTrajet2(idWaypoint1, idWTicket1, ntx1, nty1, ntz1, npc1, mess10, mess5, mess1, mess0, messb);
return boat;
}
public BoatInstance GetBoat(int boatId)
{
if (_staticItems == null)
{
_staticItems = new HashMap<>();
}
return _staticItems.get(boatId);
}
private static class SingletonHolder
{
protected static final BoatManager INSTANCE = new BoatManager();
}
}

View File

@@ -16,23 +16,17 @@
*/
package org.l2jmobius.gameserver.model.actor.instance;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import org.l2jmobius.Config;
import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.knownlist.BoatKnownList;
import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate;
import org.l2jmobius.gameserver.model.holders.BoatPathHolder;
import org.l2jmobius.gameserver.model.holders.BoatPathHolder.BoatPoint;
import org.l2jmobius.gameserver.model.items.Weapon;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.network.clientpackets.Say2;
@@ -48,208 +42,13 @@ import org.l2jmobius.gameserver.network.serverpackets.VehicleInfo;
*/
public class BoatInstance extends Creature
{
protected static final Logger LOGGER = Logger.getLogger(BoatInstance.class.getName());
public float boatSpeed;
private class BoatTrajet
{
private Map<Integer, BoatPoint> _path;
public int idWaypoint1;
public int idWTicket1;
public int ntx1;
public int nty1;
public int ntz1;
public int max;
public String boatName;
public String npc1;
public String sysmess10_1;
public String sysmess5_1;
public String sysmess1_1;
public String sysmessb_1;
public String sysmess0_1;
protected class BoatPoint
{
public int speed1;
public int speed2;
public int x;
public int y;
public int z;
public int time;
}
/**
* @param pIdWaypoint1
* @param pIdWTicket1
* @param pNtx1
* @param pNty1
* @param pNtz1
* @param pNpc1
* @param pSysmess10
* @param pSysmess5
* @param pSysmess1
* @param pSysmess0
* @param pSysmessb
* @param pBoatname
*/
public BoatTrajet(int pIdWaypoint1, int pIdWTicket1, int pNtx1, int pNty1, int pNtz1, String pNpc1, String pSysmess10, String pSysmess5, String pSysmess1, String pSysmess0, String pSysmessb, String pBoatname)
{
idWaypoint1 = pIdWaypoint1;
idWTicket1 = pIdWTicket1;
ntx1 = pNtx1;
nty1 = pNty1;
ntz1 = pNtz1;
npc1 = pNpc1;
sysmess10_1 = pSysmess10;
sysmess5_1 = pSysmess5;
sysmess1_1 = pSysmess1;
sysmessb_1 = pSysmessb;
sysmess0_1 = pSysmess0;
boatName = pBoatname;
loadBoatPath();
}
public void parseLine(String line)
{
_path = new HashMap<>();
final StringTokenizer st = new StringTokenizer(line, ";");
st.nextToken();
max = Integer.parseInt(st.nextToken());
for (int i = 0; i < max; i++)
{
final BoatPoint bp = new BoatPoint();
bp.speed1 = Integer.parseInt(st.nextToken());
bp.speed2 = Integer.parseInt(st.nextToken());
bp.x = Integer.parseInt(st.nextToken());
bp.y = Integer.parseInt(st.nextToken());
bp.z = Integer.parseInt(st.nextToken());
bp.time = Integer.parseInt(st.nextToken());
_path.put(i, bp);
}
}
protected void loadBoatPath()
{
FileReader reader = null;
BufferedReader buff = null;
LineNumberReader lnr = null;
try
{
final File boatpath = new File(Config.DATAPACK_ROOT, "data/csv/boatpath.csv");
reader = new FileReader(boatpath);
buff = new BufferedReader(reader);
lnr = new LineNumberReader(buff);
boolean token = false;
String line = null;
while ((line = lnr.readLine()) != null)
{
if ((line.trim().length() == 0) || !line.startsWith(idWaypoint1 + ";"))
{
continue;
}
parseLine(line);
token = true;
break;
}
if (!token)
{
LOGGER.warning("No path for boat " + boatName + " !!!");
}
}
catch (FileNotFoundException e)
{
LOGGER.warning("boatpath.csv is missing in data folder " + e);
}
catch (Exception e)
{
LOGGER.warning("Error while creating boat table " + e);
}
finally
{
if (lnr != null)
{
try
{
lnr.close();
}
catch (Exception e1)
{
LOGGER.warning(e1.toString());
}
}
if (buff != null)
{
try
{
buff.close();
}
catch (Exception e1)
{
LOGGER.warning(e1.toString());
}
}
if (reader != null)
{
try
{
reader.close();
}
catch (Exception e1)
{
LOGGER.warning(e1.toString());
}
}
}
}
public int state(int state, BoatInstance boat)
{
if (state < max)
{
final BoatPoint bp = _path.get(state);
final double dx = boat.getX() - bp.x;
final double dy = boat.getY() - bp.y;
final double distance = Math.sqrt((dx * dx) + (dy * dy));
final double cos = dx / distance;
final double sin = dy / distance;
boat.getPosition().setHeading((int) (Math.atan2(-sin, -cos) * 10430.378350470452724949566316381) + 32768);
boat._vd = new VehicleDeparture(boat, bp.speed1, bp.speed2, bp.x, bp.y, bp.z);
boatSpeed = bp.speed1;
boat.moveToLocation(bp.x, bp.y, bp.z, (float) bp.speed1);
final Collection<PlayerInstance> knownPlayers = boat.getKnownList().getKnownPlayers().values();
if ((knownPlayers == null) || knownPlayers.isEmpty())
{
return bp.time;
}
for (PlayerInstance player : knownPlayers)
{
player.sendPacket(boat._vd);
}
if (bp.time == 0)
{
bp.time = 1;
}
return bp.time;
}
return 0;
}
}
private final String _name;
protected BoatTrajet _t1;
protected BoatTrajet _t2;
protected BoatPathHolder _t1;
protected BoatPathHolder _t2;
protected int _cycle = 0;
protected VehicleDeparture _vd = null;
public VehicleDeparture _vd = null;
private Map<Integer, PlayerInstance> _inboat;
public BoatInstance(int objectId, CreatureTemplate template, String name)
@@ -500,7 +299,7 @@ public class BoatInstance extends Creature
if (player.isInBoat() && (player.getBoat() == this))
{
ItemInstance it;
it = player.getInventory().getItemByItemId(_t1.idWTicket1);
it = player.getInventory().getItemByItemId(_t1.ticketId);
if ((it != null) && (it.getCount() >= 1))
{
player.getInventory().destroyItem("Boat", it.getObjectId(), 1, player, this);
@@ -510,14 +309,14 @@ public class BoatInstance extends Creature
_inboat.put(i, player);
i++;
}
else if ((it == null) && (_t1.idWTicket1 == 0))
else if ((it == null) && (_t1.ticketId == 0))
{
_inboat.put(i, player);
i++;
}
else
{
player.teleToLocation(_t1.ntx1, _t1.nty1, _t1.ntz1, false);
player.teleToLocation(_t1.ntx, _t1.nty, _t1.ntz, false);
}
}
}
@@ -537,7 +336,7 @@ public class BoatInstance extends Creature
if (player.isInBoat() && (player.getBoat() == this))
{
ItemInstance it;
it = player.getInventory().getItemByItemId(_t2.idWTicket1);
it = player.getInventory().getItemByItemId(_t2.ticketId);
if ((it != null) && (it.getCount() >= 1))
{
player.getInventory().destroyItem("Boat", it.getObjectId(), 1, player, this);
@@ -547,14 +346,14 @@ public class BoatInstance extends Creature
_inboat.put(i, player);
i++;
}
else if ((it == null) && (_t2.idWTicket1 == 0))
else if ((it == null) && (_t2.ticketId == 0))
{
_inboat.put(i, player);
i++;
}
else
{
player.teleToLocation(_t2.ntx1, _t2.nty1, _t2.ntz1, false);
player.teleToLocation(_t2.ntx, _t2.nty, _t2.ntz, false);
}
}
}
@@ -575,11 +374,11 @@ public class BoatInstance extends Creature
{
if (_cycle == 1)
{
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc1, _t1.sysmess10_1);
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc, _t1.sysmess10);
}
else
{
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc1, _t2.sysmess10_1);
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc, _t2.sysmess10);
}
ps = new PlaySound(0, "itemsound.ship_arrival_departure", this);
if ((knownPlayers == null) || knownPlayers.isEmpty())
@@ -599,11 +398,11 @@ public class BoatInstance extends Creature
{
if (_cycle == 1)
{
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc1, _t1.sysmess5_1);
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc, _t1.sysmess5);
}
else
{
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc1, _t2.sysmess5_1);
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc, _t2.sysmess5);
}
ps = new PlaySound(0, "itemsound.ship_5min", this);
if ((knownPlayers == null) || knownPlayers.isEmpty())
@@ -621,11 +420,11 @@ public class BoatInstance extends Creature
{
if (_cycle == 1)
{
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc1, _t1.sysmess1_1);
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc, _t1.sysmess1);
}
else
{
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc1, _t2.sysmess1_1);
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc, _t2.sysmess1);
}
ps = new PlaySound(0, "itemsound.ship_1min", this);
if ((knownPlayers == null) || knownPlayers.isEmpty())
@@ -643,11 +442,11 @@ public class BoatInstance extends Creature
{
if (_cycle == 1)
{
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc1, _t1.sysmess0_1);
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc, _t1.sysmess0);
}
else
{
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc1, _t2.sysmess0_1);
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc, _t2.sysmess0);
}
if ((knownPlayers == null) || knownPlayers.isEmpty())
{
@@ -663,11 +462,11 @@ public class BoatInstance extends Creature
{
if (_cycle == 1)
{
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc1, _t1.sysmessb_1);
sm = new CreatureSay(0, Say2.SHOUT, _t1.npc, _t1.sysmessb);
}
else
{
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc1, _t2.sysmessb_1);
sm = new CreatureSay(0, Say2.SHOUT, _t2.npc, _t2.sysmessb);
}
ps = new PlaySound(0, "itemsound.ship_arrival_departure", this);
for (PlayerInstance player : knownPlayers)
@@ -698,27 +497,14 @@ public class BoatInstance extends Creature
}
}
/**
* @param idWaypoint1
* @param idWTicket1
* @param ntx1
* @param nty1
* @param ntz1
* @param idnpc1
* @param sysmess10
* @param sysmess5
* @param sysmess1
* @param sysmess0
* @param sysmessb
*/
public void setTrajet1(int idWaypoint1, int idWTicket1, int ntx1, int nty1, int ntz1, String idnpc1, String sysmess10, String sysmess5, String sysmess1, String sysmess0, String sysmessb)
public void setPathA(int idWaypoint1, int idWTicket1, int ntx1, int nty1, int ntz1, String idnpc1, String sysmess10, String sysmess5, String sysmess1, String sysmess0, String sysmessb, Map<Integer, BoatPoint> path)
{
_t1 = new BoatTrajet(idWaypoint1, idWTicket1, ntx1, nty1, ntz1, idnpc1, sysmess10, sysmess5, sysmess1, sysmess0, sysmessb, _name);
_t1 = new BoatPathHolder(idWaypoint1, idWTicket1, ntx1, nty1, ntz1, idnpc1, sysmess10, sysmess5, sysmess1, sysmess0, sysmessb, _name, path);
}
public void setTrajet2(int idWaypoint1, int idWTicket1, int ntx1, int nty1, int ntz1, String idnpc1, String sysmess10, String sysmess5, String sysmess1, String sysmess0, String sysmessb)
public void setPathB(int idWaypoint1, int idWTicket1, int ntx1, int nty1, int ntz1, String idnpc1, String sysmess10, String sysmess5, String sysmess1, String sysmess0, String sysmessb, Map<Integer, BoatPoint> path)
{
_t2 = new BoatTrajet(idWaypoint1, idWTicket1, ntx1, nty1, ntz1, idnpc1, sysmess10, sysmess5, sysmess1, sysmess0, sysmessb, _name);
_t2 = new BoatPathHolder(idWaypoint1, idWTicket1, ntx1, nty1, ntz1, idnpc1, sysmess10, sysmess5, sysmess1, sysmess0, sysmessb, _name, path);
}
@Override

View File

@@ -0,0 +1,109 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.l2jmobius.gameserver.model.holders;
import java.util.Collection;
import java.util.Map;
import java.util.logging.Logger;
import org.l2jmobius.gameserver.model.actor.instance.BoatInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.serverpackets.VehicleDeparture;
/**
* @author Maktakien
*/
public class BoatPathHolder
{
protected static final Logger LOGGER = Logger.getLogger(BoatPathHolder.class.getName());
private final Map<Integer, BoatPoint> _path;
private final int _max;
public int ticketId;
public int ntx;
public int nty;
public int ntz;
public String boatName;
public String npc;
public String sysmess10;
public String sysmess5;
public String sysmess1;
public String sysmessb;
public String sysmess0;
public static class BoatPoint
{
public int speed1;
public int speed2;
public int x;
public int y;
public int z;
public int time;
}
public BoatPathHolder(int pathId, int pTicketId, int pNtx, int pNty, int pNtz, String pNpc, String pSysmess10, String pSysmess5, String pSysmess1, String pSysmess0, String pSysmessb, String pBoatname, Map<Integer, BoatPoint> path)
{
ticketId = pTicketId;
ntx = pNtx;
nty = pNty;
ntz = pNtz;
npc = pNpc;
sysmess10 = pSysmess10;
sysmess5 = pSysmess5;
sysmess1 = pSysmess1;
sysmessb = pSysmessb;
sysmess0 = pSysmess0;
boatName = pBoatname;
_path = path;
_max = _path.size();
}
public int state(int state, BoatInstance boat)
{
if (state < _max)
{
final BoatPoint path = _path.get(state);
final double dx = boat.getX() - path.x;
final double dy = boat.getY() - path.y;
final double distance = Math.sqrt((dx * dx) + (dy * dy));
final double cos = dx / distance;
final double sin = dy / distance;
boat.getPosition().setHeading((int) (Math.atan2(-sin, -cos) * 10430.378350470452724949566316381) + 32768);
boat._vd = new VehicleDeparture(boat, path.speed1, path.speed2, path.x, path.y, path.z);
boat.boatSpeed = path.speed1;
boat.moveToLocation(path.x, path.y, path.z, path.speed1);
final Collection<PlayerInstance> knownPlayers = boat.getKnownList().getKnownPlayers().values();
if ((knownPlayers == null) || knownPlayers.isEmpty())
{
return path.time;
}
for (PlayerInstance player : knownPlayers)
{
player.sendPacket(boat._vd);
}
if (path.time == 0)
{
path.time = 1;
}
return path.time;
}
return 0;
}
}

View File

@@ -16,7 +16,7 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.instancemanager.BoatManager;
import org.l2jmobius.gameserver.datatables.xml.BoatData;
import org.l2jmobius.gameserver.model.actor.instance.BoatInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.serverpackets.GetOffVehicle;
@@ -26,7 +26,7 @@ import org.l2jmobius.gameserver.network.serverpackets.GetOffVehicle;
*/
public class RequestGetOffVehicle extends GameClientPacket
{
private int _id;
private int _boatId;
private int _x;
private int _y;
private int _z;
@@ -34,7 +34,7 @@ public class RequestGetOffVehicle extends GameClientPacket
@Override
protected void readImpl()
{
_id = readD();
_boatId = readD();
_x = readD();
_y = readD();
_z = readD();
@@ -44,14 +44,12 @@ public class RequestGetOffVehicle extends GameClientPacket
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
if (player == null)
{
return;
}
final BoatInstance boat = BoatManager.getInstance().GetBoat(_id);
final GetOffVehicle gon = new GetOffVehicle(player, boat, _x, _y, _z);
player.broadcastPacket(gon);
final BoatInstance boat = BoatData.getInstance().getBoat(_boatId);
player.broadcastPacket(new GetOffVehicle(player, boat, _x, _y, _z));
}
}

View File

@@ -16,7 +16,7 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.instancemanager.BoatManager;
import org.l2jmobius.gameserver.datatables.xml.BoatData;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.instance.BoatInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.network.serverpackets.GetOnVehicle;
public class RequestGetOnVehicle extends GameClientPacket
{
private int _id;
private int _boatId;
private int _x;
private int _y;
private int _z;
@@ -32,7 +32,7 @@ public class RequestGetOnVehicle extends GameClientPacket
@Override
protected void readImpl()
{
_id = readD();
_boatId = readD();
_x = readD();
_y = readD();
_z = readD();
@@ -42,22 +42,20 @@ public class RequestGetOnVehicle extends GameClientPacket
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
if (player == null)
{
return;
}
final BoatInstance boat = BoatManager.getInstance().GetBoat(_id);
final BoatInstance boat = BoatData.getInstance().getBoat(_boatId);
if (boat == null)
{
return;
}
final GetOnVehicle gon = new GetOnVehicle(player, boat, _x, _y, _z);
player.setInBoatPosition(new Location(_x, _y, _z));
player.getPosition().setXYZ(boat.getPosition().getX(), boat.getPosition().getY(), boat.getPosition().getZ());
player.broadcastPacket(gon);
player.broadcastPacket(new GetOnVehicle(player, boat, _x, _y, _z));
player.revalidateZone(true);
}
}

View File

@@ -17,7 +17,7 @@
package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.instancemanager.BoatManager;
import org.l2jmobius.gameserver.datatables.xml.BoatData;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.instance.BoatInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -26,25 +26,16 @@ import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
public class RequestMoveToLocationInVehicle extends GameClientPacket
{
private final Location _pos = new Location(0, 0, 0);
private final Location _originPos = new Location(0, 0, 0);
private int _boatId;
private Location _targetPos;
private Location _originPos;
@Override
protected void readImpl()
{
int x;
int y;
int z;
_boatId = readD(); // objectId of boat
x = readD();
y = readD();
z = readD();
_pos.setXYZ(x, y, z);
x = readD();
y = readD();
z = readD();
_originPos.setXYZ(x, y, z);
_targetPos = new Location(readD(), readD(), readD());
_originPos = new Location(readD(), readD(), readD());
}
@Override
@@ -62,15 +53,15 @@ public class RequestMoveToLocationInVehicle extends GameClientPacket
}
else
{
final BoatInstance boat = BoatManager.getInstance().GetBoat(_boatId);
final BoatInstance boat = BoatData.getInstance().getBoat(_boatId);
if (boat == null)
{
return;
}
player.setBoat(boat);
player.setInBoat(true);
player.setInBoatPosition(_pos);
player.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO_IN_A_BOAT, new Location(_pos.getX(), _pos.getY(), _pos.getZ(), 0), new Location(_originPos.getX(), _originPos.getY(), _originPos.getZ(), 0));
player.setInBoatPosition(_targetPos);
player.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO_IN_A_BOAT, _targetPos, _originPos);
}
}
}