Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Evento Catch a Tiger

Iniciado por Swarlog, Ago 06, 2022, 02:23 AM

Tema anterior - Siguiente tema

Swarlog



Debes de estar registrado para poder ver el contenido indicado. 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>