Sync with L2jServer HighFive Oct 10th 2015.
This commit is contained in:
@ -18,9 +18,7 @@
|
||||
*/
|
||||
package handlers.admincommandhandlers;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
@ -123,16 +121,18 @@ public class AdminEventEngine implements IAdminCommandHandler
|
||||
{
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||
|
||||
DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(Config.DATAPACK_ROOT + "events/" + eventName)));
|
||||
BufferedReader inbr = new BufferedReader(new InputStreamReader(in));
|
||||
adminReply.setFile("en", "html/mods/EventEngine/Participation.htm");
|
||||
adminReply.replace("%eventName%", eventName);
|
||||
adminReply.replace("%eventCreator%", inbr.readLine());
|
||||
adminReply.replace("%eventInfo%", inbr.readLine());
|
||||
adminReply.replace("npc_%objectId%_event_participate", "admin_event"); // Weird, but nice hack, isnt it? :)
|
||||
adminReply.replace("button value=\"Participate\"", "button value=\"Back\"");
|
||||
activeChar.sendPacket(adminReply);
|
||||
inbr.close();
|
||||
try (FileInputStream fis = new FileInputStream(Config.DATAPACK_ROOT + "events/" + eventName);
|
||||
InputStreamReader isr = new InputStreamReader(fis);
|
||||
BufferedReader br = new BufferedReader(isr))
|
||||
{
|
||||
adminReply.setFile("en", "html/mods/EventEngine/Participation.htm");
|
||||
adminReply.replace("%eventName%", eventName);
|
||||
adminReply.replace("%eventCreator%", br.readLine());
|
||||
adminReply.replace("%eventInfo%", br.readLine());
|
||||
adminReply.replace("npc_%objectId%_event_participate", "admin_event"); // Weird, but nice hack, isnt it? :)
|
||||
adminReply.replace("button value=\"Participate\"", "button value=\"Back\"");
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -165,12 +165,12 @@ public class AdminEventEngine implements IAdminCommandHandler
|
||||
{
|
||||
try
|
||||
{
|
||||
FileOutputStream file = new FileOutputStream(new File(Config.DATAPACK_ROOT, "events/" + tempName));
|
||||
PrintStream p = new PrintStream(file);
|
||||
p.println(activeChar.getName());
|
||||
p.println(tempBuffer);
|
||||
file.close();
|
||||
p.close();
|
||||
try (FileOutputStream file = new FileOutputStream(new File(Config.DATAPACK_ROOT, "events/" + tempName));
|
||||
PrintStream p = new PrintStream(file))
|
||||
{
|
||||
p.println(activeChar.getName());
|
||||
p.println(tempBuffer);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -476,7 +476,7 @@ public class AdminEventEngine implements IAdminCommandHandler
|
||||
{
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||
|
||||
final String replyMSG = StringUtil.concat("<html><title>[ L2J EVENT ENGINE ]</title><body>" + "<br><center><button value=\"Create NEW event \" action=\"bypass -h admin_event_new\" width=150 height=32 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<center><br><font color=LEVEL>Stored Events:</font><br></center>", showStoredEvents(), "</body></html>");
|
||||
final String replyMSG = StringUtil.concat("<html><title>[ EVENT ENGINE ]</title><body>" + "<br><center><button value=\"Create NEW event \" action=\"bypass -h admin_event_new\" width=150 height=32 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<center><br><font color=LEVEL>Stored Events:</font><br></center>", showStoredEvents(), "</body></html>");
|
||||
adminReply.setHtml(replyMSG);
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
|
@ -18,8 +18,8 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.l2jserver.gameserver.model.StatsSet;
|
||||
import com.l2jserver.gameserver.model.actor.L2Attackable;
|
||||
@ -64,29 +64,15 @@ public final class RandomizeHate extends AbstractEffect
|
||||
return;
|
||||
}
|
||||
|
||||
L2Attackable effectedMob = (L2Attackable) info.getEffected();
|
||||
final List<L2Character> targetList = new ArrayList<>();
|
||||
for (L2Character cha : info.getEffected().getKnownList().getKnownCharacters())
|
||||
{
|
||||
if ((cha != null) && (cha != effectedMob) && (cha != info.getEffector()))
|
||||
{
|
||||
// Aggro cannot be transfered to a mob of the same faction.
|
||||
if (cha.isAttackable() && ((L2Attackable) cha).isInMyClan(effectedMob))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
targetList.add(cha);
|
||||
}
|
||||
}
|
||||
// if there is no target, exit function
|
||||
if (targetList.isEmpty())
|
||||
final L2Attackable effectedMob = (L2Attackable) info.getEffected();
|
||||
final List<L2Character> aggroList = effectedMob.getAggroList().keySet().stream().filter(c -> c != info.getEffector()).collect(Collectors.toList());
|
||||
if (aggroList.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Choosing randomly a new target
|
||||
final L2Character target = targetList.get(Rnd.get(targetList.size()));
|
||||
final L2Character target = aggroList.get(Rnd.get(aggroList.size()));
|
||||
final int hate = effectedMob.getHating(info.getEffector());
|
||||
effectedMob.stopHating(info.getEffector());
|
||||
effectedMob.addDamageHate(target, 0, hate);
|
||||
|
@ -30,7 +30,6 @@ import com.l2jserver.gameserver.enums.QuestType;
|
||||
import com.l2jserver.gameserver.model.AggroInfo;
|
||||
import com.l2jserver.gameserver.model.L2CommandChannel;
|
||||
import com.l2jserver.gameserver.model.actor.L2Attackable;
|
||||
import com.l2jserver.gameserver.model.actor.L2Character;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.items.L2Item;
|
||||
@ -66,6 +65,7 @@ public final class Q00456_DontKnowDontCare extends Quest
|
||||
private static final int MIN_LEVEL = 80;
|
||||
private static final Map<Integer, Integer> MONSTER_NPCS = new HashMap<>();
|
||||
private static final Map<Integer, Integer> MONSTER_ESSENCES = new HashMap<>();
|
||||
|
||||
static
|
||||
{
|
||||
MONSTER_NPCS.put(25725, DRAKE_LORD_CORPSE);
|
||||
@ -75,6 +75,7 @@ public final class Q00456_DontKnowDontCare extends Quest
|
||||
MONSTER_ESSENCES.put(BEHEMOTH_LEADER_CORPSE, BEHEMOTH_LEADER_ESSENCE);
|
||||
MONSTER_ESSENCES.put(DRAGON_BEAST_CORPSE, DRAGON_BEAST_ESSENCE);
|
||||
}
|
||||
|
||||
// Rewards
|
||||
private static final int[] WEAPONS =
|
||||
{
|
||||
@ -280,10 +281,9 @@ public final class Q00456_DontKnowDontCare extends Quest
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
Map<L2Character, AggroInfo> playerList = ((L2Attackable) npc).getAggroList();
|
||||
Set<Integer> allowedPlayers = new HashSet<>();
|
||||
|
||||
for (AggroInfo aggro : playerList.values())
|
||||
for (AggroInfo aggro : ((L2Attackable) npc).getAggroList().values())
|
||||
{
|
||||
if ((aggro.getAttacker() == null) || !aggro.getAttacker().isPlayer())
|
||||
{
|
||||
|
265
trunk/dist/game/data/stats/npcs/29100-29199.xml
vendored
265
trunk/dist/game/data/stats/npcs/29100-29199.xml
vendored
@ -3529,45 +3529,81 @@
|
||||
</ai>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<item id="15558" min="1" max="1" chance="1.6658" /> <!-- Periel Sword -->
|
||||
<item id="21894" min="1" max="1" chance="1.40845" /> <!-- Ice Queen's Tiara -->
|
||||
<item id="15559" min="1" max="1" chance="0.70422" /> <!-- Skull Edge -->
|
||||
<item id="15560" min="1" max="1" chance="0.7571" /> <!-- Vigwik Axe -->
|
||||
<item id="15561" min="1" max="1" chance="0.70422" /> <!-- Devilish Maul -->
|
||||
<item id="15562" min="1" max="1" chance="1.3124" /> <!-- Feather Eye Blade -->
|
||||
<item id="15563" min="1" max="1" chance="3.52112" /> <!-- Octo Claw -->
|
||||
<item id="15564" min="1" max="1" chance="0.9591" /> <!-- Doubletop Spear -->
|
||||
<item id="15565" min="1" max="1" chance="2.8169" /> <!-- Rising Star -->
|
||||
<item id="15566" min="1" max="1" chance="1.1105" /> <!-- Black Visage -->
|
||||
<item id="15567" min="1" max="1" chance="1.3629" /> <!-- Veniplant Sword -->
|
||||
<item id="14160" min="1" max="1" chance="9.85915" /> <!-- Sealed Vesper Earring -->
|
||||
<item id="15568" min="1" max="1" chance="0.9591" /> <!-- Skull Carnium Bow -->
|
||||
<item id="14161" min="1" max="1" chance="9.85915" /> <!-- Sealed Vesper Necklace -->
|
||||
<item id="14162" min="1" max="1" chance="9.15492" /> <!-- Sealed Vesper Ring -->
|
||||
<item id="21714" min="1" max="1" chance="0.70422" /> <!-- Sealed Cloak of Freya -->
|
||||
<item id="13143" min="1" max="1" chance="3.52112" /> <!-- Sealed Vesper Helmet -->
|
||||
<item id="13144" min="1" max="1" chance="2.11267" /> <!-- Sealed Vesper Leather Helmet -->
|
||||
<item id="16025" min="1" max="1" chance="19.01408" /> <!-- Freya's Necklace -->
|
||||
<item id="14105" min="1" max="1" chance="7.74647" /> <!-- Sealed Vesper Breastplate -->
|
||||
<item id="13145" min="1" max="1" chance="1.40845" /> <!-- Sealed Vesper Circlet -->
|
||||
<item id="14106" min="1" max="1" chance="8.4507" /> <!-- Sealed Vesper Leather Breastplate -->
|
||||
<item id="14107" min="1" max="1" chance="8.4507" /> <!-- Sealed Vesper Tunic -->
|
||||
<item id="14108" min="1" max="1" chance="9.85915" /> <!-- Sealed Vesper Gaiters -->
|
||||
<item id="14109" min="1" max="1" chance="2.8169" /> <!-- Sealed Vesper Gauntlets -->
|
||||
<item id="14110" min="1" max="1" chance="1.40845" /> <!-- Sealed Vesper Boots -->
|
||||
<item id="14111" min="1" max="1" chance="2.8169" /> <!-- Sealed Vesper Shield -->
|
||||
<item id="14112" min="1" max="1" chance="4.92957" /> <!-- Sealed Vesper Leather Leggings -->
|
||||
<item id="14113" min="1" max="1" chance="2.11267" /> <!-- Sealed Vesper Leather Gloves -->
|
||||
<item id="14114" min="1" max="1" chance="3.52112" /> <!-- Sealed Vesper Leather Boots -->
|
||||
<item id="14115" min="1" max="1" chance="7.04225" /> <!-- Sealed Vesper Stockings -->
|
||||
<item id="16164" min="1" max="1" chance="58.0514" /> <!-- Life Stone - Lv. 86 -->
|
||||
<item id="14116" min="1" max="1" chance="4.22535" /> <!-- Sealed Vesper Gloves -->
|
||||
<item id="16165" min="1" max="1" chance="38.4149" /> <!-- Mid-grade Life Stone - Lv. 86 -->
|
||||
<item id="14117" min="1" max="1" chance="1.40845" /> <!-- Sealed Vesper Shoes -->
|
||||
<item id="45929" min="1" max="1" chance="94.36619" /> <!-- No Name -->
|
||||
<item id="6577" min="1" max="1" chance="0.7571" /> <!-- Blessed Scroll: Enchant Weapon (S-grade) -->
|
||||
<item id="6578" min="1" max="1" chance="2.8169" /> <!-- Blessed Scroll: Enchant Armor (S-grade) -->
|
||||
<item id="13887" min="1" max="1" chance="1.40845" /> <!-- Sealed Vesper Sigil -->
|
||||
<group chance="15">
|
||||
<item id="15560" min="1" max="1" chance="9.1" /> <!-- Vigwik Axe -->
|
||||
<item id="15561" min="1" max="1" chance="9.09" /> <!-- Devilish Maul -->
|
||||
<item id="15562" min="1" max="1" chance="9.09" /> <!-- Feather Eye Blade -->
|
||||
<item id="15563" min="1" max="1" chance="9.09" /> <!-- Octo Claw -->
|
||||
<item id="15564" min="1" max="1" chance="9.09" /> <!-- Doubletop Spear -->
|
||||
<item id="15565" min="1" max="1" chance="9.09" /> <!-- Rising Star -->
|
||||
<item id="15566" min="1" max="1" chance="9.09" /> <!-- Black Visage -->
|
||||
<item id="15567" min="1" max="1" chance="9.09" /> <!-- Veniplant Sword -->
|
||||
<item id="15568" min="1" max="1" chance="9.09" /> <!-- Skull Carnium Bow -->
|
||||
<item id="15558" min="1" max="1" chance="9.09" /> <!-- Periel Sword -->
|
||||
<item id="15559" min="1" max="1" chance="9.09" /> <!-- Skull Edge -->
|
||||
</group>
|
||||
<group chance="50">
|
||||
<item id="13143" min="1" max="1" chance="9.1" /> <!-- Sealed Vesper Helmet -->
|
||||
<item id="13144" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Leather Helmet -->
|
||||
<item id="13145" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Circlet -->
|
||||
<item id="14109" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Gauntlet -->
|
||||
<item id="14113" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Leather Gloves -->
|
||||
<item id="14116" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Gloves -->
|
||||
<item id="14110" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Boots -->
|
||||
<item id="14114" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Leather Boots -->
|
||||
<item id="14117" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Shoes -->
|
||||
<item id="14111" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Shield -->
|
||||
<item id="13887" min="1" max="1" chance="9.09" /> <!-- Sealed Vesper Sigil -->
|
||||
</group>
|
||||
<group chance="50">
|
||||
<item id="14105" min="1" max="1" chance="16.7" /> <!-- Sealed Vesper Breastplate -->
|
||||
<item id="14106" min="1" max="1" chance="16.66" /> <!-- Sealed Vesper Leather Breastplate -->
|
||||
<item id="14107" min="1" max="1" chance="16.66" /> <!-- Sealed Vesper Tunic -->
|
||||
<item id="14108" min="1" max="1" chance="16.66" /> <!-- Sealed Vesper Gaiters -->
|
||||
<item id="14112" min="1" max="1" chance="16.66" /> <!-- Sealed Vesper Leather Leggings -->
|
||||
<item id="14115" min="1" max="1" chance="16.66" /> <!-- Sealed Vesper Stockings -->
|
||||
</group>
|
||||
<group chance="50">
|
||||
<item id="14162" min="1" max="1" chance="33.4" /> <!-- Sealed Vesper Ring -->
|
||||
<item id="14160" min="1" max="1" chance="33.3" /> <!-- Sealed Vesper Earring -->
|
||||
<item id="14161" min="1" max="1" chance="33.3" /> <!-- Sealed Vesper Necklace -->
|
||||
</group>
|
||||
<group chance="4.1076">
|
||||
<item id="6577" min="1" max="1" chance="13.0435" /> <!-- Blessed Scroll: Enchant Weapon (S-Grade) -->
|
||||
<item id="6578" min="1" max="1" chance="86.9565" /> <!-- Blessed Scroll: Enchant Armor (S-Grade) -->
|
||||
</group>
|
||||
<group chance="100">
|
||||
<item id="16164" min="2" max="4" chance="60" /> <!-- Life Stone - Level 86 -->
|
||||
<item id="16165" min="2" max="4" chance="40" /> <!-- Mid-Grade Life Stone - Level 86 -->
|
||||
</group>
|
||||
<group chance="25">
|
||||
<item id="16025" min="1" max="1" chance="100" /> <!-- Necklace of Freya -->
|
||||
</group>
|
||||
<group chance="2.8">
|
||||
<item id="21894" min="1" max="1" chance="50" /> <!-- Ice Queen's Tiara -->
|
||||
<item id="21714" min="1" max="1" chance="50" /> <!-- Sealed Cloak of Freya -->
|
||||
</group>
|
||||
<group chance="55.241">
|
||||
<item id="14189" min="1" max="1" chance="5.5701" /> <!-- Forgotten Scroll - Hurricane Armor -->
|
||||
<item id="14202" min="1" max="1" chance="5.3457" /> <!-- Forgotten Scroll - Maximum Sonic Focus -->
|
||||
<item id="14194" min="1" max="1" chance="5.342" /> <!-- Forgotten Scroll - Blessing of Eva -->
|
||||
<item id="14190" min="1" max="1" chance="5.3077" /> <!-- Forgotten Scroll - Vampiric Mist -->
|
||||
<item id="14198" min="1" max="1" chance="5.3022" /> <!-- Forgotten Scroll - Song of Purification -->
|
||||
<item id="14206" min="1" max="1" chance="5.295" /> <!-- Forgotten Scroll - Spirit of the Phantom -->
|
||||
<item id="14197" min="1" max="1" chance="5.2805" /> <!-- Forgotten Scroll - Seal of Limit -->
|
||||
<item id="14199" min="1" max="1" chance="5.2733" /> <!-- Forgotten Scroll - Dance of Berserker -->
|
||||
<item id="14195" min="1" max="1" chance="5.2696" /> <!-- Forgotten Scroll - Lord of Vampire -->
|
||||
<item id="14204" min="1" max="1" chance="5.2515" /> <!-- Forgotten Scroll - Spirit of the Cat -->
|
||||
<item id="14200" min="1" max="1" chance="5.2443" /> <!-- Forgotten Scroll - Summon Imperial Phoenix -->
|
||||
<item id="14227" min="1" max="1" chance="5.2298" /> <!-- Forgotten Scroll - Great Fury -->
|
||||
<item id="14201" min="1" max="1" chance="5.2244" /> <!-- Forgotten Scroll - Maximum Force Focus -->
|
||||
<item id="14222" min="1" max="1" chance="5.2081" /> <!-- This Forgotten Scroll can be used by Fortune Seekers level 83 and above to learn Lucky Strike. -->
|
||||
<item id="14225" min="1" max="1" chance="5.1954" /> <!-- Forgotten Scroll - Counter Critical -->
|
||||
<item id="14226" min="1" max="1" chance="5.1936" /> <!-- Forgotten Scroll - Onslaught of Pa'agrio -->
|
||||
<item id="14223" min="1" max="1" chance="5.1791" /> <!-- This Forgotten Scroll can be used by Doombringers level 83 and above to learn Eye for Eye. -->
|
||||
<item id="14193" min="1" max="1" chance="5.161" /> <!-- Forgotten Scroll - Sublime Self Sacrifice -->
|
||||
<item id="14205" min="1" max="1" chance="5.1266" /> <!-- Forgotten Scroll - Spirit of the Unicorn -->
|
||||
</group>
|
||||
</death>
|
||||
</drop_lists>
|
||||
<collision>
|
||||
@ -3698,69 +3734,94 @@
|
||||
</collision>
|
||||
<drop_lists>
|
||||
<death>
|
||||
<item id="13143" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Helmet -->
|
||||
<item id="13144" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Leather Helmet -->
|
||||
<item id="13145" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Circlet -->
|
||||
<item id="14109" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Gauntlet -->
|
||||
<item id="14113" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Leather Gloves -->
|
||||
<item id="14116" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Gloves -->
|
||||
<item id="14110" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Boots -->
|
||||
<item id="14114" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Leather Boots -->
|
||||
<item id="14117" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Shoes -->
|
||||
<item id="14111" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Shield -->
|
||||
<item id="13887" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Sigil -->
|
||||
<item id="14105" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Breastplate -->
|
||||
<item id="14106" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Leather Breastplate -->
|
||||
<item id="14107" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Tunic -->
|
||||
<item id="14108" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Gaiters -->
|
||||
<item id="14112" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Leather Leggings -->
|
||||
<item id="14115" min="1" max="1" chance="1.775" /> <!-- Sealed Vesper Stockings -->
|
||||
<item id="15694" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Helmet -->
|
||||
<item id="15695" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Leather Helmet -->
|
||||
<item id="15696" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Circlet -->
|
||||
<item id="15703" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Gauntlet -->
|
||||
<item id="15704" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Leather Gloves -->
|
||||
<item id="15705" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Gloves -->
|
||||
<item id="15706" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Boots -->
|
||||
<item id="15707" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Leather Boots -->
|
||||
<item id="15708" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Shoes -->
|
||||
<item id="15710" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Shield -->
|
||||
<item id="15709" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Sigil -->
|
||||
<item id="15697" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Breastplate -->
|
||||
<item id="15698" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Leather Breastplate -->
|
||||
<item id="15699" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Tunic -->
|
||||
<item id="15700" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Gaiter -->
|
||||
<item id="15701" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Leather Legging -->
|
||||
<item id="15702" min="1" max="1" chance="4.175" /> <!-- Sealed Moirai Stockings -->
|
||||
<item id="14162" min="1" max="1" chance="19" /> <!-- Sealed Vesper Ring -->
|
||||
<item id="14160" min="1" max="1" chance="17" /> <!-- Sealed Vesper Earring -->
|
||||
<item id="14161" min="1" max="1" chance="14.25" /> <!-- Sealed Vesper Necklace -->
|
||||
<item id="21892" min="1" max="1" chance="2.990" /> <!-- Pirate King Hat -->
|
||||
<item id="21935" min="1" max="1" chance="0.075" /> <!-- Butcher Blades -->
|
||||
<item id="1538" min="1" max="30" chance="100" /> <!-- Blessed Scroll of Escape -->
|
||||
<item id="3936" min="1" max="10" chance="100" /> <!-- Blessed Scroll of Resurrection -->
|
||||
<item id="45929" min="1" max="6" chance="59.65" />
|
||||
<!--Spirit Stone -->
|
||||
<item id="6659" min="1" max="1" chance="0.075" /> <!-- Earring of Zaken -->
|
||||
<item id="21713" min="1" max="1" chance="3" /> <!-- Zaken's Sealed Cloak -->
|
||||
<item id="14170" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Seed of Revenge -->
|
||||
<item id="14175" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Exciting Adventure -->
|
||||
<item id="14185" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Wild Shot -->
|
||||
<item id="14188" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Frost Armor -->
|
||||
<item id="14171" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Hell Scream -->
|
||||
<item id="14180" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Ghost Piercing -->
|
||||
<item id="14179" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Arrow Rain -->
|
||||
<item id="14178" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Flame Hawk -->
|
||||
<item id="14183" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Demolition Impact -->
|
||||
<item id="14172" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Spirit of the Phoenix -->
|
||||
<item id="14187" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Flame Armor -->
|
||||
<item id="14184" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Golem Armor -->
|
||||
<item id="14181" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Dread Pool -->
|
||||
<item id="14174" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Pain of Shilen -->
|
||||
<item id="14182" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Force of Destruction -->
|
||||
<item id="14176" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Wind Riding -->
|
||||
<item id="14173" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Eva's Will -->
|
||||
<item id="14186" min="1" max="1" chance="2.525" /> <!-- Forgotten Scroll: Lightning Shock -->
|
||||
<group chance="30">
|
||||
<item id="13143" min="1" max="1" chance="5.92" /> <!-- Sealed Vesper Helmet -->
|
||||
<item id="13144" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Leather Helmet -->
|
||||
<item id="13145" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Circlet -->
|
||||
<item id="14109" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Gauntlet -->
|
||||
<item id="14113" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Leather Gloves -->
|
||||
<item id="14116" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Gloves -->
|
||||
<item id="14110" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Boots -->
|
||||
<item id="14114" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Leather Boots -->
|
||||
<item id="14117" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Shoes -->
|
||||
<item id="14111" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Shield -->
|
||||
<item id="13887" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Sigil -->
|
||||
<item id="14105" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Breastplate -->
|
||||
<item id="14106" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Leather Breastplate -->
|
||||
<item id="14107" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Tunic -->
|
||||
<item id="14108" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Gaiters -->
|
||||
<item id="14112" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Leather Leggings -->
|
||||
<item id="14115" min="1" max="1" chance="5.88" /> <!-- Sealed Vesper Stockings -->
|
||||
</group>
|
||||
<group chance="70">
|
||||
<item id="15694" min="1" max="1" chance="5.92" /> <!-- Sealed Moirai Helmet -->
|
||||
<item id="15695" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Leather Helmet -->
|
||||
<item id="15696" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Circlet -->
|
||||
<item id="15703" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Gauntlet -->
|
||||
<item id="15704" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Leather Gloves -->
|
||||
<item id="15705" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Gloves -->
|
||||
<item id="15706" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Boots -->
|
||||
<item id="15707" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Leather Boots -->
|
||||
<item id="15708" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Shoes -->
|
||||
<item id="15710" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Shield -->
|
||||
<item id="15709" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Sigil -->
|
||||
<item id="15697" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Breastplate -->
|
||||
<item id="15698" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Leather Breastplate -->
|
||||
<item id="15699" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Tunic -->
|
||||
<item id="15700" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Gaiter -->
|
||||
<item id="15701" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Leather Legging -->
|
||||
<item id="15702" min="1" max="1" chance="5.88" /> <!-- Sealed Moirai Stockings -->
|
||||
</group>
|
||||
<group chance="50">
|
||||
<item id="14162" min="1" max="1" chance="33.4" /> <!-- Sealed Vesper Ring -->
|
||||
<item id="14160" min="1" max="1" chance="33.3" /> <!-- Sealed Vesper Earring -->
|
||||
<item id="14161" min="1" max="1" chance="33.3" /> <!-- Sealed Vesper Necklace -->
|
||||
</group>
|
||||
<group chance="100">
|
||||
<item id="1538" min="1" max="30" chance="100" /> <!-- Blessed Scroll of Escape -->
|
||||
</group>
|
||||
<group chance="100">
|
||||
<item id="3936" min="1" max="10" chance="100" /> <!-- Blessed Scroll of Resurrection -->
|
||||
</group>
|
||||
<group chance="100">
|
||||
<item id="57" min="9000000" max="1100000" chance="100" /> <!-- Adena -->
|
||||
</group>
|
||||
<group chance="100">
|
||||
<item id="16162" min="2" max="4" chance="60" /> <!-- High-Grade Life Stone - Level 85 -->
|
||||
<item id="16166" min="2" max="4" chance="40" /> <!-- High-Grade Life Stone - Level 86 -->
|
||||
</group>
|
||||
<group chance="0.09">
|
||||
<item id="21712" min="1" max="1" chance="100" /> <!-- Blessed Earring of Zaken -->
|
||||
</group>
|
||||
<group chance="0.1">
|
||||
<item id="21935" min="1" max="1" chance="100" /> <!-- Butcher Blades -->
|
||||
</group>
|
||||
<group chance="2.893">
|
||||
<item id="21713" min="1" max="1" chance="100" /> <!-- Sealed Cloak of Zaken -->
|
||||
</group>
|
||||
<group chance="3">
|
||||
<item id="21892" min="1" max="1" chance="100" /> <!-- Pirate King Hat -->
|
||||
</group>
|
||||
<group chance="52.264">
|
||||
<item id="14170" min="1" max="1" chance="5.7764" /> <!-- Forgotten Scroll - Seed of Revenge -->
|
||||
<item id="14177" min="1" max="1" chance="5.6387" /> <!-- Forgotten Scroll - Ghost Walking -->
|
||||
<item id="14181" min="1" max="1" chance="5.6195" /> <!-- Forgotten Scroll - Dread Pool -->
|
||||
<item id="14179" min="1" max="1" chance="5.6081" /> <!-- Forgotten Scroll - Arrow Rain -->
|
||||
<item id="14175" min="1" max="1" chance="5.6081" /> <!-- Forgotten Scroll - Exciting Adventure -->
|
||||
<item id="14176" min="1" max="1" chance="5.6042" /> <!-- Forgotten Scroll - Wind Riding -->
|
||||
<item id="14182" min="1" max="1" chance="5.6042" /> <!-- Forgotten Scroll - Force of Destruction -->
|
||||
<item id="14178" min="1" max="1" chance="5.587" /> <!-- Forgotten Scroll - Flame Hawk -->
|
||||
<item id="14173" min="1" max="1" chance="5.5851" /> <!-- Forgotten Scroll - Eva's Will / Touch of Eva -->
|
||||
<item id="14174" min="1" max="1" chance="5.5813" /> <!-- Forgotten Scroll - Pain of Shillien -->
|
||||
<item id="14172" min="1" max="1" chance="5.5641" /> <!-- Forgotten Scroll - Spirit of Phoenix -->
|
||||
<item id="14184" min="1" max="1" chance="5.5354" /> <!-- Forgotten Scroll - Golem Armor -->
|
||||
<item id="14183" min="1" max="1" chance="5.5143" /> <!-- Forgotten Scroll - Demolition Impact -->
|
||||
<item id="14186" min="1" max="1" chance="5.4741" /> <!-- Forgotten Scroll - Lightning Shock -->
|
||||
<item id="14187" min="1" max="1" chance="5.4359" /> <!-- Forgotten Scroll - Flame Armor -->
|
||||
<item id="14188" min="1" max="1" chance="5.4263" /> <!-- Forgotten Scroll - Frost Armor -->
|
||||
<item id="14185" min="1" max="1" chance="5.4244" /> <!-- Forgotten Scroll - Wild Shot -->
|
||||
<item id="14171" min="1" max="1" chance="5.4129" /> <!-- Forgotten Scroll - Hell Scream -->
|
||||
</group>
|
||||
</death>
|
||||
</drop_lists>
|
||||
</npc>
|
||||
|
@ -1595,7 +1595,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0761" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -1630,7 +1630,7 @@
|
||||
<set name="ignoreShld" val="true" />
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="lvlBonusRate" val="1" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="80" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="overHit" val="true" />
|
||||
@ -1675,7 +1675,7 @@
|
||||
<set name="icon" val="icon.skill0763" />
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="lvlBonusRate" val="1" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="87" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="75000" />
|
||||
@ -1793,7 +1793,7 @@
|
||||
<set name="effectPoint" val="679" />
|
||||
<set name="hitTime" val="1000" />
|
||||
<set name="icon" val="icon.skill0768" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="36" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="900000" />
|
||||
@ -1817,7 +1817,7 @@
|
||||
<set name="effectPoint" val="679" />
|
||||
<set name="hitTime" val="1000" />
|
||||
<set name="icon" val="icon.skill0769" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="36" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="900000" />
|
||||
@ -1841,7 +1841,7 @@
|
||||
<set name="effectPoint" val="679" />
|
||||
<set name="hitTime" val="1000" />
|
||||
<set name="icon" val="icon.skill0770" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="36" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="900000" />
|
||||
@ -1869,7 +1869,7 @@
|
||||
<set name="fanRange" val="0,0,900,40" />
|
||||
<set name="hitTime" val="3500" />
|
||||
<set name="icon" val="icon.skill0771" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="160" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="overHit" val="true" />
|
||||
@ -1898,7 +1898,7 @@
|
||||
<set name="effectRange" val="1100" />
|
||||
<set name="hitTime" val="4000" />
|
||||
<set name="icon" val="icon.skill0772" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="160" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="overHit" val="true" />
|
||||
@ -1928,7 +1928,7 @@
|
||||
<set name="fanRange" val="0,0,900,100" />
|
||||
<set name="hitTime" val="3000" />
|
||||
<set name="icon" val="icon.skill0773" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="160" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="overHit" val="true" />
|
||||
@ -2011,7 +2011,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="776" levels="1" name="Force of Destruction">
|
||||
<!-- Confirmed CT2.5 and Partially Updated to H5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="10" />
|
||||
<set name="abnormalTime" val="20" />
|
||||
<set name="abnormalType" val="FORCE_OF_DESTRUCTION" />
|
||||
@ -2027,7 +2027,7 @@
|
||||
<set name="icon" val="icon.skill0776" />
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="lvlBonusRate" val="1" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="37" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="overHit" val="true" />
|
||||
@ -2051,7 +2051,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="777" levels="1" name="Demolition Impact">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="affectRange" val="500" />
|
||||
<set name="baseCritRate" val="15" />
|
||||
<set name="castRange" val="150" />
|
||||
@ -2060,7 +2060,7 @@
|
||||
<set name="fanRange" val="0,0,500,60" />
|
||||
<set name="hitTime" val="1200" />
|
||||
<set name="icon" val="icon.skill0777" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="160" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="overHit" val="true" />
|
||||
@ -2209,7 +2209,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="784" levels="1" name="Spirit of the Phoenix">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="SEED_OF_KNIGHT" />
|
||||
@ -2217,7 +2217,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0784" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -2245,7 +2245,7 @@
|
||||
<set name="hitTime" val="1800" />
|
||||
<set name="hpConsume" val="1253" />
|
||||
<set name="icon" val="icon.skill0785" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="150000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -2273,7 +2273,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="786" levels="1" name="Eva's Will">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="SEED_OF_KNIGHT" />
|
||||
@ -2281,7 +2281,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0786" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -2300,20 +2300,20 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="787" levels="1" name="Touch of Eva">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- set name="castRange" val="40" / -->
|
||||
<!-- set name="effectRange" val="400" / -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="TOUCH_OF_LIFE" />
|
||||
<set name="affectRange" val="1000" />
|
||||
<set name="castRange" val="40" />
|
||||
<set name="effectPoint" val="835" />
|
||||
<set name="effectRange" val="400" />
|
||||
<set name="element" val="4" /> <!-- Holy -->
|
||||
<set name="elementPower" val="20" />
|
||||
<set name="hitTime" val="1800" />
|
||||
<set name="hpConsume" val="1253" />
|
||||
<set name="icon" val="icon.skill0787" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="150000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -2336,7 +2336,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="788" levels="1" name="Pain of Shilen">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="SEED_OF_KNIGHT" />
|
||||
@ -2344,7 +2344,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0788" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -2372,7 +2372,7 @@
|
||||
<set name="hitTime" val="1800" />
|
||||
<set name="hpConsume" val="1253" />
|
||||
<set name="icon" val="icon.skill0789" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="150000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -2409,7 +2409,7 @@
|
||||
<set name="fanRange" val="0,0,900,40" />
|
||||
<set name="hitTime" val="3500" />
|
||||
<set name="icon" val="icon.skill0790" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="120" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="overHit" val="true" />
|
||||
|
@ -327,12 +327,13 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="912" levels="1" name="Summon Imperial Phoenix">
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="hitTime" val="15000" />
|
||||
<set name="icon" val="icon.skill0912" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="itemConsumeCount" val="2" />
|
||||
<set name="itemConsumeId" val="1461" /> <!-- Crystal (A-Grade) -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="145" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="reuseDelay" val="45000" />
|
||||
@ -373,7 +374,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="914" levels="1" name="Song of Purification">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="120" />
|
||||
<set name="abnormalType" val="SONG_OF_PURIFICATION" />
|
||||
@ -382,7 +383,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0914" />
|
||||
<set name="isMagic" val="3" /> <!-- Dance Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="60" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="240000" />
|
||||
@ -399,7 +400,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="915" levels="1" name="Dance of Berserker">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="120" />
|
||||
<set name="abnormalType" val="DANCE_OF_BERSERKER" />
|
||||
@ -408,7 +409,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0915" />
|
||||
<set name="isMagic" val="3" /> <!-- Dance Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="60" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="240000" />
|
||||
@ -478,12 +479,12 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="918" levels="1" name="Maximum Force Focus">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="effectPoint" val="150" />
|
||||
<set name="hitTime" val="900" />
|
||||
<set name="hpConsume" val="80" />
|
||||
<set name="icon" val="icon.skill0918" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="20" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="reuseDelay" val="75000" />
|
||||
@ -502,12 +503,12 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="919" levels="1" name="Maximum Sonic Focus">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="effectPoint" val="150" />
|
||||
<set name="hitTime" val="900" />
|
||||
<set name="hpConsume" val="80" />
|
||||
<set name="icon" val="icon.skill0919" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="20" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="reuseDelay" val="75000" />
|
||||
@ -1090,7 +1091,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="947" levels="1" name="Lucky Strike">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="affectLimit" val="3-6" />
|
||||
<set name="affectRange" val="150" />
|
||||
<set name="baseCritRate" val="5" />
|
||||
@ -1100,7 +1101,7 @@
|
||||
<set name="effectRange" val="400" />
|
||||
<set name="hitTime" val="1700" />
|
||||
<set name="icon" val="icon.skill0947" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="70" />
|
||||
<set name="nextActionAttack" val="true" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
@ -1123,7 +1124,7 @@
|
||||
<set name="effectPoint" val="340" />
|
||||
<set name="hitTime" val="500" />
|
||||
<set name="icon" val="icon.skill0948" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="75000" />
|
||||
@ -1154,7 +1155,7 @@
|
||||
<set name="icon" val="icon.skill0949" />
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="lvlBonusRate" val="1" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="35" />
|
||||
<set name="nextActionAttack" val="true" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
|
@ -3312,7 +3312,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1492" levels="1" name="Flame Armor">
|
||||
<!-- Confirmed CT2.5 and Partially Updated to H5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="1200" />
|
||||
<set name="abnormalType" val="ELEMENTAL_ARMOR" />
|
||||
@ -3320,7 +3320,7 @@
|
||||
<set name="hitTime" val="3000" />
|
||||
<set name="icon" val="icon.skill1492" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -3339,7 +3339,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1493" levels="1" name="Frost Armor">
|
||||
<!-- Confirmed CT2.5 and Partially Updated to H5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="1200" />
|
||||
<set name="abnormalType" val="ELEMENTAL_ARMOR" />
|
||||
@ -3347,7 +3347,7 @@
|
||||
<set name="hitTime" val="3000" />
|
||||
<set name="icon" val="icon.skill1493" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -3366,7 +3366,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1494" levels="1" name="Hurricane Armor">
|
||||
<!-- Confirmed CT2.5 and Partially Updated to H5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="1200" />
|
||||
<set name="abnormalType" val="ELEMENTAL_ARMOR" />
|
||||
@ -3374,7 +3374,7 @@
|
||||
<set name="hitTime" val="3000" />
|
||||
<set name="icon" val="icon.skill1494" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -3408,7 +3408,7 @@
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="lvlBonusRate" val="2" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="145" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="power" val="117" />
|
||||
|
@ -156,7 +156,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1505" levels="1" name="Sublime Self-Sacrifice">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="2" />
|
||||
<set name="abnormalTime" val="15" />
|
||||
<set name="abnormalType" val="INVINCIBILITY" />
|
||||
@ -167,7 +167,7 @@
|
||||
<set name="hpConsume" val="4000" />
|
||||
<set name="icon" val="icon.skill1505" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="174" />
|
||||
<set name="mpInitialConsume" val="44" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -188,14 +188,14 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1506" levels="1" name="Blessing of Eva">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="castRange" val="400" />
|
||||
<set name="effectPoint" val="668" />
|
||||
<set name="effectRange" val="900" />
|
||||
<set name="hitTime" val="3000" />
|
||||
<set name="icon" val="icon.skill1506" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="58" />
|
||||
<set name="mpInitialConsume" val="15" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
@ -232,7 +232,7 @@
|
||||
<set name="hitTime" val="4000" />
|
||||
<set name="icon" val="icon.skill1507" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -1373,8 +1373,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1542" levels="1" name="Counter Critical">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- NOTE: Description in H5 Client is wrong -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="1200" />
|
||||
<set name="abnormalType" val="COUNTER_CRITICAL" />
|
||||
@ -1384,7 +1383,7 @@
|
||||
<set name="hitTime" val="4000" />
|
||||
<set name="icon" val="icon.skill1542" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="58" />
|
||||
<set name="mpInitialConsume" val="15" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -1403,9 +1402,9 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1543" levels="1" name="Great Fury">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="icon" val="icon.skill1543" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="PASSIVE" />
|
||||
<for>
|
||||
<effect name="TriggerSkillBySkill">
|
||||
|
@ -1087,7 +1087,7 @@
|
||||
<set name="targetType" val="NONE" />
|
||||
</skill>
|
||||
<skill id="5561" levels="3" name="Seed of Revenge">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<table name="#abnormalLvls"> 2 3 4 </table>
|
||||
<table name="#activationChance"> 10 10 0 </table>
|
||||
<table name="#cAtk"> 1 1 1.25 </table>
|
||||
@ -1100,7 +1100,7 @@
|
||||
<set name="icon" val="#icons" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<for>
|
||||
@ -1117,7 +1117,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5562" levels="3" name="Spirit of the Phoenix">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<table name="#abnormalLvls"> 2 3 4 </table>
|
||||
<table name="#activationChance"> 10 10 0 </table>
|
||||
<table name="#elementRes"> 0 30 30 </table>
|
||||
@ -1130,7 +1130,7 @@
|
||||
<set name="icon" val="#icons" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<for>
|
||||
@ -1148,7 +1148,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5563" levels="3" name="Eva's Will">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<table name="#abnormalLvls"> 2 3 4 </table>
|
||||
<table name="#activationChance"> 10 10 0 </table>
|
||||
<table name="#icons"> icon.skill0786 icon.skill0786_2 icon.skill0786_3 </table>
|
||||
@ -1161,7 +1161,7 @@
|
||||
<set name="icon" val="#icons" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<for>
|
||||
@ -1178,7 +1178,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5564" levels="3" name="Pain of Shilen">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<table name="#abnormalLvls"> 2 3 4 </table>
|
||||
<table name="#absorbDam"> 0 0 8 </table>
|
||||
<table name="#activationChance"> 10 10 0 </table>
|
||||
@ -1191,7 +1191,7 @@
|
||||
<set name="icon" val="#icons" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<for>
|
||||
@ -1246,13 +1246,13 @@
|
||||
<set name="targetType" val="NONE" />
|
||||
</skill>
|
||||
<skill id="5567" levels="1" name="Flame Armor">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="castRange" val="400" />
|
||||
<set name="effectRange" val="900" />
|
||||
<set name="icon" val="icon.skill1492" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="power" val="47" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
@ -1262,7 +1262,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5568" levels="1" name="Frost Armor">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="3" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="SPEED_DOWN" />
|
||||
@ -1275,7 +1275,7 @@
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="lvlBonusRate" val="2" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<set name="targetType" val="ONE" />
|
||||
@ -1286,7 +1286,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5569" levels="1" name="Hurricane Armor">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="3" />
|
||||
<set name="abnormalTime" val="30" />
|
||||
<set name="abnormalType" val="ATTACK_TIME_UP" />
|
||||
@ -1299,7 +1299,7 @@
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="lvlBonusRate" val="2" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<set name="targetType" val="ONE" />
|
||||
|
@ -745,13 +745,13 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="6059" levels="1" name="Counter Critical">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="8" />
|
||||
<set name="abnormalType" val="COUNTER_CRITICAL_TRIGGER" />
|
||||
<set name="icon" val="icon.skill1542" />
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="15000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -771,7 +771,7 @@
|
||||
<set name="affectRange" val="1000" />
|
||||
<set name="icon" val="icon.skill1543" />
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="15000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -1028,7 +1028,6 @@
|
||||
</skill>
|
||||
<skill id="6092" levels="1" name="Lightning Shock">
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<!-- Lightning Shock end effect. -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="5" />
|
||||
<set name="abnormalType" val="PARALYZE" />
|
||||
@ -1038,7 +1037,7 @@
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<set name="soulMaxConsumeCount" val="5" />
|
||||
|
@ -1725,6 +1725,7 @@
|
||||
<set name="targetType" val="NONE" />
|
||||
</skill>
|
||||
<skill id="23298" levels="1" name="Flame Hawk">
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="10" />
|
||||
<set name="abnormalType" val="FLAME_HAWK" />
|
||||
@ -1732,7 +1733,7 @@
|
||||
<set name="element" val="0" /> <!-- Fire -->
|
||||
<set name="elementPower" val="20" />
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE" />
|
||||
<set name="targetType" val="ONE" />
|
||||
@ -1750,7 +1751,7 @@
|
||||
<set name="element" val="2" /> <!-- Wind -->
|
||||
<set name="elementPower" val="20" />
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE" />
|
||||
<set name="targetType" val="ONE" />
|
||||
|
@ -8,7 +8,7 @@
|
||||
<set name="element" val="5" /> <!-- Dark -->
|
||||
<set name="elementPower" val="20" />
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE" />
|
||||
<set name="targetType" val="ONE" />
|
||||
|
@ -18,9 +18,7 @@
|
||||
*/
|
||||
package handlers.admincommandhandlers;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
@ -123,16 +121,18 @@ public class AdminEventEngine implements IAdminCommandHandler
|
||||
{
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||
|
||||
DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(Config.DATAPACK_ROOT + "events/" + eventName)));
|
||||
BufferedReader inbr = new BufferedReader(new InputStreamReader(in));
|
||||
adminReply.setFile("en", "html/mods/EventEngine/Participation.htm");
|
||||
adminReply.replace("%eventName%", eventName);
|
||||
adminReply.replace("%eventCreator%", inbr.readLine());
|
||||
adminReply.replace("%eventInfo%", inbr.readLine());
|
||||
adminReply.replace("npc_%objectId%_event_participate", "admin_event"); // Weird, but nice hack, isnt it? :)
|
||||
adminReply.replace("button value=\"Participate\"", "button value=\"Back\"");
|
||||
activeChar.sendPacket(adminReply);
|
||||
inbr.close();
|
||||
try (FileInputStream fis = new FileInputStream(Config.DATAPACK_ROOT + "events/" + eventName);
|
||||
InputStreamReader isr = new InputStreamReader(fis);
|
||||
BufferedReader br = new BufferedReader(isr))
|
||||
{
|
||||
adminReply.setFile("en", "html/mods/EventEngine/Participation.htm");
|
||||
adminReply.replace("%eventName%", eventName);
|
||||
adminReply.replace("%eventCreator%", br.readLine());
|
||||
adminReply.replace("%eventInfo%", br.readLine());
|
||||
adminReply.replace("npc_%objectId%_event_participate", "admin_event"); // Weird, but nice hack, isnt it? :)
|
||||
adminReply.replace("button value=\"Participate\"", "button value=\"Back\"");
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -165,12 +165,12 @@ public class AdminEventEngine implements IAdminCommandHandler
|
||||
{
|
||||
try
|
||||
{
|
||||
FileOutputStream file = new FileOutputStream(new File(Config.DATAPACK_ROOT, "events/" + tempName));
|
||||
PrintStream p = new PrintStream(file);
|
||||
p.println(activeChar.getName());
|
||||
p.println(tempBuffer);
|
||||
file.close();
|
||||
p.close();
|
||||
try (FileOutputStream file = new FileOutputStream(new File(Config.DATAPACK_ROOT, "events/" + tempName));
|
||||
PrintStream p = new PrintStream(file))
|
||||
{
|
||||
p.println(activeChar.getName());
|
||||
p.println(tempBuffer);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -476,7 +476,7 @@ public class AdminEventEngine implements IAdminCommandHandler
|
||||
{
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||
|
||||
final String replyMSG = StringUtil.concat("<html><title>[ L2J EVENT ENGINE ]</title><body>" + "<br><center><button value=\"Create NEW event \" action=\"bypass -h admin_event_new\" width=150 height=32 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<center><br><font color=LEVEL>Stored Events:</font><br></center>", showStoredEvents(), "</body></html>");
|
||||
final String replyMSG = StringUtil.concat("<html><title>[ EVENT ENGINE ]</title><body>" + "<br><center><button value=\"Create NEW event \" action=\"bypass -h admin_event_new\" width=150 height=32 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<center><br><font color=LEVEL>Stored Events:</font><br></center>", showStoredEvents(), "</body></html>");
|
||||
adminReply.setHtml(replyMSG);
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import com.l2jserver.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jserver.gameserver.model.entity.Instance;
|
||||
import com.l2jserver.gameserver.model.entity.TvTEvent;
|
||||
import com.l2jserver.gameserver.model.holders.SummonRequestHolder;
|
||||
import com.l2jserver.gameserver.model.olympiad.OlympiadManager;
|
||||
import com.l2jserver.gameserver.model.skills.BuffInfo;
|
||||
import com.l2jserver.gameserver.model.zone.ZoneId;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
@ -124,7 +125,7 @@ public final class CallPc extends AbstractEffect
|
||||
return false;
|
||||
}
|
||||
|
||||
if (target.isInOlympiadMode())
|
||||
if (target.isInOlympiadMode() || OlympiadManager.getInstance().isRegisteredInComp(target))
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.A_USER_PARTICIPATING_IN_THE_OLYMPIAD_CANNOT_USE_SUMMONING_OR_TELEPORTING);
|
||||
return false;
|
||||
|
@ -21,6 +21,8 @@ package handlers.effecthandlers;
|
||||
import com.l2jserver.gameserver.instancemanager.MapRegionManager;
|
||||
import com.l2jserver.gameserver.model.StatsSet;
|
||||
import com.l2jserver.gameserver.model.TeleportWhereType;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2GuardInstance;
|
||||
import com.l2jserver.gameserver.model.conditions.Condition;
|
||||
import com.l2jserver.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jserver.gameserver.model.effects.L2EffectType;
|
||||
@ -61,7 +63,15 @@ public final class Escape extends AbstractEffect
|
||||
return;
|
||||
}
|
||||
|
||||
info.getEffected().teleToLocation(MapRegionManager.getInstance().getTeleToLocation(info.getEffected(), _escapeType), true);
|
||||
info.getEffected().setInstanceId(0);
|
||||
if (info.getEffected() instanceof L2GuardInstance)
|
||||
{
|
||||
info.getEffected().teleToLocation(((L2Npc) info.getEffected()).getSpawn());
|
||||
info.getEffected().setHeading(((L2Npc) info.getEffected()).getSpawn().getHeading());
|
||||
}
|
||||
else
|
||||
{
|
||||
info.getEffected().teleToLocation(MapRegionManager.getInstance().getTeleToLocation(info.getEffected(), _escapeType), true);
|
||||
info.getEffected().setInstanceId(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,8 +18,8 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.l2jserver.gameserver.model.StatsSet;
|
||||
import com.l2jserver.gameserver.model.actor.L2Attackable;
|
||||
@ -64,29 +64,15 @@ public final class RandomizeHate extends AbstractEffect
|
||||
return;
|
||||
}
|
||||
|
||||
L2Attackable effectedMob = (L2Attackable) info.getEffected();
|
||||
final List<L2Character> targetList = new ArrayList<>();
|
||||
for (L2Character cha : info.getEffected().getKnownList().getKnownCharacters())
|
||||
{
|
||||
if ((cha != null) && (cha != effectedMob) && (cha != info.getEffector()))
|
||||
{
|
||||
// Aggro cannot be transfered to a mob of the same faction.
|
||||
if (cha.isAttackable() && ((L2Attackable) cha).isInMyClan(effectedMob))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
targetList.add(cha);
|
||||
}
|
||||
}
|
||||
// if there is no target, exit function
|
||||
if (targetList.isEmpty())
|
||||
final L2Attackable effectedMob = (L2Attackable) info.getEffected();
|
||||
final List<L2Character> aggroList = effectedMob.getAggroList().keySet().stream().filter(c -> c != info.getEffector()).collect(Collectors.toList());
|
||||
if (aggroList.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Choosing randomly a new target
|
||||
final L2Character target = targetList.get(Rnd.get(targetList.size()));
|
||||
final L2Character target = aggroList.get(Rnd.get(aggroList.size()));
|
||||
final int hate = effectedMob.getHating(info.getEffector());
|
||||
effectedMob.stopHating(info.getEffector());
|
||||
effectedMob.addDamageHate(target, 0, hate);
|
||||
|
@ -18,45 +18,47 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import com.l2jserver.gameserver.ThreadPoolManager;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.l2jserver.gameserver.model.StatsSet;
|
||||
import com.l2jserver.gameserver.model.actor.L2Character;
|
||||
import com.l2jserver.gameserver.model.actor.L2Summon;
|
||||
import com.l2jserver.gameserver.model.conditions.Condition;
|
||||
import com.l2jserver.gameserver.model.effects.AbstractEffect;
|
||||
import com.l2jserver.gameserver.model.effects.EffectFlag;
|
||||
import com.l2jserver.gameserver.model.effects.L2EffectType;
|
||||
import com.l2jserver.gameserver.model.skills.BuffInfo;
|
||||
import com.l2jserver.gameserver.model.stats.Stats;
|
||||
|
||||
/**
|
||||
* Servitor Share effect implementation.<br>
|
||||
* Synchronizing effects on player and servitor if one of them gets removed for some reason the same will happen to another. Partner's effect exit is executed in own thread, since there is no more queue to schedule the effects,<br>
|
||||
* partner's effect is called while this effect is still exiting issuing an exit call for the effect, causing a stack over flow.
|
||||
* @author UnAfraid, Zoey76
|
||||
* Servitor Share effect implementation. Have effect only on servitor's but not on pets Important: Only one effect can be used on char per time.
|
||||
* @author Zealar
|
||||
*/
|
||||
public final class ServitorShare extends AbstractEffect
|
||||
{
|
||||
private static final class ScheduledEffectExitTask implements Runnable
|
||||
{
|
||||
private final L2Character _effected;
|
||||
private final int _skillId;
|
||||
|
||||
public ScheduledEffectExitTask(L2Character effected, int skillId)
|
||||
{
|
||||
_effected = effected;
|
||||
_skillId = skillId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
_effected.stopSkillEffects(false, _skillId);
|
||||
}
|
||||
}
|
||||
private final Map<Stats, Double> stats = new HashMap<>(9);
|
||||
|
||||
public ServitorShare(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params)
|
||||
{
|
||||
super(attachCond, applyCond, set, params);
|
||||
for (String key : params.getSet().keySet())
|
||||
{
|
||||
stats.put(Stats.valueOfXml(key), params.getDouble(key, 1.));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart(BuffInfo info)
|
||||
{
|
||||
super.onStart(info);
|
||||
info.getEffected().getActingPlayer().setServitorShare(stats);
|
||||
if (info.getEffected().getActingPlayer().getServitors() != null)
|
||||
{
|
||||
for (L2Summon summon : info.getEffected().getActingPlayer().getServitors().values())
|
||||
{
|
||||
summon.broadcastInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -74,11 +76,13 @@ public final class ServitorShare extends AbstractEffect
|
||||
@Override
|
||||
public void onExit(BuffInfo info)
|
||||
{
|
||||
final L2Character effected = info.getEffected().isSummon() ? ((L2Summon) info.getEffected()).getOwner() : info.getEffected();
|
||||
|
||||
if (effected != null)
|
||||
info.getEffected().getActingPlayer().setServitorShare(null);
|
||||
if (info.getEffected().getServitors() != null)
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleEffect(new ScheduledEffectExitTask(effected, info.getSkill().getId()), 100);
|
||||
for (L2Summon summon : info.getEffected().getActingPlayer().getServitors().values())
|
||||
{
|
||||
summon.broadcastInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ public final class Q00160_NerupasRequest extends Quest
|
||||
private static final int UNOS_RECEIPT = 1027;
|
||||
private static final int CELS_TICKET = 1028;
|
||||
private static final int NIGHTSHADE_LEAF = 1029;
|
||||
// Reward
|
||||
private static final int LESSER_HEALING_POTION = 1060;
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 3;
|
||||
@ -60,7 +61,10 @@ public final class Q00160_NerupasRequest extends Quest
|
||||
if ((qs != null) && event.equals("30370-04.htm"))
|
||||
{
|
||||
qs.startQuest();
|
||||
giveItems(player, SILVERY_SPIDERSILK, 1);
|
||||
if (!hasQuestItems(player, SILVERY_SPIDERSILK))
|
||||
{
|
||||
giveItems(player, SILVERY_SPIDERSILK, 1);
|
||||
}
|
||||
return event;
|
||||
}
|
||||
return null;
|
||||
@ -103,18 +107,17 @@ public final class Q00160_NerupasRequest extends Quest
|
||||
{
|
||||
case NERUPA:
|
||||
{
|
||||
if (hasQuestItems(player, NIGHTSHADE_LEAF))
|
||||
if (hasAtLeastOneQuestItem(player, SILVERY_SPIDERSILK, UNOS_RECEIPT, CELS_TICKET))
|
||||
{
|
||||
htmltext = "30370-05.html";
|
||||
}
|
||||
else if (hasQuestItems(player, NIGHTSHADE_LEAF))
|
||||
{
|
||||
takeItems(player, NIGHTSHADE_LEAF, -1);
|
||||
rewardItems(player, LESSER_HEALING_POTION, 5);
|
||||
addExpAndSp(player, 1000, 0);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = "30370-06.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "30370-05.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case UNOREN:
|
||||
@ -122,7 +125,10 @@ public final class Q00160_NerupasRequest extends Quest
|
||||
if (hasQuestItems(player, SILVERY_SPIDERSILK))
|
||||
{
|
||||
takeItems(player, SILVERY_SPIDERSILK, -1);
|
||||
giveItems(player, UNOS_RECEIPT, 1);
|
||||
if (!hasQuestItems(player, UNOS_RECEIPT))
|
||||
{
|
||||
giveItems(player, UNOS_RECEIPT, 1);
|
||||
}
|
||||
qs.setCond(2, true);
|
||||
htmltext = "30147-01.html";
|
||||
}
|
||||
@ -141,7 +147,10 @@ public final class Q00160_NerupasRequest extends Quest
|
||||
if (hasQuestItems(player, UNOS_RECEIPT))
|
||||
{
|
||||
takeItems(player, UNOS_RECEIPT, -1);
|
||||
giveItems(player, CELS_TICKET, 1);
|
||||
if (!hasQuestItems(player, CELS_TICKET))
|
||||
{
|
||||
giveItems(player, CELS_TICKET, 1);
|
||||
}
|
||||
qs.setCond(3, true);
|
||||
htmltext = "30149-01.html";
|
||||
}
|
||||
@ -160,7 +169,10 @@ public final class Q00160_NerupasRequest extends Quest
|
||||
if (hasQuestItems(player, CELS_TICKET))
|
||||
{
|
||||
takeItems(player, CELS_TICKET, -1);
|
||||
giveItems(player, NIGHTSHADE_LEAF, 1);
|
||||
if (!hasQuestItems(player, NIGHTSHADE_LEAF))
|
||||
{
|
||||
giveItems(player, NIGHTSHADE_LEAF, 1);
|
||||
}
|
||||
qs.setCond(4, true);
|
||||
htmltext = "30152-01.html";
|
||||
|
||||
|
@ -318,7 +318,7 @@
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<set name="targetType" val="SELF" />
|
||||
<cond>
|
||||
<and>
|
||||
<and>
|
||||
<player canSummonServitor="true" />
|
||||
<player hasFreeSummonPoints="4" />
|
||||
</and>
|
||||
@ -1595,7 +1595,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0761" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -1630,7 +1630,7 @@
|
||||
<set name="ignoreShld" val="true" />
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="lvlBonusRate" val="1" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="80" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="overHit" val="true" />
|
||||
@ -1675,7 +1675,7 @@
|
||||
<set name="icon" val="icon.skill0763" />
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="lvlBonusRate" val="1" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="87" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="75000" />
|
||||
@ -1793,7 +1793,7 @@
|
||||
<set name="effectPoint" val="679" />
|
||||
<set name="hitTime" val="1000" />
|
||||
<set name="icon" val="icon.skill0768" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="36" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="900000" />
|
||||
@ -1817,7 +1817,7 @@
|
||||
<set name="effectPoint" val="679" />
|
||||
<set name="hitTime" val="1000" />
|
||||
<set name="icon" val="icon.skill0769" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="36" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="900000" />
|
||||
@ -1841,7 +1841,7 @@
|
||||
<set name="effectPoint" val="679" />
|
||||
<set name="hitTime" val="1000" />
|
||||
<set name="icon" val="icon.skill0770" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="36" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="900000" />
|
||||
@ -1922,7 +1922,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="776" levels="1" name="Force of Destruction">
|
||||
<!-- Confirmed CT2.5 and Partially Updated to H5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="10" />
|
||||
<set name="abnormalTime" val="20" />
|
||||
<set name="abnormalType" val="FORCE_OF_DESTRUCTION" />
|
||||
@ -1938,7 +1938,7 @@
|
||||
<set name="icon" val="icon.skill0776" />
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="lvlBonusRate" val="1" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="37" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="overHit" val="true" />
|
||||
@ -1962,7 +1962,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="777" levels="1" name="Demolition Impact">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="affectRange" val="500" />
|
||||
<set name="baseCritRate" val="15" />
|
||||
<set name="castRange" val="150" />
|
||||
@ -1971,7 +1971,7 @@
|
||||
<set name="fanRange" val="0,0,500,60" />
|
||||
<set name="hitTime" val="1200" />
|
||||
<set name="icon" val="icon.skill0777" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="160" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="overHit" val="true" />
|
||||
@ -2095,7 +2095,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="784" levels="1" name="Spirit of the Phoenix">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="SEED_OF_KNIGHT" />
|
||||
@ -2103,7 +2103,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0784" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -2131,7 +2131,7 @@
|
||||
<set name="hitTime" val="1800" />
|
||||
<set name="hpConsume" val="1253" />
|
||||
<set name="icon" val="icon.skill0785" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="150000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -2159,7 +2159,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="786" levels="1" name="Eva's Will">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="SEED_OF_KNIGHT" />
|
||||
@ -2167,7 +2167,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0786" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -2186,20 +2186,20 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="787" levels="1" name="Touch of Eva">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- set name="castRange" val="40" / -->
|
||||
<!-- set name="effectRange" val="400" / -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="TOUCH_OF_LIFE" />
|
||||
<set name="affectRange" val="1000" />
|
||||
<set name="castRange" val="40" />
|
||||
<set name="effectPoint" val="835" />
|
||||
<set name="effectRange" val="400" />
|
||||
<set name="element" val="4" /> <!-- Holy -->
|
||||
<set name="elementPower" val="20" />
|
||||
<set name="hitTime" val="1800" />
|
||||
<set name="hpConsume" val="1253" />
|
||||
<set name="icon" val="icon.skill0787" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="150000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -2222,7 +2222,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="788" levels="1" name="Pain of Shilen">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="SEED_OF_KNIGHT" />
|
||||
@ -2230,7 +2230,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0788" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -2258,7 +2258,7 @@
|
||||
<set name="hitTime" val="1800" />
|
||||
<set name="hpConsume" val="1253" />
|
||||
<set name="icon" val="icon.skill0789" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="150000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -2295,7 +2295,7 @@
|
||||
<set name="fanRange" val="0,0,900,40" />
|
||||
<set name="hitTime" val="3500" />
|
||||
<set name="icon" val="icon.skill0790" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="120" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="overHit" val="true" />
|
||||
|
@ -327,12 +327,13 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="912" levels="1" name="Summon Imperial Phoenix">
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="hitTime" val="15000" />
|
||||
<set name="icon" val="icon.skill0912" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="itemConsumeCount" val="2" />
|
||||
<set name="itemConsumeId" val="1461" /> <!-- Crystal (A-Grade) -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="145" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="reuseDelay" val="45000" />
|
||||
@ -373,7 +374,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="914" levels="1" name="Song of Purification">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="120" />
|
||||
<set name="abnormalType" val="SONG_OF_PURIFICATION" />
|
||||
@ -382,7 +383,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0914" />
|
||||
<set name="isMagic" val="3" /> <!-- Dance Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="60" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="240000" />
|
||||
@ -399,7 +400,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="915" levels="1" name="Dance of Berserker">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="120" />
|
||||
<set name="abnormalType" val="DANCE_OF_BERSERKER" />
|
||||
@ -408,7 +409,7 @@
|
||||
<set name="hitTime" val="2500" />
|
||||
<set name="icon" val="icon.skill0915" />
|
||||
<set name="isMagic" val="3" /> <!-- Dance Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="60" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="240000" />
|
||||
@ -478,12 +479,12 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="918" levels="1" name="Maximum Force Focus">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="effectPoint" val="150" />
|
||||
<set name="hitTime" val="900" />
|
||||
<set name="hpConsume" val="80" />
|
||||
<set name="icon" val="icon.skill0918" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="20" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="reuseDelay" val="75000" />
|
||||
@ -502,12 +503,12 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="919" levels="1" name="Maximum Sonic Focus">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="effectPoint" val="150" />
|
||||
<set name="hitTime" val="900" />
|
||||
<set name="hpConsume" val="80" />
|
||||
<set name="icon" val="icon.skill0919" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="20" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="reuseDelay" val="75000" />
|
||||
@ -979,7 +980,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="947" levels="1" name="Lucky Strike">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="affectLimit" val="3-6" />
|
||||
<set name="affectRange" val="150" />
|
||||
<set name="baseCritRate" val="5" />
|
||||
@ -989,7 +990,7 @@
|
||||
<set name="effectRange" val="400" />
|
||||
<set name="hitTime" val="1700" />
|
||||
<set name="icon" val="icon.skill0947" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="70" />
|
||||
<set name="nextActionAttack" val="true" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
@ -1012,7 +1013,7 @@
|
||||
<set name="effectPoint" val="340" />
|
||||
<set name="hitTime" val="500" />
|
||||
<set name="icon" val="icon.skill0948" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="75000" />
|
||||
@ -1043,7 +1044,7 @@
|
||||
<set name="icon" val="icon.skill0949" />
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="lvlBonusRate" val="1" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="35" />
|
||||
<set name="nextActionAttack" val="true" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
|
@ -156,7 +156,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1505" levels="1" name="Sublime Self-Sacrifice">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="2" />
|
||||
<set name="abnormalTime" val="15" />
|
||||
<set name="abnormalType" val="INVINCIBILITY" />
|
||||
@ -167,7 +167,7 @@
|
||||
<set name="hpConsume" val="4000" />
|
||||
<set name="icon" val="icon.skill1505" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="174" />
|
||||
<set name="mpInitialConsume" val="44" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -188,14 +188,14 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1506" levels="1" name="Blessing of Eva">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="castRange" val="400" />
|
||||
<set name="effectPoint" val="668" />
|
||||
<set name="effectRange" val="900" />
|
||||
<set name="hitTime" val="3000" />
|
||||
<set name="icon" val="icon.skill1506" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="58" />
|
||||
<set name="mpInitialConsume" val="15" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
@ -232,7 +232,7 @@
|
||||
<set name="hitTime" val="4000" />
|
||||
<set name="icon" val="icon.skill1507" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="29" />
|
||||
<set name="mpInitialConsume" val="8" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -1274,8 +1274,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1542" levels="1" name="Counter Critical">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- NOTE: Description in H5 Client is wrong -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="1200" />
|
||||
<set name="abnormalType" val="COUNTER_CRITICAL" />
|
||||
@ -1285,7 +1284,7 @@
|
||||
<set name="hitTime" val="4000" />
|
||||
<set name="icon" val="icon.skill1542" />
|
||||
<set name="isMagic" val="1" /> <!-- Magic Skill -->
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="mpConsume" val="58" />
|
||||
<set name="mpInitialConsume" val="15" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
@ -1304,9 +1303,9 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="1543" levels="1" name="Great Fury">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="icon" val="icon.skill1543" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="PASSIVE" />
|
||||
<for>
|
||||
<effect name="TriggerSkillBySkill">
|
||||
|
@ -1087,7 +1087,7 @@
|
||||
<set name="targetType" val="NONE" />
|
||||
</skill>
|
||||
<skill id="5561" levels="3" name="Seed of Revenge">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<table name="#abnormalLvls"> 2 3 4 </table>
|
||||
<table name="#activationChance"> 10 10 0 </table>
|
||||
<table name="#cAtk"> 1 1 1.25 </table>
|
||||
@ -1100,7 +1100,7 @@
|
||||
<set name="icon" val="#icons" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<for>
|
||||
@ -1117,7 +1117,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5562" levels="3" name="Spirit of the Phoenix">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<table name="#abnormalLvls"> 2 3 4 </table>
|
||||
<table name="#activationChance"> 10 10 0 </table>
|
||||
<table name="#elementRes"> 0 30 30 </table>
|
||||
@ -1130,7 +1130,7 @@
|
||||
<set name="icon" val="#icons" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<for>
|
||||
@ -1148,7 +1148,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5563" levels="3" name="Eva's Will">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<table name="#abnormalLvls"> 2 3 4 </table>
|
||||
<table name="#activationChance"> 10 10 0 </table>
|
||||
<table name="#icons"> icon.skill0786 icon.skill0786_2 icon.skill0786_3 </table>
|
||||
@ -1161,7 +1161,7 @@
|
||||
<set name="icon" val="#icons" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<for>
|
||||
@ -1178,7 +1178,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5564" levels="3" name="Pain of Shilen">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<table name="#abnormalLvls"> 2 3 4 </table>
|
||||
<table name="#absorbDam"> 0 0 8 </table>
|
||||
<table name="#activationChance"> 10 10 0 </table>
|
||||
@ -1191,7 +1191,7 @@
|
||||
<set name="icon" val="#icons" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<for>
|
||||
@ -1246,13 +1246,13 @@
|
||||
<set name="targetType" val="NONE" />
|
||||
</skill>
|
||||
<skill id="5567" levels="1" name="Flame Armor">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="castRange" val="400" />
|
||||
<set name="effectRange" val="900" />
|
||||
<set name="icon" val="icon.skill1492" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_INSTANT" />
|
||||
<set name="power" val="47" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
@ -1262,7 +1262,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5568" levels="1" name="Frost Armor">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="3" />
|
||||
<set name="abnormalTime" val="60" />
|
||||
<set name="abnormalType" val="SPEED_DOWN" />
|
||||
@ -1275,7 +1275,7 @@
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="lvlBonusRate" val="2" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<set name="targetType" val="ONE" />
|
||||
@ -1286,7 +1286,7 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="5569" levels="1" name="Hurricane Armor">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="3" />
|
||||
<set name="abnormalTime" val="30" />
|
||||
<set name="abnormalType" val="ATTACK_TIME_UP" />
|
||||
@ -1299,7 +1299,7 @@
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="lvlBonusRate" val="2" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<set name="targetType" val="ONE" />
|
||||
|
@ -692,13 +692,13 @@
|
||||
</for>
|
||||
</skill>
|
||||
<skill id="6059" levels="1" name="Counter Critical">
|
||||
<!-- Confirmed CT2.5 -->
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="8" />
|
||||
<set name="abnormalType" val="COUNTER_CRITICAL_TRIGGER" />
|
||||
<set name="icon" val="icon.skill1542" />
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="15000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -718,7 +718,7 @@
|
||||
<set name="affectRange" val="1000" />
|
||||
<set name="icon" val="icon.skill1543" />
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="reuseDelay" val="15000" />
|
||||
<set name="rideState" val="NONE" />
|
||||
@ -975,7 +975,6 @@
|
||||
</skill>
|
||||
<skill id="6092" levels="1" name="Lightning Shock">
|
||||
<!-- Confirmed CT2.5 and Updated to H5 -->
|
||||
<!-- Lightning Shock end effect. -->
|
||||
<set name="abnormalLvl" val="1" />
|
||||
<set name="abnormalTime" val="5" />
|
||||
<set name="abnormalType" val="PARALYZE" />
|
||||
@ -985,7 +984,7 @@
|
||||
<set name="isDebuff" val="true" />
|
||||
<set name="isMagic" val="2" /> <!-- Static Skill -->
|
||||
<set name="isTriggeredSkill" val="true" />
|
||||
<set name="magicLvl" val="81" />
|
||||
<set name="magicLvl" val="83" />
|
||||
<set name="operateType" val="ACTIVE_CONTINUOUS" />
|
||||
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
|
||||
<set name="soulMaxConsumeCount" val="5" />
|
||||
|
@ -737,7 +737,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
||||
* <li>Chose a target and order to attack it with magic skill or physical attack</li>
|
||||
* </ul>
|
||||
*/
|
||||
protected synchronized void thinkAttack()
|
||||
protected void thinkAttack()
|
||||
{
|
||||
final L2Attackable npc = getActiveChar();
|
||||
if (npc.isCastingNow())
|
||||
@ -750,10 +750,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
||||
if ((originalAttackTarget == null) || originalAttackTarget.isAlikeDead())
|
||||
{
|
||||
// Stop hating this target after the attack timeout or if target is dead
|
||||
if (originalAttackTarget != null)
|
||||
{
|
||||
npc.stopHating(originalAttackTarget);
|
||||
}
|
||||
npc.stopHating(originalAttackTarget);
|
||||
|
||||
// Set the AI Intention to AI_INTENTION_ACTIVE
|
||||
setIntention(AI_INTENTION_ACTIVE);
|
||||
|
@ -973,7 +973,7 @@ public class L2CharacterAI extends AbstractAI
|
||||
_actor.setRunning();
|
||||
}
|
||||
|
||||
// If pathfinding enabled the creature will go to the nearest obstacle.
|
||||
// If pathfinding enabled the creature will go to the destination or it will go to the nearest obstacle.
|
||||
final Location destination;
|
||||
if (Config.PATHFINDING > 0)
|
||||
{
|
||||
|
@ -1437,22 +1437,13 @@ public final class SkillTreesData implements IXmlReader
|
||||
*/
|
||||
public boolean isGMSkill(int skillId, int skillLevel)
|
||||
{
|
||||
final Map<Integer, L2SkillLearn> gmSkills = new HashMap<>();
|
||||
gmSkills.putAll(_gameMasterSkillTree);
|
||||
gmSkills.putAll(_gameMasterAuraSkillTree);
|
||||
if (gmSkills.containsKey(SkillData.getSkillHashCode(skillId, skillLevel)))
|
||||
if (skillLevel <= 0)
|
||||
{
|
||||
return true;
|
||||
return _gameMasterSkillTree.values().stream().filter(s -> s.getSkillId() == skillId).findAny().isPresent() //
|
||||
|| _gameMasterAuraSkillTree.values().stream().filter(s -> s.getSkillId() == skillId).findAny().isPresent();
|
||||
}
|
||||
|
||||
for (L2SkillLearn skill : gmSkills.values())
|
||||
{
|
||||
if ((skill.getSkillId() == skillId) && (skillLevel == -1))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
final int hashCode = SkillData.getSkillHashCode(skillId, skillLevel);
|
||||
return _gameMasterSkillTree.containsKey(hashCode) || _gameMasterAuraSkillTree.containsKey(hashCode);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -95,4 +95,10 @@ public final class AggroInfo
|
||||
{
|
||||
return _attacker.getObjectId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "AggroInfo [attacker=" + _attacker + ", hate=" + _hate + ", damage=" + _damage + "]";
|
||||
}
|
||||
}
|
||||
|
@ -111,7 +111,6 @@ public class L2Attackable extends L2Npc
|
||||
// Misc
|
||||
private boolean _mustGiveExpSp;
|
||||
protected int _onKillDelay = 5000;
|
||||
private long _lastAttack;
|
||||
|
||||
/**
|
||||
* Creates an attackable NPC.
|
||||
@ -396,7 +395,7 @@ public class L2Attackable extends L2Npc
|
||||
{
|
||||
try
|
||||
{
|
||||
if (getAggroList().isEmpty())
|
||||
if (_aggroList.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -409,7 +408,7 @@ public class L2Attackable extends L2Npc
|
||||
long totalDamage = 0;
|
||||
// While Iterating over This Map Removing Object is Not Allowed
|
||||
// Go through the _aggroList of the L2Attackable
|
||||
for (AggroInfo info : getAggroList().values())
|
||||
for (AggroInfo info : _aggroList.values())
|
||||
{
|
||||
if (info == null)
|
||||
{
|
||||
@ -710,7 +709,7 @@ public class L2Attackable extends L2Npc
|
||||
}
|
||||
|
||||
// Get the AggroInfo of the attacker L2Character from the _aggroList of the L2Attackable
|
||||
final AggroInfo ai = getAggroList().computeIfAbsent(attacker, AggroInfo::new);
|
||||
final AggroInfo ai = _aggroList.computeIfAbsent(attacker, AggroInfo::new);
|
||||
ai.addDamage(damage);
|
||||
|
||||
// Traps does not cause aggro
|
||||
@ -768,12 +767,8 @@ public class L2Attackable extends L2Npc
|
||||
return;
|
||||
}
|
||||
|
||||
for (AggroInfo ai : getAggroList().values())
|
||||
for (AggroInfo ai : _aggroList.values())
|
||||
{
|
||||
if (ai == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
ai.addHate(amount);
|
||||
}
|
||||
|
||||
@ -788,10 +783,10 @@ public class L2Attackable extends L2Npc
|
||||
return;
|
||||
}
|
||||
|
||||
AggroInfo ai = getAggroList().get(target);
|
||||
AggroInfo ai = _aggroList.get(target);
|
||||
if (ai == null)
|
||||
{
|
||||
_log.info("target " + target + " not present in aggro list of " + this);
|
||||
_log.info("Target " + target + " not present in aggro list of " + this);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -815,7 +810,7 @@ public class L2Attackable extends L2Npc
|
||||
{
|
||||
return;
|
||||
}
|
||||
AggroInfo ai = getAggroList().get(target);
|
||||
AggroInfo ai = _aggroList.get(target);
|
||||
if (ai != null)
|
||||
{
|
||||
ai.stopHate();
|
||||
@ -827,7 +822,7 @@ public class L2Attackable extends L2Npc
|
||||
*/
|
||||
public L2Character getMostHated()
|
||||
{
|
||||
if (getAggroList().isEmpty() || isAlikeDead())
|
||||
if (_aggroList.isEmpty() || isAlikeDead())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -837,7 +832,7 @@ public class L2Attackable extends L2Npc
|
||||
|
||||
// While Interacting over This Map Removing Object is Not Allowed
|
||||
// Go through the aggroList of the L2Attackable
|
||||
for (AggroInfo ai : getAggroList().values())
|
||||
for (AggroInfo ai : _aggroList.values())
|
||||
{
|
||||
if (ai == null)
|
||||
{
|
||||
@ -859,7 +854,7 @@ public class L2Attackable extends L2Npc
|
||||
*/
|
||||
public List<L2Character> get2MostHated()
|
||||
{
|
||||
if (getAggroList().isEmpty() || isAlikeDead())
|
||||
if (_aggroList.isEmpty() || isAlikeDead())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@ -871,7 +866,7 @@ public class L2Attackable extends L2Npc
|
||||
|
||||
// While iterating over this map removing objects is not allowed
|
||||
// Go through the aggroList of the L2Attackable
|
||||
for (AggroInfo ai : getAggroList().values())
|
||||
for (AggroInfo ai : _aggroList.values())
|
||||
{
|
||||
if (ai == null)
|
||||
{
|
||||
@ -901,13 +896,13 @@ public class L2Attackable extends L2Npc
|
||||
|
||||
public List<L2Character> getHateList()
|
||||
{
|
||||
if (getAggroList().isEmpty() || isAlikeDead())
|
||||
if (_aggroList.isEmpty() || isAlikeDead())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
List<L2Character> result = new ArrayList<>();
|
||||
for (AggroInfo ai : getAggroList().values())
|
||||
for (AggroInfo ai : _aggroList.values())
|
||||
{
|
||||
if (ai == null)
|
||||
{
|
||||
@ -926,12 +921,12 @@ public class L2Attackable extends L2Npc
|
||||
*/
|
||||
public int getHating(final L2Character target)
|
||||
{
|
||||
if (getAggroList().isEmpty() || (target == null))
|
||||
if (_aggroList.isEmpty() || (target == null))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
final AggroInfo ai = getAggroList().get(target);
|
||||
final AggroInfo ai = _aggroList.get(target);
|
||||
if (ai == null)
|
||||
{
|
||||
return 0;
|
||||
@ -943,14 +938,14 @@ public class L2Attackable extends L2Npc
|
||||
if (act.isInvisible() || ai.getAttacker().isInvul() || act.isSpawnProtected())
|
||||
{
|
||||
// Remove Object Should Use This Method and Can be Blocked While Interacting
|
||||
getAggroList().remove(target);
|
||||
_aggroList.remove(target);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ai.getAttacker().isVisible() || ai.getAttacker().isInvisible())
|
||||
{
|
||||
getAggroList().remove(target);
|
||||
_aggroList.remove(target);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1127,12 +1122,13 @@ public class L2Attackable extends L2Npc
|
||||
}
|
||||
|
||||
/**
|
||||
* @param player The L2Character searched in the _aggroList of the L2Attackable
|
||||
* @return True if the _aggroList of this L2Attackable contains the L2Character.
|
||||
* Verifies if the creature is in the aggro list.
|
||||
* @param creature the creature
|
||||
* @return {@code true} if the creature is in the aggro list, {@code false} otherwise
|
||||
*/
|
||||
public boolean containsTarget(L2Character player)
|
||||
public boolean isInAggroList(L2Character creature)
|
||||
{
|
||||
return getAggroList().containsKey(player);
|
||||
return _aggroList.containsKey(creature);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1140,7 +1136,7 @@ public class L2Attackable extends L2Npc
|
||||
*/
|
||||
public void clearAggroList()
|
||||
{
|
||||
getAggroList().clear();
|
||||
_aggroList.clear();
|
||||
|
||||
// clear overhit values
|
||||
_overhit = false;
|
||||
@ -1576,16 +1572,6 @@ public class L2Attackable extends L2Npc
|
||||
return _onKillDelay;
|
||||
}
|
||||
|
||||
public long getLastAttack()
|
||||
{
|
||||
return _lastAttack;
|
||||
}
|
||||
|
||||
public void setLastAttack(long lastAttack)
|
||||
{
|
||||
_lastAttack = lastAttack;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the server allows Random Animation.
|
||||
*/
|
||||
|
@ -4538,7 +4538,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
int gty = (originalY - L2World.MAP_MIN_Y) >> 4;
|
||||
|
||||
// Movement checks:
|
||||
// when PATHFINDING > 0, for all characters except mobs returning home (could be changed later to teleport if pathfinding fails)
|
||||
// When pathfinding enabled, for all characters except monsters returning home (could be changed later to teleport if pathfinding fails)
|
||||
if (((Config.PATHFINDING > 0) && (!(isAttackable() && ((L2Attackable) this).isReturningToSpawnPoint()))) //
|
||||
|| (isPlayer() && !(isInVehicle && (distance > 1500))))
|
||||
{
|
||||
@ -5940,7 +5940,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
for (L2Object target : targets)
|
||||
{
|
||||
// EVT_ATTACKED and PvPStatus
|
||||
if (target instanceof L2Character)
|
||||
if (target.isCharacter())
|
||||
{
|
||||
if (skill.getEffectPoint() <= 0)
|
||||
{
|
||||
@ -6069,7 +6069,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
{
|
||||
for (L2Object target : targets)
|
||||
{
|
||||
if (target instanceof L2Character)
|
||||
if (target.isCharacter())
|
||||
{
|
||||
final L2Character creature = (L2Character) target;
|
||||
if (creature.hasAI())
|
||||
|
@ -207,7 +207,7 @@ public abstract class L2Playable extends L2Character
|
||||
|
||||
// Notify L2Character AI
|
||||
getAI().notifyEvent(CtrlEvent.EVT_DEAD);
|
||||
super.updateEffectIcons();
|
||||
updateEffectIcons();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -436,21 +436,21 @@ public final class L2CubicInstance implements IIdentifiable
|
||||
if (ownerTarget.isAttackable())
|
||||
{
|
||||
final L2Attackable attackable = (L2Attackable) ownerTarget;
|
||||
if ((attackable.getAggroList().get(_owner) != null) && !attackable.isDead())
|
||||
if (attackable.isInAggroList(_owner) && !attackable.isDead())
|
||||
{
|
||||
_target = (L2Character) ownerTarget;
|
||||
return;
|
||||
}
|
||||
if (_owner.hasSummon())
|
||||
{
|
||||
if ((attackable.getAggroList().get(pet) != null) && !attackable.isDead())
|
||||
if (attackable.isInAggroList(pet) && !attackable.isDead())
|
||||
{
|
||||
_target = (L2Character) ownerTarget;
|
||||
return;
|
||||
}
|
||||
for (L2Summon servitor : _owner.getServitors().values())
|
||||
{
|
||||
if ((attackable.getAggroList().get(servitor) != null) && !attackable.isDead())
|
||||
if (attackable.isInAggroList(servitor) && !attackable.isDead())
|
||||
{
|
||||
_target = (L2Character) ownerTarget;
|
||||
return;
|
||||
|
@ -164,7 +164,7 @@ public class L2GuardInstance extends L2Attackable
|
||||
else if (interact)
|
||||
{
|
||||
// Check if the L2PcInstance is in the _aggroList of the L2GuardInstance
|
||||
if (containsTarget(player))
|
||||
if (isInAggroList(player))
|
||||
{
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
|
@ -5271,6 +5271,12 @@ public final class L2PcInstance extends L2Playable
|
||||
@Override
|
||||
public boolean doDie(L2Character killer)
|
||||
{
|
||||
// Kill the L2PcInstance
|
||||
if (!super.doDie(killer))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (killer != null)
|
||||
{
|
||||
final L2PcInstance pk = killer.getActingPlayer();
|
||||
@ -5325,12 +5331,6 @@ public final class L2PcInstance extends L2Playable
|
||||
// Clear resurrect xp calculation
|
||||
setExpBeforeDeath(0);
|
||||
|
||||
// Kill the L2PcInstance
|
||||
if (!super.doDie(killer))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Issues drop of Cursed Weapon.
|
||||
if (isCursedWeaponEquipped())
|
||||
{
|
||||
@ -5352,12 +5352,13 @@ public final class L2PcInstance extends L2Playable
|
||||
}
|
||||
else
|
||||
{
|
||||
final boolean insidePvpZone = isInsideZone(ZoneId.PVP) || isInsideZone(ZoneId.SIEGE);
|
||||
final boolean insidePvpZone = isInsideZone(ZoneId.PVP);
|
||||
final boolean insideSiegeZone = isInsideZone(ZoneId.SIEGE);
|
||||
if ((pk == null) || !pk.isCursedWeaponEquipped())
|
||||
{
|
||||
onDieDropItem(killer); // Check if any item should be dropped
|
||||
|
||||
if (!insidePvpZone)
|
||||
if (!insidePvpZone && !insideSiegeZone)
|
||||
{
|
||||
if ((pk != null) && (pk.getClan() != null) && (getClan() != null) && !isAcademyMember() && !(pk.isAcademyMember()))
|
||||
{
|
||||
@ -5380,7 +5381,7 @@ public final class L2PcInstance extends L2Playable
|
||||
}
|
||||
}
|
||||
// If player is Lucky shouldn't get penalized.
|
||||
if (!isLucky() && !insidePvpZone)
|
||||
if (!isLucky() && (insideSiegeZone || !insidePvpZone))
|
||||
{
|
||||
calculateDeathExpPenalty(killer, isAtWarWith(pk));
|
||||
}
|
||||
|
@ -541,7 +541,6 @@ public final class L2TeleporterInstance extends L2Npc
|
||||
return;
|
||||
}
|
||||
|
||||
Calendar cal = Calendar.getInstance();
|
||||
int price = list.getPrice();
|
||||
|
||||
if (player.getLevel() < 41)
|
||||
@ -550,6 +549,7 @@ public final class L2TeleporterInstance extends L2Npc
|
||||
}
|
||||
else if (!list.getIsForNoble())
|
||||
{
|
||||
final Calendar cal = Calendar.getInstance();
|
||||
if ((cal.get(Calendar.HOUR_OF_DAY) >= 20) && (cal.get(Calendar.HOUR_OF_DAY) <= 23) && ((cal.get(Calendar.DAY_OF_WEEK) == 1) || (cal.get(Calendar.DAY_OF_WEEK) == 7)))
|
||||
{
|
||||
price /= 2;
|
||||
@ -563,7 +563,7 @@ public final class L2TeleporterInstance extends L2Npc
|
||||
_log.info("Teleporting player " + player.getName() + " to new location: " + list.getLocX() + ":" + list.getLocY() + ":" + list.getLocZ());
|
||||
}
|
||||
|
||||
player.teleToLocation(list.getLocX(), list.getLocY(), list.getLocZ(), false);
|
||||
player.teleToLocation(list.getLocX(), list.getLocY(), list.getLocZ(), player.getHeading(), -1);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -18,8 +18,6 @@
|
||||
*/
|
||||
package com.l2jserver.gameserver.model.actor.knownlist;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@ -34,9 +32,9 @@ import com.l2jserver.gameserver.util.Util;
|
||||
|
||||
public class CharKnownList extends ObjectKnownList
|
||||
{
|
||||
private Map<Integer, L2PcInstance> _knownPlayers;
|
||||
private Map<Integer, L2Summon> _knownSummons;
|
||||
private Map<Integer, Integer> _knownRelations;
|
||||
private volatile Map<Integer, L2PcInstance> _knownPlayers;
|
||||
private volatile Map<Integer, L2Summon> _knownSummons;
|
||||
private volatile Map<Integer, Integer> _knownRelations;
|
||||
|
||||
public CharKnownList(L2Character activeChar)
|
||||
{
|
||||
@ -50,7 +48,8 @@ public class CharKnownList extends ObjectKnownList
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (object.isPlayer())
|
||||
|
||||
if (object.isPlayer())
|
||||
{
|
||||
getKnownPlayers().put(object.getObjectId(), object.getActingPlayer());
|
||||
getKnownRelations().put(object.getObjectId(), -1);
|
||||
@ -59,7 +58,6 @@ public class CharKnownList extends ObjectKnownList
|
||||
{
|
||||
getKnownSummons().put(object.getObjectId(), (L2Summon) object);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -127,12 +125,10 @@ public class CharKnownList extends ObjectKnownList
|
||||
{
|
||||
if (!fullCheck)
|
||||
{
|
||||
final Collection<L2PcInstance> plrs = getKnownPlayers().values();
|
||||
final Iterator<L2PcInstance> pIter = plrs.iterator();
|
||||
L2PcInstance player;
|
||||
final Iterator<L2PcInstance> pIter = getKnownPlayers().values().iterator();
|
||||
while (pIter.hasNext())
|
||||
{
|
||||
player = pIter.next();
|
||||
L2PcInstance player = pIter.next();
|
||||
if (player == null)
|
||||
{
|
||||
pIter.remove();
|
||||
@ -146,13 +142,10 @@ public class CharKnownList extends ObjectKnownList
|
||||
}
|
||||
}
|
||||
|
||||
final Collection<L2Summon> sums = getKnownSummons().values();
|
||||
final Iterator<L2Summon> sIter = sums.iterator();
|
||||
L2Summon summon;
|
||||
|
||||
final Iterator<L2Summon> sIter = getKnownSummons().values().iterator();
|
||||
while (sIter.hasNext())
|
||||
{
|
||||
summon = sIter.next();
|
||||
L2Summon summon = sIter.next();
|
||||
if (summon == null)
|
||||
{
|
||||
sIter.remove();
|
||||
@ -172,12 +165,10 @@ public class CharKnownList extends ObjectKnownList
|
||||
return;
|
||||
}
|
||||
// Go through knownObjects
|
||||
final Collection<L2Object> objs = getKnownObjects().values();
|
||||
final Iterator<L2Object> oIter = objs.iterator();
|
||||
L2Object object;
|
||||
final Iterator<L2Object> oIter = getKnownObjects().values().iterator();
|
||||
while (oIter.hasNext())
|
||||
{
|
||||
object = oIter.next();
|
||||
L2Object object = oIter.next();
|
||||
if (object == null)
|
||||
{
|
||||
oIter.remove();
|
||||
@ -208,8 +199,7 @@ public class CharKnownList extends ObjectKnownList
|
||||
public List<L2Character> getKnownCharacters()
|
||||
{
|
||||
List<L2Character> result = new LinkedList<>();
|
||||
final Collection<L2Object> objs = getKnownObjects().values();
|
||||
for (L2Object obj : objs)
|
||||
for (L2Object obj : getKnownObjects().values())
|
||||
{
|
||||
if (obj instanceof L2Character)
|
||||
{
|
||||
@ -219,12 +209,10 @@ public class CharKnownList extends ObjectKnownList
|
||||
return result;
|
||||
}
|
||||
|
||||
public Collection<L2Character> getKnownCharactersInRadius(long radius)
|
||||
public List<L2Character> getKnownCharactersInRadius(long radius)
|
||||
{
|
||||
List<L2Character> result = new ArrayList<>();
|
||||
|
||||
final Collection<L2Object> objs = getKnownObjects().values();
|
||||
for (L2Object obj : objs)
|
||||
List<L2Character> result = new LinkedList<>();
|
||||
for (L2Object obj : getKnownObjects().values())
|
||||
{
|
||||
if (obj instanceof L2Character)
|
||||
{
|
||||
@ -234,43 +222,13 @@ public class CharKnownList extends ObjectKnownList
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public final Map<Integer, L2PcInstance> getKnownPlayers()
|
||||
public final List<L2PcInstance> getKnownPlayersInRadius(long radius)
|
||||
{
|
||||
if (_knownPlayers == null)
|
||||
{
|
||||
_knownPlayers = new ConcurrentHashMap<>();
|
||||
}
|
||||
return _knownPlayers;
|
||||
}
|
||||
|
||||
public final Map<Integer, Integer> getKnownRelations()
|
||||
{
|
||||
if (_knownRelations == null)
|
||||
{
|
||||
_knownRelations = new ConcurrentHashMap<>();
|
||||
}
|
||||
return _knownRelations;
|
||||
}
|
||||
|
||||
public final Map<Integer, L2Summon> getKnownSummons()
|
||||
{
|
||||
if (_knownSummons == null)
|
||||
{
|
||||
_knownSummons = new ConcurrentHashMap<>();
|
||||
}
|
||||
return _knownSummons;
|
||||
}
|
||||
|
||||
public final Collection<L2PcInstance> getKnownPlayersInRadius(long radius)
|
||||
{
|
||||
List<L2PcInstance> result = new ArrayList<>();
|
||||
|
||||
final Collection<L2PcInstance> plrs = getKnownPlayers().values();
|
||||
for (L2PcInstance player : plrs)
|
||||
List<L2PcInstance> result = new LinkedList<>();
|
||||
for (L2PcInstance player : getKnownPlayers().values())
|
||||
{
|
||||
if (Util.checkIfInRange((int) radius, getActiveChar(), player, true))
|
||||
{
|
||||
@ -279,4 +237,55 @@ public class CharKnownList extends ObjectKnownList
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public final Map<Integer, L2PcInstance> getKnownPlayers()
|
||||
{
|
||||
if (_knownPlayers == null)
|
||||
{
|
||||
synchronized (this)
|
||||
{
|
||||
if (_knownPlayers == null)
|
||||
{
|
||||
_knownPlayers = new ConcurrentHashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
return _knownPlayers;
|
||||
}
|
||||
|
||||
public final Map<Integer, Integer> getKnownRelations()
|
||||
{
|
||||
if (_knownRelations == null)
|
||||
{
|
||||
synchronized (this)
|
||||
{
|
||||
if (_knownRelations == null)
|
||||
{
|
||||
_knownRelations = new ConcurrentHashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
return _knownRelations;
|
||||
}
|
||||
|
||||
public final Map<Integer, L2Summon> getKnownSummons()
|
||||
{
|
||||
if (_knownSummons == null)
|
||||
{
|
||||
synchronized (this)
|
||||
{
|
||||
if (_knownSummons == null)
|
||||
{
|
||||
_knownSummons = new ConcurrentHashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
return _knownSummons;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String toString()
|
||||
{
|
||||
return getActiveChar() + " Known Objects " + getKnownObjects();
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,6 @@
|
||||
*/
|
||||
package com.l2jserver.gameserver.model.actor.knownlist;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import com.l2jserver.gameserver.ThreadPoolManager;
|
||||
@ -53,16 +52,14 @@ public class NpcKnownList extends CharKnownList
|
||||
|
||||
if (getActiveObject().isNpc() && (object instanceof L2Character))
|
||||
{
|
||||
final L2Npc npc = (L2Npc) getActiveObject();
|
||||
|
||||
// Broadcast correct walking NPC position.
|
||||
if (object.isPlayer() && npc.isMoving() && !npc.isInCombat())
|
||||
if (object.isPlayer() && getActiveChar().isMoving() && !getActiveChar().isInCombat())
|
||||
{
|
||||
((L2Character) object).broadcastPacket(new MoveToLocation(npc));
|
||||
((L2Character) object).broadcastPacket(new MoveToLocation(getActiveChar()));
|
||||
}
|
||||
|
||||
// Notify to scripts
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnNpcCreatureSee(npc, (L2Character) object, object.isSummon()), npc);
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnNpcCreatureSee(getActiveChar(), (L2Character) object, object.isSummon()), getActiveChar());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -120,33 +117,33 @@ public class NpcKnownList extends CharKnownList
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if (getActiveChar() instanceof L2Attackable)
|
||||
if (!getActiveChar().isAttackable())
|
||||
{
|
||||
final L2Attackable monster = (L2Attackable) getActiveChar();
|
||||
if (monster.getAI().getIntention() == CtrlIntention.AI_INTENTION_MOVE_TO)
|
||||
return;
|
||||
}
|
||||
|
||||
final L2Attackable monster = (L2Attackable) getActiveChar();
|
||||
if (monster.getAI().getIntention() != CtrlIntention.AI_INTENTION_MOVE_TO)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (L2PcInstance pl : getKnownPlayers().values())
|
||||
{
|
||||
if (!pl.isDead() && !pl.isInvul() && pl.isInsideRadius(monster, monster.getAggroRange(), true, false) && (monster.isMonster() || (monster.isInstanceTypes(InstanceType.L2GuardInstance) && (pl.getKarma() > 0))))
|
||||
{
|
||||
final Collection<L2PcInstance> players = getKnownPlayers().values();
|
||||
if (players != null)
|
||||
// Send aggroRangeEnter
|
||||
if (monster.getHating(pl) == 0)
|
||||
{
|
||||
for (L2PcInstance pl : players)
|
||||
{
|
||||
if (!pl.isDead() && !pl.isInvul() && pl.isInsideRadius(monster, monster.getAggroRange(), true, false) && (monster.isMonster() || (monster.isInstanceTypes(InstanceType.L2GuardInstance) && (pl.getKarma() > 0))))
|
||||
{
|
||||
// Send aggroRangeEnter
|
||||
if (monster.getHating(pl) == 0)
|
||||
{
|
||||
monster.addDamageHate(pl, 0, 0);
|
||||
}
|
||||
|
||||
// Skip attack for other targets, if one is already chosen for attack
|
||||
if ((monster.getAI().getIntention() != CtrlIntention.AI_INTENTION_ATTACK) && !monster.isCoreAIDisabled())
|
||||
{
|
||||
WalkingManager.getInstance().stopMoving(getActiveChar(), false, true);
|
||||
monster.addDamageHate(pl, 0, 100);
|
||||
monster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, pl, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
monster.addDamageHate(pl, 0, 0);
|
||||
}
|
||||
|
||||
// Skip attack for other targets, if one is already chosen for attack
|
||||
if ((monster.getAI().getIntention() != CtrlIntention.AI_INTENTION_ATTACK) && !monster.isCoreAIDisabled())
|
||||
{
|
||||
WalkingManager.getInstance().stopMoving(getActiveChar(), false, true);
|
||||
monster.addDamageHate(pl, 0, 100);
|
||||
monster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, pl, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,6 @@
|
||||
*/
|
||||
package com.l2jserver.gameserver.model.actor.knownlist;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
@ -26,13 +25,12 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import com.l2jserver.gameserver.model.L2Object;
|
||||
import com.l2jserver.gameserver.model.L2WorldRegion;
|
||||
import com.l2jserver.gameserver.model.actor.L2Character;
|
||||
import com.l2jserver.gameserver.model.actor.L2Playable;
|
||||
import com.l2jserver.gameserver.util.Util;
|
||||
|
||||
public class ObjectKnownList
|
||||
{
|
||||
private final L2Object _activeObject;
|
||||
private Map<Integer, L2Object> _knownObjects;
|
||||
private volatile Map<Integer, L2Object> _knownObjects;
|
||||
|
||||
public ObjectKnownList(L2Object activeObject)
|
||||
{
|
||||
@ -116,18 +114,17 @@ public class ObjectKnownList
|
||||
*/
|
||||
public final void findObjects()
|
||||
{
|
||||
final L2WorldRegion region = getActiveObject().getWorldRegion();
|
||||
if (region == null)
|
||||
final L2WorldRegion worldRegion = getActiveObject().getWorldRegion();
|
||||
if (worldRegion == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (getActiveObject().isPlayable())
|
||||
{
|
||||
for (L2WorldRegion regi : region.getSurroundingRegions()) // offer members of this and surrounding regions
|
||||
for (L2WorldRegion surroundingRegion : worldRegion.getSurroundingRegions()) // offer members of this and surrounding regions
|
||||
{
|
||||
Collection<L2Object> vObj = regi.getVisibleObjects().values();
|
||||
for (L2Object object : vObj)
|
||||
for (L2Object object : surroundingRegion.getVisibleObjects().values())
|
||||
{
|
||||
if (object != getActiveObject())
|
||||
{
|
||||
@ -142,12 +139,11 @@ public class ObjectKnownList
|
||||
}
|
||||
else if (getActiveObject() instanceof L2Character)
|
||||
{
|
||||
for (L2WorldRegion regi : region.getSurroundingRegions()) // offer members of this and surrounding regions
|
||||
for (L2WorldRegion surroundingRegion : worldRegion.getSurroundingRegions()) // offer members of this and surrounding regions
|
||||
{
|
||||
if (regi.isActive())
|
||||
if (surroundingRegion.isActive())
|
||||
{
|
||||
Collection<L2Playable> vPls = regi.getVisiblePlayable().values();
|
||||
for (L2Object object : vPls)
|
||||
for (L2Object object : surroundingRegion.getVisiblePlayable().values())
|
||||
{
|
||||
if (object != getActiveObject())
|
||||
{
|
||||
@ -165,19 +161,10 @@ public class ObjectKnownList
|
||||
*/
|
||||
public void forgetObjects(boolean fullCheck)
|
||||
{
|
||||
// Go through knownObjects
|
||||
final Collection<L2Object> objs = getKnownObjects().values();
|
||||
final Iterator<L2Object> oIter = objs.iterator();
|
||||
L2Object object;
|
||||
final Iterator<L2Object> oIter = getKnownObjects().values().iterator();
|
||||
while (oIter.hasNext())
|
||||
{
|
||||
object = oIter.next();
|
||||
if (object == null)
|
||||
{
|
||||
oIter.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
final L2Object object = oIter.next();
|
||||
if (!fullCheck && !object.isPlayable())
|
||||
{
|
||||
continue;
|
||||
@ -214,7 +201,13 @@ public class ObjectKnownList
|
||||
{
|
||||
if (_knownObjects == null)
|
||||
{
|
||||
_knownObjects = new ConcurrentHashMap<>();
|
||||
synchronized (this)
|
||||
{
|
||||
if (_knownObjects == null)
|
||||
{
|
||||
_knownObjects = new ConcurrentHashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
return _knownObjects;
|
||||
}
|
||||
|
@ -424,4 +424,10 @@ public final class BuffInfo
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "BuffInfo [effector=" + _effector + ", effected=" + _effected + ", skill=" + _skill + ", effects=" + _effects + ", tasks=" + _tasks + ", scheduledFutureTimeTask=" + _scheduledFutureTimeTask + ", abnormalTime=" + _abnormalTime + ", periodStartTicks=" + _periodStartTicks + ", isRemoved=" + _isRemoved + ", isInUse=" + _isInUse + "]";
|
||||
}
|
||||
}
|
||||
|
@ -977,7 +977,7 @@ public final class Skill implements IIdentifiable
|
||||
|
||||
public boolean isBad()
|
||||
{
|
||||
return _effectPoint < 0;
|
||||
return (_effectPoint < 0) && (_targetType != L2TargetType.SELF);
|
||||
}
|
||||
|
||||
public boolean checkCondition(L2Character activeChar, L2Object object, boolean itemOrWeapon)
|
||||
|
Reference in New Issue
Block a user