Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Evento Catch a Tiger

Iniciado por Swarlog, Jun 29, 2025, 12:08 AM

Tema anterior - Siguiente tema

Swarlog



No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

### 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>