Boat data moved from CSV to XML.

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

View File

@ -0,0 +1,159 @@
<?xml version='1.0' encoding='utf-8'?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/Boats.xsd">
<path id="1"> <!-- Talking Island to Gludin -->
<point speed1="180" speed2="800" x="-121385" y="261660" z="-3610" time="-12" />
<point speed1="200" speed2="800" x="-127694" y="253312" z="-3610" time="55500" />
<point speed1="250" speed2="800" x="-129274" y="237060" z="-3610" time="65300" />
<point speed1="200" speed2="800" x="-114688" y="139040" z="-3610" time="495900" />
<point speed1="180" speed2="800" x="-109663" y="135704" z="-3610" time="-8" />
<point speed1="180" speed2="800" x="-102151" y="135704" z="-3610" time="-7" />
<point speed1="180" speed2="800" x="-96686" y="140595" z="-3610" time="-6" />
<point speed1="180" speed2="800" x="-95686" y="147718" z="-3610" time="-5" />
<point speed1="180" speed2="800" x="-95686" y="148718" z="-3610" time="-4" />
<point speed1="150" speed2="800" x="-95686" y="149718" z="-3610" time="-3" />
<point speed1="150" speed2="800" x="-95686" y="150514" z="-3610" time="-2" />
</path>
<path id="2"> <!-- Gludin to Talking Island -->
<point speed1="180" speed2="800" x="-95686" y="155514" z="-3610" time="-12" />
<point speed1="250" speed2="800" x="-95686" y="185514" z="-3610" time="111800" />
<point speed1="200" speed2="800" x="-60136" y="238816" z="-3610" time="330200" />
<point speed1="180" speed2="1800" x="-60520" y="259609" z="-3610" time="115800" />
<point speed1="180" speed2="1800" x="-65344" y="261460" z="-3610" time="-8" />
<point speed1="180" speed2="1800" x="-83344" y="261560" z="-3610" time="-7" />
<point speed1="180" speed2="1800" x="-88344" y="261660" z="-3610" time="-6" />
<point speed1="150" speed2="1800" x="-92344" y="261660" z="-3610" time="-5" />
<point speed1="150" speed2="1800" x="-95622" y="261660" z="-3610" time="-4" />
<point speed1="150" speed2="1800" x="-96622" y="261660" z="-3610" time="-3" />
</path>
<path id="3"> <!-- Giran to Talking Island -->
<point speed1="150" speed2="800" x="51914" y="189023" z="-3610" time="-18" />
<point speed1="200" speed2="800" x="60567" y="189789" z="-3610" time="44200" />
<point speed1="250" speed2="800" x="63732" y="197457" z="-3610" time="33600" />
<point speed1="250" speed2="800" x="63732" y="207457" z="-3610" time="40500" />
<point speed1="250" speed2="800" x="60434" y="219306" z="-3610" time="49900" />
<point speed1="300" speed2="800" x="56115" y="225303" z="-3610" time="24700" />
<point speed1="300" speed2="800" x="41634" y="226047" z="-3610" time="51900" />
<point speed1="300" speed2="800" x="27153" y="226791" z="-3610" time="50100" />
<point speed1="300" speed2="800" x="12672" y="227535" z="-3610" time="49400" />
<point speed1="300" speed2="800" x="-1808" y="228280" z="-3610" time="49800" />
<point speed1="300" speed2="800" x="-22165" y="231742" z="-3610" time="69400" />
<point speed1="250" speed2="800" x="-42523" y="235205" z="-3610" time="83200" />
<point speed1="200" speed2="800" x="-68451" y="259960" z="-3610" time="178700" />
<point speed1="180" speed2="800" x="-83344" y="261610" z="-3610" time="-5" />
<point speed1="180" speed2="800" x="-88344" y="261660" z="-3610" time="-4" />
<point speed1="150" speed2="800" x="-92344" y="261660" z="-3610" time="-3" />
<point speed1="150" speed2="1800" x="-96622" y="261660" z="-3610" time="-1" />
</path>
<path id="4"> <!-- Talking Island to Giran -->
<point speed1="180" speed2="800" x="-113925" y="261660" z="-3610" time="-18" />
<point speed1="180" speed2="800" x="-126107" y="249116" z="-3610" time="-17" />
<point speed1="180" speed2="800" x="-126107" y="234499" z="-3610" time="-16" />
<point speed1="180" speed2="800" x="-126107" y="219882" z="-3610" time="-15" />
<point speed1="180" speed2="800" x="-109414" y="204914" z="-3610" time="-14" />
<point speed1="250" speed2="800" x="-92807" y="204914" z="-3610" time="68400" />
<point speed1="250" speed2="800" x="-80425" y="216450" z="-3610" time="69300" />
<point speed1="250" speed2="800" x="-68043" y="227987" z="-3610" time="67900" />
<point speed1="200" speed2="800" x="-60844" y="231369" z="-3610" time="39200" />
<point speed1="200" speed2="800" x="-44915" y="231369" z="-3610" time="80800" />
<point speed1="200" speed2="800" x="-28986" y="231369" z="-3610" time="81900" />
<point speed1="180" speed2="800" x="8233" y="207624" z="-3610" time="-7" />
<point speed1="180" speed2="800" x="21470" y="201503" z="-3610" time="-6" />
<point speed1="150" speed2="800" x="40058" y="195383" z="-3610" time="-5" />
<point speed1="150" speed2="800" x="43022" y="193793" z="-3610" time="-4" />
<point speed1="150" speed2="800" x="45986" y="192203" z="-3610" time="-3" />
<point speed1="150" speed2="1800" x="48950" y="190613" z="-3610" time="-1" />
</path>
<path id="5"> <!-- Gludin to Rune -->
<point speed1="150" speed2="800" x="-95686" y="155514" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="-97727" y="160575" z="-3610" time="-1" />
<point speed1="180" speed2="800" x="-108048" y="158380" z="-3610" time="-1" />
<point speed1="300" speed2="800" x="-107964" y="91102" z="-3610" time="-1" />
<point speed1="300" speed2="800" x="-66492" y="47880" z="-3610" time="-1" />
<point speed1="250" speed2="800" x="-56257" y="40932" z="-3610" time="-1" />
<point speed1="300" speed2="800" x="-33367" y="16345" z="-3610" time="-1" />
<point speed1="250" speed2="800" x="-27195" y="1065" z="-3610" time="-1" />
<point speed1="250" speed2="800" x="34000" y="1065" z="-3610" time="-1" />
<point speed1="180" speed2="800" x="44914" y="-25021" z="-3610" time="-1" />
<point speed1="180" speed2="800" x="43496" y="-27864" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="39077" y="-32922" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="36650" y="-35468" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="34400" y="-37670" z="-3610" time="-1" />
</path>
<path id="6"> <!-- Rune to Gludin -->
<point speed1="150" speed2="800" x="31622" y="-40501" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="2493" y="-29776" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="-13722" y="3629" z="-3610" time="421823" />
<point speed1="180" speed2="800" x="-28875" y="15029" z="-3610" time="105347" />
<point speed1="200" speed2="800" x="-33367" y="16345" z="-3610" time="23404" />
<point speed1="250" speed2="800" x="-56257" y="40932" z="-3610" time="134371" />
<point speed1="250" speed2="800" x="-66492" y="47880" z="-3610" time="49482" />
<point speed1="300" speed2="800" x="-107964" y="91102" z="-3610" time="199668" />
<point speed1="300" speed2="800" x="-107531" y="126510" z="-3610" time="118035" />
<point speed1="300" speed2="1800" x="-96686" y="140595" z="-3610" time="59255" />
<point speed1="250" speed2="1800" x="-95686" y="147718" z="-3610" time="28771" />
<point speed1="150" speed2="1800" x="-95686" y="148718" z="-3610" time="-1" />
<point speed1="150" speed2="1800" x="-95686" y="149718" z="-3610" time="-1" />
<point speed1="150" speed2="1800" x="-95686" y="150500" z="-3610" time="-1" />
</path>
<path id="7"> <!-- Innandril tour -->
<point speed1="150" speed2="800" x="105129" y="226240" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="90604" y="238797" z="-3610" time="128002" />
<point speed1="150" speed2="800" x="74853" y="237943" z="-3610" time="105161" />
<point speed1="150" speed2="800" x="68207" y="235399" z="-3610" time="47442" />
<point speed1="150" speed2="800" x="63226" y="230487" z="-3610" time="46637" />
<point speed1="150" speed2="800" x="61843" y="224797" z="-3610" time="39038" />
<point speed1="150" speed2="800" x="61822" y="203066" z="-3610" time="144873" />
<point speed1="150" speed2="800" x="59051" y="197685" z="-3610" time="40350" />
<point speed1="150" speed2="800" x="54048" y="195298" z="-3610" time="36955" />
<point speed1="150" speed2="800" x="41609" y="195687" z="-3610" time="82967" />
<point speed1="150" speed2="800" x="35821" y="200284" z="-3610" time="49276" />
<point speed1="150" speed2="800" x="35567" y="205265" z="-3610" time="33250" />
<point speed1="150" speed2="800" x="35617" y="222471" z="-3610" time="114707" />
<point speed1="150" speed2="800" x="37932" y="226588" z="-3610" time="31488" />
<point speed1="150" speed2="800" x="42932" y="229394" z="-3610" time="38224" />
<point speed1="150" speed2="800" x="74324" y="245231" z="-3610" time="234404" />
<point speed1="150" speed2="800" x="81872" y="250314" z="-3610" time="60666" />
<point speed1="150" speed2="800" x="101692" y="249882" z="-3610" time="132165" />
<point speed1="150" speed2="800" x="107907" y="256073" z="-3610" time="58483" />
<point speed1="150" speed2="800" x="112317" y="257133" z="-3610" time="30237" />
<point speed1="150" speed2="800" x="126273" y="255313" z="-3610" time="93828" />
<point speed1="150" speed2="800" x="128067" y="250961" z="-3610" time="31382" />
<point speed1="150" speed2="800" x="128520" y="238249" z="-3610" time="84800" />
<point speed1="150" speed2="800" x="126428" y="235072" z="-3610" time="25359" />
<point speed1="150" speed2="800" x="121843" y="234656" z="-3610" time="30692" />
<point speed1="150" speed2="800" x="120096" y="234268" z="-3610" time="11930" />
<point speed1="150" speed2="800" x="118572" y="233046" z="-3610" time="13023" />
<point speed1="150" speed2="800" x="117671" y="228951" z="-3610" time="27953" />
<point speed1="150" speed2="800" x="115936" y="226540" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="113628" y="226240" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="111300" y="226240" z="-3610" time="-1" />
<point speed1="150" speed2="800" x="111264" y="226240" z="-3610" time="-1" />
</path>
<path id="8"> <!-- Rune to Primeval -->
<point speed1="180" speed2="1800" x="40500" y="-35767" z="-3610" time="-1" />
<point speed1="200" speed2="1800" x="42200" y="-33000" z="-3610" time="-1" />
<point speed1="250" speed2="1800" x="40439" y="-30475" z="-3610" time="-1" />
<point speed1="300" speed2="1800" x="34439" y="-29475" z="-3610" time="-1" />
<point speed1="300" speed2="1800" x="20439" y="-33475" z="-3610" time="-1" />
<point speed1="300" speed2="1800" x="11963" y="-33475" z="-3610" time="-1" />
<point speed1="250" speed2="1800" x="8063" y="-32580" z="-3610" time="-1" />
<point speed1="180" speed2="1800" x="5063" y="-29700" z="-3610" time="-1" />
<point speed1="180" speed2="1800" x="8063" y="-27276" z="-3610" time="-1" />
<point speed1="180" speed2="1800" x="10363" y="-27276" z="-3610" time="-1" />
</path>
<path id="9"> <!-- Primeval to Rune -->
<point speed1="180" speed2="1800" x="11800" y="-27276" z="-3610" time="-1" />
<point speed1="200" speed2="1800" x="13800" y="-28300" z="-3610" time="-1" />
<point speed1="250" speed2="1800" x="15700" y="-29700" z="-3610" time="-1" />
<point speed1="250" speed2="1800" x="25300" y="-35700" z="-3610" time="-1" />
<point speed1="200" speed2="1800" x="28300" y="-36000" z="-3610" time="-1" />
<point speed1="180" speed2="1800" x="31300" y="-35767" z="-3610" time="-1" />
<point speed1="180" speed2="1800" x="37890" y="-35765" z="-3610" time="-1" />
</path>
<!-- Load after paths, since boats need paths on initialization. -->
<boat name="TI_Gludin_TI" id="1" spawnX="-96622" spawnY="261660" spawnZ="-3610" heading="32768" pathIdA="1" ticketA="1074" xTeleNoTicketA="-96777" yTeleNoTicketA="258970" zTeleNoTicketA="-3623" announcerA=" Passenger Boat Info" message10A="The ferry arrived at Talking Island Harbor. The ferry will leave for Gludin Harbor after anchoring for ten minutes." message5A="The ferry will leave for Gludin Harbor in five minutes." message1A="The ferry will leave for Gludin Harbor in one minute." message0A="The ferry will be leaving soon for Gludin Harbor." messageBeginA="The ferry is leaving for Gludin Harbor." pathIdB="2" ticketB="1075" xTeleNoTicketB="-90015" yTeleNoTicketB="150422" zTeleNoTicketB="-3610" announcerB=" Passenger Boat Info" message10B="The ferry has arrived at Gludin Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5B="The ferry will leave for Talking Island Harbor in five minutes." message1B="The ferry will leave for Talking Island Harbor in one minute." message0B="The ferry will be leaving soon for Talking Island Harbor." messageBeginB="The ferry is leaving for Talking Island Harbor." />
<boat name="TI_Giran_TI" id="2" spawnX="48950" spawnY="190613" spawnZ="-3610" heading="60800" pathIdA="3" ticketA="3946" xTeleNoTicketA="46763" yTeleNoTicketA="187041" zTeleNoTicketA="-3451" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Giran Harbor. The ferry will leave for Talking Island Harbor after anchoring for ten minutes." message5A="We depart for Talking Island Harbor in five minutes." message1A="We depart for Talking Island Harbor in one minute." message0A="All aboard for Talking Island!" messageBeginA="We are now leaving for Talking Island!" pathIdB="4" ticketB="3945" xTeleNoTicketB="-96777" yTeleNoTicketB="258970" zTeleNoTicketB="-3623" announcerB=" Passenger Boat Info" message10B="The ferry arrived at Talking Island Harbor.The ferry will leave for Giran Harbor after anchoring for ten minutes." message5B="The ferry will leave for Giran Harbor in five minutes." message1B="The ferry will leave for Giran Harbor in one minute. Those wishing to ride should make haste to get on." message0B="The ferry will be leaving soon for Giran Harbor." messageBeginB="The ferry is leaving for Giran Harbor." />
<boat name="Gludin_Rune_Gludin" id="3" spawnX="-95686" spawnY="150514" spawnZ="-3610" heading="16723" pathIdA="5" ticketA="7905" xTeleNoTicketA="-90015" yTeleNoTicketA="150422" zTeleNoTicketA="-3000" announcerA=" Passenger Boat Info" message10A="The ferry has arrived at Gludin Harbor. Departure for Rune Harbor will take place after anchoring for ten minutes." message5A="Departure for Rune Harbor will take place in five minutes!" message1A="Departure for Rune Harbor will take place in one minute!" message0A="Make haste! We will be departing for Rune shortly." messageBeginA="We are now departing for Rune Harbor. Hold on and enjoy the ride!" pathIdB="6" ticketB="7904" xTeleNoTicketB="35929" yTeleNoTicketB="-39403" zTeleNoTicketB="-3152" announcerB=" Passenger Boat Info" message10B="Arrived at Rune Harbor. Departure for Gludin Harbor will take place after anchoring for ten minutes" message5B="Departure for Gludin Harbor will take place in five minutes." message1B="Departure for Gludin Harbor will take place in one minute." message0B="Make haste! We will be departing for Gludin shortly." messageBeginB="We are now departing for Gludin Harbor. Hold on and enjoy the ride!" />
<boat name="Innadril_Tour" id="4" spawnX="111264" spawnY="226240" spawnZ="-3610" heading="32768" pathIdA="7" ticketA="0" xTeleNoTicketA="107092" yTeleNoTicketA="219098" zTeleNoTicketA="-3952" announcerA="Passenger Boat Info" message10A="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5A="The Innadril pleasure boat will leave in five minutes." message1A="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0A="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginA="Innadril pleasure boat is leaving." pathIdB="7" ticketB="0" xTeleNoTicketB="107092" yTeleNoTicketB="219098" zTeleNoTicketB="-3952" announcerB="Passenger Boat Info" message10B="The Innadril pleasure boat has arrived. It will anchor for ten minutes." message5B="The Innadril pleasure boat will leave in five minutes." message1B="The Innadril pleasure boat will leave in one minute. Those wishing to ride should make haste to get on." message0B="Innadril pleasure boat is leaving soon. Those wishing to ride should make haste to get on." messageBeginB="Innadril pleasure boat is leaving." />
<boat name="Rune_Primeval_Rune" id="5" spawnX="37885" spawnY="-35767" spawnZ="-3615" heading="0" pathIdA="8" ticketA="8924" xTeleNoTicketA="34513" yTeleNoTicketA="-38009" zTeleNoTicketA="-3610" announcerA="Passenger Boat Info" message10A="The boat for Primeval Isle has arrived. It will anchor for ten minutes." message5A="The boat for Primeval Isle will leave in five minutes." message1A="The boat for Primeval Isle will leave in one minute. Those wishing to ride should make haste to get on." message0A="The boat for Primeval Isle is leaving soon. Those wishing to ride should make haste to get on." messageBeginA="The boat for Primeval Isle is leaving." pathIdB="9" ticketB="8925" xTeleNoTicketB="10449" yTeleNoTicketB="-25180" zTeleNoTicketB="-3688" announcerB="Passenger Boat Info" message10B="The boat from Rune arrived. It will anchor for ten minutes." message5B="The boat for Rune will leave in five minutes." message1B="The boat for Rune will leave in one minute. Those wishing to ride should make haste to get on." message0B="The boat for Rune is leaving soon. Those wishing to ride should make haste to get on." messageBeginB="The boat for Rune is leaving." />
</list>

View File

@ -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.
1 #C5 messages - done by Enforcer
2 #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
3 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.
4 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.
5 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!
6 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.
7 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.

View File

@ -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;
1 #C4-C5 Initial commit by ettore85a. Added route Gludin-Rune-Gludin, refactored all routes (timing,speed,nbpoits) by Enforcer.
2 #id;nbpoint;(speed1;speed2;x;y;z;time(ms))
3 #
4 # Speed1 : Speed of the boat
5 # Speed2 : rotation speed of the boat
6 # time : - > 0: if the boat has reached the point before the time is spent, the boat wait !
7 # else if the time is spent and the boat has not reached the point, server will pass to the next point
8 # - < 0: lets server calculate when the boat reaches the point (/!\ don't use time < 0 when you do a rotation with the boat.)
9 #From Talkin To Gludin
10 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;
11
12 #From Gludin To Talkin
13 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;
14 #From Giran To Talkin
15 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;
16 #From Talkin To Giran
17 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;
18 #From Gludin to Rune
19 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;
20 #From Rune to Gludin
21 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;
22 #Innandril tour
23 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;
24 #Rune to Pimeval
25 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;
26 #Pimeval to Rune
27 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;

View File

@ -0,0 +1,65 @@
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="list">
<xs:complexType>
<xs:sequence>
<xs:element name="path" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="point" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:short" name="speed1" use="required"/>
<xs:attribute type="xs:short" name="speed2" use="required"/>
<xs:attribute type="xs:int" name="x" use="required"/>
<xs:attribute type="xs:int" name="y" use="required"/>
<xs:attribute type="xs:short" name="z" use="required"/>
<xs:attribute type="xs:int" name="time" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:byte" name="id" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="boat" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name" use="required"/>
<xs:attribute type="xs:byte" name="id" use="required"/>
<xs:attribute type="xs:int" name="spawnX" use="required"/>
<xs:attribute type="xs:int" name="spawnY" use="required"/>
<xs:attribute type="xs:short" name="spawnZ" use="required"/>
<xs:attribute type="xs:int" name="heading" use="required"/>
<xs:attribute type="xs:byte" name="pathIdA" use="required"/>
<xs:attribute type="xs:short" name="ticketA" use="required"/>
<xs:attribute type="xs:int" name="xTeleNoTicketA" use="required"/>
<xs:attribute type="xs:int" name="yTeleNoTicketA" use="required"/>
<xs:attribute type="xs:short" name="zTeleNoTicketA" use="required"/>
<xs:attribute type="xs:string" name="announcerA" use="required"/>
<xs:attribute type="xs:string" name="message10A" use="required"/>
<xs:attribute type="xs:string" name="message5A" use="required"/>
<xs:attribute type="xs:string" name="message1A" use="required"/>
<xs:attribute type="xs:string" name="message0A" use="required"/>
<xs:attribute type="xs:string" name="messageBeginA" use="required"/>
<xs:attribute type="xs:byte" name="pathIdB" use="required"/>
<xs:attribute type="xs:short" name="ticketB" use="required"/>
<xs:attribute type="xs:int" name="xTeleNoTicketB" use="required"/>
<xs:attribute type="xs:int" name="yTeleNoTicketB" use="required"/>
<xs:attribute type="xs:short" name="zTeleNoTicketB" use="required"/>
<xs:attribute type="xs:string" name="announcerB" use="required"/>
<xs:attribute type="xs:string" name="message10B" use="required"/>
<xs:attribute type="xs:string" name="message5B" use="required"/>
<xs:attribute type="xs:string" name="message1B" use="required"/>
<xs:attribute type="xs:string" name="message0B" use="required"/>
<xs:attribute type="xs:string" name="messageBeginB" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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