Addition of Story of Tauti.
Contributed by gigilo1968.
This commit is contained in:
		
							
								
								
									
										129
									
								
								L2J_Mobius_7.0_PreludeOfWar/dist/game/data/instances/MysticTavern/StoryOfTauti.xml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								L2J_Mobius_7.0_PreludeOfWar/dist/game/data/instances/MysticTavern/StoryOfTauti.xml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<instance id="261" maxWorlds="100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
 | 
			
		||||
   <time duration="60" empty="5" />
 | 
			
		||||
   <removeBuffs type="ALL" />
 | 
			
		||||
   <locations>
 | 
			
		||||
       <enter type="FIXED">
 | 
			
		||||
           <location x="142598" y="-151085" z="-7598" />
 | 
			
		||||
       </enter>
 | 
			
		||||
       <exit type="FIXED" >
 | 
			
		||||
			<location x="-50152" y="-148232" z="-14181" />
 | 
			
		||||
		</exit>
 | 
			
		||||
   </locations>
 | 
			
		||||
   <parameters>
 | 
			
		||||
		<param name="1_door" value="24130002" />
 | 
			
		||||
	</parameters>
 | 
			
		||||
   <reenter apply="ON_ENTER">
 | 
			
		||||
       <reset day="WEDNESDAY" hour="6" minute="30" />
 | 
			
		||||
       <reset day="SATURDAY" hour="6" minute="30" />
 | 
			
		||||
   </reenter>
 | 
			
		||||
   <doorlist>
 | 
			
		||||
       <door id="24130002" />
 | 
			
		||||
   </doorlist>
 | 
			
		||||
   <spawnlist>
 | 
			
		||||
       <group name="general" spawnByDefault="true">
 | 
			
		||||
			<npc id="34170" x="142682" y="-151069" z="-7598" heading="33881" /> <!-- Deton -->
 | 
			
		||||
			<npc id="19606" x="143711" y="-148520" z="-8080" heading="46170" /> <!-- Flame Flower -->
 | 
			
		||||
			<npc id="19606" x="143874" y="-148607" z="-8072" heading="5270" /> <!-- Flame Flower -->
 | 
			
		||||
			<npc id="19606" x="144340" y="-148826" z="-8088" heading="32630" /> <!-- Flame Flower -->
 | 
			
		||||
			<npc id="19606" x="143733" y="-149179" z="-8080" heading="63803" /> <!-- Flame Flower -->
 | 
			
		||||
			<npc id="19606" x="143763" y="-149362" z="-8080" heading="6830" /> <!-- Flame Flower -->
 | 
			
		||||
			<npc id="19606" x="144053" y="-149299" z="-8072" heading="17817" /> <!-- Flame Flower -->
 | 
			
		||||
			<npc id="19606" x="143534" y="-148580" z="-8080" heading="56838" /> <!-- Flame Flower -->
 | 
			
		||||
			<npc id="19606" x="144250" y="-149119" z="-8088" heading="25862" /> <!-- Flame Flower -->
 | 
			
		||||
			<npc id="19606" x="143897" y="-149480" z="-8080" heading="30822" /> <!-- Flame Flower -->
 | 
			
		||||
       </group>
 | 
			
		||||
        <group name="seal_device" spawnByDefault="true">
 | 
			
		||||
			<npc id="19608" x="151700" y="-153000" z="-9064" heading="9000" /> <!-- Seal Device -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="flame_stacato" spawnByDefault="false">
 | 
			
		||||
			<npc id="23681" x="144441" y="-148455" z="-8128" heading="40794" /> <!-- Flame Stakato -->
 | 
			
		||||
			<npc id="23681" x="144397" y="-148420" z="-8128" heading="40479" /> <!-- Flame Stakato -->
 | 
			
		||||
			<npc id="23681" x="144357" y="-148379" z="-8128" heading="41407" /> <!-- Flame Stakato -->
 | 
			
		||||
			<npc id="23681" x="144379" y="-148523" z="-8104" heading="41405" /> <!-- Flame Stakato -->
 | 
			
		||||
			<npc id="23681" x="144347" y="-148483" z="-8104" heading="41662" /> <!-- Flame Stakato -->
 | 
			
		||||
			<npc id="23681" x="144306" y="-148449" z="-8096" heading="40690" /> <!-- Flame Stakato -->
 | 
			
		||||
			<npc id="23681" x="144334" y="-148574" z="-8088" heading="42453" /> <!-- Flame Stakato -->
 | 
			
		||||
			<npc id="23681" x="144297" y="-148537" z="-8088" heading="38531" /> <!-- Flame Stakato -->
 | 
			
		||||
			<npc id="23681" x="144258" y="-148493" z="-8088" heading="41300" /> <!-- Flame Stakato -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="flame_scorpion" spawnByDefault="false">
 | 
			
		||||
			<npc id="23682" x="146270" y="-148865" z="-8768" heading="11468" /> <!-- Flame Scorpion -->
 | 
			
		||||
			<npc id="23682" x="146441" y="-149132" z="-8776" heading="16320" /> <!-- Flame Scorpion -->
 | 
			
		||||
			<npc id="23682" x="146753" y="-149179" z="-8784" heading="526" /> <!-- Flame Scorpion -->
 | 
			
		||||
			<npc id="23682" x="146799" y="-149154" z="-8784" heading="26226" /> <!-- Flame Scorpion -->
 | 
			
		||||
			<npc id="23682" x="147191" y="-148926" z="-8768" heading="26226" /> <!-- Flame Scorpion -->
 | 
			
		||||
			<npc id="23682" x="147410" y="-148739" z="-8784" heading="29781" /> <!-- Flame Scorpion -->
 | 
			
		||||
			<npc id="23682" x="147347" y="-148522" z="-8768" heading="11138" /> <!-- Flame Scorpion -->
 | 
			
		||||
			<npc id="23682" x="147160" y="-148332" z="-8776" heading="37321" /> <!-- Flame Scorpion -->
 | 
			
		||||
			<npc id="23682" x="146845" y="-148314" z="-8784" heading="39573" /> <!-- Flame Scorpion -->
 | 
			
		||||
			<npc id="23682" x="146408" y="-148502" z="-8784" heading="62425" /> <!-- Flame Scorpion -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="ifrit" spawnByDefault="false">
 | 
			
		||||
			<npc id="23704" x="146920" y="-148904" z="-8760" heading="28021" /> <!-- Ifrit -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="golem" spawnByDefault="false">
 | 
			
		||||
			<npc id="23680" x="150661" y="-148758" z="-9072" heading="57203" /> <!-- Flame Golem -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="flame_scarab" spawnByDefault="false">
 | 
			
		||||
			<npc id="23709" x="148511" y="-152739" z="-9072" heading="57240" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="148367" y="-152894" z="-9072" heading="61343" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="148304" y="-153108" z="-9072" heading="64738" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="148358" y="-153314" z="-9072" heading="4948" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="148502" y="-153486" z="-9072" heading="9136" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="148688" y="-153600" z="-9072" heading="12495" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="148882" y="-153607" z="-9072" heading="17836" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="149070" y="-153541" z="-9072" heading="23473" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="149190" y="-153395" z="-9072" heading="25933" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="149286" y="-153232" z="-9072" heading="32392" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="149285" y="-153034" z="-9072" heading="34442" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="149199" y="-152878" z="-9072" heading="37261" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="149095" y="-152737" z="-9072" heading="41838" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="148856" y="-152649" z="-9072" heading="46586" /> <!-- Flame Scarab -->
 | 
			
		||||
			<npc id="23709" x="148685" y="-152646" z="-9072" heading="51422" /> <!-- Flame Scarab -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="seal_tmbstone" spawnByDefault="false">
 | 
			
		||||
			<npc id="19607" x="151341" y="-152655" z="-9072" heading="31470" /> <!-- Seal Tombstone -->
 | 
			
		||||
			<npc id="34170" x="151332" y="-152552" z="-9072" heading="49517" /> <!-- Deton -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="arimanes" spawnByDefault="false">
 | 
			
		||||
			<npc id="23705" x="151096" y="-152446" z="-9072" heading="56646" /> <!-- Arimanes -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="seal_arngels" spawnByDefault="false">
 | 
			
		||||
			<npc id="23683" x="153221" y="-148113" z="-11560" heading="49530" /> <!-- Seal Archangel -->
 | 
			
		||||
			<npc id="23684" x="153404" y="-147975" z="-11560" heading="47124" /> <!-- Seal Angel -->
 | 
			
		||||
			<npc id="23684" x="153047" y="-147942" z="-11560" heading="46465" /> <!-- Seal Angel -->			
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="singl_angel" spawnByDefault="false">
 | 
			
		||||
			<npc id="23685" x="153267" y="-148441" z="-11560" heading="49199" /> <!-- Seal Angel -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="clone_1" spawnByDefault="false">
 | 
			
		||||
			<npc id="19626" x="153712" y="-148226" z="-11560" heading="34643" /> <!--  -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="clone_2" spawnByDefault="false">
 | 
			
		||||
			<npc id="19626" x="153378" y="-147959" z="-11560" heading="45409" /> <!--  -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="clone_3" spawnByDefault="false">
 | 
			
		||||
			<npc id="19626" x="152972" y="-148061" z="-11560" heading="59040" /> <!--  -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="clone_4" spawnByDefault="false">
 | 
			
		||||
			<npc id="19626" x="152783" y="-148437" z="-11560" heading="544" /> <!--  -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="clone_5" spawnByDefault="false">
 | 
			
		||||
			<npc id="19626" x="152966" y="-148816" z="-11560" heading="10447" /> <!--  -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="clone_6" spawnByDefault="false">
 | 
			
		||||
			<npc id="19626" x="153382" y="-148915" z="-11560" heading="21643" /> <!--  -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="clone_7" spawnByDefault="false">
 | 
			
		||||
			<npc id="19626" x="153710" y="-148649" z="-11560" heading="31159" /> <!--  -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="last_archagel" spawnByDefault="false">
 | 
			
		||||
			<npc id="23683" x="153191" y="-145811" z="-11384" heading="49170" /> <!-- Seal Archangel -->
 | 
			
		||||
			<npc id="19627" x="153187" y="-145186" z="-11240" heading="32285" /> <!-- Tauti -->
 | 
			
		||||
       </group>
 | 
			
		||||
       <group name="last_deton" spawnByDefault="false">
 | 
			
		||||
			<npc id="34170" x="153251" y="-146350" z="-11384" heading="16359" /> <!-- Deton -->
 | 
			
		||||
       </group>
 | 
			
		||||
   </spawnlist>
 | 
			
		||||
