Boat data moved from CSV to XML.
This commit is contained in:
parent
393e53514c
commit
78bf4dc9b3
159
L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml
vendored
Normal file
159
L2J_Mobius_C6_Interlude/dist/game/data/Boats.xml
vendored
Normal 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>
|
@ -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,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;
|
|
65
L2J_Mobius_C6_Interlude/dist/game/data/xsd/Boats.xsd
vendored
Normal file
65
L2J_Mobius_C6_Interlude/dist/game/data/xsd/Boats.xsd
vendored
Normal 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>
|
@ -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();
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user