Hellbound rework.
This commit is contained in:
10
trunk/dist/game/config/Custom.properties
vendored
10
trunk/dist/game/config/Custom.properties
vendored
@ -403,16 +403,6 @@ AnnouncePvpMsg = $killer has defeated $target
|
|||||||
ChatAdmin = True
|
ChatAdmin = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
# Hellbound Status Voice Command
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# This option will enable using of the voice commands .hellbound
|
|
||||||
# for retrieving information about current Hellbound level and trust.
|
|
||||||
# Default: False
|
|
||||||
HellboundStatus = False
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Multilingual support
|
# Multilingual support
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
6
trunk/dist/game/config/General.properties
vendored
6
trunk/dist/game/config/General.properties
vendored
@ -873,9 +873,9 @@ HBCEFairPlay = True
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Hellbound Settings
|
# Hellbound Settings
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# If true, players can enter the Hellbound island without any quests
|
# Minimum player level to enter Hellbound.
|
||||||
# Default: False
|
# Default: 99
|
||||||
HellboundWithoutQuest = False
|
HellboundLevelLimit = 99
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Arcan Ritual setings
|
# Arcan Ritual setings
|
||||||
|
4
trunk/dist/game/config/Rates.properties
vendored
4
trunk/dist/game/config/Rates.properties
vendored
@ -60,10 +60,6 @@ RateSiegeGuardsPrice = 1
|
|||||||
# Default: 1.
|
# Default: 1.
|
||||||
RateExtractable = 1.
|
RateExtractable = 1.
|
||||||
|
|
||||||
# Hellbound trust increase/decrease multipliers
|
|
||||||
RateHellboundTrustIncrease = 1
|
|
||||||
RateHellboundTrustDecrease = 1
|
|
||||||
|
|
||||||
# Quest Multipliers
|
# Quest Multipliers
|
||||||
# Warning: Many quests need to be rewritten
|
# Warning: Many quests need to be rewritten
|
||||||
# for this setting to work properly.
|
# for this setting to work properly.
|
||||||
|
4
trunk/dist/game/config/adminCommands.xml
vendored
4
trunk/dist/game/config/adminCommands.xml
vendored
@ -302,10 +302,6 @@
|
|||||||
<!-- ADMIN HEAL -->
|
<!-- ADMIN HEAL -->
|
||||||
<admin command="admin_heal" accessLevel="100" />
|
<admin command="admin_heal" accessLevel="100" />
|
||||||
|
|
||||||
<!-- ADMIN HELLBOUND -->
|
|
||||||
<admin command="admin_hellbound_setlevel" accessLevel="100" />
|
|
||||||
<admin command="admin_hellbound" accessLevel="100" />
|
|
||||||
|
|
||||||
<!-- ADMIN HTML -->
|
<!-- ADMIN HTML -->
|
||||||
<admin command="admin_html" accessLevel="100" />
|
<admin command="admin_html" accessLevel="100" />
|
||||||
<admin command="admin_loadhtml" accessLevel="100" />
|
<admin command="admin_loadhtml" accessLevel="100" />
|
||||||
|
78
trunk/dist/game/data/Routes.xml
vendored
78
trunk/dist/game/data/Routes.xml
vendored
@ -19,84 +19,6 @@
|
|||||||
<point X="81918" Y="148352" Z="-3467" delay="0" run="true" />
|
<point X="81918" Y="148352" Z="-3467" delay="0" run="true" />
|
||||||
<point X="81937" Y="149173" Z="-3469" delay="0" run="true" />
|
<point X="81937" Y="149173" Z="-3469" delay="0" run="true" />
|
||||||
</route>
|
</route>
|
||||||
<!-- Hellbound Town routes for Patrols -->
|
|
||||||
<route name="castletownguard01" repeat="true" repeatStyle="random">
|
|
||||||
<target id="22360" spawnX="14840" spawnY="251949" spawnZ="-2009" /> <!-- Town Patrolman -->
|
|
||||||
<point X="14840" Y="251949" Z="-1992" delay="0" run="false" />
|
|
||||||
<point X="14679" Y="253399" Z="-2016" delay="0" run="false" />
|
|
||||||
</route>
|
|
||||||
<route name="castletownguard02" repeat="true" repeatStyle="random">
|
|
||||||
<target id="22360" spawnX="16082" spawnY="251790" spawnZ="-2000" /> <!-- Town Patrolman -->
|
|
||||||
<point X="16082" Y="251790" Z="-1992" delay="0" run="false" />
|
|
||||||
<point X="16388" Y="252456" Z="-2000" delay="0" run="false" />
|
|
||||||
<point X="16093" Y="254443" Z="-2064" delay="0" run="false" />
|
|
||||||
</route>
|
|
||||||
<route name="castletownguard03" repeat="true" repeatStyle="random">
|
|
||||||
<target id="22360" spawnX="16524" spawnY="255244" spawnZ="-2080" /> <!-- Town Patrolman -->
|
|
||||||
<point X="16524" Y="255244" Z="-2072" delay="0" run="false" />
|
|
||||||
<point X="17211" Y="256290" Z="-2064" delay="0" run="false" />
|
|
||||||
<point X="18805" Y="256302" Z="-2088" delay="0" run="false" />
|
|
||||||
</route>
|
|
||||||
<route name="castletownguard04" repeat="true" repeatStyle="random">
|
|
||||||
<target id="22360" spawnX="17670" spawnY="252256" spawnZ="-2022" /> <!-- Town Patrolman -->
|
|
||||||
<point X="17344" Y="251070" Z="-1952" delay="0" run="false" />
|
|
||||||
<point X="18708" Y="250659" Z="-1992" delay="0" run="false" />
|
|
||||||
<point X="19533" Y="250667" Z="-2016" delay="0" run="false" />
|
|
||||||
</route>
|
|
||||||
<!-- Anomic Foundry routes for Lesser and Greater Evil -->
|
|
||||||
<route name="malign_conveyor_1_1" repeat="true" repeatStyle="conveyor">
|
|
||||||
<target id="22398" spawnX="27883" spawnY="248613" spawnZ="-3209" /> <!-- Lesser Evil -->
|
|
||||||
<point X="27886" Y="248609" Z="-3208" delay="0" run="true" />
|
|
||||||
<point X="28150" Y="247726" Z="-3272" delay="0" run="true" />
|
|
||||||
<point X="27340" Y="246649" Z="-3680" delay="0" run="true" />
|
|
||||||
<point X="27646" Y="245922" Z="-3672" delay="0" run="true" />
|
|
||||||
<!-- <point X="28247" Y="245907" Z="-2552" delay="0" run="true" /> --> <!-- retail -->
|
|
||||||
<point X="28070" Y="245920" Z="-3698" delay="0" run="true" /> <!-- custom -->
|
|
||||||
<point X="28491" Y="245926" Z="-3698" delay="0" run="true" /> <!-- custom -->
|
|
||||||
<point X="29074" Y="245889" Z="-3672" delay="0" run="true" />
|
|
||||||
<point X="29182" Y="244811" Z="-3688" delay="0" run="true" />
|
|
||||||
<point X="28925" Y="244462" Z="-3698" delay="0" run="true" /> <!-- custom -->
|
|
||||||
<!-- <point X="28770" Y="244248" Z="-2496" delay="0" run="true" /> --> <!-- retail -->
|
|
||||||
</route>
|
|
||||||
<route name="malign_conveyor_1_2" repeat="true" repeatStyle="conveyor">
|
|
||||||
<target id="22398" spawnX="26142" spawnY="246442" spawnZ="-3216" /> <!-- Lesser Evil -->
|
|
||||||
<point X="26144" Y="246444" Z="-3208" delay="0" run="true" />
|
|
||||||
<point X="28063" Y="247940" Z="-3248" delay="0" run="true" />
|
|
||||||
<point X="28276" Y="247756" Z="-3272" delay="0" run="true" />
|
|
||||||
<point X="27344" Y="246649" Z="-3680" delay="0" run="true" />
|
|
||||||
<point X="27652" Y="245914" Z="-3688" delay="0" run="true" />
|
|
||||||
<!-- <point X="28255" Y="245912" Z="-2552" delay="0" run="true" /> --> <!-- retail -->
|
|
||||||
<point X="28058" Y="245915" Z="-3701" delay="0" run="true" /> <!-- custom -->
|
|
||||||
</route>
|
|
||||||
<route name="malign_conveyor_1_3" repeat="true" repeatStyle="conveyor">
|
|
||||||
<target id="22398" spawnX="27335" spawnY="246217" spawnZ="-3668" /> <!-- Lesser Evil -->
|
|
||||||
<point X="27336" Y="246216" Z="-3656" delay="0" run="true" />
|
|
||||||
<point X="27645" Y="245921" Z="-3672" delay="0" run="true" />
|
|
||||||
<!-- <point X="28245" Y="245904" Z="-2552" delay="0" run="true" /> --> <!-- retail -->
|
|
||||||
<point X="28058" Y="245915" Z="-3701" delay="0" run="true" /> <!-- custom -->
|
|
||||||
</route>
|
|
||||||
<route name="malign_conveyor_1_4" repeat="true" repeatStyle="conveyor">
|
|
||||||
<target id="22398" spawnX="28486" spawnY="245913" spawnZ="-3698" /> <!-- Lesser Evil -->
|
|
||||||
<point X="28476" Y="245914" Z="-3696" delay="0" run="true" />
|
|
||||||
<point X="29058" Y="245894" Z="-3672" delay="0" run="true" />
|
|
||||||
<point X="29433" Y="245216" Z="-3688" delay="0" run="true" />
|
|
||||||
<point X="28942" Y="244492" Z="-3696" delay="0" run="true" />
|
|
||||||
</route>
|
|
||||||
<route name="malign_conveyor_2_1" repeat="true" repeatStyle="conveyor">
|
|
||||||
<target id="22399" spawnX="28684" spawnY="244118" spawnZ="-3700" /> <!-- Greater Evil -->
|
|
||||||
<point X="28771" Y="244251" Z="-2496" delay="0" run="true" />
|
|
||||||
<point X="28495" Y="243839" Z="-3696" delay="0" run="true" />
|
|
||||||
<point X="28727" Y="242939" Z="-3592" delay="0" run="true" />
|
|
||||||
<point X="28188" Y="242512" Z="-3464" delay="0" run="true" />
|
|
||||||
<point X="27248" Y="242797" Z="-3168" delay="0" run="true" />
|
|
||||||
<point X="26850" Y="243834" Z="-2896" delay="0" run="true" />
|
|
||||||
<point X="24636" Y="246593" Z="-1968" delay="0" run="true" />
|
|
||||||
<point X="24519" Y="248586" Z="-1936" delay="0" run="true" />
|
|
||||||
<point X="23094" Y="250031" Z="-1976" delay="0" run="true" />
|
|
||||||
<point X="22673" Y="251605" Z="-1992" delay="0" run="true" />
|
|
||||||
<point X="24560" Y="254414" Z="-1984" delay="0" run="true" />
|
|
||||||
<point X="25392" Y="255459" Z="-1992" delay="0" run="true" />
|
|
||||||
</route>
|
|
||||||
<!-- Antharas's Lair and Dragon Valley -->
|
<!-- Antharas's Lair and Dragon Valley -->
|
||||||
<!-- Cycle runner dragons at center of antharas layer path 1 -->
|
<!-- Cycle runner dragons at center of antharas layer path 1 -->
|
||||||
<route name="antharas_layer_path_1" repeat="true" repeatStyle="cycle">
|
<route name="antharas_layer_path_1" repeat="true" repeatStyle="cycle">
|
||||||
|
@ -71,13 +71,6 @@ Gracia Seeds:<br1>
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<br>
|
<br>
|
||||||
Hellbound Continent:<br1>
|
|
||||||
<table width="125">
|
|
||||||
<tr>
|
|
||||||
<td><button value="Hellbound Info" action="bypass -h admin_hellbound" width="125" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<br>
|
|
||||||
Grand Boss:<br1>
|
Grand Boss:<br1>
|
||||||
<table width="125">
|
<table width="125">
|
||||||
<tr>
|
<tr>
|
||||||
|
83
trunk/dist/game/data/html/admin/hellbound.htm
vendored
83
trunk/dist/game/data/html/admin/hellbound.htm
vendored
@ -1,83 +0,0 @@
|
|||||||
<html><title>Hellbound Menu</title>
|
|
||||||
<body>
|
|
||||||
<center>
|
|
||||||
<table width="270" border="0" bgcolor="444444">
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<button value="Main" action="bypass -h admin_admin" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Char" action="bypass -h admin_admin6" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Game" action="bypass -h admin_admin2" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="GM" action="bypass -h admin_admin7" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<br>
|
|
||||||
<font color="LEVEL">Hellbound Continent Informations</font><br>
|
|
||||||
</center>
|
|
||||||
<table width="270" border="0" bgcolor="444444">
|
|
||||||
<tr>
|
|
||||||
<td>Stage:</td>
|
|
||||||
<td>%hbstage%</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Trust:</td>
|
|
||||||
<td>%trust%</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Max.Trust:</td>
|
|
||||||
<td>%maxtrust%</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Min.Trust:</td>
|
|
||||||
<td>%mintrust%</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<br>
|
|
||||||
<table width="270" border="0" bgcolor="444444">
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 0" action="bypass -h admin_hellbound_setlevel 0" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 1" action="bypass -h admin_hellbound_setlevel 1" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 2" action="bypass -h admin_hellbound_setlevel 2" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 3" action="bypass -h admin_hellbound_setlevel 3" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 4" action="bypass -h admin_hellbound_setlevel 4" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 5" action="bypass -h admin_hellbound_setlevel 5" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 6" action="bypass -h admin_hellbound_setlevel 6" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 7" action="bypass -h admin_hellbound_setlevel 7" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 8" action="bypass -h admin_hellbound_setlevel 8" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 10" action="bypass -h admin_hellbound_setlevel 10" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button value="Stage 11" action="bypass -h admin_hellbound_setlevel 11" width="65" height="21" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</body></html>
|
|
4
trunk/dist/game/data/html/default/31590-1.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/31590-1.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Truth Scholar Devianne:<br>
|
||||||
|
The natives to this area, you mean? They're not doing well. Some did flee to the continent or the Refugee Camp, but most of them have been enslaved by Beleth. Terrible.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/31590-2.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/31590-2.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Truth Scholar Devianne:<br>
|
||||||
|
You don't know Leona Blackbird? Are your serious? She was the Lord of Oren! Well, Sieghardt rules it now, but she was also the continent's very Dreadnought. You really are clueless!<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/31590-3.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/31590-3.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Truth Scholar Devianne:<br>
|
||||||
|
Beleth is insane! The greatest wizard on the continent? Ha! He puts my Ivory Tower to shame. Curiosity is great, sure, but experimenting on humans? Toying with lives? Unforgivable!<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
7
trunk/dist/game/data/html/default/31590.htm
vendored
Normal file
7
trunk/dist/game/data/html/default/31590.htm
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<html><body>Truth Scholar Devianne:<br>
|
||||||
|
Did you hear what's been going on in Hellbound? I was officially trained to be a top-class sorcerer in the Ivory Tower, but seems there are so many things in the world that can't be learned through books!<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">"Yeah, so what's going on with the Caravaners again?"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 2">"Can you tell me about someone called Leona Blackbird?"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 3">"Tell me about Beleth."</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/31595-1.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/31595-1.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||||
|
Iason Heine is a friend. He has purchased people whose poverty drove them to slavery, and sold them to Beleth in Hellbound. People selling people, and experimenting on them! Unspeakable.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/31595-2.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/31595-2.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||||
|
Everything has its origin. Pa'agrio breathed the soul of fire into Orcs, while Maphr created Dwarvens with the spirit of the earth. Humans were made by Gran Kain, and a part of our souls still contains the chaos we were built with. Beleth seeks to extract this chaos from human souls and use it to create Core Naia.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/31595-3.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/31595-3.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||||
|
We've discovered the Giant's Grinder, which can destroy the Fragments of Chaos. Beleth noticed us running it the other day and came out of his Steel Citadel to see what was going on -- so we are planning on luring him out with more Fragments of Chaos and destroy him once and for all.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
8
trunk/dist/game/data/html/default/31595.htm
vendored
Normal file
8
trunk/dist/game/data/html/default/31595.htm
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||||
|
Did you hear what's been going on in Hellbound? I was officially trained to be a top-class sorcerer in the Ivory Tower, but seems there are so many things in the world that can;t be learned through books!<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">(Replay Leona's monologue)</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">"I heard something about slave trading. What's going on?"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 2">"Tell me about the Fragments of Chaos?"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 3">"What is a Giant's Grinder?"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||||
|
</body></html>
|
5
trunk/dist/game/data/html/default/31619-1.htm
vendored
Normal file
5
trunk/dist/game/data/html/default/31619-1.htm
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<html><body>Wind Shadow Erica Ken Weber:<br>
|
||||||
|
Curious about me, huh? I am Erica Ken Weber, occupied with cleaning up after Sieghardt's mess. But as you can see, the <font color="LEVEL">Black Bird</font> has me tied down here.<br>
|
||||||
|
Not that I couldn't run away if I tried -- I'm only here because of Leona Blackbird. Interesting one, that woman.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
6
trunk/dist/game/data/html/default/31619-2.htm
vendored
Normal file
6
trunk/dist/game/data/html/default/31619-2.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<html><body>Wind Shadow Erica Ken Weber:<br>
|
||||||
|
Leona and Sieghardt had a showdown in Goddard.<br>
|
||||||
|
It was about slave trade. They say the lord of Goddard did it, but everyone knows that the Dawn Knights are directly involved. Iason Heine is tied up in it, and he's the Dawn Knighs' cash cow, so there's no doubt.<br>
|
||||||
|
Sieghardt was just helping Iason Heine. But so what? He helped it happen, the selling of people. He is just as guilty in this filthy business!<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
6
trunk/dist/game/data/html/default/31619-3.htm
vendored
Normal file
6
trunk/dist/game/data/html/default/31619-3.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<html><body>Wind Shadow Erica Ken Weber:<br>
|
||||||
|
You've seen him, haven't you? That filthy pig in Heine? He's one of the Lords of Dawn, and controls all the funds in the organization.<br>
|
||||||
|
Seems that the Lords of Dawn are involved with <font color="LEVEL">Embryo</font> too, and needed money for something related to it.<br>
|
||||||
|
What's the worried look? Oh, wait, did I talk to much? Just...ignore what I said, ok?<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
7
trunk/dist/game/data/html/default/31619.htm
vendored
Normal file
7
trunk/dist/game/data/html/default/31619.htm
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<html><body>Wind Shadow Erica Ken Weber:<br>
|
||||||
|
What do you want?<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">"So why exactly are you here?"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 2">"Tell me about Sieghardt"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 3">"Who is Iason Heine?"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/32294-1.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/32294-1.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Ancient Literature Caravaner Budenka:<br>
|
||||||
|
The Demonic Tomes are what the monsters carry as proof of loyalty to Beleth. Loyalty, my foot! Anyway, I'm not sure destroying them will stop the brainwashing, but at least it's a start, right? These tomes are in an indecipherable ancient tongue, but apparently mention a pact with Beleth.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/32294-2.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/32294-2.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Ancient Literature Caravaner Budenka:<br>
|
||||||
|
Beleth changed everything. I used to think that whoever was strongest deserved to rule Hellbound. But... this wasn't what I wanted.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
6
trunk/dist/game/data/html/default/32294-3.htm
vendored
Normal file
6
trunk/dist/game/data/html/default/32294-3.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<html><body>Ancient Literature Caravaner Budenka:<br>
|
||||||
|
So, what do you want to trade for?<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 3">"I want a recipe and fragments for an R-grade item."</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 3">"I want a recipe and fragments for an R95-grade item."</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 3">"I want a recipe and fragments for an R99-grade item."</Button>
|
||||||
|
</body></html>
|
@ -1,3 +1,3 @@
|
|||||||
<html><body>Budenka:<br>
|
<html><body>Budenka:<br>
|
||||||
Bernarde is the divine official staying at Oasis. He is working hard to restore the ruins, which were once a sacred shrine, but is facing a number of challenges. To be honest, as long as Beleth governs this land, I think his chances for success are remote at best...
|
Bernarde is the divine official staying at Oasis. He is working hard to restore the ruins, which were once a sacred shrine, but is facing a number of challenges. To be honest, as long as Beleth governs this land, I think his chances for success are remote at best...
|
||||||
</body></html>
|
</body></html>
|
9
trunk/dist/game/data/html/default/32294.htm
vendored
Normal file
9
trunk/dist/game/data/html/default/32294.htm
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<html><body>Ancient Literature Caravaner Budenka:<br>
|
||||||
|
The local monsters have all been brainwashed by Beleth. We're looking for a way to save them, but all we can do right now is to take the Demonic Tomes out of their hands.<br>
|
||||||
|
So bring either the Sealed Demonig Tome or the Bloodied Demonic Tome, and I'll pay ya for it.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">"I just wanna know about Demonic Tomes."</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 2">"You know anything about Beleth?"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 3">"I have Sealed Demonic Tome for you."</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I have a Bloodied Demonic Tome if you like."</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/32356-1.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/32356-1.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Jude:<br>
|
||||||
|
I heard that Beleth is extracting chaos out of humans by turning them into monsters. Wielding the magic of the Giants was terrifying enough, but now this for Core Naia? He is fighting beyond belief.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/32356-2.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/32356-2.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Jude:<br>
|
||||||
|
The dimensional gate that Beleth opened is called Core Naia. It was for this that Beleth had drained Hellbound of all life in the bast. It's good to see some trees and grass growing again, but it still feels so ominous....<br>
|
||||||
|
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||||
|
</body></html>
|
8
trunk/dist/game/data/html/default/32356.htm
vendored
8
trunk/dist/game/data/html/default/32356.htm
vendored
@ -1,4 +1,6 @@
|
|||||||
<html><body>Jude:<br>
|
<html><body>Jude:<br>
|
||||||
Our thanks to you! Because of your help, many of our people have found a new life. On the other hand, I hear that Darion's situation is rapidly deteriorating.<br>
|
Wait, what are you doing in a dangerous place like this? I am Jude, chief of Refugee Camp. Tell me your business, and I will point you in the right direction.<br>
|
||||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">"Any information about Beleth?"</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 2">"Tell me about Core Naia."</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||||
</body></html>
|
</body></html>
|
6
trunk/dist/game/data/html/default/33778.htm
vendored
Normal file
6
trunk/dist/game/data/html/default/33778.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<html><body>Masa:<br>
|
||||||
|
Slaves sold to Hellbound became subjects to Beleth's experiments.<br>
|
||||||
|
You see, when a number of them die, the color of the magic circle changes. When it's yellow, the slaves have a chance of being rescued.<br>
|
||||||
|
But some slaves may be mutated beyond sanity, so be careful of their attacks!<br>
|
||||||
|
When the magic circle is in full power, it's red. It produces berserk monsters, but hard as they are to beat, they give some really good rewards!
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/33895-1.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/33895-1.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Crane Activator:<br>
|
||||||
|
You need a Crane Activator to move the Crane.<br>
|
||||||
|
Note: You can obtain a Crane Activator from <font color="LEVEL">Tanya</font>, <font color="LEVEL">Scarlett</font>, <font color="LEVEL">Berserk Tanya</font>, <font color="LEVEL">Berserk Scarlett</font> or <font color="LEVEL">Lavisys' Boss Deathmoz</font>.
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/html/default/33895.htm
vendored
Normal file
4
trunk/dist/game/data/html/default/33895.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Crane Activator:<br>
|
||||||
|
Clatter clatter...<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Insert the Crane Activator to start the Crane</Button>
|
||||||
|
</body></html>
|
9
trunk/dist/game/data/html/default/33897.htm
vendored
Normal file
9
trunk/dist/game/data/html/default/33897.htm
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<html><body>Theorn:<br>
|
||||||
|
Hey there! I'm researching the power of Heroes, and boy do I need a lots of <font color="LEVEL">Skill Points</font> for it! Do you want to <font color="LEVEL">donate yours</font>? If things go well, <font color="LEVEL">you can earn additional SP</font>! Interested? Here's the trick.<br>
|
||||||
|
This research requires <font color="LEVEL">100,000 Adena</font> and <font color="LEVEL">500,000 SP. If my experiment is a success, I can pay you in double the SP</font>! But <font color="LEVEL">if it fails, say goodbye to the SP</font>! Oh, and no refunds for your Adena. It's necessary for my research!<br>
|
||||||
|
<font color="LEVEL">And don't die! Or else you will lose the buff I give you, and lose out on rewards.</font><br>
|
||||||
|
And I'm kind of a night-owl, so don't expect me to be around to reward you in the daytime.<br>
|
||||||
|
Well, what do you say? I'm at the end of my experimental stages, so all that's left to do is to inject some SP into either the Flask of Darkness or Flask of Light. Here, I'll let you pick.<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"Let's try the Flask of Darkness."</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"Flask of Light, I think."</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/scripts.cfg
vendored
4
trunk/dist/game/data/scripts.cfg
vendored
@ -82,6 +82,7 @@ ai/npc/Teleports/TeleportToRaceTrack/TeleportToRaceTrack.java
|
|||||||
ai/npc/Teleports/TeleportToUndergroundColiseum/TeleportToUndergroundColiseum.java
|
ai/npc/Teleports/TeleportToUndergroundColiseum/TeleportToUndergroundColiseum.java
|
||||||
ai/npc/Teleports/TeleportWithCharm/TeleportWithCharm.java
|
ai/npc/Teleports/TeleportWithCharm/TeleportWithCharm.java
|
||||||
ai/npc/Teleports/ToIVortex/ToIVortex.java
|
ai/npc/Teleports/ToIVortex/ToIVortex.java
|
||||||
|
ai/npc/Teleports/Warpgate/Warpgate.java
|
||||||
ai/npc/Trainers/HealerTrainer/HealerTrainer.java
|
ai/npc/Trainers/HealerTrainer/HealerTrainer.java
|
||||||
ai/npc/Trandon/Trandon.java
|
ai/npc/Trandon/Trandon.java
|
||||||
ai/npc/Tunatun/Tunatun.java
|
ai/npc/Tunatun/Tunatun.java
|
||||||
@ -198,9 +199,6 @@ instances/InstanceLoader.java
|
|||||||
# Gracia Section
|
# Gracia Section
|
||||||
gracia/GraciaLoader.java
|
gracia/GraciaLoader.java
|
||||||
|
|
||||||
# Hellbound Section
|
|
||||||
hellbound/HellboundLoader.java
|
|
||||||
|
|
||||||
# Quests Section
|
# Quests Section
|
||||||
quests/QuestMasterHandler.java
|
quests/QuestMasterHandler.java
|
||||||
|
|
||||||
|
4
trunk/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate-01.html
vendored
Normal file
4
trunk/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate-01.html
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Warp Gate:<br>
|
||||||
|
(Nothing works.)<br>
|
||||||
|
(If you are not at <font color="LEVEL">Lv. 99</font>, you need a <font color="LEVEL">Visitation Scroll: Hellbound</font> to enter.)
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate-02.html
vendored
Normal file
4
trunk/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate-02.html
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Warp Gate:<br>
|
||||||
|
(Use this gate to go to the Refuge Camp in Hellbound.)<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Warpgate enter">"Here goes."</Button>
|
||||||
|
</body></html>
|
4
trunk/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate-Exit.html
vendored
Normal file
4
trunk/dist/game/data/scripts/ai/npc/Teleports/Warpgate/Warpgate-Exit.html
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Warp Gate:<br>
|
||||||
|
(This takes you out of Hellbound. Operate it to go to Heine.)<br>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Warpgate expel">"All right, let's go."</Button>
|
||||||
|
</body></html>
|
@ -16,11 +16,11 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package hellbound.AI.NPC.Warpgate;
|
package ai.npc.Teleports.Warpgate;
|
||||||
|
|
||||||
import hellbound.HellboundEngine;
|
|
||||||
import ai.npc.AbstractNpcAI;
|
import ai.npc.AbstractNpcAI;
|
||||||
|
|
||||||
|
import com.l2jserver.Config;
|
||||||
import com.l2jserver.gameserver.model.Location;
|
import com.l2jserver.gameserver.model.Location;
|
||||||
import com.l2jserver.gameserver.model.PcCondOverride;
|
import com.l2jserver.gameserver.model.PcCondOverride;
|
||||||
import com.l2jserver.gameserver.model.actor.L2Character;
|
import com.l2jserver.gameserver.model.actor.L2Character;
|
||||||
@ -31,10 +31,12 @@ import com.l2jserver.gameserver.model.zone.L2ZoneType;
|
|||||||
/**
|
/**
|
||||||
* Warpgate teleport AI.
|
* Warpgate teleport AI.
|
||||||
* @author _DS_
|
* @author _DS_
|
||||||
|
* @Updated to Ertheia by Mobius
|
||||||
*/
|
*/
|
||||||
public final class Warpgate extends AbstractNpcAI
|
public final class Warpgate extends AbstractNpcAI
|
||||||
{
|
{
|
||||||
// NPCs
|
// NPCs
|
||||||
|
private static final int EXIT_GATE = 33902;
|
||||||
private static final int[] WARPGATES =
|
private static final int[] WARPGATES =
|
||||||
{
|
{
|
||||||
32314,
|
32314,
|
||||||
@ -43,18 +45,20 @@ public final class Warpgate extends AbstractNpcAI
|
|||||||
32317,
|
32317,
|
||||||
32318,
|
32318,
|
||||||
32319,
|
32319,
|
||||||
|
EXIT_GATE
|
||||||
};
|
};
|
||||||
// Locations
|
// Locations
|
||||||
private static final Location ENTER_LOC = new Location(-11272, 236464, -3248);
|
private static final Location ENTER_LOC = new Location(-28632, 255640, -2230);
|
||||||
private static final Location REMOVE_LOC = new Location(-16555, 209375, -3670);
|
private static final Location EXPEL_LOC = new Location(111384, 219080, -3567);
|
||||||
// Item
|
// Items
|
||||||
private static final int MAP = 9994;
|
private static final int MAP = 9994;
|
||||||
|
private static final int VISITATION_SCROLL = 45448;
|
||||||
// Misc
|
// Misc
|
||||||
private static final int ZONE = 40101;
|
private static final int ZONE = 40101;
|
||||||
|
|
||||||
public Warpgate()
|
public Warpgate()
|
||||||
{
|
{
|
||||||
super(Warpgate.class.getSimpleName(), "hellbound/AI/NPC");
|
super(Warpgate.class.getSimpleName(), "ai/npc/Teleports");
|
||||||
addStartNpc(WARPGATES);
|
addStartNpc(WARPGATES);
|
||||||
addFirstTalkId(WARPGATES);
|
addFirstTalkId(WARPGATES);
|
||||||
addTalkId(WARPGATES);
|
addTalkId(WARPGATES);
|
||||||
@ -75,9 +79,9 @@ public final class Warpgate extends AbstractNpcAI
|
|||||||
return "Warpgate-03.html";
|
return "Warpgate-03.html";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event.equals("TELEPORT"))
|
else if (event.equals("expel"))
|
||||||
{
|
{
|
||||||
player.teleToLocation(REMOVE_LOC, true);
|
player.teleToLocation(EXPEL_LOC, true);
|
||||||
}
|
}
|
||||||
return super.onAdvEvent(event, npc, player);
|
return super.onAdvEvent(event, npc, player);
|
||||||
}
|
}
|
||||||
@ -85,7 +89,11 @@ public final class Warpgate extends AbstractNpcAI
|
|||||||
@Override
|
@Override
|
||||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||||
{
|
{
|
||||||
return HellboundEngine.getInstance().isLocked() ? "Warpgate-01.html" : "Warpgate-02.html";
|
if (npc.getId() == EXIT_GATE)
|
||||||
|
{
|
||||||
|
return "Warpgate-Exit.html";
|
||||||
|
}
|
||||||
|
return canEnter(player) ? "Warpgate-02.html" : "Warpgate-01.html";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -97,7 +105,7 @@ public final class Warpgate extends AbstractNpcAI
|
|||||||
|
|
||||||
if (!canEnter(player) && !player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS) && !player.isOnEvent())
|
if (!canEnter(player) && !player.canOverrideCond(PcCondOverride.ZONE_CONDITIONS) && !player.isOnEvent())
|
||||||
{
|
{
|
||||||
startQuestTimer("TELEPORT", 1000, null, player);
|
startQuestTimer("expel", 1000, null, player);
|
||||||
}
|
}
|
||||||
else if (!player.isMinimapAllowed() && hasAtLeastOneQuestItem(player, MAP))
|
else if (!player.isMinimapAllowed() && hasAtLeastOneQuestItem(player, MAP))
|
||||||
{
|
{
|
||||||
@ -109,6 +117,23 @@ public final class Warpgate extends AbstractNpcAI
|
|||||||
|
|
||||||
private static boolean canEnter(L2PcInstance player)
|
private static boolean canEnter(L2PcInstance player)
|
||||||
{
|
{
|
||||||
return !player.isFlying();
|
if (player.isFlying())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (player.getLevel() < Config.HELLBOUND_LEVEL_LIMIT)
|
||||||
|
{
|
||||||
|
if (player.getInventory().getItemByItemId(VISITATION_SCROLL) != null)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
new Warpgate();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,95 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 handlers.admincommandhandlers;
|
|
||||||
|
|
||||||
import hellbound.HellboundEngine;
|
|
||||||
|
|
||||||
import java.util.StringTokenizer;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.handler.IAdminCommandHandler;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hellbound admin command.
|
|
||||||
* @author DS, Gladicek
|
|
||||||
*/
|
|
||||||
public class AdminHellbound implements IAdminCommandHandler
|
|
||||||
{
|
|
||||||
private static final String[] ADMIN_COMMANDS =
|
|
||||||
{
|
|
||||||
"admin_hellbound_setlevel",
|
|
||||||
"admin_hellbound"
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String[] getAdminCommandList()
|
|
||||||
{
|
|
||||||
return ADMIN_COMMANDS;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean useAdminCommand(String command, L2PcInstance activeChar)
|
|
||||||
{
|
|
||||||
if (activeChar == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (command.startsWith(ADMIN_COMMANDS[0]))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
StringTokenizer st = new StringTokenizer(command, " ");
|
|
||||||
st.nextToken();
|
|
||||||
final int level = Integer.parseInt(st.nextToken());
|
|
||||||
if ((level < 0) || (level > 11))
|
|
||||||
{
|
|
||||||
throw new NumberFormatException();
|
|
||||||
}
|
|
||||||
|
|
||||||
HellboundEngine.getInstance().setLevel(level);
|
|
||||||
activeChar.sendMessage("Hellbound level set to " + level);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
activeChar.sendMessage("Usage: //hellbound_setlevel 0-11");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (command.startsWith(ADMIN_COMMANDS[1]))
|
|
||||||
{
|
|
||||||
showMenu(activeChar);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showMenu(L2PcInstance activeChar)
|
|
||||||
{
|
|
||||||
final NpcHtmlMessage html = new NpcHtmlMessage();
|
|
||||||
html.setFile(activeChar.getHtmlPrefix(), "data/html/admin/hellbound.htm");
|
|
||||||
html.replace("%hbstage%", String.valueOf(HellboundEngine.getInstance().getLevel()));
|
|
||||||
html.replace("%trust%", String.valueOf(HellboundEngine.getInstance().getTrust()));
|
|
||||||
html.replace("%maxtrust%", String.valueOf(HellboundEngine.getInstance().getMaxTrust()));
|
|
||||||
html.replace("%mintrust%", String.valueOf(HellboundEngine.getInstance().getMinTrust()));
|
|
||||||
activeChar.sendPacket(html);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 handlers.voicedcommandhandlers;
|
|
||||||
|
|
||||||
import hellbound.HellboundEngine;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hellbound voiced command.
|
|
||||||
* @author DS
|
|
||||||
*/
|
|
||||||
public class Hellbound implements IVoicedCommandHandler
|
|
||||||
{
|
|
||||||
private static final String[] VOICED_COMMANDS =
|
|
||||||
{
|
|
||||||
"hellbound"
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
|
|
||||||
{
|
|
||||||
if (HellboundEngine.getInstance().isLocked())
|
|
||||||
{
|
|
||||||
activeChar.sendMessage("Hellbound is currently locked.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int maxTrust = HellboundEngine.getInstance().getMaxTrust();
|
|
||||||
activeChar.sendMessage("Hellbound level: " + HellboundEngine.getInstance().getLevel() + " trust: " + HellboundEngine.getInstance().getTrust() + (maxTrust > 0 ? "/" + maxTrust : ""));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String[] getVoicedCommandList()
|
|
||||||
{
|
|
||||||
return VOICED_COMMANDS;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,180 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI;
|
|
||||||
|
|
||||||
import hellbound.HellboundEngine;
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.ai.CtrlIntention;
|
|
||||||
import com.l2jserver.gameserver.enums.ChatType;
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
import com.l2jserver.gameserver.model.holders.SkillHolder;
|
|
||||||
import com.l2jserver.gameserver.model.skills.BuffInfo;
|
|
||||||
import com.l2jserver.gameserver.model.skills.Skill;
|
|
||||||
import com.l2jserver.gameserver.network.NpcStringId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Manages Amaskari's and minions' chat and some skill usage.
|
|
||||||
* @author GKR
|
|
||||||
*/
|
|
||||||
public final class Amaskari extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
// NPCs
|
|
||||||
private static final int AMASKARI = 22449;
|
|
||||||
private static final int AMASKARI_PRISONER = 22450;
|
|
||||||
// Skills
|
|
||||||
// private static SkillHolder INVINCIBILITY = new SkillHolder(5417, 1);
|
|
||||||
private static final int BUFF_ID = 4632;
|
|
||||||
private static SkillHolder[] BUFF =
|
|
||||||
{
|
|
||||||
new SkillHolder(BUFF_ID, 1),
|
|
||||||
new SkillHolder(BUFF_ID, 2),
|
|
||||||
new SkillHolder(BUFF_ID, 3)
|
|
||||||
};
|
|
||||||
// Misc
|
|
||||||
private static final NpcStringId[] AMASKARI_NPCSTRING_ID =
|
|
||||||
{
|
|
||||||
NpcStringId.I_LL_MAKE_EVERYONE_FEEL_THE_SAME_SUFFERING_AS_ME,
|
|
||||||
NpcStringId.HA_HA_YES_DIE_SLOWLY_WRITHING_IN_PAIN_AND_AGONY,
|
|
||||||
NpcStringId.MORE_NEED_MORE_SEVERE_PAIN,
|
|
||||||
NpcStringId.SOMETHING_IS_BURNING_INSIDE_MY_BODY
|
|
||||||
};
|
|
||||||
private static final NpcStringId[] MINIONS_NPCSTRING_ID =
|
|
||||||
{
|
|
||||||
NpcStringId.AHH_MY_LIFE_IS_BEING_DRAINED_OUT,
|
|
||||||
NpcStringId.THANK_YOU_FOR_SAVING_ME,
|
|
||||||
NpcStringId.IT_WILL_KILL_EVERYONE,
|
|
||||||
NpcStringId.EEEK_I_FEEL_SICK_YOW
|
|
||||||
};
|
|
||||||
|
|
||||||
public Amaskari()
|
|
||||||
{
|
|
||||||
super(Amaskari.class.getSimpleName(), "hellbound/AI");
|
|
||||||
addKillId(AMASKARI, AMASKARI_PRISONER);
|
|
||||||
addAttackId(AMASKARI);
|
|
||||||
addSpawnId(AMASKARI_PRISONER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
if (event.equalsIgnoreCase("stop_toggle"))
|
|
||||||
{
|
|
||||||
broadcastNpcSay(npc, ChatType.NPC_GENERAL, AMASKARI_NPCSTRING_ID[2]);
|
|
||||||
((L2MonsterInstance) npc).clearAggroList();
|
|
||||||
((L2MonsterInstance) npc).getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
|
|
||||||
npc.setIsInvul(false);
|
|
||||||
// npc.doCast(INVINCIBILITY.getSkill())
|
|
||||||
}
|
|
||||||
else if (event.equalsIgnoreCase("onspawn_msg") && (npc != null) && !npc.isDead())
|
|
||||||
{
|
|
||||||
if (getRandom(100) > 20)
|
|
||||||
{
|
|
||||||
broadcastNpcSay(npc, ChatType.NPC_GENERAL, MINIONS_NPCSTRING_ID[2]);
|
|
||||||
}
|
|
||||||
else if (getRandom(100) > 40)
|
|
||||||
{
|
|
||||||
broadcastNpcSay(npc, ChatType.NPC_GENERAL, MINIONS_NPCSTRING_ID[3]);
|
|
||||||
}
|
|
||||||
startQuestTimer("onspawn_msg", (getRandom(8) + 1) * 30000, npc, null);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill)
|
|
||||||
{
|
|
||||||
if ((npc.getId() == AMASKARI) && (getRandom(1000) < 25))
|
|
||||||
{
|
|
||||||
broadcastNpcSay(npc, ChatType.NPC_GENERAL, AMASKARI_NPCSTRING_ID[0]);
|
|
||||||
for (L2MonsterInstance minion : ((L2MonsterInstance) npc).getMinionList().getSpawnedMinions())
|
|
||||||
{
|
|
||||||
if ((minion != null) && !minion.isDead() && (getRandom(10) == 0))
|
|
||||||
{
|
|
||||||
broadcastNpcSay(minion, ChatType.NPC_GENERAL, MINIONS_NPCSTRING_ID[0]);
|
|
||||||
minion.setCurrentHp(minion.getCurrentHp() - (minion.getCurrentHp() / 5));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.onAttack(npc, attacker, damage, isSummon, skill);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
|
||||||
{
|
|
||||||
if (npc.getId() == AMASKARI_PRISONER)
|
|
||||||
{
|
|
||||||
final L2MonsterInstance master = ((L2MonsterInstance) npc).getLeader();
|
|
||||||
if ((master != null) && !master.isDead())
|
|
||||||
{
|
|
||||||
broadcastNpcSay(master, ChatType.NPC_GENERAL, AMASKARI_NPCSTRING_ID[1]);
|
|
||||||
final BuffInfo info = master.getEffectList().getBuffInfoBySkillId(BUFF_ID);
|
|
||||||
if ((info != null) && (info.getSkill().getAbnormalLvl() == 3) && master.isInvul())
|
|
||||||
{
|
|
||||||
master.setCurrentHp(master.getCurrentHp() + (master.getCurrentHp() / 5));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
master.clearAggroList();
|
|
||||||
master.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
|
|
||||||
if (info == null)
|
|
||||||
{
|
|
||||||
master.doCast(BUFF[0].getSkill());
|
|
||||||
}
|
|
||||||
else if (info.getSkill().getAbnormalLvl() < 3)
|
|
||||||
{
|
|
||||||
master.doCast(BUFF[info.getSkill().getAbnormalLvl()].getSkill());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
broadcastNpcSay(master, ChatType.NPC_GENERAL, AMASKARI_NPCSTRING_ID[3]);
|
|
||||||
// master.doCast(INVINCIBILITY.getSkill())
|
|
||||||
master.setIsInvul(true);
|
|
||||||
startQuestTimer("stop_toggle", 10000, master, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (npc.getId() == AMASKARI)
|
|
||||||
{
|
|
||||||
for (L2MonsterInstance minion : ((L2MonsterInstance) npc).getMinionList().getSpawnedMinions())
|
|
||||||
{
|
|
||||||
if ((minion != null) && !minion.isDead())
|
|
||||||
{
|
|
||||||
if (getRandom(1000) > 300)
|
|
||||||
{
|
|
||||||
broadcastNpcSay(minion, ChatType.NPC_GENERAL, MINIONS_NPCSTRING_ID[1]);
|
|
||||||
}
|
|
||||||
HellboundEngine.getInstance().updateTrust(30, true);
|
|
||||||
minion.deleteMe();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.onKill(npc, killer, isSummon);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onSpawn(L2Npc npc)
|
|
||||||
{
|
|
||||||
startQuestTimer("onspawn_msg", (getRandom(3) + 1) * 30000, npc, null);
|
|
||||||
return super.onSpawn(npc);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,138 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI;
|
|
||||||
|
|
||||||
import hellbound.HellboundEngine;
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.ThreadPoolManager;
|
|
||||||
import com.l2jserver.gameserver.model.L2Object;
|
|
||||||
import com.l2jserver.gameserver.model.Location;
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
import com.l2jserver.gameserver.model.skills.Skill;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chimeras AI.
|
|
||||||
* @author DS
|
|
||||||
*/
|
|
||||||
public final class Chimeras extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
// NPCs
|
|
||||||
private static final int[] NPCS =
|
|
||||||
{
|
|
||||||
22349, // Chimera of Earth
|
|
||||||
22350, // Chimera of Darkness
|
|
||||||
22351, // Chimera of Wind
|
|
||||||
22352, // Chimera of Fire
|
|
||||||
};
|
|
||||||
private static final int CELTUS = 22353;
|
|
||||||
// Locations
|
|
||||||
private static final Location[] LOCATIONS =
|
|
||||||
{
|
|
||||||
new Location(3678, 233418, -3319),
|
|
||||||
new Location(2038, 237125, -3363),
|
|
||||||
new Location(7222, 240617, -2033),
|
|
||||||
new Location(9969, 235570, -1993)
|
|
||||||
};
|
|
||||||
// Skills
|
|
||||||
private static final int BOTTLE = 2359; // Magic Bottle
|
|
||||||
// Items
|
|
||||||
private static final int DIM_LIFE_FORCE = 9680;
|
|
||||||
private static final int LIFE_FORCE = 9681;
|
|
||||||
private static final int CONTAINED_LIFE_FORCE = 9682;
|
|
||||||
|
|
||||||
public Chimeras()
|
|
||||||
{
|
|
||||||
super(Chimeras.class.getSimpleName(), "hellbound/AI");
|
|
||||||
addSkillSeeId(NPCS);
|
|
||||||
addSpawnId(CELTUS);
|
|
||||||
addSkillSeeId(CELTUS);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onSpawn(L2Npc npc)
|
|
||||||
{
|
|
||||||
if (HellboundEngine.getInstance().getLevel() == 7) // Have random spawn points only in 7 lvl
|
|
||||||
{
|
|
||||||
final Location loc = LOCATIONS[getRandom(LOCATIONS.length)];
|
|
||||||
if (!npc.isInsideRadius(loc, 200, false, false))
|
|
||||||
{
|
|
||||||
npc.getSpawn().setLocation(loc);
|
|
||||||
ThreadPoolManager.getInstance().scheduleGeneral(new Teleport(npc, loc), 100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.onSpawn(npc);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onSkillSee(L2Npc npc, L2PcInstance caster, Skill skill, L2Object[] targets, boolean isSummon)
|
|
||||||
{
|
|
||||||
if ((skill.getId() == BOTTLE) && !npc.isDead())
|
|
||||||
{
|
|
||||||
if ((targets.length > 0) && (targets[0] == npc))
|
|
||||||
{
|
|
||||||
if (npc.getCurrentHp() < (npc.getMaxHp() * 0.1))
|
|
||||||
{
|
|
||||||
if (HellboundEngine.getInstance().getLevel() == 7)
|
|
||||||
{
|
|
||||||
HellboundEngine.getInstance().updateTrust(3, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
npc.setIsDead(true);
|
|
||||||
if (npc.getId() == CELTUS)
|
|
||||||
{
|
|
||||||
npc.dropItem(caster, CONTAINED_LIFE_FORCE, 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (getRandom(100) < 80)
|
|
||||||
{
|
|
||||||
npc.dropItem(caster, DIM_LIFE_FORCE, 1);
|
|
||||||
}
|
|
||||||
else if (getRandom(100) < 80)
|
|
||||||
{
|
|
||||||
npc.dropItem(caster, LIFE_FORCE, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
npc.onDecay();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.onSkillSee(npc, caster, skill, targets, isSummon);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class Teleport implements Runnable
|
|
||||||
{
|
|
||||||
private final L2Npc _npc;
|
|
||||||
private final Location _loc;
|
|
||||||
|
|
||||||
public Teleport(L2Npc npc, Location loc)
|
|
||||||
{
|
|
||||||
_npc = npc;
|
|
||||||
_loc = loc;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
_npc.teleToLocation(_loc, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,128 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
import com.l2jserver.gameserver.model.holders.SkillHolder;
|
|
||||||
import com.l2jserver.gameserver.model.skills.Skill;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Demon Prince's AI.
|
|
||||||
* @author GKR
|
|
||||||
*/
|
|
||||||
public final class DemonPrince extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
// NPCs
|
|
||||||
private static final int DEMON_PRINCE = 25540;
|
|
||||||
private static final int FIEND = 25541;
|
|
||||||
// Skills
|
|
||||||
private static final SkillHolder UD = new SkillHolder(5044, 2);
|
|
||||||
private static final SkillHolder[] AOE =
|
|
||||||
{
|
|
||||||
new SkillHolder(5376, 4),
|
|
||||||
new SkillHolder(5376, 5),
|
|
||||||
new SkillHolder(5376, 6),
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final Map<Integer, Boolean> ATTACK_STATE = new HashMap<>();
|
|
||||||
|
|
||||||
public DemonPrince()
|
|
||||||
{
|
|
||||||
super(DemonPrince.class.getSimpleName(), "hellbound/AI");
|
|
||||||
addAttackId(DEMON_PRINCE);
|
|
||||||
addKillId(DEMON_PRINCE);
|
|
||||||
addSpawnId(FIEND);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
if (event.equalsIgnoreCase("cast") && (npc != null) && (npc.getId() == FIEND) && !npc.isDead())
|
|
||||||
{
|
|
||||||
npc.doCast(AOE[getRandom(AOE.length)].getSkill());
|
|
||||||
}
|
|
||||||
return super.onAdvEvent(event, npc, player);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill)
|
|
||||||
{
|
|
||||||
if (!npc.isDead())
|
|
||||||
{
|
|
||||||
if (!ATTACK_STATE.containsKey(npc.getObjectId()) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.5)))
|
|
||||||
{
|
|
||||||
npc.doCast(UD.getSkill());
|
|
||||||
spawnMinions(npc);
|
|
||||||
ATTACK_STATE.put(npc.getObjectId(), false);
|
|
||||||
}
|
|
||||||
else if ((npc.getCurrentHp() < (npc.getMaxHp() * 0.1)) && ATTACK_STATE.containsKey(npc.getObjectId()) && (ATTACK_STATE.get(npc.getObjectId()) == false))
|
|
||||||
{
|
|
||||||
npc.doCast(UD.getSkill());
|
|
||||||
spawnMinions(npc);
|
|
||||||
ATTACK_STATE.put(npc.getObjectId(), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getRandom(1000) < 10)
|
|
||||||
{
|
|
||||||
spawnMinions(npc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.onAttack(npc, attacker, damage, isSummon, skill);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
|
||||||
{
|
|
||||||
ATTACK_STATE.remove(npc.getObjectId());
|
|
||||||
return super.onKill(npc, killer, isSummon);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onSpawn(L2Npc npc)
|
|
||||||
{
|
|
||||||
if (npc.getId() == FIEND)
|
|
||||||
{
|
|
||||||
startQuestTimer("cast", 15000, npc, null);
|
|
||||||
}
|
|
||||||
return super.onSpawn(npc);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void spawnMinions(L2Npc master)
|
|
||||||
{
|
|
||||||
if ((master != null) && !master.isDead())
|
|
||||||
{
|
|
||||||
final int instanceId = master.getInstanceId();
|
|
||||||
final int x = master.getX();
|
|
||||||
final int y = master.getY();
|
|
||||||
final int z = master.getZ();
|
|
||||||
addSpawn(FIEND, x + 200, y, z, 0, false, 0, false, instanceId);
|
|
||||||
addSpawn(FIEND, x - 200, y, z, 0, false, 0, false, instanceId);
|
|
||||||
addSpawn(FIEND, x - 100, y - 140, z, 0, false, 0, false, instanceId);
|
|
||||||
addSpawn(FIEND, x - 100, y + 140, z, 0, false, 0, false, instanceId);
|
|
||||||
addSpawn(FIEND, x + 100, y - 140, z, 0, false, 0, false, instanceId);
|
|
||||||
addSpawn(FIEND, x + 100, y + 140, z, 0, false, 0, false, instanceId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI;
|
|
||||||
|
|
||||||
import hellbound.HellboundEngine;
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Character;
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
import com.l2jserver.gameserver.model.holders.SkillHolder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Manages Naia's cast on the Hellbound Core
|
|
||||||
* @author GKR
|
|
||||||
*/
|
|
||||||
public final class HellboundCore extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
// NPCs
|
|
||||||
private static final int NAIA = 18484;
|
|
||||||
private static final int HELLBOUND_CORE = 32331;
|
|
||||||
// Skills
|
|
||||||
private static SkillHolder BEAM = new SkillHolder(5493, 1);
|
|
||||||
|
|
||||||
public HellboundCore()
|
|
||||||
{
|
|
||||||
super(HellboundCore.class.getSimpleName(), "hellbound/AI");
|
|
||||||
addSpawnId(HELLBOUND_CORE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
if (event.equalsIgnoreCase("cast") && (HellboundEngine.getInstance().getLevel() <= 6))
|
|
||||||
{
|
|
||||||
for (L2Character naia : npc.getKnownList().getKnownCharactersInRadius(900))
|
|
||||||
{
|
|
||||||
if ((naia != null) && naia.isMonster() && (naia.getId() == NAIA) && !naia.isDead())
|
|
||||||
{
|
|
||||||
naia.setTarget(npc);
|
|
||||||
naia.doSimultaneousCast(BEAM.getSkill());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
startQuestTimer("cast", 10000, npc, null);
|
|
||||||
}
|
|
||||||
return super.onAdvEvent(event, npc, player);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onSpawn(L2Npc npc)
|
|
||||||
{
|
|
||||||
startQuestTimer("cast", 10000, npc, null);
|
|
||||||
return super.onSpawn(npc);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,190 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.enums.ChatType;
|
|
||||||
import com.l2jserver.gameserver.model.L2Spawn;
|
|
||||||
import com.l2jserver.gameserver.model.Location;
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
import com.l2jserver.gameserver.network.NpcStringId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Manages Darion's Enforcer's and Darion's Executioner spawn/despawn
|
|
||||||
* @author GKR
|
|
||||||
*/
|
|
||||||
public final class Keltas extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
// NPCs
|
|
||||||
private static final int KELTAS = 22341;
|
|
||||||
private static final int ENFORCER = 22342;
|
|
||||||
private static final int EXECUTIONER = 22343;
|
|
||||||
// Locations
|
|
||||||
private static final Location[] ENFORCER_SPAWN_POINTS =
|
|
||||||
{
|
|
||||||
new Location(-24540, 251404, -3320),
|
|
||||||
new Location(-24100, 252578, -3060),
|
|
||||||
new Location(-24607, 252443, -3074),
|
|
||||||
new Location(-23962, 252041, -3275),
|
|
||||||
new Location(-24381, 252132, -3090),
|
|
||||||
new Location(-23652, 251838, -3370),
|
|
||||||
new Location(-23838, 252603, -3095),
|
|
||||||
new Location(-23257, 251671, -3360),
|
|
||||||
new Location(-27127, 251106, -3523),
|
|
||||||
new Location(-27118, 251203, -3523),
|
|
||||||
new Location(-27052, 251205, -3523),
|
|
||||||
new Location(-26999, 250818, -3523),
|
|
||||||
new Location(-29613, 252888, -3523),
|
|
||||||
new Location(-29765, 253009, -3523),
|
|
||||||
new Location(-29594, 252570, -3523),
|
|
||||||
new Location(-29770, 252658, -3523),
|
|
||||||
new Location(-27816, 252008, -3527),
|
|
||||||
new Location(-27930, 252011, -3523),
|
|
||||||
new Location(-28702, 251986, -3523),
|
|
||||||
new Location(-27357, 251987, -3527),
|
|
||||||
new Location(-28859, 251081, -3527),
|
|
||||||
new Location(-28607, 250397, -3523),
|
|
||||||
new Location(-28801, 250462, -3523),
|
|
||||||
new Location(-29123, 250387, -3472),
|
|
||||||
new Location(-25376, 252368, -3257),
|
|
||||||
new Location(-25376, 252208, -3257)
|
|
||||||
};
|
|
||||||
private static final Location[] EXECUTIONER_SPAWN_POINTS =
|
|
||||||
{
|
|
||||||
new Location(-24419, 251395, -3340),
|
|
||||||
new Location(-24912, 252160, -3310),
|
|
||||||
new Location(-25027, 251941, -3300),
|
|
||||||
new Location(-24127, 252657, -3058),
|
|
||||||
new Location(-25120, 252372, -3270),
|
|
||||||
new Location(-24456, 252651, -3060),
|
|
||||||
new Location(-24844, 251614, -3295),
|
|
||||||
new Location(-28675, 252008, -3523),
|
|
||||||
new Location(-27943, 251238, -3523),
|
|
||||||
new Location(-27827, 251984, -3523),
|
|
||||||
new Location(-27276, 251995, -3523),
|
|
||||||
new Location(-28769, 251955, -3523),
|
|
||||||
new Location(-27969, 251073, -3523),
|
|
||||||
new Location(-27233, 250938, -3523),
|
|
||||||
new Location(-26835, 250914, -3523),
|
|
||||||
new Location(-26802, 251276, -3523),
|
|
||||||
new Location(-29671, 252781, -3527),
|
|
||||||
new Location(-29536, 252831, -3523),
|
|
||||||
new Location(-29419, 253214, -3523),
|
|
||||||
new Location(-27923, 251965, -3523),
|
|
||||||
new Location(-28499, 251882, -3527),
|
|
||||||
new Location(-28194, 251915, -3523),
|
|
||||||
new Location(-28358, 251078, -3527),
|
|
||||||
new Location(-28580, 251071, -3527),
|
|
||||||
new Location(-28492, 250704, -3523)
|
|
||||||
};
|
|
||||||
// Misc
|
|
||||||
private L2MonsterInstance _spawnedKeltas = null;
|
|
||||||
private final Set<L2Spawn> _spawnedMonsters = Collections.newSetFromMap(new ConcurrentHashMap<L2Spawn, Boolean>());
|
|
||||||
|
|
||||||
public Keltas()
|
|
||||||
{
|
|
||||||
super(Keltas.class.getSimpleName(), "hellbound/AI");
|
|
||||||
addKillId(KELTAS);
|
|
||||||
addSpawnId(KELTAS);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void spawnMinions()
|
|
||||||
{
|
|
||||||
for (Location loc : ENFORCER_SPAWN_POINTS)
|
|
||||||
{
|
|
||||||
final L2MonsterInstance minion = (L2MonsterInstance) addSpawn(ENFORCER, loc, false, 0, false);
|
|
||||||
final L2Spawn spawn = minion.getSpawn();
|
|
||||||
spawn.setRespawnDelay(60);
|
|
||||||
spawn.setAmount(1);
|
|
||||||
spawn.startRespawn();
|
|
||||||
_spawnedMonsters.add(spawn);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Location loc : EXECUTIONER_SPAWN_POINTS)
|
|
||||||
{
|
|
||||||
final L2MonsterInstance minion = (L2MonsterInstance) addSpawn(EXECUTIONER, loc, false, 0, false);
|
|
||||||
final L2Spawn spawn = minion.getSpawn();
|
|
||||||
spawn.setRespawnDelay(80);
|
|
||||||
spawn.setAmount(1);
|
|
||||||
spawn.startRespawn();
|
|
||||||
_spawnedMonsters.add(spawn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void despawnMinions()
|
|
||||||
{
|
|
||||||
if (_spawnedMonsters.isEmpty())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (L2Spawn spawn : _spawnedMonsters)
|
|
||||||
{
|
|
||||||
spawn.stopRespawn();
|
|
||||||
L2Npc minion = spawn.getLastSpawn();
|
|
||||||
if ((minion != null) && !minion.isDead())
|
|
||||||
{
|
|
||||||
minion.deleteMe();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_spawnedMonsters.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
if (event.equalsIgnoreCase("despawn"))
|
|
||||||
{
|
|
||||||
final L2Npc keltas = _spawnedKeltas;
|
|
||||||
if ((keltas != null) && !keltas.isDead())
|
|
||||||
{
|
|
||||||
broadcastNpcSay(keltas, ChatType.NPC_SHOUT, NpcStringId.THAT_IS_IT_FOR_TODAY_LET_S_RETREAT_EVERYONE_PULL_BACK);
|
|
||||||
keltas.deleteMe();
|
|
||||||
keltas.getSpawn().decreaseCount(keltas);
|
|
||||||
despawnMinions();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.onAdvEvent(event, npc, player);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
|
||||||
{
|
|
||||||
cancelQuestTimers("despawn");
|
|
||||||
despawnMinions();
|
|
||||||
return super.onKill(npc, killer, isSummon);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onSpawn(L2Npc npc)
|
|
||||||
{
|
|
||||||
_spawnedKeltas = (L2MonsterInstance) npc;
|
|
||||||
broadcastNpcSay(_spawnedKeltas, ChatType.NPC_SHOUT, NpcStringId.GUYS_SHOW_THEM_OUR_POWER);
|
|
||||||
spawnMinions();
|
|
||||||
startQuestTimer("despawn", 1800000, null, null);
|
|
||||||
return super.onSpawn(npc);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
Who are you? You must be from the mainland. Your people have already taken from us all there is to take. Return to your own kind and let us be!
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
He must be from our island. He looks unusually fit and strong.
|
|
||||||
</body></html>
|
|
@ -1,7 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
He must be from our island -- he has a robust complexion that I haven't seen anywhere else! Rumor has it that the Demons are invading the natives'
|
|
||||||
village and laying it to waste. They even seem to have plundered those treasures that the natives cherish most. I would be most grateful if you could
|
|
||||||
secure those treasures and bring them to me. Of course, I must also ask you to finish the work being done at the Ancient Temple Remnants.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Bernarde 32300-02a.htm">Ask about the work at the Ancient Temple Remnants.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Bernarde Treasure">Turn over the native treasures.</Button>
|
|
||||||
</body></html>
|
|
@ -1,7 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
He must be from our island -- he has a robust complexion that I haven't seen anywhere else! I have news from those who have visited the
|
|
||||||
Ancient Temple Remnants. They say that the soul of Derek, the First Generation Seer, wanders that place. I do not know the truth of these tales,
|
|
||||||
but I believe those who told them to me are credible witnesses. Will you go and investigate the Ancient Temple Remnants? If you encounter Derek,
|
|
||||||
please help him enter Nirvana.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Bernarde 32300-02a.htm">Ask about the work at the Ancient Temple Remnants.</Button>
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
Ah, well met, my friend! My thanks for helping Derek's soul enter Nirvana at last. The natives in the village have received his guardianship.
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
He must be from our island. He looks unusually fit and strong.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Bernarde 32300-02a.htm">Ask if he needs help.</Button>
|
|
||||||
</body></html>
|
|
@ -1,7 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
I have a favor to ask of you. You are aware, are you not, that my ancestors in the Ancient Temple Remnants are not at peace? It is a great tragedy...
|
|
||||||
However, you can give them the rest they deserve by spraying this holy water. Are your ancestors there, too? Take this holy water, I beg you,
|
|
||||||
to the ruins and use it to lay the spirits of the seers to rest. There are so many foreigners here these days that it has been difficult to find someone
|
|
||||||
willing to take on this mission...<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Bernarde HolyWater">Exchange 5 Darion's Badges for the holy water.</Button>
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
Here it is. Now, please help our ancestors rest in peace!
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
I am afraid that you do not have a sufficient number of Darion's Badges.
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
Thank you! This treasure will be a huge help to the natives.
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
Eh, where is the treasure?
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
It's been some time since I've seen you, my friend. How have you been?<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Bernarde rumors">Ask about the rumor that has been circulating.</Button>
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
Darion's minions are likely still numerous within the Steel Citadel, making our path even more difficult. We must find a way to decrease their numbers!
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
Now we must defeat both Beleth and Darion, and in doing so bring peace to Hellbound...
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
I have nothing to say. Away with you!
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
I've said enough; now I must return to my duty. Please help bring rest to those ancestors of mine who are forced to roam the ruins of the ancient temple.
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
The Resistance Village is often attacked by Demons who have begun to sense the power of the Resistance and the continent's inhabitants. Be careful!
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
Apparently Derek, the first priest, appears from time to time in the ruins of the ancient temple. How tragic that his spirit still wanders there,
|
|
||||||
unable to rest! Unless he can, I fear there will never be peace between the temple and the native village...
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
They say that the caravan slaves are being forced to work at the quarry. If you can rescue them, the caravan may become more willing to ally with the
|
|
||||||
natives. Please help us by freeing the caravan slaves!
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
Demons have been very active in the Enchanted Megaliths lately. There must be something going on for them to only increase security in that area.
|
|
||||||
Would you investigate? Perhaps you will find something that will help us reduce Beleth's power.
|
|
||||||
</body></html>
|
|
@ -1,5 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
I've learned why the Scarred Plateau was abandoned, why even the money-hungry caravans fear to go there. Perhaps, once you've fully prepared yourself,
|
|
||||||
you'd care to investigate for yourself? It is said that you can use a Magic Bottle to capture Magic Spirits from the monsters there,
|
|
||||||
which in turn are very valuable to magicians overseas. Why not try it?
|
|
||||||
</body></html>
|
|
@ -1,5 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
I've heard that that the Resistance and the mainlanders have pushed the Devils all the way back to the Steel Citadel's outer gates!
|
|
||||||
Breaching the gates is now just a matter of time. True, one of the enemy's captains has made a stand before gates, but the combined strength of our
|
|
||||||
forces should be enough to defeat even him!
|
|
||||||
</body></html>
|
|
@ -1,5 +0,0 @@
|
|||||||
<html><body>Bernarde:<br>
|
|
||||||
I hear that the mainlanders and the Resistance have advanced deep into the heart of the Steel Citadel. Oh, that this accursed land might finally see the
|
|
||||||
dawning of a new era! I could cry tears of joy just thinking about it! But we cannot celebrate just yet -- we must still go to the aid of our brethren in
|
|
||||||
the castle.
|
|
||||||
</body></html>
|
|
@ -1,113 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI.NPC.Bernarde;
|
|
||||||
|
|
||||||
import hellbound.HellboundEngine;
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Bernarde AI.
|
|
||||||
* @author DS
|
|
||||||
*/
|
|
||||||
public final class Bernarde extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
// NPCs
|
|
||||||
private static final int BERNARDE = 32300;
|
|
||||||
// Misc
|
|
||||||
private static final int NATIVE_TRANSFORM = 101;
|
|
||||||
// Items
|
|
||||||
private static final int HOLY_WATER = 9673;
|
|
||||||
private static final int DARION_BADGE = 9674;
|
|
||||||
private static final int TREASURE = 9684;
|
|
||||||
|
|
||||||
public Bernarde()
|
|
||||||
{
|
|
||||||
super(Bernarde.class.getSimpleName(), "hellbound/AI/NPC");
|
|
||||||
addFirstTalkId(BERNARDE);
|
|
||||||
addStartNpc(BERNARDE);
|
|
||||||
addTalkId(BERNARDE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
switch (event)
|
|
||||||
{
|
|
||||||
case "HolyWater":
|
|
||||||
{
|
|
||||||
if (HellboundEngine.getInstance().getLevel() == 2)
|
|
||||||
{
|
|
||||||
if (player.getInventory().getInventoryItemCount(DARION_BADGE, -1, false) >= 5)
|
|
||||||
{
|
|
||||||
if (player.exchangeItemsById("Quest", npc, DARION_BADGE, 5, HOLY_WATER, 1, true))
|
|
||||||
{
|
|
||||||
return "32300-02b.htm";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
event = "32300-02c.htm";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "Treasure":
|
|
||||||
{
|
|
||||||
if ((HellboundEngine.getInstance().getLevel() == 3) && hasQuestItems(player, TREASURE))
|
|
||||||
{
|
|
||||||
HellboundEngine.getInstance().updateTrust((int) (getQuestItemsCount(player, TREASURE) * 1000), true);
|
|
||||||
takeItems(player, TREASURE, -1);
|
|
||||||
return "32300-02d.htm";
|
|
||||||
}
|
|
||||||
event = "32300-02e.htm";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "rumors":
|
|
||||||
{
|
|
||||||
event = "32300-" + HellboundEngine.getInstance().getLevel() + "r.htm";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return event;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onFirstTalk(L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
switch (HellboundEngine.getInstance().getLevel())
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
return isTransformed(player) ? "32300-01a.htm" : "32300-01.htm";
|
|
||||||
case 2:
|
|
||||||
return isTransformed(player) ? "32300-02.htm" : "32300-03.htm";
|
|
||||||
case 3:
|
|
||||||
return isTransformed(player) ? "32300-01c.htm" : "32300-03.htm";
|
|
||||||
case 4:
|
|
||||||
return isTransformed(player) ? "32300-01d.htm" : "32300-03.htm";
|
|
||||||
default:
|
|
||||||
return isTransformed(player) ? "32300-01f.htm" : "32300-03.htm";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final boolean isTransformed(L2PcInstance player)
|
|
||||||
{
|
|
||||||
return player.isTransformed() && (player.getTransformation().getId() == NATIVE_TRANSFORM);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
<html><body>Budenka:<br>
|
|
||||||
Oh... From your appearance, I can see that you have crossed the Great Sea to come here.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Budenka Budenka-02.html">Ask who he is.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Budenka Budenka-03.html">Ask if he knows Jirrone.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Budenka Budenka-04.html">Ask if he knows Beleth.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Budenka Budenka-05.html">Ask if he knows Bernarde.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest.</Button>
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Budenka:<br>
|
|
||||||
You will find out soon enough, of that I am sure. Ha ha!
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Budenka:<br>
|
|
||||||
He was a resident here? I wonder how he escaped... You'd best ask Bernarde over at the Oasis.
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Budenka:<br>
|
|
||||||
Who is Beleth, you ask? Only the master of this island! Sure, it's rumored that he is actually a Demon, but as long as he rules fairly and well, I say "Who cares?"
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Budenka:<br>
|
|
||||||
Oh, it's you! I heard about you from the Guild. Did you see Bernarde's business through to a fit conclusion?
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Budenka:<br>
|
|
||||||
Eh, you have a pretty lofty reputation in the Guild already. How are you?
|
|
||||||
</body></html>
|
|
@ -1,82 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI.NPC.Budenka;
|
|
||||||
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Budenka AI.
|
|
||||||
* @author St3eT
|
|
||||||
*/
|
|
||||||
public final class Budenka extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
// NPCs
|
|
||||||
private static final int BUDENKA = 32294;
|
|
||||||
// Items
|
|
||||||
private static final int STANDART_CERT = 9851;
|
|
||||||
private static final int PREMIUM_CERT = 9852;
|
|
||||||
|
|
||||||
public Budenka()
|
|
||||||
{
|
|
||||||
super(Budenka.class.getSimpleName(), "hellbound/AI/NPC");
|
|
||||||
addStartNpc(BUDENKA);
|
|
||||||
addFirstTalkId(BUDENKA);
|
|
||||||
addTalkId(BUDENKA);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
String htmltext = null;
|
|
||||||
switch (event)
|
|
||||||
{
|
|
||||||
case "Budenka-02.html":
|
|
||||||
case "Budenka-03.html":
|
|
||||||
case "Budenka-04.html":
|
|
||||||
case "Budenka-05.html":
|
|
||||||
{
|
|
||||||
htmltext = event;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return htmltext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onFirstTalk(L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
String htmltext = null;
|
|
||||||
if (hasQuestItems(player, STANDART_CERT, PREMIUM_CERT))
|
|
||||||
{
|
|
||||||
htmltext = "Budenka-07.html";
|
|
||||||
}
|
|
||||||
else if (hasQuestItems(player, STANDART_CERT))
|
|
||||||
{
|
|
||||||
htmltext = "Budenka-06.html";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
htmltext = "Budenka-01.html";
|
|
||||||
}
|
|
||||||
return htmltext;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
Ah, you have come from the continent! Have you seen my little brother?<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron Rumor">Ask about the rumor.</Button>
|
|
||||||
</body></html>
|
|
@ -1,9 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
Finally, we have regained our home! Please give my regards to Jirrone, who left the island some time ago.<br>
|
|
||||||
There is obviously a great deal of work for me to do now that we have regained our village, but I will gladly create native clothes for you whenever you
|
|
||||||
wish it.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron Helmet">Craft Native Helmet.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron Tunic">Craft Native Tunic.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron Pants">Craft Native Pants.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron Rumor">Ask about the rumor.</Button>
|
|
||||||
</body></html>
|
|
@ -1,8 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
Ah, now I can trust you! If you give me 10 Darion's Badges, I will make you some of our clothes as a token of my appreciation.
|
|
||||||
Wear them here and the people of the village will welcome you.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron Helmet">Craft Native Helmet.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron Tunic">Craft Native Tunic.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron Pants">Craft Native Pants.</Button>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron Rumor">Ask about the rumor.</Button>
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
The Steel Citadel is filled with monsters, which must be cleared level by level. To conquer the Steel Citadel, destroy them all!
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
Now all that remains is to defeat Darion and Beleth and restore peace to Hellbound.
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
Perhaps it is a result of the seal being broken, but now we occasionally encounter a few adventurers from the mainland. You may also meet some of our
|
|
||||||
brethren who have been led astray by Darion's minions. Please rescue them!
|
|
||||||
</body></html>
|
|
@ -1,5 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
The mainlanders are incredibly strong ?they have advanced all the way to the Oasis. Rumor also has it that the ghosts of priests and warriors appear
|
|
||||||
from time to time at the ancient temple ruins located to the southwest of the Oasis. Talk to Bernarde at the Oasis to learn more.<br>
|
|
||||||
I should mention that Bernarde has a deep mistrust of foreigners, so you'd be well advised to dress like a native when you meet him.
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
The Resistance village continues to suffer frequent attacks from the Devils, who are probably fearful that the mainlanders and the Resistance will join
|
|
||||||
forces to oppose them. Please go and save the village!
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
The Resistance village remains under frequent attack by the Devils, but they rarely break through now thanks to the efforts of both the mainlanders and
|
|
||||||
the natives. Still, we need to strike our enemy a decisive blow... Perhaps Bernarde will know of a way.
|
|
||||||
</body></html>
|
|
@ -1,5 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
The Resistance village is saved, and our home is again our own! Now we must formulate a plan to rescue the caravan slaves imprisoned in the quarry.
|
|
||||||
Beleth desired that place because of its wealth of rare minerals. If we can save those slaves, I'm sure that the caravan will be favorably disposed
|
|
||||||
towards us. Without their help, we will surely starve...
|
|
||||||
</body></html>
|
|
@ -1,5 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
Darion's influence has grown weak in the face of the united opposition of the newcomers from the continent, the natives and the Caravan.
|
|
||||||
His army has already abandoned most of Hellbound to the Resistance. Still, Darion's forces are doing everything possible to defend the Enchanted Megaliths.
|
|
||||||
I wonder -- is there something important buried in there?
|
|
||||||
</body></html>
|
|
@ -1,5 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
I've learned why even the money-hungry caravans fear to go to the Scarred Plateau. How can such a terrible place exist... I have not been there myself,
|
|
||||||
but they say that it is inhabited by terrible monsters. That said, apparently it is possible to obtain Magic Spirits from those monsters,
|
|
||||||
for which foreign magicians will pay a steep price. If you could capture some for us, we would be in your debt.
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
Amazing! I just heard that that the Resistance and the mainlanders have joined forces and are pushing the Devils back to the outer gates!
|
|
||||||
There is a captain guarding the gates, but I think we will prevail and breach the defenses!
|
|
||||||
</body></html>
|
|
@ -1,5 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
I hear that the outer gates have fallen and our forces are steadily advancing into the Steel Citadel! There is a rumor that the Dwarf who designed the
|
|
||||||
Steel Citadel still resides somewhere inside the castle. Many of our brethren also live in the Oasis or in the town located within the castle walls.
|
|
||||||
Please save them! If you have any of Darion's Badges, you should be able to travel anywhere without restrictions.
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
I cannot trust you. Outsider!<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron 32345-01.htm">Back.</Button>
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Buron:<br>
|
|
||||||
Sorry, you do not have the required items.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Buron 32345-02.htm">Back</Button>
|
|
||||||
</body></html>
|
|
@ -1,105 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI.NPC.Buron;
|
|
||||||
|
|
||||||
import hellbound.HellboundEngine;
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Buron AI.
|
|
||||||
* @author DS
|
|
||||||
*/
|
|
||||||
public final class Buron extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
private static final int BURON = 32345;
|
|
||||||
private static final int HELMET = 9669;
|
|
||||||
private static final int TUNIC = 9670;
|
|
||||||
private static final int PANTS = 9671;
|
|
||||||
private static final int DARION_BADGE = 9674;
|
|
||||||
|
|
||||||
public Buron()
|
|
||||||
{
|
|
||||||
super(Buron.class.getSimpleName(), "hellbound/AI/NPC");
|
|
||||||
addFirstTalkId(BURON);
|
|
||||||
addStartNpc(BURON);
|
|
||||||
addTalkId(BURON);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
String htmltext = event;
|
|
||||||
if ("Rumor".equalsIgnoreCase(event))
|
|
||||||
{
|
|
||||||
htmltext = "32345-" + HellboundEngine.getInstance().getLevel() + "r.htm";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (HellboundEngine.getInstance().getLevel() < 2)
|
|
||||||
{
|
|
||||||
htmltext = "32345-lowlvl.htm";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (getQuestItemsCount(player, DARION_BADGE) >= 10)
|
|
||||||
{
|
|
||||||
takeItems(player, DARION_BADGE, 10);
|
|
||||||
if (event.equalsIgnoreCase("Tunic"))
|
|
||||||
{
|
|
||||||
player.addItem("Quest", TUNIC, 1, npc, true);
|
|
||||||
}
|
|
||||||
else if (event.equalsIgnoreCase("Helmet"))
|
|
||||||
{
|
|
||||||
player.addItem("Quest", HELMET, 1, npc, true);
|
|
||||||
}
|
|
||||||
else if (event.equalsIgnoreCase("Pants"))
|
|
||||||
{
|
|
||||||
player.addItem("Quest", PANTS, 1, npc, true);
|
|
||||||
}
|
|
||||||
htmltext = null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
htmltext = "32345-noitems.htm";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return htmltext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onFirstTalk(L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
getQuestState(player, true);
|
|
||||||
switch (HellboundEngine.getInstance().getLevel())
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
return "32345-01.htm";
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
case 4:
|
|
||||||
return "32345-02.htm";
|
|
||||||
default:
|
|
||||||
return "32345-01a.htm";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Deltuva:<br>
|
|
||||||
Hmm...I can't recall you ever having been to the Steel Citadel before. I'm afraid I cannot let you in -- it's simply too dangerous!
|
|
||||||
</body></html>
|
|
@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI.NPC.Deltuva;
|
|
||||||
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.model.Location;
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deltuva AI.
|
|
||||||
* @author GKR
|
|
||||||
*/
|
|
||||||
public final class Deltuva extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
// NPCs
|
|
||||||
private static final int DELTUVA = 32313;
|
|
||||||
// Location
|
|
||||||
private static final Location TELEPORT = new Location(17934, 283189, -9701);
|
|
||||||
|
|
||||||
public Deltuva()
|
|
||||||
{
|
|
||||||
super(Deltuva.class.getSimpleName(), "hellbound/AI/NPC");
|
|
||||||
addStartNpc(DELTUVA);
|
|
||||||
addTalkId(DELTUVA);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
if (event.equalsIgnoreCase("teleport"))
|
|
||||||
{
|
|
||||||
player.teleToLocation(TELEPORT);
|
|
||||||
}
|
|
||||||
return super.onAdvEvent(event, npc, player);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Falk:<br>
|
|
||||||
I see that you're an adventurer from a foreign land. Would you consider helping me? If you do, I'll help smooth your dealings with others in my Caravan group.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest Falk">Help Falk.</Button>
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Falk:<br>
|
|
||||||
You already gave me a Darion's Badge, remember? You really should deal with someone else now.
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Falk:<br>
|
|
||||||
I'm not asking anything particularly difficult, but I do need a favor from you, my friend. We in the Caravan travel to and through many places on this island, which requires a great many of Darion's Badges. Although we are able to lay our hands on some, they are simply not enough for us to turn a profit, even considering the natives' unquenching demand for Prayer Fragments... If you can spare any Darion's Badges, please give them to me. I don't need that many -- even 20 will suffice. In return, I will give you a voucher that will allow you trade with the Caravan members.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Falk badges">Give him Darion's Badges.</Button>
|
|
||||||
</body></html>
|
|
@ -1,3 +0,0 @@
|
|||||||
<html><body>Falk:<br>
|
|
||||||
Thank you! Here, take this and you'll be able to trade with other Caravans.
|
|
||||||
</body></html>
|
|
@ -1,4 +0,0 @@
|
|||||||
<html><body>Falk:<br>
|
|
||||||
I'm afraid that you don't have enough Darion's Badges. Please obtain some more and come back.<br>
|
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Falk 32297-02.htm">Return.</Button>
|
|
||||||
</body></html>
|
|
@ -1,86 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004-2015 L2J DataPack
|
|
||||||
*
|
|
||||||
* This file is part of L2J DataPack.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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.
|
|
||||||
*
|
|
||||||
* L2J DataPack 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 hellbound.AI.NPC.Falk;
|
|
||||||
|
|
||||||
import ai.npc.AbstractNpcAI;
|
|
||||||
|
|
||||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
|
||||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Falk AI.
|
|
||||||
* @author DS
|
|
||||||
*/
|
|
||||||
public final class Falk extends AbstractNpcAI
|
|
||||||
{
|
|
||||||
// NPCs
|
|
||||||
private static final int FALK = 32297;
|
|
||||||
// Items
|
|
||||||
private static final int DARION_BADGE = 9674;
|
|
||||||
private static final int BASIC_CERT = 9850; // Basic Caravan Certificate
|
|
||||||
private static final int STANDART_CERT = 9851; // Standard Caravan Certificate
|
|
||||||
private static final int PREMIUM_CERT = 9852; // Premium Caravan Certificate
|
|
||||||
|
|
||||||
public Falk()
|
|
||||||
{
|
|
||||||
super(Falk.class.getSimpleName(), "hellbound/AI/NPC");
|
|
||||||
addFirstTalkId(FALK);
|
|
||||||
addStartNpc(FALK);
|
|
||||||
addTalkId(FALK);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onFirstTalk(L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
if (hasAtLeastOneQuestItem(player, BASIC_CERT, STANDART_CERT, PREMIUM_CERT))
|
|
||||||
{
|
|
||||||
return "32297-01a.htm";
|
|
||||||
}
|
|
||||||
return "32297-01.htm";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onTalk(L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
if (hasAtLeastOneQuestItem(player, BASIC_CERT, STANDART_CERT, PREMIUM_CERT))
|
|
||||||
{
|
|
||||||
return "32297-01a.htm";
|
|
||||||
}
|
|
||||||
return "32297-02.htm";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
|
||||||
{
|
|
||||||
if (event.equalsIgnoreCase("badges"))
|
|
||||||
{
|
|
||||||
if (!hasAtLeastOneQuestItem(player, BASIC_CERT, STANDART_CERT, PREMIUM_CERT))
|
|
||||||
{
|
|
||||||
if (getQuestItemsCount(player, DARION_BADGE) >= 20)
|
|
||||||
{
|
|
||||||
takeItems(player, DARION_BADGE, 20);
|
|
||||||
giveItems(player, BASIC_CERT, 1);
|
|
||||||
return "32297-02a.htm";
|
|
||||||
}
|
|
||||||
return "32297-02b.htm";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.onAdvEvent(event, npc, player);
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user