Addition of Frintezza AI.
Contributed by robikbobik.
This commit is contained in:
parent
2501070808
commit
72369a0173
6
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/default/32011-1.htm
vendored
Normal file
6
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/default/32011-1.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Imperial Tomb Guide:<br>
|
||||
Frintezza is protecting the Force Field. Even though you can pass through it, you can't meet Frintezza yet. He's put some tests in place to keep anyone from interrupting his rest.<br>
|
||||
These obstacles will test all of your skills, and those of your party as well!<br>
|
||||
If you pass the tests within a certain amount of time, you can meet Frintezza. This should only be attempted by the brave of heart!<br>
|
||||
(If you pass the tests within 35 minutes, you'll meet Frintezza.)
|
||||
</body></html>
|
7
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/default/32011.htm
vendored
Normal file
7
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/default/32011.htm
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<html><body>
|
||||
I feel an invisible barrier... Some sort of Magic Force Field has been put in place...<br>
|
||||
...? The guide of the Imperial mausoleum seems to have something to say.<br><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest LastImperialTomb">Enter the Magic Force Field</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Listen to Imperial Tomb Guide</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
201
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/FinalEmperialTomb.xml
vendored
Normal file
201
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/instances/FinalEmperialTomb.xml
vendored
Normal file
@ -0,0 +1,201 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance id="205" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<time duration="120" empty="30" />
|
||||
<locations>
|
||||
<enter type="FIXED">
|
||||
<location x="-88015" y="-141153" z="-9168"/>
|
||||
</enter>
|
||||
<exit type="ORIGIN" />
|
||||
</locations>
|
||||
<conditions>
|
||||
<condition type="Party" />
|
||||
<condition type="CommandChannel" />
|
||||
<condition type="CommandChannelLeader" />
|
||||
<condition type="GroupMin">
|
||||
<param name="limit" value="27" /> <!-- The Kamael update -->
|
||||
</condition>
|
||||
<condition type="GroupMax">
|
||||
<param name="limit" value="300" />
|
||||
</condition>
|
||||
<condition type="Level">
|
||||
<param name="min" value="70" />
|
||||
</condition>
|
||||
<condition type="Distance" />
|
||||
<condition type="Reenter" />
|
||||
</conditions>
|
||||
<reenter apply="ON_ENTER">
|
||||
<reset day="WEDNESDAY" hour="6" minute="30" />
|
||||
</reenter>
|
||||
<doorlist>
|
||||
<door id="17130045"/>
|
||||
<door id="17130051"/>
|
||||
<door id="17130046"/>
|
||||
<door id="17130043"/>
|
||||
<door id="17130042"/>
|
||||
<door id="17130052"/>
|
||||
<door id="17130053"/>
|
||||
<door id="17130054"/>
|
||||
<door id="17130055"/>
|
||||
<door id="17130056"/>
|
||||
<door id="17130057"/>
|
||||
<door id="17130058"/>
|
||||
<door id="17130061"/>
|
||||
<door id="17130062"/>
|
||||
<door id="17130063"/>
|
||||
<door id="17130064"/>
|
||||
<door id="17130065"/>
|
||||
<door id="17130066"/>
|
||||
<door id="17130067"/>
|
||||
<door id="17130068"/>
|
||||
<door id="17130069"/>
|
||||
<door id="17130070"/>
|
||||
</doorlist>
|
||||
<spawnlist>
|
||||
<group>
|
||||
<npc id="18328" x="-87904" y="-141296" z="-9168" heading="0"/><!-- Hall Alarm -->
|
||||
</group>
|
||||
<group name="room1" spawnByDefault="false">
|
||||
<npc id="18329" x="-87361" y="-142312" z="-9176" heading="43694"/>
|
||||
<npc id="18329" x="-86916" y="-142136" z="-9176" heading="47013"/>
|
||||
<npc id="18329" x="-87037" y="-142185" z="-9176" heading="36781"/>
|
||||
<npc id="18329" x="-86869" y="-141910" z="-9176" heading="33913"/>
|
||||
<npc id="18329" x="-86787" y="-141333" z="-9176" heading="49395"/>
|
||||
<npc id="18329" x="-86581" y="-141426" z="-9176" heading="61112"/>
|
||||
<npc id="18329" x="-86792" y="-141119" z="-9176" heading="36773"/>
|
||||
<npc id="18329" x="-86693" y="-141079" z="-9176" heading="52481"/>
|
||||
<npc id="18329" x="-87002" y="-140604" z="-9176" heading="52739"/>
|
||||
<npc id="18329" x="-87074" y="-140403" z="-9176" heading="62270"/>
|
||||
<npc id="18329" x="-87239" y="-140163" z="-9176" heading="62482"/>
|
||||
<npc id="18329" x="-87816" y="-140199" z="-9176" heading="61902"/>
|
||||
<npc id="18329" x="-87281" y="-140336" z="-9176" heading="46667"/>
|
||||
<npc id="18329" x="-87809" y="-140030" z="-9176" heading="15952"/>
|
||||
<npc id="18329" x="-88028" y="-140122" z="-9176" heading="58845"/>
|
||||
<npc id="18329" x="-88186" y="-140004" z="-9176" heading="6601"/>
|
||||
<npc id="18329" x="-88746" y="-140354" z="-9176" heading="40577"/>
|
||||
<npc id="18329" x="-88717" y="-140442" z="-9176" heading="2789"/>
|
||||
<npc id="18329" x="-88619" y="-140236" z="-9176" heading="46506"/>
|
||||
<npc id="18329" x="-88936" y="-140502" z="-9176" heading="39670"/>
|
||||
<npc id="18329" x="-89022" y="-141327" z="-9176" heading="40426"/>
|
||||
<npc id="18329" x="-89177" y="-141120" z="-9176" heading="31507"/>
|
||||
<npc id="18329" x="-89037" y="-141137" z="-9176" heading="8243"/>
|
||||
<npc id="18329" x="-89075" y="-141545" z="-9176" heading="9402"/>
|
||||
<npc id="18329" x="-89147" y="-141636" z="-9176" heading="16185"/>
|
||||
<npc id="18329" x="-88857" y="-141957" z="-9176" heading="14827"/>
|
||||
<npc id="18329" x="-88880" y="-142110" z="-9176" heading="16669"/>
|
||||
<npc id="18329" x="-88554" y="-142294" z="-9176" heading="21413"/>
|
||||
<npc id="18329" x="-88693" y="-142254" z="-9176" heading="29845"/>
|
||||
<npc id="18330" x="-87188" y="-142282" z="-9176" heading="31391"/>
|
||||
<npc id="18330" x="-86779" y="-142056" z="-9176" heading="57028"/>
|
||||
<npc id="18330" x="-87043" y="-142152" z="-9176" heading="38684"/>
|
||||
<npc id="18330" x="-87075" y="-142297" z="-9176" heading="46886"/>
|
||||
<npc id="18330" x="-86923" y="-141903" z="-9176" heading="8556"/>
|
||||
<npc id="18330" x="-86908" y="-142066" z="-9176" heading="33147"/>
|
||||
<npc id="18330" x="-86819" y="-141497" z="-9176" heading="34625"/>
|
||||
<npc id="18330" x="-86669" y="-141470" z="-9176" heading="43482"/>
|
||||
<npc id="18330" x="-86710" y="-141243" z="-9176" heading="57995"/>
|
||||
<npc id="18330" x="-86795" y="-141168" z="-9176" heading="45501"/>
|
||||
<npc id="18330" x="-86556" y="-141283" z="-9176" heading="62885"/>
|
||||
<npc id="18330" x="-86825" y="-140630" z="-9176" heading="60032"/>
|
||||
<npc id="18330" x="-87030" y="-140389" z="-9176" heading="48351"/>
|
||||
<npc id="18330" x="-87018" y="-140233" z="-9176" heading="58404"/>
|
||||
<npc id="18330" x="-87115" y="-140461" z="-9176" heading="40098"/>
|
||||
<npc id="18330" x="-87402" y="-140121" z="-9176" heading="1948"/>
|
||||
<npc id="18330" x="-87207" y="-140079" z="-9176" heading="2212"/>
|
||||
<npc id="18330" x="-87656" y="-140169" z="-9176" heading="52562"/>
|
||||
<npc id="18330" x="-87841" y="-139951" z="-9176" heading="5627"/>
|
||||
<npc id="18330" x="-88008" y="-140051" z="-9176" heading="8635"/>
|
||||
<npc id="18330" x="-88098" y="-140149" z="-9176" heading="57598"/>
|
||||
<npc id="18330" x="-88224" y="-140029" z="-9176" heading="6984"/>
|
||||
<npc id="18330" x="-88689" y="-140355" z="-9176" heading="6411"/>
|
||||
<npc id="18330" x="-88859" y="-140475" z="-9176" heading="19053"/>
|
||||
<npc id="18330" x="-88571" y="-140352" z="-9176" heading="265"/>
|
||||
<npc id="18330" x="-88814" y="-140647" z="-9176" heading="63312"/>
|
||||
<npc id="18330" x="-88911" y="-140626" z="-9176" heading="6711"/>
|
||||
<npc id="18330" x="-89039" y="-141498" z="-9176" heading="56937"/>
|
||||
<npc id="18330" x="-89205" y="-141444" z="-9176" heading="29487"/>
|
||||
<npc id="18330" x="-89199" y="-141325" z="-9176" heading="42737"/>
|
||||
<npc id="18330" x="-89110" y="-141199" z="-9176" heading="29210"/>
|
||||
<npc id="18330" x="-88914" y="-141931" z="-9176" heading="12620"/>
|
||||
<npc id="18330" x="-88827" y="-142052" z="-9176" heading="27582"/>
|
||||
<npc id="18330" x="-89004" y="-142155" z="-9176" heading="38265"/>
|
||||
<npc id="18330" x="-88665" y="-142492" z="-9176" heading="32599"/>
|
||||
<npc id="18330" x="-88609" y="-142397" z="-9176" heading="10828"/>
|
||||
<npc id="18330" x="-88698" y="-142122" z="-9176" heading="19648"/>
|
||||
<npc id="18331" x="-86964" y="-142079" z="-9176" heading="6621"/>
|
||||
<npc id="18331" x="-87260" y="-142297" z="-9176" heading="8297"/>
|
||||
<npc id="18331" x="-86704" y="-141451" z="-9176" heading="15742"/>
|
||||
<npc id="18331" x="-86707" y="-141175" z="-9176" heading="51507"/>
|
||||
<npc id="18331" x="-86836" y="-140566" z="-9176" heading="23410"/>
|
||||
<npc id="18331" x="-87025" y="-140438" z="-9176" heading="26558"/>
|
||||
<npc id="18331" x="-87743" y="-139994" z="-9176" heading="31747"/>
|
||||
<npc id="18331" x="-87919" y="-140013" z="-9176" heading="62621"/>
|
||||
<npc id="18331" x="-88533" y="-140389" z="-9168" heading="38980"/>
|
||||
<npc id="18331" x="-88668" y="-140355" z="-9176" heading="48943"/>
|
||||
<npc id="18331" x="-88847" y="-140437" z="-9176" heading="37248"/>
|
||||
<npc id="18331" x="-89094" y="-140991" z="-9176" heading="51142"/>
|
||||
<npc id="18331" x="-89214" y="-141196" z="-9176" heading="43628"/>
|
||||
<npc id="18331" x="-89167" y="-141458" z="-9176" heading="51003"/>
|
||||
<npc id="18331" x="-88975" y="-142053" z="-9176" heading="58755"/>
|
||||
<npc id="18331" x="-88928" y="-142081" z="-9176" heading="59768"/>
|
||||
<npc id="18331" x="-88648" y="-142284" z="-9176" heading="60097"/>
|
||||
</group>
|
||||
<group name="room2_part1" spawnByDefault="false">
|
||||
<npc id="18339" x="-87882" y="-146943" z="-9188" heading="9083"/>
|
||||
<npc id="18339" x="-87914" y="-146981" z="-9188" heading="51455"/>
|
||||
<npc id="18339" x="-87925" y="-146932" z="-9188" heading="15755"/>
|
||||
<npc id="18339" x="-87971" y="-146885" z="-9188" heading="3538"/>
|
||||
</group>
|
||||
<group name="room2_part2" spawnByDefault="false">
|
||||
<npc id="18334" x="-87016" y="-147940" z="-9172" heading="23515"/>
|
||||
<npc id="18334" x="-86769" y="-147555" z="-9172" heading="31470"/>
|
||||
<npc id="18334" x="-86723" y="-147121" z="-9172" heading="33419"/>
|
||||
<npc id="18334" x="-86754" y="-146706" z="-9168" heading="32189"/>
|
||||
<npc id="18334" x="-86910" y="-146366" z="-9172" heading="40265"/>
|
||||
<npc id="18334" x="-89015" y="-146462" z="-9172" heading="59668"/>
|
||||
<npc id="18334" x="-88879" y="-146240" z="-9172" heading="62109"/>
|
||||
<npc id="18334" x="-89089" y="-147299" z="-9172" heading="50108"/>
|
||||
<npc id="18334" x="-89128" y="-146746" z="-9172" heading="62663"/>
|
||||
<npc id="18334" x="-88959" y="-147727" z="-9172" heading="3222"/>
|
||||
<npc id="18335" x="-88899" y="-146145" z="-9172" heading="60699"/>
|
||||
<npc id="18335" x="-88822" y="-147929" z="-9172" heading="5129"/>
|
||||
<npc id="18335" x="-89008" y="-147561" z="-9172" heading="1691"/>
|
||||
<npc id="18335" x="-89044" y="-146878" z="-9172" heading="64122"/>
|
||||
<npc id="18335" x="-89005" y="-146439" z="-9172" heading="57813"/>
|
||||
<npc id="18335" x="-89206" y="-147285" z="-9172" heading="61667"/>
|
||||
<npc id="18335" x="-86958" y="-147939" z="-9172" heading="22983"/>
|
||||
<npc id="18335" x="-86739" y="-147224" z="-9172" heading="31415"/>
|
||||
<npc id="18335" x="-86770" y="-146513" z="-9172" heading="29048"/>
|
||||
<npc id="18335" x="-86653" y="-146900" z="-9172" heading="22558"/>
|
||||
<npc id="18335" x="-87029" y="-146250" z="-9172" heading="53805"/>
|
||||
<npc id="18335" x="-86822" y="-147687" z="-9172" heading="25845"/>
|
||||
<npc id="18337" x="-89000" y="-146471" z="-9172" heading="64277"/>
|
||||
<npc id="18337" x="-89005" y="-146678" z="-9172" heading="61677"/>
|
||||
<npc id="18337" x="-89028" y="-146997" z="-9172" heading="64285"/>
|
||||
<npc id="18337" x="-89176" y="-147119" z="-9172" heading="4741"/>
|
||||
<npc id="18337" x="-88994" y="-147462" z="-9172" heading="64668"/>
|
||||
<npc id="18337" x="-89152" y="-147341" z="-9172" heading="65001"/>
|
||||
<npc id="18337" x="-89043" y="-147812" z="-9172" heading="3894"/>
|
||||
<npc id="18337" x="-88811" y="-148033" z="-9172" heading="8381"/>
|
||||
<npc id="18337" x="-88648" y="-148132" z="-9172" heading="12021"/>
|
||||
<npc id="18337" x="-87142" y="-146176" z="-9172" heading="40799"/>
|
||||
<npc id="18337" x="-86899" y="-146535" z="-9172" heading="36449"/>
|
||||
<npc id="18337" x="-86776" y="-146606" z="-9172" heading="37651"/>
|
||||
<npc id="18337" x="-86812" y="-146767" z="-9172" heading="38225"/>
|
||||
<npc id="18337" x="-86825" y="-146966" z="-9172" heading="28332"/>
|
||||
<npc id="18337" x="-86885" y="-147227" z="-9172" heading="33807"/>
|
||||
<npc id="18337" x="-86751" y="-147105" z="-9172" heading="31522"/>
|
||||
<npc id="18337" x="-86873" y="-147564" z="-9172" heading="26634"/>
|
||||
<npc id="18337" x="-87025" y="-147743" z="-9172" heading="27046"/>
|
||||
<npc id="18337" x="-86917" y="-147672" z="-9172" heading="24575"/>
|
||||
<npc id="18338" x="-86885" y="-146225" z="-9168" heading="40959"/>
|
||||
<npc id="18338" x="-86885" y="-146225" z="-9168" heading="51582"/>
|
||||
<npc id="18338" x="-86942" y="-147322" z="-9172" heading="44537"/>
|
||||
<npc id="18338" x="-86766" y="-147622" z="-9172" heading="54685"/>
|
||||
<npc id="18338" x="-86996" y="-147855" z="-9172" heading="41027"/>
|
||||
<npc id="18338" x="-89035" y="-147546" z="-9172" heading="57311"/>
|
||||
<npc id="18338" x="-89228" y="-146891" z="-9172" heading="50874"/>
|
||||
<npc id="18338" x="-89028" y="-146502" z="-9168" heading="45888"/>
|
||||
<npc id="18338" x="-88846" y="-146119" z="-9172" heading="514"/>
|
||||
</group>
|
||||
</spawnlist>
|
||||
</instance>
|
@ -0,0 +1,911 @@
|
||||
/*
|
||||
* 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.LastImperialTomb;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.l2jmobius.commons.util.CommonUtil;
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
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.skills.Skill;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.Earthquake;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillCanceld;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.NpcInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SpecialCamera;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* Last Imperial Tomb AI
|
||||
* @author Mobius (reworked from L2J version)
|
||||
* @author RobikBobik (Updated to Classic: The Kamael)
|
||||
* @TODO: When halisha uses second transform, Halisha Breath need to stop attack.
|
||||
*/
|
||||
public class LastImperialTomb extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int GUIDE = 32011;
|
||||
private static final int CUBE = 29061;
|
||||
private static final int HALL_ALARM = 18328;
|
||||
private static final int HALL_KEEPER_SUICIDAL_SOLDIER = 18333;
|
||||
private static final int DUMMY = 29052;
|
||||
private static final int DUMMY2 = 29053;
|
||||
private static final int[] PORTRAITS =
|
||||
{
|
||||
29048,
|
||||
29049
|
||||
};
|
||||
private static final int[] DEMONS =
|
||||
{
|
||||
29050,
|
||||
29051
|
||||
};
|
||||
private static final int FRINTEZZA = 29045;
|
||||
private static final int SCARLET1 = 29046;
|
||||
private static final int SCARLET2 = 29047;
|
||||
private static final int[] ON_KILL_MONSTERS =
|
||||
{
|
||||
HALL_ALARM,
|
||||
HALL_KEEPER_SUICIDAL_SOLDIER,
|
||||
18329,
|
||||
18330,
|
||||
18331,
|
||||
18334,
|
||||
18335,
|
||||
18336,
|
||||
18337,
|
||||
18338,
|
||||
18339
|
||||
|
||||
};
|
||||
// Items
|
||||
private static final int FIRST_SCARLET_WEAPON = 8204;
|
||||
private static final int SECOND_SCARLET_WEAPON = 7903;
|
||||
// Doors
|
||||
private static final int[] FIRST_ROOM_DOORS =
|
||||
{
|
||||
17130051,
|
||||
17130052,
|
||||
17130053,
|
||||
17130054,
|
||||
17130055,
|
||||
17130056,
|
||||
17130057,
|
||||
17130058
|
||||
};
|
||||
private static final int[] SECOND_ROOM_DOORS =
|
||||
{
|
||||
17130061,
|
||||
17130062,
|
||||
17130063,
|
||||
17130064,
|
||||
17130065,
|
||||
17130066,
|
||||
17130067,
|
||||
17130068,
|
||||
17130069,
|
||||
17130070
|
||||
};
|
||||
private static final int[] FIRST_ROUTE_DOORS =
|
||||
{
|
||||
17130042,
|
||||
17130043
|
||||
};
|
||||
private static final int[] SECOND_ROUTE_DOORS =
|
||||
{
|
||||
17130045,
|
||||
17130046
|
||||
};
|
||||
// Skills
|
||||
private static final int DEWDROP_OF_DESTRUCTION_SKILL_ID = 2276;
|
||||
private static final SkillHolder INTRO_SKILL = new SkillHolder(5004, 1);
|
||||
private static final SkillHolder FIRST_MORPH_SKILL = new SkillHolder(5017, 1);
|
||||
private static final Map<Integer, NpcStringId> SKILL_MSG = new HashMap<>();
|
||||
static
|
||||
{
|
||||
SKILL_MSG.put(1, NpcStringId.REQUIEM_OF_HATRED);
|
||||
SKILL_MSG.put(2, NpcStringId.RONDO_OF_SOLITUDE);
|
||||
SKILL_MSG.put(3, NpcStringId.FRENETIC_TOCCATA);
|
||||
SKILL_MSG.put(4, NpcStringId.FUGUE_OF_JUBILATION);
|
||||
SKILL_MSG.put(5, NpcStringId.HYPNOTIC_MAZURKA);
|
||||
}
|
||||
// Spawns
|
||||
// @formatter:off
|
||||
static final int[][] PORTRAIT_SPAWNS =
|
||||
{
|
||||
{29048, -89381, -153981, -9168, 3368, -89378, -153968, -9168, 3368},
|
||||
{29048, -86234, -152467, -9168, 37656, -86261, -152492, -9168, 37656},
|
||||
{29049, -89342, -152479, -9168, -5152, -89311, -152491, -9168, -5152},
|
||||
{29049, -86189, -153968, -9168, 29456, -86217, -153956, -9168, 29456},
|
||||
};
|
||||
// @formatter:on
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 205;
|
||||
private static final int FRINTEZZA_WAIT_TIME = 10; // minutes
|
||||
private static final int RANDOM_SONG_INTERVAL = 90; // seconds
|
||||
private static final int TIME_BETWEEN_DEMON_SPAWNS = 20; // seconds
|
||||
private static final int MAX_DEMONS = 24;
|
||||
|
||||
public LastImperialTomb()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addTalkId(GUIDE, CUBE);
|
||||
addAttackId(SCARLET1);
|
||||
addKillId(ON_KILL_MONSTERS);
|
||||
addKillId(HALL_ALARM, SCARLET2);
|
||||
addKillId(PORTRAITS);
|
||||
addKillId(DEMONS);
|
||||
addSpawnId(HALL_ALARM, DUMMY, DUMMY2);
|
||||
addSpellFinishedId(HALL_KEEPER_SUICIDAL_SOLDIER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "FRINTEZZA_INTRO_START":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
startQuestTimer("FRINTEZZA_INTRO_1", 17000, null, player, false);
|
||||
startQuestTimer("FRINTEZZA_INTRO_2", 20000, null, player, false);
|
||||
broadCastPacket(world, new Earthquake(-87784, -155083, -9087, 45, 27));
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_1":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
for (int doorId : FIRST_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, false);
|
||||
}
|
||||
for (int doorId : FIRST_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, false);
|
||||
}
|
||||
for (int doorId : SECOND_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, false);
|
||||
}
|
||||
for (int doorId : SECOND_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, false);
|
||||
}
|
||||
addSpawn(CUBE, -87904, -141296, -9168, 0, false, 0, false, world.getId());
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_2":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
|
||||
final Npc frintezzaDummy = addSpawn(DUMMY, -87784, -155083, -9087, 16048, false, 0, false, world.getId());
|
||||
world.setParameter("frintezzaDummy", frintezzaDummy);
|
||||
|
||||
final Npc overheadDummy = addSpawn(DUMMY, -87784, -153298, -9175, 16384, false, 0, false, world.getId());
|
||||
overheadDummy.setCollisionHeight(600);
|
||||
broadCastPacket(world, new NpcInfo(overheadDummy));
|
||||
world.setParameter("overheadDummy", overheadDummy);
|
||||
|
||||
final Npc portraitDummy1 = addSpawn(DUMMY, -89566, -153168, -9165, 16048, false, 0, false, world.getId());
|
||||
world.setParameter("portraitDummy1", portraitDummy1);
|
||||
|
||||
final Npc portraitDummy3 = addSpawn(DUMMY, -86004, -153168, -9165, 16048, false, 0, false, world.getId());
|
||||
world.setParameter("portraitDummy3", portraitDummy3);
|
||||
|
||||
final Npc scarletDummy = addSpawn(DUMMY2, -87784, -153298, -9175, 16384, false, 0, false, world.getId());
|
||||
world.setParameter("scarletDummy", scarletDummy);
|
||||
|
||||
disablePlayers(world);
|
||||
|
||||
// broadCastPacket(world, new SpecialCamera(overheadDummy, 0, 75, -89, 0, 100, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(overheadDummy, 0, 75, -89, 0, 100, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(overheadDummy, 300, 90, -10, 6500, 7000, 0, 0, 1, 0, 0));
|
||||
|
||||
final Npc frintezza = addSpawn(FRINTEZZA, -87780, -155086, -9080, 16384, false, 0, false, world.getId());
|
||||
frintezza.setIsImmobilized(true);
|
||||
frintezza.setIsInvul(true);
|
||||
frintezza.disableAllSkills();
|
||||
world.setParameter("frintezza", frintezza);
|
||||
|
||||
final List<Npc> demons = new ArrayList<>();
|
||||
for (int[] element : PORTRAIT_SPAWNS)
|
||||
{
|
||||
final MonsterInstance demon = (MonsterInstance) addSpawn(element[0] + 2, element[5], element[6], element[7], element[8], false, 0, false, world.getId());
|
||||
demon.setIsImmobilized(true);
|
||||
demon.disableAllSkills();
|
||||
demons.add(demon);
|
||||
}
|
||||
world.setParameter("demons", demons);
|
||||
|
||||
startQuestTimer("FRINTEZZA_INTRO_3", 6500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_3":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezzaDummy = world.getParameters().getObject("frintezzaDummy", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezzaDummy, 1800, 90, 8, 6500, 7000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_4", 900, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_4":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezzaDummy = world.getParameters().getObject("frintezzaDummy", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezzaDummy, 140, 90, 10, 2500, 4500, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_5", 4000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_5":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 40, 75, -10, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 40, 75, -10, 0, 12000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_6", 1350, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_6":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(frintezza.getObjectId(), 2));
|
||||
final Npc frintezzaDummy = world.getParameters().getObject("frintezzaDummy", Npc.class);
|
||||
frintezzaDummy.deleteMe();
|
||||
startQuestTimer("FRINTEZZA_INTRO_7", 8000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_7":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(demons.get(1).getObjectId(), 1));
|
||||
broadCastPacket(world, new SocialAction(demons.get(2).getObjectId(), 1));
|
||||
startQuestTimer("FRINTEZZA_INTRO_8", 400, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_8":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
final Npc portraitDummy1 = world.getParameters().getObject("portraitDummy1", Npc.class);
|
||||
final Npc portraitDummy3 = world.getParameters().getObject("portraitDummy3", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(demons.get(0).getObjectId(), 1));
|
||||
broadCastPacket(world, new SocialAction(demons.get(3).getObjectId(), 1));
|
||||
sendPacketX(world, new SpecialCamera(portraitDummy1, 1000, 118, 0, 0, 1000, 0, 0, 1, 0, 0), new SpecialCamera(portraitDummy3, 1000, 62, 0, 0, 1000, 0, 0, 1, 0, 0), -87784);
|
||||
sendPacketX(world, new SpecialCamera(portraitDummy1, 1000, 118, 0, 0, 10000, 0, 0, 1, 0, 0), new SpecialCamera(portraitDummy3, 1000, 62, 0, 0, 10000, 0, 0, 1, 0, 0), -87784);
|
||||
startQuestTimer("FRINTEZZA_INTRO_9", 2000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_9":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
final Npc portraitDummy1 = world.getParameters().getObject("portraitDummy1", Npc.class);
|
||||
final Npc portraitDummy3 = world.getParameters().getObject("portraitDummy3", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 240, 90, 0, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 240, 90, 25, 5500, 10000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SocialAction(frintezza.getObjectId(), 3));
|
||||
portraitDummy1.deleteMe();
|
||||
portraitDummy3.deleteMe();
|
||||
startQuestTimer("FRINTEZZA_INTRO_10", 4500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_10":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 100, 195, 35, 0, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_11", 700, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_11":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 100, 195, 35, 0, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_12", 1300, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_12":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new ExShowScreenMessage(NpcStringId.MOURNFUL_CHORALE_PRELUDE, 2, 5000));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 120, 180, 45, 1500, 10000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, 5006, 1, 34000, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_13", 1500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_13":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 520, 135, 45, 8000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_14", 7500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_14":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 1500, 110, 25, 10000, 13000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_15", 9500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_15":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc overheadDummy = world.getParameters().getObject("overheadDummy", Npc.class);
|
||||
final Npc scarletDummy = world.getParameters().getObject("scarletDummy", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(overheadDummy, 930, 160, -20, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(overheadDummy, 600, 180, -25, 0, 10000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new MagicSkillUse(scarletDummy, overheadDummy, 5004, 1, 5800, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_16", 5000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_16":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc scarletDummy = world.getParameters().getObject("scarletDummy", Npc.class);
|
||||
final Npc activeScarlet = addSpawn(SCARLET1, -87789, -153295, -9176, 16384, false, 0, false, world.getId());
|
||||
world.setParameter("activeScarlet", activeScarlet);
|
||||
activeScarlet.setRHandId(FIRST_SCARLET_WEAPON);
|
||||
activeScarlet.setIsInvul(true);
|
||||
activeScarlet.setIsImmobilized(true);
|
||||
activeScarlet.disableAllSkills();
|
||||
broadCastPacket(world, new SocialAction(activeScarlet.getObjectId(), 3));
|
||||
broadCastPacket(world, new SpecialCamera(scarletDummy, 800, 180, 10, 1000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_17", 2100, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_17":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 300, 60, 8, 0, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_18", 2000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_18":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 500, 90, 10, 3000, 5000, 0, 0, 1, 0, 0));
|
||||
world.setParameter("isPlayingSong", false);
|
||||
playRandomSong(world);
|
||||
startQuestTimer("FRINTEZZA_INTRO_19", 3000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_19":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Map<Npc, Integer> portraits = new HashMap<>();
|
||||
for (int i = 0; i < PORTRAIT_SPAWNS.length; i++)
|
||||
{
|
||||
final Npc portrait = addSpawn(PORTRAIT_SPAWNS[i][0], PORTRAIT_SPAWNS[i][1], PORTRAIT_SPAWNS[i][2], PORTRAIT_SPAWNS[i][3], PORTRAIT_SPAWNS[i][4], false, 0, false, world.getId());
|
||||
portraits.put(portrait, i);
|
||||
}
|
||||
world.setParameter("portraits", portraits);
|
||||
final Npc overheadDummy = world.getParameters().getObject("overheadDummy", Npc.class);
|
||||
final Npc scarletDummy = world.getParameters().getObject("scarletDummy", Npc.class);
|
||||
overheadDummy.deleteMe();
|
||||
scarletDummy.deleteMe();
|
||||
startQuestTimer("FRINTEZZA_INTRO_20", 2000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_20":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
for (Npc demon : demons)
|
||||
{
|
||||
demon.setIsImmobilized(false);
|
||||
demon.enableAllSkills();
|
||||
}
|
||||
activeScarlet.setIsInvul(false);
|
||||
activeScarlet.setIsImmobilized(false);
|
||||
activeScarlet.enableAllSkills();
|
||||
activeScarlet.setRunning();
|
||||
activeScarlet.doCast(INTRO_SKILL.getSkill());
|
||||
frintezza.enableAllSkills();
|
||||
frintezza.disableCoreAI(true);
|
||||
frintezza.setIsInvul(true);
|
||||
enablePlayers(world);
|
||||
startQuestTimer("PLAY_RANDOM_SONG", RANDOM_SONG_INTERVAL * 1000, frintezza, null, false);
|
||||
startQuestTimer("SPAWN_DEMONS", TIME_BETWEEN_DEMON_SPAWNS * 1000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_DEMONS":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Map<Npc, Integer> portraits = world.getParameters().getMap("portraits", Npc.class, Integer.class);
|
||||
if (!portraits.isEmpty())
|
||||
{
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
for (int i : portraits.values())
|
||||
{
|
||||
if (demons.size() > MAX_DEMONS)
|
||||
{
|
||||
break;
|
||||
}
|
||||
final Npc demon = addSpawn(PORTRAIT_SPAWNS[i][0] + 2, PORTRAIT_SPAWNS[i][5], PORTRAIT_SPAWNS[i][6], PORTRAIT_SPAWNS[i][7], PORTRAIT_SPAWNS[i][8], false, 0, false, world.getId());
|
||||
demons.add(demon);
|
||||
}
|
||||
world.setParameter("demons", demons);
|
||||
startQuestTimer("SPAWN_DEMONS", TIME_BETWEEN_DEMON_SPAWNS * 1000, null, player, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "PLAY_RANDOM_SONG":
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
playRandomSong(world);
|
||||
startQuestTimer("PLAY_RANDOM_SONG", RANDOM_SONG_INTERVAL * 1000, null, player, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SCARLET_FIRST_MORPH":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
npc.doCast(FIRST_MORPH_SKILL.getSkill());
|
||||
playRandomSong(world);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
disablePlayers(world);
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
activeScarlet.abortAttack();
|
||||
activeScarlet.abortCast();
|
||||
activeScarlet.setIsInvul(true);
|
||||
activeScarlet.setIsImmobilized(true);
|
||||
activeScarlet.disableAllSkills();
|
||||
playRandomSong(world);
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_1", 2000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_1":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(frintezza.getObjectId(), 4));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 250, 120, 15, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 250, 120, 15, 0, 10000, 0, 0, 1, 0, 0));
|
||||
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_2", 7000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_2":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, 5006, 1, 34000, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 500, 70, 15, 3000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_3", 3000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_3":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 2500, 90, 12, 6000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_4", 3000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_4":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
final Location scarletLocation = activeScarlet.getLocation();
|
||||
int newHeading = 0;
|
||||
if (scarletLocation.getHeading() < 32768)
|
||||
{
|
||||
newHeading = Math.abs(180 - (int) (scarletLocation.getHeading() / 182.044444444));
|
||||
}
|
||||
else
|
||||
{
|
||||
newHeading = Math.abs(540 - (int) (scarletLocation.getHeading() / 182.044444444));
|
||||
}
|
||||
world.setParameter("scarletLocation", scarletLocation);
|
||||
world.setParameter("newHeading", newHeading);
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 250, newHeading, 12, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 250, newHeading, 12, 0, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_5", 500, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_5":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
final int newHeading = world.getParameters().getInt("newHeading");
|
||||
activeScarlet.doDie(activeScarlet);
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 450, newHeading, 14, 8000, 8000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_6", 6250, npc, null, false);
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_7", 7200, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_6":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
activeScarlet.deleteMe();
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_7":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final int newHeading = world.getParameters().getInt("newHeading");
|
||||
final Location scarletLocation = world.getParameters().getLocation("scarletLocation");
|
||||
final Npc activeScarlet = addSpawn(SCARLET2, scarletLocation, false, 0, false, world.getId());
|
||||
world.setParameter("activeScarlet", activeScarlet);
|
||||
activeScarlet.setRHandId(SECOND_SCARLET_WEAPON);
|
||||
activeScarlet.setIsInvul(true);
|
||||
activeScarlet.setIsImmobilized(true);
|
||||
activeScarlet.disableAllSkills();
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 450, newHeading, 12, 500, 14000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_8", 8100, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_8":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(activeScarlet.getObjectId(), 2));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_9", 9000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_9":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
activeScarlet.setIsInvul(false);
|
||||
activeScarlet.setIsImmobilized(false);
|
||||
activeScarlet.enableAllSkills();
|
||||
enablePlayers(world);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_1":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
final int newHeading = world.getParameters().getInt("newHeading");
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 300, newHeading - 180, 5, 0, 7000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 200, newHeading, 85, 4000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FINISH_CAMERA_2", 7400, npc, null, false);
|
||||
startQuestTimer("FINISH_CAMERA_3", 7500, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_2":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
frintezza.doDie(frintezza);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_3":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 100, 120, 5, 0, 7000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 100, 90, 5, 5000, 15000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FINISH_CAMERA_4", 7000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_4":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 900, 90, 25, 7000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FINISH_CAMERA_5", 9000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_5":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
for (int doorId : FIRST_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
for (int doorId : FIRST_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
for (int doorId : SECOND_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
for (int doorId : SECOND_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
enablePlayers(world);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
if (npc.getId() == GUIDE)
|
||||
{
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
}
|
||||
else // Teleport Cube
|
||||
{
|
||||
final Instance world = getPlayerInstance(player);
|
||||
if (world != null)
|
||||
{
|
||||
teleportPlayerOut(player, world);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
npc.setRandomWalking(false);
|
||||
npc.setIsImmobilized(true);
|
||||
if (npc.getId() == HALL_ALARM)
|
||||
{
|
||||
npc.disableCoreAI(true);
|
||||
}
|
||||
else // dummy
|
||||
{
|
||||
npc.setIsInvul(true);
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
|
||||
{
|
||||
if (npc.getId() == SCARLET1)
|
||||
{
|
||||
if ((npc.getScriptValue() == 0) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.80)))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
startQuestTimer("SCARLET_FIRST_MORPH", 1000, npc, null, false);
|
||||
}
|
||||
if ((npc.getScriptValue() == 1) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.20)))
|
||||
{
|
||||
npc.setScriptValue(2);
|
||||
startQuestTimer("SCARLET_SECOND_MORPH", 1000, npc, null, false);
|
||||
}
|
||||
}
|
||||
if (skill != null)
|
||||
{
|
||||
// When Dewdrop of Destruction is used on Portraits they suicide.
|
||||
if (CommonUtil.contains(PORTRAITS, npc.getId()) && (skill.getId() == DEWDROP_OF_DESTRUCTION_SKILL_ID))
|
||||
{
|
||||
npc.doDie(attacker);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
|
||||
{
|
||||
if (skill.isSuicideAttack())
|
||||
{
|
||||
return onKill(npc, null, false);
|
||||
}
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
final Instance world = killer.getInstanceWorld();
|
||||
if ((npc.getId() == HALL_ALARM) && (world.getStatus() == 0))
|
||||
{
|
||||
world.setStatus(1);
|
||||
world.spawnGroup("room1");
|
||||
final List<MonsterInstance> monsters = world.getAliveNpcs(MonsterInstance.class);
|
||||
world.setParameter("monstersCount", monsters.size() - 1);
|
||||
for (int doorId : FIRST_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
for (Npc monster : monsters)
|
||||
{
|
||||
monster.setRunning();
|
||||
// monster.moveToLocation(-87959, -141247, -9168, 0);
|
||||
monster.reduceCurrentHp(1, killer, null); // TODO: Find better way for attack
|
||||
}
|
||||
}
|
||||
else if (npc.getId() == SCARLET2)
|
||||
{
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new MagicSkillCanceld(frintezza.getObjectId()));
|
||||
startQuestTimer("FINISH_CAMERA_1", 500, npc, null, false);
|
||||
}
|
||||
else if (CommonUtil.contains(DEMONS, npc.getId()))
|
||||
{
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
demons.remove(npc);
|
||||
}
|
||||
else if (CommonUtil.contains(PORTRAITS, npc.getId()))
|
||||
{
|
||||
final Map<Npc, Integer> portraits = world.getParameters().getMap("portraits", Npc.class, Integer.class);
|
||||
portraits.remove(npc);
|
||||
}
|
||||
else
|
||||
{
|
||||
final int killCount = world.getParameters().getInt("monstersCount");
|
||||
world.setParameter("monstersCount", killCount - 1);
|
||||
if (killCount <= 0)
|
||||
{
|
||||
switch (world.getStatus())
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
world.setStatus(2);
|
||||
world.spawnGroup("room2_part1");
|
||||
final List<MonsterInstance> monsters = world.getAliveNpcs(MonsterInstance.class);
|
||||
world.setParameter("monstersCount", monsters.size() - 1);
|
||||
for (int doorId : FIRST_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
world.setStatus(3);
|
||||
world.spawnGroup("room2_part2");
|
||||
final List<MonsterInstance> monsters = world.getAliveNpcs(MonsterInstance.class);
|
||||
world.setParameter("monstersCount", monsters.size() - 1);
|
||||
for (int doorId : SECOND_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
|
||||
for (Npc monster : monsters)
|
||||
{
|
||||
monster.setRunning();
|
||||
// monster.moveToLocation(-87935, -147062, -9184, 0);
|
||||
monster.reduceCurrentHp(1, killer, null); // TODO: Find better way for attack
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
world.setStatus(4);
|
||||
for (int doorId : SECOND_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
startQuestTimer("FRINTEZZA_INTRO_START", FRINTEZZA_WAIT_TIME * 60 * 1000, null, killer, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
private void playRandomSong(Instance world)
|
||||
{
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
final boolean isPlayingSong = world.getParameters().getBoolean("isPlayingSong");
|
||||
if (isPlayingSong)
|
||||
{
|
||||
return;
|
||||
}
|
||||
world.setParameter("isPlayingSong", true);
|
||||
final int random = getRandom(1, 5);
|
||||
final SkillHolder skill = new SkillHolder(5007, random);
|
||||
final SkillHolder skillEffect = new SkillHolder(5008, random);
|
||||
broadCastPacket(world, new ExShowScreenMessage(2, -1, 2, 0, 0, 0, 0, true, 4000, false, null, SKILL_MSG.get(random), null));
|
||||
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, skill.getSkillId(), skill.getSkillLevel(), skill.getSkill().getHitTime(), 0));
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
frintezza.setTarget(player);
|
||||
frintezza.doCast(skillEffect.getSkill());
|
||||
}
|
||||
}
|
||||
world.setParameter("isPlayingSong", false);
|
||||
}
|
||||
|
||||
private void disablePlayers(Instance world)
|
||||
{
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
player.abortAttack();
|
||||
player.abortCast();
|
||||
player.disableAllSkills();
|
||||
player.setTarget(null);
|
||||
player.stopMove(null);
|
||||
player.setIsImmobilized(true);
|
||||
player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void enablePlayers(Instance world)
|
||||
{
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
player.enableAllSkills();
|
||||
player.setIsImmobilized(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void broadCastPacket(Instance world, IClientOutgoingPacket packet)
|
||||
{
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
player.sendPacket(packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendPacketX(Instance world, IClientOutgoingPacket packet1, IClientOutgoingPacket packet2, int x)
|
||||
{
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
if (player.getX() < x)
|
||||
{
|
||||
player.sendPacket(packet1);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(packet2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new LastImperialTomb();
|
||||
}
|
||||
}
|
@ -0,0 +1,277 @@
|
||||
/*
|
||||
* 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.LastImperialTomb;
|
||||
|
||||
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
|
||||
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
|
||||
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
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.DecoyInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* @author Micr0, Zerox, Mobius
|
||||
*/
|
||||
public class ScarletVanHalisha extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int HALISHA2 = 29046;
|
||||
private static final int HALISHA3 = 29047;
|
||||
// Skills
|
||||
private static final int FRINTEZZA_DAEMON_ATTACK = 5014;
|
||||
private static final int FRINTEZZA_DAEMON_CHARGE = 5015;
|
||||
private static final int YOKE_OF_SCARLET = 5016;
|
||||
private static final int FRINTEZZA_DAEMON_MORPH = 5018;
|
||||
private static final int FRINTEZZA_DAEMON_FIELD = 5019;
|
||||
// Misc
|
||||
private Creature _target;
|
||||
private Skill _skill;
|
||||
private long _lastRangedSkillTime;
|
||||
private final int _rangedSkillMinCoolTime = 60000; // 1 minute
|
||||
|
||||
public ScarletVanHalisha()
|
||||
{
|
||||
addAttackId(HALISHA2, HALISHA3);
|
||||
addKillId(HALISHA2, HALISHA3);
|
||||
addSpellFinishedId(HALISHA2, HALISHA3);
|
||||
registerMobs(HALISHA2, HALISHA3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "ATTACK":
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
getSkillAI(npc);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "RANDOM_TARGET":
|
||||
{
|
||||
_target = getRandomTarget(npc, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
|
||||
{
|
||||
getSkillAI(npc);
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
startQuestTimer("RANDOM_TARGET", 5000, npc, null, true);
|
||||
startQuestTimer("ATTACK", 500, npc, null, true);
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
cancelQuestTimers("ATTACK");
|
||||
cancelQuestTimers("RANDOM_TARGET");
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
private Skill getRndSkills(Npc npc)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case HALISHA2:
|
||||
{
|
||||
if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 2);
|
||||
}
|
||||
else if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 5);
|
||||
}
|
||||
else if (getRandom(100) < 2)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(YOKE_OF_SCARLET, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_ATTACK, 2);
|
||||
}
|
||||
}
|
||||
case HALISHA3:
|
||||
{
|
||||
if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 3);
|
||||
}
|
||||
else if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 6);
|
||||
}
|
||||
else if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 2);
|
||||
}
|
||||
else if (((_lastRangedSkillTime + _rangedSkillMinCoolTime) < System.currentTimeMillis()) && (getRandom(100) < 10))
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_FIELD, 1);
|
||||
}
|
||||
else if (((_lastRangedSkillTime + _rangedSkillMinCoolTime) < System.currentTimeMillis()) && (getRandom(100) < 10))
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_MORPH, 1);
|
||||
}
|
||||
else if (getRandom(100) < 2)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(YOKE_OF_SCARLET, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_ATTACK, 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_ATTACK, 1);
|
||||
}
|
||||
|
||||
private synchronized void getSkillAI(Npc npc)
|
||||
{
|
||||
if (npc.isInvul() || npc.isCastingNow())
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ((getRandom(100) < 30) || (_target == null) || _target.isDead())
|
||||
{
|
||||
_skill = getRndSkills(npc);
|
||||
_target = getRandomTarget(npc, _skill);
|
||||
}
|
||||
final Creature target = _target;
|
||||
Skill skill = _skill;
|
||||
if (skill == null)
|
||||
{
|
||||
skill = getRndSkills(npc);
|
||||
}
|
||||
|
||||
if (npc.isPhysicalMuted())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((target == null) || target.isDead())
|
||||
{
|
||||
// npc.setIsCastingNow(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Util.checkIfInRange(skill.getCastRange(), npc, target, true))
|
||||
{
|
||||
npc.getAI().setIntention(AI_INTENTION_IDLE);
|
||||
npc.setTarget(target);
|
||||
// npc.setIsCastingNow(true);
|
||||
_target = null;
|
||||
npc.doCast(skill);
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.getAI().setIntention(AI_INTENTION_FOLLOW, target, null);
|
||||
npc.getAI().setIntention(AI_INTENTION_ATTACK, target, null);
|
||||
// npc.setIsCastingNow(false);
|
||||
}
|
||||
}
|
||||
|
||||
private Creature getRandomTarget(Npc npc, Skill skill)
|
||||
{
|
||||
final ArrayList<Creature> result = new ArrayList<>();
|
||||
{
|
||||
for (WorldObject obj : npc.getInstanceWorld().getPlayers())
|
||||
{
|
||||
if (obj.isPlayable() || (obj instanceof DecoyInstance))
|
||||
{
|
||||
if (obj.isPlayer() && obj.getActingPlayer().isInvisible())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (((((Creature) obj).getZ() < (npc.getZ() - 100)) && (((Creature) obj).getZ() > (npc.getZ() + 100))) || !GeoEngine.getInstance().canSeeTarget(obj, npc))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (obj.isPlayable() || (obj instanceof DecoyInstance))
|
||||
{
|
||||
int skillRange = 150;
|
||||
if (skill != null)
|
||||
{
|
||||
switch (skill.getId())
|
||||
{
|
||||
case FRINTEZZA_DAEMON_ATTACK:
|
||||
{
|
||||
skillRange = 150;
|
||||
break;
|
||||
}
|
||||
case FRINTEZZA_DAEMON_CHARGE:
|
||||
{
|
||||
skillRange = 400;
|
||||
break;
|
||||
}
|
||||
case YOKE_OF_SCARLET:
|
||||
{
|
||||
skillRange = 200;
|
||||
break;
|
||||
}
|
||||
case FRINTEZZA_DAEMON_MORPH:
|
||||
case FRINTEZZA_DAEMON_FIELD:
|
||||
{
|
||||
_lastRangedSkillTime = System.currentTimeMillis();
|
||||
skillRange = 550;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Util.checkIfInRange(skillRange, npc, obj, true) && !((Creature) obj).isDead())
|
||||
{
|
||||
result.add((Creature) obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return getRandomEntry(result);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ScarletVanHalisha();
|
||||
}
|
||||
}
|
@ -547,6 +547,7 @@
|
||||
<npc id="21438" x="180495" y="-75344" z="-2728" heading="8728" respawnTime="30sec" />
|
||||
<npc id="21438" x="180956" y="-75418" z="-2728" heading="55660" respawnTime="30sec" />
|
||||
<npc id="21438" x="180552" y="-75371" z="-2728" heading="1395" respawnTime="30sec" />
|
||||
<npc id="32011" x="181376" y="-81008" z="-2728" heading="16500" respawnTime="60sec" /> <!-- Imperial Tomb Guide -->
|
||||
</group>
|
||||
</spawn>
|
||||
</list>
|
@ -33,14 +33,18 @@
|
||||
</stats>
|
||||
</item>
|
||||
<item id="8222" name="Monster Only (Follower of Frintezza Tran Calibur)" type="Weapon">
|
||||
<set name="icon" val="icon.weapon_monster_i00" />
|
||||
<set name="default_action" val="EQUIP" />
|
||||
<set name="weapon_type" val="SWORD" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="FINE_STEEL" />
|
||||
<set name="weight" val="1560" />
|
||||
<set name="soulshots" val="2" />
|
||||
<set name="spiritshots" val="2" />
|
||||
<set name="icon" val="icon.weapon_monster_i00"/>
|
||||
<set name="default_action" val="EQUIP"/>
|
||||
<set name="weapon_type" val="SWORD"/>
|
||||
<set name="bodypart" val="rhand"/>
|
||||
<set name="damage_range" val="0;0;40;120"/>
|
||||
<set name="immediate_effect" val="true"/>
|
||||
<set name="material" val="FINE_STEEL"/>
|
||||
<set name="weight" val="1560"/>
|
||||
<set name="soulshots" val="2"/>
|
||||
<set name="spiritshots" val="2"/>
|
||||
<set name="commissionItemType" val="ONE_HAND_SWORD"/>
|
||||
<set name="isAppearanceable" val="true"/>
|
||||
<stats>
|
||||
<stat type="rCrit">8</stat>
|
||||
<stat type="pAtkSpd">379</stat>
|
||||
|
@ -1,5 +1,759 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/npcs.xsd">
|
||||
<npc id="18328" level="85" type="Monster" name="Hall Alarm">
|
||||
<parameters>
|
||||
<param name="TDoorName1" value="grave_pathway_1" />
|
||||
<param name="TDoorName2" value="grave_pathway_2" />
|
||||
<param name="WallDoorName1" value="wall_door_a_center_1" />
|
||||
<param name="WallDoorName2" value="wall_door_a_center_2" />
|
||||
<param name="WallDoorName3" value="wall_door_a_center_3" />
|
||||
<param name="WallDoorName4" value="wall_door_a_center_4" />
|
||||
<param name="WallDoorName5" value="wall_door_a_center_5" />
|
||||
<param name="WallDoorName6" value="wall_door_a_center_6" />
|
||||
<param name="WallDoorName7" value="wall_door_a_center_7" />
|
||||
<param name="WallDoorName8" value="wall_door_a_center_8" />
|
||||
<param name="dmgzone" value="25_15_frintessaE_01" />
|
||||
</parameters>
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="100000" hpRegen="8.8" mp="1846" mpRegen="3.1" />
|
||||
<attack physical="1034.34087" magical="760.9193205984" random="10" critical="4" accuracy="11.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="378.92625" magical="277.281785" evasion="7" />
|
||||
<speed>
|
||||
<walk ground="50" />
|
||||
<run ground="1" />
|
||||
</speed>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4408" level="16" /> <!-- HP Increase (8x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11" /> <!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11" /> <!-- Average P. Def. -->
|
||||
<skill id="4413" level="16" /> <!-- Very Strong M. Def. -->
|
||||
<skill id="4414" level="2" /> <!-- Standard Type -->
|
||||
<skill id="4415" level="3" /> <!-- One-handed Sword -->
|
||||
<skill id="4416" level="2" /> <!-- Magic Creatures -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>8</sNpcPropHpRate>
|
||||
<ai type="CORPSE" isAggressive="true" aggroRange="500" />
|
||||
<collision>
|
||||
<radius normal="8" />
|
||||
<height normal="21" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18329" level="83" type="Monster" name="Hall Keeper Captain">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="0" />
|
||||
<param name="MoveAroundSocial1" value="0" />
|
||||
<param name="MoveAroundSocial2" value="0" />
|
||||
<skill name="PhysicalSpecial" id="4032" level="9" />
|
||||
<skill name="SelfBuff" id="4028" level="3" />
|
||||
</parameters>
|
||||
<race>UNDEAD</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="78" /> <!-- Great Sword -->
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="10" critical="4" accuracy="5" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="100" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="40" />
|
||||
<run ground="160" />
|
||||
</speed>
|
||||
<hitTime>500</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4028" level="3" /> <!-- NPC Might -->
|
||||
<skill id="4032" level="9" /> <!-- NPC Strike -->
|
||||
<skill id="4408" level="13" /> <!-- HP Increase (5x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="1" /> <!-- Heavy Armor Type -->
|
||||
<skill id="4415" level="3" /> <!-- One-handed Sword -->
|
||||
<skill id="4416" level="1" /> <!-- Undead -->
|
||||
<skill id="4417" level="35" /> <!-- Undead -->
|
||||
<skill id="4438" level="5" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="5" /> <!-- Greater Resist Hold -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>5</sNpcPropHpRate>
|
||||
<ai aggroRange="250" clanHelpRange="4000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>HALLGUARD</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="21" grown="25" />
|
||||
<height normal="40" grown="48" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18330" level="83" type="Monster" name="Hall Keeper Wizard">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="114" />
|
||||
<param name="MoveAroundSocial1" value="114" />
|
||||
<param name="MoveAroundSocial2" value="114" />
|
||||
<skill name="W_LongRangeDDMagic" id="4137" level="9" />
|
||||
<skill name="W_ShortRangeDDMagic" id="4560" level="9" />
|
||||
</parameters>
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="326" /> <!-- Heathen's Book -->
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="100" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="70" />
|
||||
<run ground="175" />
|
||||
</speed>
|
||||
<hitTime>740</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4137" level="9" /> <!-- Hydro Screw -->
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11" /> <!-- Average P. Atk. -->
|
||||
<skill id="4411" level="16" /> <!-- Very Strong M. Atk. -->
|
||||
<skill id="4412" level="11" /> <!-- Average P. Def. -->
|
||||
<skill id="4413" level="15" /> <!-- Strong M. Def. -->
|
||||
<skill id="4415" level="1" /> <!-- Bare Hands -->
|
||||
<skill id="4416" level="9" /> <!-- Demons -->
|
||||
<skill id="4417" level="34" /> <!-- Undead -->
|
||||
<skill id="4438" level="2" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4560" level="9" /> <!-- NPC Fire Burn -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai type="MAGE" aggroRange="250" clanHelpRange="4000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>HALLGUARD</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="12" />
|
||||
<height normal="40" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18331" level="83" type="Monster" name="Hall Keeper Guard">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="74" />
|
||||
<param name="MoveAroundSocial1" value="74" />
|
||||
<param name="MoveAroundSocial2" value="74" />
|
||||
<skill name="PhysicalSpecial" id="4032" level="9" />
|
||||
<skill name="SelfBuff" id="4028" level="3" />
|
||||
</parameters>
|
||||
<race>UNDEAD</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="142" /> <!-- Keshanberk -->
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="10" critical="4" accuracy="5" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="100" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="27" />
|
||||
<run ground="110" />
|
||||
</speed>
|
||||
<hitTime>710</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4028" level="3" /> <!-- NPC Might -->
|
||||
<skill id="4032" level="9" /> <!-- NPC Strike -->
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="2" /> <!-- Standard Type -->
|
||||
<skill id="4415" level="3" /> <!-- One-handed Sword -->
|
||||
<skill id="4416" level="1" /> <!-- Undead -->
|
||||
<skill id="4417" level="36" /> <!-- Undead -->
|
||||
<skill id="4438" level="2" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="5" /> <!-- Greater Resist Hold -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai aggroRange="250" clanHelpRange="4000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>HALLGUARD</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="12" grown="14.5" />
|
||||
<height normal="31" grown="36" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18332" level="83" type="Monster" name="Hall Keeper Patrol">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="110" />
|
||||
<param name="MoveAroundSocial1" value="110" />
|
||||
<param name="MoveAroundSocial2" value="110" />
|
||||
<skill name="PhysicalSpecial" id="4101" level="9" />
|
||||
<skill name="SelfBuff" id="4028" level="3" />
|
||||
</parameters>
|
||||
<race>UNDEAD</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="124" /> <!-- Two-handed Sword -->
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="10" critical="4" accuracy="5" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="100" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="70" />
|
||||
<run ground="170" />
|
||||
</speed>
|
||||
<hitTime>520</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4028" level="3" /> <!-- NPC Might -->
|
||||
<skill id="4101" level="9" /> <!-- NPC Spinning Slash -->
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="2" /> <!-- Standard Type -->
|
||||
<skill id="4415" level="3" /> <!-- One-handed Sword -->
|
||||
<skill id="4416" level="1" /> <!-- Undead -->
|
||||
<skill id="4417" level="36" /> <!-- Undead -->
|
||||
<skill id="4438" level="5" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="2" /> <!-- Greater Resist Hold -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai aggroRange="250" clanHelpRange="4000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>HALLGUARD</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="21" grown="24" />
|
||||
<height normal="31" grown="38" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18333" level="83" type="Monster" name="Hall Keeper Suicidal Soldier">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="80" />
|
||||
<param name="MoveAroundSocial1" value="80" />
|
||||
<param name="MoveAroundSocial2" value="111" />
|
||||
<skill name="SelfRangeDDMagic" id="4614" level="9" />
|
||||
</parameters>
|
||||
<race>UNDEAD</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="150" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="30" />
|
||||
<run ground="150" />
|
||||
</speed>
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4256" level="1" /> <!-- 100% stun resistance. -->
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="2" /> <!-- Standard Type -->
|
||||
<skill id="4415" level="1" /> <!-- Bare Hands -->
|
||||
<skill id="4416" level="1" /> <!-- Undead -->
|
||||
<skill id="4417" level="13" /> <!-- Demons -->
|
||||
<skill id="4438" level="5" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="5" /> <!-- Greater Resist Hold -->
|
||||
<skill id="4614" level="9" /> <!-- NPC Death Bomb -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai aggroRange="250" clanHelpRange="4000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>HALLGUARD</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="9" />
|
||||
<height normal="25.8" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18334" level="83" type="Monster" name="Dark Choir Captain">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="20" critical="1" accuracy="9" attackSpeed="253" type="BLUNT" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="120" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="31" />
|
||||
<run ground="150" />
|
||||
</speed>
|
||||
<hitTime>480</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4246" level="1" /> <!-- Strong in "nan" activity magic DOT -->
|
||||
<skill id="4256" level="1" /> <!-- 100% stun resistance. -->
|
||||
<skill id="4286" level="1" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4408" level="13" /> <!-- HP Increase (5x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="2" /> <!-- Standard Type -->
|
||||
<skill id="4415" level="6" /> <!-- Blunt Weapons -->
|
||||
<skill id="4416" level="9" /> <!-- Demons -->
|
||||
<skill id="4417" level="14" /> <!-- Demons -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>5</sNpcPropHpRate>
|
||||
<ai type="BALANCED" aggroRange="450" clanHelpRange="1500" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>DARKBAND</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="21" grown="24" />
|
||||
<height normal="50" grown="60" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18335" level="83" type="Monster" name="Dark Choir Prima Donna">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="0" />
|
||||
<param name="MoveAroundSocial1" value="0" />
|
||||
<param name="MoveAroundSocial2" value="0" />
|
||||
<skill name="PhysicalSpecial" id="4032" level="9" />
|
||||
<skill name="SelfBuff" id="4028" level="3" />
|
||||
</parameters>
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="120" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="30" />
|
||||
<run ground="200" />
|
||||
</speed>
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4028" level="3" /> <!-- NPC Might -->
|
||||
<skill id="4032" level="9" /> <!-- NPC Strike -->
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="3" /> <!-- Light Armor Type -->
|
||||
<skill id="4415" level="1" /> <!-- Bare Hands -->
|
||||
<skill id="4416" level="9" /> <!-- Demons -->
|
||||
<skill id="4417" level="14" /> <!-- Demons -->
|
||||
<skill id="4438" level="5" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="2" /> <!-- Greater Resist Hold -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai type="BALANCED" aggroRange="450" clanHelpRange="1500" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>DARKBAND</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="23" grown="32" />
|
||||
<height normal="40" grown="50" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18336" level="83" type="Monster" name="Dark Choir Lancer">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="80" />
|
||||
<param name="MoveAroundSocial1" value="80" />
|
||||
<param name="MoveAroundSocial2" value="80" />
|
||||
<skill name="PhysicalSpecial" id="4032" level="9" />
|
||||
<skill name="SelfBuff" id="4028" level="3" />
|
||||
</parameters>
|
||||
<race>UNDEAD</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="1472" /> <!-- Dreadbane -->
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="120" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="100" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<hitTime>450</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4028" level="3" /> <!-- NPC Might -->
|
||||
<skill id="4032" level="9" /> <!-- NPC Strike -->
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="3" /> <!-- Light Armor Type -->
|
||||
<skill id="4415" level="1" /> <!-- Bare Hands -->
|
||||
<skill id="4416" level="1" /> <!-- Undead -->
|
||||
<skill id="4417" level="14" /> <!-- Demons -->
|
||||
<skill id="4438" level="2" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="5" /> <!-- Greater Resist Hold -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai aggroRange="450" clanHelpRange="1500" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>DARKBAND</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="15" grown="25" />
|
||||
<height normal="45" grown="52" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18337" level="83" type="Monster" name="Dark Choir Archer">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="157" />
|
||||
<param name="MoveAroundSocial1" value="157" />
|
||||
<param name="MoveAroundSocial2" value="157" />
|
||||
<skill name="PhysicalSpecial" id="4040" level="9" />
|
||||
</parameters>
|
||||
<race>UNDEAD</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="279" /> <!-- Reinforced Longbow -->
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="20" critical="1" accuracy="9" attackSpeed="253" type="BLUNT" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="120" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="40" />
|
||||
<run ground="140" />
|
||||
</speed>
|
||||
<hitTime>800</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4040" level="9" /> <!-- NPC Bow Attack -->
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="3" /> <!-- Light Armor Type -->
|
||||
<skill id="4415" level="5" /> <!-- Blunt Weapons -->
|
||||
<skill id="4416" level="1" /> <!-- Undead -->
|
||||
<skill id="4417" level="36" /> <!-- Undead -->
|
||||
<skill id="4438" level="2" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="2" /> <!-- Greater Resist Hold -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai type="ARCHER" aggroRange="450" clanHelpRange="500" dodge="15" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>DARKBAND</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="13" />
|
||||
<height normal="32.5" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18338" level="83" type="Monster" name="Dark Choir Shaman">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="0" />
|
||||
<param name="MoveAroundSocial1" value="0" />
|
||||
<param name="MoveAroundSocial2" value="0" />
|
||||
<skill name="W_LongRangeDDMagic" id="4137" level="9" />
|
||||
<skill name="W_ShortRangeDDMagic" id="4560" level="9" />
|
||||
</parameters>
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="120" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="30" />
|
||||
<run ground="190" />
|
||||
</speed>
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4137" level="9" /> <!-- Hydro Screw -->
|
||||
<skill id="4408" level="11" /> <!-- HP Increase (3x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11" /> <!-- Average P. Atk. -->
|
||||
<skill id="4411" level="16" /> <!-- Very Strong M. Atk. -->
|
||||
<skill id="4412" level="11" /> <!-- Average P. Def. -->
|
||||
<skill id="4413" level="15" /> <!-- Strong M. Def. -->
|
||||
<skill id="4414" level="3" /> <!-- Light Armor Type -->
|
||||
<skill id="4415" level="1" /> <!-- Bare Hands -->
|
||||
<skill id="4416" level="9" /> <!-- Demons -->
|
||||
<skill id="4417" level="14" /> <!-- Demons -->
|
||||
<skill id="4438" level="5" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="2" /> <!-- Greater Resist Hold -->
|
||||
<skill id="4560" level="9" /> <!-- NPC Fire Burn -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>3</sNpcPropHpRate>
|
||||
<ai type="BALANCED" aggroRange="450" clanHelpRange="500" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>DARKBAND</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="23" />
|
||||
<height normal="40" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18339" level="83" type="Monster" name="Dark Choir Player">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="167" />
|
||||
<param name="MoveAroundSocial1" value="167" />
|
||||
<param name="MoveAroundSocial2" value="167" />
|
||||
</parameters>
|
||||
<race>UNDEAD</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="150" lhand="103" /> <!-- Elemental Sword / Tower Shield -->
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="10" critical="4" accuracy="5" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="120" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="140" />
|
||||
</speed>
|
||||
<hitTime>300</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="2" /> <!-- Standard Type -->
|
||||
<skill id="4415" level="3" /> <!-- One-handed Sword -->
|
||||
<skill id="4416" level="1" /> <!-- Undead -->
|
||||
<skill id="4417" level="36" /> <!-- Undead -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai type="BALANCED" aggroRange="450" clanHelpRange="1500" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>DARKBAND</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="11" grown="13" />
|
||||
<height normal="25" grown="31" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18340" level="83" type="Monster" name="Hall Keeper Suicidal Soldier">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<skill name="SelfRangeDDMagic" id="5042" level="9" />
|
||||
</parameters>
|
||||
<race>UNDEAD</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="120" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="30" />
|
||||
<run ground="100" />
|
||||
</speed>
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4256" level="1" /> <!-- 100% stun resistance. -->
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11" /> <!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11" /> <!-- Average P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="2" /> <!-- Standard Type -->
|
||||
<skill id="4415" level="1" /> <!-- Bare Hands -->
|
||||
<skill id="4416" level="1" /> <!-- Undead -->
|
||||
<skill id="4417" level="13" /> <!-- Demons -->
|
||||
<skill id="4438" level="5" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="5" /> <!-- Greater Resist Hold -->
|
||||
<skill id="5042" level="9" /> <!-- NPC Dispel Bomb -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai type="BALANCED" aggroRange="300" clanHelpRange="1000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>DARKBAND</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="9" />
|
||||
<height normal="25.8" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18341" level="83" type="Monster" name="Hall Keeper Suicidal Soldier">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<parameters>
|
||||
<skill name="SelfRangeDDMagic" id="5042" level="9" />
|
||||
</parameters>
|
||||
<race>UNDEAD</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="79" int="34" dex="42" wit="66" con="75" men="12">
|
||||
<vitals hp="3835" hpRegen="8.5" mp="1777" mpRegen="3" />
|
||||
<attack physical="1099.42361669366" magical="750.763809564873" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120" />
|
||||
<defence physical="353.86144" magical="258.94045" />
|
||||
<attribute>
|
||||
<attack type="DARK" value="100" />
|
||||
<defence fire="100" water="100" wind="100" earth="100" holy="50" dark="100" default="120" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="30" />
|
||||
<run ground="150" />
|
||||
</speed>
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="10" magical="10" />
|
||||
</stats>
|
||||
<status undying="false" canBeSown="true" />
|
||||
<skillList>
|
||||
<skill id="4256" level="1" /> <!-- 100% stun resistance. -->
|
||||
<skill id="4408" level="12" /> <!-- HP Increase (4x) -->
|
||||
<skill id="4409" level="1" /> <!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="16" /> <!-- Very Strong P. Atk. -->
|
||||
<skill id="4411" level="11" /> <!-- Average M. Atk. -->
|
||||
<skill id="4412" level="13" /> <!-- Slightly Strong P. Def. -->
|
||||
<skill id="4413" level="11" /> <!-- Average M. Def. -->
|
||||
<skill id="4414" level="2" /> <!-- Standard Type -->
|
||||
<skill id="4415" level="1" /> <!-- Bare Hands -->
|
||||
<skill id="4416" level="1" /> <!-- Undead -->
|
||||
<skill id="4417" level="13" /> <!-- Demons -->
|
||||
<skill id="4438" level="5" /> <!-- Greater Resist Sleep -->
|
||||
<skill id="4439" level="5" /> <!-- Greater Resist Hold -->
|
||||
<skill id="5042" level="9" /> <!-- NPC Dispel Bomb -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<sNpcPropHpRate>4</sNpcPropHpRate>
|
||||
<ai type="BALANCED" aggroRange="300" clanHelpRange="1000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>DARKBAND</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="9" />
|
||||
<height normal="25.8" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18342" level="1" type="Monster" name="Gremlin">
|
||||
<parameters>
|
||||
<param name="MoveAroundSocial" value="0" />
|
||||
@ -31,4 +785,175 @@
|
||||
<height normal="15" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18343" level="85" type="Npc" name="">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18344" level="85" type="Npc" name="Ol Mahum Commander">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18345" level="85" type="Npc" name="Turek Orc Prefect">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18346" level="85" type="Npc" name="Dark Lord">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18347" level="85" type="Npc" name="Nos">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18348" level="85" type="Npc" name="Carinkain">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18349" level="85" type="Npc" name="Sharp Talon Tiger">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18350" level="85" type="Npc" name="Lesser Giant Warrior">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="18351" level="85" type="Npc" name="Blood Priest">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
</list>
|
||||
|
@ -1800,13 +1800,99 @@
|
||||
<height normal="23" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29045" level="85" type="Npc" name="Frintezza">
|
||||
<race>HUMANOID</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="643059.482835" hpRegen="319.2293199" mp="38410.582" mpRegen="3"/>
|
||||
<attack physical="2641.63342970569" magical="971.856593649426" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="4218.55484265502" magical="3093.6078479881"/>
|
||||
<attribute>
|
||||
<attack type="WIND" value="350"/>
|
||||
<defence fire="300" water="300" wind="370" earth="250" holy="300" dark="300" default="300"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="30"/>
|
||||
<run ground="31"/>
|
||||
</speed>
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="230" magical="230"/>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="6"/><!-- Humanoids -->
|
||||
<skill id="5464" level="1"/><!-- Wind Attack -->
|
||||
</skillList>
|
||||
<corpseTime>15</corpseTime>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="45"/>
|
||||
<height normal="42.7"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29046" level="85" type="Monster" name="Scarlet van Halisha">
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="8204"/><!-- Monster Only (Follower of Frintezza Calibur) -->
|
||||
<acquire exp="130849003" sp="31403"/>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="19146585" hpRegen="248.43" mp="17588" mpRegen="109"/>
|
||||
<attack physical="3135.90530099925" magical="1442.51644402476" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="1342.97453242915" magical="2089.07149518896"/>
|
||||
<attribute>
|
||||
<attack type="DARK" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="200" holy="150" dark="200" default="300"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="240"/>
|
||||
<run ground="111"/>
|
||||
</speed>
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="230" magical="230"/>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4071" level="4"/><!-- Resist Bow/Crossbow Weapons -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="9"/><!-- Demons -->
|
||||
<skill id="5078" level="1"/><!-- Frintezza Critical Power -->
|
||||
<skill id="4494" level="1"/><!-- Raid Boss -->
|
||||
<skill id="14768" level="1"/><!-- Raid Boss (Lv. 85) -->
|
||||
<skill id="5467" level="1"/><!-- Dark Attacks -->
|
||||
<skill id="5017" level="1"/><!-- Demon -->
|
||||
<skill id="14765" level="4"/><!-- Blood Siphon Resistance -->
|
||||
</skillList>
|
||||
<corpseTime>18</corpseTime>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED" aggroRange="3000" clanHelpRange="2000" isAggressive="true">
|
||||
<skill primaryId="5014"/>
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="45" grown="54"/>
|
||||
<height normal="90.7" grown="109.4"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29047" level="85" type="RaidBoss" name="Scarlet van Halisha">
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="8222" />
|
||||
<acquire exp="0" sp="0" raidPoints="0" />
|
||||
<stats str="60" int="76" dex="73" wit="70" con="57" men="80">
|
||||
<vitals hp="22167900" hpRegen="319.2293199" mp="3440344.575" mpRegen="3" />
|
||||
<vitals hp="56970000" hpRegen="319.2293199" mp="3510317.685" mpRegen="3" />
|
||||
<attack physical="8184.13934" magical="2579.001338" random="30" critical="4.75" accuracy="4.75" attackSpeed="250" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="3584.547554" magical="1748.708651" />
|
||||
<speed>
|
||||
@ -1927,6 +2013,255 @@
|
||||
</drop>
|
||||
</dropLists>
|
||||
</npc>
|
||||
<npc id="29048" level="85" type="Monster" name="Evil Spirit">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="82844" hpRegen="1.03" mp="2177" mpRegen="1.03"/>
|
||||
<attack physical="1637.21079615435" magical="1151.5428303933" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="1637.38608949103" magical="1091.59072648368" evasion="3"/>
|
||||
<attribute>
|
||||
<attack type="WIND" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="150" holy="200" dark="200" default="220"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="10"/>
|
||||
<run ground="1"/>
|
||||
</speed>
|
||||
<hitTime>500</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status undying="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="2"/><!-- Magic Creatures -->
|
||||
<skill id="5464" level="1"/><!-- Wind Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="CORPSE" clanHelpRange="1000" isAggressive="true" aggroRange="6000">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="40"/>
|
||||
<height normal="100"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29049" level="85" type="Monster" name="Evil Spirit">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="82844" hpRegen="1.03" mp="2177" mpRegen="1.03"/>
|
||||
<attack physical="1637.21079615435" magical="1151.5428303933" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="1637.38608949103" magical="1091.59072648368" evasion="3"/>
|
||||
<attribute>
|
||||
<attack type="WIND" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="150" holy="200" dark="200" default="220"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="10"/>
|
||||
<run ground="1"/>
|
||||
</speed>
|
||||
<hitTime>500</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status undying="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="2"/><!-- Magic Creatures -->
|
||||
<skill id="5464" level="1"/><!-- Wind Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="CORPSE" clanHelpRange="1000" isAggressive="true" aggroRange="6000">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="40"/>
|
||||
<height normal="100"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29050" level="85" type="Monster" name="Halisha's Breath">
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="12996" hpRegen="1.01" mp="20560" mpRegen="3.03"/>
|
||||
<attack physical="1556.78628597682" magical="1073.71405840992" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="642.236873936287" magical="428.157916018841" evasion="1"/>
|
||||
<attribute>
|
||||
<attack type="DARK" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="200" holy="150" dark="200" default="220"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="30"/>
|
||||
<run ground="200"/>
|
||||
</speed>
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status undying="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="3"/><!-- Light Armor Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="9"/><!-- Demons -->
|
||||
<skill id="5467" level="1"/><!-- Dark Attacks -->
|
||||
<skill id="5009" level="1"/><!-- Frintezza Ghost Fighter -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED" aggroRange="450" clanHelpRange="2000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="23" grown="32"/>
|
||||
<height normal="40" grown="50"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29051" level="85" type="Monster" name="Halisha's Breath">
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="12996" hpRegen="1.01" mp="20560" mpRegen="3.03"/>
|
||||
<attack physical="1556.78628597682" magical="1073.71405840992" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="642.236873936287" magical="428.157916018841" evasion="1"/>
|
||||
<attribute>
|
||||
<attack type="DARK" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="200" holy="150" dark="200" default="220"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="30"/>
|
||||
<run ground="200"/>
|
||||
</speed>
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status undying="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="3"/><!-- Light Armor Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="9"/><!-- Demons -->
|
||||
<skill id="5467" level="1"/><!-- Dark Attacks -->
|
||||
<skill id="5010" level="1"/><!-- Frintezza Ghost Mage -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED" aggroRange="450" clanHelpRange="2000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="23"/>
|
||||
<height normal="40"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29052" level="85" type="Monster" name="">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="3960" hpRegen="8.585" mp="2056" mpRegen="3.03"/>
|
||||
<attack physical="1216.23928591939" magical="838.839108132747" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="3864.96881246637" magical="2826.6352584085" evasion="1"/>
|
||||
<speed>
|
||||
<walk ground="10"/>
|
||||
<run ground="1"/>
|
||||
</speed>
|
||||
<hitTime>500</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false"/>
|
||||
<skillList>
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="2"/><!-- Magic Creatures -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="1"/>
|
||||
<height normal="35"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29053" level="84" type="Monster" name="">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="5448" hpRegen="8.5" mp="2036" mpRegen="3"/>
|
||||
<attack physical="1456.32495032888" magical="994.481156766258" random="10" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="383.421920892449" magical="280.571522036227"/>
|
||||
<speed>
|
||||
<walk ground="10"/>
|
||||
<run ground="1"/>
|
||||
</speed>
|
||||
<hitTime>500</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false"/>
|
||||
<skillList>
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="2"/><!-- Magic Creatures -->
|
||||
<skill id="5004" level="1"/><!-- Dimensional Stun -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="1"/>
|
||||
<height normal="58"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29066" level="1" type="GrandBoss" name="Antharas">
|
||||
<parameters>
|
||||
<param name="ultra_respawn_time" value="8" />
|
||||
@ -2037,6 +2372,49 @@
|
||||
</drop>
|
||||
</dropLists>
|
||||
</npc>
|
||||
<npc id="29061" displayId="31842" level="70" type="Teleporter" name="Teleportation Cubic">
|
||||
<race>ETC</race>
|
||||
<sex>ETC</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="2444" hpRegen="7.5" mp="1345" mpRegen="2.7"/>
|
||||
<attack physical="688.86373" magical="470.40463" random="10" critical="4" accuracy="4.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120"/>
|
||||
<defence physical="295.91597" magical="216.53847"/>
|
||||
<speed>
|
||||
<walk ground="50"/>
|
||||
<run ground="120"/>
|
||||
</speed>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/>
|
||||
<!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/>
|
||||
<!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/>
|
||||
<!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/>
|
||||
<!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/>
|
||||
<!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/>
|
||||
<!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/>
|
||||
<!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/>
|
||||
<!-- Standard Type -->
|
||||
<skill id="4415" level="3"/>
|
||||
<!-- One-handed Sword -->
|
||||
<skill id="4416" level="19"/>
|
||||
<!-- Others -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED" clanHelpRange="300" isAggressive="true" aggroRange="500"/>
|
||||
<collision>
|
||||
<radius normal="40"/>
|
||||
<height normal="80"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29067" level="1" type="GrandBoss" name="Antharas">
|
||||
<parameters>
|
||||
<param name="ultra_respawn_time" value="5" />
|
||||
|
22
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/npcs/32000-32099.xml
vendored
Normal file
22
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/npcs/32000-32099.xml
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/npcs.xsd">
|
||||
<npc id="32011" level="85" type="Npc" name="Imperial Tomb Guide">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
</collision>
|
||||
</npc>
|
||||
</list>
|
@ -453,6 +453,57 @@
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="5015" toLevel="6" name="Frintezza Charge">
|
||||
<!-- Demon $s1 charge. -->
|
||||
<affectRange>
|
||||
<value level="1">400</value>
|
||||
<value level="2">500</value>
|
||||
<value level="3">700</value>
|
||||
<value level="4">400</value>
|
||||
<value level="5">500</value>
|
||||
<value level="6">700</value>
|
||||
</affectRange>
|
||||
<castRange>150</castRange>
|
||||
<coolTime>
|
||||
<value level="1">0</value>
|
||||
<value level="2">0</value>
|
||||
<value level="3">0</value>
|
||||
<value level="4">1500</value>
|
||||
<value level="5">1500</value>
|
||||
<value level="6">1500</value>
|
||||
</coolTime>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<effectRange>650</effectRange>
|
||||
<attributeType>DARK</attributeType>
|
||||
<attributeValue>180</attributeValue>
|
||||
<fanRange>
|
||||
<value level="1">0;0;400;150</value>
|
||||
<value level="2">0;0;500;170</value>
|
||||
<value level="3">0;0;700;200</value>
|
||||
<value level="4">0;0;400;150</value>
|
||||
<value level="5">0;0;500;170</value>
|
||||
<value level="6">0;0;700;200</value>
|
||||
</fanRange>
|
||||
<hitTime>1500</hitTime>
|
||||
<magicLvl>85</magicLvl>
|
||||
<operateType>A1</operateType>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<targetType>ENEMY</targetType>
|
||||
<affectScope>SQUARE</affectScope>
|
||||
<affectObject>NOT_FRIEND</affectObject>
|
||||
<effects>
|
||||
<effect name="PhysicalAttack">
|
||||
<power>
|
||||
<value level="1">48761</value>
|
||||
<value level="2">52970</value>
|
||||
<value level="3">68074</value>
|
||||
<value level="4">48761</value>
|
||||
<value level="5">52970</value>
|
||||
<value level="6">68074</value>
|
||||
</power>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="5016" toLevel="1" name="Yoke of Scarlet">
|
||||
<!-- Yoked status. -->
|
||||
<icon>icon.skill5016</icon>
|
||||
|
@ -24,4 +24,11 @@
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="14768" toLevel="1" name="Raid Boss (Lv. 85)">
|
||||
<!-- After being killed by Frintezza, who lost his soul to the devil, it was reborn as a monster called Scarlet van Halisha. It has lost sense of self, and it only makes sacrifices for the demon Halisha. -->
|
||||
<icon>icon.skillraid</icon>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<magicLvl>1</magicLvl>
|
||||
</skill>
|
||||
</list>
|
||||
|
@ -287,21 +287,6 @@
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="magicCriticalRate" type="xs:byte" />
|
||||
<xs:element name="trait">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="targetType">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
@ -412,9 +397,7 @@
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:unsignedByte">
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
@ -511,9 +494,9 @@
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromSubLevel" type="xs:unsignedShort" use="optional" />
|
||||
<xs:attribute name="toSubLevel" type="xs:unsignedShort" use="optional" />
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="optional" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
@ -618,7 +601,6 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="item" type="xs:string" />
|
||||
<xs:element name="expMultiplier" type="xs:decimal" />
|
||||
<xs:element name="halfLethal">
|
||||
<xs:complexType mixed="true">
|
||||
@ -969,7 +951,7 @@
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="isAdvanced" type="xs:boolean" />
|
||||
<xs:element name="DERANGEMENT">
|
||||
<xs:element name="BLEED">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
@ -984,7 +966,7 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="BLEED">
|
||||
<xs:element name="DERANGEMENT">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
@ -1367,6 +1349,9 @@
|
||||
<xs:element name="PHYSICAL_ATTACK_SPEED" type="xs:unsignedByte" />
|
||||
<xs:element name="MAGIC_ATTACK_SPEED" type="xs:unsignedByte" />
|
||||
<xs:element name="transformationId" type="xs:unsignedByte" />
|
||||
<xs:element name="distance" type="xs:unsignedByte" />
|
||||
<xs:element name="speed" type="xs:unsignedShort" />
|
||||
<xs:element name="knockDown" type="xs:boolean" />
|
||||
<xs:element name="despawnDelay" type="xs:unsignedInt" />
|
||||
<xs:element name="normal" type="xs:unsignedByte" />
|
||||
<xs:element name="ride" type="xs:unsignedShort" />
|
||||
@ -1446,6 +1431,7 @@
|
||||
<xs:element name="PSYCHIC" type="xs:unsignedByte" />
|
||||
<xs:element name="canKill" type="xs:boolean" />
|
||||
<xs:element name="VALAKAS" type="xs:byte" />
|
||||
<xs:element name="item" type="xs:string" />
|
||||
<xs:element name="FIST" type="xs:unsignedByte" />
|
||||
<xs:element name="ROOT_PHYSICALLY">
|
||||
<xs:complexType>
|
||||
@ -1464,11 +1450,8 @@
|
||||
</xs:element>
|
||||
<xs:element name="blockedActions" type="xs:byte" />
|
||||
<xs:element name="lifeTime" type="xs:unsignedShort" />
|
||||
<xs:element name="speed" type="xs:unsignedShort" />
|
||||
<xs:element name="delay" type="xs:unsignedShort" />
|
||||
<xs:element name="abnormalType" type="xs:string" />
|
||||
<xs:element name="distance" type="xs:unsignedByte" />
|
||||
<xs:element name="knockDown" type="xs:boolean" />
|
||||
<xs:element name="hp" type="xs:unsignedByte" />
|
||||
<xs:element name="mp" type="xs:unsignedByte" />
|
||||
<xs:element name="cp" type="xs:unsignedByte" />
|
||||
@ -1501,6 +1484,21 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="trait">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="abnormalVisualEffect">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
@ -1564,7 +1562,21 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="fanRange" type="xs:string" />
|
||||
<xs:element name="fanRange">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="itemConsumeCount">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
@ -1768,7 +1780,6 @@
|
||||
<xs:element name="channelingStart" type="xs:decimal" />
|
||||
<xs:element name="channelingTickInterval" type="xs:unsignedByte" />
|
||||
<xs:element name="removedOnDamage" type="xs:boolean" />
|
||||
<xs:element name="removedOnUnequipWeapon" type="xs:boolean" />
|
||||
<xs:element name="removedOnAnyActionExceptMove" type="xs:boolean" />
|
||||
<xs:element name="itemConsumeSteps" type="xs:unsignedByte" />
|
||||
<xs:element name="soulMaxConsumeCount" type="xs:unsignedByte" />
|
||||
@ -1852,26 +1863,7 @@
|
||||
<xs:element maxOccurs="unbounded" name="effect">
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element minOccurs="0" name="amount">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="value">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="required" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="required" />
|
||||
<xs:attribute name="fromSubLevel" type="xs:unsignedShort" use="required" />
|
||||
<xs:attribute name="toSubLevel" type="xs:unsignedShort" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="mode" type="xs:string" />
|
||||
<xs:element minOccurs="0" name="power">
|
||||
<xs:element name="power">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
@ -1890,10 +1882,6 @@
|
||||
<xs:element minOccurs="0" name="ticks" type="xs:unsignedByte" />
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromSubLevel" type="xs:unsignedShort" use="optional" />
|
||||
<xs:attribute name="toSubLevel" type="xs:unsignedShort" use="optional" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
6
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/default/32011-1.htm
vendored
Normal file
6
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/default/32011-1.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Imperial Tomb Guide:<br>
|
||||
Frintezza is protecting the Force Field. Even though you can pass through it, you can't meet Frintezza yet. He's put some tests in place to keep anyone from interrupting his rest.<br>
|
||||
These obstacles will test all of your skills, and those of your party as well!<br>
|
||||
If you pass the tests within a certain amount of time, you can meet Frintezza. This should only be attempted by the brave of heart!<br>
|
||||
(If you pass the tests within 35 minutes, you'll meet Frintezza.)
|
||||
</body></html>
|
7
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/default/32011.htm
vendored
Normal file
7
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/default/32011.htm
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<html><body>
|
||||
I feel an invisible barrier... Some sort of Magic Force Field has been put in place...<br>
|
||||
...? The guide of the Imperial mausoleum seems to have something to say.<br><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest LastImperialTomb">Enter the Magic Force Field</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Listen to Imperial Tomb Guide</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
201
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/FinalEmperialTomb.xml
vendored
Normal file
201
L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/instances/FinalEmperialTomb.xml
vendored
Normal file
@ -0,0 +1,201 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance id="205" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<time duration="120" empty="30" />
|
||||
<locations>
|
||||
<enter type="FIXED">
|
||||
<location x="-88015" y="-141153" z="-9168"/>
|
||||
</enter>
|
||||
<exit type="ORIGIN" />
|
||||
</locations>
|
||||
<conditions>
|
||||
<condition type="Party" />
|
||||
<condition type="CommandChannel" />
|
||||
<condition type="CommandChannelLeader" />
|
||||
<condition type="GroupMin">
|
||||
<param name="limit" value="27" /> <!-- The Kamael update -->
|
||||
</condition>
|
||||
<condition type="GroupMax">
|
||||
<param name="limit" value="300" />
|
||||
</condition>
|
||||
<condition type="Level">
|
||||
<param name="min" value="70" />
|
||||
</condition>
|
||||
<condition type="Distance" />
|
||||
<condition type="Reenter" />
|
||||
</conditions>
|
||||
<reenter apply="ON_ENTER">
|
||||
<reset day="WEDNESDAY" hour="6" minute="30" />
|
||||
</reenter>
|
||||
<doorlist>
|
||||
<door id="17130045"/>
|
||||
<door id="17130051"/>
|
||||
<door id="17130046"/>
|
||||
<door id="17130043"/>
|
||||
<door id="17130042"/>
|
||||
<door id="17130052"/>
|
||||
<door id="17130053"/>
|
||||
<door id="17130054"/>
|
||||
<door id="17130055"/>
|
||||
<door id="17130056"/>
|
||||
<door id="17130057"/>
|
||||
<door id="17130058"/>
|
||||
<door id="17130061"/>
|
||||
<door id="17130062"/>
|
||||
<door id="17130063"/>
|
||||
<door id="17130064"/>
|
||||
<door id="17130065"/>
|
||||
<door id="17130066"/>
|
||||
<door id="17130067"/>
|
||||
<door id="17130068"/>
|
||||
<door id="17130069"/>
|
||||
<door id="17130070"/>
|
||||
</doorlist>
|
||||
<spawnlist>
|
||||
<group>
|
||||
<npc id="18328" x="-87904" y="-141296" z="-9168" heading="0"/><!-- Hall Alarm -->
|
||||
</group>
|
||||
<group name="room1" spawnByDefault="false">
|
||||
<npc id="18329" x="-87361" y="-142312" z="-9176" heading="43694"/>
|
||||
<npc id="18329" x="-86916" y="-142136" z="-9176" heading="47013"/>
|
||||
<npc id="18329" x="-87037" y="-142185" z="-9176" heading="36781"/>
|
||||
<npc id="18329" x="-86869" y="-141910" z="-9176" heading="33913"/>
|
||||
<npc id="18329" x="-86787" y="-141333" z="-9176" heading="49395"/>
|
||||
<npc id="18329" x="-86581" y="-141426" z="-9176" heading="61112"/>
|
||||
<npc id="18329" x="-86792" y="-141119" z="-9176" heading="36773"/>
|
||||
<npc id="18329" x="-86693" y="-141079" z="-9176" heading="52481"/>
|
||||
<npc id="18329" x="-87002" y="-140604" z="-9176" heading="52739"/>
|
||||
<npc id="18329" x="-87074" y="-140403" z="-9176" heading="62270"/>
|
||||
<npc id="18329" x="-87239" y="-140163" z="-9176" heading="62482"/>
|
||||
<npc id="18329" x="-87816" y="-140199" z="-9176" heading="61902"/>
|
||||
<npc id="18329" x="-87281" y="-140336" z="-9176" heading="46667"/>
|
||||
<npc id="18329" x="-87809" y="-140030" z="-9176" heading="15952"/>
|
||||
<npc id="18329" x="-88028" y="-140122" z="-9176" heading="58845"/>
|
||||
<npc id="18329" x="-88186" y="-140004" z="-9176" heading="6601"/>
|
||||
<npc id="18329" x="-88746" y="-140354" z="-9176" heading="40577"/>
|
||||
<npc id="18329" x="-88717" y="-140442" z="-9176" heading="2789"/>
|
||||
<npc id="18329" x="-88619" y="-140236" z="-9176" heading="46506"/>
|
||||
<npc id="18329" x="-88936" y="-140502" z="-9176" heading="39670"/>
|
||||
<npc id="18329" x="-89022" y="-141327" z="-9176" heading="40426"/>
|
||||
<npc id="18329" x="-89177" y="-141120" z="-9176" heading="31507"/>
|
||||
<npc id="18329" x="-89037" y="-141137" z="-9176" heading="8243"/>
|
||||
<npc id="18329" x="-89075" y="-141545" z="-9176" heading="9402"/>
|
||||
<npc id="18329" x="-89147" y="-141636" z="-9176" heading="16185"/>
|
||||
<npc id="18329" x="-88857" y="-141957" z="-9176" heading="14827"/>
|
||||
<npc id="18329" x="-88880" y="-142110" z="-9176" heading="16669"/>
|
||||
<npc id="18329" x="-88554" y="-142294" z="-9176" heading="21413"/>
|
||||
<npc id="18329" x="-88693" y="-142254" z="-9176" heading="29845"/>
|
||||
<npc id="18330" x="-87188" y="-142282" z="-9176" heading="31391"/>
|
||||
<npc id="18330" x="-86779" y="-142056" z="-9176" heading="57028"/>
|
||||
<npc id="18330" x="-87043" y="-142152" z="-9176" heading="38684"/>
|
||||
<npc id="18330" x="-87075" y="-142297" z="-9176" heading="46886"/>
|
||||
<npc id="18330" x="-86923" y="-141903" z="-9176" heading="8556"/>
|
||||
<npc id="18330" x="-86908" y="-142066" z="-9176" heading="33147"/>
|
||||
<npc id="18330" x="-86819" y="-141497" z="-9176" heading="34625"/>
|
||||
<npc id="18330" x="-86669" y="-141470" z="-9176" heading="43482"/>
|
||||
<npc id="18330" x="-86710" y="-141243" z="-9176" heading="57995"/>
|
||||
<npc id="18330" x="-86795" y="-141168" z="-9176" heading="45501"/>
|
||||
<npc id="18330" x="-86556" y="-141283" z="-9176" heading="62885"/>
|
||||
<npc id="18330" x="-86825" y="-140630" z="-9176" heading="60032"/>
|
||||
<npc id="18330" x="-87030" y="-140389" z="-9176" heading="48351"/>
|
||||
<npc id="18330" x="-87018" y="-140233" z="-9176" heading="58404"/>
|
||||
<npc id="18330" x="-87115" y="-140461" z="-9176" heading="40098"/>
|
||||
<npc id="18330" x="-87402" y="-140121" z="-9176" heading="1948"/>
|
||||
<npc id="18330" x="-87207" y="-140079" z="-9176" heading="2212"/>
|
||||
<npc id="18330" x="-87656" y="-140169" z="-9176" heading="52562"/>
|
||||
<npc id="18330" x="-87841" y="-139951" z="-9176" heading="5627"/>
|
||||
<npc id="18330" x="-88008" y="-140051" z="-9176" heading="8635"/>
|
||||
<npc id="18330" x="-88098" y="-140149" z="-9176" heading="57598"/>
|
||||
<npc id="18330" x="-88224" y="-140029" z="-9176" heading="6984"/>
|
||||
<npc id="18330" x="-88689" y="-140355" z="-9176" heading="6411"/>
|
||||
<npc id="18330" x="-88859" y="-140475" z="-9176" heading="19053"/>
|
||||
<npc id="18330" x="-88571" y="-140352" z="-9176" heading="265"/>
|
||||
<npc id="18330" x="-88814" y="-140647" z="-9176" heading="63312"/>
|
||||
<npc id="18330" x="-88911" y="-140626" z="-9176" heading="6711"/>
|
||||
<npc id="18330" x="-89039" y="-141498" z="-9176" heading="56937"/>
|
||||
<npc id="18330" x="-89205" y="-141444" z="-9176" heading="29487"/>
|
||||
<npc id="18330" x="-89199" y="-141325" z="-9176" heading="42737"/>
|
||||
<npc id="18330" x="-89110" y="-141199" z="-9176" heading="29210"/>
|
||||
<npc id="18330" x="-88914" y="-141931" z="-9176" heading="12620"/>
|
||||
<npc id="18330" x="-88827" y="-142052" z="-9176" heading="27582"/>
|
||||
<npc id="18330" x="-89004" y="-142155" z="-9176" heading="38265"/>
|
||||
<npc id="18330" x="-88665" y="-142492" z="-9176" heading="32599"/>
|
||||
<npc id="18330" x="-88609" y="-142397" z="-9176" heading="10828"/>
|
||||
<npc id="18330" x="-88698" y="-142122" z="-9176" heading="19648"/>
|
||||
<npc id="18331" x="-86964" y="-142079" z="-9176" heading="6621"/>
|
||||
<npc id="18331" x="-87260" y="-142297" z="-9176" heading="8297"/>
|
||||
<npc id="18331" x="-86704" y="-141451" z="-9176" heading="15742"/>
|
||||
<npc id="18331" x="-86707" y="-141175" z="-9176" heading="51507"/>
|
||||
<npc id="18331" x="-86836" y="-140566" z="-9176" heading="23410"/>
|
||||
<npc id="18331" x="-87025" y="-140438" z="-9176" heading="26558"/>
|
||||
<npc id="18331" x="-87743" y="-139994" z="-9176" heading="31747"/>
|
||||
<npc id="18331" x="-87919" y="-140013" z="-9176" heading="62621"/>
|
||||
<npc id="18331" x="-88533" y="-140389" z="-9168" heading="38980"/>
|
||||
<npc id="18331" x="-88668" y="-140355" z="-9176" heading="48943"/>
|
||||
<npc id="18331" x="-88847" y="-140437" z="-9176" heading="37248"/>
|
||||
<npc id="18331" x="-89094" y="-140991" z="-9176" heading="51142"/>
|
||||
<npc id="18331" x="-89214" y="-141196" z="-9176" heading="43628"/>
|
||||
<npc id="18331" x="-89167" y="-141458" z="-9176" heading="51003"/>
|
||||
<npc id="18331" x="-88975" y="-142053" z="-9176" heading="58755"/>
|
||||
<npc id="18331" x="-88928" y="-142081" z="-9176" heading="59768"/>
|
||||
<npc id="18331" x="-88648" y="-142284" z="-9176" heading="60097"/>
|
||||
</group>
|
||||
<group name="room2_part1" spawnByDefault="false">
|
||||
<npc id="18339" x="-87882" y="-146943" z="-9188" heading="9083"/>
|
||||
<npc id="18339" x="-87914" y="-146981" z="-9188" heading="51455"/>
|
||||
<npc id="18339" x="-87925" y="-146932" z="-9188" heading="15755"/>
|
||||
<npc id="18339" x="-87971" y="-146885" z="-9188" heading="3538"/>
|
||||
</group>
|
||||
<group name="room2_part2" spawnByDefault="false">
|
||||
<npc id="18334" x="-87016" y="-147940" z="-9172" heading="23515"/>
|
||||
<npc id="18334" x="-86769" y="-147555" z="-9172" heading="31470"/>
|
||||
<npc id="18334" x="-86723" y="-147121" z="-9172" heading="33419"/>
|
||||
<npc id="18334" x="-86754" y="-146706" z="-9168" heading="32189"/>
|
||||
<npc id="18334" x="-86910" y="-146366" z="-9172" heading="40265"/>
|
||||
<npc id="18334" x="-89015" y="-146462" z="-9172" heading="59668"/>
|
||||
<npc id="18334" x="-88879" y="-146240" z="-9172" heading="62109"/>
|
||||
<npc id="18334" x="-89089" y="-147299" z="-9172" heading="50108"/>
|
||||
<npc id="18334" x="-89128" y="-146746" z="-9172" heading="62663"/>
|
||||
<npc id="18334" x="-88959" y="-147727" z="-9172" heading="3222"/>
|
||||
<npc id="18335" x="-88899" y="-146145" z="-9172" heading="60699"/>
|
||||
<npc id="18335" x="-88822" y="-147929" z="-9172" heading="5129"/>
|
||||
<npc id="18335" x="-89008" y="-147561" z="-9172" heading="1691"/>
|
||||
<npc id="18335" x="-89044" y="-146878" z="-9172" heading="64122"/>
|
||||
<npc id="18335" x="-89005" y="-146439" z="-9172" heading="57813"/>
|
||||
<npc id="18335" x="-89206" y="-147285" z="-9172" heading="61667"/>
|
||||
<npc id="18335" x="-86958" y="-147939" z="-9172" heading="22983"/>
|
||||
<npc id="18335" x="-86739" y="-147224" z="-9172" heading="31415"/>
|
||||
<npc id="18335" x="-86770" y="-146513" z="-9172" heading="29048"/>
|
||||
<npc id="18335" x="-86653" y="-146900" z="-9172" heading="22558"/>
|
||||
<npc id="18335" x="-87029" y="-146250" z="-9172" heading="53805"/>
|
||||
<npc id="18335" x="-86822" y="-147687" z="-9172" heading="25845"/>
|
||||
<npc id="18337" x="-89000" y="-146471" z="-9172" heading="64277"/>
|
||||
<npc id="18337" x="-89005" y="-146678" z="-9172" heading="61677"/>
|
||||
<npc id="18337" x="-89028" y="-146997" z="-9172" heading="64285"/>
|
||||
<npc id="18337" x="-89176" y="-147119" z="-9172" heading="4741"/>
|
||||
<npc id="18337" x="-88994" y="-147462" z="-9172" heading="64668"/>
|
||||
<npc id="18337" x="-89152" y="-147341" z="-9172" heading="65001"/>
|
||||
<npc id="18337" x="-89043" y="-147812" z="-9172" heading="3894"/>
|
||||
<npc id="18337" x="-88811" y="-148033" z="-9172" heading="8381"/>
|
||||
<npc id="18337" x="-88648" y="-148132" z="-9172" heading="12021"/>
|
||||
<npc id="18337" x="-87142" y="-146176" z="-9172" heading="40799"/>
|
||||
<npc id="18337" x="-86899" y="-146535" z="-9172" heading="36449"/>
|
||||
<npc id="18337" x="-86776" y="-146606" z="-9172" heading="37651"/>
|
||||
<npc id="18337" x="-86812" y="-146767" z="-9172" heading="38225"/>
|
||||
<npc id="18337" x="-86825" y="-146966" z="-9172" heading="28332"/>
|
||||
<npc id="18337" x="-86885" y="-147227" z="-9172" heading="33807"/>
|
||||
<npc id="18337" x="-86751" y="-147105" z="-9172" heading="31522"/>
|
||||
<npc id="18337" x="-86873" y="-147564" z="-9172" heading="26634"/>
|
||||
<npc id="18337" x="-87025" y="-147743" z="-9172" heading="27046"/>
|
||||
<npc id="18337" x="-86917" y="-147672" z="-9172" heading="24575"/>
|
||||
<npc id="18338" x="-86885" y="-146225" z="-9168" heading="40959"/>
|
||||
<npc id="18338" x="-86885" y="-146225" z="-9168" heading="51582"/>
|
||||
<npc id="18338" x="-86942" y="-147322" z="-9172" heading="44537"/>
|
||||
<npc id="18338" x="-86766" y="-147622" z="-9172" heading="54685"/>
|
||||
<npc id="18338" x="-86996" y="-147855" z="-9172" heading="41027"/>
|
||||
<npc id="18338" x="-89035" y="-147546" z="-9172" heading="57311"/>
|
||||
<npc id="18338" x="-89228" y="-146891" z="-9172" heading="50874"/>
|
||||
<npc id="18338" x="-89028" y="-146502" z="-9168" heading="45888"/>
|
||||
<npc id="18338" x="-88846" y="-146119" z="-9172" heading="514"/>
|
||||
</group>
|
||||
</spawnlist>
|
||||
</instance>
|
@ -0,0 +1,911 @@
|
||||
/*
|
||||
* 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.LastImperialTomb;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.l2jmobius.commons.util.CommonUtil;
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
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.skills.Skill;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.Earthquake;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillCanceld;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.NpcInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SpecialCamera;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* Last Imperial Tomb AI
|
||||
* @author Mobius (reworked from L2J version)
|
||||
* @author RobikBobik (Updated to Classic: The Kamael)
|
||||
* @TODO: When halisha uses second transform, Halisha Breath need to stop attack.
|
||||
*/
|
||||
public class LastImperialTomb extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int GUIDE = 32011;
|
||||
private static final int CUBE = 29061;
|
||||
private static final int HALL_ALARM = 18328;
|
||||
private static final int HALL_KEEPER_SUICIDAL_SOLDIER = 18333;
|
||||
private static final int DUMMY = 29052;
|
||||
private static final int DUMMY2 = 29053;
|
||||
private static final int[] PORTRAITS =
|
||||
{
|
||||
29048,
|
||||
29049
|
||||
};
|
||||
private static final int[] DEMONS =
|
||||
{
|
||||
29050,
|
||||
29051
|
||||
};
|
||||
private static final int FRINTEZZA = 29045;
|
||||
private static final int SCARLET1 = 29046;
|
||||
private static final int SCARLET2 = 29047;
|
||||
private static final int[] ON_KILL_MONSTERS =
|
||||
{
|
||||
HALL_ALARM,
|
||||
HALL_KEEPER_SUICIDAL_SOLDIER,
|
||||
18329,
|
||||
18330,
|
||||
18331,
|
||||
18334,
|
||||
18335,
|
||||
18336,
|
||||
18337,
|
||||
18338,
|
||||
18339
|
||||
|
||||
};
|
||||
// Items
|
||||
private static final int FIRST_SCARLET_WEAPON = 8204;
|
||||
private static final int SECOND_SCARLET_WEAPON = 7903;
|
||||
// Doors
|
||||
private static final int[] FIRST_ROOM_DOORS =
|
||||
{
|
||||
17130051,
|
||||
17130052,
|
||||
17130053,
|
||||
17130054,
|
||||
17130055,
|
||||
17130056,
|
||||
17130057,
|
||||
17130058
|
||||
};
|
||||
private static final int[] SECOND_ROOM_DOORS =
|
||||
{
|
||||
17130061,
|
||||
17130062,
|
||||
17130063,
|
||||
17130064,
|
||||
17130065,
|
||||
17130066,
|
||||
17130067,
|
||||
17130068,
|
||||
17130069,
|
||||
17130070
|
||||
};
|
||||
private static final int[] FIRST_ROUTE_DOORS =
|
||||
{
|
||||
17130042,
|
||||
17130043
|
||||
};
|
||||
private static final int[] SECOND_ROUTE_DOORS =
|
||||
{
|
||||
17130045,
|
||||
17130046
|
||||
};
|
||||
// Skills
|
||||
private static final int DEWDROP_OF_DESTRUCTION_SKILL_ID = 2276;
|
||||
private static final SkillHolder INTRO_SKILL = new SkillHolder(5004, 1);
|
||||
private static final SkillHolder FIRST_MORPH_SKILL = new SkillHolder(5017, 1);
|
||||
private static final Map<Integer, NpcStringId> SKILL_MSG = new HashMap<>();
|
||||
static
|
||||
{
|
||||
SKILL_MSG.put(1, NpcStringId.REQUIEM_OF_HATRED);
|
||||
SKILL_MSG.put(2, NpcStringId.RONDO_OF_SOLITUDE);
|
||||
SKILL_MSG.put(3, NpcStringId.FRENETIC_TOCCATA);
|
||||
SKILL_MSG.put(4, NpcStringId.FUGUE_OF_JUBILATION);
|
||||
SKILL_MSG.put(5, NpcStringId.HYPNOTIC_MAZURKA);
|
||||
}
|
||||
// Spawns
|
||||
// @formatter:off
|
||||
static final int[][] PORTRAIT_SPAWNS =
|
||||
{
|
||||
{29048, -89381, -153981, -9168, 3368, -89378, -153968, -9168, 3368},
|
||||
{29048, -86234, -152467, -9168, 37656, -86261, -152492, -9168, 37656},
|
||||
{29049, -89342, -152479, -9168, -5152, -89311, -152491, -9168, -5152},
|
||||
{29049, -86189, -153968, -9168, 29456, -86217, -153956, -9168, 29456},
|
||||
};
|
||||
// @formatter:on
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 205;
|
||||
private static final int FRINTEZZA_WAIT_TIME = 10; // minutes
|
||||
private static final int RANDOM_SONG_INTERVAL = 90; // seconds
|
||||
private static final int TIME_BETWEEN_DEMON_SPAWNS = 20; // seconds
|
||||
private static final int MAX_DEMONS = 24;
|
||||
|
||||
public LastImperialTomb()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addTalkId(GUIDE, CUBE);
|
||||
addAttackId(SCARLET1);
|
||||
addKillId(ON_KILL_MONSTERS);
|
||||
addKillId(HALL_ALARM, SCARLET2);
|
||||
addKillId(PORTRAITS);
|
||||
addKillId(DEMONS);
|
||||
addSpawnId(HALL_ALARM, DUMMY, DUMMY2);
|
||||
addSpellFinishedId(HALL_KEEPER_SUICIDAL_SOLDIER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "FRINTEZZA_INTRO_START":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
startQuestTimer("FRINTEZZA_INTRO_1", 17000, null, player, false);
|
||||
startQuestTimer("FRINTEZZA_INTRO_2", 20000, null, player, false);
|
||||
broadCastPacket(world, new Earthquake(-87784, -155083, -9087, 45, 27));
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_1":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
for (int doorId : FIRST_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, false);
|
||||
}
|
||||
for (int doorId : FIRST_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, false);
|
||||
}
|
||||
for (int doorId : SECOND_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, false);
|
||||
}
|
||||
for (int doorId : SECOND_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, false);
|
||||
}
|
||||
addSpawn(CUBE, -87904, -141296, -9168, 0, false, 0, false, world.getId());
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_2":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
|
||||
final Npc frintezzaDummy = addSpawn(DUMMY, -87784, -155083, -9087, 16048, false, 0, false, world.getId());
|
||||
world.setParameter("frintezzaDummy", frintezzaDummy);
|
||||
|
||||
final Npc overheadDummy = addSpawn(DUMMY, -87784, -153298, -9175, 16384, false, 0, false, world.getId());
|
||||
overheadDummy.setCollisionHeight(600);
|
||||
broadCastPacket(world, new NpcInfo(overheadDummy));
|
||||
world.setParameter("overheadDummy", overheadDummy);
|
||||
|
||||
final Npc portraitDummy1 = addSpawn(DUMMY, -89566, -153168, -9165, 16048, false, 0, false, world.getId());
|
||||
world.setParameter("portraitDummy1", portraitDummy1);
|
||||
|
||||
final Npc portraitDummy3 = addSpawn(DUMMY, -86004, -153168, -9165, 16048, false, 0, false, world.getId());
|
||||
world.setParameter("portraitDummy3", portraitDummy3);
|
||||
|
||||
final Npc scarletDummy = addSpawn(DUMMY2, -87784, -153298, -9175, 16384, false, 0, false, world.getId());
|
||||
world.setParameter("scarletDummy", scarletDummy);
|
||||
|
||||
disablePlayers(world);
|
||||
|
||||
// broadCastPacket(world, new SpecialCamera(overheadDummy, 0, 75, -89, 0, 100, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(overheadDummy, 0, 75, -89, 0, 100, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(overheadDummy, 300, 90, -10, 6500, 7000, 0, 0, 1, 0, 0));
|
||||
|
||||
final Npc frintezza = addSpawn(FRINTEZZA, -87780, -155086, -9080, 16384, false, 0, false, world.getId());
|
||||
frintezza.setIsImmobilized(true);
|
||||
frintezza.setIsInvul(true);
|
||||
frintezza.disableAllSkills();
|
||||
world.setParameter("frintezza", frintezza);
|
||||
|
||||
final List<Npc> demons = new ArrayList<>();
|
||||
for (int[] element : PORTRAIT_SPAWNS)
|
||||
{
|
||||
final MonsterInstance demon = (MonsterInstance) addSpawn(element[0] + 2, element[5], element[6], element[7], element[8], false, 0, false, world.getId());
|
||||
demon.setIsImmobilized(true);
|
||||
demon.disableAllSkills();
|
||||
demons.add(demon);
|
||||
}
|
||||
world.setParameter("demons", demons);
|
||||
|
||||
startQuestTimer("FRINTEZZA_INTRO_3", 6500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_3":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezzaDummy = world.getParameters().getObject("frintezzaDummy", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezzaDummy, 1800, 90, 8, 6500, 7000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_4", 900, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_4":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezzaDummy = world.getParameters().getObject("frintezzaDummy", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezzaDummy, 140, 90, 10, 2500, 4500, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_5", 4000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_5":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 40, 75, -10, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 40, 75, -10, 0, 12000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_6", 1350, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_6":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(frintezza.getObjectId(), 2));
|
||||
final Npc frintezzaDummy = world.getParameters().getObject("frintezzaDummy", Npc.class);
|
||||
frintezzaDummy.deleteMe();
|
||||
startQuestTimer("FRINTEZZA_INTRO_7", 8000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_7":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(demons.get(1).getObjectId(), 1));
|
||||
broadCastPacket(world, new SocialAction(demons.get(2).getObjectId(), 1));
|
||||
startQuestTimer("FRINTEZZA_INTRO_8", 400, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_8":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
final Npc portraitDummy1 = world.getParameters().getObject("portraitDummy1", Npc.class);
|
||||
final Npc portraitDummy3 = world.getParameters().getObject("portraitDummy3", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(demons.get(0).getObjectId(), 1));
|
||||
broadCastPacket(world, new SocialAction(demons.get(3).getObjectId(), 1));
|
||||
sendPacketX(world, new SpecialCamera(portraitDummy1, 1000, 118, 0, 0, 1000, 0, 0, 1, 0, 0), new SpecialCamera(portraitDummy3, 1000, 62, 0, 0, 1000, 0, 0, 1, 0, 0), -87784);
|
||||
sendPacketX(world, new SpecialCamera(portraitDummy1, 1000, 118, 0, 0, 10000, 0, 0, 1, 0, 0), new SpecialCamera(portraitDummy3, 1000, 62, 0, 0, 10000, 0, 0, 1, 0, 0), -87784);
|
||||
startQuestTimer("FRINTEZZA_INTRO_9", 2000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_9":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
final Npc portraitDummy1 = world.getParameters().getObject("portraitDummy1", Npc.class);
|
||||
final Npc portraitDummy3 = world.getParameters().getObject("portraitDummy3", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 240, 90, 0, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 240, 90, 25, 5500, 10000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SocialAction(frintezza.getObjectId(), 3));
|
||||
portraitDummy1.deleteMe();
|
||||
portraitDummy3.deleteMe();
|
||||
startQuestTimer("FRINTEZZA_INTRO_10", 4500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_10":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 100, 195, 35, 0, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_11", 700, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_11":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 100, 195, 35, 0, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_12", 1300, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_12":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new ExShowScreenMessage(NpcStringId.MOURNFUL_CHORALE_PRELUDE, 2, 5000));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 120, 180, 45, 1500, 10000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, 5006, 1, 34000, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_13", 1500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_13":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 520, 135, 45, 8000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_14", 7500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_14":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 1500, 110, 25, 10000, 13000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_15", 9500, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_15":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc overheadDummy = world.getParameters().getObject("overheadDummy", Npc.class);
|
||||
final Npc scarletDummy = world.getParameters().getObject("scarletDummy", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(overheadDummy, 930, 160, -20, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(overheadDummy, 600, 180, -25, 0, 10000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new MagicSkillUse(scarletDummy, overheadDummy, 5004, 1, 5800, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_16", 5000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_16":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc scarletDummy = world.getParameters().getObject("scarletDummy", Npc.class);
|
||||
final Npc activeScarlet = addSpawn(SCARLET1, -87789, -153295, -9176, 16384, false, 0, false, world.getId());
|
||||
world.setParameter("activeScarlet", activeScarlet);
|
||||
activeScarlet.setRHandId(FIRST_SCARLET_WEAPON);
|
||||
activeScarlet.setIsInvul(true);
|
||||
activeScarlet.setIsImmobilized(true);
|
||||
activeScarlet.disableAllSkills();
|
||||
broadCastPacket(world, new SocialAction(activeScarlet.getObjectId(), 3));
|
||||
broadCastPacket(world, new SpecialCamera(scarletDummy, 800, 180, 10, 1000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_17", 2100, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_17":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 300, 60, 8, 0, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FRINTEZZA_INTRO_18", 2000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_18":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 500, 90, 10, 3000, 5000, 0, 0, 1, 0, 0));
|
||||
world.setParameter("isPlayingSong", false);
|
||||
playRandomSong(world);
|
||||
startQuestTimer("FRINTEZZA_INTRO_19", 3000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_19":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Map<Npc, Integer> portraits = new HashMap<>();
|
||||
for (int i = 0; i < PORTRAIT_SPAWNS.length; i++)
|
||||
{
|
||||
final Npc portrait = addSpawn(PORTRAIT_SPAWNS[i][0], PORTRAIT_SPAWNS[i][1], PORTRAIT_SPAWNS[i][2], PORTRAIT_SPAWNS[i][3], PORTRAIT_SPAWNS[i][4], false, 0, false, world.getId());
|
||||
portraits.put(portrait, i);
|
||||
}
|
||||
world.setParameter("portraits", portraits);
|
||||
final Npc overheadDummy = world.getParameters().getObject("overheadDummy", Npc.class);
|
||||
final Npc scarletDummy = world.getParameters().getObject("scarletDummy", Npc.class);
|
||||
overheadDummy.deleteMe();
|
||||
scarletDummy.deleteMe();
|
||||
startQuestTimer("FRINTEZZA_INTRO_20", 2000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "FRINTEZZA_INTRO_20":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
for (Npc demon : demons)
|
||||
{
|
||||
demon.setIsImmobilized(false);
|
||||
demon.enableAllSkills();
|
||||
}
|
||||
activeScarlet.setIsInvul(false);
|
||||
activeScarlet.setIsImmobilized(false);
|
||||
activeScarlet.enableAllSkills();
|
||||
activeScarlet.setRunning();
|
||||
activeScarlet.doCast(INTRO_SKILL.getSkill());
|
||||
frintezza.enableAllSkills();
|
||||
frintezza.disableCoreAI(true);
|
||||
frintezza.setIsInvul(true);
|
||||
enablePlayers(world);
|
||||
startQuestTimer("PLAY_RANDOM_SONG", RANDOM_SONG_INTERVAL * 1000, frintezza, null, false);
|
||||
startQuestTimer("SPAWN_DEMONS", TIME_BETWEEN_DEMON_SPAWNS * 1000, null, player, false);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_DEMONS":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final Map<Npc, Integer> portraits = world.getParameters().getMap("portraits", Npc.class, Integer.class);
|
||||
if (!portraits.isEmpty())
|
||||
{
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
for (int i : portraits.values())
|
||||
{
|
||||
if (demons.size() > MAX_DEMONS)
|
||||
{
|
||||
break;
|
||||
}
|
||||
final Npc demon = addSpawn(PORTRAIT_SPAWNS[i][0] + 2, PORTRAIT_SPAWNS[i][5], PORTRAIT_SPAWNS[i][6], PORTRAIT_SPAWNS[i][7], PORTRAIT_SPAWNS[i][8], false, 0, false, world.getId());
|
||||
demons.add(demon);
|
||||
}
|
||||
world.setParameter("demons", demons);
|
||||
startQuestTimer("SPAWN_DEMONS", TIME_BETWEEN_DEMON_SPAWNS * 1000, null, player, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "PLAY_RANDOM_SONG":
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
playRandomSong(world);
|
||||
startQuestTimer("PLAY_RANDOM_SONG", RANDOM_SONG_INTERVAL * 1000, null, player, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SCARLET_FIRST_MORPH":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
npc.doCast(FIRST_MORPH_SKILL.getSkill());
|
||||
playRandomSong(world);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
disablePlayers(world);
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
activeScarlet.abortAttack();
|
||||
activeScarlet.abortCast();
|
||||
activeScarlet.setIsInvul(true);
|
||||
activeScarlet.setIsImmobilized(true);
|
||||
activeScarlet.disableAllSkills();
|
||||
playRandomSong(world);
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_1", 2000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_1":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(frintezza.getObjectId(), 4));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 250, 120, 15, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 250, 120, 15, 0, 10000, 0, 0, 1, 0, 0));
|
||||
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_2", 7000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_2":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, 5006, 1, 34000, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 500, 70, 15, 3000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_3", 3000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_3":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 2500, 90, 12, 6000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_4", 3000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_4":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
final Location scarletLocation = activeScarlet.getLocation();
|
||||
int newHeading = 0;
|
||||
if (scarletLocation.getHeading() < 32768)
|
||||
{
|
||||
newHeading = Math.abs(180 - (int) (scarletLocation.getHeading() / 182.044444444));
|
||||
}
|
||||
else
|
||||
{
|
||||
newHeading = Math.abs(540 - (int) (scarletLocation.getHeading() / 182.044444444));
|
||||
}
|
||||
world.setParameter("scarletLocation", scarletLocation);
|
||||
world.setParameter("newHeading", newHeading);
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 250, newHeading, 12, 0, 1000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 250, newHeading, 12, 0, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_5", 500, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_5":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
final int newHeading = world.getParameters().getInt("newHeading");
|
||||
activeScarlet.doDie(activeScarlet);
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 450, newHeading, 14, 8000, 8000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_6", 6250, npc, null, false);
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_7", 7200, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_6":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
activeScarlet.deleteMe();
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_7":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final int newHeading = world.getParameters().getInt("newHeading");
|
||||
final Location scarletLocation = world.getParameters().getLocation("scarletLocation");
|
||||
final Npc activeScarlet = addSpawn(SCARLET2, scarletLocation, false, 0, false, world.getId());
|
||||
world.setParameter("activeScarlet", activeScarlet);
|
||||
activeScarlet.setRHandId(SECOND_SCARLET_WEAPON);
|
||||
activeScarlet.setIsInvul(true);
|
||||
activeScarlet.setIsImmobilized(true);
|
||||
activeScarlet.disableAllSkills();
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 450, newHeading, 12, 500, 14000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_8", 8100, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_8":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
broadCastPacket(world, new SocialAction(activeScarlet.getObjectId(), 2));
|
||||
startQuestTimer("SCARLET_SECOND_MORPH_CAMERA_9", 9000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "SCARLET_SECOND_MORPH_CAMERA_9":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
activeScarlet.setIsInvul(false);
|
||||
activeScarlet.setIsImmobilized(false);
|
||||
activeScarlet.enableAllSkills();
|
||||
enablePlayers(world);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_1":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc activeScarlet = world.getParameters().getObject("activeScarlet", Npc.class);
|
||||
final int newHeading = world.getParameters().getInt("newHeading");
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 300, newHeading - 180, 5, 0, 7000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(activeScarlet, 200, newHeading, 85, 4000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FINISH_CAMERA_2", 7400, npc, null, false);
|
||||
startQuestTimer("FINISH_CAMERA_3", 7500, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_2":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
frintezza.doDie(frintezza);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_3":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 100, 120, 5, 0, 7000, 0, 0, 1, 0, 0));
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 100, 90, 5, 5000, 15000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FINISH_CAMERA_4", 7000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_4":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new SpecialCamera(frintezza, 900, 90, 25, 7000, 10000, 0, 0, 1, 0, 0));
|
||||
startQuestTimer("FINISH_CAMERA_5", 9000, npc, null, false);
|
||||
break;
|
||||
}
|
||||
case "FINISH_CAMERA_5":
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
for (int doorId : FIRST_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
for (int doorId : FIRST_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
for (int doorId : SECOND_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
for (int doorId : SECOND_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
enablePlayers(world);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, PlayerInstance player)
|
||||
{
|
||||
if (npc.getId() == GUIDE)
|
||||
{
|
||||
enterInstance(player, npc, TEMPLATE_ID);
|
||||
}
|
||||
else // Teleport Cube
|
||||
{
|
||||
final Instance world = getPlayerInstance(player);
|
||||
if (world != null)
|
||||
{
|
||||
teleportPlayerOut(player, world);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
npc.setRandomWalking(false);
|
||||
npc.setIsImmobilized(true);
|
||||
if (npc.getId() == HALL_ALARM)
|
||||
{
|
||||
npc.disableCoreAI(true);
|
||||
}
|
||||
else // dummy
|
||||
{
|
||||
npc.setIsInvul(true);
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
|
||||
{
|
||||
if (npc.getId() == SCARLET1)
|
||||
{
|
||||
if ((npc.getScriptValue() == 0) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.80)))
|
||||
{
|
||||
npc.setScriptValue(1);
|
||||
startQuestTimer("SCARLET_FIRST_MORPH", 1000, npc, null, false);
|
||||
}
|
||||
if ((npc.getScriptValue() == 1) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.20)))
|
||||
{
|
||||
npc.setScriptValue(2);
|
||||
startQuestTimer("SCARLET_SECOND_MORPH", 1000, npc, null, false);
|
||||
}
|
||||
}
|
||||
if (skill != null)
|
||||
{
|
||||
// When Dewdrop of Destruction is used on Portraits they suicide.
|
||||
if (CommonUtil.contains(PORTRAITS, npc.getId()) && (skill.getId() == DEWDROP_OF_DESTRUCTION_SKILL_ID))
|
||||
{
|
||||
npc.doDie(attacker);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
|
||||
{
|
||||
if (skill.isSuicideAttack())
|
||||
{
|
||||
return onKill(npc, null, false);
|
||||
}
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
final Instance world = killer.getInstanceWorld();
|
||||
if ((npc.getId() == HALL_ALARM) && (world.getStatus() == 0))
|
||||
{
|
||||
world.setStatus(1);
|
||||
world.spawnGroup("room1");
|
||||
final List<MonsterInstance> monsters = world.getAliveNpcs(MonsterInstance.class);
|
||||
world.setParameter("monstersCount", monsters.size() - 1);
|
||||
for (int doorId : FIRST_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
for (Npc monster : monsters)
|
||||
{
|
||||
monster.setRunning();
|
||||
// monster.moveToLocation(-87959, -141247, -9168, 0);
|
||||
monster.reduceCurrentHp(1, killer, null); // TODO: Find better way for attack
|
||||
}
|
||||
}
|
||||
else if (npc.getId() == SCARLET2)
|
||||
{
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
broadCastPacket(world, new MagicSkillCanceld(frintezza.getObjectId()));
|
||||
startQuestTimer("FINISH_CAMERA_1", 500, npc, null, false);
|
||||
}
|
||||
else if (CommonUtil.contains(DEMONS, npc.getId()))
|
||||
{
|
||||
final List<Npc> demons = world.getParameters().getList("demons", Npc.class);
|
||||
demons.remove(npc);
|
||||
}
|
||||
else if (CommonUtil.contains(PORTRAITS, npc.getId()))
|
||||
{
|
||||
final Map<Npc, Integer> portraits = world.getParameters().getMap("portraits", Npc.class, Integer.class);
|
||||
portraits.remove(npc);
|
||||
}
|
||||
else
|
||||
{
|
||||
final int killCount = world.getParameters().getInt("monstersCount");
|
||||
world.setParameter("monstersCount", killCount - 1);
|
||||
if (killCount <= 0)
|
||||
{
|
||||
switch (world.getStatus())
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
world.setStatus(2);
|
||||
world.spawnGroup("room2_part1");
|
||||
final List<MonsterInstance> monsters = world.getAliveNpcs(MonsterInstance.class);
|
||||
world.setParameter("monstersCount", monsters.size() - 1);
|
||||
for (int doorId : FIRST_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
world.setStatus(3);
|
||||
world.spawnGroup("room2_part2");
|
||||
final List<MonsterInstance> monsters = world.getAliveNpcs(MonsterInstance.class);
|
||||
world.setParameter("monstersCount", monsters.size() - 1);
|
||||
for (int doorId : SECOND_ROOM_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
|
||||
for (Npc monster : monsters)
|
||||
{
|
||||
monster.setRunning();
|
||||
// monster.moveToLocation(-87935, -147062, -9184, 0);
|
||||
monster.reduceCurrentHp(1, killer, null); // TODO: Find better way for attack
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
world.setStatus(4);
|
||||
for (int doorId : SECOND_ROUTE_DOORS)
|
||||
{
|
||||
world.openCloseDoor(doorId, true);
|
||||
}
|
||||
startQuestTimer("FRINTEZZA_INTRO_START", FRINTEZZA_WAIT_TIME * 60 * 1000, null, killer, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
private void playRandomSong(Instance world)
|
||||
{
|
||||
final Npc frintezza = world.getParameters().getObject("frintezza", Npc.class);
|
||||
final boolean isPlayingSong = world.getParameters().getBoolean("isPlayingSong");
|
||||
if (isPlayingSong)
|
||||
{
|
||||
return;
|
||||
}
|
||||
world.setParameter("isPlayingSong", true);
|
||||
final int random = getRandom(1, 5);
|
||||
final SkillHolder skill = new SkillHolder(5007, random);
|
||||
final SkillHolder skillEffect = new SkillHolder(5008, random);
|
||||
broadCastPacket(world, new ExShowScreenMessage(2, -1, 2, 0, 0, 0, 0, true, 4000, false, null, SKILL_MSG.get(random), null));
|
||||
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, skill.getSkillId(), skill.getSkillLevel(), skill.getSkill().getHitTime(), 0));
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
frintezza.setTarget(player);
|
||||
frintezza.doCast(skillEffect.getSkill());
|
||||
}
|
||||
}
|
||||
world.setParameter("isPlayingSong", false);
|
||||
}
|
||||
|
||||
private void disablePlayers(Instance world)
|
||||
{
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
player.abortAttack();
|
||||
player.abortCast();
|
||||
player.disableAllSkills();
|
||||
player.setTarget(null);
|
||||
player.stopMove(null);
|
||||
player.setIsImmobilized(true);
|
||||
player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void enablePlayers(Instance world)
|
||||
{
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
player.enableAllSkills();
|
||||
player.setIsImmobilized(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void broadCastPacket(Instance world, IClientOutgoingPacket packet)
|
||||
{
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
player.sendPacket(packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendPacketX(Instance world, IClientOutgoingPacket packet1, IClientOutgoingPacket packet2, int x)
|
||||
{
|
||||
for (PlayerInstance player : world.getPlayers())
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
if (player.getX() < x)
|
||||
{
|
||||
player.sendPacket(packet1);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(packet2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new LastImperialTomb();
|
||||
}
|
||||
}
|
@ -0,0 +1,277 @@
|
||||
/*
|
||||
* 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.LastImperialTomb;
|
||||
|
||||
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
|
||||
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
|
||||
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
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.DecoyInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* @author Micr0, Zerox, Mobius
|
||||
*/
|
||||
public class ScarletVanHalisha extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int HALISHA2 = 29046;
|
||||
private static final int HALISHA3 = 29047;
|
||||
// Skills
|
||||
private static final int FRINTEZZA_DAEMON_ATTACK = 5014;
|
||||
private static final int FRINTEZZA_DAEMON_CHARGE = 5015;
|
||||
private static final int YOKE_OF_SCARLET = 5016;
|
||||
private static final int FRINTEZZA_DAEMON_MORPH = 5018;
|
||||
private static final int FRINTEZZA_DAEMON_FIELD = 5019;
|
||||
// Misc
|
||||
private Creature _target;
|
||||
private Skill _skill;
|
||||
private long _lastRangedSkillTime;
|
||||
private final int _rangedSkillMinCoolTime = 60000; // 1 minute
|
||||
|
||||
public ScarletVanHalisha()
|
||||
{
|
||||
addAttackId(HALISHA2, HALISHA3);
|
||||
addKillId(HALISHA2, HALISHA3);
|
||||
addSpellFinishedId(HALISHA2, HALISHA3);
|
||||
registerMobs(HALISHA2, HALISHA3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "ATTACK":
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
getSkillAI(npc);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "RANDOM_TARGET":
|
||||
{
|
||||
_target = getRandomTarget(npc, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
|
||||
{
|
||||
getSkillAI(npc);
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
startQuestTimer("RANDOM_TARGET", 5000, npc, null, true);
|
||||
startQuestTimer("ATTACK", 500, npc, null, true);
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
|
||||
{
|
||||
cancelQuestTimers("ATTACK");
|
||||
cancelQuestTimers("RANDOM_TARGET");
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
private Skill getRndSkills(Npc npc)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case HALISHA2:
|
||||
{
|
||||
if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 2);
|
||||
}
|
||||
else if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 5);
|
||||
}
|
||||
else if (getRandom(100) < 2)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(YOKE_OF_SCARLET, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_ATTACK, 2);
|
||||
}
|
||||
}
|
||||
case HALISHA3:
|
||||
{
|
||||
if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 3);
|
||||
}
|
||||
else if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 6);
|
||||
}
|
||||
else if (getRandom(100) < 10)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_CHARGE, 2);
|
||||
}
|
||||
else if (((_lastRangedSkillTime + _rangedSkillMinCoolTime) < System.currentTimeMillis()) && (getRandom(100) < 10))
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_FIELD, 1);
|
||||
}
|
||||
else if (((_lastRangedSkillTime + _rangedSkillMinCoolTime) < System.currentTimeMillis()) && (getRandom(100) < 10))
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_MORPH, 1);
|
||||
}
|
||||
else if (getRandom(100) < 2)
|
||||
{
|
||||
return SkillData.getInstance().getSkill(YOKE_OF_SCARLET, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_ATTACK, 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return SkillData.getInstance().getSkill(FRINTEZZA_DAEMON_ATTACK, 1);
|
||||
}
|
||||
|
||||
private synchronized void getSkillAI(Npc npc)
|
||||
{
|
||||
if (npc.isInvul() || npc.isCastingNow())
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ((getRandom(100) < 30) || (_target == null) || _target.isDead())
|
||||
{
|
||||
_skill = getRndSkills(npc);
|
||||
_target = getRandomTarget(npc, _skill);
|
||||
}
|
||||
final Creature target = _target;
|
||||
Skill skill = _skill;
|
||||
if (skill == null)
|
||||
{
|
||||
skill = getRndSkills(npc);
|
||||
}
|
||||
|
||||
if (npc.isPhysicalMuted())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((target == null) || target.isDead())
|
||||
{
|
||||
// npc.setIsCastingNow(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Util.checkIfInRange(skill.getCastRange(), npc, target, true))
|
||||
{
|
||||
npc.getAI().setIntention(AI_INTENTION_IDLE);
|
||||
npc.setTarget(target);
|
||||
// npc.setIsCastingNow(true);
|
||||
_target = null;
|
||||
npc.doCast(skill);
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.getAI().setIntention(AI_INTENTION_FOLLOW, target, null);
|
||||
npc.getAI().setIntention(AI_INTENTION_ATTACK, target, null);
|
||||
// npc.setIsCastingNow(false);
|
||||
}
|
||||
}
|
||||
|
||||
private Creature getRandomTarget(Npc npc, Skill skill)
|
||||
{
|
||||
final ArrayList<Creature> result = new ArrayList<>();
|
||||
{
|
||||
for (WorldObject obj : npc.getInstanceWorld().getPlayers())
|
||||
{
|
||||
if (obj.isPlayable() || (obj instanceof DecoyInstance))
|
||||
{
|
||||
if (obj.isPlayer() && obj.getActingPlayer().isInvisible())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (((((Creature) obj).getZ() < (npc.getZ() - 100)) && (((Creature) obj).getZ() > (npc.getZ() + 100))) || !GeoEngine.getInstance().canSeeTarget(obj, npc))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (obj.isPlayable() || (obj instanceof DecoyInstance))
|
||||
{
|
||||
int skillRange = 150;
|
||||
if (skill != null)
|
||||
{
|
||||
switch (skill.getId())
|
||||
{
|
||||
case FRINTEZZA_DAEMON_ATTACK:
|
||||
{
|
||||
skillRange = 150;
|
||||
break;
|
||||
}
|
||||
case FRINTEZZA_DAEMON_CHARGE:
|
||||
{
|
||||
skillRange = 400;
|
||||
break;
|
||||
}
|
||||
case YOKE_OF_SCARLET:
|
||||
{
|
||||
skillRange = 200;
|
||||
break;
|
||||
}
|
||||
case FRINTEZZA_DAEMON_MORPH:
|
||||
case FRINTEZZA_DAEMON_FIELD:
|
||||
{
|
||||
_lastRangedSkillTime = System.currentTimeMillis();
|
||||
skillRange = 550;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Util.checkIfInRange(skillRange, npc, obj, true) && !((Creature) obj).isDead())
|
||||
{
|
||||
result.add((Creature) obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return getRandomEntry(result);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ScarletVanHalisha();
|
||||
}
|
||||
}
|
@ -547,6 +547,7 @@
|
||||
<npc id="21438" x="180495" y="-75344" z="-2728" heading="8728" respawnTime="30sec" />
|
||||
<npc id="21438" x="180956" y="-75418" z="-2728" heading="55660" respawnTime="30sec" />
|
||||
<npc id="21438" x="180552" y="-75371" z="-2728" heading="1395" respawnTime="30sec" />
|
||||
<npc id="32011" x="181376" y="-81008" z="-2728" heading="16500" respawnTime="60sec" /> <!-- Imperial Tomb Guide -->
|
||||
</group>
|
||||
</spawn>
|
||||
</list>
|
@ -33,14 +33,18 @@
|
||||
</stats>
|
||||
</item>
|
||||
<item id="8222" name="Monster Only (Follower of Frintezza Tran Calibur)" type="Weapon">
|
||||
<set name="icon" val="icon.weapon_monster_i00" />
|
||||
<set name="default_action" val="EQUIP" />
|
||||
<set name="weapon_type" val="SWORD" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="FINE_STEEL" />
|
||||
<set name="weight" val="1560" />
|
||||
<set name="soulshots" val="2" />
|
||||
<set name="spiritshots" val="2" />
|
||||
<set name="icon" val="icon.weapon_monster_i00"/>
|
||||
<set name="default_action" val="EQUIP"/>
|
||||
<set name="weapon_type" val="SWORD"/>
|
||||
<set name="bodypart" val="rhand"/>
|
||||
<set name="damage_range" val="0;0;40;120"/>
|
||||
<set name="immediate_effect" val="true"/>
|
||||
<set name="material" val="FINE_STEEL"/>
|
||||
<set name="weight" val="1560"/>
|
||||
<set name="soulshots" val="2"/>
|
||||
<set name="spiritshots" val="2"/>
|
||||
<set name="commissionItemType" val="ONE_HAND_SWORD"/>
|
||||
<set name="isAppearanceable" val="true"/>
|
||||
<stats>
|
||||
<stat type="rCrit">8</stat>
|
||||
<stat type="pAtkSpd">379</stat>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1801,41 +1801,89 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29045" level="85" type="Npc" name="Frintezza">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<race>HUMANOID</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="643059.482835" hpRegen="319.2293199" mp="38410.582" mpRegen="3"/>
|
||||
<attack physical="2641.63342970569" magical="971.856593649426" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="4218.55484265502" magical="3093.6078479881"/>
|
||||
<attribute>
|
||||
<attack type="WIND" value="350"/>
|
||||
<defence fire="300" water="300" wind="370" earth="250" holy="300" dark="300" default="300"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
<walk ground="30"/>
|
||||
<run ground="31"/>
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="230" magical="230"/>
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<skillList>
|
||||
<skill id="4416" level="6"/><!-- Humanoids -->
|
||||
<skill id="5464" level="1"/><!-- Wind Attack -->
|
||||
</skillList>
|
||||
<corpseTime>15</corpseTime>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
<radius normal="45"/>
|
||||
<height normal="42.7"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29046" level="85" type="Npc" name="Scarlet van Halisha">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<npc id="29046" level="85" type="Monster" name="Scarlet van Halisha">
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<equipment rhand="8204"/><!-- Monster Only (Follower of Frintezza Calibur) -->
|
||||
<acquire exp="130849003" sp="31403"/>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="19146585" hpRegen="248.43" mp="17588" mpRegen="109"/>
|
||||
<attack physical="3135.90530099925" magical="1442.51644402476" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="1342.97453242915" magical="2089.07149518896"/>
|
||||
<attribute>
|
||||
<attack type="DARK" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="200" holy="150" dark="200" default="300"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
<walk ground="240"/>
|
||||
<run ground="111"/>
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="230" magical="230"/>
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4071" level="4"/><!-- Resist Bow/Crossbow Weapons -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="9"/><!-- Demons -->
|
||||
<skill id="5078" level="1"/><!-- Frintezza Critical Power -->
|
||||
<skill id="4494" level="1"/><!-- Raid Boss -->
|
||||
<skill id="14768" level="1"/><!-- Raid Boss (Lv. 85) -->
|
||||
<skill id="5467" level="1"/><!-- Dark Attacks -->
|
||||
<skill id="5017" level="1"/><!-- Demon -->
|
||||
<skill id="14765" level="4"/><!-- Blood Siphon Resistance -->
|
||||
</skillList>
|
||||
<corpseTime>18</corpseTime>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED" aggroRange="3000" clanHelpRange="2000" isAggressive="true">
|
||||
<skill primaryId="5014"/>
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
<radius normal="45" grown="54"/>
|
||||
<height normal="90.7" grown="109.4"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29047" level="85" type="RaidBoss" name="Scarlet van Halisha">
|
||||
@ -1844,7 +1892,7 @@
|
||||
<equipment rhand="8222" />
|
||||
<acquire exp="0" sp="0" raidPoints="0" />
|
||||
<stats str="60" int="76" dex="73" wit="70" con="57" men="80">
|
||||
<vitals hp="22167900" hpRegen="319.2293199" mp="3440344.575" mpRegen="3" />
|
||||
<vitals hp="56970000" hpRegen="319.2293199" mp="3510317.685" mpRegen="3" />
|
||||
<attack physical="8184.13934" magical="2579.001338" random="30" critical="4.75" accuracy="4.75" attackSpeed="250" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="3584.547554" magical="1748.708651" />
|
||||
<speed>
|
||||
@ -1965,118 +2013,253 @@
|
||||
</drop>
|
||||
</dropLists>
|
||||
</npc>
|
||||
<npc id="29048" level="85" type="Npc" name="Evil Spirit">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<npc id="29048" level="85" type="Monster" name="Evil Spirit">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<vitals hp="82844" hpRegen="1.03" mp="2177" mpRegen="1.03"/>
|
||||
<attack physical="1637.21079615435" magical="1151.5428303933" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="1637.38608949103" magical="1091.59072648368" evasion="3"/>
|
||||
<attribute>
|
||||
<attack type="WIND" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="150" holy="200" dark="200" default="220"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
<walk ground="10"/>
|
||||
<run ground="1"/>
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
<hitTime>500</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<status undying="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="2"/><!-- Magic Creatures -->
|
||||
<skill id="5464" level="1"/><!-- Wind Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="CORPSE" clanHelpRange="1000" isAggressive="true" aggroRange="6000">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
<radius normal="40"/>
|
||||
<height normal="100"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29049" level="85" type="Npc" name="Evil Spirit">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<npc id="29049" level="85" type="Monster" name="Evil Spirit">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<vitals hp="82844" hpRegen="1.03" mp="2177" mpRegen="1.03"/>
|
||||
<attack physical="1637.21079615435" magical="1151.5428303933" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="1637.38608949103" magical="1091.59072648368" evasion="3"/>
|
||||
<attribute>
|
||||
<attack type="WIND" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="150" holy="200" dark="200" default="220"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
<walk ground="10"/>
|
||||
<run ground="1"/>
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
<hitTime>500</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<status undying="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="2"/><!-- Magic Creatures -->
|
||||
<skill id="5464" level="1"/><!-- Wind Attacks -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="CORPSE" clanHelpRange="1000" isAggressive="true" aggroRange="6000">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
<radius normal="40"/>
|
||||
<height normal="100"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29050" level="85" type="Npc" name="Halisha's Breath">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<npc id="29050" level="85" type="Monster" name="Halisha's Breath">
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<vitals hp="12996" hpRegen="1.01" mp="20560" mpRegen="3.03"/>
|
||||
<attack physical="1556.78628597682" magical="1073.71405840992" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="642.236873936287" magical="428.157916018841" evasion="1"/>
|
||||
<attribute>
|
||||
<attack type="DARK" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="200" holy="150" dark="200" default="220"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
<walk ground="30"/>
|
||||
<run ground="200"/>
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<status undying="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="3"/><!-- Light Armor Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="9"/><!-- Demons -->
|
||||
<skill id="5467" level="1"/><!-- Dark Attacks -->
|
||||
<skill id="5009" level="1"/><!-- Frintezza Ghost Fighter -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED" aggroRange="450" clanHelpRange="2000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
<radius normal="23" grown="32"/>
|
||||
<height normal="40" grown="50"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29051" level="85" type="Npc" name="Halisha's Breath">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<sex>FEMALE</sex>
|
||||
<npc id="29051" level="85" type="Monster" name="Halisha's Breath">
|
||||
<race>DEMONIC</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<vitals hp="12996" hpRegen="1.01" mp="20560" mpRegen="3.03"/>
|
||||
<attack physical="1556.78628597682" magical="1073.71405840992" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="642.236873936287" magical="428.157916018841" evasion="1"/>
|
||||
<attribute>
|
||||
<attack type="DARK" value="280"/>
|
||||
<defence fire="200" water="200" wind="200" earth="200" holy="150" dark="200" default="220"/>
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
<walk ground="30"/>
|
||||
<run ground="200"/>
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
<hitTime>430</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<status undying="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/><!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="3"/><!-- Light Armor Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="9"/><!-- Demons -->
|
||||
<skill id="5467" level="1"/><!-- Dark Attacks -->
|
||||
<skill id="5010" level="1"/><!-- Frintezza Ghost Mage -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED" aggroRange="450" clanHelpRange="2000" isAggressive="true">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
<radius normal="23"/>
|
||||
<height normal="40"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29052" level="85" type="Npc" name="">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<npc id="29052" level="85" type="Monster" name="">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<vitals hp="3960" hpRegen="8.585" mp="2056" mpRegen="3.03"/>
|
||||
<attack physical="1216.23928591939" magical="838.839108132747" random="5" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="3864.96881246637" magical="2826.6352584085" evasion="1"/>
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
<walk ground="10"/>
|
||||
<run ground="1"/>
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
<hitTime>500</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<status attackable="false"/>
|
||||
<skillList>
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="2"/><!-- Magic Creatures -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
<radius normal="1"/>
|
||||
<height normal="35"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29053" level="85" type="Npc" name="">
|
||||
<!-- AUTO GENERATED NPC TODO: FIX IT -->
|
||||
<race>ETC</race>
|
||||
<npc id="29053" level="84" type="Monster" name="">
|
||||
<race>CONSTRUCT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="8446" hpRegen="10.5" mp="2355" mpRegen="3.6" />
|
||||
<vitals hp="5448" hpRegen="8.5" mp="2036" mpRegen="3"/>
|
||||
<attack physical="1456.32495032888" magical="994.481156766258" random="10" critical="4" accuracy="5" attackSpeed="253" type="FIST" range="40" distance="80" width="120"/>
|
||||
<defence physical="383.421920892449" magical="280.571522036227"/>
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="120" />
|
||||
<walk ground="10"/>
|
||||
<run ground="1"/>
|
||||
</speed>
|
||||
<attack physical="1950.2231755595" magical="1331.5869440987" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="405.85106382979" magical="297.0297029703" />
|
||||
<hitTime>500</hitTime>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false" />
|
||||
<status attackable="false"/>
|
||||
<skillList>
|
||||
<skill id="4408" level="1"/><!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/><!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/><!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/><!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/><!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/><!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/><!-- Standard Type -->
|
||||
<skill id="4415" level="1"/><!-- Bare Hands -->
|
||||
<skill id="4416" level="2"/><!-- Magic Creatures -->
|
||||
<skill id="5004" level="1"/><!-- Dimensional Stun -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED">
|
||||
<clanList>
|
||||
<clan>FRINTESSA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="12" />
|
||||
<radius normal="1"/>
|
||||
<height normal="58"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29066" level="1" type="GrandBoss" name="Antharas">
|
||||
@ -2189,6 +2372,49 @@
|
||||
</drop>
|
||||
</dropLists>
|
||||
</npc>
|
||||
<npc id="29061" displayId="31842" level="70" type="Teleporter" name="Teleportation Cubic">
|
||||
<race>ETC</race>
|
||||
<sex>ETC</sex>
|
||||
<stats str="88" int="79" dex="55" wit="78" con="82" men="78">
|
||||
<vitals hp="2444" hpRegen="7.5" mp="1345" mpRegen="2.7"/>
|
||||
<attack physical="688.86373" magical="470.40463" random="10" critical="4" accuracy="4.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120"/>
|
||||
<defence physical="295.91597" magical="216.53847"/>
|
||||
<speed>
|
||||
<walk ground="50"/>
|
||||
<run ground="120"/>
|
||||
</speed>
|
||||
<abnormalResist physical="10" magical="10"/>
|
||||
</stats>
|
||||
<status attackable="false"/>
|
||||
<skillList>
|
||||
<skill id="4045" level="1"/>
|
||||
<!-- Resist Full Magic Attack -->
|
||||
<skill id="4408" level="1"/>
|
||||
<!-- HP Increase (1x) -->
|
||||
<skill id="4409" level="1"/>
|
||||
<!-- MP Increase (1x) -->
|
||||
<skill id="4410" level="11"/>
|
||||
<!-- Average P. Atk. -->
|
||||
<skill id="4411" level="11"/>
|
||||
<!-- Average M. Atk. -->
|
||||
<skill id="4412" level="11"/>
|
||||
<!-- Average P. Def. -->
|
||||
<skill id="4413" level="11"/>
|
||||
<!-- Average M. Def. -->
|
||||
<skill id="4414" level="2"/>
|
||||
<!-- Standard Type -->
|
||||
<skill id="4415" level="3"/>
|
||||
<!-- One-handed Sword -->
|
||||
<skill id="4416" level="19"/>
|
||||
<!-- Others -->
|
||||
</skillList>
|
||||
<exCrtEffect>true</exCrtEffect>
|
||||
<ai type="BALANCED" clanHelpRange="300" isAggressive="true" aggroRange="500"/>
|
||||
<collision>
|
||||
<radius normal="40"/>
|
||||
<height normal="80"/>
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="29067" level="1" type="GrandBoss" name="Antharas">
|
||||
<parameters>
|
||||
<param name="ultra_respawn_time" value="5" />
|
||||
|
@ -453,6 +453,57 @@
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="5015" toLevel="6" name="Frintezza Charge">
|
||||
<!-- Demon $s1 charge. -->
|
||||
<affectRange>
|
||||
<value level="1">400</value>
|
||||
<value level="2">500</value>
|
||||
<value level="3">700</value>
|
||||
<value level="4">400</value>
|
||||
<value level="5">500</value>
|
||||
<value level="6">700</value>
|
||||
</affectRange>
|
||||
<castRange>150</castRange>
|
||||
<coolTime>
|
||||
<value level="1">0</value>
|
||||
<value level="2">0</value>
|
||||
<value level="3">0</value>
|
||||
<value level="4">1500</value>
|
||||
<value level="5">1500</value>
|
||||
<value level="6">1500</value>
|
||||
</coolTime>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<effectRange>650</effectRange>
|
||||
<attributeType>DARK</attributeType>
|
||||
<attributeValue>180</attributeValue>
|
||||
<fanRange>
|
||||
<value level="1">0;0;400;150</value>
|
||||
<value level="2">0;0;500;170</value>
|
||||
<value level="3">0;0;700;200</value>
|
||||
<value level="4">0;0;400;150</value>
|
||||
<value level="5">0;0;500;170</value>
|
||||
<value level="6">0;0;700;200</value>
|
||||
</fanRange>
|
||||
<hitTime>1500</hitTime>
|
||||
<magicLvl>85</magicLvl>
|
||||
<operateType>A1</operateType>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<targetType>ENEMY</targetType>
|
||||
<affectScope>SQUARE</affectScope>
|
||||
<affectObject>NOT_FRIEND</affectObject>
|
||||
<effects>
|
||||
<effect name="PhysicalAttack">
|
||||
<power>
|
||||
<value level="1">48761</value>
|
||||
<value level="2">52970</value>
|
||||
<value level="3">68074</value>
|
||||
<value level="4">48761</value>
|
||||
<value level="5">52970</value>
|
||||
<value level="6">68074</value>
|
||||
</power>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="5016" toLevel="1" name="Yoke of Scarlet">
|
||||
<!-- Yoked status. -->
|
||||
<icon>icon.skill5016</icon>
|
||||
|
@ -24,4 +24,11 @@
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="14768" toLevel="1" name="Raid Boss (Lv. 85)">
|
||||
<!-- After being killed by Frintezza, who lost his soul to the devil, it was reborn as a monster called Scarlet van Halisha. It has lost sense of self, and it only makes sacrifices for the demon Halisha. -->
|
||||
<icon>icon.skillraid</icon>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>-5</magicCriticalRate>
|
||||
<magicLvl>1</magicLvl>
|
||||
</skill>
|
||||
</list>
|
||||
|
@ -287,21 +287,6 @@
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="magicCriticalRate" type="xs:byte" />
|
||||
<xs:element name="trait">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="targetType">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
@ -412,9 +397,7 @@
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:unsignedByte">
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
@ -511,9 +494,9 @@
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromSubLevel" type="xs:unsignedShort" use="optional" />
|
||||
<xs:attribute name="toSubLevel" type="xs:unsignedShort" use="optional" />
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="optional" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
@ -618,7 +601,6 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="item" type="xs:string" />
|
||||
<xs:element name="expMultiplier" type="xs:decimal" />
|
||||
<xs:element name="halfLethal">
|
||||
<xs:complexType mixed="true">
|
||||
@ -969,7 +951,7 @@
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="isAdvanced" type="xs:boolean" />
|
||||
<xs:element name="DERANGEMENT">
|
||||
<xs:element name="BLEED">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
@ -984,7 +966,7 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="BLEED">
|
||||
<xs:element name="DERANGEMENT">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
@ -1367,6 +1349,9 @@
|
||||
<xs:element name="PHYSICAL_ATTACK_SPEED" type="xs:unsignedByte" />
|
||||
<xs:element name="MAGIC_ATTACK_SPEED" type="xs:unsignedByte" />
|
||||
<xs:element name="transformationId" type="xs:unsignedByte" />
|
||||
<xs:element name="distance" type="xs:unsignedByte" />
|
||||
<xs:element name="speed" type="xs:unsignedShort" />
|
||||
<xs:element name="knockDown" type="xs:boolean" />
|
||||
<xs:element name="despawnDelay" type="xs:unsignedInt" />
|
||||
<xs:element name="normal" type="xs:unsignedByte" />
|
||||
<xs:element name="ride" type="xs:unsignedShort" />
|
||||
@ -1446,6 +1431,7 @@
|
||||
<xs:element name="PSYCHIC" type="xs:unsignedByte" />
|
||||
<xs:element name="canKill" type="xs:boolean" />
|
||||
<xs:element name="VALAKAS" type="xs:byte" />
|
||||
<xs:element name="item" type="xs:string" />
|
||||
<xs:element name="FIST" type="xs:unsignedByte" />
|
||||
<xs:element name="ROOT_PHYSICALLY">
|
||||
<xs:complexType>
|
||||
@ -1464,11 +1450,8 @@
|
||||
</xs:element>
|
||||
<xs:element name="blockedActions" type="xs:byte" />
|
||||
<xs:element name="lifeTime" type="xs:unsignedShort" />
|
||||
<xs:element name="speed" type="xs:unsignedShort" />
|
||||
<xs:element name="delay" type="xs:unsignedShort" />
|
||||
<xs:element name="abnormalType" type="xs:string" />
|
||||
<xs:element name="distance" type="xs:unsignedByte" />
|
||||
<xs:element name="knockDown" type="xs:boolean" />
|
||||
<xs:element name="hp" type="xs:unsignedByte" />
|
||||
<xs:element name="mp" type="xs:unsignedByte" />
|
||||
<xs:element name="cp" type="xs:unsignedByte" />
|
||||
@ -1501,6 +1484,21 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="trait">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="abnormalVisualEffect">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
@ -1564,7 +1562,21 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="fanRange" type="xs:string" />
|
||||
<xs:element name="fanRange">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="level" type="xs:unsignedByte" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="itemConsumeCount">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
@ -1768,7 +1780,6 @@
|
||||
<xs:element name="channelingStart" type="xs:decimal" />
|
||||
<xs:element name="channelingTickInterval" type="xs:unsignedByte" />
|
||||
<xs:element name="removedOnDamage" type="xs:boolean" />
|
||||
<xs:element name="removedOnUnequipWeapon" type="xs:boolean" />
|
||||
<xs:element name="removedOnAnyActionExceptMove" type="xs:boolean" />
|
||||
<xs:element name="itemConsumeSteps" type="xs:unsignedByte" />
|
||||
<xs:element name="soulMaxConsumeCount" type="xs:unsignedByte" />
|
||||
@ -1852,26 +1863,7 @@
|
||||
<xs:element maxOccurs="unbounded" name="effect">
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element minOccurs="0" name="amount">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="value">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="required" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="required" />
|
||||
<xs:attribute name="fromSubLevel" type="xs:unsignedShort" use="required" />
|
||||
<xs:attribute name="toSubLevel" type="xs:unsignedShort" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element minOccurs="0" name="mode" type="xs:string" />
|
||||
<xs:element minOccurs="0" name="power">
|
||||
<xs:element name="power">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence minOccurs="0">
|
||||
<xs:element maxOccurs="unbounded" name="value">
|
||||
@ -1890,10 +1882,6 @@
|
||||
<xs:element minOccurs="0" name="ticks" type="xs:unsignedByte" />
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromSubLevel" type="xs:unsignedShort" use="optional" />
|
||||
<xs:attribute name="toSubLevel" type="xs:unsignedShort" use="optional" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
Loading…
Reference in New Issue
Block a user