Last active
August 29, 2015 14:08
-
-
Save Pandragon/3f4d5f831002880475ef to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### Eclipse Workspace Patch 1.0 | |
#P L2J_DataPack_BETA | |
Index: dist/game/data/scripts.cfg | |
=================================================================== | |
--- dist/game/data/scripts.cfg (revision 10487) | |
+++ dist/game/data/scripts.cfg (working copy) | |
@@ -313,3 +313,4 @@ | |
#events/FreyaCelebration/FreyaCelebration.java | |
#events/MasterOfEnchanting/MasterOfEnchanting.java | |
#events/LoveYourGatekeeper/LoveYourGatekeeper.java | |
+#events/CatchATiger/CatchATiger.java | |
Index: dist/game/data/scripts/events/CatchATiger/13292-02.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-02.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-02.htm (working copy) | |
@@ -0,0 +1,9 @@ | |
+<html><head> | |
+<body>Employee of Magic Research Institute:<br> | |
+You're such a trouper, really!<br> | |
+To get a large enough sample for our study, we'll need at least 20 Apigas or Golden Apigas. The Institute rewards those who help. | |
+And, you'll be doing your part for magical science!<br><br><br> | |
+<a action="bypass -h Quest CatchATiger give_reward">Hand over 20 Apigas.</a><br> | |
+<a action="bypass -h Quest CatchATiger give_adv_reward">Hand over 20 Golden Apigas.</a> | |
+</body></html> | |
+ | |
Index: dist/game/data/stats/skills/09000-09099.xml | |
=================================================================== | |
--- dist/game/data/stats/skills/09000-09099.xml (revision 10487) | |
+++ dist/game/data/stats/skills/09000-09099.xml (working copy) | |
@@ -1477,26 +1477,46 @@ | |
</for> | |
</skill> | |
<skill id="9088" levels="1" name="Cupid's Arrow"> | |
+ <set name="castRange" val="500" /> | |
<set name="effectPoint" val="-1000" /> | |
+ <set name="effectRange" val="700" /> | |
+ <set name="hitTime" val="1000" /> | |
<set name="icon" val="icon.skill3260" /> | |
<set name="isMagic" val="2" /> <!-- Static Skill --> | |
<set name="itemConsumeCount" val="1" /> | |
<set name="itemConsumeId" val="17067" /> <!-- Event - Cupid's Fatigue Relief Potion --> | |
<set name="magicLvl" val="1" /> | |
+ <set name="mpConsume" val="1" /> | |
<set name="operateType" val="A1" /> | |
+ <set name="power" val="100" /> | |
<set name="reuseDelay" val="1000" /> | |
- <set name="targetType" val="NONE" /> | |
+ <set name="skillType" val="PDAM" /> | |
+ <set name="staticDamage" val="true" /> | |
+ <set name="target" val="ONE" /> | |
+ <cond msgId="109"> | |
+ <target npcId="13196,13286,13287,13288,13289,13290,13291" /> | |
+ </cond> | |
</skill> | |
<skill id="9089" levels="1" name="Cupid's Major Cure"> | |
+ <set name="castRange" val="500" /> | |
<set name="effectPoint" val="-1000" /> | |
+ <set name="effectRange" val="700" /> | |
+ <set name="hitTime" val="1000" /> | |
<set name="icon" val="icon.skill3260" /> | |
<set name="isMagic" val="2" /> <!-- Static Skill --> | |
<set name="itemConsumeCount" val="1" /> | |
<set name="itemConsumeId" val="17068" /> <!-- Event - Cupid's Powerful Fatigue Relief Potion --> | |
<set name="magicLvl" val="1" /> | |
+ <set name="mpConsume" val="1" /> | |
<set name="operateType" val="A1" /> | |
+ <set name="power" val="200" /> | |
<set name="reuseDelay" val="4000" /> | |
- <set name="targetType" val="NONE" /> | |
+ <set name="skillType" val="PDAM" /> | |
+ <set name="staticDamage" val="true" /> | |
+ <set name="target" val="TARGET_ONE" /> | |
+ <cond msgId="109"> | |
+ <target npcId="13196,13286,13287,13288,13289,13290,13291" /> | |
+ </cond> | |
</skill> | |
<skill id="9090" levels="1" name="Fighter's Will"> | |
<!-- Confirmed CT2.5 --> | |
Index: dist/game/data/scripts/events/CatchATiger/13292-06.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-06.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-06.htm (working copy) | |
@@ -0,0 +1,6 @@ | |
+<html><head> | |
+<body> | |
+Employee of Magic Research Institute:<br> | |
+Oh, what a superstar! If I had my way, I'd get you a plaque put up in the Institute.<br>...<br> | |
+Sadly, you'll have to make do with this. | |
+</body></html> | |
Index: dist/game/data/scripts/events/CatchATiger/config.xml | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/config.xml (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/config.xml (working copy) | |
@@ -0,0 +1,46 @@ | |
+<event name="Catch a Tiger" active="01 09 2011-15 09 2011" dropPeriod="01 09 2011-08 09 2011"> | |
+ <droplist> | |
+ <!-- No drop here --> | |
+ </droplist> | |
+ <spawnlist> | |
+ <add npc="13292" x="16111" y="142850" z="-2707" heading="16000" /> | |
+ <add npc="13292" x="17275" y="145000" z="-3037" heading="25000" /> | |
+ <add npc="13292" x="83037" y="149324" z="-3470" heading="44000" /> | |
+ <add npc="13292" x="82145" y="148609" z="-3468" heading="0" /> | |
+ <add npc="13292" x="81755" y="146487" z="-3534" heading="32768" /> | |
+ <add npc="13292" x="-81031" y="150038" z="-3045" heading="0" /> | |
+ <add npc="13292" x="-83156" y="150994" z="-3130" heading="0" /> | |
+ <add npc="13292" x="-13727" y="122117" z="-2990" heading="16384" /> | |
+ <add npc="13292" x="-14129" y="123869" z="-3118" heading="40959" /> | |
+ <add npc="13292" x="-84411" y="244813" z="-3730" heading="57343" /> | |
+ <add npc="13292" x="-84023" y="243051" z="-3730" heading="4096" /> | |
+ <add npc="13292" x="46908" y="50856" z="-2997" heading="8192" /> | |
+ <add npc="13292" x="45538" y="48357" z="-3061" heading="18000" /> | |
+ <add npc="13292" x="9929" y="16324" z="-4576" heading="62999" /> | |
+ <add npc="13292" x="11546" y="17599" z="-4586" heading="46900" /> | |
+ <add npc="13292" x="81987" y="53723" z="-1497" heading="0" /> | |
+ <add npc="13292" x="81083" y="56118" z="-1562" heading="32768" /> | |
+ <add npc="13292" x="147200" y="25614" z="-2014" heading="16384" /> | |
+ <add npc="13292" x="148557" y="26806" z="-2206" heading="32768" /> | |
+ <add npc="13292" x="117356" y="76708" z="-2695" heading="49151" /> | |
+ <add npc="13292" x="115887" y="76382" z="-2714" heading="0" /> | |
+ <add npc="13292" x="-117239" y="46842" z="367" heading="49151" /> | |
+ <add npc="13292" x="-119494" y="44882" z="367" heading="24576" /> | |
+ <add npc="13292" x="111004" y="218928" z="-3544" heading="16384" /> | |
+ <add npc="13292" x="108426" y="221876" z="-3600" heading="49151" /> | |
+ <add npc="13292" x="-45278" y="-112766" z="-241" heading="0" /> | |
+ <add npc="13292" x="-45372" y="-114104" z="-241" heading="16384" /> | |
+ <add npc="13292" x="115096" y="-178370" z="-891" heading="0" /> | |
+ <add npc="13292" x="116199" y="-182694" z="-1506" heading="0" /> | |
+ <add npc="13292" x="86865" y="-142915" z="-1341" heading="26000" /> | |
+ <add npc="13292" x="85584" y="-142490" z="-1343" heading="0" /> | |
+ <add npc="13292" x="147421" y="-55435" z="-2736" heading="49151" /> | |
+ <add npc="13292" x="148206" y="-55786" z="-2782" heading="61439" /> | |
+ <add npc="13292" x="43165" y="-48461" z="-797" heading="17000" /> | |
+ <add npc="13292" x="43966" y="-47709" z="-798" heading="49999" /> | |
+ </spawnlist> | |
+ <messages> | |
+ <add type="onEnd" text="Catch a Tiger event end!" /> | |
+ <add type="onEnter" text="Catch a Tiger: Event ongoing!" /> | |
+ </messages> | |
+</event> | |
\ No newline at end of file | |
Index: dist/game/data/scripts/events/CatchATiger/13292-11.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-11.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-11.htm (working copy) | |
@@ -0,0 +1,6 @@ | |
+<html><head><body>Employee of Magic Research Institute: | |
+<br>Good to see you again! | |
+<br>You survived the tiger menace, eh? Now for the next part. Let's take a look at the contract. | |
+<br>Apigas and Golden Apigas are how you buy your rewards. | |
+<a action="bypass -h Quest CatchATiger give_potions">Purchase 200 Sedative Potions (2010 Adena)</a> | |
+<a action="bypass -h Quest CatchATiger 13292-02.htm">Receive a reward.</a></body></html> | |
Index: dist/game/data/scripts/events/CatchATiger/13292-03.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-03.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-03.htm (working copy) | |
@@ -0,0 +1,7 @@ | |
+<html><head> | |
+<body> | |
+Employee of Magic Research Institute:<br> | |
+Not enough Adena.<br> | |
+You need at least <font color="LEVEL">2010 Adena</font> | |
+</body></html> | |
+ | |
Index: dist/game/data/scripts/events/CatchATiger/13292-07.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-07.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-07.htm (working copy) | |
@@ -0,0 +1,9 @@ | |
+<html><head> | |
+<body> | |
+Employee of Magic Research Institute:<br> | |
+We're not sure. All we know is that, when we use this new experimental summoning scroll, creatures appear, we think from another dimension.<br> | |
+The White Tigers are particularly interesting for our research, and we're rewarding anyone who can subdue them long enough for us to take a look.<br> | |
+It's not a difficult task, provided you've got the spine to stare down a White Tiger. Brrr... those eyes.<br><br><br> | |
+<a action="bypass -h Quest CatchATiger 13292-08.htm">How can I help?</a> | |
+</body></html> | |
+ | |
Index: dist/game/data/stats/npcs/13200-13300.xml | |
=================================================================== | |
--- dist/game/data/stats/npcs/13200-13300.xml (revision 10487) | |
+++ dist/game/data/stats/npcs/13200-13300.xml (working copy) | |
@@ -3421,7 +3421,7 @@ | |
<height normal="25" /> | |
</collision> | |
</npc> | |
- <npc id="13286" level="85" type="L2Npc" name="Baby White Tiger"> | |
+ <npc id="13286" level="85" type="L2Monster" name="Baby White Tiger"> | |
<!-- Confirmed CT2.5 --> | |
<race>BEAST</race> | |
<sex>MALE</sex> | |
@@ -3457,7 +3457,7 @@ | |
<height normal="15.7" /> | |
</collision> | |
</npc> | |
- <npc id="13287" level="85" type="L2Npc" name="Baby White Tiger Captain"> | |
+ <npc id="13287" level="85" type="L2Monster" name="Baby White Tiger Captain"> | |
<!-- Confirmed CT2.5 --> | |
<race>BEAST</race> | |
<sex>MALE</sex> | |
@@ -3493,7 +3493,7 @@ | |
<height normal="29.5" /> | |
</collision> | |
</npc> | |
- <npc id="13288" level="85" type="L2Npc" name="Gloomy Baby White Tiger"> | |
+ <npc id="13288" level="85" type="L2Monster" name="Gloomy Baby White Tiger"> | |
<!-- Confirmed CT2.5 --> | |
<race>BEAST</race> | |
<sex>MALE</sex> | |
@@ -3529,7 +3529,7 @@ | |
<height normal="15.7" /> | |
</collision> | |
</npc> | |
- <npc id="13289" level="85" type="L2Npc" name="Gloomy Baby White Tiger Captain"> | |
+ <npc id="13289" level="85" type="L2Monster" name="Gloomy Baby White Tiger Captain"> | |
<!-- Confirmed CT2.5 --> | |
<race>BEAST</race> | |
<sex>MALE</sex> | |
@@ -3565,7 +3565,7 @@ | |
<height normal="29.5" /> | |
</collision> | |
</npc> | |
- <npc id="13290" level="85" type="L2Npc" name="White Tiger"> | |
+ <npc id="13290" level="85" type="L2Monster" name="White Tiger"> | |
<!-- Confirmed CT2.5 --> | |
<race>BEAST</race> | |
<sex>MALE</sex> | |
@@ -3601,7 +3601,7 @@ | |
<height normal="17.2" /> | |
</collision> | |
</npc> | |
- <npc id="13291" level="85" type="L2Npc" name="White Tiger Captain"> | |
+ <npc id="13291" level="85" type="L2Monster" name="White Tiger Captain"> | |
<!-- Confirmed CT2.5 --> | |
<race>BEAST</race> | |
<sex>MALE</sex> | |
@@ -3674,7 +3674,7 @@ | |
<height normal="17.5" /> | |
</collision> | |
</npc> | |
- <npc id="13293" level="85" type="L2Npc"> | |
+ <npc id="13293" level="85" type="L2Monster"> | |
<!-- Confirmed CT2.5 --> | |
<race>CONSTRUCT</race> | |
<sex>MALE</sex> | |
@@ -3709,7 +3709,7 @@ | |
<height normal="0.1" /> | |
</collision> | |
</npc> | |
- <npc id="13294" level="85" type="L2Npc"> | |
+ <npc id="13294" level="85" type="L2Monster"> | |
<!-- Confirmed CT2.5 --> | |
<race>CONSTRUCT</race> | |
<sex>MALE</sex> | |
Index: dist/game/data/scripts/events/CatchATiger/13292-12.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-12.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-12.htm (working copy) | |
@@ -0,0 +1,6 @@ | |
+<html><head> | |
+<body> | |
+Employee of Magic Research Institute:<br> | |
+Looks like we have enough tigers for our study. I can't say I'm looking forward to the next part--but at least I didn't have to face the | |
+wild ones! | |
+</body></html> | |
Index: dist/game/data/scripts/events/CatchATiger/13292-04.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-04.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-04.htm (working copy) | |
@@ -0,0 +1,7 @@ | |
+<html><head> | |
+<body> | |
+Employee of Magic Research Institute:<br> | |
+Sorry, we need at least <font color="LEVEL">20</font> Apigas before we'll give out a reward.<br> | |
+I'm not going anywhere, so take your time getting more. | |
+</body></html> | |
+ | |
Index: dist/game/data/scripts/events/CatchATiger/13292-08.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-08.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-08.htm (working copy) | |
@@ -0,0 +1,13 @@ | |
+<html><head><body>Employee of Magic Research Institute: | |
+<br>Oh, you have a kind heart! | |
+<br>I'll start you with a summoning scroll and some Sedative Potion, and I'll have more for you <font color="LEVEL">every 12 hours</font>. | |
+When you get out there, use the scroll to summon a beast from another dimension. Don't worry, we've worked out most of the kinks--they almost | |
+always call a White Tiger Cub these days. Use the sedative to put them to sleep, but try to do it without the White Tiger Matriarch knowing, | |
+because she gets kind of cranky. I find being in a group is the best way to do it. <font color="LEVEL">One thing to remember</font> is that the | |
+cubs can be easily scared away.<br> | |
+Once you subdue them, collect their Apiga, and bring it to us.<br> | |
+Oh, and if you happen to run into adult White Tigers, they have Golden Apiga, and we'll pay extra for that.<br> | |
+Oh, and get us those Apigas in record time, and we'll pay double. Not a bad way to make a living, eh?<br><br><br> | |
+<a action="bypass -h Quest CatchATiger 13292-09.htm">What are Apigas, exactly?</a> | |
+</body></html> | |
+ | |
Index: dist/game/data/scripts/events/CatchATiger/13292-01.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-01.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-01.htm (working copy) | |
@@ -0,0 +1,12 @@ | |
+<html><head> | |
+<body> | |
+Employee of Magic Research Institute:<br> | |
+Yeeeeeee--oh, it's just you. Sorry, I'm a bit on edge lately, what with all these extradimensional beasts.<br> | |
+I work for the Magic Research Institute. You've probably heard of our work before, but this project might be the death of me. | |
+Who thought it was a good idea to start summoning things from other dimensions, I ask you?<br> | |
+Hey, perhaps you can help us out with these tigers?<br><br><br> | |
+<a action="bypass -h Quest CatchATiger 13292-07.htm">What kind of tigers?</a><br> | |
+<a action="bypass -h Quest CatchATiger give_package">Purchase the White Tiger event pack (2010 Adena)</a><br> | |
+<a action="bypass -h Quest CatchATiger give_potions">Purchase 200 Sedative Potions (2010 Adena)</a><br> | |
+<a action="bypass -h Quest CatchATiger 13292-02.htm">Receive reward.</a></body></html> | |
+ | |
Index: dist/game/data/scripts/events/CatchATiger/13292-05.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-05.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-05.htm (working copy) | |
@@ -0,0 +1,6 @@ | |
+<html><head> | |
+<body> | |
+Employee of Magic Research Institute:<br> | |
+Oh dear, it doesn't look like you have <font color="LEVEL">20 Golden Apigas</font> yet.<br> | |
+I won't rush you. Take your time. | |
+</body></html> | |
Index: dist/game/data/scripts/events/CatchATiger/CatchATiger.java | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/CatchATiger.java (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/CatchATiger.java (working copy) | |
@@ -0,0 +1,666 @@ | |
+/* | |
+ * Copyright (C) 2004-2014 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 events.CatchATiger; | |
+ | |
+import com.l2jserver.gameserver.ThreadPoolManager; | |
+import com.l2jserver.gameserver.model.L2Party; | |
+import com.l2jserver.gameserver.model.actor.L2Npc; | |
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; | |
+import com.l2jserver.gameserver.model.event.LongTimeEvent; | |
+import com.l2jserver.gameserver.model.holders.SkillHolder; | |
+import com.l2jserver.gameserver.model.itemcontainer.Inventory; | |
+import com.l2jserver.gameserver.model.quest.QuestState; | |
+import com.l2jserver.gameserver.model.skills.Skill; | |
+import com.l2jserver.gameserver.network.NpcStringId; | |
+import com.l2jserver.gameserver.network.SystemMessageId; | |
+import com.l2jserver.gameserver.network.clientpackets.Say2; | |
+import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage; | |
+import com.l2jserver.gameserver.network.serverpackets.NpcSay; | |
+import com.l2jserver.gameserver.network.serverpackets.PlaySound; | |
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage; | |
+import com.l2jserver.gameserver.util.Util; | |
+import com.l2jserver.util.Rnd; | |
+ | |
+/** | |
+ * @author GKR Retail Event: Catch a Tiger | |
+ */ | |
+public class CatchATiger extends LongTimeEvent | |
+{ | |
+ private static final int PIG = 13196; | |
+ private static final int MANAGER = 13292; | |
+ private static final int BABY_TIGER = 13286; | |
+ private static final int BABY_TIGER_CAPTAIN = 13287; | |
+ private static final int GLOOMY_TIGER = 13288; | |
+ private static final int GLOOMY_TIGER_CAPTAIN = 13289; | |
+ private static final int WHITE_TIGER = 13290; | |
+ private static final int WHITE_TIGER_CAPTAIN = 13291; | |
+ | |
+ private static final int SUMMONER = 13293; | |
+ private static final int BOSS_SUMMONER = 13294; | |
+ | |
+ private static final int[] SKILLS_DMG_TO_ME = | |
+ { | |
+ 9088, | |
+ 9089 | |
+ }; | |
+ private static final SkillHolder[] SKILLS_DMG_BY_ME = | |
+ { | |
+ new SkillHolder(6133, 1), | |
+ new SkillHolder(6135, 1) | |
+ }; | |
+ private static final int PAYMENT = 2010; | |
+ private static final long INTERVAL = 12L * 60 * 60 * 1000; // 12h | |
+ private static final int PACKAGE = 17066; | |
+ private static final int POTION = 17067; | |
+ private static final int APIGA = 14720; | |
+ private static final int GOLDEN_APIGA = 14721; | |
+ private static final int[] REWARDS = | |
+ { | |
+ 17080, | |
+ 17079, | |
+ 17078, | |
+ 17077, | |
+ 17076, | |
+ 17075, | |
+ 17074, | |
+ 17073, | |
+ 17072, | |
+ 17071, | |
+ 17070, | |
+ 17069 | |
+ }; | |
+ private static final int[] CHANCES = | |
+ { | |
+ 484871, | |
+ 227307, | |
+ 550, | |
+ 515, | |
+ 470, | |
+ 382, | |
+ 275, | |
+ 211, | |
+ 168, | |
+ 80, | |
+ 35, | |
+ 0 | |
+ }; | |
+ | |
+ static final NpcStringId[] COUNTDOWN_MESSAGES = | |
+ { | |
+ NpcStringId.TIME_UP, | |
+ NpcStringId.N1_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N2_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N3_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N4_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N5_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N6_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N7_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N8_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N9_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N10_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N11_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N12_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N13_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N14_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N15_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N16_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N17_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N18_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N19_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N20_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N21_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N22_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N23_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N24_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N25_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N26_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N27_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N28_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N29_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N30_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N31_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N32_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N33_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N34_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N35_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N36_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N37_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N38_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N39_SECONDS_ARE_REMAINING, | |
+ NpcStringId.N40_SECONDS_ARE_REMAINING, | |
+ }; | |
+ | |
+ private static final NpcStringId[] PIG_SKILL_ATTACK_TEXT = | |
+ { | |
+ NpcStringId.WHATS_THIS_FOOD, | |
+ NpcStringId.MY_ENERGY_IS_OVERFLOWING_I_DONT_NEED_ANY_FATIGUE_RECOVERY_POTION, | |
+ NpcStringId.WHATS_THE_MATTER_THATS_AN_AMATEUR_MOVE | |
+ }; | |
+ | |
+ private static final NpcStringId[] PIG_ON_SPAWN_TEXT = | |
+ { | |
+ NpcStringId.ROAR_NO_OINK_OINK_SEE_IM_A_PIG_OINK_OINK, | |
+ NpcStringId.WHO_AM_I_WHERE_AM_I_OINK_OINK | |
+ }; | |
+ | |
+ private static final NpcStringId[] NO_SKILL_ATTACK_TEXT = | |
+ { | |
+ NpcStringId.HEY_ARE_YOU_PLANNING_ON_EATING_ME_USE_A_CUPIDS_FATIGUE_RECOVERY_POTION_ALREADY, | |
+ NpcStringId.ILL_PASS_ON_AN_AMATEURS_MERIDIAN_MASSAGE_USE_A_CUPIDS_FATIGUE_RECOVERY_POTION_ALREADY | |
+ }; | |
+ | |
+ private static final String[] SKILL_ATTACK_TEXT = | |
+ { | |
+ "*Roar* *Grunt Grunt* I don't feel like doing anything right now.", | |
+ "*Roar* Yeah, right there! That tickles!", | |
+ "[I feel kind of sleepy...", | |
+ "Wow I feel really tired today... I wonder why?", | |
+ "*Roar* My body feels as light as a feather." | |
+ }; | |
+ | |
+ private static final String[] DEATH_TEXT = | |
+ { | |
+ "*Roar* I feel like I could use a nap...!", | |
+ "*Meow* I'm sleepy. Think I'll go take a nap.", | |
+ "I can't feel my legs anymore... ZzzZzz" | |
+ }; | |
+ | |
+ private static final String[] FORTUNE_DEATH_TEXT = | |
+ { | |
+ "*Roar* I think I'll go to sleep.", | |
+ "So sleepy. You wouldn't happen to be the sandman, %name%, would you?", | |
+ "Incredible. From now on, I'll compare all massages to this one with %name%!" | |
+ }; | |
+ | |
+ private CatchATiger() | |
+ { | |
+ super(CatchATiger.class.getSimpleName(), "events"); | |
+ | |
+ addFirstTalkId(MANAGER); | |
+ addStartNpc(MANAGER); | |
+ addTalkId(MANAGER); | |
+ | |
+ for (int i = BABY_TIGER; i <= WHITE_TIGER_CAPTAIN; i++) | |
+ { | |
+ addSpawnId(i); | |
+ addAttackId(i); | |
+ addKillId(i); | |
+ } | |
+ | |
+ addSpawnId(SUMMONER); | |
+ addSpawnId(BOSS_SUMMONER); | |
+ addSpawnId(PIG); | |
+ } | |
+ | |
+ @Override | |
+ public String onFirstTalk(L2Npc npc, L2PcInstance player) | |
+ { | |
+ QuestState qs = player.getQuestState(getName()); | |
+ if (qs == null) | |
+ { | |
+ qs = newQuestState(player); | |
+ } | |
+ | |
+ return isDropPeriod() ? "13292-01.htm" : "13292-11.htm"; | |
+ } | |
+ | |
+ @Override | |
+ public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) | |
+ { | |
+ QuestState qs = player.getQuestState(getName()); | |
+ String htmltext = event.endsWith(".htm") ? event : ""; | |
+ if (qs == null) | |
+ { | |
+ return null; | |
+ } | |
+ | |
+ switch (event) | |
+ { | |
+ case "spawn_summon": | |
+ { | |
+ if (npc.getSummoner() != null) | |
+ { | |
+ int summonId; | |
+ if (Rnd.get(100) <= 75) | |
+ { | |
+ summonId = npc.getId() == SUMMONER ? GLOOMY_TIGER : GLOOMY_TIGER_CAPTAIN; | |
+ } | |
+ else | |
+ { | |
+ summonId = PIG; | |
+ } | |
+ | |
+ L2Npc summon = addSpawn(summonId, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, summonId == PIG ? 10000 : 360000); | |
+ summon.setSummoner(npc.getSummoner()); | |
+ } | |
+ return null; | |
+ } | |
+ case "give_package": | |
+ { | |
+ if (isDropPeriod()) | |
+ { | |
+ if (qs.getQuestItemsCount(Inventory.ADENA_ID) >= PAYMENT) | |
+ { | |
+ long now = System.currentTimeMillis(); | |
+ String val = loadGlobalQuestVar(player.getAccountName()); | |
+ long nextTime = val.equals("") ? 0 : Long.parseLong(val); | |
+ | |
+ if (now > nextTime) | |
+ { | |
+ qs.startQuest(); | |
+ qs.takeItems(Inventory.ADENA_ID, PAYMENT); | |
+ qs.giveItems(PACKAGE, 1); | |
+ saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + INTERVAL)); | |
+ } | |
+ else | |
+ { | |
+ long remainingTime = (nextTime - System.currentTimeMillis()) / 1000; | |
+ int hours = (int) (remainingTime / 3600); | |
+ int minutes = (int) ((remainingTime % 3600) / 60); | |
+ SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES); | |
+ sm.addItemName(PACKAGE); | |
+ sm.addInt(hours); | |
+ sm.addInt(minutes); | |
+ player.sendPacket(sm); | |
+ } | |
+ } | |
+ else | |
+ { | |
+ htmltext = "13292-03.htm"; | |
+ } | |
+ } | |
+ else | |
+ { | |
+ htmltext = "13292-12.htm"; | |
+ } | |
+ break; | |
+ } | |
+ case "give_potions": | |
+ { | |
+ if (qs.getQuestItemsCount(Inventory.ADENA_ID) >= PAYMENT) | |
+ { | |
+ qs.takeItems(Inventory.ADENA_ID, PAYMENT); | |
+ qs.giveItems(POTION, 200); | |
+ } | |
+ else | |
+ { | |
+ htmltext = "13292-03.htm"; | |
+ } | |
+ break; | |
+ } | |
+ case "give_reward": | |
+ { | |
+ if (qs.getQuestItemsCount(APIGA) >= 20) | |
+ { | |
+ htmltext = "13292-06.htm"; | |
+ qs.takeItems(APIGA, 20); | |
+ int random = Rnd.get(1000000); | |
+ for (int i = 0; i < REWARDS.length; i++) | |
+ { | |
+ if (random >= CHANCES[i]) | |
+ { | |
+ qs.giveItems(REWARDS[i], 1); | |
+ break; | |
+ } | |
+ } | |
+ } | |
+ else | |
+ { | |
+ htmltext = "13292-04.htm"; | |
+ } | |
+ break; | |
+ } | |
+ case "give_adv_reward": | |
+ { | |
+ if (qs.getQuestItemsCount(GOLDEN_APIGA) >= 20) | |
+ { | |
+ htmltext = "13292-06.htm"; | |
+ qs.takeItems(APIGA, 20); | |
+ qs.giveItems(17081, 1); | |
+ } | |
+ else | |
+ { | |
+ htmltext = "13292-05.htm"; | |
+ } | |
+ break; | |
+ } | |
+ case "success": | |
+ { | |
+ ExShowScreenMessage sm = new ExShowScreenMessage(2, 0, 2, 0, 1, 0, 0, true, 1000, false, null, NpcStringId.MISSION_SUCCESS, null); | |
+ player.sendPacket(sm); | |
+ break; | |
+ } | |
+ } | |
+ | |
+ return htmltext; | |
+ } | |
+ | |
+ @Override | |
+ public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet, Skill skill) | |
+ { | |
+ if ((npc.getSummoner().getActingPlayer() == null) || !npc.getSummoner().getActingPlayer().isOnline()) | |
+ { | |
+ npc.deleteMe(); | |
+ } | |
+ else | |
+ { | |
+ int npcId = npc.getId(); | |
+ if (Rnd.get(100) < 10) | |
+ { | |
+ npc.setTarget(attacker); | |
+ npc.doCast(SKILLS_DMG_BY_ME[0].getSkill()); | |
+ npc.doCast(SKILLS_DMG_BY_ME[1].getSkill()); | |
+ } | |
+ | |
+ if ((skill != null) && Util.contains(SKILLS_DMG_TO_ME, skill.getId())) | |
+ { | |
+ if (!npc.isBusy() && (npcId >= BABY_TIGER) && (npcId <= WHITE_TIGER_CAPTAIN)) | |
+ { | |
+ npc.setBusy(true); // there is only one chance :) | |
+ // Works for Tigers regardless of party, for Tiger Captains - only if party is gathered | |
+ if ((((npcId == BABY_TIGER) || (npcId == GLOOMY_TIGER) || (npcId == WHITE_TIGER)) || (((npcId == BABY_TIGER_CAPTAIN) || (npcId == GLOOMY_TIGER_CAPTAIN) || (npcId == WHITE_TIGER_CAPTAIN)) && attacker.isInParty() && !attacker.getParty().getMembers().isEmpty())) && (Rnd.get(100) < 30)) | |
+ { | |
+ npc.setBusyMessage("fortune"); | |
+ int counter = ((npcId == BABY_TIGER) || (npcId == GLOOMY_TIGER) || (npcId == WHITE_TIGER)) ? 10 : 40; | |
+ String snd = ((npcId == BABY_TIGER) || (npcId == GLOOMY_TIGER) || (npcId == WHITE_TIGER)) ? "EV_04" : "EV_03"; | |
+ NpcStringId fstringId = ((npcId == BABY_TIGER) || (npcId == GLOOMY_TIGER) || (npcId == WHITE_TIGER)) ? NpcStringId.FORTUNE_TIMER_REWARD_INCREASES_2_TIMES_IF_COMPLETED_WITHIN_10_SECONDS : NpcStringId.FORTUNE_TIMER_REWARD_INCREASES_2_TIMES_IF_COMPLETED_WITHIN_40_SECONDS; | |
+ PlaySound ps = new PlaySound(1, snd, 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()); | |
+ ExShowScreenMessage sm = new ExShowScreenMessage(2, 0, 2, 0, 1, 0, 0, true, 1000, false, null, fstringId, null); | |
+ | |
+ if ((npc.getId() == BABY_TIGER) || (npc.getId() == GLOOMY_TIGER)) | |
+ { | |
+ attacker.sendPacket(ps); | |
+ attacker.sendPacket(sm); | |
+ } | |
+ else | |
+ { | |
+ attacker.getParty().broadcastPacket(ps); | |
+ attacker.getParty().broadcastPacket(sm); | |
+ } | |
+ ThreadPoolManager.getInstance().scheduleGeneral(new CountdownTask(npc, counter), 1000); | |
+ } | |
+ } | |
+ else if (npcId == PIG) | |
+ { | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), PIG_SKILL_ATTACK_TEXT[Rnd.get(3)])); | |
+ } | |
+ else | |
+ { | |
+ if (npc.getSummoner().getObjectId() == attacker.getObjectId()) | |
+ { | |
+ if (Rnd.get(100) < 10) | |
+ { | |
+ // npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getNpcId(), 1801178 + Rnd.get(5))); | |
+ // I have client crash on fstringId, so String constructor is used here | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), SKILL_ATTACK_TEXT[Rnd.get(5)])); | |
+ } | |
+ } | |
+ else if (((npcId == BABY_TIGER) || (npcId == GLOOMY_TIGER) || (npcId == WHITE_TIGER)) && (Rnd.get(100) < 10)) | |
+ { | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), NpcStringId.HEY_I_ALREADY_HAVE_AN_OWNER)); | |
+ } | |
+ } | |
+ } | |
+ else if (Rnd.get(100) < 10) | |
+ { | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), NO_SKILL_ATTACK_TEXT[Rnd.get(2)])); | |
+ } | |
+ } | |
+ | |
+ return super.onAttack(npc, attacker, damage, isPet, skill); | |
+ } | |
+ | |
+ @Override | |
+ public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet) | |
+ { | |
+ if ((npc.getSummoner().getActingPlayer() != null) && npc.getSummoner().getActingPlayer().isOnline()) | |
+ { | |
+ QuestState qs = killer.getQuestState(getName()); | |
+ if (qs == null) | |
+ { | |
+ qs = newQuestState(killer); | |
+ } | |
+ | |
+ long owner_count = Rnd.get(2) + 1; | |
+ if ((npc.getId() == BABY_TIGER) || (npc.getId() == GLOOMY_TIGER) || (npc.getId() == WHITE_TIGER)) | |
+ { | |
+ if (npc.getBusyMessage().equals("fortune")) | |
+ { | |
+ if (npc.isInsideRadius(killer, 1500, true, false)) | |
+ { | |
+ if (npc.getId() == WHITE_TIGER) | |
+ { | |
+ long golden_count = Rnd.get(2); | |
+ if (golden_count > 0) | |
+ { | |
+ qs.giveItems(GOLDEN_APIGA, golden_count * 2); | |
+ } | |
+ } | |
+ qs.giveItems(APIGA, owner_count * 2); | |
+ ExShowScreenMessage sm = new ExShowScreenMessage(2, 0, 2, 0, 1, 0, 0, true, 5000, false, null, NpcStringId.MISSION_SUCCESS, null); | |
+ killer.sendPacket(sm); | |
+ } | |
+ | |
+ // NpcSay ns = new NpcSay(npc.getObjectId(), Say2.ALL, npc.getNpcId(), 1801183 + Rnd.get(3)); | |
+ // ns.addStringParameter(killer.getName()); | |
+ NpcSay ns = new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), FORTUNE_DEATH_TEXT[Rnd.get(3)].replaceFirst("%.*?%", killer.getName())); | |
+ npc.broadcastPacket(ns); | |
+ } | |
+ else | |
+ { | |
+ if (npc.isInsideRadius(killer, 1500, true, false)) | |
+ { | |
+ if (npc.getId() == WHITE_TIGER) | |
+ { | |
+ long golden_count = Rnd.get(2); | |
+ if (golden_count > 0) | |
+ { | |
+ qs.giveItems(GOLDEN_APIGA, golden_count * 2); | |
+ } | |
+ } | |
+ qs.giveItems(APIGA, owner_count); | |
+ } | |
+ // npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getNpcId(), 1801186 + Rnd.get(3))); | |
+ // I have client crash on fstringId, so String constructor is used here | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), DEATH_TEXT[Rnd.get(3)])); | |
+ } | |
+ | |
+ if ((npc.getId() == GLOOMY_TIGER) && (Rnd.get(100) < 30)) | |
+ { | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), NpcStringId.SORRY_BUT_ILL_LEAVE_MY_FRIEND_IN_YOUR_CARE_AS_WELL_THANKS)); // Sorry, but let me ask my friend too~ Thanks. | |
+ L2Npc monster = addSpawn(WHITE_TIGER, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 360000); | |
+ monster.setSummoner(npc.getSummoner()); | |
+ } | |
+ } | |
+ else if ((npc.getId() == BABY_TIGER_CAPTAIN) || (npc.getId() == GLOOMY_TIGER_CAPTAIN) || (npc.getId() == WHITE_TIGER_CAPTAIN)) | |
+ { | |
+ if ((!killer.isInParty()) || killer.getParty().getMembers().isEmpty()) | |
+ { | |
+ if (npc.isInsideRadius(killer, 1500, true, false)) | |
+ { | |
+ qs.giveItems(APIGA, owner_count); | |
+ } | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), NpcStringId.ISNT_IT_TOUGH_DOING_IT_ALL_ON_YOUR_OWN_NEXT_TIME_TRY_MAKING_A_PARTY_WITH_SOME_COMRADES)); | |
+ } | |
+ else | |
+ { | |
+ L2Party party = killer.getParty(); | |
+ if (npc.getBusyMessage().equals("fortune")) | |
+ { | |
+ if (npc.isInsideRadius(killer, 1500, true, false)) | |
+ { | |
+ if (npc.getId() == WHITE_TIGER_CAPTAIN) | |
+ { | |
+ qs.giveItems(GOLDEN_APIGA, (long) (owner_count * party.getMemberCount() * 0.2 * 2)); | |
+ } | |
+ | |
+ qs.giveItems(APIGA, (long) (owner_count * party.getMemberCount() * 0.2 * 2)); | |
+ } | |
+ | |
+ // NpcSay ns = new NpcSay(npc.getObjectId(), Say2.ALL, npc.getNpcId(), 1801183 + Rnd.get(3)); | |
+ // ns.addStringParameter(killer.getName()); | |
+ NpcSay ns = new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), FORTUNE_DEATH_TEXT[Rnd.get(3)].replaceFirst("%.*?%", killer.getName())); | |
+ npc.broadcastPacket(ns); | |
+ ExShowScreenMessage sm = new ExShowScreenMessage(2, 0, 2, 0, 1, 0, 0, true, 5000, false, null, NpcStringId.MISSION_SUCCESS, null); | |
+ | |
+ for (L2PcInstance partyMember : party.getMembers()) | |
+ { | |
+ if ((partyMember != null) && !partyMember.isDead() && npc.isInsideRadius(partyMember, 1500, true, false)) | |
+ { | |
+ QuestState qs2 = partyMember.getQuestState(getName()); | |
+ if (qs2 == null) | |
+ { | |
+ qs2 = newQuestState(killer); | |
+ } | |
+ | |
+ if (npc.getId() == WHITE_TIGER_CAPTAIN) | |
+ { | |
+ qs2.giveItems(GOLDEN_APIGA, owner_count * 2); | |
+ } | |
+ | |
+ qs2.giveItems(APIGA, owner_count * 2); | |
+ partyMember.sendPacket(sm); | |
+ } | |
+ } | |
+ | |
+ } | |
+ else | |
+ { | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), DEATH_TEXT[Rnd.get(3)])); | |
+ if (npc.isInsideRadius(killer, 1500, true, false)) | |
+ { | |
+ if (npc.getId() == WHITE_TIGER_CAPTAIN) | |
+ { | |
+ qs.giveItems(GOLDEN_APIGA, (long) (owner_count * party.getMemberCount() * 0.2)); | |
+ } | |
+ | |
+ qs.giveItems(APIGA, (long) (owner_count * party.getMemberCount() * 0.2)); | |
+ } | |
+ | |
+ for (L2PcInstance partyMember : party.getMembers()) | |
+ { | |
+ if ((partyMember != null) && !partyMember.isDead() && npc.isInsideRadius(partyMember, 1500, true, false)) | |
+ { | |
+ QuestState qs2 = partyMember.getQuestState(getName()); | |
+ if (qs2 == null) | |
+ { | |
+ qs2 = newQuestState(killer); | |
+ } | |
+ | |
+ qs2.giveItems(APIGA, owner_count); | |
+ } | |
+ } | |
+ } | |
+ if ((npc.getId() == GLOOMY_TIGER_CAPTAIN) && (Rnd.get(100) < 30)) | |
+ { | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), NpcStringId.SORRY_BUT_ILL_LEAVE_MY_FRIEND_IN_YOUR_CARE_AS_WELL_THANKS)); // Sorry, but let me ask my friend too~ Thanks. | |
+ L2Npc monster = addSpawn(WHITE_TIGER_CAPTAIN, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 360000); | |
+ monster.setSummoner(npc.getSummoner()); | |
+ } | |
+ } | |
+ } | |
+ } | |
+ | |
+ return super.onKill(npc, killer, isPet); | |
+ } | |
+ | |
+ @Override | |
+ public String onSpawn(L2Npc npc) | |
+ { | |
+ int npcId = npc.getId(); | |
+ if ((npcId >= BABY_TIGER) && (npcId <= WHITE_TIGER_CAPTAIN)) | |
+ { | |
+ npc.disableCoreAI(true); | |
+ npc.setBusyMessage(""); | |
+ npc.setBusy(false); | |
+ } | |
+ else if ((npcId == SUMMONER) || (npcId == BOSS_SUMMONER)) | |
+ { | |
+ startQuestTimer("spawn_summon", 1000, npc, null); // TODO: Temp hack, summoner sets AFTER spawn, so it needs to make delay. | |
+ } | |
+ else if (npcId == PIG) | |
+ { | |
+ npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.ALL, npc.getId(), PIG_ON_SPAWN_TEXT[Rnd.get(2)])); | |
+ } | |
+ | |
+ return super.onSpawn(npc); | |
+ } | |
+ | |
+ private class CountdownTask implements Runnable | |
+ { | |
+ private final L2Npc _npc; | |
+ private final int _counter; | |
+ | |
+ CountdownTask(L2Npc npc, int counter) | |
+ { | |
+ _npc = npc; | |
+ _counter = counter; | |
+ } | |
+ | |
+ @Override | |
+ public void run() | |
+ { | |
+ if (_npc != null) | |
+ { | |
+ ExShowScreenMessage sm = new ExShowScreenMessage(2, 0, 2, 0, 1, 0, 0, true, 1000, false, null, COUNTDOWN_MESSAGES[_counter], null); | |
+ if ((_npc.getSummoner().getActingPlayer() == null) || !_npc.getSummoner().getActingPlayer().isOnline()) | |
+ { | |
+ _npc.deleteMe(); | |
+ } | |
+ else if ((_npc.getId() == BABY_TIGER_CAPTAIN) && ((!_npc.getSummoner().isInParty()) || _npc.getSummoner().getParty().getMembers().isEmpty())) | |
+ { | |
+ _npc.setBusyMessage(""); | |
+ } | |
+ else if (_npc.isDead()) | |
+ { | |
+ startQuestTimer("success", 4000, _npc, _npc.getSummoner().getActingPlayer()); | |
+ } | |
+ else if (_counter == 0) | |
+ { | |
+ _npc.setBusyMessage(""); | |
+ if (_npc.getId() == BABY_TIGER_CAPTAIN) | |
+ { | |
+ _npc.getSummoner().getParty().broadcastPacket(sm); | |
+ } | |
+ else | |
+ { | |
+ _npc.getSummoner().sendPacket(sm); | |
+ } | |
+ } | |
+ else | |
+ { | |
+ if (_npc.getId() == BABY_TIGER_CAPTAIN) | |
+ { | |
+ _npc.getSummoner().getParty().broadcastPacket(sm); | |
+ } | |
+ else | |
+ { | |
+ _npc.getSummoner().sendPacket(sm); | |
+ } | |
+ ThreadPoolManager.getInstance().scheduleGeneral(new CountdownTask(_npc, _counter - 1), 1000); | |
+ } | |
+ } | |
+ } | |
+ } | |
+ | |
+ public static void main(String[] args) | |
+ { | |
+ new CatchATiger(); | |
+ } | |
+} | |
\ No newline at end of file | |
Index: dist/game/data/scripts/events/CatchATiger/13292-09.htm | |
=================================================================== | |
--- dist/game/data/scripts/events/CatchATiger/13292-09.htm (revision 0) | |
+++ dist/game/data/scripts/events/CatchATiger/13292-09.htm (working copy) | |
@@ -0,0 +1,7 @@ | |
+<html><head> | |
+<body>Employee of Magic Research Institute:<br> | |
+They're strange magical tokens that each tiger carries. We don't really understand it, but we do know that a tiger will be docile to whomever | |
+holds its Apiga.<br> | |
+The tiger can go back to its own dimension, but once we have the Apigas, we can summon that particular tiger whenever we want, and study | |
+its particular magical signature. | |
+</body></html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment