Sync with L2JServer Jan 26th 2015.

This commit is contained in:
mobius
2015-01-27 01:59:37 +00:00
parent 5d7ab65416
commit bfe682bbe3
63 changed files with 1049 additions and 1306 deletions

View File

@@ -328,7 +328,7 @@ EnableManaPotionSupport = False
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# This option will enable displaying of the local server time for /time command. # This option will enable displaying of the local server time for /time command.
DisplayServerTime = False DisplayServerTime = True
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -341,7 +341,7 @@ ScreenWelcomeMessageEnable = False
# Screen welcome message text to show on character login if enabled # Screen welcome message text to show on character login if enabled
# ('#' for a new line, but message can have max 2 lines) # ('#' for a new line, but message can have max 2 lines)
ScreenWelcomeMessageText = Welcome to L2J server! ScreenWelcomeMessageText = Welcome to our server!
# Show screen welcome message for x seconds when character log in to game if enabled # Show screen welcome message for x seconds when character log in to game if enabled
ScreenWelcomeMessageTime = 10 ScreenWelcomeMessageTime = 10
@@ -397,10 +397,10 @@ AnnouncePvpMsg = $killer has defeated $target
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# This option will enable using of the voice commands .banchat and .unbanchat # This option will enable using of the voice commands .banchat and .unbanchat
# for players with corresponding access level (default: 7). # for players with corresponding access level (default: 100).
# Check access_levels.sql and admin_command_access_rights for details. # Check access_levels.sql and admin_command_access_rights for details.
# Default: False # Default: True
ChatAdmin = False ChatAdmin = True
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------

View File

@@ -5,16 +5,26 @@
# Warning: # Warning:
# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server. # Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
# ---------------------------------------------------------------------------
# Standard Settings (Retail value = 1)
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Item Rates
# ---------------------------------------------------------------------------
# Warning: to achieve old l2j behavior before drops rework you need to enable OldDropBehavior in Custom.properties
# and increase only chance multipliers! Remember if you increase both chance and amount you will have higher rates than expected
# Example: if amount multiplier is 5 and chance multiplier is 5 you will end up with 5*5 = 25 drop rates so be careful!
# Multiplies the amount of items dropped from monster on ground when it dies.
DeathDropAmountMultiplier = 1 DeathDropAmountMultiplier = 1
# Multiplies the amount of items looted from monster when a skill like Sweeper(Spoil) is used.
CorpseDropAmountMultiplier = 1 CorpseDropAmountMultiplier = 1
# Multiplies the amount of items dropped from monster on ground when it dies.
HerbDropAmountMultiplier = 1 HerbDropAmountMultiplier = 1
# Multiplies the chance of items that can be dropped from monster on ground when it dies.
DeathDropChanceMultiplier = 1 DeathDropChanceMultiplier = 1
# Multiplies the chance of items that can be looted from monster when a skill like Sweeper(Spoil) is used.
CorpseDropChanceMultiplier = 1 CorpseDropChanceMultiplier = 1
# Multiplies the chance of items that can be dropped from monster on ground when it dies.
HerbDropChanceMultiplier = 1 HerbDropChanceMultiplier = 1
# List of items affected by custom drop rate by id, used now for Adena rate too. # List of items affected by custom drop rate by id, used now for Adena rate too.
@@ -25,6 +35,11 @@ HerbDropChanceMultiplier = 1
DropAmountMultiplierByItemId = 57,1 DropAmountMultiplierByItemId = 57,1
DropChanceMultiplierByItemId = 57,1 DropChanceMultiplierByItemId = 57,1
# ---------------------------------------------------------------------------
# Standard Settings (Retail value = 1)
# ---------------------------------------------------------------------------
# Experience multiplier # Experience multiplier
RateXp = 1 RateXp = 1
# Skill points multiplier # Skill points multiplier
@@ -79,6 +94,7 @@ RateQuestRewardScroll = 1
RateQuestRewardRecipe = 1 RateQuestRewardRecipe = 1
RateQuestRewardMaterial = 1 RateQuestRewardMaterial = 1
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Vitality system rates. Works only if EnableVitality = True # Vitality system rates. Works only if EnableVitality = True
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -94,6 +110,7 @@ RateVitalityExpMultiplier = 2.
RateVitalityGain = 1. RateVitalityGain = 1.
RateVitalityLost = 1. RateVitalityLost = 1.
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Player Drops (values are set in PERCENTS) # Player Drops (values are set in PERCENTS)
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -131,4 +148,3 @@ KarmaRateDropEquipWeapon = 10
PetXpRate = 1 PetXpRate = 1
PetFoodRate = 1 PetFoodRate = 1
SinEaterXpRate = 1 SinEaterXpRate = 1

View File

@@ -36,14 +36,15 @@ Characters Related:<br1>
<tr> <tr>
<td><button value="Vit Set" action="bypass -h admin_set_vitality $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Vit Set" action="bypass -h admin_set_vitality $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Vit Max" action="bypass -h admin_full_vitality" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Vit Max" action="bypass -h admin_full_vitality" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Get Buffs" action="bypass -h admin_getbuffs $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr> </tr>
<tr> <tr>
<td><button value="Get Buffs" action="bypass -h admin_getbuffs $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Party" action="bypass -h admin_partyinfo" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Quests" action="bypass -h admin_charquestmenu $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Quests" action="bypass -h admin_charquestmenu $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Effects" action="bypass -h admin_admin3" width=82 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Effects" action="bypass -h admin_admin3" width=82 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr> </tr>
<tr> <tr>
<td><button value="Party" action="bypass -h admin_partyinfo" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td></td>
<td></td> <td></td>
<td></td> <td></td>
</tr> </tr>

View File

@@ -28,22 +28,16 @@ Character Based:<br1>
<td><button value="UnPara All" action="bypass -h admin_unpara_all_menu" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="UnPara All" action="bypass -h admin_unpara_all_menu" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr> </tr>
<tr> <tr>
<td><br></td>
</tr>
<tr>
<td><button value="Abnormal" action="bypass -h admin_ave_abnormal $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td></td>
<td></td>
</tr>
<tr>
<td><button value="Social" action="bypass -h admin_social_menu $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Social" action="bypass -h admin_social_menu $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Effect" action="bypass -h admin_effect_menu $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Effect" action="bypass -h admin_effect_menu $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Abnormal" action="bypass -h admin_ave_abnormal $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Displ.Eff." action="bypass -h admin_set_displayeffect_menu $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr> </tr>
<tr> <tr>
<td><button value="Transform" action="bypass -h admin_transform_menu $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Transform" action="bypass -h admin_transform_menu $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Small Head" action="bypass -h admin_shrinkhead" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="SmallHead" action="bypass -h admin_shrinkhead" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Big Head" action="bypass -h admin_bighead" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="BigHead" action="bypass -h admin_bighead" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="DisplayEffect" action="bypass -h admin_set_displayeffect_menu $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td></td>
</tr> </tr>
</table> </table>
<br><br> <br><br>
@@ -63,4 +57,4 @@ World Based:<br1>
</tr></table><br><br> </tr></table><br><br>
<br><br> <br><br>
</center> </center>
</body></html> </body></html>

View File

@@ -26,7 +26,7 @@ Clan Related:<br1>
<tr> <tr>
<td><button value="Delete" action="bypass -h admin_pledge dismiss $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Delete" action="bypass -h admin_pledge dismiss $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Reputation" action="bypass -h admin_pledge rep $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Reputation" action="bypass -h admin_pledge rep $qbox" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Pending leaders" action="bypass -h admin_clan_show_pending" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Pen. leaders" action="bypass -h admin_clan_show_pending" width=82 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr> </tr>
</table> </table>
<br> <br>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- TODO: Remove "castle" attributes from here, it should be loaded from TaxZones -->
<list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/MapRegion.xsd">
<!-- Faeron Town -->
<region name="faeron_village" town="Fearon Village" castle="1" locId="910" bbs="1">
<respawnPoint X="-78615" Y="248628" Z="-3296" />
<respawnPoint X="-80316" Y="248142" Z="-3488" />
<respawnPoint X="-78306" Y="244526" Z="-3688" isChaotic="true" />
<map X="17" Y="25" />
</region>
</list>

View File

@@ -3,40 +3,11 @@
<list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/MapRegion.xsd"> <list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/MapRegion.xsd">
<!-- Talking Island Town --> <!-- Talking Island Town -->
<region name="talking_island_town" town="Talking Island Town" castle="1" locId="910" bbs="1"> <region name="talking_island_town" town="Talking Island Town" castle="1" locId="910" bbs="1">
<respawnPoint X="-83990" Y="243336" Z="-3700" /> <respawnPoint X="-114336" Y="255654" Z="-1512" />
<respawnPoint X="-83964" Y="242680" Z="-3700" /> <respawnPoint X="-114742" Y="255603" Z="-1512" />
<respawnPoint X="-84512" Y="242679" Z="-3700" /> <respawnPoint X="-113990" Y="255700" Z="-1504" />
<respawnPoint X="-84623" Y="243193" Z="-3700" /> <respawnPoint X="-119602" Y="246335" Z="-1232" isChaotic="true" />
<respawnPoint X="-83742" Y="242214" Z="-3700" /> <respawnPoint X="-119756" Y="246335" Z="-1232" isChaotic="true" />
<respawnPoint X="-83537" Y="242537" Z="-3700" />
<respawnPoint X="-83700" Y="242896" Z="-3700" />
<respawnPoint X="-83646" Y="243397" Z="-3700" />
<respawnPoint X="-83808" Y="243637" Z="-3700" />
<respawnPoint X="-84903" Y="243489" Z="-3700" />
<respawnPoint X="-84852" Y="243174" Z="-3700" />
<respawnPoint X="-84892" Y="242479" Z="-3700" />
<respawnPoint X="-84756" Y="242155" Z="-3700" />
<respawnPoint X="-83761" Y="243620" Z="-3700" />
<respawnPoint X="-79411" Y="240677" Z="-3450" isChaotic="true" />
<respawnPoint X="-80480" Y="242640" Z="-3690" isChaotic="true" />
<respawnPoint X="-80336" Y="244656" Z="-3680" isChaotic="true" />
<respawnPoint X="-82464" Y="247248" Z="-3570" isChaotic="true" />
<respawnPoint X="-89522" Y="241696" Z="-3530" isChaotic="true" />
<respawnPoint X="-87056" Y="237952" Z="-3580" isChaotic="true" />
<respawnPoint X="-89536" Y="240336" Z="-3560" isChaotic="true" />
<respawnPoint X="-88208" Y="241360" Z="-3560" isChaotic="true" />
<respawnPoint X="-85328" Y="238080" Z="-3660" isChaotic="true" />
<respawnPoint X="-89760" Y="237408" Z="-3660" isChaotic="true" />
<respawnPoint X="-92976" Y="240560" Z="-3380" isChaotic="true" />
<respawnPoint X="-94448" Y="240944" Z="-3300" isChaotic="true" />
<respawnPoint X="-93552" Y="245296" Z="-3530" isChaotic="true" />
<respawnPoint X="-91584" Y="238480" Z="-3650" isChaotic="true" />
<respawnPoint X="-88720" Y="238976" Z="-3650" isChaotic="true" />
<respawnPoint X="-91760" Y="243664" Z="-3440" isChaotic="true" />
<respawnPoint X="-81680" Y="249696" Z="-3630" isChaotic="true" />
<respawnPoint X="-83808" Y="251264" Z="-3630" isChaotic="true" />
<respawnPoint X="-83328" Y="238304" Z="-3700" isChaotic="true" />
<respawnPoint X="-91296" Y="236272" Z="-3690" isChaotic="true" />
<map X="15" Y="23" /> <map X="15" Y="23" />
<map X="15" Y="24" /> <map X="15" Y="24" />
<map X="15" Y="25" /> <map X="15" Y="25" />
@@ -44,61 +15,6 @@
<map X="16" Y="24" /> <map X="16" Y="24" />
<map X="16" Y="25" /> <map X="16" Y="25" />
<map X="17" Y="24" /> <map X="17" Y="24" />
<map X="17" Y="25" />
<map X="18" Y="25" /> <map X="18" Y="25" />
</region> </region>
<!-- Cedric's Training Hall -->
<region name="Cedric's_Training_Hall" town="Talking Island Town" castle="1" locId="910" bbs="1">
<respawnPoint X="-71338" Y="258271" Z="-3104" />
<respawnPoint X="-71417" Y="258270" Z="-3104" />
<respawnPoint X="-71453" Y="258305" Z="-3104" />
<respawnPoint X="-71467" Y="258378" Z="-3104" />
<respawnPoint X="-79411" Y="240677" Z="-3450" isChaotic="true" />
<respawnPoint X="-80480" Y="242640" Z="-3690" isChaotic="true" />
<respawnPoint X="-80336" Y="244656" Z="-3680" isChaotic="true" />
<respawnPoint X="-82464" Y="247248" Z="-3570" isChaotic="true" />
<respawnPoint X="-89522" Y="241696" Z="-3530" isChaotic="true" />
<respawnPoint X="-87056" Y="237952" Z="-3580" isChaotic="true" />
<respawnPoint X="-89536" Y="240336" Z="-3560" isChaotic="true" />
<respawnPoint X="-88208" Y="241360" Z="-3560" isChaotic="true" />
<respawnPoint X="-85328" Y="238080" Z="-3660" isChaotic="true" />
<respawnPoint X="-89760" Y="237408" Z="-3660" isChaotic="true" />
<respawnPoint X="-92976" Y="240560" Z="-3380" isChaotic="true" />
<respawnPoint X="-94448" Y="240944" Z="-3300" isChaotic="true" />
<respawnPoint X="-93552" Y="245296" Z="-3530" isChaotic="true" />
<respawnPoint X="-91584" Y="238480" Z="-3650" isChaotic="true" />
<respawnPoint X="-88720" Y="238976" Z="-3650" isChaotic="true" />
<respawnPoint X="-91760" Y="243664" Z="-3440" isChaotic="true" />
<respawnPoint X="-81680" Y="249696" Z="-3630" isChaotic="true" />
<respawnPoint X="-83808" Y="251264" Z="-3630" isChaotic="true" />
<respawnPoint X="-83328" Y="238304" Z="-3700" isChaotic="true" />
<respawnPoint X="-91296" Y="236272" Z="-3690" isChaotic="true" />
</region>
<!-- Einhovant's School Of Magic -->
<region name="Einhovant's_School_of_Magic" town="Talking Island Town" castle="1" locId="910" bbs="1">
<respawnPoint X="-90875" Y="248162" Z="-3570" />
<respawnPoint X="-90954" Y="248118" Z="-3570" />
<respawnPoint X="-90918" Y="248070" Z="-3570" />
<respawnPoint X="-90890" Y="248027" Z="-3570" />
<respawnPoint X="-79411" Y="240677" Z="-3450" isChaotic="true" />
<respawnPoint X="-80480" Y="242640" Z="-3690" isChaotic="true" />
<respawnPoint X="-80336" Y="244656" Z="-3680" isChaotic="true" />
<respawnPoint X="-82464" Y="247248" Z="-3570" isChaotic="true" />
<respawnPoint X="-89522" Y="241696" Z="-3530" isChaotic="true" />
<respawnPoint X="-87056" Y="237952" Z="-3580" isChaotic="true" />
<respawnPoint X="-89536" Y="240336" Z="-3560" isChaotic="true" />
<respawnPoint X="-88208" Y="241360" Z="-3560" isChaotic="true" />
<respawnPoint X="-85328" Y="238080" Z="-3660" isChaotic="true" />
<respawnPoint X="-89760" Y="237408" Z="-3660" isChaotic="true" />
<respawnPoint X="-92976" Y="240560" Z="-3380" isChaotic="true" />
<respawnPoint X="-94448" Y="240944" Z="-3300" isChaotic="true" />
<respawnPoint X="-93552" Y="245296" Z="-3530" isChaotic="true" />
<respawnPoint X="-91584" Y="238480" Z="-3650" isChaotic="true" />
<respawnPoint X="-88720" Y="238976" Z="-3650" isChaotic="true" />
<respawnPoint X="-91760" Y="243664" Z="-3440" isChaotic="true" />
<respawnPoint X="-81680" Y="249696" Z="-3630" isChaotic="true" />
<respawnPoint X="-83808" Y="251264" Z="-3630" isChaotic="true" />
<respawnPoint X="-83328" Y="238304" Z="-3700" isChaotic="true" />
<respawnPoint X="-91296" Y="236272" Z="-3690" isChaotic="true" />
</region>
</list> </list>

View File

@@ -141,7 +141,6 @@ ai/individual/Venom/Venom.java
ai/individual/Anais.java ai/individual/Anais.java
ai/individual/Ballista.java ai/individual/Ballista.java
ai/individual/Beleth.java ai/individual/Beleth.java
ai/individual/CatsEyeBandit.java
ai/individual/CrimsonHatuOtis.java ai/individual/CrimsonHatuOtis.java
ai/individual/Core.java ai/individual/Core.java
ai/individual/DarkWaterDragon.java ai/individual/DarkWaterDragon.java

View File

