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); } } }