From 78bf4dc9b3d861a8479d58de501b372fcf046fe8 Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Wed, 29 Jan 2020 00:21:41 +0000
Subject: [PATCH] Boat data moved from CSV to XML.
---
.../dist/game/data/Boats.xml | 159 +++++++++++
.../dist/game/data/csv/boat.csv | 12 -
.../dist/game/data/csv/boatpath.csv | 35 ---
.../dist/game/data/xsd/Boats.xsd | 65 +++++
.../org/l2jmobius/gameserver/GameServer.java | 6 +-
.../gameserver/datatables/xml/BoatData.java | 196 +++++++++++++
.../instancemanager/BoatManager.java | 233 ----------------
.../model/actor/instance/BoatInstance.java | 264 ++----------------
.../model/holders/BoatPathHolder.java | 109 ++++++++
.../clientpackets/RequestGetOffVehicle.java | 12 +-
.../clientpackets/RequestGetOnVehicle.java | 12 +-
.../RequestMoveToLocationInVehicle.java | 25 +-
12 files changed, 575 insertions(+), 553 deletions(-)
create mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml
delete mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/csv/boat.csv
delete mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/csv/boatpath.csv
create mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/xsd/Boats.xsd
create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java
delete mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/BoatManager.java
create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/holders/BoatPathHolder.java
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml b/L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml
new file mode 100644
index 0000000000..4967fef8c7
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/csv/boat.csv b/L2J_Mobius_C6_Interlude/dist/game/data/csv/boat.csv
deleted file mode 100644
index 6b39ff768b..0000000000
--- a/L2J_Mobius_C6_Interlude/dist/game/data/csv/boat.csv
+++ /dev/null
@@ -1,12 +0,0 @@
-#C5 messages - done by Enforcer
-#name;id;spawnx;spawny;spawnz;heading;IdWaypoint1;Ticket1;xtelenoticket;ytelenoticket;ztelenoticket;annonceur1;message10_1;message5_1;message1_1;message0_1;message_begin_1;;IdWaypoint2;Ticket2;xtelenoticket;ytelenoticket;ztelenoticket;annonceur2;message10_2;message5_2;message1_2;message0_2;message_begin_2
-
-TI_Gludin_TI;1;-96622;261660;-3610;32768;1;1074;-96777;258970;-3623; Passenger Boat Info;The ferry arrived at Talking Island Harbor. The ferry will leave for Gludin Harbor after anchoring for ten minutes.;The ferry will leave for Gludin Harbor in five minutes.;The ferry will leave for Gludin Harbor in one minute.;The ferry will be leaving soon for Gludin Harbor.;The ferry is leaving for Gludin Harbor.;2;1075;-90015;150422;-3610; Passenger Boat Info;The ferry has arrived at Gludin Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes.;The ferry will leave for Talking Island Harbor in five minutes.;The ferry will leave for Talking Island Harbor in one minute.;The ferry will be leaving soon for Talking Island Harbor.;The ferry is leaving for Talking Island Harbor.
-
-TI_Giran_TI;2;48950;190613;-3610;60800;3;3946;46763;187041;-3451; Passenger Boat Info;The ferry has arrived at Giran Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes.;We depart for Talking Island Harbor in five minutes.;We depart for Talking Island Harbor in one minute.;All aboard for Talking Island!;We are now leaving for Talking Island!;4;3945;-96777;258970;-3623; Passenger Boat Info;The ferry arrived at Talking Island Harbor.The ferry will leave for Giran Harbor after anchoring for ten minutes.;The ferry will leave for Giran Harbor in five minutes.;The ferry will leave for Giran Harbor in one minute.Those wishing to ride should make haste to get on.;The ferry will be leaving soon for Giran Harbor.;The ferry is leaving for Giran Harbor.
-
-Gludin_Rune_Gludin;3;-95686;150514;-3610;16723;5;7905;-90015;150422;-3000; Passenger Boat Info;The ferry has arrived at Gludin Harbor. Departure for Rune Harbor will take place after anchoring for ten minutes.;Departure for Rune Harbor will take place in five minutes!;Departure for Rune Harbor will take place in one minute!;Make haste! We will be departing for Rune shortly.;We are now departing for Rune Harbor. Hold on and enjoy the ride!;6;7904;35929;-39403;-3152; Passenger Boat Info;Arrived at Rune Harbor. Departure for Gludin Harbor will take place after anchoring for ten minutes;Departure for Gludin Harbor will take place in five minutes.;Departure for Gludin Harbor will take place in one minute.;Make haste! We will be departing for Gludin shortly.;We are now departing for Gludin Harbor. Hold on and enjoy the ride!
-
-Innadril_Tour;4;111264;226240;-3610;32768;7;0;107092;219098;-3952;Passenger Boat Info;The Innadril pleasure boat has arrived. It will anchor for ten minutes.;The Innadril pleasure boat will leave in five minutes.;The Innadril pleasure boat will leave in one minute.Those wishing to ride should make haste to get on.;Innadril pleasure boat is leaving soon.Those wishing to ride should make haste to get on.;Innadril pleasure boat is leaving.;7;0;107092;219098;-3952;Passenger Boat Info;The Innadril pleasure boat has arrived. It will anchor for ten minutes.;The Innadril pleasure boat will leave in five minutes.;The Innadril pleasure boat will leave in one minute.Those wishing to ride should make haste to get on.;Innadril pleasure boat is leaving soon.Those wishing to ride should make haste to get on.;Innadril pleasure boat is leaving.
-
-Rune_Primeval_Rune;5;37885;-35767;-3615;0;8;8924;34513;-38009;-3610;Passenger Boat Info;The boat for Primeval Isle has arrived. It will anchor for ten minutes.;The boat for Primeval Isle will leave in five minutes.;The boat for Primeval Isle will leave in one minute.Those wishing to ride should make haste to get on.;The boat for Primeval Isle is leaving soon.Those wishing to ride should make haste to get on.;The boat for Primeval Isle is leaving.;9;8925;10449;-25180;-3688;Passenger Boat Info;The boat from Rune arrived. It will anchor for ten minutes.;The boat for Rune will leave in five minutes.;The boat for Rune will leave in one minute.Those wishing to ride should make haste to get on.;The boat for Rune is leaving soon.Those wishing to ride should make haste to get on.;The boat for Rune is leaving.
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/csv/boatpath.csv b/L2J_Mobius_C6_Interlude/dist/game/data/csv/boatpath.csv
deleted file mode 100644
index f4621d71ae..0000000000
--- a/L2J_Mobius_C6_Interlude/dist/game/data/csv/boatpath.csv
+++ /dev/null
@@ -1,35 +0,0 @@
-#C4-C5 Initial commit by ettore85a. Added route Gludin-Rune-Gludin, refactored all routes (timing,speed,nbpoits) by Enforcer.
-#id;nbpoint;(speed1;speed2;x;y;z;time(ms))
-#
-# Speed1 : Speed of the boat
-# Speed2 : rotation speed of the boat
-# time : - > 0: if the boat has reached the point before the time is spent, the boat wait !
-# else if the time is spent and the boat has not reached the point, server will pass to the next point
-# - < 0: lets server calculate when the boat reaches the point (/!\ don't use time < 0 when you do a rotation with the boat.)
-
-#From Talkin To Gludin
-1;11;180;800;-121385;261660;-3610;-12;200;800;-127694;253312;-3610;55500;250;800;-129274;237060;-3610;65300;200;800;-114688;139040;-3610;495900;180;800;-109663;135704;-3610;-8;180;800;-102151;135704;-3610;-7;180;800;-96686;140595;-3610;-6;180;800;-95686;147718;-3610;-5;180;800;-95686;148718;-3610;-4;150;800;-95686;149718;-3610;-3;150;800;-95686;150514;-3610;-2;
-
-#From Gludin To Talkin
-2;10;180;800;-95686;155514;-3610;-12;250;800;-95686;185514;-3610;111800;200;800;-60136;238816;-3610;330200;180;1800;-60520;259609;-3610;115800;180;1800;-65344;261460;-3610;-8;180;1800;-83344;261560;-3610;-7;180;1800;-88344;261660;-3610;-6;150;1800;-92344;261660;-3610;-5;150;1800;-95622;261660;-3610;-4;150;1800;-96622;261660;-3610;-3;
-
-#From Giran To Talkin
-3;17;150;800;51914;189023;-3610;-18;200;800;60567;189789;-3610;44200;250;800;63732;197457;-3610;33600;250;800;63732;207457;-3610;40500;250;800;60434;219306;-3610;49900;300;800;56115;225303;-3610;24700;300;800;41634;226047;-3610;51900;300;800;27153;226791;-3610;50100;300;800;12672;227535;-3610;49400;300;800;-1808;228280;-3610;49800;300;800;-22165;231742;-3610;69400;250;800;-42523;235205;-3610;83200;200;800;-68451;259960;-3610;178700;180;800;-83344;261610;-3610;-5;180;800;-88344;261660;-3610;-4;150;800;-92344;261660;-3610;-3;150;1800;-96622;261660;-3610;-1;
-
-#From Talkin To Giran
-4;17;180;800;-113925;261660;-3610;-18;180;800;-126107;249116;-3610;-17;180;800;-126107;234499;-3610;-16;180;800;-126107;219882;-3610;-15;180;800;-109414;204914;-3610;-14;250;800;-92807;204914;-3610;68400;250;800;-80425;216450;-3610;69300;250;800;-68043;227987;-3610;67900;200;800;-60844;231369;-3610;39200;200;800;-44915;231369;-3610;80800;200;800;-28986;231369;-3610;81900;180;800;8233;207624;-3610;-7;180;800;21470;201503;-3610;-6;150;800;40058;195383;-3610;-5;150;800;43022;193793;-3610;-4;150;800;45986;192203;-3610;-3;150;1800;48950;190613;-3610;-1;
-
-#From Gludin to Rune
-5;14;150;800;-95686;155514;-3610;-1;150;800;-97727;160575;-3610;-1;180;800;-108048;158380;-3610;-1;300;800;-107964;91102;-3610;-1;300;800;-66492;47880;-3610;-1;250;800;-56257;40932;-3610;-1;300;800;-33367;16345;-3610;-1;250;800;-27195;1065;-3610;-1;250;800;34000;1065;-3610;-1;180;800;44914;-25021;-3610;-1;180;800;43496;-27864;-3610;-1;150;800;39077;-32922;-3610;-1;150;800;36650;-35468;-3610;-1;150;800;34400;-37670;-3610;-1;
-
-#From Rune to Gludin
-6;13;150;800;31622;-40501;-3610;-1;150;800;2493;-29776;-3610;-1;150;800;-13722;3629;-3610;421823;180;800;-28875;15029;-3610;105347;200;800;-33367;16345;-3610;23404;250;800;-56257;40932;-3610;134371;250;800;-66492;47880;-3610;49482;300;800;-107964;91102;-3610;199668;300;800;-107531;126510;-3610;118035;300;1800;-96686;140595;-3610;59255;250;1800;-95686;147718;-3610;28771;150;1800;-95686;148718;-3610;-1;150;1800;-95686;149718;-3610;-1;150;1800;-95686;150500;-3610;-1;
-
-#Innandril tour
-7;32;150;800;105129;226240;-3610;-1;150;800;90604;238797;-3610;128002;150;800;74853;237943;-3610;105161;150;800;68207;235399;-3610;47442;150;800;63226;230487;-3610;46637;150;800;61843;224797;-3610;39038;150;800;61822;203066;-3610;144873;150;800;59051;197685;-3610;40350;150;800;54048;195298;-3610;36955;150;800;41609;195687;-3610;82967;150;800;35821;200284;-3610;49276;150;800;35567;205265;-3610;33250;150;800;35617;222471;-3610;114707;150;800;37932;226588;-3610;31488;150;800;42932;229394;-3610;38224;150;800;74324;245231;-3610;234404;150;800;81872;250314;-3610;60666;150;800;101692;249882;-3610;132165;150;800;107907;256073;-3610;58483;150;800;112317;257133;-3610;30237;150;800;126273;255313;-3610;93828;150;800;128067;250961;-3610;31382;150;800;128520;238249;-3610;84800;150;800;126428;235072;-3610;25359;150;800;121843;234656;-3610;30692;150;800;120096;234268;-3610;11930;150;800;118572;233046;-3610;13023;150;800;117671;228951;-3610;27953;150;800;115936;226540;-3610;-1;150;800;113628;226240;-3610;-1;150;800;111300;226240;-3610;-1;150;800;111264;226240;-3610;-1;
-
-#Rune to Pimeval
-8;10;180;1800;40500;-35767;-3610;-1;200;1800;42200;-33000;-3610;-1;250;1800;40439;-30475;-3610;-1;300;1800;34439;-29475;-3610;-1;300;1800;20439;-33475;-3610;-1;300;1800;11963;-33475;-3610;-1;250;1800;8063;-32580;-3610;-1;180;1800;5063;-29700;-3610;-1;180;1800;8063;-27276;-3610;-1;180;1800;10363;-27276;-3610;-1;
-
-#Pimeval to Rune
-9;7;180;1800;11800;-27276;-3610;-1;200;1800;13800;-28300;-3610;-1;250;1800;15700;-29700;-3610;-1;250;1800;25300;-35700;-3610;-1;200;1800;28300;-36000;-3610;-1;180;1800;31300;-35767;-3610;-1;180;1800;37890;-35765;-3610;-1;
\ 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
new file mode 100644
index 0000000000..49542a56a1
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Boats.xsd
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java
index 0d887227f2..5daba28be3 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java
@@ -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();
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java
new file mode 100644
index 0000000000..22b0f0d821
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java
@@ -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 .
+ */
+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 _boats = new HashMap<>();
+ private final Map> _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());
+ 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 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();
+ }
+}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/BoatManager.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/BoatManager.java
deleted file mode 100644
index 21c9eed8fc..0000000000
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/BoatManager.java
+++ /dev/null
@@ -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 .
- */
-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 _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();
- }
-}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/BoatInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/BoatInstance.java
index 162d4913e0..3279221e42 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/BoatInstance.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/BoatInstance.java
@@ -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 _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 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 _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 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 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
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/holders/BoatPathHolder.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/holders/BoatPathHolder.java
new file mode 100644
index 0000000000..910cfbdd71
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/holders/BoatPathHolder.java
@@ -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 .
+ */
+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 _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 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 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;
+ }
+}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGetOffVehicle.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGetOffVehicle.java
index e1bfd676a3..6a5d857b29 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGetOffVehicle.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGetOffVehicle.java
@@ -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));
}
}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGetOnVehicle.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGetOnVehicle.java
index 0cffdfbaf6..3c653e2134 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGetOnVehicle.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGetOnVehicle.java
@@ -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);
}
}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java
index cd09de19b0..ab76afb5ff 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java
@@ -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);
}
}
}