</instance>
 | 
			
		||||
@@ -36,6 +36,7 @@ import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
 | 
			
		||||
 | 
			
		||||
import ai.AbstractNpcAI;
 | 
			
		||||
import instances.MysticTavern.StoryOfFreya.StoryOfFreya;
 | 
			
		||||
import instances.MysticTavern.StoryOfTauti.StoryOfTauti;
 | 
			
		||||
import quests.Q10297_GrandOpeningComeToOurPub.Q10297_GrandOpeningComeToOurPub;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -57,7 +58,7 @@ public class MysticTavern extends AbstractNpcAI
 | 
			
		||||
	private static final int LUPIA = 34185;
 | 
			
		||||
	private static final int MEY = 34186;
 | 
			
		||||
	// Instances
 | 
			
		||||
	// private static final int INSTANCE_TAUTI = 261;
 | 
			
		||||
	private static final int INSTANCE_TAUTI = 261;
 | 
			
		||||
	// private static final int INSTANCE_KELBIM = 262;
 | 
			
		||||
	private static final int INSTANCE_FREYA = 263;
 | 
			
		||||
	// Zones
 | 
			
		||||
@@ -105,7 +106,7 @@ public class MysticTavern extends AbstractNpcAI
 | 
			
		||||
					}
 | 
			
		||||
					final List<Integer> availableInstances = new ArrayList<>();
 | 
			
		||||
					availableInstances.add(INSTANCE_FREYA);
 | 
			
		||||
					// availableInstances.add(INSTANCE_TAUTI);
 | 
			
		||||
					availableInstances.add(INSTANCE_TAUTI);
 | 
			
		||||
					// availableInstances.add(INSTANCE_KELBIM);
 | 
			
		||||
					for (PlayerInstance member : party.getMembers())
 | 
			
		||||
					{
 | 
			
		||||
@@ -132,16 +133,16 @@ public class MysticTavern extends AbstractNpcAI
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						// if (InstanceManager.getInstance().getInstanceTime(member, INSTANCE_TAUTI) > 0)
 | 
			
		||||
						// {
 | 
			
		||||
						// for (int i = 0; i < availableInstances.size(); i++)
 | 
			
		||||
						// {
 | 
			
		||||
						// if (availableInstances.get(i) == INSTANCE_TAUTI)
 | 
			
		||||
						// {
 | 
			
		||||
						// availableInstances.remove(i);
 | 
			
		||||
						// }
 | 
			
		||||
						// }
 | 
			
		||||
						// }
 | 
			
		||||
						if (InstanceManager.getInstance().getInstanceTime(member, INSTANCE_TAUTI) > 0)
 | 
			
		||||
						{
 | 
			
		||||
							for (int i = 0; i < availableInstances.size(); i++)
 | 
			
		||||
							{
 | 
			
		||||
								if (availableInstances.get(i) == INSTANCE_TAUTI)
 | 
			
		||||
								{
 | 
			
		||||
									availableInstances.remove(i);
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						// if (InstanceManager.getInstance().getInstanceTime(member, INSTANCE_KELBIM) > 0)
 | 
			
		||||
						// {
 | 
			
		||||
						// for (int i = 0; i < availableInstances.size(); i++)
 | 
			
		||||
@@ -160,7 +161,6 @@ public class MysticTavern extends AbstractNpcAI
 | 
			
		||||
					npc.setScriptValue(getRandom(availableInstances.size()));
 | 
			
		||||
					startQuestTimer("npcRoute", 3000, npc, player);
 | 
			
		||||
				}
 | 
			
		||||
				startQuestTimer("npcRoute", 3000, npc, player); // TODO only for test
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "npcRoute":
 | 
			
		||||
@@ -333,11 +333,11 @@ public class MysticTavern extends AbstractNpcAI
 | 
			
		||||
						player.processQuestEvent(StoryOfFreya.class.getSimpleName(), "start_story");
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
					// case INSTANCE_TAUTI:
 | 
			
		||||
					// {
 | 
			
		||||
					// player.processQuestEvent(StoryOfTauti.class.getSimpleName(), "start_story");
 | 
			
		||||
					// break;
 | 
			
		||||
					// }
 | 
			
		||||
					case INSTANCE_TAUTI:
 | 
			
		||||
					{
 | 
			
		||||
						player.processQuestEvent(StoryOfTauti.class.getSimpleName(), "start_story");
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
					// case INSTANCE_KELBIM:
 | 
			
		||||
					// {
 | 
			
		||||
					// player.processQuestEvent(StoryOfKelbim.class.getSimpleName(), "start_story");
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,3 @@
 | 
			
		||||
<html><body>Archaeologist Deton:<br>
 | 
			
		||||
What do you want? I'm busy right now. Come back later.
 | 
			
		||||
</body></html>
 | 
			
		||||
@@ -0,0 +1,5 @@
 | 
			
		||||
<html><body>Archaeologist Deton:<br>
 | 
			
		||||
Hmm, where are we?<br>
 | 
			
		||||
I should take a look at the map again...<br>
 | 
			
		||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest StoryOfTauti give_map">"Excuse me..."</Button>
 | 
			
		||||
</body></html>
 | 
			
		||||
@@ -0,0 +1,943 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of the L2J Mobius project.
 | 
			
		||||
 * 
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 * 
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | 
			
		||||
 * General Public License for more details.
 | 
			
		||||
 * 
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
package instances.MysticTavern.StoryOfTauti;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.Config;
 | 
			
		||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
 | 
			
		||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
 | 
			
		||||
import org.l2jmobius.gameserver.enums.ChatType;
 | 
			
		||||
import org.l2jmobius.gameserver.enums.Movie;
 | 
			
		||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
 | 
			
		||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
 | 
			
		||||
import org.l2jmobius.gameserver.model.Location;
 | 
			
		||||
import org.l2jmobius.gameserver.model.Party;
 | 
			
		||||
import org.l2jmobius.gameserver.model.World;
 | 
			
		||||
import org.l2jmobius.gameserver.model.WorldObject;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.Creature;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.Npc;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.instance.FriendlyNpcInstance;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
 | 
			
		||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
 | 
			
		||||
import org.l2jmobius.gameserver.model.instancezone.Instance;
 | 
			
		||||
import org.l2jmobius.gameserver.model.quest.Quest;
 | 
			
		||||
import org.l2jmobius.gameserver.model.quest.QuestState;
 | 
			
		||||
import org.l2jmobius.gameserver.model.skills.AbnormalVisualEffect;
 | 
			
		||||
import org.l2jmobius.gameserver.model.skills.BuffInfo;
 | 
			
		||||
import org.l2jmobius.gameserver.model.skills.Skill;
 | 
			
		||||
import org.l2jmobius.gameserver.model.skills.SkillCaster;
 | 
			
		||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
 | 
			
		||||
import org.l2jmobius.gameserver.model.zone.type.ScriptZone;
 | 
			
		||||
import org.l2jmobius.gameserver.network.NpcStringId;
 | 
			
		||||
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
 | 
			
		||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
 | 
			
		||||
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
 | 
			
		||||
 | 
			
		||||
import instances.AbstractInstance;
 | 
			
		||||
import quests.Q00833_DevilsTreasureTauti.Q00833_DevilsTreasureTauti;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Mystic Tavern Tauti Instance
 | 
			
		||||
 * @VIDEO https://www.youtube.com/watch?v=uPXWZ1ZCtFk
 | 
			
		||||
 * @author Gigi
 | 
			
		||||
 */
 | 
			
		||||
public class StoryOfTauti extends AbstractInstance
 | 
			
		||||
{
 | 
			
		||||
	// NPC
 | 
			
		||||
	private static final int DETON = 34170;
 | 
			
		||||
	private static final int FLAME_FLOWER = 19606;
 | 
			
		||||
	private static final int SEAL_DEVICE = 19608;
 | 
			
		||||
	// Monsters
 | 
			
		||||
	private static final int FLAME_STACATO = 23681;
 | 
			
		||||
	private static final int FLAME_SCORPION = 23682;
 | 
			
		||||
	private static final int FLAME_GOLEM = 23680;
 | 
			
		||||
	private static final int FLAME_SCARAB = 23709;
 | 
			
		||||
	private static final int SEAL_TOMBSTONE = 19607;
 | 
			
		||||
	private static final int SEAL_ARCHANGEL = 23683;
 | 
			
		||||
	private static final int SEALED_ANGEL = 23685;
 | 
			
		||||
	private static final int NPC_1 = 19626;
 | 
			
		||||
	// Item
 | 
			
		||||
	private static final int FLAME_FLOWER_BUD = 46554;
 | 
			
		||||
	// Misc
 | 
			
		||||
	private static final int TEMPLATE_ID = 261;
 | 
			
		||||
	private static final ScriptZone FLAME_FLOWER_ZONE = ZoneManager.getInstance().getZoneById(80027, ScriptZone.class);
 | 
			
		||||
	private static final ScriptZone START_ZONE = ZoneManager.getInstance().getZoneById(80028, ScriptZone.class);
 | 
			
		||||
	private static final ScriptZone SCORPION_ZONE = ZoneManager.getInstance().getZoneById(80029, ScriptZone.class);
 | 
			
		||||
	private static final ScriptZone GOLEM_ZONE = ZoneManager.getInstance().getZoneById(80030, ScriptZone.class);
 | 
			
		||||
	private static final ScriptZone TOMBSTONE_ZONE = ZoneManager.getInstance().getZoneById(80031, ScriptZone.class);
 | 
			
		||||
	private static final ScriptZone ANGEL_ZONE = ZoneManager.getInstance().getZoneById(80032, ScriptZone.class);
 | 
			
		||||
	private static final ScriptZone SCARAB_ZONE = ZoneManager.getInstance().getZoneById(80033, ScriptZone.class);
 | 
			
		||||
	private static final SkillHolder DECREASE_PDEF = new SkillHolder(18515, 1);
 | 
			
		||||
	private static final SkillHolder SUMMON_FLAME_FLOWER = new SkillHolder(18513, 1);
 | 
			
		||||
	private static final SkillHolder SEAL_ARCHANGEL_WRATH = new SkillHolder(16572, 1);
 | 
			
		||||
	private static final Location DETON_MOVE = new Location(143641, -149193, -8072);
 | 
			
		||||
	private static final Location DETON_MOVE_1 = new Location(151084, -152315, -9072);
 | 
			
		||||
	private static final Location DETON_MOVE_2 = new Location(151618, -152823, -9064);
 | 
			
		||||
	private static final Location DETON_MOVE_3 = new Location(153296, -145602, -11384);
 | 
			
		||||
	private static final Location TELEPORT = new Location(153267, -148441, -11560);
 | 
			
		||||
	private static final int ZONE_1ST_TRIGER = 24137770;
 | 
			
		||||
	private static final int SKILL_TRIGER = 24138880;
 | 
			
		||||
	private static Npc _deton;
 | 
			
		||||
	private static Npc _seal_device;
 | 
			
		||||
	protected int _count = 0;
 | 
			
		||||
	
 | 
			
		||||
	public StoryOfTauti()
 | 
			
		||||
	{
 | 
			
		||||
		super(TEMPLATE_ID);
 | 
			
		||||
		addSpawnId(DETON, SEAL_DEVICE, FLAME_FLOWER, FLAME_STACATO, FLAME_SCORPION, FLAME_SCARAB, FLAME_GOLEM, NPC_1, SEAL_ARCHANGEL);
 | 
			
		||||
		addAttackId(SEAL_TOMBSTONE, SEAL_ARCHANGEL);
 | 
			
		||||
		addKillId(FLAME_STACATO, FLAME_SCORPION, SEAL_TOMBSTONE, SEALED_ANGEL);
 | 
			
		||||
		addSkillSeeId(FLAME_FLOWER, SEAL_TOMBSTONE);
 | 
			
		||||
		addFirstTalkId(DETON);
 | 
			
		||||
		addEnterZoneId(FLAME_FLOWER_ZONE.getId(), START_ZONE.getId(), SCORPION_ZONE.getId(), GOLEM_ZONE.getId(), TOMBSTONE_ZONE.getId(), ANGEL_ZONE.getId(), SCARAB_ZONE.getId());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onAdvEvent(String event, Npc npc, PlayerInstance player)
 | 
			
		||||
	{
 | 
			
		||||
		final Instance world = npc.getInstanceWorld();
 | 
			
		||||
		switch (event)
 | 
			
		||||
		{
 | 
			
		||||
			case "start_story":
 | 
			
		||||
			{
 | 
			
		||||
				player.standUp();
 | 
			
		||||
				enterInstance(player, null, TEMPLATE_ID);
 | 
			
		||||
				final Party party = player.getParty();
 | 
			
		||||
				if (party != null)
 | 
			
		||||
				{
 | 
			
		||||
					final Instance instance = player.getInstanceWorld();
 | 
			
		||||
					for (PlayerInstance member : party.getMembers())
 | 
			
		||||
					{
 | 
			
		||||
						if (member != player)
 | 
			
		||||
						{
 | 
			
		||||
							member.standUp();
 | 
			
		||||
							member.teleToLocation(player, instance);
 | 
			
		||||
							instance.addPlayer(member);
 | 
			
		||||
							instance.addAllowed(member);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					instance.setReenterTime();
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "give_map":
 | 
			
		||||
			{
 | 
			
		||||
				if ((player.isInParty() && player.getParty().isLeader(player)) || player.isGM())
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(1) || world.isStatus(4))
 | 
			
		||||
					{
 | 
			
		||||
						_deton.setTarget(player);
 | 
			
		||||
						_deton.setRunning();
 | 
			
		||||
						_deton.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, player);
 | 
			
		||||
					}
 | 
			
		||||
					else
 | 
			
		||||
					{
 | 
			
		||||
						return "34170-01.html";
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "check_status":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ARE_YOU_THE_ONES_WHO_WILL_BE_HELPING_OUT_WELCOME_I_VE_BEEN_WAITING_FOR_YOU);
 | 
			
		||||
				World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 1000, pl ->
 | 
			
		||||
				{
 | 
			
		||||
					if ((pl != null) && ((pl.isInParty() && pl.getParty().isLeader(pl)) || pl.isGM()))
 | 
			
		||||
					{
 | 
			
		||||
						_deton.setTarget(pl);
 | 
			
		||||
						_deton.setRunning();
 | 
			
		||||
						_deton.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, pl);
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
				startQuestTimer("msg_1", 7000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_1":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.I_HAD_A_HARD_TIME_WORKING_BY_MYSELF_I_M_GLAD_YOU_ARE_HERE_NOW);
 | 
			
		||||
				startQuestTimer("msg_2", 10000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_2":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DON_T_WORRY_ABOUT_THE_REWARD_WE_LL_FIND_THAT_TREASURE);
 | 
			
		||||
				startQuestTimer("msg_3", 10000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_3":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.I_M_GLAD_POWERFUL_PEOPLE_LIKE_YOU_GUYS_ARE_HELPING_ME);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_4":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THIS_I_M_SURE_I_VE_SEEN_THIS_BEFORE_YES_THAT_MEANS_THE_STAKATOS);
 | 
			
		||||
				_deton.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, DETON_MOVE);
 | 
			
		||||
				startQuestTimer("msg_5", 7000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_5":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.TO_SAVE_THE_FLAME_FLOWER_YOU_NEED_HEAL_WAIT_RADIANT_HEAL_YES_I_M_SURE);
 | 
			
		||||
				startQuestTimer("msg_6", 10000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_6":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WELL_THERE_S_NOT_MUCH_DIFFERENCE_RIGHT_OR_IS_THERE);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "spawn_stacato":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("flame_stacato");
 | 
			
		||||
				startQuestTimer("spawn_stacato_1", 50000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "spawn_stacato_1":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("flame_stacato");
 | 
			
		||||
				startQuestTimer("spawn_stacato_2", 50000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "spawn_stacato_2":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("flame_stacato");
 | 
			
		||||
				world.setStatus(3);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "check_flower":
 | 
			
		||||
			{
 | 
			
		||||
				if (!npc.isDead())
 | 
			
		||||
				{
 | 
			
		||||
					for (final Npc nearby : World.getInstance().getVisibleObjectsInRange(npc, FriendlyNpcInstance.class, 1000))
 | 
			
		||||
					{
 | 
			
		||||
						if ((nearby.getId() == FLAME_FLOWER) && npc.isScriptValue(0) && nearby.isScriptValue(0))
 | 
			
		||||
						{
 | 
			
		||||
							_deton.setRunning();
 | 
			
		||||
							addMoveToDesire(npc, nearby.getLocation(), 23);
 | 
			
		||||
							if (npc.calculateDistance3D(nearby) < 100)
 | 
			
		||||
							{
 | 
			
		||||
								nearby.setCurrentHp(nearby.getCurrentHp() - 10000);
 | 
			
		||||
								nearby.setScriptValue(1);
 | 
			
		||||
								npc.setCurrentHp(npc.getCurrentHp() + 15000);
 | 
			
		||||
								npc.setScriptValue(1);
 | 
			
		||||
								startQuestTimer("reset_flower", 8000, nearby, null);
 | 
			
		||||
								if (nearby.getCurrentHp() < 1)
 | 
			
		||||
								{
 | 
			
		||||
									nearby.doDie(npc);
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "reset_flower":
 | 
			
		||||
			{
 | 
			
		||||
				npc.setScriptValue(0);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_7":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.LET_S_HAVE_SOME_FUN);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "spawn_scorpion":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("flame_scorpion");
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.EEK_SAVE_THIS_DWARF_I_M_JUST_AN_ARCHAEOLOGIST_I_LL_GIVE_YOU_EVERYTHING_I_HAVE);
 | 
			
		||||
				if (getRandom(10) < 5)
 | 
			
		||||
				{
 | 
			
		||||
					world.spawnGroup("ifrit");
 | 
			
		||||
					world.broadcastPacket(new ExShowScreenMessage(NpcStringId.IFRIT, ExShowScreenMessage.TOP_CENTER, 10000, true));
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "attack_player":
 | 
			
		||||
			{
 | 
			
		||||
				World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 1500, pl ->
 | 
			
		||||
				{
 | 
			
		||||
					if ((pl != null) && !pl.isDead())
 | 
			
		||||
					{
 | 
			
		||||
						_deton.setRunning();
 | 
			
		||||
						addMoveToDesire(npc, new Location(pl.getX() + getRandom(-40, 40), pl.getY() + getRandom(-40, 40), pl.getZ()), 23);
 | 
			
		||||
						addAttackPlayerDesire(npc, pl);
 | 
			
		||||
					}
 | 
			
		||||
					if (!npc.isDead() && !npc.isInCombat())
 | 
			
		||||
					{
 | 
			
		||||
						startQuestTimer("attack_player", 5000, npc, pl);
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_8":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.OH_YOU_TRULY_ARE_AMAZING_YOU_ACTUALLY_DEFEATED_THOSE_NASTY_GUYS);
 | 
			
		||||
				startQuestTimer("msg_9", 8000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_9":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THE_PATH_SPLITS_NOW_WELL_LET_S_GO_WHICH_WAY);
 | 
			
		||||
				startQuestTimer("msg_10", 10000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_10":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.BOTH_LOOK_PRETTY_BAD_BUT_WE_MUST_KEEP_GOING);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "spawn_golem":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("golem");
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WAHHH_WHAT_ARE_THESE_MONSTERS_HOW_OLD_DO_YOU_HAVE_BE_TO_GET_THAT_BIG);
 | 
			
		||||
				world.broadcastPacket(new ExShowScreenMessage(NpcStringId.LOOK_AT_THAT_FLAME_GOLEM_IT_S_TERRIFYING, ExShowScreenMessage.BOTTOM_RIGHT, 10000, false));
 | 
			
		||||
				startQuestTimer("run_away", 10000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "run_away":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.I_LL_LEAVE_THOSE_MONSTERS_TO_YOU_I_LL_GO_CHECK_OUT_SOMETHING_OVER_THERE_IT_S_VERY_IMPORTANT);
 | 
			
		||||
				_deton.setTarget(null);
 | 
			
		||||
				_deton.stopMove(null);
 | 
			
		||||
				_deton.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, DETON_MOVE_1);
 | 
			
		||||
				startQuestTimer("delete_daton", 3500, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "delete_daton":
 | 
			
		||||
			{
 | 
			
		||||
				world.despawnGroup("general");
 | 
			
		||||
				world.spawnGroup("seal_tmbstone");
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_11":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YES_THE_SEAL_IS_GONE_WELL_YOU_GO_ON_AHEAD_I_LL_MAKE_SOME_RUBBED_COPIES_FIRST);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_12":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.I_CAN_T_BELIEVE_YOU_ACTUALLY_FELL_FOR_THAT_I_WAS_JUST_USING_YOU_KAHAHA);
 | 
			
		||||
				startQuestTimer("msg_13", 9000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "msg_13":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.TAUTI_SO_THIS_IS_TAUTI_GIVE_ME_YOUR_POWER_YOU_ARE_MINE_KAHAHAHA);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "spawn_scarab":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("flame_scarab");
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WAHHH_THIS_WAY_WAS_DANGEROUS_TOO_SAVE_ME);
 | 
			
		||||
				world.broadcastPacket(new ExShowScreenMessage(NpcStringId.THAT_FLAME_SCARAB_IT_S_TERRIFYING, ExShowScreenMessage.BOTTOM_RIGHT, 10000, false));
 | 
			
		||||
				startQuestTimer("run_away_1", 8000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "run_away_1":
 | 
			
		||||
			{
 | 
			
		||||
				_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DO_SOMETHING_ABOUT_THESE_MONSTERS_SHOW_ME_YOUR_STRENGTH_I_LL_BE_WAITING_OVER_THERE);
 | 
			
		||||
				_deton.setTarget(null);
 | 
			
		||||
				_deton.stopMove(null);
 | 
			
		||||
				_deton.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, DETON_MOVE_1);
 | 
			
		||||
				startQuestTimer("delete_daton", 5000, _deton, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "switch_quest":
 | 
			
		||||
			{
 | 
			
		||||
				World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 1000, pl ->
 | 
			
		||||
				{
 | 
			
		||||
					if (pl.isInParty())
 | 
			
		||||
					{
 | 
			
		||||
						final Party party = pl.getParty();
 | 
			
		||||
						final List<PlayerInstance> members = party.getMembers();
 | 
			
		||||
						for (PlayerInstance member : members)
 | 
			
		||||
						{
 | 
			
		||||
							if (member.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
 | 
			
		||||
							{
 | 
			
		||||
								final QuestState qs = member.getQuestState(Q00833_DevilsTreasureTauti.class.getSimpleName());
 | 
			
		||||
								if ((qs != null) && qs.isCond(6))
 | 
			
		||||
								{
 | 
			
		||||
									final Quest qs833 = QuestManager.getInstance().getQuest(Q00833_DevilsTreasureTauti.class.getSimpleName());
 | 
			
		||||
									if (qs833 != null)
 | 
			
		||||
									{
 | 
			
		||||
										qs.setCond(7, true);
 | 
			
		||||
									}
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
				world.broadcastPacket(new OnEventTrigger(ZONE_1ST_TRIGER, true));
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "angel_msg":
 | 
			
		||||
			{
 | 
			
		||||
				npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HOW_STUPID_IGNORANCE_IS_A_SIN_I_LL_LET_YOU_GO_THIS_ONE_TIME_GO);
 | 
			
		||||
				world.despawnGroup("seal_tmbstone");
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "angel_teleport":
 | 
			
		||||
			{
 | 
			
		||||
				npc.teleToLocation(TELEPORT, world);
 | 
			
		||||
				startQuestTimer("angel_triger", 2000, npc, player);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "angel_triger":
 | 
			
		||||
			{
 | 
			
		||||
				world.broadcastPacket(new OnEventTrigger(ZONE_1ST_TRIGER, false));
 | 
			
		||||
				world.spawnGroup("singl_angel");
 | 
			
		||||
				startQuestTimer("triger", 3000, npc, player);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "triger":
 | 
			
		||||
			{
 | 
			
		||||
				world.broadcastPacket(new OnEventTrigger(SKILL_TRIGER, true));
 | 
			
		||||
				startQuestTimer("end_triger", 12000, npc, player);
 | 
			
		||||
				startQuestTimer("clone_1", 1000, npc, player);
 | 
			
		||||
				world.despawnGroup("seal_arngels");
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "clone_1":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("clone_1");
 | 
			
		||||
				startQuestTimer("clone_2", 500, npc, player);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "clone_2":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("clone_2");
 | 
			
		||||
				if (world.getAliveNpcs(NPC_1).size() < _count)
 | 
			
		||||
				{
 | 
			
		||||
					startQuestTimer("clone_3", 500, npc, player);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "clone_3":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("clone_3");
 | 
			
		||||
				if (world.getAliveNpcs(NPC_1).size() < _count)
 | 
			
		||||
				{
 | 
			
		||||
					startQuestTimer("clone_4", 500, npc, player);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "clone_4":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("clone_4");
 | 
			
		||||
				if (world.getAliveNpcs(NPC_1).size() < _count)
 | 
			
		||||
				{
 | 
			
		||||
					startQuestTimer("clone_5", 500, npc, player);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "clone_5":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("clone_5");
 | 
			
		||||
				if (world.getAliveNpcs(NPC_1).size() < _count)
 | 
			
		||||
				{
 | 
			
		||||
					startQuestTimer("clone_6", 500, npc, player);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "clone_6":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("clone_6");
 | 
			
		||||
				startQuestTimer("clone_7", 500, npc, player);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "clone_7":
 | 
			
		||||
			{
 | 
			
		||||
				world.spawnGroup("clone_7");
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "clone_player":
 | 
			
		||||
			{
 | 
			
		||||
				npc.setCloneObjId(player.getObjectId());
 | 
			
		||||
				if ((npc.getCloneObjId() == player.getObjectId()) && !player.getEffectList().hasAbnormalVisualEffect(AbnormalVisualEffect.STUN))
 | 
			
		||||
				{
 | 
			
		||||
					player.teleToLocation(npc.getLocation(), world);
 | 
			
		||||
					player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.STUN);
 | 
			
		||||
					if ((player.getClan() != null) && (player.getClanCrestId() != 0))
 | 
			
		||||
					{
 | 
			
		||||
						npc.setClanId(player.getClanId());
 | 
			
		||||
					}
 | 
			
		||||
					npc.broadcastStatusUpdate();
 | 
			
		||||
				}
 | 
			
		||||
				npc.setScriptValue(1);
 | 
			
		||||
				startQuestTimer("clear_player", 12000, npc, player);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "end_triger":
 | 
			
		||||
			{
 | 
			
		||||
				world.broadcastPacket(new OnEventTrigger(SKILL_TRIGER, false));
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "clear_player":
 | 
			
		||||
			{
 | 
			
		||||
				player.getEffectList().stopAbnormalVisualEffect(AbnormalVisualEffect.STUN);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "end_instance":
 | 
			
		||||
			{
 | 
			
		||||
				cancelQuestTimers("check_flower");
 | 
			
		||||
				_count = 0;
 | 
			
		||||
				for (Npc n : world.getAliveNpcs())
 | 
			
		||||
				{
 | 
			
		||||
					n.deleteMe();
 | 
			
		||||
				}
 | 
			
		||||
				world.finishInstance(0);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
 | 
			
		||||
	{
 | 
			
		||||
		final Instance world = npc.getInstanceWorld();
 | 
			
		||||
		if (isInInstance(world))
 | 
			
		||||
		{
 | 
			
		||||
			switch (npc.getId())
 | 
			
		||||
			{
 | 
			
		||||
				case SEAL_TOMBSTONE:
 | 
			
		||||
				{
 | 
			
		||||
					if (npc.isScriptValue(0))
 | 
			
		||||
					{
 | 
			
		||||
						_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.SEALED_TABLET_ATTACK_THE_FLAME_FLOWERS_OH_PLANT_THE_FLAME_FLOWERS_AROUND_THE_TABLET_AND_ATTACK_IT_NOW);
 | 
			
		||||
						npc.setScriptValue(1);
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
					if (npc.isScriptValue(1) && (npc.getCurrentHpPercent() < 60))
 | 
			
		||||
					{
 | 
			
		||||
						_seal_device.setDisplayEffect(1);
 | 
			
		||||
						_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.OH_YES_LOOK_AT_THAT_THE_SEAL_IS_BREAKING_JUST_A_LITTLE_MORE);
 | 
			
		||||
						npc.setScriptValue(2);
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
					if (npc.isScriptValue(2) && (npc.getCurrentHpPercent() < 40))
 | 
			
		||||
					{
 | 
			
		||||
						if (getRandom(10) < 5)
 | 
			
		||||
						{
 | 
			
		||||
							world.spawnGroup("arimanes");
 | 
			
		||||
							world.broadcastPacket(new ExShowScreenMessage(NpcStringId.ARIMANES, ExShowScreenMessage.TOP_CENTER, 10000, true));
 | 
			
		||||
						}
 | 
			
		||||
						npc.setScriptValue(3);
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
					if (npc.isScriptValue(3) && (npc.getCurrentHpPercent() < 20))
 | 
			
		||||
					{
 | 
			
		||||
						_seal_device.setDisplayEffect(2);
 | 
			
		||||
						npc.setScriptValue(4);
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case SEAL_ARCHANGEL:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(9) && npc.isScriptValue(0))
 | 
			
		||||
					{
 | 
			
		||||
						npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DO_NOT_LUST_AFTER_WHAT_S_SEALED_HERE_IT_IS_NOT_YOURS);
 | 
			
		||||
						startQuestTimer("angel_msg", 6000, npc, null);
 | 
			
		||||
						startQuestTimer("switch_quest", 1000, npc, attacker);
 | 
			
		||||
						npc.setScriptValue(1);
 | 
			
		||||
					}
 | 
			
		||||
					if (world.isStatus(9) && (npc.getCurrentHpPercent() < 50))
 | 
			
		||||
					{
 | 
			
		||||
						npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.TAUTI_MUST_REMAIN_SEALED_HERE);
 | 
			
		||||
						startQuestTimer("angel_teleport", 3000, npc, attacker);
 | 
			
		||||
						world.setStatus(10);
 | 
			
		||||
						SEAL_ARCHANGEL_WRATH.getSkill().applyEffects(npc, attacker);
 | 
			
		||||
					}
 | 
			
		||||
					if (world.isStatus(10) && (npc.getCurrentHpPercent() < 30))
 | 
			
		||||
					{
 | 
			
		||||
						world.spawnGroup("last_deton");
 | 
			
		||||
						_deton.setRunning();
 | 
			
		||||
						_deton.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, DETON_MOVE_3);
 | 
			
		||||
						startQuestTimer("msg_12", 6000, _deton, null);
 | 
			
		||||
						_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.NICE_NICE_I_SEE_THAT_EVERYONE_S_FIGHTING_HARD_FOR_ME);
 | 
			
		||||
						world.setStatus(11);
 | 
			
		||||
					}
 | 
			
		||||
					if (world.isStatus(11) && (npc.getCurrentHpPercent() < 5))
 | 
			
		||||
					{
 | 
			
		||||
						npc.setIsInvul(true);
 | 
			
		||||
						SEAL_ARCHANGEL_WRATH.getSkill().applyEffects(npc, attacker);
 | 
			
		||||
						world.setStatus(12);
 | 
			
		||||
						World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 1000, pl ->
 | 
			
		||||
						{
 | 
			
		||||
							if (pl.isInParty())
 | 
			
		||||
							{
 | 
			
		||||
								final Party party = pl.getParty();
 | 
			
		||||
								final List<PlayerInstance> members = party.getMembers();
 | 
			
		||||
								for (PlayerInstance member : members)
 | 
			
		||||
								{
 | 
			
		||||
									if (member.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
 | 
			
		||||
									{
 | 
			
		||||
										final QuestState qs = member.getQuestState(Q00833_DevilsTreasureTauti.class.getSimpleName());
 | 
			
		||||
										if ((qs != null) && qs.isCond(7))
 | 
			
		||||
										{
 | 
			
		||||
											final Quest qs833 = QuestManager.getInstance().getQuest(Q00833_DevilsTreasureTauti.class.getSimpleName());
 | 
			
		||||
											if (qs833 != null)
 | 
			
		||||
											{
 | 
			
		||||
												qs.setCond(8, true);
 | 
			
		||||
											}
 | 
			
		||||
										}
 | 
			
		||||
									}
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						});
 | 
			
		||||
						startQuestTimer("end_instance", 52000, _deton, null);
 | 
			
		||||
						world.despawnGroup("last_deton");
 | 
			
		||||
						world.despawnGroup("last_archagel");
 | 
			
		||||
						playMovie(world.getPlayers(), Movie.EPIC_TAUTI_SCENE);
 | 
			
		||||
						npc.deleteMe();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return super.onAttack(npc, attacker, damage, isSummon);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
 | 
			
		||||
	{
 | 
			
		||||
		final Instance world = npc.getInstanceWorld();
 | 
			
		||||
		if (isInInstance(world))
 | 
			
		||||
		{
 | 
			
		||||
			switch (npc.getId())
 | 
			
		||||
			{
 | 
			
		||||
				case FLAME_STACATO:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(3) && world.getAliveNpcs(MonsterInstance.class).isEmpty())
 | 
			
		||||
					{
 | 
			
		||||
						cancelQuestTimers("end_instance");
 | 
			
		||||
						cancelQuestTimers("check_flower");
 | 
			
		||||
						world.getPlayers().forEach(temp -> temp.sendPacket(new ExSendUIEvent(temp, true, true, 0, 0, NpcStringId.ELAPSED_TIME)));
 | 
			
		||||
						world.setStatus(4);
 | 
			
		||||
						World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 1000, pl ->
 | 
			
		||||
						{
 | 
			
		||||
							if ((pl.isInParty() && pl.getParty().isLeader(pl)) || pl.isGM())
 | 
			
		||||
							{
 | 
			
		||||
								_deton.setTarget(pl);
 | 
			
		||||
								_deton.setRunning();
 | 
			
		||||
								_deton.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, pl);
 | 
			
		||||
							}
 | 
			
		||||
						});
 | 
			
		||||
						_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ANYWAY_THE_STAKATOS_WILL_NOT_COME_OUT_ANYMORE_WHY_WELL);
 | 
			
		||||
						startQuestTimer("msg_7", 7000, _deton, null);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case FLAME_SCORPION:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(5) && (world.getAliveNpcs(MonsterInstance.class).size() < 2))
 | 
			
		||||
					{
 | 
			
		||||
						world.broadcastPacket(new ExShowScreenMessage(NpcStringId.LEFT_OR_RIGHT_WHICH_WAY, ExShowScreenMessage.BOTTOM_RIGHT, 10000, false));
 | 
			
		||||
						startQuestTimer("msg_8", 3000, _deton, null);
 | 
			
		||||
						world.setStatus(6);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case SEAL_TOMBSTONE:
 | 
			
		||||
				{
 | 
			
		||||
					_seal_device.setDisplayEffect(3);
 | 
			
		||||
					_seal_device.doDie(npc);
 | 
			
		||||
					world.broadcastPacket(new ExShowScreenMessage(NpcStringId.LET_S_GO_DOWN_THIS_WAY_I_LL_BE_RIGHT_BEHIND_YOU, ExShowScreenMessage.BOTTOM_RIGHT, 10000, false));
 | 
			
		||||
					_deton.setRunning();
 | 
			
		||||
					_deton.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, DETON_MOVE_2);
 | 
			
		||||
					startQuestTimer("msg_11", 3000, _deton, null);
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case SEALED_ANGEL:
 | 
			
		||||
				{
 | 
			
		||||
					world.spawnGroup("last_archagel");
 | 
			
		||||
					world.openCloseDoor(world.getTemplateParameters().getInt("1_door"), true);
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return super.onKill(npc, killer, isSummon);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onEnterZone(Creature creature, ZoneType zone)
 | 
			
		||||
	{
 | 
			
		||||
		final Instance world = creature.getInstanceWorld();
 | 
			
		||||
		final PlayerInstance player = creature.getActingPlayer();
 | 
			
		||||
		if (isInInstance(world))
 | 
			
		||||
		{
 | 
			
		||||
			switch (zone.getId())
 | 
			
		||||
			{
 | 
			
		||||
				case 80027:
 | 
			
		||||
				{
 | 
			
		||||
					if (((player.isInParty() && player.getParty().isLeader(player)) || player.isGM()) && world.isStatus(1))
 | 
			
		||||
					{
 | 
			
		||||
						world.setStatus(2);
 | 
			
		||||
						_deton.setTarget(null);
 | 
			
		||||
						_deton.stopMove(null);
 | 
			
		||||
						startQuestTimer("msg_4", 7000, _deton, null);
 | 
			
		||||
						world.broadcastPacket(new ExShowScreenMessage(NpcStringId.IT_S_A_FLAME_FLOWER_THESE_SHOULD_COME_IN_HANDY_LATER_ON, ExShowScreenMessage.BOTTOM_RIGHT, 10000, false));
 | 
			
		||||
						world.getPlayers().forEach(temp -> temp.sendPacket(new ExSendUIEvent(temp, false, false, 180, 0, NpcStringId.ELAPSED_TIME)));
 | 
			
		||||
						startQuestTimer("end_instance", 190000, _deton, null);
 | 
			
		||||
						startQuestTimer("spawn_stacato", 5000, _deton, null);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case 80028:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(0))
 | 
			
		||||
					{
 | 
			
		||||
						startQuestTimer("check_status", 21000, _deton, player);
 | 
			
		||||
						world.setStatus(1);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case 80029:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(4))
 | 
			
		||||
					{
 | 
			
		||||
						world.broadcastPacket(new ExShowScreenMessage(NpcStringId.A_CROSSROADS_I_DON_T_KNOW_WHICH_WAY_WE_SHOULD_TAKE, ExShowScreenMessage.BOTTOM_RIGHT, 10000, false));
 | 
			
		||||
						_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HMM_WHAT_IS_THIS_I_DON_T_THINK_I_VE_BEEN_AROUND_HERE_BEFORE_THIS_EERIE_FEELING);
 | 
			
		||||
						startQuestTimer("spawn_scorpion", 5000, _deton, player);
 | 
			
		||||
						world.setStatus(5);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case 80030:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(6))
 | 
			
		||||
					{
 | 
			
		||||
						_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.OKAY_IT_DOES_LOOK_BETTER_THAN_THE_OTHER_WAY_THE_AIR_FEELS_BETTER_ALREADY);
 | 
			
		||||
						startQuestTimer("spawn_golem", 7000, _deton, player);
 | 
			
		||||
						world.setStatus(7);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case 80031:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(7))
 | 
			
		||||
					{
 | 
			
		||||
						world.broadcastPacket(new ExShowScreenMessage(NpcStringId.A_SEALED_TABLET_HUH, ExShowScreenMessage.BOTTOM_RIGHT, 10000, false));
 | 
			
		||||
						world.setStatus(8);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case 80032:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(8))
 | 
			
		||||
					{
 | 
			
		||||
						world.broadcastPacket(new ExShowScreenMessage(NpcStringId.THERE_S_NO_FUTURE_FOR_THOSE_WHO_CANNOT_WIN_AGAINST_THEMSELVES, ExShowScreenMessage.BOTTOM_RIGHT, 10000, false));
 | 
			
		||||
						world.spawnGroup("seal_arngels");
 | 
			
		||||
						world.setStatus(9);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case 80033:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(6))
 | 
			
		||||
					{
 | 
			
		||||
						_deton.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THIS_WAY_FEELS_MUCH_SAFER_GOOD_CHOICE_THE_AIR_FEELS_DIFFERENT);
 | 
			
		||||
						startQuestTimer("spawn_scarab", 7000, _deton, player);
 | 
			
		||||
						world.setStatus(7);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return super.onEnterZone(creature, zone);
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onSpawn(Npc npc)
 | 
			
		||||
	{
 | 
			
		||||
		final Instance world = npc.getInstanceWorld();
 | 
			
		||||
		if (isInInstance(world))
 | 
			
		||||
		{
 | 
			
		||||
			switch (npc.getId())
 | 
			
		||||
			{
 | 
			
		||||
				case DETON:
 | 
			
		||||
				{
 | 
			
		||||
					_deton = npc;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case SEAL_DEVICE:
 | 
			
		||||
				{
 | 
			
		||||
					_seal_device = npc;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case FLAME_FLOWER:
 | 
			
		||||
				{
 | 
			
		||||
					npc.setCurrentHp(npc.getMaxHp() * 0.20);
 | 
			
		||||
					for (final Npc tombstone : World.getInstance().getVisibleObjectsInRange(npc, MonsterInstance.class, 500))
 | 
			
		||||
					{
 | 
			
		||||
						if (tombstone.getId() == SEAL_TOMBSTONE)
 | 
			
		||||
						{
 | 
			
		||||
							npc.setTarget(tombstone);
 | 
			
		||||
							tryToEffect(npc, tombstone, DECREASE_PDEF.getSkillId());
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case FLAME_STACATO:
 | 
			
		||||
				{
 | 
			
		||||
					startQuestTimer("check_flower", 3000, npc, null, true);
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case FLAME_SCORPION:
 | 
			
		||||
				{
 | 
			
		||||
					startQuestTimer("attack_player", 2000, npc, null);
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case FLAME_GOLEM:
 | 
			
		||||
				{
 | 
			
		||||
					World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 1500, player ->
 | 
			
		||||
					{
 | 
			
		||||
						if (player.isInParty())
 | 
			
		||||
						{
 | 
			
		||||
							final Party party = player.getParty();
 | 
			
		||||
							final List<PlayerInstance> members = party.getMembers();
 | 
			
		||||
							for (PlayerInstance member : members)
 | 
			
		||||
							{
 | 
			
		||||
								if (member.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
 | 
			
		||||
								{
 | 
			
		||||
									final QuestState qs = member.getQuestState(Q00833_DevilsTreasureTauti.class.getSimpleName());
 | 
			
		||||
									if ((qs != null) && qs.isCond(2))
 | 
			
		||||
									{
 | 
			
		||||
										final Quest qs833 = QuestManager.getInstance().getQuest(Q00833_DevilsTreasureTauti.class.getSimpleName());
 | 
			
		||||
										if (qs833 != null)
 | 
			
		||||
										{
 | 
			
		||||
											qs.setCond(3, true);
 | 
			
		||||
										}
 | 
			
		||||
									}
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					});
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case FLAME_SCARAB:
 | 
			
		||||
				{
 | 
			
		||||
					startQuestTimer("attack_player", 2000, npc, null);
 | 
			
		||||
					World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 1500, player ->
 | 
			
		||||
					{
 | 
			
		||||
						if (player.isInParty())
 | 
			
		||||
						{
 | 
			
		||||
							final Party party = player.getParty();
 | 
			
		||||
							final List<PlayerInstance> members = party.getMembers();
 | 
			
		||||
							for (PlayerInstance member : members)
 | 
			
		||||
							{
 | 
			
		||||
								if (member.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
 | 
			
		||||
								{
 | 
			
		||||
									final QuestState qs = member.getQuestState(Q00833_DevilsTreasureTauti.class.getSimpleName());
 | 
			
		||||
									if ((qs != null) && qs.isCond(2))
 | 
			
		||||
									{
 | 
			
		||||
										final Quest qs833 = QuestManager.getInstance().getQuest(Q00833_DevilsTreasureTauti.class.getSimpleName());
 | 
			
		||||
										if (qs833 != null)
 | 
			
		||||
										{
 | 
			
		||||
											qs.setCond(4, true);
 | 
			
		||||
										}
 | 
			
		||||
									}
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					});
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case NPC_1:
 | 
			
		||||
				{
 | 
			
		||||
					for (final PlayerInstance nearby : World.getInstance().getVisibleObjectsInRange(npc, PlayerInstance.class, 2000))
 | 
			
		||||
					{
 | 
			
		||||
						if (npc.isScriptValue(0) && (nearby != null))
 | 
			
		||||
						{
 | 
			
		||||
							startQuestTimer("clone_player", 500, npc, nearby);
 | 
			
		||||
						}
 | 
			
		||||
						
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case SEAL_ARCHANGEL:
 | 
			
		||||
				{
 | 
			
		||||
					if (world.isStatus(10))
 | 
			
		||||
					{
 | 
			
		||||
						npc.setCurrentHp(npc.getMaxHp() * 0.5);
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return super.onSpawn(npc);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onSkillSee(Npc npc, PlayerInstance caster, Skill skill, WorldObject[] targets, boolean isSummon)
 | 
			
		||||
	{
 | 
			
		||||
		final Instance world = npc.getInstanceWorld();
 | 
			
		||||
		if (isInInstance(world))
 | 
			
		||||
		{
 | 
			
		||||
			switch (npc.getId())
 | 
			
		||||
			{
 | 
			
		||||
				case FLAME_FLOWER:
 | 
			
		||||
				{
 | 
			
		||||
					if ((world.getStatus() < 5) && (npc.getCurrentHp() == npc.getMaxHp()))
 | 
			
		||||
					{
 | 
			
		||||
						npc.broadcastPacket(new ExShowScreenMessage(NpcStringId.S1_LOOK_INSIDE_YOUR_BAG_YOU_OBTAINED_A_FLAME_FLOWER, ExShowScreenMessage.BOTTOM_RIGHT, 10000, false, caster.getName()));
 | 
			
		||||
						giveItems(caster, FLAME_FLOWER_BUD, 1);
 | 
			
		||||
						npc.doDie(npc);
 | 
			
		||||
						npc.deleteMe();
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
				case SEAL_TOMBSTONE:
 | 
			
		||||
				{
 | 
			
		||||
					if (skill.getId() == SUMMON_FLAME_FLOWER.getSkillId())
 | 
			
		||||
					{
 | 
			
		||||
						addSpawn(FLAME_FLOWER, caster, false, 60000, false, world.getId());
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return super.onSkillSee(npc, caster, skill, targets, isSummon);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onFirstTalk(Npc npc, PlayerInstance player)
 | 
			
		||||
	{
 | 
			
		||||
		return npc.getId() + ".html";
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void tryToEffect(Npc npc, Creature character, int diseaseId)
 | 
			
		||||
	{
 | 
			
		||||
		final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(diseaseId);
 | 
			
		||||
		final int skillLevel = (info == null) ? 1 : (info.getSkill().getLevel() < 3) ? info.getSkill().getLevel() + 1 : 3;
 | 
			
		||||
		final Skill skill = SkillData.getInstance().getSkill(diseaseId, skillLevel);
 | 
			
		||||
		
 | 
			
		||||
		if ((skill != null) && SkillCaster.checkUseConditions(npc, skill))
 | 
			
		||||
		{
 | 
			
		||||
			npc.doCast(skill);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static void main(String[] args)
 | 
			
		||||
	{
 | 
			
		||||
		new StoryOfTauti();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -129,7 +129,6 @@
 | 
			
		||||
792 The Superion Giants
 | 
			
		||||
816 Plans to Repair the Stronghold
 | 
			
		||||
824 Command Post Raid
 | 
			
		||||
833 Devil's Treasure, Tauti
 | 
			
		||||
834 Against Dragonclaw 
 | 
			
		||||
836 Request from the Blackbird Clan
 | 
			
		||||
837 Request from the Giant Trackers
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
<html><body>Mystic Tavern Owner Settlen:<br>
 | 
			
		||||
Oh, you must have heard Tauti's story!<br>
 | 
			
		||||
I was so shocked when I first heard about Tauti's story. To think that Deton tried to take axe and ended up turning into that...<br>
 | 
			
		||||
Anyway, I told you our stories are very interesting.<br> 
 | 
			
		||||
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00833_DevilsTreasureTauti 34180-02.html">"Yes, thank you."</Button>
 | 
			
		||||
</body></html>
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
<html><body>Mystic Tavern Owner Settlen:<br>
 | 
			
		||||
Anyway, thank you for listening to our stories. Here's a small gift for you.<br>
 | 
			
		||||
Please come by often and let's all have a great time again.
 | 
			
		||||
</body></html>
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
<html><body>Mystic Tavern Owner Settlen:<br>
 | 
			
		||||
The most interesting still ahead, and you want to leave?<br>
 | 
			
		||||
Just think about our employees who are trying for you. Please listen to the story to the end 
 | 
			
		||||
</body></html>
 | 
			
		||||
@@ -0,0 +1,224 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of the L2J Mobius project.
 | 
			
		||||
 * 
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 * 
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | 
			
		||||
 * General Public License for more details.
 | 
			
		||||
 * 
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
package quests.Q00833_DevilsTreasureTauti;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.Config;
 | 
			
		||||
import org.l2jmobius.gameserver.enums.Movie;
 | 
			
		||||
import org.l2jmobius.gameserver.enums.QuestSound;
 | 
			
		||||
import org.l2jmobius.gameserver.enums.QuestType;
 | 
			
		||||
import org.l2jmobius.gameserver.model.Party;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.Creature;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.Npc;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
 | 
			
		||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
 | 
			
		||||
import org.l2jmobius.gameserver.model.quest.Quest;
 | 
			
		||||
import org.l2jmobius.gameserver.model.quest.QuestState;
 | 
			
		||||
import org.l2jmobius.gameserver.model.quest.State;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Devil's Treasure, Tauti (833)
 | 
			
		||||
 * @URL https://l2wiki.com/Devil%27s_Treasure,_Tauti
 | 
			
		||||
 * @author Gigi
 | 
			
		||||
 */
 | 
			
		||||
public class Q00833_DevilsTreasureTauti extends Quest
 | 
			
		||||
{
 | 
			
		||||
	// NPCs
 | 
			
		||||
	private static final int DETON = 34170;
 | 
			
		||||
	private static final int SETTLEN = 34180;
 | 
			
		||||
	// Monsters
 | 
			
		||||
	private static final int FLAME_SCORPION = 23682;
 | 
			
		||||
	private static final int FLAME_GOLEM = 23680;
 | 
			
		||||
	private static final int FLAME_SCARAB = 23709;
 | 
			
		||||
	private static final int SEAL_TOMBSTONE = 19607;
 | 
			
		||||
	// Items
 | 
			
		||||
	private static final int FRENZED_TAUTIS_FRAGMENT = 47884;
 | 
			
		||||
	private static final int INSANE_KELBIMS_FRAGMENT = 47885;
 | 
			
		||||
	private static final int SOE_MISTYC_TAVERN = 46564;
 | 
			
		||||
	private static final int MYSTIC_ARMOR_PIACE = 46587;
 | 
			
		||||
	private static final int FLAME_FLOWER = 46554;
 | 
			
		||||
	
 | 
			
		||||
	public Q00833_DevilsTreasureTauti()
 | 
			
		||||
	{
 | 
			
		||||
		super(833);
 | 
			
		||||
		addStartNpc(DETON);
 | 
			
		||||
		addTalkId(SETTLEN);
 | 
			
		||||
		addKillId(FLAME_SCORPION, FLAME_GOLEM, FLAME_SCARAB, SEAL_TOMBSTONE);
 | 
			
		||||
		addSeeCreatureId(DETON);
 | 
			
		||||
		registerQuestItems(FLAME_FLOWER);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onAdvEvent(String event, Npc npc, PlayerInstance player)
 | 
			
		||||
	{
 | 
			
		||||
		String htmltext = null;
 | 
			
		||||
		final QuestState qs = getQuestState(player, false);
 | 
			
		||||
		switch (event)
 | 
			
		||||
		{
 | 
			
		||||
			case "34180-02.html":
 | 
			
		||||
			{
 | 
			
		||||
				final int chance = getRandom(100);
 | 
			
		||||
				if (chance <= 10)
 | 
			
		||||
				{
 | 
			
		||||
					giveItems(player, FRENZED_TAUTIS_FRAGMENT, 1);
 | 
			
		||||
				}
 | 
			
		||||
				else if ((chance > 10) && (chance <= 20))
 | 
			
		||||
				{
 | 
			
		||||
					giveItems(player, INSANE_KELBIMS_FRAGMENT, 1);
 | 
			
		||||
				}
 | 
			
		||||
				else if ((chance > 20) && (chance <= 40))
 | 
			
		||||
				{
 | 
			
		||||
					giveItems(player, MYSTIC_ARMOR_PIACE, 1);
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					giveItems(player, SOE_MISTYC_TAVERN, 1);
 | 
			
		||||
				}
 | 
			
		||||
				addExpAndSp(player, 6_362_541_900L, 15_270_101);
 | 
			
		||||
				qs.exitQuest(QuestType.REPEATABLE, true);
 | 
			
		||||
				htmltext = event;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return htmltext;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onTalk(Npc npc, PlayerInstance player)
 | 
			
		||||
	{
 | 
			
		||||
		String htmltext = getNoQuestMsg(player);
 | 
			
		||||
		final QuestState qs = getQuestState(player, true);
 | 
			
		||||
		
 | 
			
		||||
		switch (qs.getState())
 | 
			
		||||
		{
 | 
			
		||||
			case State.STARTED:
 | 
			
		||||
			{
 | 
			
		||||
				htmltext = (qs.isCond(8)) ? "34180-01.html" : "34180-03.html";
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return htmltext;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
 | 
			
		||||
	{
 | 
			
		||||
		final PlayerInstance player = creature.getActingPlayer();
 | 
			
		||||
		if (player != null)
 | 
			
		||||
		{
 | 
			
		||||
			final QuestState qs = getQuestState(player, true);
 | 
			
		||||
			if (!qs.isStarted())
 | 
			
		||||
			{
 | 
			
		||||
				playMovie(player, Movie.EPIC_TAUTI_SLIDE);
 | 
			
		||||
				qs.startQuest();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return super.onSeeCreature(npc, creature, isSummon);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
 | 
			
		||||
	{
 | 
			
		||||
		Party party = killer.getParty();
 | 
			
		||||
		if (party != null)
 | 
			
		||||
		{
 | 
			
		||||
			party.getMembers().forEach(p -> onKill(npc, p));
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			onKill(npc, killer);
 | 
			
		||||
		}
 | 
			
		||||
		return super.onKill(npc, killer, isSummon);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void onKill(Npc npc, PlayerInstance killer)
 | 
			
		||||
	{
 | 
			
		||||
		final QuestState qs = getQuestState(killer, false);
 | 
			
		||||
		switch (npc.getId())
 | 
			
		||||
		{
 | 
			
		||||
			case FLAME_SCORPION:
 | 
			
		||||
			{
 | 
			
		||||
				if ((qs != null) && qs.isCond(1) && killer.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
 | 
			
		||||
				{
 | 
			
		||||
					int killedScorpion = qs.getInt("killed_" + FLAME_SCORPION);
 | 
			
		||||
					if (killedScorpion < 5)
 | 
			
		||||
					{
 | 
			
		||||
						qs.set("killed_" + FLAME_SCORPION, ++killedScorpion);
 | 
			
		||||
						playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
					if (killedScorpion >= 5)
 | 
			
		||||
					{
 | 
			
		||||
						qs.setCond(2, true);
 | 
			
		||||
					}
 | 
			
		||||
					sendNpcLogList(killer);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case FLAME_GOLEM:
 | 
			
		||||
			{
 | 
			
		||||
				if ((qs != null) && qs.isCond(3) && killer.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
 | 
			
		||||
				{
 | 
			
		||||
					qs.setCond(5, true);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case FLAME_SCARAB:
 | 
			
		||||
			{
 | 
			
		||||
				if ((qs != null) && qs.isCond(4) && killer.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
 | 
			
		||||
				{
 | 
			
		||||
					int killedScarab = qs.getInt("killed_" + FLAME_SCARAB);
 | 
			
		||||
					if (killedScarab < 5)
 | 
			
		||||
					{
 | 
			
		||||
						qs.set("killed_" + FLAME_SCARAB, ++killedScarab);
 | 
			
		||||
						playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
					if (killedScarab >= 5)
 | 
			
		||||
					{
 | 
			
		||||
						qs.setCond(5, true);
 | 
			
		||||
					}
 | 
			
		||||
					sendNpcLogList(killer);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case SEAL_TOMBSTONE:
 | 
			
		||||
			{
 | 
			
		||||
				if ((qs != null) && qs.isCond(5) && killer.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
 | 
			
		||||
				{
 | 
			
		||||
					qs.setCond(6, true);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
 | 
			
		||||
	{
 | 
			
		||||
		final QuestState qs = getQuestState(player, false);
 | 
			
		||||
		if (qs.isCond(1) || qs.isCond(4))
 | 
			
		||||
		{
 | 
			
		||||
			final Set<NpcLogListHolder> holder = new HashSet<>(2);
 | 
			
		||||
			holder.add(new NpcLogListHolder(FLAME_SCORPION, false, qs.getInt("killed_" + FLAME_SCORPION)));
 | 
			
		||||
			holder.add(new NpcLogListHolder(FLAME_SCARAB, false, qs.getInt("killed_" + FLAME_SCARAB)));
 | 
			
		||||
			return holder;
 | 
			
		||||
		}
 | 
			
		||||
		return super.getNpcLogList(player);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -84,6 +84,7 @@ import quests.Q00828_EvasBlessing.Q00828_EvasBlessing;
 | 
			
		||||
import quests.Q00829_MaphrsSalvation.Q00829_MaphrsSalvation;
 | 
			
		||||
import quests.Q00830_TheWayOfTheGiantsPawn.Q00830_TheWayOfTheGiantsPawn;
 | 
			
		||||
import quests.Q00831_SayhasScheme.Q00831_SayhasScheme;
 | 
			
		||||
import quests.Q00833_DevilsTreasureTauti.Q00833_DevilsTreasureTauti;
 | 
			
		||||
import quests.Q00835_PitiableMelisa.Q00835_PitiableMelisa;
 | 
			
		||||
import quests.Q00901_HowLavasaurusesAreMade.Q00901_HowLavasaurusesAreMade;
 | 
			
		||||
import quests.Q00903_TheCallOfAntharas.Q00903_TheCallOfAntharas;
 | 
			
		||||
@@ -302,6 +303,7 @@ public class QuestMasterHandler
 | 
			
		||||
		Q00829_MaphrsSalvation.class,
 | 
			
		||||
		Q00830_TheWayOfTheGiantsPawn.class,
 | 
			
		||||
		Q00831_SayhasScheme.class,
 | 
			
		||||
		Q00833_DevilsTreasureTauti.class,
 | 
			
		||||
		Q00835_PitiableMelisa.class,
 | 
			
		||||
		Q00836_RequestFromTheBlackbirdClan.class, // TODO: Not done.
 | 
			
		||||
		Q00837_RequestFromTheGiantTrackers.class, // TODO: Not done.
 | 
			
		||||
 
 | 
			
		||||
@@ -102,7 +102,7 @@
 | 
			
		||||
			<height normal="0.1" />
 | 
			
		||||
		</collision>
 | 
			
		||||
	</npc>
 | 
			
		||||
	<npc id="19606" level="85" type="Npc" name="Flame Flower">
 | 
			
		||||
	<npc id="19606" level="99" type="FriendlyNpc" name="Flame Flower">
 | 
			
		||||
		<!-- AUTO GENERATED NPC TODO: FIX IT -->
 | 
			
		||||
		<race>HUMAN</race>
 | 
			
		||||
		<sex>FEMALE</sex>
 | 
			
		||||
@@ -113,24 +113,24 @@
 | 
			
		||||
				<run ground="1" />
 | 
			
		||||
			</speed>
 | 
			
		||||
		</stats>
 | 
			
		||||
		<status attackable="false" />
 | 
			
		||||
		<status attackable="false" randomWalk="false" talkable="false" />
 | 
			
		||||
		<collision>
 | 
			
		||||
			<radius normal="12" />
 | 
			
		||||
			<height normal="10" />
 | 
			
		||||
		</collision>
 | 
			
		||||
	</npc>
 | 
			
		||||
	<npc id="19607" level="85" type="Npc" name="Seal Tombstone">
 | 
			
		||||
		<!-- AUTO GENERATED NPC TODO: FIX IT -->
 | 
			
		||||
		<race>HUMAN</race>
 | 
			
		||||
		<sex>FEMALE</sex>
 | 
			
		||||
	<npc id="19607" level="100" type="Monster" name="Seal Tombstone">
 | 
			
		||||
		<race>ETC</race>
 | 
			
		||||
		<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
 | 
			
		||||
			<vitals hp="1613128" hpRegen="7.5" mp="23928" mpRegen="2.7" />
 | 
			
		||||
			<vitals hp="17131280.0" hpRegen="7.5" mp="23928.0" mpRegen="2.7" />
 | 
			
		||||
			<attack physical="1280.9" magical="1001.1" critical="4" attackSpeed="253" range="40" />
 | 
			
		||||
			<defence physical="16389.1" magical="13989.5" />
 | 
			
		||||
			<speed>
 | 
			
		||||
				<walk ground="1" />
 | 
			
		||||
				<run ground="1" />
 | 
			
		||||
			</speed>
 | 
			
		||||
		</stats>
 | 
			
		||||
		<status attackable="false" />
 | 
			
		||||
		<status attackable="false" randomWalk="false" canMove="false" randomAnimation="false" />
 | 
			
		||||
		<collision>
 | 
			
		||||
			<radius normal="30" />
 | 
			
		||||
			<height normal="60.8" />
 | 
			
		||||
@@ -147,7 +147,7 @@
 | 
			
		||||
				<run ground="1" />
 | 
			
		||||
			</speed>
 | 
			
		||||
		</stats>
 | 
			
		||||
		<status attackable="false" />
 | 
			
		||||
		<status attackable="false" targetable="false" showName="false" />
 | 
			
		||||
		<collision>
 | 
			
		||||
			<radius normal="160" />
 | 
			
		||||
			<height normal="40" />
 | 
			
		||||
 
 | 
			
		||||
@@ -691,20 +691,39 @@
 | 
			
		||||
	<skill id="16571" toLevel="1" name="Weakened Defense">
 | 
			
		||||
		<!-- P. Def. is decreased -->
 | 
			
		||||
		<icon>icon.skill11276</icon>
 | 
			
		||||
		<operateType>A1</operateType>
 | 
			
		||||
		<abnormalLvl>1</abnormalLvl>		
 | 
			
		||||
		<abnormalTime>1</abnormalTime>
 | 
			
		||||
		<operateType>A2</operateType>
 | 
			
		||||
		<castRange>900</castRange>
 | 
			
		||||
		<hitTime>600000</hitTime>
 | 
			
		||||
		<reuseDelay>300000</reuseDelay>
 | 
			
		||||
		<effectPoint>-707</effectPoint>
 | 
			
		||||
		<isMagic>2</isMagic>
 | 
			
		||||
		<isDebuff>true</isDebuff>
 | 
			
		||||
		<targetType>TARGET</targetType>
 | 
			
		||||
		<affectScope>SINGLE</affectScope>
 | 
			
		||||
	</skill>
 | 
			
		||||
	<skill id="16572" toLevel="1" name="Seal Archangel's Wrath">
 | 
			
		||||
		<!-- Seal Archangel's Wrath causes Action Prohibit state -->
 | 
			
		||||
		<icon>icon.skill4111</icon>
 | 
			
		||||
		<abnormalLvl>1</abnormalLvl>
 | 
			
		||||
		<abnormalTime>3</abnormalTime>
 | 
			
		||||
		<abnormalType>STUN</abnormalType>
 | 
			
		||||
		<abnormalVisualEffect>STUN</abnormalVisualEffect>
 | 
			
		||||
		<operateType>A2</operateType>
 | 
			
		||||
		<castRange>400</castRange>
 | 
			
		||||
		<effectPoint>-100</effectPoint>
 | 
			
		||||
		<affectLimit>10-10</affectLimit>
 | 
			
		||||
		<isDebuff>true</isDebuff>
 | 
			
		||||
		<fanRange>0;0;80;300</fanRange>
 | 
			
		||||
		<targetType>SELF</targetType>
 | 
			
		||||
		<affectScope>FAN_PB</affectScope>
 | 
			
		||||
		<affectObject>NOT_FRIEND</affectObject>
 | 
			
		||||
		<effects>
 | 
			
		||||
			<effect name="BlockActions">
 | 
			
		||||
				<allowedSkills>10279;10517;10025;10776;11770;1904;11264;11093;13314;1912</allowedSkills>
 | 
			
		||||
			</effect>
 | 
			
		||||
		</effects>
 | 
			
		||||
	</skill>
 | 
			
		||||
	<skill id="16573" toLevel="1" name="Kelbim Petrify">
 | 
			
		||||
		<!-- A Petrify spell causes the body to temporarily turn to rock. -->
 | 
			
		||||
 
 | 
			
		||||
@@ -123,36 +123,70 @@
 | 
			
		||||
		<coolTime>500</coolTime>
 | 
			
		||||
	</skill>
 | 
			
		||||
	<skill id="18513" toLevel="1" name="Summon Flame Flower">
 | 
			
		||||
		<icon>icon.skill0000</icon>
 | 
			
		||||
		<itemConsumeCount>1</itemConsumeCount>
 | 
			
		||||
		<itemConsumeId>46554</itemConsumeId> <!-- Flame Flower -->
 | 
			
		||||
		<operateType>A1</operateType>
 | 
			
		||||
		<hitTime>1500</hitTime>
 | 
			
		||||
		<reuseDelay>3000</reuseDelay>
 | 
			
		||||
		<magicCriticalRate>5</magicCriticalRate>
 | 
			
		||||
		<hitCancelTime>0</hitCancelTime>
 | 
			
		||||
		<targetType>SELF</targetType>
 | 
			
		||||
		<affectScope>SINGLE</affectScope>
 | 
			
		||||
	</skill>
 | 
			
		||||
	<skill id="18514" toLevel="1" name="Seal Altar of Earth">
 | 
			
		||||
		<!-- The seal of the ruler is engraved on the ancient relic protecting the fort. -->
 | 
			
		||||
		<icon>icon.skill0246</icon>
 | 
			
		||||
		<operateType>A1</operateType>
 | 
			
		||||
		<coolTime>500</coolTime>
 | 
			
		||||
		<mpConsume>10</mpConsume>
 | 
			
		||||
		<castRange>100</castRange>
 | 
			
		||||
		<hitTime>60000</hitTime>
 | 
			
		||||
		<hitTime>120000</hitTime>
 | 
			
		||||
		<reuseDelay>5000</reuseDelay>
 | 
			
		||||
	</skill>
 | 
			
		||||
	<skill id="18515" toLevel="3" name="Weakened Defense">
 | 
			
		||||
		<!-- P./ M. Def. -10%. Inflicted status: Confusion (Fear, Aerial Yoke, Faint, Charm, Stun, Paralysis, Knockback, Knockdown, Pull). -->
 | 
			
		||||
		<!-- P./M. Def. is decreased by Lvl 1 - 10%. -->
 | 
			
		||||
		<!-- P./M. Def. is decreased by Lvl 2 - 30%. -->
 | 
			
		||||
		<!-- P./M. Def. is decreased by Lvl 3 - 50%. -->
 | 
			
		||||
		<icon>icon.skill1042</icon>
 | 
			
		||||
		<abnormalLvl>5</abnormalLvl>
 | 
			
		||||
		<abnormalTime>60</abnormalTime>
 | 
			
		||||
		<abnormalType>PD_DOWN</abnormalType>
 | 
			
		||||
		<operateType>A2</operateType>
 | 
			
		||||
		<castRange>500</castRange>
 | 
			
		||||
		<castRange>600</castRange>
 | 
			
		||||
		<effectPoint>-692</effectPoint>
 | 
			
		||||
		<isDebuff>true</isDebuff>
 | 
			
		||||
		<targetType>TARGET</targetType>
 | 
			
		||||
		<affectScope>SINGLE</affectScope>
 | 
			
		||||
		<effects>
 | 
			
		||||
			<effect name="PhysicalDefence">
 | 
			
		||||
				<amount>
 | 
			
		||||
					<value level="1">-10</value>
 | 
			
		||||
					<value level="2">-30</value>
 | 
			
		||||
					<value level="2">-50</value>
 | 
			
		||||
				</amount>
 | 
			
		||||
				<mode>PER</mode>
 | 
			
		||||
			</effect>
 | 
			
		||||
			<effect name="MagicalDefence">
 | 
			
		||||
				<amount>
 | 
			
		||||
					<value level="1">-10</value>
 | 
			
		||||
					<value level="2">-30</value>
 | 
			
		||||
					<value level="3">-50</value>
 | 
			
		||||
				</amount>
 | 
			
		||||
				<mode>PER</mode>
 | 
			
		||||
			</effect>
 | 
			
		||||
			<effect name="CallSkill">
 | 
			
		||||
				<skillId>16571</skillId>
 | 
			
		||||
				<skillLevel>1</skillLevel>
 | 
			
		||||
			</effect>			
 | 
			
		||||
		</effects>
 | 
			
		||||
	</skill>
 | 
			
		||||
	<skill id="18516" toLevel="1" name="Seal Altar of Wind">
 | 
			
		||||
		<!-- The seal of the ruler is engraved on the ancient relic protecting the fort. -->
 | 
			
		||||
		<icon>icon.skill0246</icon>
 | 
			
		||||
		<operateType>A1</operateType>
 | 
			
		||||
		<coolTime>500</coolTime>
 | 
			
		||||
		<mpConsume>10</mpConsume>
 | 
			
		||||
		<castRange>100</castRange>
 | 
			
		||||
		<hitTime>60000</hitTime>
 | 
			
		||||
		<hitTime>120000</hitTime>
 | 
			
		||||
		<reuseDelay>5000</reuseDelay>
 | 
			
		||||
	</skill>
 | 
			
		||||
	<skill id="18517" toLevel="1" name="Top-grade Love Potion - Party">
 | 
			
		||||
 
 | 
			
		||||
@@ -1131,4 +1131,31 @@
 | 
			
		||||
	<zone name="Mystic_Tavern_Globe5" id="80023" type="ScriptZone" shape="Cylinder" minZ="-14250" maxZ="-14100" rad="110">
 | 
			
		||||
		<node X="-49355" Y="-148215" />
 | 
			
		||||
	</zone>
 | 
			
		||||
	<!-- Mystic Tavern Tauti -->
 | 
			
		||||
	<zone name="Flame_Flower_Zone" id="80027" type="ScriptZone" shape="Cylinder" minZ="-8120" maxZ="-8040" rad="750">
 | 
			
		||||
		<node X="143990" Y="-148845" />
 | 
			
		||||
	</zone>
 | 
			
		||||
	<zone name="Tauti_Start_Zone" id="80028" type="ScriptZone" shape="Cylinder" minZ="-7650" maxZ="-7550" rad="300">
 | 
			
		||||
		<node X="142644" Y="-151100" />
 | 
			
		||||
	</zone>
 | 
			
		||||
	<zone name="Tauti_Scorpion_Zone" id="80029" type="ScriptZone" shape="Cylinder" minZ="-8850" maxZ="-8700" rad="650">
 | 
			
		||||
		<node X="146900" Y="-148800" />
 | 
			
		||||
	</zone>
 | 
			
		||||
	<zone name="Tauti_Golem_Zone" id="80030" type="ScriptZone" shape="Cylinder" minZ="-9100" maxZ="-9000" rad="400">
 | 
			
		||||
		<node X="150660" Y="-148760" />
 | 
			
		||||
	</zone>
 | 
			
		||||
	<zone name="Tauti_Tombstone_Zone" id="80031" type="ScriptZone" shape="NPoly" minZ="-9100" maxZ="-8900">
 | 
			
		||||
		<node X="150744" Y="-150872" />
 | 
			
		||||
		<node X="151087" Y="-150872" />
 | 
			
		||||
		<node X="151173" Y="-151291" />
 | 
			
		||||
		<node X="150400" Y="-152900" />		
 | 
			
		||||
		<node X="149945" Y="-152920" />
 | 
			
		||||
		<node X="149837" Y="-152680" />
 | 
			
		||||
	</zone>
 | 
			
		||||
	<zone name="Tauti_Angel_Zone" id="80032" type="ScriptZone" shape="Cylinder" minZ="-11200" maxZ="-11000" rad="200">
 | 
			
		||||
		<node X="152620" Y="-151338" />
 | 
			
		||||
	</zone>
 | 
			
		||||
	<zone name="Tauti_Scarab_Zone" id="80033" type="ScriptZone" shape="Cylinder" minZ="-9150" maxZ="-9000" rad="550">
 | 
			
		||||
		<node X="148800" Y="-153125" />
 | 
			
		||||
	</zone>
 | 
			
		||||
</list>
 | 
			
		||||
		Reference in New Issue
	
	Block a user