@@ -190,7 +190,7 @@ public final class DragonValley extends AbstractNpcAI
{ {
spawnGhost(npc, killer, isSummon, 20); spawnGhost(npc, killer, isSummon, 20);
} }
else if (((L2Attackable) npc).isSweepActive()) else if (((L2Attackable) npc).isSpoiled())
{ {
npc.dropItem(killer, getRandom(GREATER_HERB_OF_MANA, SUPERIOR_HERB_OF_MANA), 1); npc.dropItem(killer, getRandom(GREATER_HERB_OF_MANA, SUPERIOR_HERB_OF_MANA), 1);
manageMoraleBoost(killer, npc); manageMoraleBoost(killer, npc);

View File

@@ -1,76 +0,0 @@
/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J DataPack is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.individual;
import ai.npc.AbstractNpcAI;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.clientpackets.Say2;
/**
* Cat's Eye Bandit (Quest Monster) AI.
* @author Gladicek
*/
public final class CatsEyeBandit extends AbstractNpcAI
{
// NPC ID
private static final int MOB_ID = 27038;
// Weapons
private static final int BOW = 1181;
private static final int DAGGER = 1182;
private CatsEyeBandit()
{
super(CatsEyeBandit.class.getSimpleName(), "ai/individual");
addAttackId(MOB_ID);
addKillId(MOB_ID);
}
@Override
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
{
final QuestState qs = attacker.getQuestState("403_PathToRogue"); // TODO: Replace with class name.
if (npc.isScriptValue(0) && (qs != null) && ((qs.getItemEquipped(Inventory.PAPERDOLL_RHAND) == BOW) || (qs.getItemEquipped(Inventory.PAPERDOLL_RHAND) == DAGGER)))
{
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.YOU_CHILDISH_FOOL_DO_YOU_THINK_YOU_CAN_CATCH_ME);
npc.setScriptValue(1);
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = killer.getQuestState("403_PathToRogue"); // TODO: Replace with class name.
if (qs != null)
{
broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.I_MUST_DO_SOMETHING_ABOUT_THIS_SHAMEFUL_INCIDENT);
}
return super.onKill(npc, killer, isSummon);
}
public static void main(String[] args)
{
new CatsEyeBandit();
}
}

View File

@@ -197,7 +197,7 @@ public class MentorGuide extends AbstractNpcAI implements IXmlReader
event.getMentor().sendPacket(new ExMentorList(event.getMentor())); event.getMentor().sendPacket(new ExMentorList(event.getMentor()));
// Add the mentee skill // Add the mentee skill
event.getMentee().addSkill(MENTEE_MENTOR_SUMMON.getSkill(), false); event.getMentee().addSkill(MENTEE_MENTOR_SUMMON.getSkill(), true);
// Send mail with the headphone // Send mail with the headphone
sendMail(event.getMentee(), MENTEE_ADDED_TITLE, MENTEE_ADDED_BODY, MENTEE_HEADPHONE, 1); sendMail(event.getMentee(), MENTEE_ADDED_TITLE, MENTEE_ADDED_BODY, MENTEE_HEADPHONE, 1);
@@ -400,6 +400,8 @@ public class MentorGuide extends AbstractNpcAI implements IXmlReader
if (mentor != null) if (mentor != null)
{ {
MentorManager.getInstance().setPenalty(mentor.getObjectId(), Config.MENTOR_PENALTY_FOR_MENTEE_COMPLETE); MentorManager.getInstance().setPenalty(mentor.getObjectId(), Config.MENTOR_PENALTY_FOR_MENTEE_COMPLETE);
MentorManager.getInstance().deleteMentor(mentor.getObjectId(), player.getObjectId());
if (mentor.isOnline()) if (mentor.isOnline())
{ {
mentor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_AWAKENED_AND_THE_MENTOR_MENTEE_RELATIONSHIP_HAS_ENDED_THE_MENTOR_CANNOT_OBTAIN_ANOTHER_MENTEE_FOR_ONE_DAY_AFTER_THE_MENTEE_S_GRADUATION).addPcName(player)); mentor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_AWAKENED_AND_THE_MENTOR_MENTEE_RELATIONSHIP_HAS_ENDED_THE_MENTOR_CANNOT_OBTAIN_ANOTHER_MENTEE_FOR_ONE_DAY_AFTER_THE_MENTEE_S_GRADUATION).addPcName(player));
@@ -411,8 +413,6 @@ public class MentorGuide extends AbstractNpcAI implements IXmlReader
mentor.sendPacket(new ExMentorList(mentor.getPlayerInstance())); mentor.sendPacket(new ExMentorList(mentor.getPlayerInstance()));
} }
MentorManager.getInstance().deleteMentor(mentor.getObjectId(), player.getObjectId());
// Remove the mentee skills // Remove the mentee skills
player.removeSkill(MENTEE_MENTOR_SUMMON.getSkillId()); player.removeSkill(MENTEE_MENTOR_SUMMON.getSkillId());
@@ -445,13 +445,18 @@ public class MentorGuide extends AbstractNpcAI implements IXmlReader
int amount = MENTEE_COINS.get(player.getLevel()); int amount = MENTEE_COINS.get(player.getLevel());
if (amount > 0) if (amount > 0)
{ {
sendMail(player, LEVEL_UP_TITLE, String.format(LEVEL_UP_BODY, player.getName(), player.getLevel()), MENTEE_MARK, amount); sendMail(mentor.getObjectId(), player, LEVEL_UP_TITLE, String.format(LEVEL_UP_BODY, player.getName(), player.getLevel()), MENTEE_MARK, amount);
} }
} }
private void sendMail(L2PcInstance player, String title, String body, int itemId, long amount) private void sendMail(L2PcInstance player, String title, String body, int itemId, long amount)
{ {
final Message msg = new Message(MENTOR_GUIDE, player.getObjectId(), title, body, MailType.MENTOR_NPC); sendMail(player.getObjectId(), player, title, body, itemId, amount);
}
private void sendMail(int objectId, L2PcInstance player, String title, String body, int itemId, long amount)
{
final Message msg = new Message(MENTOR_GUIDE, objectId, title, body, MailType.MENTOR_NPC);
msg.createAttachments().addItem(getName(), itemId, amount, null, player); msg.createAttachments().addItem(getName(), itemId, amount, null, player);
MailManager.getInstance().sendMessage(msg); MailManager.getInstance().sendMessage(msg);

View File

@@ -69,9 +69,9 @@ public final class GrandBossTeleporters extends AbstractNpcAI
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
String htmltext = ""; String htmltext = "";
QuestState st = getQuestState(player, false); final QuestState st = getQuestState(player, false);
if (st.hasQuestItems(VACUALITE_FLOATING_STONE)) if (hasQuestItems(player, VACUALITE_FLOATING_STONE))
{ {
player.teleToLocation(ENTER_HALL_OF_FLAMES); player.teleToLocation(ENTER_HALL_OF_FLAMES);
st.set("allowEnter", "1"); st.set("allowEnter", "1");
@@ -87,12 +87,7 @@ public final class GrandBossTeleporters extends AbstractNpcAI
public String onTalk(L2Npc npc, L2PcInstance player) public String onTalk(L2Npc npc, L2PcInstance player)
{ {
String htmltext = ""; String htmltext = "";
QuestState st = getQuestState(player, true); final QuestState st = getQuestState(player, true);
if (st == null)
{
return null;
}
switch (npc.getId()) switch (npc.getId())
{ {

View File

@@ -22,7 +22,6 @@ import com.l2jserver.gameserver.data.xml.impl.MultisellData;
import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
/** /**
* Newbie Weapon/Accesories Coupons for the Hellbound opening event.<br> * Newbie Weapon/Accesories Coupons for the Hellbound opening event.<br>
@@ -79,7 +78,6 @@ public final class NewbieCoupons extends Quest
return htmltext; return htmltext;
} }
QuestState st = getQuestState(player, false);
int newbie = player.getNewbie(); int newbie = player.getNewbie();
int level = player.getLevel(); int level = player.getLevel();
int occupation_level = player.getClassId().level(); int occupation_level = player.getClassId().level();
@@ -95,7 +93,7 @@ public final class NewbieCoupons extends Quest
if ((newbie | NEWBIE_WEAPON) != newbie) if ((newbie | NEWBIE_WEAPON) != newbie)
{ {
player.setNewbie(newbie | NEWBIE_WEAPON); player.setNewbie(newbie | NEWBIE_WEAPON);
st.giveItems(COUPON_ONE, 5); giveItems(player, COUPON_ONE, 5);
htmltext = "30598-2.htm"; // here's the coupon you requested htmltext = "30598-2.htm"; // here's the coupon you requested
} }
else else
@@ -116,7 +114,7 @@ public final class NewbieCoupons extends Quest
if ((newbie | NEWBIE_ACCESORY) != newbie) if ((newbie | NEWBIE_ACCESORY) != newbie)
{ {
player.setNewbie(newbie | NEWBIE_ACCESORY); player.setNewbie(newbie | NEWBIE_ACCESORY);
st.giveItems(COUPON_TWO, 1); giveItems(player, COUPON_TWO, 1);
htmltext = "30598-5.htm"; // here's the coupon you requested htmltext = "30598-5.htm"; // here's the coupon you requested
} }
else else

View File

@@ -23,7 +23,6 @@ import com.l2jserver.gameserver.model.L2Spawn;
import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.util.Util; import com.l2jserver.gameserver.util.Util;
/** /**
@@ -273,12 +272,6 @@ public final class NpcLocationInfo extends Quest
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
String htmltext = event; String htmltext = event;
QuestState st = getQuestState(player, false);
if (st == null)
{
return htmltext;
}
if (Util.isDigit(event)) if (Util.isDigit(event))
{ {
@@ -295,10 +288,9 @@ public final class NpcLocationInfo extends Quest
y = spawn.getY(); y = spawn.getY();
z = spawn.getZ(); z = spawn.getZ();
} }
st.addRadar(x, y, z); addRadar(player, x, y, z);
htmltext = "MoveToLoc.htm"; htmltext = "MoveToLoc.htm";
} }
st.exitQuest(true);
} }
return htmltext; return htmltext;
} }

View File

@@ -21,8 +21,6 @@ package events.CharacterBirthday;
import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.util.Util; import com.l2jserver.gameserver.util.Util;
/** /**
@@ -71,8 +69,6 @@ public final class CharacterBirthday extends Quest
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
String htmltext = event; String htmltext = event;
QuestState st = getQuestState(player, false);
if (event.equalsIgnoreCase("despawn_npc")) if (event.equalsIgnoreCase("despawn_npc"))
{ {
npc.doDie(player); npc.doDie(player);
@@ -83,10 +79,10 @@ public final class CharacterBirthday extends Quest
else if (event.equalsIgnoreCase("change")) else if (event.equalsIgnoreCase("change"))
{ {
// Change Hat // Change Hat
if (st.hasQuestItems(10250)) if (hasQuestItems(player, 10250))
{ {
st.takeItems(10250, 1); // Adventurer Hat (Event) takeItems(player, 10250, 1); // Adventurer Hat (Event)
st.giveItems(21594, 1); // Birthday Hat giveItems(player, 21594, 1); // Birthday Hat
htmltext = null; // FIXME: Probably has html htmltext = null; // FIXME: Probably has html
// Despawn npc // Despawn npc
npc.doDie(player); npc.doDie(player);
@@ -108,13 +104,10 @@ public final class CharacterBirthday extends Quest
return "busy.htm"; return "busy.htm";
} }
QuestState st = getQuestState(player, true);
if (!Util.checkIfInRange(10, npc, player, true)) if (!Util.checkIfInRange(10, npc, player, true))
{ {
L2Npc spawned = st.addSpawn(32600, player.getX() + 10, player.getY() + 10, player.getZ() + 10, 0, false, 0, true); L2Npc spawned = addSpawn(32600, player.getX() + 10, player.getY() + 10, player.getZ() + 10, 0, false, 0, true);
st.setState(State.STARTED); startQuestTimer("despawn_npc", 180000, spawned, player);
st.startQuestTimer("despawn_npc", 180000, spawned);
SPAWNS++; SPAWNS++;
} }
else else

View File

@@ -23,8 +23,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.event.LongTimeEvent; import com.l2jserver.gameserver.model.event.LongTimeEvent;
import com.l2jserver.gameserver.model.itemcontainer.Inventory; import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.model.skills.Skill; import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.network.NpcStringId; import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.SystemMessageId;
@@ -79,15 +77,9 @@ public final class FreyaCelebration extends LongTimeEvent
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
QuestState st = getQuestState(player, false);
if (st == null)
{
return null;
}
if (event.equalsIgnoreCase("give_potion")) if (event.equalsIgnoreCase("give_potion"))
{ {
if (st.getQuestItemsCount(Inventory.ADENA_ID) > 1) if (getQuestItemsCount(player, Inventory.ADENA_ID) > 1)
{ {
long _curr_time = System.currentTimeMillis(); long _curr_time = System.currentTimeMillis();
String value = loadGlobalQuestVar(player.getAccountName()); String value = loadGlobalQuestVar(player.getAccountName());
@@ -95,9 +87,8 @@ public final class FreyaCelebration extends LongTimeEvent
if (_curr_time > _reuse_time) if (_curr_time > _reuse_time)
{ {
st.setState(State.STARTED); takeItems(player, Inventory.ADENA_ID, 1);
st.takeItems(Inventory.ADENA_ID, 1); giveItems(player, FREYA_POTION, 1);
st.giveItems(FREYA_POTION, 1);
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (HOURS * 3600000))); saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (HOURS * 3600000)));
} }
else else
@@ -156,7 +147,6 @@ public final class FreyaCelebration extends LongTimeEvent
@Override @Override
public String onFirstTalk(L2Npc npc, L2PcInstance player) public String onFirstTalk(L2Npc npc, L2PcInstance player)
{ {
getQuestState(player, true);
return "13296.htm"; return "13296.htm";
} }

View File

@@ -22,8 +22,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.event.LongTimeEvent; import com.l2jserver.gameserver.model.event.LongTimeEvent;
import com.l2jserver.gameserver.model.holders.SkillHolder; import com.l2jserver.gameserver.model.holders.SkillHolder;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -76,6 +74,11 @@ public final class GiftOfVitality extends LongTimeEvent
new SkillHolder(5636, 1), // Empower new SkillHolder(5636, 1), // Empower
}; };
// Misc
private static final int HOURS = 5; // Reuse between buffs
private static final int MIN_LEVEL = 75;
private static final String REUSE = GiftOfVitality.class.getSimpleName() + "_reuse";
private GiftOfVitality() private GiftOfVitality()
{ {
super(GiftOfVitality.class.getSimpleName(), "events"); super(GiftOfVitality.class.getSimpleName(), "events");
@@ -84,29 +87,18 @@ public final class GiftOfVitality extends LongTimeEvent
addTalkId(STEVE_SHYAGEL); addTalkId(STEVE_SHYAGEL);
} }
// Misc
private static final int HOURS = 5; // Reuse between buffs
private static final int MIN_LEVEL = 75;
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
String htmltext = event; String htmltext = event;
QuestState st = getQuestState(player, false);
switch (event) switch (event)
{ {
case "vitality": case "vitality":
{ {
long _reuse = 0; final long reuse = player.getVariables().getLong(REUSE, 0);
String _streuse = st.get("reuse"); if (reuse > System.currentTimeMillis())
if (_streuse != null)
{ {
_reuse = Long.parseLong(_streuse); long remainingTime = (reuse - System.currentTimeMillis()) / 1000;
}
if (_reuse > System.currentTimeMillis())
{
long remainingTime = (_reuse - System.currentTimeMillis()) / 1000;
int hours = (int) (remainingTime / 3600); int hours = (int) (remainingTime / 3600);
int minutes = (int) ((remainingTime % 3600) / 60); int minutes = (int) ((remainingTime % 3600) / 60);
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_WILL_BE_AVAILABLE_FOR_RE_USE_AFTER_S2_HOUR_S_S3_MINUTE_S); SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_WILL_BE_AVAILABLE_FOR_RE_USE_AFTER_S2_HOUR_S_S3_MINUTE_S);
@@ -120,8 +112,7 @@ public final class GiftOfVitality extends LongTimeEvent
{ {
player.doCast(GIFT_OF_VITALITY.getSkill()); player.doCast(GIFT_OF_VITALITY.getSkill());
player.doSimultaneousCast(JOY_OF_VITALITY.getSkill()); player.doSimultaneousCast(JOY_OF_VITALITY.getSkill());
st.setState(State.STARTED); player.getVariables().set(REUSE, System.currentTimeMillis() + (HOURS * 3600000));
st.set("reuse", String.valueOf(System.currentTimeMillis() + (HOURS * 3600000)));
htmltext = "4306-okvitality.htm"; htmltext = "4306-okvitality.htm";
} }
break; break;
@@ -175,10 +166,6 @@ public final class GiftOfVitality extends LongTimeEvent
@Override @Override
public String onFirstTalk(L2Npc npc, L2PcInstance player) public String onFirstTalk(L2Npc npc, L2PcInstance player)
{ {
if (player.getQuestState(getName()) == null)
{
newQuestState(player);
}
return "4306.htm"; return "4306.htm";
} }

View File

@@ -22,7 +22,6 @@ import com.l2jserver.gameserver.enums.QuestSound;
import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.event.LongTimeEvent; import com.l2jserver.gameserver.model.event.LongTimeEvent;
import com.l2jserver.gameserver.model.quest.QuestState;
/** /**
* Heavy Medals event AI. * Heavy Medals event AI.
@@ -65,28 +64,22 @@ public final class HeavyMedal extends LongTimeEvent
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
final QuestState st = getQuestState(player, false);
if (st == null)
{
return getNoQuestMsg(player);
}
String htmltext = event; String htmltext = event;
int level = checkLevel(st); int level = checkLevel(player);
if (event.equalsIgnoreCase("game")) if (event.equalsIgnoreCase("game"))
{ {
htmltext = st.getQuestItemsCount(GLITTERING_MEDAL) < MEDALS[level] ? "31229-no.htm" : "31229-game.htm"; htmltext = getQuestItemsCount(player, GLITTERING_MEDAL) < MEDALS[level] ? "31229-no.htm" : "31229-game.htm";
} }
else if (event.equalsIgnoreCase("heads") || event.equalsIgnoreCase("tails")) else if (event.equalsIgnoreCase("heads") || event.equalsIgnoreCase("tails"))
{ {
if (st.getQuestItemsCount(GLITTERING_MEDAL) < MEDALS[level]) if (getQuestItemsCount(player, GLITTERING_MEDAL) < MEDALS[level])
{ {
htmltext = "31229-" + event.toLowerCase() + "-10.htm"; htmltext = "31229-" + event.toLowerCase() + "-10.htm";
} }
else else
{ {
st.takeItems(GLITTERING_MEDAL, MEDALS[level]); takeItems(player, GLITTERING_MEDAL, MEDALS[level]);
if (getRandom(100) > WIN_CHANCE) if (getRandom(100) > WIN_CHANCE)
{ {
@@ -96,10 +89,10 @@ public final class HeavyMedal extends LongTimeEvent
{ {
if (level > 0) if (level > 0)
{ {
st.takeItems(BADGES[level - 1], -1); takeItems(player, BADGES[level - 1], -1);
} }
st.giveItems(BADGES[level], 1); giveItems(player, BADGES[level], 1);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
level++; level++;
} }
htmltext = "31229-" + event.toLowerCase() + "-" + String.valueOf(level) + ".htm"; htmltext = "31229-" + event.toLowerCase() + "-" + String.valueOf(level) + ".htm";
@@ -122,22 +115,22 @@ public final class HeavyMedal extends LongTimeEvent
return npc.getId() + ".htm"; return npc.getId() + ".htm";
} }
public int checkLevel(QuestState st) public int checkLevel(L2PcInstance player)
{ {
int _lev = 0; int _lev = 0;
if (st.hasQuestItems(6402)) if (hasQuestItems(player, 6402))
{ {
_lev = 4; _lev = 4;
} }
else if (st.hasQuestItems(6401)) else if (hasQuestItems(player, 6401))
{ {
_lev = 3; _lev = 3;
} }
else if (st.hasQuestItems(6400)) else if (hasQuestItems(player, 6400))
{ {
_lev = 2; _lev = 2;
} }
else if (st.hasQuestItems(6399)) else if (hasQuestItems(player, 6399))
{ {
_lev = 1; _lev = 1;
} }

View File

@@ -23,8 +23,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.event.LongTimeEvent; import com.l2jserver.gameserver.model.event.LongTimeEvent;
import com.l2jserver.gameserver.model.holders.SkillHolder; import com.l2jserver.gameserver.model.holders.SkillHolder;
import com.l2jserver.gameserver.model.itemcontainer.Inventory; import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -38,11 +36,12 @@ public final class LoveYourGatekeeper extends LongTimeEvent
private static final int GATEKEEPER = 32477; private static final int GATEKEEPER = 32477;
// Item // Item
private static final int GATEKEEPER_TRANSFORMATION_STICK = 12814; private static final int GATEKEEPER_TRANSFORMATION_STICK = 12814;
// Skills
private static SkillHolder TELEPORTER_TRANSFORM = new SkillHolder(5655, 1);
// Misc // Misc
private static final int HOURS = 24; private static final int HOURS = 24;
private static final int PRICE = 10000; private static final int PRICE = 10000;
// Skills private static final String REUSE = LoveYourGatekeeper.class.getSimpleName() + "_reuse";
private static SkillHolder TELEPORTER_TRANSFORM = new SkillHolder(5655, 1);
private LoveYourGatekeeper() private LoveYourGatekeeper()
{ {
@@ -55,27 +54,16 @@ public final class LoveYourGatekeeper extends LongTimeEvent
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
final QuestState st = getQuestState(player, false);
if (st == null)
{
return getNoQuestMsg(player);
}
switch (event) switch (event)
{ {
case "transform_stick": case "transform_stick":
{ {
if (player.getAdena() >= PRICE) if (player.getAdena() >= PRICE)
{ {
long _reuse = 0; final long reuse = player.getVariables().getLong(REUSE, 0);
String _streuse = st.get("reuse"); if (reuse > System.currentTimeMillis())
if (_streuse != null)
{ {
_reuse = Long.parseLong(_streuse); final long remainingTime = (reuse - System.currentTimeMillis()) / 1000;
}
if (_reuse > System.currentTimeMillis())
{
final long remainingTime = (_reuse - System.currentTimeMillis()) / 1000;
final int hours = (int) (remainingTime / 3600); final int hours = (int) (remainingTime / 3600);
final int minutes = (int) ((remainingTime % 3600) / 60); final int minutes = (int) ((remainingTime % 3600) / 60);
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_WILL_BE_AVAILABLE_FOR_RE_USE_AFTER_S2_HOUR_S_S3_MINUTE_S); final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_WILL_BE_AVAILABLE_FOR_RE_USE_AFTER_S2_HOUR_S_S3_MINUTE_S);
@@ -86,12 +74,10 @@ public final class LoveYourGatekeeper extends LongTimeEvent
} }
else else
{ {
st.takeItems(Inventory.ADENA_ID, PRICE); takeItems(player, Inventory.ADENA_ID, PRICE);
st.giveItems(GATEKEEPER_TRANSFORMATION_STICK, 1); giveItems(player, GATEKEEPER_TRANSFORMATION_STICK, 1);
st.setState(State.STARTED); player.getVariables().set(REUSE, System.currentTimeMillis() + (HOURS * 3600000));
st.set("reuse", String.valueOf(System.currentTimeMillis() + (HOURS * 3600000)));
} }
} }
else else
{ {
@@ -101,11 +87,10 @@ public final class LoveYourGatekeeper extends LongTimeEvent
} }
case "transform": case "transform":
{ {
if (player.isTransformed()) if (!player.isTransformed())
{ {
return null; player.doCast(TELEPORTER_TRANSFORM.getSkill());
} }
player.doCast(TELEPORTER_TRANSFORM.getSkill());
return null; return null;
} }
} }
@@ -115,10 +100,6 @@ public final class LoveYourGatekeeper extends LongTimeEvent
@Override @Override
public String onFirstTalk(L2Npc npc, L2PcInstance player) public String onFirstTalk(L2Npc npc, L2PcInstance player)
{ {
if (player.getQuestState(getName()) == null)
{
newQuestState(player);
}
return "32477.htm"; return "32477.htm";
} }

View File

@@ -24,7 +24,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.event.LongTimeEvent; import com.l2jserver.gameserver.model.event.LongTimeEvent;
import com.l2jserver.gameserver.model.itemcontainer.Inventory; import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -66,7 +65,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
}; };
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private static final Date _eventStart = new Date(2011, 7, 1); private static final Date EVENT_START = new Date(2011, 7, 1);
private MasterOfEnchanting() private MasterOfEnchanting()
{ {
@@ -80,13 +79,12 @@ public final class MasterOfEnchanting extends LongTimeEvent
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
String htmltext = event; String htmltext = event;
QuestState st = getQuestState(player, false);
if (event.equalsIgnoreCase("buy_staff")) if (event.equalsIgnoreCase("buy_staff"))
{ {
if (!st.hasQuestItems(MASTER_YOGI_STAFF) && (st.getQuestItemsCount(Inventory.ADENA_ID) > STAFF_PRICE)) if (!hasQuestItems(player, MASTER_YOGI_STAFF) && (getQuestItemsCount(player, Inventory.ADENA_ID) > STAFF_PRICE))
{ {
st.takeItems(Inventory.ADENA_ID, STAFF_PRICE); takeItems(player, Inventory.ADENA_ID, STAFF_PRICE);
st.giveItems(MASTER_YOGI_STAFF, 1); giveItems(player, MASTER_YOGI_STAFF, 1);
htmltext = "32599-staffbuyed.htm"; htmltext = "32599-staffbuyed.htm";
} }
else else
@@ -96,20 +94,20 @@ public final class MasterOfEnchanting extends LongTimeEvent
} }
else if (event.equalsIgnoreCase("buy_scroll_24")) else if (event.equalsIgnoreCase("buy_scroll_24"))
{ {
long _curr_time = System.currentTimeMillis(); long curTime = System.currentTimeMillis();
String value = loadGlobalQuestVar(player.getAccountName()); String value = loadGlobalQuestVar(player.getAccountName());
long _reuse_time = value == "" ? 0 : Long.parseLong(value); long reuse = value == "" ? 0 : Long.parseLong(value);
if (player.getCreateDate().after(_eventStart)) if (player.getCreateDate().after(EVENT_START))
{ {
return "32599-bidth.htm"; return "32599-bidth.htm";
} }
if (_curr_time > _reuse_time) if (curTime > reuse)
{ {
if (st.getQuestItemsCount(Inventory.ADENA_ID) > SCROLL_24_PRICE) if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_24_PRICE)
{ {
st.takeItems(Inventory.ADENA_ID, SCROLL_24_PRICE); takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
st.giveItems(MASTER_YOGI_SCROLL, 24); giveItems(player, MASTER_YOGI_SCROLL, 24);
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000))); saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
htmltext = "32599-scroll24.htm"; htmltext = "32599-scroll24.htm";
} }
@@ -120,9 +118,9 @@ public final class MasterOfEnchanting extends LongTimeEvent
} }
else else
{ {
long _remaining_time = (_reuse_time - _curr_time) / 1000; long remainingTime = (reuse - curTime) / 1000;
int hours = (int) _remaining_time / 3600; int hours = (int) remainingTime / 3600;
int minutes = ((int) _remaining_time % 3600) / 60; int minutes = ((int) remainingTime % 3600) / 60;
if (hours > 0) if (hours > 0)
{ {
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THERE_ARE_S1_HOUR_S_AND_S2_MINUTE_S_REMAINING_UNTIL_THE_ITEM_CAN_BE_PURCHASED_AGAIN); SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THERE_ARE_S1_HOUR_S_AND_S2_MINUTE_S_REMAINING_UNTIL_THE_ITEM_CAN_BE_PURCHASED_AGAIN);
@@ -142,10 +140,10 @@ public final class MasterOfEnchanting extends LongTimeEvent
{ {
// Little glitch. There is no SystemMessage with seconds only. // Little glitch. There is no SystemMessage with seconds only.
// If time is less than 1 minute player can buy scrolls // If time is less than 1 minute player can buy scrolls
if (st.getQuestItemsCount(Inventory.ADENA_ID) > SCROLL_24_PRICE) if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_24_PRICE)
{ {
st.takeItems(Inventory.ADENA_ID, SCROLL_24_PRICE); takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
st.giveItems(MASTER_YOGI_SCROLL, 24); giveItems(player, MASTER_YOGI_SCROLL, 24);
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000))); saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
htmltext = "32599-scroll24.htm"; htmltext = "32599-scroll24.htm";
} }
@@ -158,10 +156,10 @@ public final class MasterOfEnchanting extends LongTimeEvent
} }
else if (event.equalsIgnoreCase("buy_scroll_1")) else if (event.equalsIgnoreCase("buy_scroll_1"))
{ {
if (st.getQuestItemsCount(Inventory.ADENA_ID) > SCROLL_1_PRICE) if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_1_PRICE)
{ {
st.takeItems(Inventory.ADENA_ID, SCROLL_1_PRICE); takeItems(player, Inventory.ADENA_ID, SCROLL_1_PRICE);
st.giveItems(MASTER_YOGI_SCROLL, 1); giveItems(player, MASTER_YOGI_SCROLL, 1);
htmltext = "32599-scroll-ok.htm"; htmltext = "32599-scroll-ok.htm";
} }
else else
@@ -171,10 +169,10 @@ public final class MasterOfEnchanting extends LongTimeEvent
} }
else if (event.equalsIgnoreCase("buy_scroll_10")) else if (event.equalsIgnoreCase("buy_scroll_10"))
{ {
if (st.getQuestItemsCount(Inventory.ADENA_ID) > SCROLL_10_PRICE) if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_10_PRICE)
{ {
st.takeItems(Inventory.ADENA_ID, SCROLL_10_PRICE); takeItems(player, Inventory.ADENA_ID, SCROLL_10_PRICE);
st.giveItems(MASTER_YOGI_SCROLL, 10); giveItems(player, MASTER_YOGI_SCROLL, 10);
htmltext = "32599-scroll-ok.htm"; htmltext = "32599-scroll-ok.htm";
} }
else else
@@ -184,83 +182,83 @@ public final class MasterOfEnchanting extends LongTimeEvent
} }
else if (event.equalsIgnoreCase("receive_reward")) else if (event.equalsIgnoreCase("receive_reward"))
{ {
if ((st.getItemEquipped(Inventory.PAPERDOLL_RHAND) == MASTER_YOGI_STAFF) && (st.getEnchantLevel(MASTER_YOGI_STAFF) > 3)) if ((getItemEquipped(player, Inventory.PAPERDOLL_RHAND) == MASTER_YOGI_STAFF) && (getEnchantLevel(player, MASTER_YOGI_STAFF) > 3))
{ {
switch (st.getEnchantLevel(MASTER_YOGI_STAFF)) switch (getEnchantLevel(player, MASTER_YOGI_STAFF))
{ {
case 4: case 4:
st.giveItems(6406, 1); // Firework giveItems(player, 6406, 1); // Firework
break; break;
case 5: case 5:
st.giveItems(6406, 2); // Firework giveItems(player, 6406, 2); // Firework
st.giveItems(6407, 1); // Large Firework giveItems(player, 6407, 1); // Large Firework
break; break;
case 6: case 6:
st.giveItems(6406, 3); // Firework giveItems(player, 6406, 3); // Firework
st.giveItems(6407, 2); // Large Firework giveItems(player, 6407, 2); // Large Firework
break; break;
case 7: case 7:
st.giveItems(HAT_SHADOW_REWARD[getRandom(3)], 1); giveItems(player, HAT_SHADOW_REWARD[getRandom(3)], 1);
break; break;
case 8: case 8:
st.giveItems(955, 1); // Scroll: Enchant Weapon (D) giveItems(player, 955, 1); // Scroll: Enchant Weapon (D)
break; break;
case 9: case 9:
st.giveItems(955, 1); // Scroll: Enchant Weapon (D) giveItems(player, 955, 1); // Scroll: Enchant Weapon (D)
st.giveItems(956, 1); // Scroll: Enchant Armor (D) giveItems(player, 956, 1); // Scroll: Enchant Armor (D)
break; break;
case 10: case 10:
st.giveItems(951, 1); // Scroll: Enchant Weapon (C) giveItems(player, 951, 1); // Scroll: Enchant Weapon (C)
break; break;
case 11: case 11:
st.giveItems(951, 1); // Scroll: Enchant Weapon (C) giveItems(player, 951, 1); // Scroll: Enchant Weapon (C)
st.giveItems(952, 1); // Scroll: Enchant Armor (C) giveItems(player, 952, 1); // Scroll: Enchant Armor (C)
break; break;
case 12: case 12:
st.giveItems(948, 1); // Scroll: Enchant Armor (B) giveItems(player, 948, 1); // Scroll: Enchant Armor (B)
break; break;
case 13: case 13:
st.giveItems(729, 1); // Scroll: Enchant Weapon (A) giveItems(player, 729, 1); // Scroll: Enchant Weapon (A)
break; break;
case 14: case 14:
st.giveItems(HAT_EVENT_REWARD[getRandom(3)], 1); giveItems(player, HAT_EVENT_REWARD[getRandom(3)], 1);
break; break;
case 15: case 15:
st.giveItems(13992, 1); // Grade S Accessory Chest (Event) giveItems(player, 13992, 1); // Grade S Accessory Chest (Event)
break; break;
case 16: case 16:
st.giveItems(8762, 1); // Top-Grade Life Stone: level 76 giveItems(player, 8762, 1); // Top-Grade Life Stone: level 76
break; break;
case 17: case 17:
st.giveItems(959, 1); // Scroll: Enchant Weapon (S) giveItems(player, 959, 1); // Scroll: Enchant Weapon (S)
break; break;
case 18: case 18:
st.giveItems(13991, 1); // Grade S Armor Chest (Event) giveItems(player, 13991, 1); // Grade S Armor Chest (Event)
break; break;
case 19: case 19:
st.giveItems(13990, 1); // Grade S Weapon Chest (Event) giveItems(player, 13990, 1); // Grade S Weapon Chest (Event)
break; break;
case 20: case 20:
st.giveItems(CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14 giveItems(player, CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
break; break;
case 21: case 21:
st.giveItems(8762, 1); // Top-Grade Life Stone: level 76 giveItems(player, 8762, 1); // Top-Grade Life Stone: level 76
st.giveItems(8752, 1); // High-Grade Life Stone: level 76 giveItems(player, 8752, 1); // High-Grade Life Stone: level 76
st.giveItems(CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14 giveItems(player, CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
break; break;
case 22: case 22:
st.giveItems(13989, 1); // S80 Grade Armor Chest (Event) giveItems(player, 13989, 1); // S80 Grade Armor Chest (Event)
break; break;
case 23: case 23:
st.giveItems(13988, 1); // S80 Grade Weapon Chest (Event) giveItems(player, 13988, 1); // S80 Grade Weapon Chest (Event)
default: default:
if (st.getEnchantLevel(MASTER_YOGI_STAFF) > 23) if (getEnchantLevel(player, MASTER_YOGI_STAFF) > 23)
{ {
st.giveItems(13988, 1); // S80 Grade Weapon Chest (Event) giveItems(player, 13988, 1); // S80 Grade Weapon Chest (Event)
} }
break; break;
} }
st.takeItems(MASTER_YOGI_STAFF, 1); takeItems(player, MASTER_YOGI_STAFF, 1);
htmltext = "32599-rewardok.htm"; htmltext = "32599-rewardok.htm";
} }
else else
@@ -274,10 +272,6 @@ public final class MasterOfEnchanting extends LongTimeEvent
@Override @Override
public String onFirstTalk(L2Npc npc, L2PcInstance player) public String onFirstTalk(L2Npc npc, L2PcInstance player)
{ {
if (player.getQuestState(getName()) == null)
{
newQuestState(player);
}
return npc.getId() + ".htm"; return npc.getId() + ".htm";
} }

View File

@@ -22,8 +22,6 @@ import com.l2jserver.gameserver.enums.QuestSound;
import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.event.LongTimeEvent; import com.l2jserver.gameserver.model.event.LongTimeEvent;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
/** /**
* The Valentine Event event AI. * The Valentine Event event AI.
@@ -35,6 +33,8 @@ public final class TheValentineEvent extends LongTimeEvent
private static final int NPC = 4301; private static final int NPC = 4301;
// Item // Item
private static final int RECIPE = 20191; private static final int RECIPE = 20191;
// Misc
private static final String COMPLETED = TheValentineEvent.class.getSimpleName() + "_completed";
private TheValentineEvent() private TheValentineEvent()
{ {
@@ -47,24 +47,17 @@ public final class TheValentineEvent extends LongTimeEvent
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
final QuestState st = getQuestState(player, false);
if (st == null)
{
return getNoQuestMsg(player);
}
String htmltext = event; String htmltext = event;
if (event.equalsIgnoreCase("4301-3.htm")) if (event.equalsIgnoreCase("4301-3.htm"))
{ {
if (st.isCompleted()) if (player.getVariables().getBoolean(COMPLETED, false))
{ {
htmltext = "4301-4.htm"; htmltext = "4301-4.htm";
} }
else else
{ {
st.giveItems(RECIPE, 1); giveItems(player, RECIPE, 1);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
st.setState(State.COMPLETED);
} }
} }
return htmltext; return htmltext;
@@ -73,10 +66,6 @@ public final class TheValentineEvent extends LongTimeEvent
@Override @Override
public String onFirstTalk(L2Npc npc, L2PcInstance player) public String onFirstTalk(L2Npc npc, L2PcInstance player)
{ {
if (player.getQuestState(getName()) == null)
{
newQuestState(player);
}
return npc.getId() + ".htm"; return npc.getId() + ".htm";
} }

View File

@@ -322,19 +322,19 @@ public class EnergySeeds extends AbstractNpcAI
case INFINITY: case INFINITY:
if ((st != null) && st.isCond(3)) if ((st != null) && st.isCond(3))
{ {
handleQuestDrop(st, 13798); handleQuestDrop(player, 13798);
} }
break; break;
case DESTRUCTION: case DESTRUCTION:
if ((st != null) && st.isCond(3)) if ((st != null) && st.isCond(3))
{ {
handleQuestDrop(st, 13867); handleQuestDrop(player, 13867);
} }
break; break;
case ANNIHILATION_BISTAKON: case ANNIHILATION_BISTAKON:
if ((st != null) && st.isCond(3)) if ((st != null) && st.isCond(3))
{ {
handleQuestDrop(st, 15535); handleQuestDrop(player, 15535);
} }
if (getRandom(100) < 50) if (getRandom(100) < 50)
{ {
@@ -347,7 +347,7 @@ public class EnergySeeds extends AbstractNpcAI
case ANNIHILATION_REPTILIKON: case ANNIHILATION_REPTILIKON:
if ((st != null) && st.isCond(3)) if ((st != null) && st.isCond(3))
{ {
handleQuestDrop(st, 15535); handleQuestDrop(player, 15535);
} }
if (getRandom(100) < 50) if (getRandom(100) < 50)
{ {
@@ -360,7 +360,7 @@ public class EnergySeeds extends AbstractNpcAI
case ANNIHILATION_COKRAKON: case ANNIHILATION_COKRAKON:
if ((st != null) && st.isCond(3)) if ((st != null) && st.isCond(3))
{ {
handleQuestDrop(st, 15535); handleQuestDrop(player, 15535);
} }
if (getRandom(100) < 50) if (getRandom(100) < 50)
{ {
@@ -386,7 +386,7 @@ public class EnergySeeds extends AbstractNpcAI
return monster; return monster;
} }
private void handleQuestDrop(QuestState st, int itemId) private void handleQuestDrop(L2PcInstance player, int itemId)
{ {
double chance = HOWTOOPPOSEEVIL_CHANCE * Config.RATE_QUEST_DROP; double chance = HOWTOOPPOSEEVIL_CHANCE * Config.RATE_QUEST_DROP;
int numItems = (int) (chance / 100); int numItems = (int) (chance / 100);
@@ -397,8 +397,8 @@ public class EnergySeeds extends AbstractNpcAI
} }
if (numItems > 0) if (numItems > 0)
{ {
st.giveItems(itemId, numItems); giveItems(player, itemId, numItems);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
} }
} }

View File

@@ -39,7 +39,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.effects.L2EffectType; import com.l2jserver.gameserver.model.effects.L2EffectType;
import com.l2jserver.gameserver.model.instancezone.InstanceWorld; import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.skills.Skill; import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -586,7 +585,7 @@ public final class HallOfSuffering extends AbstractNpcAI
} }
@Override @Override
public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon) public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{ {
InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId()); InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
if (tmpworld instanceof HSWorld) if (tmpworld instanceof HSWorld)
@@ -595,7 +594,7 @@ public final class HallOfSuffering extends AbstractNpcAI
if (npc.getId() == TUMOR_ALIVE) if (npc.getId() == TUMOR_ALIVE)
{ {
addSpawn(TUMOR_DEAD, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, false, npc.getInstanceId()); addSpawn(TUMOR_DEAD, npc, false, 0, false, npc.getInstanceId());
} }
if (world.getStatus() < 5) if (world.getStatus() < 5)
{ {
@@ -627,7 +626,7 @@ public final class HallOfSuffering extends AbstractNpcAI
} }
} }
} }
return ""; return super.onKill(npc, killer, isSummon);
} }
@Override @Override
@@ -652,46 +651,45 @@ public final class HallOfSuffering extends AbstractNpcAI
return getPtLeaderText(player, (HSWorld) world); return getPtLeaderText(player, (HSWorld) world);
} }
return ""; return super.onFirstTalk(npc, player);
} }
@Override @Override
public String onTalk(L2Npc npc, L2PcInstance player) public String onTalk(L2Npc npc, L2PcInstance talker)
{ {
getQuestState(player, true); getQuestState(talker, true);
if (npc.getId() == MOUTHOFEKIMUS) if (npc.getId() == MOUTHOFEKIMUS)
{ {
enterInstance(player, "HallOfSuffering.xml", ENTER_TELEPORT); enterInstance(talker, "HallOfSuffering.xml", ENTER_TELEPORT);
} }
else if (npc.getId() == TEPIOS) else if (npc.getId() == TEPIOS)
{ {
InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player); InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(talker);
if (((HSWorld) world).rewardItemId == -1) if (((HSWorld) world).rewardItemId == -1)
{ {
_log.warning("Hall of Suffering: " + player.getName() + "(" + player.getObjectId() + ") is try to cheat!"); _log.warning("Hall of Suffering: " + talker.getName() + "(" + talker.getObjectId() + ") is try to cheat!");
return getPtLeaderText(player, (HSWorld) world); return getPtLeaderText(talker, (HSWorld) world);
} }
else if (((HSWorld) world).isRewarded) else if (((HSWorld) world).isRewarded)
{ {
return "32530-11.htm"; return "32530-11.htm";
} }
else if ((player.getParty() != null) && (player.getParty().getLeaderObjectId() == player.getObjectId())) else if ((talker.getParty() != null) && (talker.getParty().getLeaderObjectId() == talker.getObjectId()))
{ {
((HSWorld) world).isRewarded = true; ((HSWorld) world).isRewarded = true;
for (L2PcInstance member : player.getParty().getMembers()) for (L2PcInstance member : talker.getParty().getMembers())
{ {
final QuestState qsMember = getQuestState(member, false); if (getQuestState(member, false) != null)
if (qsMember != null)
{ {
qsMember.giveItems(736, 1); giveItems(member, 736, 1);
qsMember.giveItems(((HSWorld) world).rewardItemId, 1); giveItems(member, ((HSWorld) world).rewardItemId, 1);
} }
} }
return ""; return "";
} }
return getPtLeaderText(player, (HSWorld) world); return getPtLeaderText(talker, (HSWorld) world);
} }
return ""; return super.onTalk(npc, talker);
} }
} }

View File

@@ -130,7 +130,17 @@ public class QuestLink implements IBypassHandler
} }
else else
{ {
StringUtil.append(sb, "<fstring>", String.valueOf(quest.getId()), state, "</fstring>"); int questId = quest.getId();
if (quest.getId() > 10000)
{
questId -= 5000;
}
else if (questId == 146)
{
questId = 640;
}
StringUtil.append(sb, "<fstring>", String.valueOf(questId), state, "</fstring>");
} }
sb.append("</button></font><br>"); sb.append("</button></font><br>");
} }

View File

@@ -18,6 +18,8 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import java.util.Collection;
import com.l2jserver.gameserver.model.StatsSet; import com.l2jserver.gameserver.model.StatsSet;
import com.l2jserver.gameserver.model.actor.L2Attackable; import com.l2jserver.gameserver.model.actor.L2Attackable;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -63,21 +65,19 @@ public final class Sweeper extends AbstractEffect
return; return;
} }
final ItemHolder[] items = monster.takeSweep(); final Collection<ItemHolder> items = monster.takeSweep();
if ((items == null) || (items.length == 0)) if (items != null)
{ {
return; for (ItemHolder item : items)
}
for (ItemHolder item : items)
{
if (player.isInParty())
{ {
player.getParty().distributeItem(player, item, true, monster); if (player.isInParty())
} {
else player.getParty().distributeItem(player, item, true, monster);
{ }
player.addItem("Sweeper", item, info.getEffected(), true); else
{
player.addItem("Sweeper", item, info.getEffected(), true);
}
} }
} }
} }

View File

@@ -170,6 +170,8 @@ public abstract class Chamber extends Quest
private final String INSTANCE_TEMPLATE; private final String INSTANCE_TEMPLATE;
protected Location[] ROOM_ENTER_POINTS; protected Location[] ROOM_ENTER_POINTS;
// Misc
private static final String RETURN = Chamber.class.getSimpleName() + "_return";
protected Chamber(int questId, String name, String descr, int instanceId, String instanceTemplateName, int entranceGKId, int roomGKFirstId, int roomGKLastId, int aenkinelId, int boxId) protected Chamber(int questId, String name, String descr, int instanceId, String instanceTemplateName, int entranceGKId, int roomGKFirstId, int roomGKLastId, int aenkinelId, int boxId)
{ {
@@ -362,20 +364,18 @@ public abstract class Chamber extends Quest
for (L2PcInstance partyMember : party.getMembers()) for (L2PcInstance partyMember : party.getMembers())
{ {
final QuestState st = getQuestState(partyMember, true); if (hasQuestItems(partyMember, DELUSION_MARK))
if (st.hasQuestItems(DELUSION_MARK))
{ {
st.takeItems(DELUSION_MARK, -1); takeItems(partyMember, DELUSION_MARK, -1);
} }
if (party.isLeader(partyMember)) if (party.isLeader(partyMember))
{ {
st.giveItems(DELUSION_MARK, 1); giveItems(partyMember, DELUSION_MARK, 1);
} }
// Save location for teleport back into main hall // Save location for teleport back into main hall
st.set("return_point", Integer.toString(partyMember.getX()) + ";" + Integer.toString(partyMember.getY()) + ";" + Integer.toString(partyMember.getZ())); partyMember.getVariables().set(RETURN, Integer.toString(partyMember.getX()) + ";" + Integer.toString(partyMember.getY()) + ";" + Integer.toString(partyMember.getZ()));
partyMember.setInstanceId(world.getInstanceId()); partyMember.setInstanceId(world.getInstanceId());
world.addAllowed(partyMember.getObjectId()); world.addAllowed(partyMember.getObjectId());
@@ -445,26 +445,21 @@ public abstract class Chamber extends Quest
} }
final Instance inst = InstanceManager.getInstance().getInstance(player.getInstanceId()); final Instance inst = InstanceManager.getInstance().getInstance(player.getInstanceId());
Location ret = inst.getSpawnLoc(); Location ret = inst.getSpawnLoc();
final QuestState st = getQuestState(player, false); final String return_point = player.getVariables().getString(RETURN, null);
if (return_point != null)
if (st != null)
{ {
String return_point = st.get("return_point"); String[] coords = return_point.split(";");
if (return_point != null) if (coords.length == 3)
{ {
String[] coords = return_point.split(";"); try
if (coords.length == 3) {
int x = Integer.parseInt(coords[0]);
int y = Integer.parseInt(coords[1]);
int z = Integer.parseInt(coords[2]);
ret.setLocation(new Location(x, y, z));
}
catch (Exception e)
{ {
try
{
int x = Integer.parseInt(coords[0]);
int y = Integer.parseInt(coords[1]);
int z = Integer.parseInt(coords[2]);
ret.setLocation(new Location(x, y, z));
}
catch (Exception e)
{
}
} }
} }
} }
@@ -487,15 +482,8 @@ public abstract class Chamber extends Quest
{ {
final CDWorld world = (CDWorld) tmpworld; final CDWorld world = (CDWorld) tmpworld;
QuestState st = getQuestState(player, false);
if (st == null)
{
st = newQuestState(player);
}
// Change room from dialog // Change room from dialog
else if (event.equals("next_room")) if (event.equals("next_room"))
{ {
if (player.getParty() == null) if (player.getParty() == null)
{ {
@@ -509,7 +497,7 @@ public abstract class Chamber extends Quest
else if (hasQuestItems(player, DELUSION_MARK)) else if (hasQuestItems(player, DELUSION_MARK))
{ {
st.takeItems(DELUSION_MARK, 1); takeItems(player, DELUSION_MARK, 1);
world.stopRoomChangeTask(); world.stopRoomChangeTask();
changeRoom(world); changeRoom(world);
} }
@@ -519,7 +507,6 @@ public abstract class Chamber extends Quest
htmltext = getHtm(player.getHtmlPrefix(), "data/scripts/instances/ChambersOfDelusion/no_item.html"); htmltext = getHtm(player.getHtmlPrefix(), "data/scripts/instances/ChambersOfDelusion/no_item.html");
} }
} }
else if (event.equals("go_out")) else if (event.equals("go_out"))
{ {
if (player.getParty() == null) if (player.getParty() == null)
@@ -545,7 +532,6 @@ public abstract class Chamber extends Quest
inst.setEmptyDestroyTime(0); inst.setEmptyDestroyTime(0);
} }
} }
else if (event.equals("look_party")) else if (event.equals("look_party"))
{ {
if ((player.getParty() != null) && (player.getParty() == world.getPartyInside())) if ((player.getParty() != null) && (player.getParty() == world.getPartyInside()))

View File

@@ -1872,8 +1872,7 @@ public final class CrystalCaverns extends Quest
CCWorld world = (CCWorld) tmpworld; CCWorld world = (CCWorld) tmpworld;
if ((world.getStatus() == 0) && world.oracle.contains(npc)) if ((world.getStatus() == 0) && world.oracle.contains(npc))
{ {
String htmltext = "32281.htm"; return "32281.htm";// TODO: Missing HTML.
return htmltext;
} }
} }
npc.showChatWindow(player); npc.showChatWindow(player);
@@ -1887,8 +1886,7 @@ public final class CrystalCaverns extends Quest
CCWorld world = (CCWorld) tmpworld; CCWorld world = (CCWorld) tmpworld;
if (!world.OracleTriggered[npc.getId() - 32275]) if (!world.OracleTriggered[npc.getId() - 32275])
{ {
String htmltext = "no.htm"; return "no.htm"; // TODO: Missing HTML.
return htmltext;
} }
npc.showChatWindow(player); npc.showChatWindow(player);
return null; return null;
@@ -1899,19 +1897,12 @@ public final class CrystalCaverns extends Quest
InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId()); InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
if (tmpworld instanceof CCWorld) if (tmpworld instanceof CCWorld)
{ {
String htmltext = "no.htm"; return "no.htm"; // TODO: Missing HTML.
return htmltext;
} }
} }
else if (npc.getId() == 32279) else if (npc.getId() == 32279)
{ {
QuestState st = player.getQuestState("131_BirdInACage"); return "32279.htm";
String htmltext = "32279.htm";
if ((st != null) && !st.isCompleted())
{
htmltext = "32279-01.htm";
}
return htmltext;
} }
else if (npc.getId() == CRYSTAL_GOLEM) else if (npc.getId() == CRYSTAL_GOLEM)
{ {
@@ -2485,42 +2476,36 @@ public final class CrystalCaverns extends Quest
{ {
if (partyMember.getInstanceId() == instanceId) if (partyMember.getInstanceId() == instanceId)
{ {
final QuestState st = getQuestState(partyMember, true); if (!isBaylor && hasQuestItems(partyMember, CONT_CRYSTAL))
if (!isBaylor && st.hasQuestItems(CONT_CRYSTAL))
{ {
st.takeItems(CONT_CRYSTAL, 1); takeItems(partyMember, CONT_CRYSTAL, 1);
st.giveItems(bossCry, 1); giveItems(partyMember, bossCry, 1);
} }
if (getRandom(10) < 5) if (getRandom(10) < 5)
{ {
st.giveItems(WHITE_SEED, num); giveItems(partyMember, WHITE_SEED, num);
} }
else else
{ {
st.giveItems(BLACK_SEED, num); giveItems(partyMember, BLACK_SEED, num);
} }
} }
} }
} }
else if (player.getInstanceId() == instanceId) else if (player.getInstanceId() == instanceId)
{ {
QuestState st = getQuestState(player, false); if (!isBaylor && hasQuestItems(player, CONT_CRYSTAL))
if (st == null)
{ {
st = newQuestState(player); takeItems(player, CONT_CRYSTAL, 1);
} giveItems(player, bossCry, 1);
if (!isBaylor && st.hasQuestItems(CONT_CRYSTAL))
{
st.takeItems(CONT_CRYSTAL, 1);
st.giveItems(bossCry, 1);
} }
if (getRandom(10) < 5) if (getRandom(10) < 5)
{ {
st.giveItems(WHITE_SEED, num); giveItems(player, WHITE_SEED, num);
} }
else else
{ {
st.giveItems(BLACK_SEED, num); giveItems(player, BLACK_SEED, num);
} }
} }
@@ -3017,12 +3002,8 @@ public final class CrystalCaverns extends Quest
{ {
return ""; return "";
} }
QuestState st = ((L2PcInstance) character).getQuestState(getName());
if (st == null) if (!hasQuestItems((L2PcInstance) character, RACE_KEY))
{
st = newQuestState((L2PcInstance) character);
}
if (!st.hasQuestItems(RACE_KEY))
{ {
return ""; return "";
} }
@@ -3031,7 +3012,7 @@ public final class CrystalCaverns extends Quest
runEmeraldRooms(world, spawns, room); runEmeraldRooms(world, spawns, room);
} }
door.openMe(); door.openMe();
st.takeItems(RACE_KEY, 1); takeItems((L2PcInstance) character, RACE_KEY, 1);
world.openedDoors.put(door, (L2PcInstance) character); world.openedDoors.put(door, (L2PcInstance) character);
break; break;
} }

View File

@@ -29,7 +29,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.entity.Instance; import com.l2jserver.gameserver.model.entity.Instance;
import com.l2jserver.gameserver.model.instancezone.InstanceWorld; import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.skills.Skill; import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.network.NpcStringId; import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.SystemMessageId;
@@ -1405,11 +1404,10 @@ public final class DarkCloudMansion extends Quest
if ((npc.getId() == SOTruth) && (world.getStatus() == 10)) if ((npc.getId() == SOTruth) && (world.getStatus() == 10))
{ {
npc.showChatWindow(player); npc.showChatWindow(player);
QuestState st = getQuestState(player, true);
if (!st.hasQuestItems(CC)) if (!hasQuestItems(player, CC))
{ {
st.giveItems(CC, 1); giveItems(player, CC, 1);
} }
} }
} }

View File

@@ -18,7 +18,7 @@
*/ */
package instances.FaeronTrainingGrounds1; package instances.FaeronTrainingGrounds1;
import quests.Q10736_ASpecialPower.Q10736_ASpecialPower; import quests.Q10735_ASpecialPower.Q10735_ASpecialPower;
import ai.npc.AbstractNpcAI; import ai.npc.AbstractNpcAI;
import com.l2jserver.gameserver.instancemanager.InstanceManager; import com.l2jserver.gameserver.instancemanager.InstanceManager;
@@ -52,7 +52,7 @@ public class FaeronTrainingGrounds1 extends AbstractNpcAI
@Override @Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{ {
final QuestState qs = player.getQuestState(Q10736_ASpecialPower.class.getSimpleName()); final QuestState qs = player.getQuestState(Q10735_ASpecialPower.class.getSimpleName());
if (qs == null) if (qs == null)
{ {
return null; return null;

View File

@@ -147,8 +147,8 @@ public final class MithrilMine extends AbstractNpcAI
world.removeAllowed(player.getObjectId()); world.removeAllowed(player.getObjectId());
player.setInstanceId(0); player.setInstanceId(0);
player.teleToLocation(EXIT_LOC, 0); player.teleToLocation(EXIT_LOC, 0);
qs.giveAdena(296425, true); giveAdena(player, 296425, true);
qs.addExpAndSp(921805, 82230); addExpAndSp(player, 921805, 82230);
qs.exitQuest(false, true); qs.exitQuest(false, true);
return "18846-03.html"; return "18846-03.html";
} }
@@ -200,9 +200,9 @@ public final class MithrilMine extends AbstractNpcAI
final QuestState qs = talker.getQuestState(Q10284_AcquisitionOfDivineSword.class.getSimpleName()); final QuestState qs = talker.getQuestState(Q10284_AcquisitionOfDivineSword.class.getSimpleName());
if ((qs != null) && qs.isMemoState(2)) if ((qs != null) && qs.isMemoState(2))
{ {
if (!qs.hasQuestItems(COLD_RESISTANCE_POTION)) if (!hasQuestItems(talker, COLD_RESISTANCE_POTION))
{ {
qs.giveItems(COLD_RESISTANCE_POTION, 1); giveItems(talker, COLD_RESISTANCE_POTION, 1);
} }
qs.setCond(4, true); qs.setCond(4, true);
enterInstance(talker, "MithrilMine.xml", START_LOC); enterInstance(talker, "MithrilMine.xml", START_LOC);
@@ -212,9 +212,9 @@ public final class MithrilMine extends AbstractNpcAI
case KEGOR: case KEGOR:
{ {
final QuestState qs = talker.getQuestState(Q10284_AcquisitionOfDivineSword.class.getSimpleName()); final QuestState qs = talker.getQuestState(Q10284_AcquisitionOfDivineSword.class.getSimpleName());
if ((qs != null) && qs.isMemoState(2) && qs.hasQuestItems(COLD_RESISTANCE_POTION) && npc.isScriptValue(0)) if ((qs != null) && qs.isMemoState(2) && hasQuestItems(talker, COLD_RESISTANCE_POTION) && npc.isScriptValue(0))
{ {
qs.takeItems(COLD_RESISTANCE_POTION, -1); takeItems(talker, COLD_RESISTANCE_POTION, -1);
qs.setCond(5, true); qs.setCond(5, true);
npc.setScriptValue(1); npc.setScriptValue(1);
startQuestTimer("TIMER", 3000, npc, talker); startQuestTimer("TIMER", 3000, npc, talker);

View File

@@ -58,17 +58,17 @@ public class Q10501_ZakenEmbroideredSoulCloak extends Quest
final QuestState st = getQuestState(player, false); final QuestState st = getQuestState(player, false);
if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false)) if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false))
{ {
final long currentCount = st.getQuestItemsCount(ZAKENS_SOUL_FRAGMENT); final long currentCount = getQuestItemsCount(player, ZAKENS_SOUL_FRAGMENT);
final long count = getRandom(1, 3); final long count = getRandom(1, 3);
if (count >= (FRAGMENT_COUNT - currentCount)) if (count >= (FRAGMENT_COUNT - currentCount))
{ {
st.giveItems(ZAKENS_SOUL_FRAGMENT, FRAGMENT_COUNT - currentCount); giveItems(player, ZAKENS_SOUL_FRAGMENT, FRAGMENT_COUNT - currentCount);
st.setCond(2, true); st.setCond(2, true);
} }
else else
{ {
st.giveItems(ZAKENS_SOUL_FRAGMENT, count); giveItems(player, ZAKENS_SOUL_FRAGMENT, count);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
} }
} }
} }
@@ -96,11 +96,6 @@ public class Q10501_ZakenEmbroideredSoulCloak extends Quest
public String onTalk(L2Npc npc, L2PcInstance player) public String onTalk(L2Npc npc, L2PcInstance player)
{ {
final QuestState st = getQuestState(player, true); final QuestState st = getQuestState(player, true);
if (st == null)
{
return getNoQuestMsg(player);
}
String htmltext = getNoQuestMsg(player); String htmltext = getNoQuestMsg(player);
switch (st.getState()) switch (st.getState())
{ {
@@ -120,10 +115,10 @@ public class Q10501_ZakenEmbroideredSoulCloak extends Quest
} }
case 2: case 2:
{ {
if (st.getQuestItemsCount(ZAKENS_SOUL_FRAGMENT) >= FRAGMENT_COUNT) if (getQuestItemsCount(player, ZAKENS_SOUL_FRAGMENT) >= FRAGMENT_COUNT)
{ {
st.giveItems(SOUL_CLOAK_OF_ZAKEN, 1); giveItems(player, SOUL_CLOAK_OF_ZAKEN, 1);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
st.exitQuest(false, true); st.exitQuest(false, true);
htmltext = "32612-06.html"; htmltext = "32612-06.html";
} }

View File

@@ -58,17 +58,17 @@ public class Q10502_FreyaEmbroideredSoulCloak extends Quest
final QuestState st = getQuestState(player, false); final QuestState st = getQuestState(player, false);
if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false)) if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false))
{ {
final long currentCount = st.getQuestItemsCount(FREYAS_SOUL_FRAGMENT); final long currentCount = getQuestItemsCount(player, FREYAS_SOUL_FRAGMENT);
final long count = getRandom(1, 3); final long count = getRandom(1, 3);
if (count >= (FRAGMENT_COUNT - currentCount)) if (count >= (FRAGMENT_COUNT - currentCount))
{ {
st.giveItems(FREYAS_SOUL_FRAGMENT, FRAGMENT_COUNT - currentCount); giveItems(player, FREYAS_SOUL_FRAGMENT, FRAGMENT_COUNT - currentCount);
st.setCond(2, true); st.setCond(2, true);
} }
else else
{ {
st.giveItems(FREYAS_SOUL_FRAGMENT, count); giveItems(player, FREYAS_SOUL_FRAGMENT, count);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
} }
} }
} }
@@ -120,10 +120,10 @@ public class Q10502_FreyaEmbroideredSoulCloak extends Quest
} }
case 2: case 2:
{ {
if (st.getQuestItemsCount(FREYAS_SOUL_FRAGMENT) >= FRAGMENT_COUNT) if (getQuestItemsCount(player, FREYAS_SOUL_FRAGMENT) >= FRAGMENT_COUNT)
{ {
st.giveItems(SOUL_CLOAK_OF_FREYA, 1); giveItems(player, SOUL_CLOAK_OF_FREYA, 1);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
st.exitQuest(false, true); st.exitQuest(false, true);
htmltext = "32612-06.html"; htmltext = "32612-06.html";
} }

View File

@@ -59,17 +59,17 @@ public class Q10503_FrintezzaEmbroideredSoulCloak extends Quest
final QuestState st = getQuestState(player, false); final QuestState st = getQuestState(player, false);
if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false)) if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false))
{ {
final long currentCount = st.getQuestItemsCount(FRINTEZZAS_SOUL_FRAGMENT); final long currentCount = getQuestItemsCount(player, FRINTEZZAS_SOUL_FRAGMENT);
final long count = getRandom(1, 3); final long count = getRandom(1, 3);
if (count >= (FRAGMENT_COUNT - currentCount)) if (count >= (FRAGMENT_COUNT - currentCount))
{ {
st.giveItems(FRINTEZZAS_SOUL_FRAGMENT, FRAGMENT_COUNT - currentCount); giveItems(player, FRINTEZZAS_SOUL_FRAGMENT, FRAGMENT_COUNT - currentCount);
st.setCond(2, true); st.setCond(2, true);
} }
else else
{ {
st.giveItems(FRINTEZZAS_SOUL_FRAGMENT, count); giveItems(player, FRINTEZZAS_SOUL_FRAGMENT, count);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
} }
} }
} }
@@ -97,11 +97,6 @@ public class Q10503_FrintezzaEmbroideredSoulCloak extends Quest
public String onTalk(L2Npc npc, L2PcInstance player) public String onTalk(L2Npc npc, L2PcInstance player)
{ {
final QuestState st = getQuestState(player, true); final QuestState st = getQuestState(player, true);
if (st == null)
{
return getNoQuestMsg(player);
}
String htmltext = getNoQuestMsg(player); String htmltext = getNoQuestMsg(player);
switch (st.getState()) switch (st.getState())
{ {
@@ -121,10 +116,10 @@ public class Q10503_FrintezzaEmbroideredSoulCloak extends Quest
} }
case 2: case 2:
{ {
if (st.getQuestItemsCount(FRINTEZZAS_SOUL_FRAGMENT) >= FRAGMENT_COUNT) if (getQuestItemsCount(player, FRINTEZZAS_SOUL_FRAGMENT) >= FRAGMENT_COUNT)
{ {
st.giveItems(SOUL_CLOAK_OF_FRINTEZZA, 1); giveItems(player, SOUL_CLOAK_OF_FRINTEZZA, 1);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
st.exitQuest(false, true); st.exitQuest(false, true);
htmltext = "32612-06.html"; htmltext = "32612-06.html";
} }

View File

@@ -59,9 +59,9 @@ public final class Q10504_JewelOfAntharas extends Quest
final QuestState st = getQuestState(player, false); final QuestState st = getQuestState(player, false);
if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false)) if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false))
{ {
st.takeItems(CLEAR_CRYSTAL, -1); takeItems(player, CLEAR_CRYSTAL, -1);
st.giveItems(FILLED_CRYSTAL_ANTHARAS_ENERGY, 1); giveItems(player, FILLED_CRYSTAL_ANTHARAS_ENERGY, 1);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
st.setCond(2, true); st.setCond(2, true);
} }
} }
@@ -76,7 +76,7 @@ public final class Q10504_JewelOfAntharas extends Quest
} }
String htmltext = null; String htmltext = null;
if ((player.getLevel() >= MIN_LEVEL) && st.hasQuestItems(PORTAL_STONE)) if ((player.getLevel() >= MIN_LEVEL) && hasQuestItems(player, PORTAL_STONE))
{ {
switch (event) switch (event)
{ {
@@ -89,7 +89,7 @@ public final class Q10504_JewelOfAntharas extends Quest
case "30755-07.html": case "30755-07.html":
{ {
st.startQuest(); st.startQuest();
st.giveItems(CLEAR_CRYSTAL, 1); giveItems(player, CLEAR_CRYSTAL, 1);
htmltext = event; htmltext = event;
break; break;
} }
@@ -118,7 +118,7 @@ public final class Q10504_JewelOfAntharas extends Quest
{ {
htmltext = "30755-02.html"; htmltext = "30755-02.html";
} }
else if (!st.hasQuestItems(PORTAL_STONE)) else if (!hasQuestItems(player, PORTAL_STONE))
{ {
htmltext = "30755-04.html"; htmltext = "30755-04.html";
} }
@@ -134,21 +134,21 @@ public final class Q10504_JewelOfAntharas extends Quest
{ {
case 1: case 1:
{ {
if (st.hasQuestItems(CLEAR_CRYSTAL)) if (hasQuestItems(player, CLEAR_CRYSTAL))
{ {
htmltext = "30755-08.html"; htmltext = "30755-08.html";
} }
else else
{ {
st.giveItems(CLEAR_CRYSTAL, 1); giveItems(player, CLEAR_CRYSTAL, 1);
htmltext = "30755-09.html"; htmltext = "30755-09.html";
} }
break; break;
} }
case 2: case 2:
{ {
st.giveItems(JEWEL_OF_ANTHARAS, 1); giveItems(player, JEWEL_OF_ANTHARAS, 1);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
st.exitQuest(false, true); st.exitQuest(false, true);
htmltext = "30755-10.html"; htmltext = "30755-10.html";
break; break;

View File

@@ -59,9 +59,9 @@ public class Q10505_JewelOfValakas extends Quest
final QuestState st = getQuestState(player, false); final QuestState st = getQuestState(player, false);
if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false)) if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false))
{ {
st.takeItems(EMPTY_CRYSTAL, -1); takeItems(player, EMPTY_CRYSTAL, -1);
st.giveItems(FILLED_CRYSTAL_VALAKAS_ENERGY, 1); giveItems(player, FILLED_CRYSTAL_VALAKAS_ENERGY, 1);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
st.setCond(2, true); st.setCond(2, true);
} }
} }
@@ -76,7 +76,7 @@ public class Q10505_JewelOfValakas extends Quest
} }
String htmltext = null; String htmltext = null;
if ((player.getLevel() >= MIN_LEVEL) && st.hasQuestItems(VACUALITE_FLOATING_STONE)) if ((player.getLevel() >= MIN_LEVEL) && hasQuestItems(player, VACUALITE_FLOATING_STONE))
{ {
switch (event) switch (event)
{ {
@@ -89,7 +89,7 @@ public class Q10505_JewelOfValakas extends Quest
case "31540-07.html": case "31540-07.html":
{ {
st.startQuest(); st.startQuest();
st.giveItems(EMPTY_CRYSTAL, 1); giveItems(player, EMPTY_CRYSTAL, 1);
htmltext = event; htmltext = event;
break; break;
} }
@@ -108,12 +108,7 @@ public class Q10505_JewelOfValakas extends Quest
@Override @Override
public String onTalk(L2Npc npc, L2PcInstance player) public String onTalk(L2Npc npc, L2PcInstance player)
{ {
QuestState st = getQuestState(player, true); final QuestState st = getQuestState(player, true);
if (st == null)
{
return getNoQuestMsg(player);
}
String htmltext = getNoQuestMsg(player); String htmltext = getNoQuestMsg(player);
switch (st.getState()) switch (st.getState())
{ {
@@ -123,7 +118,7 @@ public class Q10505_JewelOfValakas extends Quest
{ {
htmltext = "31540-02.html"; htmltext = "31540-02.html";
} }
else if (!st.hasQuestItems(VACUALITE_FLOATING_STONE)) else if (!hasQuestItems(player, VACUALITE_FLOATING_STONE))
{ {
htmltext = "31540-04.html"; htmltext = "31540-04.html";
} }
@@ -139,21 +134,21 @@ public class Q10505_JewelOfValakas extends Quest
{ {
case 1: case 1:
{ {
if (st.hasQuestItems(EMPTY_CRYSTAL)) if (hasQuestItems(player, EMPTY_CRYSTAL))
{ {
htmltext = "31540-08.html"; htmltext = "31540-08.html";
} }
else else
{ {
st.giveItems(EMPTY_CRYSTAL, 1); giveItems(player, EMPTY_CRYSTAL, 1);
htmltext = "31540-09.html"; htmltext = "31540-09.html";
} }
break; break;
} }
case 2: case 2:
{ {
st.giveItems(JEWEL_OF_VALAKAS, 1); giveItems(player, JEWEL_OF_VALAKAS, 1);
st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET); playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
st.exitQuest(false, true); st.exitQuest(false, true);
htmltext = "31540-10.html"; htmltext = "31540-10.html";
break; break;

View File

@@ -1133,7 +1133,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />

View File

@@ -130,7 +130,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" talkable="false" targetable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -453,7 +453,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />

View File

@@ -113,7 +113,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -181,7 +181,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -232,7 +232,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -249,7 +249,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -436,7 +436,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />

View File

@@ -62,7 +62,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -85,7 +85,7 @@
<height normal="22.4" /> <height normal="22.4" />
</collision> </collision>
</npc> </npc>
<npc id="33205" level="85" type="L2Teleporter" name="Ye Sagira Teleport Device" title=""> <npc id="33205" level="85" type="L2Npc" name="Ye Sagira Teleport Device" title="">
<!-- AUTO GENERATED NPC TODO: FIX IT --> <!-- AUTO GENERATED NPC TODO: FIX IT -->
<race>HUMAN</race> <race>HUMAN</race>
<sex>FEMALE</sex> <sex>FEMALE</sex>
@@ -113,7 +113,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -402,7 +402,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -487,7 +487,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -504,7 +504,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -538,7 +538,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -623,7 +623,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -657,7 +657,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -1439,7 +1439,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />
@@ -1456,7 +1456,7 @@
<run ground="120" /> <run ground="120" />
</speed> </speed>
</stats> </stats>
<status attackable="false" talkable="false" targetable="false" /> <status attackable="false" targetable="false" talkable="false" showName="false" />
<collision> <collision>
<radius normal="9.5" /> <radius normal="9.5" />
<height normal="22.4" /> <height normal="22.4" />

View File

@@ -1035,20 +1035,26 @@
</enchant2for> </enchant2for>
</skill> </skill>
<skill id="330" levels="1" name="Skill Mastery"> <skill id="330" levels="1" name="Skill Mastery">
<!-- Masters excellence in skills. Low possibility of being able to re-use skills without delay or doubles the duration. Influenced by STR. -->
<set name="icon" val="icon.skill0330" /> <set name="icon" val="icon.skill0330" />
<set name="magicLvl" val="77" /> <set name="magicLvl" val="77" />
<set name="operateType" val="P" /> <set name="operateType" val="P" />
<set name="targetType" val="SELF" /> <set name="targetType" val="SELF" />
<!-- FIXME: effect hardcoded inside formula --> <for>
<effect name="Buff">
<add stat="skillCritical" val="1" /> <!-- STR -->
</effect>
</for>
</skill> </skill>
<skill id="331" levels="1" name="Skill Mastery"> <skill id="331" levels="1" name="Skill Mastery">
<!-- Masters excellence in skills. Low possibility of being able to re-use skills without delay or doubles the duration. Influenced by INT. -->
<set name="icon" val="icon.skill0330" /> <set name="icon" val="icon.skill0330" />
<set name="magicLvl" val="77" /> <set name="magicLvl" val="77" />
<set name="operateType" val="P" /> <set name="operateType" val="P" />
<set name="targetType" val="SELF" /> <set name="targetType" val="SELF" />
<!-- FIXME: effect hardcoded inside formula --> <for>
<effect name="Buff">
<add stat="skillCritical" val="4" /> <!-- INT -->
</effect>
</for>
</skill> </skill>
<skill id="332" levels="1" name="Extra Inventory"> <skill id="332" levels="1" name="Extra Inventory">
<!-- Confirmed CT2.5 --> <!-- Confirmed CT2.5 -->
@@ -1086,7 +1092,7 @@
<for> <for>
<effect name="MpConsumePerLevel" ticks="5"> <effect name="MpConsumePerLevel" ticks="5">
<param power="2" /> <param power="2" />
<mul stat="skillMastery" val="11" /> <mul stat="skillCriticalProbability" val="11" />
</effect> </effect>
</for> </for>
</skill> </skill>
@@ -2966,4 +2972,4 @@
<set name="operateType" val="P" /> <set name="operateType" val="P" />
<set name="targetType" val="NONE" /> <set name="targetType" val="NONE" />
</skill> </skill>
</list> </list>

View File

@@ -23,7 +23,7 @@
<add stat="STR" val="2"> <add stat="STR" val="2">
<using kind="SWORD, BLUNT" /> <using kind="SWORD, BLUNT" />
</add> </add>
<add stat="skillMastery" val="2" /> <add stat="skillCritical" val="1" /> <!-- STR -->
</effect> </effect>
<effect name="TriggerSkillByAttack"> <effect name="TriggerSkillByAttack">
<param attackerType="L2Character" minAttackerLevel="1" maxAttackerLevel="99" /> <param attackerType="L2Character" minAttackerLevel="1" maxAttackerLevel="99" />
@@ -41,7 +41,7 @@
<add stat="STR" val="2"> <add stat="STR" val="2">
<using kind="SWORD, BLUNT" /> <using kind="SWORD, BLUNT" />
</add> </add>
<add stat="skillMastery" val="2" /> <add stat="skillCritical" val="1" /> <!-- STR -->
</effect> </effect>
<effect name="TriggerSkillByAttack"> <effect name="TriggerSkillByAttack">
<param attackerType="L2Character" minAttackerLevel="1" maxAttackerLevel="99" /> <param attackerType="L2Character" minAttackerLevel="1" maxAttackerLevel="99" />

View File

@@ -80,7 +80,7 @@
<mul stat="pAtkSpd" val="1.25" /> <mul stat="pAtkSpd" val="1.25" />
<mul stat="pAtk" val="1.30" /> <mul stat="pAtk" val="1.30" />
<add stat="STR" val="2" /> <add stat="STR" val="2" />
<add stat="skillMastery" val="2" /> <add stat="skillCritical" val="1" /> <!-- STR -->
<add stat="atkCountMax" val="8"> <add stat="atkCountMax" val="8">
<using kind="POLE" /> <using kind="POLE" />
</add> </add>
@@ -105,7 +105,7 @@
<mul stat="pAtkSpd" val="1.25" /> <mul stat="pAtkSpd" val="1.25" />
<mul stat="pAtk" val="1.30" /> <mul stat="pAtk" val="1.30" />
<add stat="STR" val="2" /> <add stat="STR" val="2" />
<add stat="skillMastery" val="2" /> <add stat="skillCritical" val="1" /> <!-- STR -->
<add stat="atkCountMax" val="8"> <add stat="atkCountMax" val="8">
<using kind="POLE" /> <using kind="POLE" />
</add> </add>

View File

@@ -29,7 +29,7 @@
<mul stat="pAtk" val="1.45" /> <mul stat="pAtk" val="1.45" />
<mul stat="mAtk" val="1.17" /> <mul stat="mAtk" val="1.17" />
<mul stat="mAtkSpd" val="1.23" /> <mul stat="mAtkSpd" val="1.23" />
<add stat="skillMastery" val="2" /> <add stat="skillCritical" val="4" /> <!-- INT -->
</effect> </effect>
</for> </for>
<enchant1for> <enchant1for>
@@ -39,7 +39,7 @@
<mul stat="pAtk" val="1.45" /> <mul stat="pAtk" val="1.45" />
<mul stat="mAtk" val="1.17" /> <mul stat="mAtk" val="1.17" />
<mul stat="mAtkSpd" val="1.23" /> <mul stat="mAtkSpd" val="1.23" />
<add stat="skillMastery" val="2" /> <add stat="skillCritical" val="1" /> <!-- STR -->
</effect> </effect>
</enchant1for> </enchant1for>
</skill> </skill>

View File

@@ -86,9 +86,12 @@
<set name="reuseDelay" val="15000" /> <set name="reuseDelay" val="15000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
</skill> </skill>
<skill id="11755" levels="8" name="Radiant Heal"> <skill id="11755" levels="8" name="Radiant Heal" enchantGroup1="10">
<!-- Heals target with 1488 Power added to M. Atk. If HP is full, CP is restored. --> <!-- Heals target with 1488 Power added to M. Atk. If HP is full, CP is restored. -->
<table name="#mpConsumes"> 138 138 141 143 146 148 151 153 </table> <table name="#mpConsume"> 110 110 113 114 117 118 121 122 </table>
<table name="#mpInitialConsume"> 28 28 28 29 29 30 30 31 </table>
<table name="#ench1MpConsume"> 115 107 100 93 85 78 70 63 56 48 </table>
<table name="#ench1MpInitialConsume"> 28 26 25 23 21 19 17 15 14 12 </table>
<table name="#power"> 1488 1495 1507 1519 1532 1544 1557 1570 </table> <table name="#power"> 1488 1495 1507 1519 1532 1544 1557 1570 </table>
<table name="#effectPoints"> 467 484 500 516 530 544 556 559 </table> <table name="#effectPoints"> 467 484 500 516 530 544 556 559 </table>
<table name="#magicLvl"> 85 86 88 90 92 94 96 98 </table> <table name="#magicLvl"> 85 86 88 90 92 94 96 98 </table>
@@ -96,7 +99,7 @@
<set name="operateType" val="A1" /> <set name="operateType" val="A1" />
<set name="targetType" val="ONE" /> <set name="targetType" val="ONE" />
<set name="magicLvl" val="#magicLvl" /> <set name="magicLvl" val="#magicLvl" />
<set name="mpConsume" val="#mpConsumes" /> <set name="mpConsume" val="#mpConsume" />
<set name="castRange" val="600" /> <set name="castRange" val="600" />
<set name="effectPoint" val="#effectPoints" /> <set name="effectPoint" val="#effectPoints" />
<set name="hitTime" val="4500" /> <set name="hitTime" val="4500" />
@@ -104,23 +107,29 @@
<set name="reuseDelay" val="3000" /> <set name="reuseDelay" val="3000" />
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" /> <set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="mpConsume" val="#mpConsume" />
<set name="mpInitialConsume" val="#mpInitialConsume" />
<for> <for>
<effect name="HpCpHeal"> <effect name="HpCpHeal">
<param power="#power" /> <param power="#power" />
</effect> </effect>
</for> </for>
</skill> </skill>
<skill id="11756" levels="8" name="Panic Heal"> <skill id="11756" levels="8" name="Panic Heal" enchantGroup1="10">
<!-- Heals target with 1488 Power added to M. Atk. If HP is full, CP is restored. --> <!-- Heals target with 1488 Power added to M. Atk. If HP is full, CP is restored. -->
<table name="#mpConsume"> 166 166 170 173 174 178 181 184 </table>
<table name="#mpInitialConsume"> 41 42 42 43 44 44 45 46 </table>
<table name="#power"> 1488 1495 1507 1519 1532 1544 1557 1570 </table> <table name="#power"> 1488 1495 1507 1519 1532 1544 1557 1570 </table>
<table name="#mpConsumes"> 207 208 212 216 218 222 226 230 </table>
<table name="#effectPoints"> 437 444 450 456 462 468 473 479 </table> <table name="#effectPoints"> 437 444 450 456 462 468 473 479 </table>
<table name="#magicLvl"> 85 86 88 90 92 94 96 98 </table> <table name="#magicLvl"> 85 86 88 90 92 94 96 98 </table>
<table name="#ench1mpConsume"> 172 160 149 138 128 116 105 94 84 72 </table>
<table name="#ench1mpInitialConsume"> 43 40 37 34 32 29 26 23 21 18 </table>
<set name="icon" val="icon.skill11756" /> <set name="icon" val="icon.skill11756" />
<set name="operateType" val="A1" /> <set name="operateType" val="A1" />
<set name="targetType" val="ONE" /> <set name="targetType" val="ONE" />
<set name="magicLvl" val="#magicLvl" /> <set name="magicLvl" val="#magicLvl" />
<set name="mpConsume" val="#mpConsumes" /> <set name="mpConsume" val="#mpConsume" />
<set name="mpInitialConsume" val="#mpInitialConsume" />
<set name="castRange" val="600" /> <set name="castRange" val="600" />
<set name="effectPoint" val="#effectPoints" /> <set name="effectPoint" val="#effectPoints" />
<set name="hitTime" val="1500" /> <set name="hitTime" val="1500" />
@@ -128,18 +137,22 @@
<set name="reuseDelay" val="1000" /> <set name="reuseDelay" val="1000" />
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" /> <set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<enchant1 name="mpConsume" val="#ench1mpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<for> <for>
<effect name="HpCpHeal"> <effect name="HpCpHeal">
<param power="#power" /> <param power="#power" />
</effect> </effect>
</for> </for>
</skill> </skill>
<skill id="11757" levels="8" name="Brilliant Heal"> <skill id="11757" levels="8" name="Brilliant Heal" enchantGroup1="10">
<!-- Heals yourself and nearby party members with 1191 Power added to M. Atk. If HP is full, CP is restored. --> <!-- Heals yourself and nearby party members with 1191 Power added to M. Atk. If HP is full, CP is restored. -->
<table name="#power"> 1191 1200 1210 1220 1230 1240 1250 1261 </table> <table name="#power"> 1191 1200 1210 1220 1230 1240 1250 1261 </table>
<table name="#effectPoints"> 431 467 500 530 556 566 576 586 </table> <table name="#effectPoints"> 431 467 500 530 556 566 576 586 </table>
<table name="#mpConsumes"> 277 281 286 290 295 300 305 310 </table> <table name="#mpConsumes"> 277 281 286 290 295 300 305 310 </table>
<table name="#magicLvl"> 85 87 89 91 93 95 97 99 </table> <table name="#magicLvl"> 85 87 89 91 93 95 97 99 </table>
<table name="#ench1mpConsume"> 232 217 202 188 172 157 142 128 113 98 </table>
<table name="#ench1mpInitialConsume"> 58 54 50 47 43 39 35 32 28 24 </table>
<set name="icon" val="icon.skill11757" /> <set name="icon" val="icon.skill11757" />
<set name="operateType" val="A1" /> <set name="operateType" val="A1" />
<set name="targetType" val="PARTY" /> <set name="targetType" val="PARTY" />
@@ -152,6 +165,8 @@
<set name="reuseDelay" val="5000" /> <set name="reuseDelay" val="5000" />
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" /> <set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<enchant1 name="mpConsume" val="#ench1mpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<for> <for>
<effect name="HpCpHeal"> <effect name="HpCpHeal">
<param power="#power" /> <param power="#power" />
@@ -181,35 +196,78 @@
<set name="reuseDelay" val="120000" /> <set name="reuseDelay" val="120000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
</skill> </skill>
<skill id="11760" levels="8" name="Radiant Recharge"> <skill id="11760" levels="8" name="Radiant Recharge" enchantGroup1="10">
<!-- AUTO GENERATED SKILL -->
<!-- Instantly recovers target's MP with a maximum of 166 Power depending on target's level. Also, for 10 seconds, recovers 12 MP per second. Ineffective on classes that have the Recharge skill. --> <!-- Instantly recovers target's MP with a maximum of 166 Power depending on target's level. Also, for 10 seconds, recovers 12 MP per second. Ineffective on classes that have the Recharge skill. -->
<table name="#mpConsumes"> 183 186 188 192 196 200 203 207 </table> <table name="#magicLvl"> 85 86 88 90 92 94 96 98 </table>
<set name="icon" val="icon.skill11760" /> <table name="#mpConsume"> 146 149 150 154 157 160 162 166 </table>
<table name="#mpInitialConsume"> 37 37 38 38 39 40 41 41 </table>
<table name="#amount"> 190 191 193 195 198 201 205 208 211 215 </table>
<table name="#ench1mpConsume"> 150 140 130 121 112 101 92 82 72 64 </table>
<table name="#ench1mpInitialConsume"> 37 35 32 30 28 25 23 20 18 16 </table>
<set name="abnormalTime" val="10" />
<set name="operateType" val="A2" /> <set name="operateType" val="A2" />
<set name="targetType" val="SELF" /> <set name="icon" val="icon.skill11760" />
<set name="mpConsume" val="#mpConsumes" />
<set name="castRange" val="600" />
<set name="hitTime" val="5500" /> <set name="hitTime" val="5500" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="3000" /> <set name="reuseDelay" val="3000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="magicLvl" val="#magicLvl" />
<set name="mpConsume" val="#mpConsume" />
<set name="mpInitialConsume" val="#mpInitialConsume" />
<set name="castRange" val="600" />
<set name="targetType" val="ONE" />
<enchant1 name="mpConsume" val="#ench1mpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<cond msgId="113" addName="1">
<not>
<target class_id_restriction="179, 180, 181" />
</not>
</cond>
<for>
<effect name="ManaHealByLevel">
<param power="#amount" />
</effect>
<effect name="ManaHealOverTime" ticks="1">
<param power="13" />
</effect>
</for>
</skill> </skill>
<skill id="11761" levels="5" name="Brilliant Recharge"> <skill id="11761" levels="5" name="Brilliant Recharge" enchantGroup1="10">
<!-- AUTO GENERATED SKILL -->
<!-- Instantly recovers party members' MP with a maximum of 700 Power depending on their level. Also, for 10 seconds, recovers 50 MP per second. --> <!-- Instantly recovers party members' MP with a maximum of 700 Power depending on their level. Also, for 10 seconds, recovers 50 MP per second. -->
<table name="#mpConsumes"> 3900 3970 4030 4110 4180 </table> <table name="#magicLvl"> 91 93 95 97 99 </table>
<set name="icon" val="icon.skill11761" /> <table name="#mpConsume"> 3120 3176 3224 3288 3344 </table>
<table name="#mpInitialConsume"> 780 794 806 822 836 </table>
<table name="#amount"> 700 715 725 740 750 </table>
<table name="#amountPerSec"> 50 50 50 50 55 </table>
<table name="#ench1mpConsume"> 3136 2936 2736 2536 2336 2136 1928 1728 1528 1328 </table>
<table name="#ench1mpInitialConsume"> 784 734 684 634 584 534 482 432 382 332 </table>
<set name="abnormalTime" val="10" />
<set name="operateType" val="A2" /> <set name="operateType" val="A2" />
<set name="targetType" val="SELF" /> <set name="icon" val="icon.skill11761" />
<set name="mpConsume" val="#mpConsumes" /> <set name="affectRange" val="1000" />
<set name="hitTime" val="5500" /> <set name="hitTime" val="5500" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="300000" /> <set name="reuseDelay" val="300000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="magicLvl" val="#magicLvl" />
<set name="mpConsume" val="#mpConsume" />
<set name="mpInitialConsume" val="#mpInitialConsume" />
<set name="targetType" val="PARTY" />
<enchant1 name="mpConsume" val="#ench1mpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<for>
<effect name="ManaHealByLevel">
<param power="#amount" />
</effect>
<effect name="ManaHealOverTime" ticks="1">
<param power="#amountPerSec" />
</effect>
</for>
</skill> </skill>
<skill id="11762" levels="1" name="Balance Heal"> <skill id="11762" levels="1" name="Balance Heal" enchantGroup1="10">
<!-- Equalizes all party members' HP and restores 333 HP every second for 15 seconds. --> <!-- Equalizes all party members' HP and restores 333 HP every second for 15 seconds. -->
<table name="#ench1mpConsume"> 137 132 128 124 119 114 109 105 100 96 </table>
<table name="#ench1mpInitialConsume"> 34 33 32 31 29 28 27 26 25 24 </table>
<set name="abnormalTime" val="15" /> <set name="abnormalTime" val="15" />
<set name="affectRange" val="1000" /> <set name="affectRange" val="1000" />
<set name="effectPoint" val="398" /> <set name="effectPoint" val="398" />
@@ -224,6 +282,8 @@
<set name="reuseDelay" val="20000" /> <set name="reuseDelay" val="20000" />
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" /> <set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
<set name="targetType" val="PARTY" /> <set name="targetType" val="PARTY" />
<enchant1 name="mpConsume" val="#ench1mpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<for> <for>
<effect name="RebalanceHP" /> <effect name="RebalanceHP" />
<effect name="HealOverTime" ticks="1"> <effect name="HealOverTime" ticks="1">
@@ -231,8 +291,9 @@
</effect> </effect>
</for> </for>
</skill> </skill>
<skill id="11763" levels="1" name="Radiant Purge"> <skill id="11763" levels="1" name="Radiant Purge" enchantGroup1="10">
<!-- Dispels target's debuffs. Allies only. --> <!-- Dispels target's debuffs. Allies only. -->
<table name="#ench1power"> 1 2 3 4 5 6 7 8 9 10 </table>
<set name="castRange" val="600" /> <set name="castRange" val="600" />
<set name="effectPoint" val="1" /> <set name="effectPoint" val="1" />
<set name="effectRange" val="1100" /> <set name="effectRange" val="1100" />
@@ -252,30 +313,95 @@
<param slot="debuff" rate="100" max="10" /> <param slot="debuff" rate="100" max="10" />
</effect> </effect>
</for> </for>
<enchant1for>
<effect name="DispelByCategory">
<param slot="debuff" rate="100" max="10" />
</effect>
<effect name="HealPercent">
<param power="#ench1power" />
</effect>
</enchant1for>
</skill> </skill>
<skill id="11764" levels="1" name="Brilliant Purge"> <skill id="11764" levels="1" name="Brilliant Purge" enchantGroup1="10" enchantGroup2="10">
<!-- AUTO GENERATED SKILL -->
<!-- Cancels all party members' debuffs and makes them immune to debuffs for 7 seconds. --> <!-- Cancels all party members' debuffs and makes them immune to debuffs for 7 seconds. -->
<set name="icon" val="icon.skill11764" /> <table name="#ench1mpConsume"> 71 68 66 64 61 59 56 54 52 49 </table>
<table name="#ench1mpInitialConsume"> 17 17 16 16 15 14 14 13 13 12 </table>
<table name="#ench2power"> 1 2 3 4 5 6 7 8 9 10 </table>
<set name="abnormalTime" val="7" />
<set name="affectRange" val="1000" />
<set name="magicLvl" val="94" />
<set name="operateType" val="A2" /> <set name="operateType" val="A2" />
<set name="targetType" val="SELF" /> <set name="icon" val="icon.skill11764" />
<set name="mpConsume" val="92" />
<set name="castRange" val="600" />
<set name="hitTime" val="1500" /> <set name="hitTime" val="1500" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="60000" /> <set name="reuseDelay" val="60000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="mpConsume" val="74" />
<set name="mpInitialConsume" val="18" />
<set name="castRange" val="600" />
<set name="targetType" val="PARTY" />
<enchant1 name="mpConsume" val="#ench1mpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<for>
<effect name="DispelByCategory">
<param slot="debuff" rate="100" max="10" />
</effect>
<effect name="Buff">
<set stat="debuffImmunity" val="1" />
</effect>
</for>
<enchant2for>
<effect name="DispelByCategory">
<param slot="debuff" rate="100" max="10" />
</effect>
<effect name="Buff">
<set stat="debuffImmunity" val="1" />
</effect>
<effect name="HealPercent">
<param power="#ench2power" />
</effect>
</enchant2for>
</skill> </skill>
<skill id="11765" levels="4" name="Crystal Regeneration"> <skill id="11765" levels="4" name="Crystal Regeneration" enchantGroup1="10" enchantGroup2="10" enchantGroup3="10">
<!-- AUTO GENERATED SKILL -->
<!-- Crystallize yourself and become immune to damage and debuffs for 10 seconds. Recover 266 HP and 74 MP every second. --> <!-- Crystallize yourself and become immune to damage and debuffs for 10 seconds. Recover 266 HP and 74 MP every second. -->
<table name="#mpConsumes"> 73 77 80 83 </table> <table name="#hpPower"> 266 273 280 285 </table>
<set name="icon" val="icon.skill11765" /> <table name="#mpPower"> 74 77 81 83 </table>
<table name="#mpConsume"> 73 77 80 83 </table>
<table name="#abnormalLevels"> 2 3 4 5 </table>
<table name="#ench1hpPower"> 286 288 289 291 294 297 300 302 305 308 </table>
<table name="#ench1mpPower"> 84 85 86 87 88 90 91 93 94 96 </table>
<table name="#ench1mpConsume"> 64 61 59 57 55 52 51 48 46 44 </table>
<table name="#ench1mpInitialConsume"> 16 15 14 14 13 13 12 12 11 11 </table>
<set name="abnormalLvl" val="#abnormalLevels" />
<set name="abnormalType" val="TURN_STONE" />
<set name="abnormalVisualEffect" val="FLESH_STONE" />
<set name="abnormalTime" val="10" />
<set name="operateType" val="A2" /> <set name="operateType" val="A2" />
<set name="targetType" val="SELF" /> <set name="icon" val="icon.skill11765" />
<set name="mpConsume" val="#mpConsumes" />
<set name="hitTime" val="500" /> <set name="hitTime" val="500" />
<set name="reuseDelay" val="300000" /> <set name="reuseDelay" val="300000" />
<set name="mpConsume" val="#mpConsume" />
<set name="targetType" val="SELF" />
<enchant2 name="mpConsume" val="#ench1mpConsume" />
<enchant2 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<for>
<effect name="Petrification" />
<effect name="HealOverTime" ticks="1">
<param power="#hpPower" />
</effect>
<effect name="ManaHealOverTime" ticks="1">
<param power="#mpPower" />
</effect>
</for>
<enchant1for>
<effect name="Petrification" />
<effect name="HealOverTime" ticks="1">
<param power="#ench1hpPower" />
</effect>
<effect name="ManaHealOverTime" ticks="1">
<param power="#ench1mpPower" />
</effect>
</enchant1for>
</skill> </skill>
<skill id="11766" levels="8" name="Dark Blast"> <skill id="11766" levels="8" name="Dark Blast">
<!-- AUTO GENERATED SKILL --> <!-- AUTO GENERATED SKILL -->
@@ -305,13 +431,17 @@
<set name="reuseDelay" val="6700" /> <set name="reuseDelay" val="6700" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
</skill> </skill>
<skill id="11768" levels="1" name="Rebirth"> <skill id="11768" levels="1" name="Rebirth" enchantGroup1="10" enchantGroup2="10">
<!-- Restores all party members' HP/MP/CP and has a chance of dispelling their debuffs. --> <!-- Restores all party members' HP/MP/CP and has a chance of dispelling their debuffs. -->
<table name="#ench2Rate"> 28 31 34 37 40 43 46 49 52 55 </table>
<table name="#ench1mpConsume"> 50 47 46 43 42 39 38 35 33 30 </table>
<table name="#ench1mpInitialConsume"> 12 12 11 11 10 10 9 9 8 8 </table>
<set name="icon" val="icon.skill11768" /> <set name="icon" val="icon.skill11768" />
<set name="affectRange" val="1000" /> <set name="affectRange" val="1000" />
<set name="operateType" val="A1" /> <set name="operateType" val="A1" />
<set name="targetType" val="PARTY" /> <set name="targetType" val="PARTY" />
<set name="mpConsume" val="66" /> <set name="mpConsume" val="53" />
<set name="mpInitialConsume" val="13" />
<set name="magicLvl" val="85" /> <set name="magicLvl" val="85" />
<set name="hitTime" val="3000" /> <set name="hitTime" val="3000" />
<set name="coolTime" val="200" /> <set name="coolTime" val="200" />
@@ -319,6 +449,8 @@
<set name="staticReuse" val="true" /> <set name="staticReuse" val="true" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" /> <set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
<enchant1 name="mpConsume" val="#ench1mpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<for> <for>
<effect name="ManaHealPercent"> <effect name="ManaHealPercent">
<param power="100" /> <param power="100" />
@@ -330,9 +462,23 @@
<param power="100" /> <param power="100" />
</effect> </effect>
<effect name="DispelByCategory"> <effect name="DispelByCategory">
<param slot="debuff" rate="15" max="10" /> <param slot="debuff" rate="25" max="10" />
</effect> </effect>
</for> </for>
<enchant2for>
<effect name="ManaHealPercent">
<param power="100" />
</effect>
<effect name="CpHealPercent">
<param power="100" />
</effect>
<effect name="HealPercent">
<param power="100" />
</effect>
<effect name="DispelByCategory">
<param slot="debuff" rate="#ench2Rate" max="10" />
</effect>
</enchant2for>
</skill> </skill>
<skill id="11769" levels="6" name="Dark Backfire"> <skill id="11769" levels="6" name="Dark Backfire">
<!-- AUTO GENERATED SKILL --> <!-- AUTO GENERATED SKILL -->
@@ -371,18 +517,47 @@
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="600000" /> <set name="reuseDelay" val="600000" />
</skill> </skill>
<skill id="11772" levels="4" name="Giant's Favor"> <skill id="11772" levels="4" name="Giant's Favor" enchantGroup1="10" enchantGroup2="10" enchantGroup3="10">
<!-- AUTO GENERATED SKILL -->
<!-- Performs an ancient secret technique of the Giants to increase P. Def., M. Def., and Healing power by 1000 for 30 seconds. --> <!-- Performs an ancient secret technique of the Giants to increase P. Def., M. Def., and Healing power by 1000 for 30 seconds. -->
<table name="#mpConsumes"> 17 18 21 22 </table> <table name="#power"> 1000 1500 2000 2500 </table>
<set name="icon" val="icon.skill11772" /> <table name="#mpConsume"> 14 14 17 18 </table>
<table name="#mpInitialConsume"> 3 4 4 4 </table>
<table name="#magicLvl"> 85 90 95 99 </table>
<table name="#ench1mpConsume"> 16 14 13 12 12 10 9 8 8 6 </table>
<table name="#ench1mpInitialConsume"> 4 3 3 3 3 2 2 2 2 1 </table>
<table name="#ench2abnormalTime"> 31 32 33 34 35 36 37 38 39 40 </table>
<table name="#ench3sleepPower"> 1 2 3 4 5 6 7 8 9 10 </table>
<set name="abnormalTime" val="30" />
<set name="operateType" val="A2" /> <set name="operateType" val="A2" />
<set name="targetType" val="SELF" /> <set name="icon" val="icon.skill11772" />
<set name="mpConsume" val="#mpConsumes" />
<set name="hitTime" val="4000" /> <set name="hitTime" val="4000" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="600000" /> <set name="reuseDelay" val="600000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="magicLvl" val="#magicLvl" />
<set name="mpConsume" val="#mpConsume" />
<set name="mpInitialConsume" val="#mpInitialConsume" />
<set name="targetType" val="SELF" />
<enchant1 name="mpConsume" val="#ench1mpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<enchant2 name="abnormalTime" val="#ench2abnormalTime" />
<for>
<effect name="Buff">
<add stat="healEffect" val="#power" />
<add stat="pDef" val="#power" />
<add stat="mDef" val="#power" />
</effect>
</for>
<enchant3for>
<effect name="Buff">
<add stat="healEffect" val="2500" />
<add stat="pDef" val="2500" />
<add stat="mDef" val="2500" />
</effect>
<effect name="AttackTrait">
<param SLEEP="#ench3sleepPower" />
</effect>
</enchant3for>
</skill> </skill>
<skill id="11773" levels="2" name="Lakcis Disc"> <skill id="11773" levels="2" name="Lakcis Disc">
<!-- AUTO GENERATED SKILL --> <!-- AUTO GENERATED SKILL -->
@@ -511,10 +686,10 @@
</skill> </skill>
<skill id="11784" levels="4" name="Blessed Resurrection"> <skill id="11784" levels="4" name="Blessed Resurrection">
<!-- Resurrects a dead target and restores 85% of the XP lost. --> <!-- Resurrects a dead target and restores 85% of the XP lost. -->
<table name="#mpConsume"> 35 38 42 46 </table> <table name="#mpConsume"> 28 30 33 36 </table>
<table name="#mpInitialConsume"> 7 7 8 9 </table>
<table name="#power"> 85 90 95 100 </table> <table name="#power"> 85 90 95 100 </table>
<table name="#magicLvl"> 85 90 95 99 </table> <table name="#magicLvl"> 85 90 95 99 </table>
<table name="#ench1mpConsume"> 147 142 137 132 127 122 117 112 108 103 </table>
<set name="blockedInOlympiad" val="true" /> <set name="blockedInOlympiad" val="true" />
<set name="castRange" val="400" /> <set name="castRange" val="400" />
<set name="hitTime" val="2000" /> <set name="hitTime" val="2000" />
@@ -523,6 +698,7 @@
<set name="isMagic" val="4" /> <set name="isMagic" val="4" />
<set name="magicLvl" val="#magicLvl" /> <set name="magicLvl" val="#magicLvl" />
<set name="mpConsume" val="#mpConsume" /> <set name="mpConsume" val="#mpConsume" />
<set name="mpInitialConsume" val="14" />
<set name="operateType" val="A1" /> <set name="operateType" val="A1" />
<set name="reuseDelay" val="10000" /> <set name="reuseDelay" val="10000" />
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" /> <set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />

View File

@@ -313,8 +313,11 @@
<set name="targetType" val="SELF" /> <set name="targetType" val="SELF" />
<set name="reuseDelay" val="4000" /> <set name="reuseDelay" val="4000" />
</skill> </skill>
<skill id="11828" levels="1" name="Progressive Heal"> <skill id="11828" levels="1" name="Progressive Heal" enchantGroup1="10">
<!-- Heals target and the 10 most injured allies around target by up to 40% of their Max HP. The recovery amount decreases starting from the most injured person. --> <!-- Heals target and the 10 most injured allies around target by up to 40% of their Max HP. The recovery amount decreases starting from the most injured person. -->
<table name="#ench1Cost"> 62 59 57 54 52 49 47 44 41 38 </table>
<table name="#ench1mpConsume"> 448 434 420 405 391 374 360 345 331 316 </table>
<table name="#ench1mpInitialConsume"> 112 108 105 101 97 93 90 86 82 79 </table>
<set name="affectLimit" val="5-12" /> <set name="affectLimit" val="5-12" />
<set name="affectRange" val="300" /> <set name="affectRange" val="300" />
<set name="castRange" val="900" /> <set name="castRange" val="900" />
@@ -324,11 +327,14 @@
<set name="icon" val="icon.skill11828" /> <set name="icon" val="icon.skill11828" />
<set name="isMagic" val="1" /> <!-- Magic Skill --> <set name="isMagic" val="1" /> <!-- Magic Skill -->
<set name="magicLvl" val="85" /> <set name="magicLvl" val="85" />
<set name="mpConsume" val="573" /> <set name="mpConsume" val="458" />
<set name="mpInitialConsume" val="115" />
<set name="operateType" val="A1" /> <set name="operateType" val="A1" />
<set name="reuseDelay" val="5000" /> <set name="reuseDelay" val="5000" />
<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" /> <set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
<set name="targetType" val="AREA_FRIENDLY" /> <set name="targetType" val="AREA_FRIENDLY" />
<enchant1 name="mpConsume" val="#ench1mpConsume" />
<enchant1 name="mpInitialConsume" val="#ench1mpInitialConsume" />
<for> <for>
<effect name="HealPercent"> <effect name="HealPercent">
<param power="40" /> <param power="40" />
@@ -425,13 +431,15 @@
</skill> </skill>
<skill id="11850" levels="4" name="Miraculous Benediction"> <skill id="11850" levels="4" name="Miraculous Benediction">
<!-- Restores clan members' CP/HP. Can only be used when MP is 50% or below. --> <!-- Restores clan members' CP/HP. Can only be used when MP is 50% or below. -->
<table name="#mpConsumes"> 185 205 225 243 </table> <table name="#mpConsume"> 148 164 180 194 </table>
<table name="#mpInitialConsume"> 37 41 45 49 </table>
<table name="#magicLvl"> 85 90 95 99 </table> <table name="#magicLvl"> 85 90 95 99 </table>
<table name="#mp"> 50 60 70 100 </table> <table name="#mp"> 50 60 70 100 </table>
<set name="icon" val="icon.skill11850new" /> <set name="icon" val="icon.skill11850new" />
<set name="operateType" val="A1" /> <set name="operateType" val="A1" />
<set name="targetType" val="PARTY_CLAN" /> <set name="targetType" val="PARTY_CLAN" />
<set name="mpConsume" val="#mpConsumes" /> <set name="mpConsume" val="#mpConsume" />
<set name="mpInitialConsume" val="#mpInitialConsume" />
<set name="hitTime" val="10000" /> <set name="hitTime" val="10000" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="600000" /> <set name="reuseDelay" val="600000" />
@@ -455,8 +463,8 @@
<table name="#abnormalLvls"> 4 5 6 7 </table> <table name="#abnormalLvls"> 4 5 6 7 </table>
<table name="#healEffect"> 1.05 1.07 1.1 1.15 </table> <table name="#healEffect"> 1.05 1.07 1.1 1.15 </table>
<table name="#magicLvl"> 85 90 95 99 </table> <table name="#magicLvl"> 85 90 95 99 </table>
<table name="#mpInitialConsume"> 37 41 45 49 </table>
<table name="#mpConsume"> 185 205 225 243 </table> <table name="#mpConsume"> 185 205 225 243 </table>
<table name="#mpInitialConsume"> 37 41 45 49 </table>
<set name="abnormalLvl" val="#abnormalLvls" /> <set name="abnormalLvl" val="#abnormalLvls" />
<set name="abnormalType" val="HEAL_EFFECT_UP" /> <set name="abnormalType" val="HEAL_EFFECT_UP" />
<set name="abnormalTime" val="1800" /> <set name="abnormalTime" val="1800" />
@@ -479,17 +487,31 @@
</for> </for>
</skill> </skill>
<skill id="11852" levels="4" name="Mass Mana Gain"> <skill id="11852" levels="4" name="Mass Mana Gain">
<!-- AUTO GENERATED SKILL -->
<!-- For 30 min., party members' MP heal amount + 33. --> <!-- For 30 min., party members' MP heal amount + 33. -->
<table name="#mpConsumes"> 185 205 225 243 </table> <table name="#abnormalLvls"> 2 3 4 5 </table>
<set name="icon" val="icon.skill11852new" /> <table name="#mpInitialConsume"> 37 41 45 49 </table>
<table name="#mpConsume"> 148 164 180 194 </table>
<table name="#magicLvl"> 85 90 95 99 </table>
<table name="#power"> 33 35 37 40 </table>
<set name="abnormalLvl" val="#abnormalLvls" />
<set name="abnormalType" val="RECHARGE_UP" />
<set name="abnormalTime" val="1800" />
<set name="affectRange" val="1000" />
<set name="operateType" val="A2" /> <set name="operateType" val="A2" />
<set name="targetType" val="SELF" /> <set name="icon" val="icon.skill11852new" />
<set name="mpConsume" val="#mpConsumes" />
<set name="hitTime" val="1500" /> <set name="hitTime" val="1500" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="30000" /> <set name="reuseDelay" val="30000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="magicLvl" val="#magicLvl" />
<set name="mpConsume" val="#mpConsume" />
<set name="mpInitialConsume" val="#mpInitialConsume" />
<set name="targetType" val="PARTY" />
<for>
<effect name="Buff">
<add stat="manaCharge" val="#power" />
</effect>
</for>
</skill> </skill>
<skill id="11853" levels="4" name="Superior Quick Recovery"> <skill id="11853" levels="4" name="Superior Quick Recovery">
<!-- AUTO GENERATED SKILL --> <!-- AUTO GENERATED SKILL -->
@@ -499,17 +521,31 @@
<set name="targetType" val="SELF" /> <set name="targetType" val="SELF" />
</skill> </skill>
<skill id="11854" levels="4" name="Mass Mana Gain"> <skill id="11854" levels="4" name="Mass Mana Gain">
<!-- AUTO GENERATED SKILL -->
<!-- For 30 min., party members' MP heal amount + 33. --> <!-- For 30 min., party members' MP heal amount + 33. -->
<table name="#mpConsumes"> 185 205 225 243 </table> <table name="#abnormalLvls"> 2 3 4 5 </table>
<set name="icon" val="icon.skill11852new" /> <table name="#mpInitialConsume"> 37 41 45 49 </table>
<table name="#mpConsume"> 148 164 180 194 </table>
<table name="#magicLvl"> 85 90 95 99 </table>
<table name="#power"> 33 35 37 40 </table>
<set name="abnormalLvl" val="#abnormalLvls" />
<set name="abnormalType" val="RECHARGE_UP" />
<set name="abnormalTime" val="1800" />
<set name="affectRange" val="1000" />
<set name="operateType" val="A2" /> <set name="operateType" val="A2" />
<set name="targetType" val="SELF" /> <set name="icon" val="icon.skill11852new" />
<set name="mpConsume" val="#mpConsumes" />
<set name="hitTime" val="1500" /> <set name="hitTime" val="1500" />
<set name="coolTime" val="500" /> <set name="coolTime" val="500" />
<set name="reuseDelay" val="30000" /> <set name="reuseDelay" val="30000" />
<set name="isMagic" val="1" /> <set name="isMagic" val="1" />
<set name="magicLvl" val="#magicLvl" />
<set name="mpConsume" val="#mpConsume" />
<set name="mpInitialConsume" val="#mpInitialConsume" />
<set name="targetType" val="PARTY" />
<for>
<effect name="Buff">
<add stat="manaCharge" val="#power" />
</effect>
</for>
</skill> </skill>
<skill id="11855" levels="4" name="Superior Wizard Combat"> <skill id="11855" levels="4" name="Superior Wizard Combat">
<!-- AUTO GENERATED SKILL --> <!-- AUTO GENERATED SKILL -->

View File

@@ -604,7 +604,7 @@
<effect name="Buff"> <effect name="Buff">
<add stat="rCrit" val="50" /> <add stat="rCrit" val="50" />
<add stat="mCritRate" val="20" /> <add stat="mCritRate" val="20" />
<mul stat="skillMastery" val="1.50" /> <mul stat="skillCriticalProbability" val="1.50" />
</effect> </effect>
</for> </for>
</skill> </skill>
@@ -732,7 +732,7 @@
<set name="targetType" val="SELF" /> <set name="targetType" val="SELF" />
<for> <for>
<effect name="Buff"> <effect name="Buff">
<mul stat="skillMastery" val="#bonus" /> <mul stat="skillCriticalProbability" val="#bonus" />
</effect> </effect>
</for> </for>
</skill> </skill>

View File

@@ -342,7 +342,8 @@
<xs:enumeration value="shieldDefAngle" /> <xs:enumeration value="shieldDefAngle" />
<xs:enumeration value="reflectSkillMagic" /> <xs:enumeration value="reflectSkillMagic" />
<xs:enumeration value="reflectSkillPhysic" /> <xs:enumeration value="reflectSkillPhysic" />
<xs:enumeration value="skillMastery" /> <xs:enumeration value="skillCritical" />
<xs:enumeration value="skillCriticalProbability" />
<xs:enumeration value="PrivateBuyLimit" /> <xs:enumeration value="PrivateBuyLimit" />
<xs:enumeration value="PrivateSellLimit" /> <xs:enumeration value="PrivateSellLimit" />
<xs:enumeration value="inventoryLimit" /> <xs:enumeration value="inventoryLimit" />

View File

@@ -1,53 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd"> <list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Peace Zones --> <!-- Peace Zones -->
<zone name="talking_island_town_peace_zone_1" type="PeaceZone" shape="NPoly" minZ="-2000" maxZ="-1000"> <!-- [17_25] --> <zone name="talking_island_town_peace_zone" type="PeaceZone" shape="NPoly" minZ="-2000" maxZ="-1300"> <!-- [16_25] -->
<node X="-114584" Y="252104"/> <node X="-116682" Y="251916" />
<node X="-115400" Y="252120"/> <node X="-112129" Y="251952" />
<node X="-117000" Y="252216"/> <node X="-110861" Y="251493" />
<node X="-117000" Y="253320"/> <node X="-110258" Y="251440" />
<node X="-117560" Y="253336"/> <node X="-109750" Y="251761" />
<node X="-117592" Y="254008"/> <node X="-109772" Y="255021" />
<node X="-117816" Y="254376"/> <node X="-108960" Y="255768" />
<node X="-118328" Y="254568"/> <node X="-110067" Y="258267" />
<node X="-118792" Y="255016"/> <node X="-112865" Y="260707" />
<node X="-118968" Y="255352"/> <node X="-115879" Y="260724" />
<node X="-118600" Y="256216"/> <node X="-118301" Y="256907" />
<node X="-118520" Y="256216"/> <node X="-119012" Y="255316" />
<node X="-118200" Y="256936"/> <node X="-117201" Y="252300" />
<node X="-117608" Y="256696"/>
<node X="-117368" Y="257128"/>
<node X="-117400" Y="258552"/>
<node X="-117224" Y="258776"/>
<node X="-116296" Y="259832"/>
<node X="-115816" Y="259816"/>
<node X="-115816" Y="260680"/>
<node X="-112920" Y="260696"/>
<node X="-112920" Y="259976"/>
<node X="-112392" Y="259944"/>
<node X="-111688" Y="259352"/>
<node X="-111192" Y="258984"/>
<node X="-110696" Y="258744"/>
<node X="-110104" Y="258264"/>
<node X="-109064" Y="255768"/>
<node X="-109704" Y="254760"/>
<node X="-109720" Y="254088"/>
<node X="-109992" Y="253528"/>
<node X="-109656" Y="252904"/>
<node X="-109608" Y="252168"/>
<node X="-109624" Y="251832"/>
<node X="-109720" Y="251672"/>
<node X="-110200" Y="251304"/>
<node X="-110760" Y="251288"/>
<node X="-111464" Y="251928"/>
<node X="-111832" Y="252216"/>
<node X="-112072" Y="251992"/>
</zone> </zone>
<zone name="talking_island_town_peace_zone_2" type="PeaceZone" shape="NPoly" minZ="-8050" maxZ="-7050"> <!-- [17_25] --> <zone name="faeron_town_peace_zone" type="PeaceZone" shape="NPoly" minZ="-3866" maxZ="-2866"> <!-- [17_25] -->
<node X="-113500" Y="246000"/> <node X="-82791" Y="248383" />
<node X="-113500" Y="243350"/> <node X="-81763" Y="247611" />
<node X="-115930" Y="243350"/> <node X="-79546" Y="246146" />
<node X="-115930" Y="246000"/> <node X="-78124" Y="246275" />
<node X="-76771" Y="247497" />
<node X="-76094" Y="248657" />
<node X="-77833" Y="252164" />
<node X="-79415" Y="253191" />
<node X="-81691" Y="255369" />
<node X="-84012" Y="254772" />
<node X="-84175" Y="254116" />
<node X="-83749" Y="251334" />
</zone> </zone>
<zone name="guldiocastle_town_peace1" type="PeaceZone" shape="NPoly" minZ="-3245" maxZ="-2745"> <!-- [19_21] --> <zone name="guldiocastle_town_peace1" type="PeaceZone" shape="NPoly" minZ="-3245" maxZ="-2745"> <!-- [19_21] -->
<node X="-11998" Y="123905" /> <node X="-11998" Y="123905" />
@@ -243,6 +224,12 @@
<node X="85038" Y="143856" /> <node X="85038" Y="143856" />
<node X="83111" Y="143859" /> <node X="83111" Y="143859" />
</zone> </zone>
<zone name="oren_town_peace1" type="PeaceZone" shape="NPoly" minZ="-1822" maxZ="-1022"> <!-- [22_19] -->
<node X="78900" Y="52076" />
<node X="84126" Y="52049" />
<node X="84099" Y="57117" />
<node X="78872" Y="57144" />
</zone>
<zone name="ivory_tower_peace1" type="PeaceZone" shape="NPoly" minZ="-4652" maxZ="347"> <!-- [22_18] --> <zone name="ivory_tower_peace1" type="PeaceZone" shape="NPoly" minZ="-4652" maxZ="347"> <!-- [22_18] -->
<node X="86094" Y="16382" /> <node X="86094" Y="16382" />
<node X="85888" Y="16744" /> <node X="85888" Y="16744" />
@@ -702,108 +689,6 @@
<node X="16296" Y="-113656"/> <node X="16296" Y="-113656"/>
<node X="16472" Y="-113608"/> <node X="16472" Y="-113608"/>
</zone> </zone>
<zone name="faeron_village_town_peace" type="PeaceZone" shape="NPoly" minZ="-4000" maxZ="-2500"> <!-- [17_24] -->
<node X="-82504" Y="248456"/>
<node X="-82408" Y="248520"/>
<node X="-82312" Y="248600"/>
<node X="-82200" Y="248696"/>
<node X="-82056" Y="248872"/>
<node X="-82216" Y="249096"/>
<node X="-82248" Y="249224"/>
<node X="-82440" Y="249528"/>
<node X="-82520" Y="249640"/>
<node X="-82536" Y="249752"/>
<node X="-82488" Y="250344"/>
<node X="-80616" Y="250680"/>
<node X="-79912" Y="250568"/>
<node X="-79240" Y="250888"/>
<node X="-79304" Y="251256"/>
<node X="-79528" Y="251512"/>
<node X="-79864" Y="251368"/>
<node X="-79928" Y="251512"/>
<node X="-80152" Y="251560"/>
<node X="-80760" Y="251736"/>
<node X="-80872" Y="252056"/>
<node X="-80600" Y="252200"/>
<node X="-80664" Y="252440"/>
<node X="-80664" Y="252728"/>
<node X="-80584" Y="252872"/>
<node X="-80456" Y="252984"/>
<node X="-80264" Y="253048"/>
<node X="-80056" Y="253048"/>
<node X="-79864" Y="252968"/>
<node X="-79736" Y="252824"/>
<node X="-79688" Y="252696"/>
<node X="-79704" Y="252520"/>
<node X="-79784" Y="252376"/>
<node X="-79352" Y="252008"/>
<node X="-79240" Y="251896"/>
<node X="-79176" Y="251720"/>
<node X="-79032" Y="251576"/>
<node X="-78968" Y="251544"/>
<node X="-78888" Y="251464"/>
<node X="-77944" Y="250968"/>
<node X="-77896" Y="250888"/>
<node X="-77704" Y="250328"/>
<node X="-77800" Y="249800"/>
<node X="-77512" Y="249256"/>
<node X="-77592" Y="248712"/>
<node X="-77496" Y="248232"/>
<node X="-77576" Y="247912"/>
<node X="-77768" Y="247672"/>
<node X="-78312" Y="247240"/>
<node X="-78728" Y="247000"/>
<node X="-78872" Y="246888"/>
<node X="-78904" Y="246600"/>
<node X="-78840" Y="246152"/>
<node X="-79384" Y="246232"/>
<node X="-79304" Y="246344"/>
<node X="-79240" Y="246472"/>
<node X="-79192" Y="246616"/>
<node X="-79080" Y="247032"/>
<node X="-79176" Y="247048"/>
<node X="-79336" Y="247240"/>
<node X="-79352" Y="247336"/>
<node X="-79384" Y="247464"/>
<node X="-79512" Y="247656"/>
<node X="-79416" Y="247496"/>
<node X="-79560" Y="247320"/>
<node X="-79752" Y="247224"/>
<node X="-79880" Y="247240"/>
<node X="-79960" Y="247112"/>
<node X="-80072" Y="247000"/>
<node X="-80184" Y="246920"/>
<node X="-80312" Y="246936"/>
<node X="-80408" Y="246920"/>
<node X="-80536" Y="246984"/>
<node X="-80616" Y="247048"/>
<node X="-80664" Y="247160"/>
<node X="-80776" Y="247160"/>
<node X="-80872" Y="247112"/>
<node X="-80952" Y="247096"/>
<node X="-81032" Y="247112"/>
<node X="-81112" Y="247160"/>
<node X="-81192" Y="247272"/>
<node X="-81208" Y="247448"/>
<node X="-81176" Y="247560"/>
<node X="-81192" Y="247672"/>
<node X="-81352" Y="247784"/>
<node X="-81416" Y="247864"/>
<node X="-81384" Y="247912"/>
<node X="-81384" Y="248040"/>
<node X="-81304" Y="248120"/>
<node X="-81160" Y="248184"/>
<node X="-80968" Y="248424"/>
<node X="-80776" Y="248696"/>
<node X="-81112" Y="249160"/>
<node X="-81288" Y="249160"/>
<node X="-81448" Y="249096"/>
<node X="-81608" Y="248936"/>
<node X="-81752" Y="248680"/>
<node X="-81928" Y="248680"/>
<node X="-82120" Y="248376"/>
<node X="-82200" Y="248200"/>
</zone>
<zone name="refugee_camp_peace" type="PeaceZone" shape="NPoly" minZ="-2000" maxZ="-3000"> <!-- [19_25] --> <zone name="refugee_camp_peace" type="PeaceZone" shape="NPoly" minZ="-2000" maxZ="-3000"> <!-- [19_25] -->
<node X="-29163" Y="253328"/> <node X="-29163" Y="253328"/>
<node X="-29912" Y="254568"/> <node X="-29912" Y="254568"/>

View File

@@ -40578,232 +40578,238 @@ INSERT INTO `spawnlist` VALUES
('17_25', 1, 23457, -87992, 240221, -2944, 0, 0, 4915, 60, 0, 0, 0); -- Treant ('17_25', 1, 23457, -87992, 240221, -2944, 0, 0, 4915, 60, 0, 0, 0); -- Treant
INSERT INTO `spawnlist` VALUES INSERT INTO `spawnlist` VALUES
-- New Talking Island -- New Talking Island
('16_24', 1, 33581, -114259, 253612, -1528, 0, 0, 53451, 0, 0, 0, 0), -- Eeny
('16_24', 1, 33272, -114160, 254400, -1520, 0, 0, 35532, 0, 0, 0, 0), -- Catherine
('16_24', 1, 27457, -110816, 253997, -1792, 0, 0, 48592, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -110703, 253996, -1792, 0, 0, 49700, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -110922, 253996, -1784, 0, 0, 49708, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -111126, 253995, -1760, 0, 0, 49244, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -111017, 253994, -1776, 0, 0, 49316, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -111476, 253710, -1712, 0, 0, 0, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -111444, 253355, -1752, 0, 0, 0, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -111466, 253590, -1720, 0, 0, 0, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -111456, 253479, -1744, 0, 0, 0, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -110324, 253565, -1776, 0, 0, 33236, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 27457, -110317, 253455, -1485, 0, 0, 32552, 8, 0, 0, 0), -- Scarecrow
('16_24', 1, 30001, -113625, 253606, -1496, 0, 0, 32768, 0, 0, 0, 0), -- Lector
('16_24', 1, 30002, -113580, 253130, -1496, 0, 0, 19160, 0, 0, 0, 0), -- Jackson
('16_24', 1, 30004, -113361, 255997, -1496, 0, 0, 32768, 0, 0, 0, 0), -- Katerina
('16_24', 1, 30005, -113618, 255326, -1496, 0, 0, 32768, 0, 0, 0, 0), -- Wilford
('16_24', 1, 30006, -113496, 256664, -1530, 0, 0, 57343, 0, 0, 0, 0), -- Milia
('16_24', 1, 30149, -115350, 252923, -1496, 0, 0, 0, 0, 0, 0, 0), -- Creamees
('16_24', 1, 30283, -113459, 253959, -1496, 0, 0, 32768, 0, 0, 0, 0), -- Altran
('16_24', 1, 30565, -118006, 255835, -1320, 0, 0, 62000, 0, 0, 0, 0), -- Kakai
('16_24', 1, 30767, -116361, 256878, -1520, 0, 0, 2555, 0, 0, 0, 0), -- Auctioneer
('16_24', 1, 31563, -115003, 254265, -1496, 0, 0, 0, 0, 0, 0, 0), -- Perelin
('16_24', 1, 31688, -116136, 257166, -1512, 0, 0, 56919, 0, 0, 0, 0), -- Olympiad Manager
('16_24', 1, 31690, -116177, 257317, -1512, 0, 0, 56732, 0, 0, 0, 0), -- Monument of Heroes
('16_24', 1, 32144, -117362, 256209, -1296, 0, 0, 62000, 0, 0, 0, 0), -- Xonia
('16_24', 1, 32146, -118145, 255166, -1320, 0, 0, 11664, 0, 0, 0, 0), -- Valfar
('16_24', 1, 32147, -117647, 256367, -1320, 0, 0, 43314, 0, 0, 0, 0), -- Rivian
('16_24', 1, 32148, -117632, 255400, -1296, 0, 0, 62000, 0, 0, 0, 0), -- Cindet
('16_24', 1, 32150, -117800, 256422, -1320, 0, 0, 48989, 0, 0, 0, 0), -- Took
('16_24', 1, 32151, -117606, 255131, -1296, 0, 0, 62000, 0, 0, 0, 0), -- Herz
('16_24', 1, 32153, -118017, 255965, -1320, 0, 0, 60579, 0, 0, 0, 0), -- Franco
('16_24', 1, 32156, -117537, 255537, -1296, 0, 0, 62000, 0, 0, 0, 0), -- Talbot
('16_24', 1, 32157, -118285, 255232, -1320, 0, 0, 27714, 0, 0, 0, 0), -- Moka
('16_24', 1, 32159, -117410, 256082, -1296, 0, 0, 62000, 0, 0, 0, 0), -- Kincaid
('16_24', 1, 32160, -118122, 255715, -1320, 0, 0, 5491, 0, 0, 0, 0), -- Devon
('16_24', 1, 32161, -117399, 255848, -1296, 0, 0, 62000, 0, 0, 0, 0), -- Black
('16_24', 1, 32166, -115142, 253571, -1496, 0, 0, 0, 0, 0, 0, 0), -- Trevor
('16_24', 1, 32478, -114538, 255013, -1528, 0, 0, 16384, 0, 0, 0, 0), -- Dimensional Merchant
('16_24', 1, 32966, -114388, 254501, -1552, 0, 0, 61740, 0, 0, 0, 0), -- Lilipean
('16_24', 1, 32966, -113664, 257536, -1280, 0, 0, 20380, 0, 0, 0, 0), -- Lilipean
('16_24', 1, 32966, -113130, 257529, -1288, 0, 0, 33176, 0, 0, 0, 0), -- Lilipean
('16_24', 1, 32966, -115705, 257365, -1408, 0, 0, 28476, 0, 0, 0, 0), -- Lilipean
('16_24', 1, 32972, -114371, 260304, -1176, 0, 0, 49472, 0, 0, 0, 0), -- Pantheon ('16_24', 1, 32972, -114371, 260304, -1176, 0, 0, 49472, 0, 0, 0, 0), -- Pantheon
('16_24', 1, 32974, -111384, 255882, -1440, 0, 0, 35768, 0, 0, 0, 0), -- Shannon ('16_24', 1, 32147, -117647, 256367, -1320, 0, 0, 43314, 0, 0, 0, 0), -- Rivian
('16_24', 1, 32975, -114355, 255041, -1528, 0, 0, 16384, 0, 0, 0, 0), -- Theodore ('16_25', 1, 33580, -114771, 252666, -1544, 0, 0, 0, 60, 0, 0, 0), -- Strider
('16_24', 1, 32980, -116697, 255513, -1424, 0, 0, 0, 0, 0, 0, 0), -- Gallint ('16_25', 1, 33579, -114801, 252636, -1544, 0, 0, 64427, 60, 0, 0, 0), -- Graman
('16_24', 1, 32981, -110704, 253662, -1792, 0, 0, 19286, 0, 0, 0, 0), -- Adventurers' Guide ('16_25', 1, 33022, -114808, 252218, -1520, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_24', 1, 33000, -111347, 256349, -1432, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33250, -115808, 253856, -1504, 0, 0, 60284, 60, 0, 0, 0), -- Amber
('16_24', 1, 33000, -111429, 256238, -1440, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33251, -115744, 253856, -1504, 0, 0, 32884, 60, 0, 0, 0), -- Noptis
('16_24', 1, 33000, -111453, 256365, -1432, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33282, -116160, 253536, -1504, 0, 0, 9272, 60, 0, 0, 0), -- null
('16_24', 1, 33000, -111328, 256238, -1440, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 30149, -115350, 252923, -1496, 0, 0, 0, 60, 0, 0, 0), -- Creamees
('16_24', 1, 33000, -111364, 256193, -1440, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33022, -115200, 252784, -1512, 0, 0, 10008, 60, 0, 0, 0), -- null
('16_24', 1, 33000, -111329, 256136, -1440, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33281, -115200, 252832, -1512, 0, 0, 26124, 60, 0, 0, 0), -- null
('16_24', 1, 33000, -111484, 256305, -1432, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 32166, -115142, 253571, -1496, 0, 0, 0, 60, 0, 0, 0), -- Trevor
('16_24', 1, 33000, -111242, 256232, -1440, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33026, -114912, 253632, -1496, 0, 0, 53036, 60, 0, 0, 0), -- Heymond
('16_24', 1, 33000, -111292, 256283, -1432, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33025, -115072, 255120, -1496, 0, 0, 57876, 60, 0, 0, 0), -- Lumi
('16_24', 1, 33000, -111383, 256304, -1432, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33491, -115286, 255058, -1496, 0, 0, 1981, 60, 0, 0, 0), -- Raina
('16_24', 1, 33000, -111278, 256187, -1440, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33490, -115184, 255362, -1496, 0, 0, 0, 60, 0, 0, 0), -- Trandon
('16_24', 1, 33000, -111397, 256400, -1432, 0, 0, 36032, 0, 0, 0, 0), -- ('16_25', 1, 33020, -115120, 255776, -1488, 0, 0, 7480, 60, 0, 0, 0), -- null
('16_24', 1, 33000, -111280, 253072, -1776, 0, 0, 56600, 0, 0, 0, 0), -- ('16_25', 1, 32980, -116697, 255513, -1424, 0, 0, 0, 60, 0, 0, 0), -- Gallint
('16_24', 1, 33000, -111408, 253264, -1760, 0, 0, 6892, 0, 0, 0, 0), -- ('16_25', 1, 33252, -115744, 254464, -1504, 0, 0, 11840, 60, 0, 0, 0), -- Ashily
('16_24', 1, 33000, -110624, 252432, -1976, 0, 0, 0, 0, 0, 0, 0), -- ('16_25', 1, 33022, -116128, 254240, -1496, 0, 0, 19036, 60, 0, 0, 0), -- null
('16_24', 1, 33000, -110704, 252368, -1976, 0, 0, 54876, 0, 0, 0, 0), -- ('16_25', 1, 31563, -115003, 254265, -1496, 0, 0, 0, 60, 0, 0, 0), -- Perelin
('16_24', 1, 33000, -111040, 252224, -1944, 0, 0, 59752, 0, 0, 0, 0), -- ('16_25', 1, 33122, -115541, 257556, -1288, 0, 0, 20380, 60, 0, 0, 0), -- null
('16_24', 1, 33000, -110768, 252912, -1760, 0, 0, 8672, 0, 0, 0, 0), -- ('16_25', 1, 33122, -115200, 257280, -1224, 0, 0, 36264, 60, 0, 0, 0), -- null
('16_24', 1, 33000, -110896, 251872, -1968, 0, 0, 228, 0, 0, 0, 0), -- ('16_25', 1, 32966, -115705, 257365, -1408, 0, 0, 28476, 60, 0, 0, 0), -- Lilipean
('16_24', 1, 33000, -110820, 251755, -1976, 0, 0, 43732, 0, 0, 0, 0), -- ('16_25', 1, 33122, -115865, 257543, -1408, 0, 0, 33704, 60, 0, 0, 0), -- null
('16_24', 1, 33000, -110528, 252458, -1984, 0, 0, 54000, 0, 0, 0, 0), -- ('16_25', 1, 33022, -114950, 257021, -1136, 0, 0, 0, 60, 0, 0, 0), -- null
('16_24', 1, 33002, -111506, 256121, -1440, 0, 0, 8386, 0, 0, 0, 0), -- ('16_25', 1, 33022, -114709, 257023, -1136, 0, 0, 33704, 60, 0, 0, 0), -- null
('16_24', 1, 33002, -111328, 253136, -1776, 0, 0, 3980, 0, 0, 0, 0), -- ('16_25', 1, 33359, -116323, 256835, -1520, 0, 0, 51383, 60, 0, 0, 0), -- Kerry
('16_24', 1, 33002, -110864, 251808, -1976, 0, 0, 8900, 0, 0, 0, 0), -- ('16_25', 1, 30767, -116361, 256878, -1520, 0, 0, 2555, 60, 0, 0, 0), -- Auctioneer
('16_24', 1, 33002, -110256, 252496, -1984, 0, 0, 39096, 0, 0, 0, 0), -- ('16_25', 1, 33685, -116235, 257368, -1512, 0, 0, 40556, 60, 0, 0, 0), -- Mysterious Butler
('16_24', 1, 33007, -111634, 255351, -1424, 0, 0, 63400, 0, 0, 0, 0), -- Drill Sergeant ('16_25', 1, 31690, -116177, 257317, -1512, 0, 0, 56732, 60, 0, 0, 0), -- Monument of Heroes
('16_24', 1, 33007, -110263, 253685, -1776, 0, 0, 15416, 0, 0, 0, 0), -- Drill Sergeant ('16_25', 1, 31688, -116136, 257166, -1512, 0, 0, 56919, 60, 0, 0, 0), -- Olympiad Manager
('16_24', 1, 33007, -110464, 252064, -1992, 0, 0, 48811, 0, 0, 0, 0), -- Drill Sergeant ('16_25', 1, 33249, -116400, 256048, -1464, 0, 0, 46836, 60, 0, 0, 0), -- LeBont
('16_24', 1, 33018, -111322, 255226, -1408, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33581, -114259, 253612, -1528, 0, 0, 53451, 60, 0, 0, 0), -- Eeny
('16_24', 1, 33018, -111534, 255333, -1416, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33116, -114050, 252713, -1536, 0, 0, 33744, 60, 0, 0, 0), -- Oris
('16_24', 1, 33018, -111285, 255350, -1424, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33287, -113792, 252688, -1536, 0, 0, 19244, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -111533, 255401, -1432, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33202, -114041, 252566, -1560, 0, 0, 33178, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -111444, 255308, -1416, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33022, -113885, 252208, -1560, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -111536, 255265, -1416, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33124, -114084, 252504, -1560, 0, 0, 31437, 60, 0, 0, 0), -- Apprentice
('16_24', 1, 33018, -111443, 255376, -1432, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33225, -113577, 253780, -1496, 0, 0, 11604, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -111374, 255374, -1432, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33226, -113536, 253825, -1424, 0, 0, 32057, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -111376, 255306, -1416, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33285, -113627, 253669, -1496, 0, 0, 57534, 60, 0, 0, 0), -- Marin Smith
('16_24', 1, 33018, -111309, 255282, -1424, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 33229, -113856, 253680, -1496, 0, 0, 32648, 60, 0, 0, 0), -- Sodian
('16_24', 1, 33018, -111457, 255252, -1416, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 19218, -113551, 253831, -1496, 0, 0, 16384, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -111378, 255239, -1416, 0, 0, 24288, 0, 0, 0, 0), -- ('16_25', 1, 30001, -113625, 253606, -1496, 0, 0, 32768, 60, 0, 0, 0), -- Lector
('16_24', 1, 33018, -110650, 251943, -1968, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33227, -113552, 253936, -1496, 0, 0, 55788, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -110731, 251951, -1960, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 30002, -113580, 253130, -1496, 0, 0, 19160, 60, 0, 0, 0), -- Jackson
('16_24', 1, 33018, -110597, 251792, -1976, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33530, -114383, 253554, -1536, 0, 0, 41219, 60, 0, 0, 0), -- Syranne
('16_24', 1, 33018, -110593, 251857, -1976, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 30283, -113459, 253959, -1496, 0, 0, 32768, 60, 0, 0, 0), -- Altran
('16_24', 1, 33018, -110740, 251870, -1968, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33271, -114544, 254512, -1528, 0, 0, 32767, 60, 0, 0, 0), -- Mahram
('16_24', 1, 33018, -110744, 251805, -1968, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33122, -114340, 254306, -1552, 0, 0, 28452, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -110659, 251861, -1976, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33277, -114624, 254912, -1528, 0, 0, 28452, 60, 0, 0, 0), -- Jason
('16_24', 1, 33018, -110663, 251796, -1976, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33276, -114608, 254832, -1528, 0, 0, 61740, 60, 0, 0, 0), -- Madarin
('16_24', 1, 33018, -110279, 253905, -1776, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 32966, -114388, 254501, -1552, 0, 0, 61740, 60, 0, 0, 0), -- Lilipean
('16_24', 1, 33018, -110215, 253854, -1776, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 33275, -114112, 254832, -1528, 0, 0, 38024, 60, 0, 0, 0), -- Bob
('16_24', 1, 33018, -110209, 253921, -1776, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 33273, -114208, 254352, -1528, 0, 0, 12068, 60, 0, 0, 0), -- Moongloying
('16_24', 1, 33018, -110212, 253774, -1776, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 33274, -114080, 254928, -1528, 0, 0, 49328, 60, 0, 0, 0), -- Ann
('16_24', 1, 33018, -110342, 253832, -1784, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 33268, -114160, 254545, -1528, 0, 0, 59067, 60, 0, 0, 0), -- Roll
('16_24', 1, 33018, -110279, 253781, -1776, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 33272, -114160, 254400, -1520, 0, 0, 35532, 60, 0, 0, 0), -- Catherine
('16_24', 1, 33018, -110336, 253900, -1776, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 33269, -114208, 254416, -1528, 0, 0, 60080, 60, 0, 0, 0), -- Pike
('16_24', 1, 33018, -110336, 253775, -1776, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 32975, -114355, 255041, -1528, 0, 0, 16384, 60, 0, 0, 0), -- Theodore
('16_24', 1, 33018, -110285, 253838, -1776, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 32478, -114538, 255013, -1528, 0, 0, 16384, 60, 0, 0, 0), -- Dimensional Merchant
('16_24', 1, 33018, -110446, 251937, -1992, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33232, -113520, 255104, -1496, 0, 0, 51488, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -110584, 251938, -1976, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 30004, -113361, 255997, -1496, 0, 0, 32768, 60, 0, 0, 0), -- Katerina
('16_24', 1, 33018, -110299, 251924, -2000, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33240, -113706, 255890, -1504, 0, 0, 20037, 60, 0, 0, 0), -- Donna
('16_24', 1, 33018, -110365, 251928, -1992, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33236, -113440, 255952, -1496, 0, 0, 5188, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -110454, 251805, -2000, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33235, -113664, 255584, -1496, 0, 0, 56420, 60, 0, 0, 0), -- null
('16_24', 1, 33018, -110450, 251871, -2000, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33228, -113495, 255751, -1496, 0, 0, 25269, 60, 0, 0, 0), -- Gilad
('16_24', 1, 33018, -110308, 251792, -2016, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33284, -113509, 254960, -1496, 0, 0, 37605, 60, 0, 0, 0), -- Gagabu
('16_24', 1, 33018, -110369, 251862, -2000, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 30005, -113618, 255326, -1496, 0, 0, 32768, 60, 0, 0, 0), -- Wilford
('16_24', 1, 33018, -110304, 251858, -2016, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 32327, -114043, 255996, -1512, 0, 0, 57345, 60, 0, 0, 0), -- Adventurers' Guide
('16_24', 1, 33018, -110373, 251796, -2000, 0, 0, 13172, 0, 0, 0, 0), -- ('16_25', 1, 33221, -114336, 257136, -1136, 0, 0, 36264, 60, 0, 0, 0), -- null
('16_24', 1, 33020, -115120, 255776, -1488, 0, 0, 7480, 0, 0, 0, 0), -- ('16_25', 1, 33238, -114160, 257038, -1136, 0, 0, 47939, 60, 0, 0, 0), -- Mai
('16_24', 1, 33022, -114032, 257022, -1136, 0, 0, 0, 0, 0, 0, 0), -- ('16_25', 1, 33223, -114467, 257010, -1136, 0, 0, 47939, 60, 0, 0, 0), -- Bink
('16_24', 1, 33022, -113792, 257027, -1136, 0, 0, 33176, 0, 0, 0, 0), -- ('16_25', 1, 33122, -113339, 257453, -1288, 0, 0, 51804, 60, 0, 0, 0), -- null
('16_24', 1, 33022, -113534, 259033, -1192, 0, 0, 32768, 0, 0, 0, 0), -- ('16_25', 1, 32966, -113130, 257529, -1288, 0, 0, 33176, 60, 0, 0, 0), -- Lilipean
('16_24', 1, 33022, -113540, 259846, -1192, 0, 0, 32768, 0, 0, 0, 0), -- ('16_25', 1, 33022, -114032, 257022, -1136, 0, 0, 0, 60, 0, 0, 0), -- null
('16_24', 1, 33022, -113533, 260021, -1192, 0, 0, 32768, 0, 0, 0, 0), -- ('16_25', 1, 33245, -113920, 257216, -1136, 0, 0, 51804, 60, 0, 0, 0), -- Icarus
('16_24', 1, 33022, -113526, 258843, -1192, 0, 0, 32768, 0, 0, 0, 0), -- ('16_25', 1, 32966, -113664, 257536, -1280, 0, 0, 20380, 60, 0, 0, 0), -- Lilipean
('16_24', 1, 33022, -116128, 254240, -1496, 0, 0, 19036, 0, 0, 0, 0), -- ('16_25', 1, 33125, -114016, 257152, -1136, 0, 0, 20380, 60, 0, 0, 0), -- Stiller
('16_24', 1, 33022, -114950, 257021, -1136, 0, 0, 0, 0, 0, 0, 0), -- ('16_25', 1, 33022, -113792, 257027, -1136, 0, 0, 33176, 60, 0, 0, 0), -- null
('16_24', 1, 33022, -114709, 257023, -1136, 0, 0, 33704, 0, 0, 0, 0), -- ('16_25', 1, 30006, -113504, 256653, -1504, 0, 0, 46598, 60, 0, 0, 0), -- Milia
('16_24', 1, 33022, -115205, 258828, -1192, 0, 0, 0, 0, 0, 0, 0), -- ('16_25', 1, 33237, -113424, 256240, -1496, 0, 0, 32256, 60, 0, 0, 0), -- null
('16_24', 1, 33022, -115212, 260013, -1192, 0, 0, 0, 0, 0, 0, 0), -- ('16_25', 1, 31805, -114009, 256114, -1512, 0, 0, 6132, 60, 0, 0, 0), -- Adventure Guildsman
('16_24', 1, 33022, -115205, 259823, -1192, 0, 0, 0, 0, 0, 0, 0), -- ('16_25', 1, 33955, -114107, 256033, -1512, 0, 0, 53862, 60, 0, 0, 0), -- Liberatto
('16_24', 1, 33022, -115212, 259032, -1192, 0, 0, 0, 0, 0, 0, 0), -- ('16_25', 1, 33587, -113991, 256050, -1512, 0, 0, 62181, 60, 0, 0, 0), -- Mentor Guide
('16_24', 1, 33022, -114808, 252218, -1520, 0, 0, 49153, 0, 0, 0, 0), -- ('16_25', 1, 27457, -111476, 253710, -1712, 0, 0, 0, 60, 0, 0, 0), -- Scarecrow
('16_24', 1, 33022, -115200, 252784, -1512, 0, 0, 10008, 0, 0, 0, 0), -- ('16_25', 1, 27457, -111466, 253590, -1720, 0, 0, 0, 60, 0, 0, 0), -- Scarecrow
('16_24', 1, 33022, -113885, 252208, -1560, 0, 0, 49153, 0, 0, 0, 0), --
('16_24', 1, 33022, -111328, 253088, -1776, 0, 0, 16172, 0, 0, 0, 0), --
('16_24', 1, 33022, -110992, 252144, -1960, 0, 0, 6076, 0, 0, 0, 0), --
('16_24', 1, 33022, -110768, 252816, -1776, 0, 0, 42596, 0, 0, 0, 0), --
('16_24', 1, 33022, -110832, 251856, -1968, 0, 0, 35924, 0, 0, 0, 0), --
('16_24', 1, 33023, -111333, 254134, -1736, 0, 0, 44661, 0, 0, 0, 0), -- Training Dummy
('16_24', 1, 33023, -110923, 253494, -1776, 0, 0, 32073, 0, 0, 0, 0), -- Training Dummy
('16_24', 1, 33023, -110948, 253313, -1768, 0, 0, 32073, 0, 0, 0, 0), -- Training Dummy
('16_24', 1, 33024, -110259, 254075, -1776, 0, 0, 37977, 0, 0, 0, 0), --
('16_24', 1, 33024, -111293, 252912, -1784, 0, 0, 44568, 0, 0, 0, 0), --
('16_24', 1, 33024, -110078, 251890, -2016, 0, 0, 51500, 0, 0, 0, 0), --
('16_24', 1, 33025, -115072, 255120, -1496, 0, 0, 57876, 0, 0, 0, 0), -- Lumi
('16_24', 1, 33026, -114912, 253632, -1496, 0, 0, 53036, 0, 0, 0, 0), -- Heymond
('16_24', 1, 33107, -117340, 255060, -1424, 0, 0, 61572, 0, 0, 0, 0), --
('16_24', 1, 33108, -116944, 256288, -1416, 0, 0, 59452, 0, 0, 0, 0), --
('16_24', 1, 33110, -113958, 253167, -1496, 0, 0, 3355, 0, 0, 0, 0), -- Darrygun
('16_24', 1, 33114, -112336, 254832, -1504, 0, 0, 24444, 0, 0, 0, 0), -- Banette
('16_24', 1, 33115, -112400, 254896, -1504, 0, 0, 0, 0, 0, 0, 0), --
('16_24', 1, 33116, -114050, 252713, -1536, 0, 0, 33744, 0, 0, 0, 0), -- Oris
('16_24', 1, 33122, -114340, 254306, -1552, 0, 0, 28452, 0, 0, 0, 0), --
('16_24', 1, 33122, -113339, 257453, -1288, 0, 0, 51804, 0, 0, 0, 0), --
('16_24', 1, 33122, -115865, 257543, -1408, 0, 0, 33704, 0, 0, 0, 0), --
('16_24', 1, 33122, -115200, 257280, -1224, 0, 0, 36264, 0, 0, 0, 0), --
('16_24', 1, 33122, -115541, 257556, -1288, 0, 0, 20380, 0, 0, 0, 0), --
('16_24', 1, 33124, -114084, 252504, -1560, 0, 0, 31437, 0, 0, 0, 0), -- Apprentice
('16_24', 1, 33125, -114016, 257152, -1136, 0, 0, 20380, 0, 0, 0, 0), -- Stiller
('16_24', 1, 33194, -110424, 252523, -1984, 0, 0, 54000, 0, 0, 0, 0), -- Holden
('16_24', 1, 33201, -111368, 254113, -1712, 0, 0, 5636, 0, 0, 0, 0), -- Training Soldier
('16_24', 1, 33201, -110973, 253295, -1768, 0, 0, 6508, 0, 0, 0, 0), -- Training Soldier ('16_24', 1, 33201, -110973, 253295, -1768, 0, 0, 6508, 0, 0, 0, 0), -- Training Soldier
('16_24', 1, 33201, -110973, 253470, -1768, 0, 0, 4667, 0, 0, 0, 0), -- Training Soldier ('16_24', 1, 33201, -110973, 253470, -1768, 0, 0, 4667, 0, 0, 0, 0), -- Training Soldier
('16_24', 1, 27532, -109971, 252080, -2027, 0, 0, 33713, 30, 0, 0, 0), -- Training Golem ('16_24', 1, 33201, -111368, 254113, -1712, 0, 0, 5636, 0, 0, 0, 0), -- Training Soldier
('16_24', 1, 27532, -110076, 252056, -2025, 0, 0, 33529, 30, 0, 0, 0), -- Training Golem ('16_25', 1, 33000, -111408, 253264, -1760, 0, 0, 6892, 60, 0, 0, 0), -- null
('16_24', 1, 27532, -110163, 252019, -2023, 0, 0, 39391, 30, 0, 0, 0), -- Training Golem ('16_25', 1, 33002, -111328, 253136, -1776, 0, 0, 3980, 60, 0, 0, 0), -- null
('16_24', 1, 27532, -110111, 251898, -2024, 0, 0, 50449, 30, 0, 0, 0), -- Training Golem ('16_25', 1, 33000, -111280, 253072, -1776, 0, 0, 56600, 60, 0, 0, 0), -- null
('16_24', 1, 27532, -109948, 252154, -2025, 0, 0, 58896, 30, 0, 0, 0), -- Training Golem ('16_25', 1, 33022, -111328, 253088, -1776, 0, 0, 16172, 60, 0, 0, 0), -- null
('16_24', 1, 33202, -114041, 252566, -1560, 0, 0, 33178, 0, 0, 0, 0), -- ('16_25', 1, 27457, -111456, 253479, -1744, 0, 0, 0, 60, 0, 0, 0), -- Scarecrow
('16_24', 1, 33203, -116840, 258168, -1520, 0, 0, 37352, 0, 0, 0, 0), -- ('16_25', 1, 33024, -111293, 252912, -1784, 0, 0, 44568, 60, 0, 0, 0), -- null
('16_24', 1, 33203, -116861, 258237, -1520, 0, 0, 33141, 0, 0, 0, 0), -- ('16_25', 1, 33464, -110758, 253461, -1736, 0, 0, 10250, 60, 0, 0, 0), -- Evain
('16_24', 1, 33203, -116865, 258411, -1512, 0, 0, 23451, 0, 0, 0, 0), -- ('16_25', 1, 33023, -110923, 253494, -1776, 0, 0, 32073, 60, 0, 0, 0), -- Training Dummy
('16_24', 1, 33203, -116749, 258138, -1520, 0, 0, 14166, 0, 0, 0, 0), -- ('16_25', 1, 27457, -111444, 253355, -1752, 0, 0, 0, 60, 0, 0, 0), -- Scarecrow
('16_24', 1, 33203, -116307, 258277, -1512, 0, 0, 20934, 0, 0, 0, 0), -- ('16_25', 1, 33023, -110948, 253313, -1768, 0, 0, 32073, 60, 0, 0, 0), -- Training Dummy
('16_24', 1, 33203, -116975, 258070, -1504, 0, 0, 1320, 0, 0, 0, 0), -- ('16_25', 1, 32981, -110704, 253662, -1792, 0, 0, 19286, 60, 0, 0, 0), -- Adventurers' Guide
('16_24', 1, 33203, -116685, 258476, -1504, 0, 0, 63159, 0, 0, 0, 0), -- ('16_25', 1, 33000, -110768, 252912, -1760, 0, 0, 8672, 60, 0, 0, 0), -- null
('16_24', 1, 33203, -116976, 258172, -1504, 0, 0, 12925, 0, 0, 0, 0), -- ('16_25', 1, 33022, -110768, 252816, -1776, 0, 0, 42596, 60, 0, 0, 0), -- null
('16_24', 1, 33221, -114336, 257136, -1136, 0, 0, 36264, 0, 0, 0, 0), -- ('16_25', 1, 33000, -111040, 252224, -1944, 0, 0, 59752, 60, 0, 0, 0), -- null
('16_24', 1, 33223, -114467, 257010, -1136, 0, 0, 47939, 0, 0, 0, 0), -- Bink ('16_25', 1, 33018, -110731, 251951, -1960, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_24', 1, 33225, -113577, 253780, -1496, 0, 0, 11604, 0, 0, 0, 0), -- ('16_25', 1, 33000, -110624, 252432, -1976, 0, 0, 0, 60, 0, 0, 0), -- null
('16_24', 1, 33226, -113536, 253825, -1424, 0, 0, 32057, 0, 0, 0, 0), -- ('16_25', 1, 33000, -110704, 252368, -1976, 0, 0, 54876, 60, 0, 0, 0), -- null
('16_24', 1, 33227, -113552, 253936, -1496, 0, 0, 55788, 0, 0, 0, 0), -- ('16_25', 1, 33022, -110992, 252144, -1960, 0, 0, 6076, 60, 0, 0, 0), -- null
('16_24', 1, 33229, -113856, 253680, -1496, 0, 0, 32648, 0, 0, 0, 0), -- Sodian ('16_25', 1, 33018, -110650, 251943, -1968, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_24', 1, 33230, -114670, 250100, -1712, 0, 0, 26938, 0, 0, 0, 0), -- ('16_25', 1, 27457, -110816, 253997, -1792, 0, 0, 48592, 60, 0, 0, 0), -- Scarecrow
('16_24', 1, 33230, -115322, 249850, -1696, 0, 0, 27483, 0, 0, 0, 0), -- ('16_25', 1, 27457, -110703, 253996, -1792, 0, 0, 49700, 60, 0, 0, 0), -- Scarecrow
('16_24', 1, 33231, -114670, 250225, -1736, 0, 0, 16596, 0, 0, 0, 0), -- ('16_25', 1, 27457, -111017, 253994, -1776, 0, 0, 49316, 60, 0, 0, 0), -- Scarecrow
('16_24', 1, 33232, -113520, 255104, -1496, 0, 0, 51488, 0, 0, 0, 0), -- ('16_25', 1, 27457, -110922, 253996, -1784, 0, 0, 49708, 60, 0, 0, 0), -- Scarecrow
('16_24', 1, 33235, -113664, 255584, -1496, 0, 0, 56420, 0, 0, 0, 0), -- ('16_25', 1, 27457, -111126, 253995, -1760, 0, 0, 49244, 60, 0, 0, 0), -- Scarecrow
('16_24', 1, 33236, -113440, 255952, -1496, 0, 0, 5188, 0, 0, 0, 0), -- ('16_25', 1, 33114, -112336, 254832, -1504, 0, 0, 24444, 60, 0, 0, 0), -- Banette
('16_24', 1, 33237, -113424, 256240, -1496, 0, 0, 32256, 0, 0, 0, 0), -- ('16_25', 1, 33115, -112400, 254896, -1504, 0, 0, 0, 60, 0, 0, 0), -- null
('16_24', 1, 33238, -114160, 257038, -1136, 0, 0, 47939, 0, 0, 0, 0), -- Mai ('16_25', 1, 33023, -111333, 254134, -1736, 0, 0, 44661, 60, 0, 0, 0), -- Training Dummy
('16_24', 1, 33240, -113706, 255890, -1504, 0, 0, 20037, 0, 0, 0, 0), -- Donna ('16_25', 1, 33018, -111309, 255282, -1424, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33245, -113920, 257216, -1136, 0, 0, 51804, 0, 0, 0, 0), -- Icarus ('16_25', 1, 33007, -111634, 255351, -1424, 0, 0, 63400, 60, 0, 0, 0), -- Drill Sergeant
('16_24', 1, 33247, -114112, 259088, -1192, 0, 0, 31988, 0, 0, 0, 0), -- Edrect ('16_25', 1, 33018, -111533, 255401, -1432, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33249, -116400, 256048, -1464, 0, 0, 46836, 0, 0, 0, 0), -- LeBont ('16_25', 1, 33018, -111444, 255308, -1416, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33250, -115808, 253856, -1504, 0, 0, 60284, 0, 0, 0, 0), -- Amber ('16_25', 1, 33018, -111443, 255376, -1432, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33251, -115744, 253856, -1504, 0, 0, 32884, 0, 0, 0, 0), -- Noptis ('16_25', 1, 33018, -111457, 255252, -1416, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33252, -115744, 254464, -1504, 0, 0, 11840, 0, 0, 0, 0), -- Ashily ('16_25', 1, 33018, -111374, 255374, -1432, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33268, -114160, 254545, -1528, 0, 0, 59067, 0, 0, 0, 0), -- Roll ('16_25', 1, 33018, -111285, 255350, -1424, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33269, -114208, 254416, -1528, 0, 0, 60080, 0, 0, 0, 0), -- Pike ('16_25', 1, 33018, -111534, 255333, -1416, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33271, -114544, 254512, -1528, 0, 0, 32767, 0, 0, 0, 0), -- Mahram ('16_25', 1, 33018, -111536, 255265, -1416, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33273, -114208, 254352, -1528, 0, 0, 12068, 0, 0, 0, 0), -- Moongloying ('16_25', 1, 33018, -111376, 255306, -1416, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33274, -114080, 254928, -1528, 0, 0, 49328, 0, 0, 0, 0), -- Ann ('16_25', 1, 33018, -111322, 255226, -1408, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33275, -114112, 254832, -1528, 0, 0, 38024, 0, 0, 0, 0), -- Bob ('16_25', 1, 33018, -111378, 255239, -1416, 0, 0, 24288, 60, 0, 0, 0), -- null
('16_24', 1, 33276, -114608, 254832, -1528, 0, 0, 61740, 0, 0, 0, 0), -- Madarin ('16_25', 1, 32974, -111384, 255882, -1440, 0, 0, 35768, 60, 0, 0, 0), -- Shannon
('16_24', 1, 33277, -114624, 254912, -1528, 0, 0, 28452, 0, 0, 0, 0), -- Jason ('16_25', 1, 33000, -111364, 256193, -1440, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33281, -115200, 252832, -1512, 0, 0, 26124, 0, 0, 0, 0), -- ('16_25', 1, 33000, -111484, 256305, -1432, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33282, -116160, 253536, -1504, 0, 0, 9272, 0, 0, 0, 0), -- ('16_25', 1, 33000, -111292, 256283, -1432, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33284, -113509, 254960, -1496, 0, 0, 37605, 0, 0, 0, 0), -- Gagabu ('16_25', 1, 33000, -111453, 256365, -1432, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33285, -113627, 253669, -1496, 0, 0, 57534, 0, 0, 0, 0), -- Marin Smith ('16_25', 1, 33000, -111329, 256136, -1440, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33287, -113792, 252688, -1536, 0, 0, 19244, 0, 0, 0, 0), -- ('16_25', 1, 33000, -111429, 256238, -1440, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33359, -116323, 256835, -1520, 0, 0, 51383, 0, 0, 0, 0), -- Kerry ('16_25', 1, 33000, -111347, 256349, -1432, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33454, -114547, 254264, -1528, 0, 0, 38688, 0, 0, 0, 0), -- Newbie Helper ('16_25', 1, 33000, -111242, 256232, -1440, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33464, -110758, 253461, -1736, 0, 0, 10250, 0, 0, 0, 0), -- Evain ('16_25', 1, 33000, -111397, 256400, -1432, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33490, -115184, 255362, -1496, 0, 0, 0, 0, 0, 0, 0), -- Trandon ('16_25', 1, 33002, -111506, 256121, -1440, 0, 0, 8386, 60, 0, 0, 0), -- null
('16_24', 1, 33491, -115286, 255058, -1496, 0, 0, 3561, 0, 0, 0, 0), -- Raina ('16_25', 1, 33000, -111278, 256187, -1440, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33530, -114383, 253554, -1536, 0, 0, 41219, 0, 0, 0, 0), -- Syranne ('16_25', 1, 33000, -111383, 256304, -1432, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33553, -117705, 255802, -1304, 0, 0, 62000, 0, 0, 0, 0), -- ('16_25', 1, 33000, -111328, 256238, -1440, 0, 0, 36032, 60, 0, 0, 0), -- null
('16_24', 1, 33579, -114801, 252636, -1544, 0, 0, 64427, 0, 0, 0, 0), -- Graman ('16_25', 1, 33203, -116476, 257988, -1520, 0, 0, 64975, 60, 0, 0, 0), -- null
('16_24', 1, 33580, -114771, 252666, -1544, 0, 0, 0, 0, 0, 0, 0), -- Strider ('16_25', 1, 33203, -116457, 257976, -1520, 0, 0, 63149, 60, 0, 0, 0), -- null
('16_24', 1, 33685, -116235, 257368, -1512, 0, 0, 40556, 0, 0, 0, 0), -- Mysterious Butler ('16_25', 1, 33203, -116831, 258258, -1520, 0, 0, 57162, 60, 0, 0, 0), -- null
('16_24', 1, 33792, -115107, 255558, -1496, 0, 0, 0, 0, 0, 0, 0), -- Clan Request Moderator ('16_25', 1, 33203, -116506, 258238, -1504, 0, 0, 45687, 60, 0, 0, 0), -- null
('16_24', 1, 33870, -114075, 227874, -2864, 0, 0, 45119, 0, 0, 0, 0), -- Hardin ('16_25', 1, 33203, -116455, 258574, -1480, 0, 0, 1434, 60, 0, 0, 0), -- null
('16_24', 1, 33880, -114008, 227900, -2864, 0, 0, 45119, 0, 0, 0, 0), -- Monk of Chaos ('16_25', 1, 33203, -116031, 258259, -1504, 0, 0, 16892, 60, 0, 0, 0), -- null
('16_25', 1, 31805, -114009, 256114, -1512, 0, 0, 6132, 60, 0, 0, 0), -- Adventure Guildsman ('16_25', 1, 33203, -116744, 258114, -1520, 0, 0, 37719, 60, 0, 0, 0), -- null
('16_25', 1, 33587, -113991, 256050, -1512, 0, 0, 62181, 60, 0, 0, 0), -- Mentor Guide ('16_25', 1, 33203, -116368, 258049, -1512, 0, 0, 58411, 60, 0, 0, 0), -- null
('16_25', 1, 32327, -114043, 255996, -1512, 0, 0, 57345, 60, 0, 0, 0), -- Adventurers' Guide ('16_25', 1, 33022, -115205, 258828, -1192, 0, 0, 0, 60, 0, 0, 0), -- null
('16_25', 1, 33955, -114107, 256033, -1512, 0, 0, 53862, 60, 0, 0, 0), -- Liberatto ('16_25', 1, 33022, -115205, 259823, -1192, 0, 0, 0, 60, 0, 0, 0), -- null
('16_25', 1, 33022, -115212, 260013, -1192, 0, 0, 0, 60, 0, 0, 0), -- null
('16_25', 1, 33022, -115212, 259032, -1192, 0, 0, 0, 60, 0, 0, 0), -- null
('16_25', 1, 33022, -113526, 258843, -1192, 0, 0, 32768, 60, 0, 0, 0), -- null
('16_25', 1, 33247, -114112, 259088, -1192, 0, 0, 31988, 60, 0, 0, 0), -- Edrect
('16_25', 1, 33022, -113534, 259033, -1192, 0, 0, 32768, 60, 0, 0, 0), -- null
('16_25', 1, 33022, -113540, 259846, -1192, 0, 0, 32768, 60, 0, 0, 0), -- null
('16_25', 1, 33022, -113533, 260021, -1192, 0, 0, 32768, 60, 0, 0, 0), -- null
('16_25', 1, 33024, -110259, 254075, -1776, 0, 0, 37977, 60, 0, 0, 0), -- null
('16_25', 1, 27532, -110213, 252044, -2000, 0, 0, 39096, 60, 0, 0, 0), -- Training Golem
('16_25', 1, 27532, -110131, 252071, -2008, 0, 0, 13172, 60, 0, 0, 0), -- Training Golem
('16_25', 1, 27532, -109976, 252158, -2016, 0, 0, 8900, 60, 0, 0, 0), -- Training Golem
('16_25', 1, 27532, -110034, 252098, -2016, 0, 0, 54876, 60, 0, 0, 0), -- Training Golem
('16_25', 1, 27532, -109940, 252022, -2024, 0, 0, 13172, 60, 0, 0, 0), -- Training Golem
('16_25', 1, 27457, -110324, 253565, -1776, 0, 0, 33236, 60, 0, 0, 0), -- Scarecrow
('16_25', 1, 27532, -110189, 251927, -2016, 0, 0, 51500, 60, 0, 0, 0), -- Training Golem
('16_25', 1, 27457, -110317, 253455, -1485, 0, 0, 32552, 60, 0, 0, 0), -- Scarecrow
('16_25', 1, 33018, -110336, 253900, -1776, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110209, 253921, -1776, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110336, 253775, -1776, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110212, 253774, -1776, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110342, 253832, -1784, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110279, 253781, -1776, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110285, 253838, -1776, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110215, 253854, -1776, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_25', 1, 33007, -110263, 253685, -1776, 0, 0, 15416, 60, 0, 0, 0), -- Drill Sergeant
('16_25', 1, 33018, -110279, 253905, -1776, 0, 0, 49153, 60, 0, 0, 0), -- null
('16_25', 1, 33021, -109948, 252274, -2008, 0, 0, 29960, 60, 0, 0, 0), -- Guard
('16_25', 1, 33002, -110256, 252496, -1984, 0, 0, 39096, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110299, 251924, -2000, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33007, -110464, 252064, -1992, 0, 0, 48811, 60, 0, 0, 0), -- Drill Sergeant
('16_25', 1, 33018, -110446, 251937, -1992, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110584, 251938, -1976, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33194, -110424, 252523, -1984, 0, 0, 54000, 60, 0, 0, 0), -- Holden
('16_25', 1, 33018, -110365, 251928, -1992, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33000, -110528, 252458, -1984, 0, 0, 54000, 60, 0, 0, 0), -- null
('16_25', 1, 33106, -113492, 250438, -1880, 0, 0, 62998, 60, 0, 0, 0), -- Guard
('16_25', 1, 33230, -114670, 250225, -1736, 0, 0, 29757, 60, 0, 0, 0), -- null
('16_25', 1, 33231, -114670, 250225, -1736, 0, 0, 31161, 60, 0, 0, 0), -- null
('16_25', 1, 33231, -114670, 250350, -1744, 0, 0, 40504, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110597, 251792, -1976, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33000, -110896, 251872, -1968, 0, 0, 228, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110740, 251870, -1968, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33022, -110832, 251856, -1968, 0, 0, 35924, 60, 0, 0, 0), -- null
('16_25', 1, 33002, -110864, 251808, -1976, 0, 0, 8900, 60, 0, 0, 0), -- null
('16_25', 1, 33000, -110820, 251755, -1976, 0, 0, 43732, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110744, 251805, -1968, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110663, 251796, -1976, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110659, 251861, -1976, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110593, 251857, -1976, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 20120, -108713, 251011, -2936, 0, 0, 46545, 60, 0, 0, 0), -- Wolf
('16_25', 1, 20091, -108687, 250408, -3000, 0, 0, 40961, 60, 0, 0, 0), -- Young Fox
('16_25', 1, 20151, -109419, 250319, -2920, 0, 0, 41236, 60, 0, 0, 0), -- Kobold
('16_25', 1, 20091, -109008, 250619, -2960, 0, 0, 30593, 60, 0, 0, 0), -- Young Fox
('16_25', 1, 20119, -108864, 251216, -2888, 0, 0, 5177, 60, 0, 0, 0), -- Elder Fox
('16_25', 1, 20120, -108558, 251554, -3048, 0, 0, 47713, 60, 0, 0, 0), -- Wolf
('16_25', 1, 33024, -110078, 251890, -2016, 0, 0, 51500, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110450, 251871, -2000, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110454, 251805, -2000, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110308, 251792, -2016, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110304, 251858, -2016, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110373, 251796, -2000, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33018, -110369, 251862, -2000, 0, 0, 13172, 60, 0, 0, 0), -- null
('16_25', 1, 33230, -114670, 250475, -1760, 0, 0, 3507, 60, 0, 0, 0), -- null
('16_25', 1, 8440, -116270, 251037, -1640, 0, 0, 61389, 60, 0, 0, 0), -- Pirate Captain Uthanka's Tombstone
('16_25', 1, 33231, -116137, 249975, -1768, 0, 0, 58949, 60, 0, 0, 0), -- null
('16_25', 1, 33553, -117705, 255802, -1304, 0, 0, 62000, 60, 0, 0, 0), -- null
('16_25', 1, 30565, -118006, 255835, -1320, 0, 0, 62000, 60, 0, 0, 0), -- Kakai
('16_25', 1, 32160, -118122, 255715, -1320, 0, 0, 42047, 60, 0, 0, 0), -- Devon
('16_25', 1, 32153, -118017, 255965, -1320, 0, 0, 60986, 60, 0, 0, 0), -- Franco
('16_25', 1, 32157, -118285, 255232, -1320, 0, 0, 11573, 60, 0, 0, 0), -- Moka
('16_25', 1, 32146, -118145, 255166, -1320, 0, 0, 14361, 60, 0, 0, 0), -- Valfar
('16_25', 1, 33107, -117340, 255060, -1424, 0, 0, 61572, 60, 0, 0, 0), -- null
('16_25', 1, 32151, -117606, 255131, -1296, 0, 0, 62000, 60, 0, 0, 0), -- Herz
('16_25', 1, 32156, -117537, 255537, -1296, 0, 0, 62000, 60, 0, 0, 0), -- Talbot
('16_25', 1, 32161, -117399, 255848, -1296, 0, 0, 62000, 60, 0, 0, 0), -- Black
('16_25', 1, 32148, -117632, 255400, -1296, 0, 0, 62000, 60, 0, 0, 0), -- Cindet
('16_25', 1, 32150, -117800, 256422, -1320, 0, 0, 45696, 60, 0, 0, 0), -- Took
-- 16_25 Mobs & NPCs out of Town -- 16_25 Mobs & NPCs out of Town
('16_25', 1, 19152, -120086, 244402, -2048, 0, 0, 51706, 60, 0, 0, 0), -- Combat Soldier ('16_25', 1, 19152, -120086, 244402, -2048, 0, 0, 51706, 60, 0, 0, 0), -- Combat Soldier
('16_25', 1, 19152, -120074, 244000, -2184, 0, 0, 8447, 60, 0, 0, 0), -- Combat Soldier ('16_25', 1, 19152, -120074, 244000, -2184, 0, 0, 8447, 60, 0, 0, 0), -- Combat Soldier
@@ -40827,7 +40833,6 @@ INSERT INTO `spawnlist` VALUES
('16_25', 1, 19152, -116409, 233581, -2896, 0, 0, 10900, 60, 0, 0, 0), -- Combat Soldier ('16_25', 1, 19152, -116409, 233581, -2896, 0, 0, 10900, 60, 0, 0, 0), -- Combat Soldier
('16_25', 1, 19152, -114814, 235410, -3088, 0, 0, 42125, 60, 0, 0, 0), -- Combat Soldier ('16_25', 1, 19152, -114814, 235410, -3088, 0, 0, 42125, 60, 0, 0, 0), -- Combat Soldier
('16_25', 1, 19152, -114763, 248249, -1880, 0, 0, 36440, 60, 0, 0, 0), -- Combat Soldier ('16_25', 1, 19152, -114763, 248249, -1880, 0, 0, 36440, 60, 0, 0, 0), -- Combat Soldier
('16_25', 1, 19152, -114608, 251953, -1616, 0, 0, 20836, 60, 0, 0, 0), -- Combat Soldier
('16_25', 1, 19152, -114164, 235668, -3088, 0, 0, 1058, 60, 0, 0, 0), -- Combat Soldier ('16_25', 1, 19152, -114164, 235668, -3088, 0, 0, 1058, 60, 0, 0, 0), -- Combat Soldier
('16_25', 1, 19152, -113260, 236063, -3040, 0, 0, 7367, 60, 0, 0, 0), -- Combat Soldier ('16_25', 1, 19152, -113260, 236063, -3040, 0, 0, 7367, 60, 0, 0, 0), -- Combat Soldier
('16_25', 1, 19152, -113214, 236103, -3040, 0, 0, 40204, 60, 0, 0, 0), -- Combat Soldier ('16_25', 1, 19152, -113214, 236103, -3040, 0, 0, 40204, 60, 0, 0, 0), -- Combat Soldier
@@ -41310,118 +41315,6 @@ INSERT INTO `spawnlist` VALUES
('16_25', 1, 33191, -118236, 239223, -2736, 0, 0, 0, 60, 0, 0, 0), -- Ye Sagira Teleport Device ('16_25', 1, 33191, -118236, 239223, -2736, 0, 0, 0, 60, 0, 0, 0), -- Ye Sagira Teleport Device
('16_25', 1, 33192, -116475, 239115, -2768, 0, 0, 0, 60, 0, 0, 0), -- Ye Sagira Teleport Device ('16_25', 1, 33192, -116475, 239115, -2768, 0, 0, 0, 60, 0, 0, 0), -- Ye Sagira Teleport Device
('16_25', 1, 33197, -115099, 230192, -1648, 0, 0, 0, 60, 0, 0, 0), -- Ye Sagira Teleport Device ('16_25', 1, 33197, -115099, 230192, -1648, 0, 0, 0, 60, 0, 0, 0), -- Ye Sagira Teleport Device
('16_25', 1, 33203, -117047, 258068, -1496, 0, 0, 23659, 60, 0, 0, 0), --
('16_25', 1, 33203, -117045, 257982, -1504, 0, 0, 28241, 60, 0, 0, 0), --
('16_25', 1, 33203, -116971, 258319, -1504, 0, 0, 48256, 60, 0, 0, 0), --
('16_25', 1, 33203, -116922, 257972, -1520, 0, 0, 64361, 60, 0, 0, 0), --
('16_25', 1, 33203, -116908, 258124, -1504, 0, 0, 23293, 60, 0, 0, 0), --
('16_25', 1, 33203, -116905, 257961, -1520, 0, 0, 46148, 60, 0, 0, 0), --
('16_25', 1, 33203, -116873, 258069, -1504, 0, 0, 52995, 60, 0, 0, 0), --
('16_25', 1, 33203, -116818, 258309, -1512, 0, 0, 3408, 60, 0, 0, 0), --
('16_25', 1, 33203, -116812, 257970, -1520, 0, 0, 289, 60, 0, 0, 0), --
('16_25', 1, 33203, -116806, 258042, -1528, 0, 0, 33375, 60, 0, 0, 0), --
('16_25', 1, 33203, -116778, 258256, -1520, 0, 0, 43425, 60, 0, 0, 0), --
('16_25', 1, 33203, -116770, 258125, -1520, 0, 0, 52437, 60, 0, 0, 0), --
('16_25', 1, 33203, -116766, 258655, -1512, 0, 0, 20336, 60, 0, 0, 0), --
('16_25', 1, 33203, -116758, 258251, -1520, 0, 0, 36635, 60, 0, 0, 0), --
('16_25', 1, 33203, -116753, 258396, -1512, 0, 0, 41341, 60, 0, 0, 0), --
('16_25', 1, 33203, -116750, 258268, -1520, 0, 0, 12709, 60, 0, 0, 0), --
('16_25', 1, 33203, -116736, 257954, -1520, 0, 0, 59356, 60, 0, 0, 0), --
('16_25', 1, 33203, -116721, 258268, -1520, 0, 0, 26032, 60, 0, 0, 0), --
('16_25', 1, 33203, -116713, 258115, -1528, 0, 0, 1039, 60, 0, 0, 0), --
('16_25', 1, 33203, -116693, 258309, -1504, 0, 0, 22202, 60, 0, 0, 0), --
('16_25', 1, 33203, -116684, 258571, -1504, 0, 0, 1573, 60, 0, 0, 0), --
('16_25', 1, 33203, -116684, 258572, -1504, 0, 0, 27693, 60, 0, 0, 0), --
('16_25', 1, 33203, -116666, 258186, -1520, 0, 0, 13938, 60, 0, 0, 0), --
('16_25', 1, 33203, -116661, 258351, -1504, 0, 0, 9383, 60, 0, 0, 0), --
('16_25', 1, 33203, -116653, 258400, -1504, 0, 0, 27851, 60, 0, 0, 0), --
('16_25', 1, 33203, -116650, 258237, -1520, 0, 0, 53703, 60, 0, 0, 0), --
('16_25', 1, 33203, -116649, 258541, -1496, 0, 0, 30045, 60, 0, 0, 0), --
('16_25', 1, 33203, -116647, 258224, -1520, 0, 0, 35035, 60, 0, 0, 0), --
('16_25', 1, 33203, -116643, 258209, -1520, 0, 0, 35381, 60, 0, 0, 0), --
('16_25', 1, 33203, -116602, 258434, -1504, 0, 0, 52809, 60, 0, 0, 0), --
('16_25', 1, 33203, -116578, 258540, -1488, 0, 0, 26949, 60, 0, 0, 0), --
('16_25', 1, 33203, -116569, 258361, -1512, 0, 0, 24177, 60, 0, 0, 0), --
('16_25', 1, 33203, -116560, 258081, -1528, 0, 0, 18201, 60, 0, 0, 0), --
('16_25', 1, 33203, -116553, 258023, -1528, 0, 0, 32767, 60, 0, 0, 0), --
('16_25', 1, 33203, -116545, 258067, -1528, 0, 0, 36253, 60, 0, 0, 0), --
('16_25', 1, 33203, -116543, 258146, -1528, 0, 0, 21134, 60, 0, 0, 0), --
('16_25', 1, 33203, -116542, 257956, -1520, 0, 0, 15468, 60, 0, 0, 0), --
('16_25', 1, 33203, -116538, 258492, -1488, 0, 0, 57345, 60, 0, 0, 0), --
('16_25', 1, 33203, -116478, 257990, -1520, 0, 0, 33725, 60, 0, 0, 0), --
('16_25', 1, 33203, -116478, 258344, -1504, 0, 0, 6514, 60, 0, 0, 0), --
('16_25', 1, 33203, -116476, 258083, -1528, 0, 0, 65142, 60, 0, 0, 0), --
('16_25', 1, 33203, -116475, 258540, -1480, 0, 0, 16383, 60, 0, 0, 0), --
('16_25', 1, 33203, -116469, 258019, -1528, 0, 0, 56812, 60, 0, 0, 0), --
('16_25', 1, 33203, -116466, 258296, -1504, 0, 0, 9065, 60, 0, 0, 0), --
('16_25', 1, 33203, -116460, 258026, -1520, 0, 0, 60241, 60, 0, 0, 0), --
('16_25', 1, 33203, -116459, 258283, -1504, 0, 0, 58598, 60, 0, 0, 0), --
('16_25', 1, 33203, -116446, 258321, -1504, 0, 0, 4462, 60, 0, 0, 0), --
('16_25', 1, 33203, -116445, 257940, -1512, 0, 0, 31765, 60, 0, 0, 0), --
('16_25', 1, 33203, -116436, 258493, -1488, 0, 0, 59694, 60, 0, 0, 0), --
('16_25', 1, 33203, -116432, 258249, -1504, 0, 0, 15453, 60, 0, 0, 0), --
('16_25', 1, 33203, -116417, 257991, -1512, 0, 0, 3399, 60, 0, 0, 0), --
('16_25', 1, 33203, -116410, 258306, -1504, 0, 0, 5785, 60, 0, 0, 0), --
('16_25', 1, 33203, -116403, 258147, -1520, 0, 0, 3220, 60, 0, 0, 0), --
('16_25', 1, 33203, -116403, 258193, -1504, 0, 0, 15071, 60, 0, 0, 0), --
('16_25', 1, 33203, -116384, 257931, -1512, 0, 0, 38184, 60, 0, 0, 0), --
('16_25', 1, 33203, -116383, 258015, -1512, 0, 0, 50978, 60, 0, 0, 0), --
('16_25', 1, 33203, -116363, 257983, -1512, 0, 0, 49153, 60, 0, 0, 0), --
('16_25', 1, 33203, -116340, 257969, -1512, 0, 0, 61340, 60, 0, 0, 0), --
('16_25', 1, 33203, -116312, 257994, -1512, 0, 0, 52437, 60, 0, 0, 0), --
('16_25', 1, 33203, -116292, 258207, -1512, 0, 0, 2885, 60, 0, 0, 0), --
('16_25', 1, 33203, -116282, 258575, -1488, 0, 0, 32510, 60, 0, 0, 0), --
('16_25', 1, 33203, -116278, 257991, -1512, 0, 0, 1033, 60, 0, 0, 0), --
('16_25', 1, 33203, -116268, 258411, -1504, 0, 0, 16709, 60, 0, 0, 0), --
('16_25', 1, 33203, -116265, 258279, -1512, 0, 0, 36933, 60, 0, 0, 0), --
('16_25', 1, 33203, -116263, 258136, -1512, 0, 0, 47196, 60, 0, 0, 0), --
('16_25', 1, 33203, -116192, 258267, -1512, 0, 0, 33155, 60, 0, 0, 0), --
('16_25', 1, 33203, -116190, 258271, -1512, 0, 0, 9062, 60, 0, 0, 0), --
('16_25', 1, 33203, -116185, 258404, -1512, 0, 0, 7223, 60, 0, 0, 0), --
('16_25', 1, 33203, -116179, 258181, -1512, 0, 0, 8870, 60, 0, 0, 0), --
('16_25', 1, 33203, -116178, 257941, -1512, 0, 0, 40693, 60, 0, 0, 0), --
('16_25', 1, 33203, -116178, 258281, -1512, 0, 0, 24371, 60, 0, 0, 0), --
('16_25', 1, 33203, -116169, 258191, -1512, 0, 0, 52509, 60, 0, 0, 0), --
('16_25', 1, 33203, -116161, 258338, -1512, 0, 0, 5968, 60, 0, 0, 0), --
('16_25', 1, 33203, -116131, 258264, -1512, 0, 0, 44633, 60, 0, 0, 0), --
('16_25', 1, 33203, -116113, 258100, -1512, 0, 0, 41343, 60, 0, 0, 0), --
('16_25', 1, 33203, -116112, 258451, -1512, 0, 0, 41805, 60, 0, 0, 0), --
('16_25', 1, 33203, -116074, 258019, -1512, 0, 0, 1401, 60, 0, 0, 0), --
('16_25', 1, 33203, -116068, 258520, -1512, 0, 0, 52326, 60, 0, 0, 0), --
('16_25', 1, 33203, -116030, 258496, -1504, 0, 0, 8886, 60, 0, 0, 0), --
('16_25', 1, 33203, -109962, 247219, -2904, 0, 0, 52978, 60, 0, 0, 0), --
('16_25', 1, 33203, -108586, 246979, -3184, 0, 0, 1396, 60, 0, 0, 0), --
('16_25', 1, 33203, -108336, 238760, -2064, 0, 0, 41566, 60, 0, 0, 0), --
('16_25', 1, 33203, -108189, 244880, -2680, 0, 0, 38826, 60, 0, 0, 0), --
('16_25', 1, 33203, -108175, 243461, -2792, 0, 0, 56784, 60, 0, 0, 0), --
('16_25', 1, 33203, -108141, 243153, -2728, 0, 0, 30266, 60, 0, 0, 0), --
('16_25', 1, 33203, -107628, 242516, -2592, 0, 0, 38490, 60, 0, 0, 0), --
('16_25', 1, 33203, -107488, 242846, -2648, 0, 0, 53314, 60, 0, 0, 0), --
('16_25', 1, 33203, -107402, 243022, -2672, 0, 0, 4305, 60, 0, 0, 0), --
('16_25', 1, 33203, -107212, 241658, -2256, 0, 0, 8963, 60, 0, 0, 0), --
('16_25', 1, 33203, -107208, 244099, -2880, 0, 0, 24236, 60, 0, 0, 0), --
('16_25', 1, 33203, -106964, 242926, -2616, 0, 0, 18340, 60, 0, 0, 0), --
('16_25', 1, 33203, -106943, 242224, -2312, 0, 0, 22907, 60, 0, 0, 0), --
('16_25', 1, 33203, -106334, 243454, -2824, 0, 0, 47921, 60, 0, 0, 0), --
('16_25', 1, 33203, -105965, 242257, -2256, 0, 0, 63645, 60, 0, 0, 0), --
('16_25', 1, 33203, -105874, 242308, -2304, 0, 0, 24873, 60, 0, 0, 0), --
('16_25', 1, 33203, -105861, 243563, -2920, 0, 0, 16188, 60, 0, 0, 0), --
('16_25', 1, 33203, -105798, 243396, -2872, 0, 0, 64056, 60, 0, 0, 0), --
('16_25', 1, 33203, -105776, 241957, -2064, 0, 0, 53515, 60, 0, 0, 0), --
('16_25', 1, 33203, -105686, 242020, -2136, 0, 0, 319, 60, 0, 0, 0), --
('16_25', 1, 33203, -105639, 240763, -1992, 0, 0, 37742, 60, 0, 0, 0), --
('16_25', 1, 33203, -105614, 241128, -1872, 0, 0, 9581, 60, 0, 0, 0), --
('16_25', 1, 33203, -105507, 242423, -2392, 0, 0, 18197, 60, 0, 0, 0), --
('16_25', 1, 33203, -105421, 242305, -2336, 0, 0, 34757, 60, 0, 0, 0), --
('16_25', 1, 33203, -105416, 242502, -2472, 0, 0, 13270, 60, 0, 0, 0), --
('16_25', 1, 33203, -105347, 242292, -2352, 0, 0, 55887, 60, 0, 0, 0), --
('16_25', 1, 33203, -105243, 240440, -2032, 0, 0, 24575, 60, 0, 0, 0), --
('16_25', 1, 33203, -105077, 238719, -1560, 0, 0, 54818, 60, 0, 0, 0), --
('16_25', 1, 33203, -104421, 244663, -3976, 0, 0, 47611, 60, 0, 0, 0), --
('16_25', 1, 33203, -104407, 244757, -3984, 0, 0, 4074, 60, 0, 0, 0), --
('16_25', 1, 33203, -104397, 238564, -1664, 0, 0, 10890, 60, 0, 0, 0), --
('16_25', 1, 33203, -104369, 238321, -1640, 0, 0, 61686, 60, 0, 0, 0), --
('16_25', 1, 33203, -104270, 238836, -1832, 0, 0, 35474, 60, 0, 0, 0), --
('16_25', 1, 33206, -117502, 248539, -1968, 0, 0, 40800, 60, 0, 0, 0), -- Guard Captain ('16_25', 1, 33206, -117502, 248539, -1968, 0, 0, 40800, 60, 0, 0, 0), -- Guard Captain
('16_25', 1, 33223, -119816, 246292, -968, 0, 0, 843, 60, 0, 0, 0), -- Bink ('16_25', 1, 33223, -119816, 246292, -968, 0, 0, 843, 60, 0, 0, 0), -- Bink
('16_25', 1, 33223, -114723, 230366, -1664, 0, 0, 16383, 60, 0, 0, 0), -- Bink ('16_25', 1, 33223, -114723, 230366, -1664, 0, 0, 16383, 60, 0, 0, 0), -- Bink
@@ -41464,8 +41357,6 @@ INSERT INTO `spawnlist` VALUES
('16_25', 1, 33231, -114507, 248850, -1816, 0, 0, 21956, 60, 0, 0, 0), -- ('16_25', 1, 33231, -114507, 248850, -1816, 0, 0, 21956, 60, 0, 0, 0), --
('16_25', 1, 33237, -114717, 249834, -1696, 0, 0, 65472, 60, 0, 0, 0), -- ('16_25', 1, 33237, -114717, 249834, -1696, 0, 0, 65472, 60, 0, 0, 0), --
('16_25', 1, 33238, -119839, 246364, -968, 0, 0, 843, 60, 0, 0, 0), -- Mai ('16_25', 1, 33238, -119839, 246364, -968, 0, 0, 843, 60, 0, 0, 0), -- Mai
('16_25', 1, 33242, -114058, 259658, -1192, 0, 0, 10860, 60, 0, 0, 0), -- Karonf
('16_25', 1, 33249, -116784, 255680, -1424, 0, 0, 50168, 60, 0, 0, 0), -- LeBont
('16_25', 1, 33270, -119636, 246188, -1232, 0, 0, 44999, 60, 0, 0, 0), -- Voltaire ('16_25', 1, 33270, -119636, 246188, -1232, 0, 0, 44999, 60, 0, 0, 0), -- Voltaire
('16_25', 1, 33270, -119606, 246224, -1232, 0, 0, 7553, 60, 0, 0, 0), -- Voltaire ('16_25', 1, 33270, -119606, 246224, -1232, 0, 0, 7553, 60, 0, 0, 0), -- Voltaire
('16_25', 1, 33344, -116205, 236409, -3088, 0, 0, 0, 60, 0, 0, 0), -- Hadel ('16_25', 1, 33344, -116205, 236409, -3088, 0, 0, 0, 60, 0, 0, 0), -- Hadel

View File

@@ -19,10 +19,13 @@
package com.l2jserver.gameserver.model.actor; package com.l2jserver.gameserver.model.actor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level; import java.util.logging.Level;
import com.l2jserver.Config; import com.l2jserver.Config;
@@ -88,10 +91,10 @@ public class L2Attackable extends L2Npc
private boolean _seeded = false; private boolean _seeded = false;
private L2Seed _seed = null; private L2Seed _seed = null;
private int _seederObjId = 0; private int _seederObjId = 0;
private ItemHolder _harvestItem; private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil // Spoil
private int _spoilerObjectId; private int _spoilerObjectId;
private ItemHolder[] _sweepItems; private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit // Over-hit
private boolean _overhit; private boolean _overhit;
private double _overhitDamage; private double _overhitDamage;
@@ -1001,14 +1004,10 @@ public class L2Attackable extends L2Npc
if (isSpoiled()) if (isSpoiled())
{ {
List<ItemHolder> sweepItems = npcTemplate.calculateDrops(DropListScope.CORPSE, this, player); _sweepItems.set(npcTemplate.calculateDrops(DropListScope.CORPSE, this, player));
if ((sweepItems != null) && !sweepItems.isEmpty())
{
_sweepItems = sweepItems.toArray(new ItemHolder[sweepItems.size()]);
}
} }
List<ItemHolder> deathItems = npcTemplate.calculateDrops(DropListScope.DEATH, this, player); Collection<ItemHolder> deathItems = npcTemplate.calculateDrops(DropListScope.DEATH, this, player);
if (deathItems != null) if (deathItems != null)
{ {
for (ItemHolder drop : deathItems) for (ItemHolder drop : deathItems)
@@ -1156,7 +1155,7 @@ public class L2Attackable extends L2Npc
@Override @Override
public boolean isSweepActive() public boolean isSweepActive()
{ {
return _sweepItems != null; return _sweepItems.get() != null;
} }
/** /**
@@ -1164,10 +1163,11 @@ public class L2Attackable extends L2Npc
*/ */
public List<L2Item> getSpoilLootItems() public List<L2Item> getSpoilLootItems()
{ {
final List<L2Item> lootItems = new ArrayList<>(); final Collection<ItemHolder> sweepItems = _sweepItems.get();
if (isSweepActive()) final List<L2Item> lootItems = new LinkedList<>();
if (sweepItems != null)
{ {
for (ItemHolder item : _sweepItems) for (ItemHolder item : sweepItems)
{ {
lootItems.add(ItemTable.getInstance().getTemplate(item.getId())); lootItems.add(ItemTable.getInstance().getTemplate(item.getId()));
} }
@@ -1178,21 +1178,17 @@ public class L2Attackable extends L2Npc
/** /**
* @return table containing all L2ItemInstance that can be spoiled. * @return table containing all L2ItemInstance that can be spoiled.
*/ */
public synchronized ItemHolder[] takeSweep() public Collection<ItemHolder> takeSweep()
{ {
ItemHolder[] sweep = _sweepItems; return _sweepItems.getAndSet(null);
_sweepItems = null;
return sweep;
} }
/** /**
* @return table containing all L2ItemInstance that can be harvested. * @return table containing all L2ItemInstance that can be harvested.
*/ */
public synchronized ItemHolder takeHarvest() public ItemHolder takeHarvest()
{ {
ItemHolder harvest = _harvestItem; return _harvestItem.getAndSet(null);
_harvestItem = null;
return harvest;
} }
/** /**
@@ -1436,7 +1432,7 @@ public class L2Attackable extends L2Npc
// Clear all aggro char from list // Clear all aggro char from list
clearAggroList(); clearAggroList();
// Clear Harvester reward // Clear Harvester reward
_harvestItem = null; _harvestItem.set(null);
// Clear mod Seeded stat // Clear mod Seeded stat
_seeded = false; _seeded = false;
_seed = null; _seed = null;
@@ -1444,7 +1440,7 @@ public class L2Attackable extends L2Npc
// Clear overhit value // Clear overhit value
overhitEnabled(false); overhitEnabled(false);
_sweepItems = null; _sweepItems.set(null);
resetAbsorbList(); resetAbsorbList();
setWalking(); setWalking();
@@ -1534,7 +1530,7 @@ public class L2Attackable extends L2Npc
{ {
count += diff; count += diff;
} }
_harvestItem = new ItemHolder(_seed.getCropId(), count * Config.RATE_DROP_MANOR); _harvestItem.set(new ItemHolder(_seed.getCropId(), count * Config.RATE_DROP_MANOR));
} }
} }

View File

@@ -14455,6 +14455,10 @@ public final class L2PcInstance extends L2Playable
public boolean hasPremiumStatus() public boolean hasPremiumStatus()
{ {
if (!Config.PREMIUM_SYSTEM_ENABLED)
{
return false;
}
return _premiumStatus; return _premiumStatus;
} }

View File

@@ -19,7 +19,9 @@
package com.l2jserver.gameserver.model.actor.templates; package com.l2jserver.gameserver.model.actor.templates;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -552,7 +554,7 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
return dropLists != null ? dropLists.get(dropListScope) : null; return dropLists != null ? dropLists.get(dropListScope) : null;
} }
public List<ItemHolder> calculateDrops(DropListScope dropListScope, L2Character victim, L2Character killer) public Collection<ItemHolder> calculateDrops(DropListScope dropListScope, L2Character victim, L2Character killer)
{ {
List<IDropItem> dropList = getDropList(dropListScope); List<IDropItem> dropList = getDropList(dropListScope);
if (dropList == null) if (dropList == null)
@@ -560,10 +562,10 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
return null; return null;
} }
List<ItemHolder> calculatedDrops = null; Collection<ItemHolder> calculatedDrops = null;
for (IDropItem dropItem : dropList) for (IDropItem dropItem : dropList)
{ {
List<ItemHolder> drops = dropItem.calculateDrops(victim, killer); final Collection<ItemHolder> drops = dropItem.calculateDrops(victim, killer);
if ((drops == null) || drops.isEmpty()) if ((drops == null) || drops.isEmpty())
{ {
continue; continue;
@@ -571,7 +573,7 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
if (calculatedDrops == null) if (calculatedDrops == null)
{ {
calculatedDrops = new ArrayList<>(drops.size()); calculatedDrops = new LinkedList<>();
} }
calculatedDrops.addAll(drops); calculatedDrops.addAll(drops);

View File

@@ -19,7 +19,7 @@
package com.l2jserver.gameserver.model.drops; package com.l2jserver.gameserver.model.drops;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.Collection;
import com.l2jserver.Config; import com.l2jserver.Config;
import com.l2jserver.gameserver.datatables.ItemTable; import com.l2jserver.gameserver.datatables.ItemTable;
@@ -231,13 +231,10 @@ public class GeneralDropItem implements IDropItem
} }
} }
// global champions chance multiplier, there is no such option yet if (victim.isChampion())
// @formatter:off
/*if (victim.isChampion())
{ {
multiplier *= getItemId() != Inventory.ADENA_ID ? Config.L2JMOD_CHAMPION_REWARDS_CHANCE : Config.L2JMOD_CHAMPION_ADENAS_REWARDS_CHANCE; multiplier *= Config.L2JMOD_CHAMPION_REWARDS;
}*/ }
// @formatter:on
return (getChance() * multiplier); return (getChance() * multiplier);
} }
@@ -247,7 +244,7 @@ public class GeneralDropItem implements IDropItem
* @see com.l2jserver.gameserver.model.drop.IDropItem#calculateDrops(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character) * @see com.l2jserver.gameserver.model.drop.IDropItem#calculateDrops(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
*/ */
@Override @Override
public List<ItemHolder> calculateDrops(L2Character victim, L2Character killer) public Collection<ItemHolder> calculateDrops(L2Character victim, L2Character killer)
{ {
final int levelDifference = victim.getLevel() - killer.getLevel(); final int levelDifference = victim.getLevel() - killer.getLevel();
final double levelGapChanceToDrop; final double levelGapChanceToDrop;
@@ -266,48 +263,25 @@ public class GeneralDropItem implements IDropItem
return null; return null;
} }
final List<ItemHolder> items = new ArrayList<>(1); final double chance = getChance(victim, killer);
int successes;
if (Config.L2JMOD_OLD_DROP_BEHAVIOR) if (!Config.L2JMOD_OLD_DROP_BEHAVIOR)
{ {
double chance = getChance(victim, killer); successes = chance > (Rnd.nextDouble() * 100) ? 1 : 0;
if (Config.L2JMOD_CHAMPION_ENABLE && victim.isChampion() && (getItemId() != Inventory.ADENA_ID))
{
chance *= Config.L2JMOD_CHAMPION_REWARDS;
}
long amount = 0;
if (chance > 100)
{
int chanceOveflow = (int) (chance / 100);
chance = chance % 100;
while (chanceOveflow > 0)
{
amount += Rnd.get(getMin(victim, killer), getMax(victim, killer));
chanceOveflow--;
}
}
if (chance > (Rnd.nextDouble() * 100))
{
amount += Rnd.get(getMin(victim, killer), getMax(victim, killer));
}
if (amount > 0)
{
items.add(new ItemHolder(getItemId(), amount));
}
} }
else else
{ {
if (getChance(victim, killer) > (Rnd.nextDouble() * 100)) successes = (int) (chance / 100);
{ successes += (chance % 100) > (Rnd.nextDouble() * 100) ? 1 : 0;
final long amount = Rnd.get(getMin(victim, killer), getMax(victim, killer));
items.add(new ItemHolder(getItemId(), amount));
}
} }
return items; if (successes > 0)
{
final Collection<ItemHolder> items = new ArrayList<>(1);
items.add(new ItemHolder(getItemId(), Rnd.get(getMin(victim, killer), getMax(victim, killer)) * successes));
return items;
}
return null;
} }
} }

View File

@@ -19,6 +19,7 @@
package com.l2jserver.gameserver.model.drops; package com.l2jserver.gameserver.model.drops;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -104,9 +105,9 @@ public class GroupedGeneralDropItem implements IDropItem
* @see com.l2jserver.gameserver.model.drop.IDropItem#calculateDrops(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character) * @see com.l2jserver.gameserver.model.drop.IDropItem#calculateDrops(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
*/ */
@Override @Override
public List<ItemHolder> calculateDrops(L2Character victim, L2Character killer) public Collection<ItemHolder> calculateDrops(L2Character victim, L2Character killer)
{ {
int levelDifference = victim.getLevel() - killer.getLevel(); final int levelDifference = victim.getLevel() - killer.getLevel();
double chanceModifier; double chanceModifier;
if (victim instanceof L2RaidBossInstance) if (victim instanceof L2RaidBossInstance)
{ {
@@ -124,61 +125,29 @@ public class GroupedGeneralDropItem implements IDropItem
} }
} }
if ((getChance(victim, killer) * chanceModifier) > (Rnd.nextDouble() * 100)) final double chance = getChance(victim, killer) * chanceModifier;
int successes;
if (!Config.L2JMOD_OLD_DROP_BEHAVIOR)
{ {
final List<ItemHolder> items = new ArrayList<>(1); successes = chance > (Rnd.nextDouble() * 100) ? 1 : 0;
long amount = 0; }
double totalChance = 0; else
double random = (Rnd.nextDouble() * 100); {
double chance = 0; successes = (int) (chance / 100);
successes += (chance % 100) > (Rnd.nextDouble() * 100) ? 1 : 0;
if (Config.L2JMOD_OLD_DROP_BEHAVIOR) }
double totalChance = 0;
final double random = (Rnd.nextDouble() * 100);
for (GeneralDropItem item : getItems())
{
// Grouped item chance rates should not be modified.
totalChance += item.getChance();
if (totalChance > random)
{ {
for (GeneralDropItem item : getItems()) final Collection<ItemHolder> items = new ArrayList<>(1);
{ items.add(new ItemHolder(item.getItemId(), Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer)) * successes));
// Grouped item chance rates should not be modified. return items;
totalChance += item.getChance();
if (totalChance > 100)
{
int chanceOverflow = (int) (totalChance / 100);
chance = totalChance % 100;
while (chanceOverflow > 0)
{
amount += Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer));
chanceOverflow--;
}
}
else
{
chance = totalChance;
}
if (chance > random)
{
amount += Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer));
}
if (amount > 0)
{
items.add(new ItemHolder(item.getItemId(), amount));
return items;
}
}
}
else
{
for (GeneralDropItem item : getItems())
{
// Grouped item chance rates should not be modified.
totalChance += item.getChance();
if (totalChance > random)
{
amount = Rnd.get(item.getMin(victim, killer), item.getMax(victim, killer));
items.add(new ItemHolder(item.getItemId(), amount));
return items;
}
}
} }
} }

View File

@@ -18,7 +18,7 @@
*/ */
package com.l2jserver.gameserver.model.drops; package com.l2jserver.gameserver.model.drops;
import java.util.List; import java.util.Collection;
import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.holders.ItemHolder; import com.l2jserver.gameserver.model.holders.ItemHolder;
@@ -32,7 +32,7 @@ public interface IDropItem
* Calculates drops of this drop item. * Calculates drops of this drop item.
* @param victim the victim * @param victim the victim
* @param killer the killer * @param killer the killer
* @return {@code null} or empty list if there are no drops, a list containing all items to drop otherwise * @return {@code null} or empty collection if there are no drops, a collection containing all items to drop otherwise
*/ */
public List<ItemHolder> calculateDrops(L2Character victim, L2Character killer); public Collection<ItemHolder> calculateDrops(L2Character victim, L2Character killer);
} }

View File

@@ -2773,4 +2773,34 @@ public abstract class AbstractScript extends ManagedScript
{ {
player.sendPacket(new SpecialCamera(creature, force, angle1, angle2, time, range, duration, relYaw, relPitch, isWide, relAngle, unk)); player.sendPacket(new SpecialCamera(creature, force, angle1, angle2, time, range, duration, relYaw, relPitch, isWide, relAngle, unk));
} }
/**
* @param player
* @param x
* @param y
* @param z
*/
public static void addRadar(L2PcInstance player, int x, int y, int z)
{
player.getRadar().addMarker(x, y, z);
}
/**
* @param player
* @param x
* @param y
* @param z
*/
public void removeRadar(L2PcInstance player, int x, int y, int z)
{
player.getRadar().removeMarker(x, y, z);
}
/**
* @param player
*/
public void clearRadar(L2PcInstance player)
{
player.getRadar().removeAllMarkers();
}
} }

View File

@@ -27,6 +27,7 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock; import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
@@ -34,6 +35,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.l2jserver.Config; import com.l2jserver.Config;
import com.l2jserver.L2DatabaseFactory; import com.l2jserver.L2DatabaseFactory;
@@ -608,8 +610,17 @@ public class Quest extends AbstractScript implements IIdentifiable
String res = null; String res = null;
try try
{ {
//@formatter:off
final Set<Quest> startingQuests = npc.getListeners(EventType.ON_NPC_QUEST_START).stream()
.map(AbstractEventListener::getOwner)
.filter(Quest.class::isInstance)
.map(Quest.class::cast)
.distinct()
.collect(Collectors.toSet());
//@formatter:on
final String startConditionHtml = getStartConditionHtml(player); final String startConditionHtml = getStartConditionHtml(player);
if (!player.hasQuestState(_name) && (startConditionHtml != null)) if (startingQuests.contains(this) && (startConditionHtml != null))
{ {
res = startConditionHtml; res = startConditionHtml;
} }

View File

@@ -1608,13 +1608,34 @@ public final class Formulas
return false; return false;
} }
double val = actor.getStat().calcStat(Stats.SKILL_MASTERY, 1, null, null); final int val = (int) actor.getStat().calcStat(Stats.SKILL_CRITICAL, 0, null, null);
if (actor.isPlayer())
if (val == 0)
{ {
val *= (actor.getActingPlayer().isMageClass() ? BaseStats.INT : BaseStats.STR).calcBonus(actor); return false;
} }
return Rnd.get(100) < val; if (actor.isPlayer())
{
double initVal = 0;
switch (val)
{
case 1:
{
initVal = (BaseStats.STR).calcBonus(actor);
break;
}
case 4:
{
initVal = (BaseStats.INT).calcBonus(actor);
break;
}
}
initVal *= actor.getStat().calcStat(Stats.SKILL_CRITICAL_PROBABILITY, 1, null, null);
return (Rnd.get(100) < initVal);
}
return false;
} }
/** /**

View File

@@ -178,7 +178,8 @@ public enum Stats
SHIELD_DEFENCE_ANGLE("shieldDefAngle"), SHIELD_DEFENCE_ANGLE("shieldDefAngle"),
// Skill mastery // Skill mastery
SKILL_MASTERY("skillMastery"), SKILL_CRITICAL("skillCritical"),
SKILL_CRITICAL_PROBABILITY("skillCriticalProbability"),
// Vitality // Vitality
VITALITY_CONSUME_RATE("vitalityConsumeRate"), VITALITY_CONSUME_RATE("vitalityConsumeRate"),

View File

@@ -322,7 +322,9 @@ public final class UseItem extends L2GameClientPacket
{ {
if (!item.isEquipped() && (activeChar.getInventory().getBroochJewelSlots() == 0)) if (!item.isEquipped() && (activeChar.getInventory().getBroochJewelSlots() == 0))
{ {
activeChar.sendPacket(SystemMessageId.YOU_CANNOT_EQUIP_S1_WITHOUT_EQUIPPING_A_BROOCH); final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_CANNOT_EQUIP_S1_WITHOUT_EQUIPPING_A_BROOCH);
sm.addItemName(item);
activeChar.sendPacket(sm);
return; return;
} }
break; break;

View File

@@ -85,7 +85,7 @@ public class ConfirmMenteeAdd extends L2GameClientPacket
MentorManager.getInstance().addMentor(mentor.getObjectId(), mentee.getObjectId()); MentorManager.getInstance().addMentor(mentor.getObjectId(), mentee.getObjectId());
// Notify to scripts // Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeAdd(mentor, mentee), mentee); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeAdd(mentor, mentee), mentor);
mentor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FROM_NOW_ON_S1_WILL_BE_YOUR_MENTEE).addCharName(mentee)); mentor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FROM_NOW_ON_S1_WILL_BE_YOUR_MENTEE).addCharName(mentee));
mentor.sendPacket(new ExMentorList(mentor)); mentor.sendPacket(new ExMentorList(mentor));

View File

@@ -21,13 +21,15 @@ package com.l2jserver.gameserver.network.serverpackets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.l2jserver.gameserver.network.NpcStringId;
/** /**
* @author UnAfraid * @author UnAfraid
*/ */
public class ExQuestNpcLogList extends L2GameServerPacket public class ExQuestNpcLogList extends L2GameServerPacket
{ {
private final int _questId; private final int _questId;
private final List<NpcHolder> _npcs = new ArrayList<>(); private final List<Holder> _npcLogList = new ArrayList<>();
public ExQuestNpcLogList(int questId) public ExQuestNpcLogList(int questId)
{ {
@@ -36,12 +38,12 @@ public class ExQuestNpcLogList extends L2GameServerPacket
public void addNpc(int npcId, int count) public void addNpc(int npcId, int count)
{ {
_npcs.add(new NpcHolder(npcId, 0, count)); _npcLogList.add(new Holder(npcId, false, count));
} }
public void addNpc(int npcId, int unknown, int count) public void addNpcString(NpcStringId npcStringId, int count)
{ {
_npcs.add(new NpcHolder(npcId, unknown, count)); _npcLogList.add(new Holder(npcStringId.getId(), true, count));
} }
@Override @Override
@@ -50,36 +52,36 @@ public class ExQuestNpcLogList extends L2GameServerPacket
writeC(0xFE); writeC(0xFE);
writeH(0xC6); writeH(0xC6);
writeD(_questId); writeD(_questId);
writeC(_npcs.size()); writeC(_npcLogList.size());
for (NpcHolder holder : _npcs) for (Holder holder : _npcLogList)
{ {
writeD((holder.getNpcId() + 1000000)); writeD((holder.getId()));
writeC(holder.getUnknown()); writeC(holder.isNpcString() ? 0x01 : 0x00);
writeD(holder.getCount()); writeD(holder.getCount());
} }
} }
private class NpcHolder private class Holder
{ {
private final int _npcId; private final int _id;
private final int _unknown; private final boolean _isNpcString;
private final int _count; private final int _count;
public NpcHolder(int npcId, int unknown, int count) public Holder(int id, boolean isNpcString, int count)
{ {
_npcId = npcId; _id = id;
_unknown = unknown; _isNpcString = isNpcString;
_count = count; _count = count;
} }
public int getNpcId() public int getId()
{ {
return _npcId; return _id;
} }
public int getUnknown() public boolean isNpcString()
{ {
return _unknown; return _isNpcString;
} }
public int getCount() public int getCount()

View File

@@ -80,7 +80,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
_title = cha.getTitle(); _title = cha.getTitle();
if (cha.isGM() && cha.isInvisible()) if (cha.isGM() && cha.isInvisible())
{ {
_title += "[Invisible]"; _title = "[Invisible]";
} }
if (addAll) if (addAll)