diff --git a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_pet_skills_save.sql b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_pet_skills_save.sql index e88b3a61c3..01273a4158 100644 --- a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_pet_skills_save.sql +++ b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_pet_skills_save.sql @@ -3,6 +3,7 @@ CREATE TABLE IF NOT EXISTS `character_pet_skills_save` ( `petObjItemId` INT NOT NULL DEFAULT 0, `skill_id` INT NOT NULL DEFAULT 0, `skill_level` INT(3) NOT NULL DEFAULT 1, + `skill_sub_level` INT(4) NOT NULL DEFAULT '0', `remaining_time` INT NOT NULL DEFAULT 0, `buff_index` INT(2) NOT NULL DEFAULT 0, PRIMARY KEY (`petObjItemId`,`skill_id`,`skill_level`) diff --git a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_shortcuts.sql b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_shortcuts.sql index edbc663273..c42b3711a5 100644 --- a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_shortcuts.sql +++ b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_shortcuts.sql @@ -6,6 +6,7 @@ CREATE TABLE IF NOT EXISTS `character_shortcuts` ( `type` decimal(3) , `shortcut_id` decimal(16) , `level` SMALLINT UNSIGNED , + `sub_level` INT(4) NOT NULL DEFAULT '0', `class_index` int(1) NOT NULL DEFAULT '0', PRIMARY KEY (`charId`,`slot`,`page`,`class_index`), KEY `shortcut_id` (`shortcut_id`) diff --git a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_skills.sql b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_skills.sql index 81377d9c63..72b62f9bab 100644 --- a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_skills.sql +++ b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_skills.sql @@ -3,6 +3,7 @@ CREATE TABLE IF NOT EXISTS `character_skills` ( `charId` INT UNSIGNED NOT NULL DEFAULT 0, `skill_id` INT NOT NULL DEFAULT 0, `skill_level` INT(4) NOT NULL DEFAULT 1, + `skill_sub_level` INT(4) NOT NULL DEFAULT '0', `class_index` INT(1) NOT NULL DEFAULT 0, PRIMARY KEY (`charId`,`skill_id`,`class_index`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_skills_save.sql b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_skills_save.sql index 08d84ddda0..34b34a598c 100644 --- a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_skills_save.sql +++ b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_skills_save.sql @@ -3,6 +3,7 @@ CREATE TABLE IF NOT EXISTS `character_skills_save` ( `charId` INT NOT NULL DEFAULT 0, `skill_id` INT NOT NULL DEFAULT 0, `skill_level` INT(4) NOT NULL DEFAULT 1, + `skill_sub_level` INT(4) NOT NULL DEFAULT '0', `remaining_time` INT NOT NULL DEFAULT 0, `reuse_delay` INT(8) NOT NULL DEFAULT 0, `systime` bigint(13) unsigned NOT NULL DEFAULT '0', diff --git a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_summon_skills_save.sql b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_summon_skills_save.sql index a08932a5da..03f19115f3 100644 --- a/L2J_Mobius_Underground/dist/db_installer/sql/game/character_summon_skills_save.sql +++ b/L2J_Mobius_Underground/dist/db_installer/sql/game/character_summon_skills_save.sql @@ -5,6 +5,7 @@ CREATE TABLE IF NOT EXISTS `character_summon_skills_save` ( `summonSkillId` INT NOT NULL DEFAULT 0, `skill_id` INT NOT NULL DEFAULT 0, `skill_level` INT(3) NOT NULL DEFAULT 1, + `skill_sub_level` INT(4) NOT NULL DEFAULT '0', `remaining_time` INT NOT NULL DEFAULT 0, `buff_index` INT(2) NOT NULL DEFAULT 0, PRIMARY KEY (`ownerId`,`ownerClassIndex`,`summonSkillId`,`skill_id`,`skill_level`) diff --git a/L2J_Mobius_Underground/dist/db_installer/sql/game/clanentry.sql b/L2J_Mobius_Underground/dist/db_installer/sql/game/clanentry.sql index ec86a23b79..111a18b760 100644 --- a/L2J_Mobius_Underground/dist/db_installer/sql/game/clanentry.sql +++ b/L2J_Mobius_Underground/dist/db_installer/sql/game/clanentry.sql @@ -13,6 +13,8 @@ CREATE TABLE IF NOT EXISTS `pledge_recruit` ( `karma` tinyint(1) NOT NULL, `information` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `detailed_information` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `application_type` tinyint(1) NOT NULL, + `recruit_type` tinyint(1) NOT NULL, PRIMARY KEY (`clan_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; diff --git a/L2J_Mobius_Underground/dist/game/config/Feature.ini b/L2J_Mobius_Underground/dist/game/config/Feature.ini index e0868b3d63..cfae791e53 100644 --- a/L2J_Mobius_Underground/dist/game/config/Feature.ini +++ b/L2J_Mobius_Underground/dist/game/config/Feature.ini @@ -14,20 +14,29 @@ SiegeHourList = 16,20 # Taxes for castles -# Tax in percent when is castle owned by npc's. -# Default: 15 +# Buy tax in percent when is castle owned by npc's. +# Defualt: 15 BuyTaxForNeutralSide = 15 -SellTaxForNeutralSide = 0 -# Tax in percent when is castle owned by player's and castle is on light side. -# Default: 0 +# Buy tax in percent when is castle owned by player's and castle is on light side. +# Defualt: 0 BuyTaxForLightSide = 0 + +# Buy tax in percent when is castle owned by player's and castle is on dark side. +# Defualt: 30 +BuyTaxForDarkSide = 30 + +# Sell tax in percent when is castle owned by npc's. +# Defualt: 15 +SellTaxForNeutralSide = 15 + +# Sell tax in percent when is castle owned by player's and castle is on light side. +# Defualt: 0 SellTaxForLightSide = 0 -# Tax in percent when is castle owned by player's and castle is on dark side. -# Default: 30 -BuyTaxForDarkSide = 30 -SellTaxForDarkSide = 20 +# Sell tax in percent when is castle owned by player's and castle is on dark side. +# Defualt: 30 +SellTaxForDarkSide = 30 # Teleport Function price # Price = 7 days diff --git a/L2J_Mobius_Underground/dist/game/config/General.ini b/L2J_Mobius_Underground/dist/game/config/General.ini index 3676cc6a74..805566cb08 100644 --- a/L2J_Mobius_Underground/dist/game/config/General.ini +++ b/L2J_Mobius_Underground/dist/game/config/General.ini @@ -502,8 +502,8 @@ WorldChatPointsPerDay = 3 # The delay player must wait before sending new world chat message # Note: Value is in seconds -# Default: 20sec -WorldChatInterval = 20sec +# Default: 20secs +WorldChatInterval = 20secs # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_Underground/dist/game/data/EnchantSkillGroups.xml b/L2J_Mobius_Underground/dist/game/data/EnchantSkillGroups.xml index c9e955a0c4..1af1d9fb19 100644 --- a/L2J_Mobius_Underground/dist/game/data/EnchantSkillGroups.xml +++ b/L2J_Mobius_Underground/dist/game/data/EnchantSkillGroups.xml @@ -1,203 +1,603 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/Routes.xml b/L2J_Mobius_Underground/dist/game/data/Routes.xml index ecb8c7de03..5cbbf5261f 100644 --- a/L2J_Mobius_Underground/dist/game/data/Routes.xml +++ b/L2J_Mobius_Underground/dist/game/data/Routes.xml @@ -752,6 +752,7 @@ + diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/BeastFarm/BeastFarm.java b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/BeastFarm/BeastFarm.java index 03a872dbe9..15b939e951 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/BeastFarm/BeastFarm.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/BeastFarm/BeastFarm.java @@ -275,7 +275,7 @@ public final class BeastFarm extends AbstractNpcAI final SkillData st = SkillData.getInstance(); for (SkillHolder sh : beast.getSkills()) { - nextNpc.addBeastSkill(st.getSkill(sh.getSkillId(), sh.getSkillLvl())); + nextNpc.addBeastSkill(st.getSkill(sh.getSkillId(), sh.getSkillLevel())); } Q00020_BringUpWithLove.checkJewelOfInnocence(player); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/SeaOfSpores/Orfen.java b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/SeaOfSpores/Orfen.java index fa162fd56d..20bc7e6d57 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/SeaOfSpores/Orfen.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/SeaOfSpores/Orfen.java @@ -21,7 +21,6 @@ import java.util.concurrent.ConcurrentHashMap; import com.l2jmobius.Config; import com.l2jmobius.gameserver.ai.CtrlIntention; -import com.l2jmobius.gameserver.data.xml.impl.SkillData; import com.l2jmobius.gameserver.enums.ChatType; import com.l2jmobius.gameserver.instancemanager.GrandBossManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -34,6 +33,7 @@ import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2GrandBossInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.holders.SkillHolder; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.SkillCaster; import com.l2jmobius.gameserver.model.zone.L2ZoneType; @@ -77,6 +77,10 @@ public final class Orfen extends AbstractNpcAI private static final byte ALIVE = 0; private static final byte DEAD = 1; + private static final SkillHolder PARALYSIS = new SkillHolder(4064, 1); + private static final SkillHolder BLOW = new SkillHolder(4067, 4); + private static final SkillHolder ORFEN_HEAL = new SkillHolder(4516, 1); + private Orfen() { final int[] mobs = @@ -244,7 +248,7 @@ public final class Orfen extends AbstractNpcAI npc.broadcastSay(ChatType.NPC_GENERAL, TEXT[getRandom(4)], caster.getName()); originalCaster.teleToLocation(npc.getLocation()); npc.setTarget(originalCaster); - npc.doCast(SkillData.getInstance().getSkill(4064, 1)); + npc.doCast(PARALYSIS.getSkill()); } } return super.onSkillSee(npc, caster, skill, targets, isSummon); @@ -262,7 +266,7 @@ public final class Orfen extends AbstractNpcAI if ((npcId == RAIKEL_LEOS) && (getRandom(20) == 0)) { npc.setTarget(attacker); - npc.doCast(SkillData.getInstance().getSkill(4067, 4)); + npc.doCast(BLOW.getSkill()); } else if (npcId == RIBA_IREN) { @@ -275,7 +279,7 @@ public final class Orfen extends AbstractNpcAI { npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null); npc.setTarget(caller); - npc.doCast(SkillData.getInstance().getSkill(4516, 1)); + npc.doCast(ORFEN_HEAL.getSkill()); } } return super.onFactionCall(npc, caller, attacker, isSummon); @@ -297,7 +301,7 @@ public final class Orfen extends AbstractNpcAI npc.broadcastSay(ChatType.NPC_GENERAL, TEXT[getRandom(3)], attacker.getName()); attacker.teleToLocation(npc.getLocation()); npc.setTarget(attacker); - npc.doCast(SkillData.getInstance().getSkill(4064, 1)); + npc.doCast(PARALYSIS.getSkill()); } } else if (npcId == RIBA_IREN) @@ -305,7 +309,7 @@ public final class Orfen extends AbstractNpcAI if (!npc.isCastingNow(SkillCaster::isAnyNormalType) && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2.0))) { npc.setTarget(attacker); - npc.doCast(SkillData.getInstance().getSkill(4516, 1)); + npc.doCast(ORFEN_HEAL.getSkill()); } } return super.onAttack(npc, attacker, damage, isSummon); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/group/StakatoNest.java b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/StakatoNest/StakatoNest.java similarity index 96% rename from L2J_Mobius_Underground/dist/game/data/scripts/ai/group/StakatoNest.java rename to L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/StakatoNest/StakatoNest.java index 8b79c431b3..44fb7de7cd 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/group/StakatoNest.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/StakatoNest/StakatoNest.java @@ -14,16 +14,16 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package ai.group; +package ai.areas.StakatoNest; import java.util.List; import com.l2jmobius.commons.util.CommonUtil; -import com.l2jmobius.gameserver.data.xml.impl.SkillData; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.holders.SkillHolder; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse; import com.l2jmobius.gameserver.util.Broadcast; @@ -81,6 +81,8 @@ public final class StakatoNest extends AbstractNpcAI // Large Stakato Cocoon private static final int LARGE_COCOON = 14834; + private static final SkillHolder DEVOUR_SUBORDINATE = new SkillHolder(4484, 1); + private StakatoNest() { registerMobs(STAKATO_MOBS); @@ -104,7 +106,7 @@ public final class StakatoNest extends AbstractNpcAI mob.abortAttack(); mob.abortCast(); mob.setHeading(Util.calculateHeadingFrom(mob, _follower)); - mob.doCast(SkillData.getInstance().getSkill(4484, 1)); + mob.doCast(DEVOUR_SUBORDINATE.getSkill()); mob.setCurrentHp(mob.getCurrentHp() + _hp); _follower.doDie(_follower); _follower.deleteMe(); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/AwakeningMaster/AwakeningMaster.java b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/AwakeningMaster/AwakeningMaster.java index e6311abe68..4a6324cdfd 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/AwakeningMaster/AwakeningMaster.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/AwakeningMaster/AwakeningMaster.java @@ -21,10 +21,12 @@ import java.util.Map; import java.util.Map.Entry; import com.l2jmobius.gameserver.ThreadPoolManager; +import com.l2jmobius.gameserver.data.xml.impl.SkillData; import com.l2jmobius.gameserver.data.xml.impl.SkillTreesData; import com.l2jmobius.gameserver.enums.CategoryType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.enums.UserInfoType; +import com.l2jmobius.gameserver.model.L2SkillLearn; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.base.ClassId; @@ -38,7 +40,6 @@ import com.l2jmobius.gameserver.model.holders.SkillHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.quest.QuestState; import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.serverpackets.AcquireSkillList; import com.l2jmobius.gameserver.network.serverpackets.ExChangeToAwakenedClass; import com.l2jmobius.gameserver.network.serverpackets.ExShowUsm; import com.l2jmobius.gameserver.network.serverpackets.SocialAction; @@ -66,6 +67,7 @@ public final class AwakeningMaster extends AbstractNpcAI // Items private static final int SCROLL_OF_AFTERLIFE = 17600; private static final int CHAOS_POMANDER = 37374; + private static final int CHAOS_POMANDER_DUAL_CLASS = 37375; private static final Map AWAKE_POWER = new HashMap<>(); static @@ -337,11 +339,13 @@ public final class AwakeningMaster extends AbstractNpcAI break; } } - - giveItems(player, CHAOS_POMANDER, 2); + giveItems(player, player.isDualClassActive() ? CHAOS_POMANDER_DUAL_CLASS : CHAOS_POMANDER, 2); SkillTreesData.getInstance().cleanSkillUponAwakening(player); - player.sendPacket(new AcquireSkillList(player)); + for (L2SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace())) + { + player.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true); + } player.sendSkillList(); } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880-1.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880-1.html index 39e42c6c12..2ca4f5ca57 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880-1.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880-1.html @@ -1,8 +1,8 @@ Monk of Chaos:
-The skills that were once given to each race to balance their power have been taken back. Through the will of Chaos, you can learn the skills of other races as long as you have a Chaos Pomander.
+The skills that were once given to each race to balance their power have been taken back. Through the will of Chaos, you can learn the skills of other races as long as you have a Chaos Pomander.
Chaos Pomander is a crystal of power that can combine anything. If you have one, you have been selected by my master to work for a balanced world.
Are you ready for that world? If so, select the Revelation of Chaos, and through it a power appropriate for you.
- - - + + + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880-2.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880-2.html index 41c6539d5d..1109c85b11 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880-2.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880-2.html @@ -1,6 +1,5 @@ Monk of Chaos:
We, the Monks of Chaos, serve the balance.
-You may think chaos is a destructive force, but nothing could be further from the truth. -Chaos seeks to balance light and darkness by reverting them to the original energies.
-We who respect his will are the only ones truly free to act on it. +You may think chaos is a destructive force, but nothing could be further from the truth. Chaos seeks to balance light and darkness by reverting them to the original energies.
+We who respect his will are the only ones truly free to act on it.
\ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880.html index d95151d34e..6f3062091f 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/33880.html @@ -1,6 +1,6 @@ Monk of Chaos:
-Nothing could be created or destroyed without chaos. It is the beginning and the end of all things.
-We, the Monks of Chaos, understand this. It is the law of the universe.
-If you wish, we will reveal our master's will to you.
- +Chaos is absolutely necessary for both creation and destruction.
+We, the Monks of Chaos, respect Chaos' will and act on it.
+If you want, I will tell you about our master's will.
+ \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/MonkOfChaos.java b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/MonkOfChaos.java index 9279de3f0d..d000014f9b 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/MonkOfChaos.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/areas/TalkingIsland/MonkOfChaos/MonkOfChaos.java @@ -27,6 +27,7 @@ import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.base.AcquireSkillType; import com.l2jmobius.gameserver.model.skills.Skill; +import com.l2jmobius.gameserver.model.variables.PlayerVariables; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.ExAcquirableSkillListByClass; @@ -51,8 +52,8 @@ public final class MonkOfChaos extends AbstractNpcAI private static final String[] DUALCLASS_REVELATION_VAR_NAMES = { - "DualclassRevelationSkill1", - "DualclassRevelationSkill2" + PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS, + PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS }; private MonkOfChaos() @@ -161,13 +162,10 @@ public final class MonkOfChaos extends AbstractNpcAI giveItems(player, chaosPomander, count); } } - htmltext = "canceled.html"; - break; } } - return htmltext; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-01.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-01.html index 20dea76459..127800f70d 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-01.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-01.html @@ -1,5 +1,5 @@ - -Are you curious why I'm here in front of this fortress owned by the %clanName% clan selling my wares, instead of in a nice, safe village?

- - + +Are you curious why I'm here in front of this fortress owned by the %clanName% clan selling my wares, instead of in a nice, safe village?
+ + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-11.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-11.html index 62521c0fef..585f1d5b2c 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-11.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-11.html @@ -1,8 +1,7 @@ - -I'll tell you why. You may be surprised to learn that I am a member of the Tactics Corps. You see this fortress? Places just like it used to protect the people of this land from Monsters and foreign armies. And now? Greedy, grasping fools have occupied the fortress, using its might to extort money from the area residents... So I'm guarding this area, searching for someone worthy to defeat that band of bandits and occupy the fortress on behalf of the citizens here.
-You seem a likely candidate... What do you say? You could hire our mercenaries, and with our help I'm sure you'd be able to capture the fortress. Do you want to try?

- - - - - \ No newline at end of file +I'll tell you why. You may be surprised to learn that I am a member of the Tactics Corps. You see this fortress? Places just like it used to protect the people of this land from Monsters and foreign armies. And now? Greedy, grasping fools have occupied the fortress, using its might to extort money from the area residents... So I'm guarding this area, searching for someone worthy to defeat that band of bandits and occupy the fortress on behalf of the citizens here.
+You seem a likely candidate... What do you say? You could hire our mercenaries, and with our help I'm sure you'd be able to capture the fortress. Do you want to try?
+ + + + + diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-13.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-13.html index f3e8edc4ae..5dd52f3c65 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-13.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-13.html @@ -1,6 +1,5 @@ - -Listen carefully. My lord does not trust the clan currently in possession of this fortress — you can see the effort and expense he has gone to to assemble this mercenary force as a counterweight. Were you to expel the current owners and capture the fortress, I am sure he would be most grateful. (Of course, that probably won't last long -- it's not called a "3-day reign" for nothing...)

-Oh, forgive my muttering -- just talking to myself, you know. In any event, let me explain a little about the two types of fortresses.

-Territorial fortresses are built within a territory to defend against monster attacks, while border fortresses are established along the boundary between two territories. If you have a map, take a look for yourself and you'll see what I mean. Blue flags indicate territorial fortresses, whereas red flags indicate border fortresses.

- - \ No newline at end of file + +Listen carefully. My lord does not trust the clan currently in possession of this fortress � you can see the effort and expense he has gone to assemble this mercenary force as a counterweight. Were you to expel the current owners and capture the fortress, I am sure he would be most grateful. (Of course, that probably won't last long -- it's not called a "3-day reign" for nothing...)

+Oh, forgive my muttering -- just talking to myself, you know. In any event, let me explain a little about the two types of fortresses.

Territorial fortresses are built within a territory to defend against monster attacks, while border fortresses are established along the boundary between two territories. If you have a map, take a look for yourself and you'll see what I mean. Blue flags indicate territorial fortresses, whereas red flags indicate border fortresses.
+ + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-14.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-14.html index f157403afc..1762b6cf70 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-14.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-14.html @@ -1,5 +1,5 @@ - -Knowing a fortress' layout can help you turn the battle to your advantage. Each fortress is essentially a residential area consisting of a large central command post surrounded by several barracks.

-There are 5 types of barracks: defense barracks, archer barracks, support barracks, officer's barracks and a control center. The number of barracks varies depending on the size of the fortress. Each barracks has a commander who must be defeated in order for you to conquer that barracks. Note that the control center must have a Warsmith or a Maestro in order to handle the machinery.

- + +Knowing a fortress' layout can help you turn the battle to your advantage. Each fortress is essentially a residential area consisting of a large central command post surrounded by several barracks.

+There are 5 types of barracks: defense barracks, archer barracks, support barracks, officer's barracks and a control room. The number of barracks varies depending on the size of the fortress. Each barracks has a commander who must be defeated in order for you to conquer that barracks. Note that the control center must have a Warsmith or a Maestro in order to handle the machinery.
+ \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-15.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-15.html index 68b81cc328..a5ff153785 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-15.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-15.html @@ -1,5 +1,5 @@ - -If you conquer all of the barracks, weakening your opponents' defensive system, the command gate will open. Entering the command post, you will find a Flag of Combat on the first floor that symbolizes the authority of the fort. You can end the battle by hanging it from the flag pole on the very highest floor.

-Be warned, though, that you must conquer the fortress within 10 minutes or all of the barracks' functions will return to normal.

- + +If you conquer all of the barracks, weakening your opponents' defensive system, the command gate will open. Entering the command post, you will find a Combat Flag on the first floor that symbolizes the authority of the fort. You can end the battle by hanging it from the flag pole on the very highest floor.

+Be warned, though, that you must conquer the fortress within 10 minutes or all of the barracks' functions will return to normal.
+ \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-16.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-16.html index dfccf34e0b..447605017b 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-16.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-16.html @@ -1,5 +1,4 @@ - -Uh-huh. I occasionally earn a few Adena as mercenary... A single mission earns me 250,000 Adena. Not a particularly expensive fee, considering that I put my life on the line!

-But I get your point. If there is an enemy clan controlling the fortress, I'll escort our mercenary captain there. He can open the central command gate, so be sure to guard him carefully!

- - \ No newline at end of file + +Uh-huh. I occasionally earn a few Adena as mercenary... A single mission earns me 250,000 Adena. Not a particularly expensive fee, considering that I put my life on the line!

But I get your point. If there is an enemy clan controlling the fortress, I'll escort our mercenary captain there. He can open the central command gate, so be sure to guard him carefully!
+ + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-19.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-19.html index e3d98efacc..60543baaf3 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-19.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-19.html @@ -1,4 +1,4 @@ - -Hmm... I feel a strange energy near the fortress. Be on your guard! I believe that the rebels who once held this place will soon attempt to seize it again!

- - \ No newline at end of file + +Hmm... I feel a strange energy near the fortress. Be on your guard! I believe that the rebels who once held this place will soon attempt to seize it again!
+ + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-20.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-20.html index 9ff6bfc29f..5947be00c3 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-20.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-20.html @@ -1,4 +1,4 @@ - -We don't have any clients at the moment, so we're searching for opportunities. If someone needs us, we can be ready in less than an hour. How about your clan? A mere 250,000 Adena secures our services!

- - \ No newline at end of file + +We don't have any clients at the moment, so we're searching for opportunities. If someone needs us, we can be ready in less than an hour. How about your clan? A mere 250,000 Adena secures our services!
+ + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-21.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-21.html index acd9ca2873..feecd6f614 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-21.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager-21.html @@ -1,4 +1,4 @@ - -Ah, we've already been hired by another clan. If you make a request now, we will register your clan to the battle, but don't give us a hard time. I'll return to our headquarters to prepare. Get ready! The battle will begin in 10 minutes.

- - \ No newline at end of file + +Ah, we've already been hired by another clan. If you make a request now, we will register your clan to the battle, but don't give us a hard time. I'll return to our headquarters to prepare. Get ready! The battle will begin in 10 minutes.
+ + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager.html b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager.html index cc5a96b749..c0cb1808c1 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager.html +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/FortressSiegeManager/FortressSiegeManager.html @@ -1,5 +1,4 @@ - -Are you curious why I am selling here, since it's not a village?

- - +Are you curious why I am selling here, since it's not a village?
+ + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/MonumentOfHeroes/MonumentOfHeroes.java b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/MonumentOfHeroes/MonumentOfHeroes.java index e210b6afe4..37aa1851df 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/MonumentOfHeroes/MonumentOfHeroes.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/others/MonumentOfHeroes/MonumentOfHeroes.java @@ -158,6 +158,7 @@ public final class MonumentOfHeroes extends AbstractNpcAI { htmltext = "MonumentOfHeroes-weaponNo.html"; } + break; } case "heroCirclet": { diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/ai/spawns/DayNightSpawns.java b/L2J_Mobius_Underground/dist/game/data/scripts/ai/spawns/DayNightSpawns.java index 4fcec422aa..460a38ab04 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/ai/spawns/DayNightSpawns.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/ai/spawns/DayNightSpawns.java @@ -76,7 +76,7 @@ public final class DayNightSpawns extends AbstractNpcAI } else { - group.spawnAll(null); + group.spawnAll(); } } else if (DAY_GROUP_NAME.equalsIgnoreCase(group.getName())) @@ -87,7 +87,7 @@ public final class DayNightSpawns extends AbstractNpcAI } else { - group.spawnAll(null); + group.spawnAll(); } } }); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java index 076f7a68d6..cac211d921 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -40,6 +40,7 @@ public final class EffectMasterHandler EffectHandler.getInstance().registerHandler("AddTeleportBookmarkSlot", AddTeleportBookmarkSlot::new); EffectHandler.getInstance().registerHandler("AreaDamage", AreaDamage::new); EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new); + EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new); EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new); EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new); EffectHandler.getInstance().registerHandler("Backstab", Backstab::new); @@ -117,7 +118,6 @@ public final class EffectMasterHandler EffectHandler.getInstance().registerHandler("DispelBySlotProbability", DispelBySlotProbability::new); EffectHandler.getInstance().registerHandler("DoubleCast", DoubleCast::new); EffectHandler.getInstance().registerHandler("EnableCloak", EnableCloak::new); - EffectHandler.getInstance().registerHandler("EnemyCharge", EnemyCharge::new); EffectHandler.getInstance().registerHandler("EnergyAttack", EnergyAttack::new); EffectHandler.getInstance().registerHandler("EnlargeAbnormalSlot", EnlargeAbnormalSlot::new); EffectHandler.getInstance().registerHandler("EnlargeSlot", EnlargeSlot::new); @@ -131,7 +131,6 @@ public final class EffectMasterHandler EffectHandler.getInstance().registerHandler("Feed", Feed::new); EffectHandler.getInstance().registerHandler("Flag", Flag::new); EffectHandler.getInstance().registerHandler("FlipBlock", FlipBlock::new); - EffectHandler.getInstance().registerHandler("FlyMove", FlyMove::new); EffectHandler.getInstance().registerHandler("FocusEnergy", FocusEnergy::new); EffectHandler.getInstance().registerHandler("FocusMomentum", FocusMomentum::new); EffectHandler.getInstance().registerHandler("FocusMaxMomentum", FocusMaxMomentum::new); @@ -249,6 +248,7 @@ public final class EffectMasterHandler EffectHandler.getInstance().registerHandler("RealDamage", RealDamage::new); EffectHandler.getInstance().registerHandler("RebalanceHP", RebalanceHP::new); EffectHandler.getInstance().registerHandler("Recovery", Recovery::new); + EffectHandler.getInstance().registerHandler("ReduceDamage", ReduceDamage::new); EffectHandler.getInstance().registerHandler("ReduceCancel", ReduceCancel::new); EffectHandler.getInstance().registerHandler("ReduceDropPenalty", ReduceDropPenalty::new); EffectHandler.getInstance().registerHandler("ReflectMagic", ReflectMagic::new); @@ -314,7 +314,7 @@ public final class EffectMasterHandler EffectHandler.getInstance().registerHandler("TeleportToNpc", TeleportToNpc::new); EffectHandler.getInstance().registerHandler("TeleportToSummon", TeleportToSummon::new); EffectHandler.getInstance().registerHandler("TeleportToTarget", TeleportToTarget::new); - EffectHandler.getInstance().registerHandler("ThrowUp", ThrowUp::new); + EffectHandler.getInstance().registerHandler("FlyAway", FlyAway::new); EffectHandler.getInstance().registerHandler("TransferDamageToPlayer", TransferDamageToPlayer::new); EffectHandler.getInstance().registerHandler("TransferDamageToSummon", TransferDamageToSummon::new); EffectHandler.getInstance().registerHandler("TransferHate", TransferHate::new); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/AttackAttributeAdd.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/AttackAttributeAdd.java new file mode 100644 index 0000000000..33138f4803 --- /dev/null +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/AttackAttributeAdd.java @@ -0,0 +1,86 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.effects.AbstractEffect; +import com.l2jmobius.gameserver.model.skills.Skill; +import com.l2jmobius.gameserver.model.stats.Stats; + +/** + * @author Sdw + */ +public class AttackAttributeAdd extends AbstractEffect +{ + private final double _amount; + + public AttackAttributeAdd(StatsSet params) + { + _amount = params.getDouble("amount", 0); + } + + @Override + public void pump(L2Character effected, Skill skill) + { + Stats stat = Stats.FIRE_POWER; + AttributeType maxAttribute = AttributeType.FIRE; + int maxValue = 0; + + for (AttributeType attribute : AttributeType.values()) + { + final int attributeValue = effected.getStat().getAttackElementValue(attribute); + if ((attributeValue > 0) && (attributeValue > maxValue)) + { + maxAttribute = attribute; + maxValue = attributeValue; + } + } + + switch (maxAttribute) + { + case WATER: + { + stat = Stats.WATER_POWER; + break; + } + case WIND: + { + stat = Stats.WIND_POWER; + break; + } + case EARTH: + { + stat = Stats.EARTH_POWER; + break; + } + case HOLY: + { + stat = Stats.HOLY_POWER; + break; + } + case DARK: + { + stat = Stats.DARK_POWER; + break; + } + } + + effected.getStat().mergeAdd(stat, _amount); + } +} diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/CallSkill.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/CallSkill.java index d6ea148347..675e1023d2 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/CallSkill.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/CallSkill.java @@ -37,7 +37,7 @@ public final class CallSkill extends AbstractEffect public CallSkill(StatsSet params) { - _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1), params.getInt("skillSubLevel", 0)); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/CallSkillOnActionTime.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/CallSkillOnActionTime.java index becdd1da0f..91080ab874 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/CallSkillOnActionTime.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/CallSkillOnActionTime.java @@ -35,7 +35,7 @@ public final class CallSkillOnActionTime extends AbstractEffect public CallSkillOnActionTime(StatsSet params) { - _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1), params.getInt("skillSubLevel", 0)); setTicks(params.getInt("ticks")); } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/EnemyCharge.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/EnemyCharge.java deleted file mode 100644 index 47767c75d3..0000000000 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/EnemyCharge.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import com.l2jmobius.gameserver.GeoData; -import com.l2jmobius.gameserver.model.Location; -import com.l2jmobius.gameserver.model.StatsSet; -import com.l2jmobius.gameserver.model.actor.L2Character; -import com.l2jmobius.gameserver.model.effects.AbstractEffect; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.skills.Skill; -import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation; -import com.l2jmobius.gameserver.network.serverpackets.ValidateLocation; - -/** - * Enemy Charge effect implementation. - */ -public final class EnemyCharge extends AbstractEffect -{ - private final int _speed; - private final int _delay; - private final int _animationSpeed; - - public EnemyCharge(StatsSet params) - { - _speed = params.getInt("speed", 0); - _delay = params.getInt("delay", 0); - _animationSpeed = params.getInt("animationSpeed", 0); - } - - @Override - public boolean isInstant() - { - return true; - } - - @Override - public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item) - { - if (effected.isMovementDisabled()) - { - return; - } - - // Get current position of the L2Character - final int curX = effector.getX(); - final int curY = effector.getY(); - final int curZ = effector.getZ(); - - // Calculate distance (dx,dy) between current position and destination - final double dx = effected.getX() - curX; - final double dy = effected.getY() - curY; - final double dz = effected.getZ() - curZ; - final double distance = Math.sqrt((dx * dx) + (dy * dy)); - if (distance > 2000) - { - _log.info("EffectEnemyCharge was going to use invalid coordinates for characters, getEffector: " + curX + "," + curY + " and getEffected: " + effected.getX() + "," + effected.getY()); - return; - } - - int offset = Math.max((int) distance - skill.getFlyRadius(), 30); - - // approximation for moving closer when z coordinates are different - // TODO: handle Z axis movement better - offset -= Math.abs(dz); - if (offset < 5) - { - offset = 5; - } - - // If no distance - if ((distance < 1) || ((distance - offset) <= 0)) - { - return; - } - - // Calculate movement angles needed - final double sin = dy / distance; - final double cos = dx / distance; - - // Calculate the new destination with offset included - final int x = curX + (int) ((distance - offset) * cos); - final int y = curY + (int) ((distance - offset) * sin); - final int z = effected.getZ(); - - final Location destination = GeoData.getInstance().moveCheck(effector.getX(), effector.getY(), effector.getZ(), x, y, z, effector.getInstanceWorld()); - - effector.broadcastPacket(new FlyToLocation(effector, destination, skill.getFlyType(), _speed, _delay, _animationSpeed)); - - // maybe is need force set X,Y,Z - effected.setXYZ(destination); - effected.broadcastPacket(new ValidateLocation(effector)); - effected.revalidateZone(true); - } -} diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/EnergyAttack.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/EnergyAttack.java index 99ac4095a6..ab74235f45 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/EnergyAttack.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/EnergyAttack.java @@ -43,6 +43,7 @@ public final class EnergyAttack extends AbstractEffect private final int _criticalChance; private final boolean _ignoreShieldDefence; private final boolean _overHit; + private final double _pDefMod; public EnergyAttack(StatsSet params) { @@ -51,6 +52,7 @@ public final class EnergyAttack extends AbstractEffect _ignoreShieldDefence = params.getBoolean("ignoreShieldDefence", false); _overHit = params.getBoolean("overHit", false); _chargeConsume = params.getInt("chargeConsume", 0); + _pDefMod = params.getDouble("pDefMod", 1.0); } @Override @@ -103,7 +105,7 @@ public final class EnergyAttack extends AbstractEffect ((L2Attackable) effected).overhitEnabled(true); } - int defence = effected.getPDef(); + double defence = effected.getPDef() * _pDefMod; if (!_ignoreShieldDefence) { @@ -137,7 +139,7 @@ public final class EnergyAttack extends AbstractEffect // Skill specific mods. final double energyChargesBoost = 1 + (charge * 0.1); // 10% bonus damage for each charge used. final double critMod = critical ? Formulas.calcCritDamage(attacker, effected, skill) : 1; - final double ssmod = (skill.useSoulShot() && attacker.isChargedShot(ShotType.SOULSHOTS)) ? attacker.getStat().getValue(Stats.SHOTS_BONUS, 2) : 1; // 2.04 for dual weapon? + final double ssmod = (skill.useSoulShot() && attacker.isChargedShot(ShotType.SOULSHOTS)) ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1; // 2.04 for dual weapon? // ...................________Initial Damage_________...__Charges Additional Damage__...____________________________________ // ATTACK CALCULATION ((77 * ((pAtk * lvlMod) + power) * (1 + (0.1 * chargesConsumed)) / pdef) * skillPower) + skillPowerAdd diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/ThrowUp.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlyAway.java similarity index 61% rename from L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/ThrowUp.java rename to L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlyAway.java index 582e6c8842..82cb374eb7 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/ThrowUp.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlyAway.java @@ -30,10 +30,13 @@ import com.l2jmobius.gameserver.network.serverpackets.ValidateLocation; /** * Throw Up effect implementation. */ -public final class ThrowUp extends AbstractEffect +public final class FlyAway extends AbstractEffect { - public ThrowUp(StatsSet params) + private final int _radius; + + public FlyAway(StatsSet params) { + _radius = params.getInt("radius"); } @Override @@ -45,52 +48,18 @@ public final class ThrowUp extends AbstractEffect @Override public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item) { - final int curX = effected.getX(); - final int curY = effected.getY(); - final int curZ = effected.getZ(); - - // Calculate distance between effector and effected current position - final double dx = effector.getX() - curX; - final double dy = effector.getY() - curY; - final double dz = effector.getZ() - curZ; + final int dx = effector.getX() - effected.getX(); + final int dy = effector.getY() - effected.getY(); final double distance = Math.sqrt((dx * dx) + (dy * dy)); - if (distance > 2000) - { - _log.info("EffectThrow was going to use invalid coordinates for characters, getEffected: " + curX + "," + curY + " and getEffector: " + effector.getX() + "," + effector.getY()); - return; - } - int offset = Math.min((int) distance + skill.getFlyRadius(), 1400); + final double nRadius = effector.getCollisionRadius() + effected.getCollisionRadius() + _radius; - double cos; - double sin; - - // approximation for moving futher when z coordinates are different - // TODO: handle Z axis movement better - offset += Math.abs(dz); - if (offset < 5) - { - offset = 5; - } - - // If no distance - if (distance < 1) - { - return; - } - - // Calculate movement angles needed - sin = dy / distance; - cos = dx / distance; - - // Calculate the new destination with offset included - final int x = effector.getX() - (int) (offset * cos); - final int y = effector.getY() - (int) (offset * sin); - final int z = effected.getZ(); + final int x = (int) (effector.getX() - (nRadius * (dx / distance))); + final int y = (int) (effector.getY() - (nRadius * (dy / distance))); + final int z = effector.getZ(); final Location destination = GeoData.getInstance().moveCheck(effected.getX(), effected.getY(), effected.getZ(), x, y, z, effected.getInstanceWorld()); effected.broadcastPacket(new FlyToLocation(effected, destination, FlyType.THROW_UP)); - // TODO: Review. effected.setXYZ(destination); effected.broadcastPacket(new ValidateLocation(effected)); effected.revalidateZone(true); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlyMove.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlyMove.java deleted file mode 100644 index 2757da88a6..0000000000 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/FlyMove.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import com.l2jmobius.gameserver.GeoData; -import com.l2jmobius.gameserver.model.Location; -import com.l2jmobius.gameserver.model.StatsSet; -import com.l2jmobius.gameserver.model.actor.L2Character; -import com.l2jmobius.gameserver.model.effects.AbstractEffect; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.skills.Skill; -import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation; -import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType; -import com.l2jmobius.gameserver.util.Util; - -/** - * @author Nos - */ -public class FlyMove extends AbstractEffect -{ - private final FlyType _flyType; - private final int _angle; - private final boolean _absoluteAngle; // Use map angle instead of character angle. - private final int _range; - private final boolean _selfPos; // Use the position and heading of yourself to move in the given range - private final int _speed; - private final int _delay; - private final int _animationSpeed; - - public FlyMove(StatsSet params) - { - _flyType = params.getEnum("flyType", FlyType.class, FlyType.DUMMY); - _angle = params.getInt("angle", 0); - _absoluteAngle = params.getBoolean("absoluteAngle", false); - _range = params.getInt("range", 20); - _selfPos = params.getBoolean("selfPos", false); - _speed = params.getInt("speed", 0); - _delay = params.getInt("delay", 0); - _animationSpeed = params.getInt("animationSpeed", 0); - } - - @Override - public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item) - { - final L2Character target = _selfPos ? effector : effected; - - // Avoid calculating heading towards yourself because it always yields 0. Same results can be achieved with absoluteAngle of 0. - final int heading = (_selfPos || (effector == effected)) ? effector.getHeading() : Util.calculateHeadingFrom(effector, effected); - double angle = _absoluteAngle ? _angle : Util.convertHeadingToDegree(heading); - angle = (angle + _angle) % 360; - if (angle < 0) - { - angle += 360; - } - - final double radiansAngle = Math.toRadians(angle); - final int posX = (int) (target.getX() + (_range * Math.cos(radiansAngle))); - final int posY = (int) (target.getY() + (_range * Math.sin(radiansAngle))); - final int posZ = target.getZ(); - final Location destination = GeoData.getInstance().moveCheck(effector.getX(), effector.getY(), effector.getZ(), posX, posY, posZ, effector.getInstanceWorld()); - - effector.broadcastPacket(new FlyToLocation(effector, destination, _flyType, _speed, _delay, _animationSpeed)); - effector.setXYZ(destination); - effected.revalidateZone(true); - } - - @Override - public boolean isInstant() - { - return true; - } -} diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/JewelSlot.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/JewelSlot.java index 0f9216dc38..54c872bec7 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/JewelSlot.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/JewelSlot.java @@ -1,31 +1,31 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package handlers.effecthandlers; - -import com.l2jmobius.gameserver.model.StatsSet; -import com.l2jmobius.gameserver.model.stats.Stats; - -/** - * @author Sdw - */ -public class JewelSlot extends AbstractStatAddEffect -{ - public JewelSlot(StatsSet params) - { - super(params, Stats.BROOCH_JEWELS); - } -} \ No newline at end of file +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.stats.Stats; + +/** + * @author Sdw + */ +public class JewelSlot extends AbstractStatAddEffect +{ + public JewelSlot(StatsSet params) + { + super(params, Stats.BROOCH_JEWELS); + } +} diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttackWeaponBonus.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttackWeaponBonus.java index f99d9b36d5..58720b8cc4 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttackWeaponBonus.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttackWeaponBonus.java @@ -44,6 +44,7 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect private final double _criticalChance; private final boolean _ignoreShieldDefence; private final boolean _overHit; + private final double _pDefMod; private final Map _weaponBonus = new HashMap<>(); @@ -53,6 +54,7 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect _criticalChance = params.getDouble("criticalChance", 0); _ignoreShieldDefence = params.getBoolean("ignoreShieldDefence", false); _overHit = params.getBoolean("overHit", false); + _pDefMod = params.getDouble("pDefMod", 1.0); for (WeaponType weapon : WeaponType.values()) { @@ -106,7 +108,7 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect } final double attack = effector.getPAtk(); - double defence = effected.getPDef(); + double defence = effected.getPDef() * _pDefMod; if (!_ignoreShieldDefence) { diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/PhysicalSoulAttack.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/PhysicalSoulAttack.java index b091263d77..db8d2dcb0f 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/PhysicalSoulAttack.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/PhysicalSoulAttack.java @@ -137,7 +137,7 @@ public final class PhysicalSoulAttack extends AbstractEffect final double wpnMod = effector.getAttackType().isRanged() ? 70 : (70 * 1.10113); final double rangedBonus = effector.getAttackType().isRanged() ? (attack + _power) : 0; final double critMod = critical ? Formulas.calcCritDamage(effector, effected, skill) : 1; - final double ssmod = (skill.useSoulShot() && effector.isChargedShot(ShotType.SOULSHOTS)) ? effector.getStat().getValue(Stats.SHOTS_BONUS, 2) : 1; // 2.04 for dual weapon? + final double ssmod = (skill.useSoulShot() && effector.isChargedShot(ShotType.SOULSHOTS)) ? (2 * effector.getStat().getValue(Stats.SHOTS_BONUS)) : 1; // 2.04 for dual weapon? final double soulsMod = 1 + (souls * 0.04); // Souls Formula (each soul increase +4%) // ...................____________Melee Damage_____________......................................___________________Ranged Damage____________________ diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/ReduceDamage.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/ReduceDamage.java new file mode 100644 index 0000000000..60bd6d90b6 --- /dev/null +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/ReduceDamage.java @@ -0,0 +1,63 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.effects.AbstractEffect; +import com.l2jmobius.gameserver.model.events.EventType; +import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived; +import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener; +import com.l2jmobius.gameserver.model.events.returns.DamageReturn; +import com.l2jmobius.gameserver.model.skills.BuffInfo; + +/** + * @author Sdw + */ +public class ReduceDamage extends AbstractEffect +{ + private final double _amount; + + public ReduceDamage(StatsSet params) + { + _amount = params.getDouble("amount"); + } + + private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event) + { + // DOT effects are not taken into account. + if (event.isDamageOverTime()) + { + return null; + } + + final double newDamage = event.getDamage() * (_amount / 100); + + return new DamageReturn(false, true, false, newDamage); + } + + @Override + public void onExit(BuffInfo info) + { + info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this); + } + + @Override + public void onStart(BuffInfo info) + { + info.getEffected().addListener(new FunctionEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this)); + } +} diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByAttack.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByAttack.java index 207383f9e7..de5b10d6df 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByAttack.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByAttack.java @@ -87,7 +87,7 @@ public final class TriggerSkillByAttack extends AbstractEffect public void onAttackEvent(OnCreatureDamageDealt event) { - if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0)) || (!_allowNormalAttack && !_allowSkillAttack)) + if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0)) || (!_allowNormalAttack && !_allowSkillAttack)) { return; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByAvoid.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByAvoid.java index 5a7bdf2ded..82a3bb14dc 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByAvoid.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByAvoid.java @@ -57,7 +57,7 @@ public final class TriggerSkillByAvoid extends AbstractEffect public void onAvoidEvent(OnCreatureAttackAvoid event) { - if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0))) + if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0))) { return; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDamage.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDamage.java index 4e41551883..5fca763c99 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDamage.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDamage.java @@ -61,7 +61,7 @@ public final class TriggerSkillByDamage extends AbstractEffect public void onDamageReceivedEvent(OnCreatureDamageReceived event) { - if (event.isDamageOverTime() || (_chance == 0) || (_skill.getSkillLvl() == 0)) + if (event.isDamageOverTime() || (_chance == 0) || (_skill.getSkillLevel() == 0)) { return; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDeathBlow.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDeathBlow.java index 604711f3de..cfd2d77548 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDeathBlow.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDeathBlow.java @@ -16,17 +16,23 @@ */ package handlers.effecthandlers; +import java.util.logging.Level; + import com.l2jmobius.commons.util.Rnd; +import com.l2jmobius.gameserver.enums.InstanceType; +import com.l2jmobius.gameserver.handler.TargetHandler; +import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.effects.AbstractEffect; import com.l2jmobius.gameserver.model.events.EventType; -import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDeath; -import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener; -import com.l2jmobius.gameserver.model.events.returns.TerminateReturn; +import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived; +import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import com.l2jmobius.gameserver.model.holders.SkillHolder; import com.l2jmobius.gameserver.model.skills.BuffInfo; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.SkillCaster; +import com.l2jmobius.gameserver.model.skills.targets.TargetType; /** * Trigger Skill By Death Blow effect implementation. @@ -34,43 +40,76 @@ import com.l2jmobius.gameserver.model.skills.SkillCaster; */ public final class TriggerSkillByDeathBlow extends AbstractEffect { + private final int _minAttackerLevel; + private final int _maxAttackerLevel; private final int _chance; private final SkillHolder _skill; + private final TargetType _targetType; + private final InstanceType _attackerType; public TriggerSkillByDeathBlow(StatsSet params) { + _minAttackerLevel = params.getInt("minAttackerLevel", 1); + _maxAttackerLevel = params.getInt("maxAttackerLevel", 127); _chance = params.getInt("chance", 100); _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.SELF); + _attackerType = params.getEnum("attackerType", InstanceType.class, InstanceType.L2Character); } - public TerminateReturn onCreatureDeath(OnCreatureDeath event) + public void onDamageReceivedEvent(OnCreatureDamageReceived event) { - if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0))) + if (event.getDamage() < event.getTarget().getCurrentHp()) { - return new TerminateReturn(false, false, false); + return; } - if (Rnd.get(100) > _chance) + if ((_chance == 0) || (_skill.getSkillLevel() == 0)) { - return new TerminateReturn(false, false, false); + return; + } + + if (event.getAttacker() == event.getTarget()) + { + return; + } + + if ((event.getAttacker().getLevel() < _minAttackerLevel) || (event.getAttacker().getLevel() > _maxAttackerLevel)) + { + return; + } + + if (((_chance < 100) && (Rnd.get(100) > _chance)) || !event.getAttacker().getInstanceType().isType(_attackerType)) + { + return; } final Skill triggerSkill = _skill.getSkill(); + L2Object target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getTarget(), event.getAttacker(), triggerSkill, false, false, false); + } + catch (Exception e) + { + _log.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e); + } - SkillCaster.triggerCast(event.getTarget(), event.getTarget(), triggerSkill); - - return new TerminateReturn(true, true, true); + if ((target != null) && target.isCharacter()) + { + SkillCaster.triggerCast(event.getTarget(), (L2Character) target, triggerSkill); + } } @Override public void onExit(BuffInfo info) { - info.getEffected().removeListenerIf(EventType.ON_CREATURE_DEATH, listener -> listener.getOwner() == this); + info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this); } @Override public void onStart(BuffInfo info) { - info.getEffected().addListener(new FunctionEventListener(info.getEffected(), EventType.ON_CREATURE_DEATH, (OnCreatureDeath event) -> onCreatureDeath(event), this)); + info.getEffected().addListener(new ConsumerEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this)); } } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByKill.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByKill.java index 1825df8d8b..2db572e6c5 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByKill.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByKill.java @@ -45,7 +45,7 @@ public final class TriggerSkillByKill extends AbstractEffect public void onCreatureKilled(OnCreatureKilled event, L2Character target) { - if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0))) + if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0))) { return; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByMagicType.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByMagicType.java index 843b8a4d15..d5e54a6e95 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByMagicType.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByMagicType.java @@ -114,7 +114,7 @@ public final class TriggerSkillByMagicType extends AbstractEffect @Override public void onStart(BuffInfo info) { - if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0) || (_magicTypes.length == 0)) + if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0)) { return; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillBySkill.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillBySkill.java index f2df70fa0a..e43cda5682 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillBySkill.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillBySkill.java @@ -48,9 +48,9 @@ public final class TriggerSkillBySkill extends AbstractEffect public TriggerSkillBySkill(StatsSet params) { - _castSkillId = params.getInt("castSkillId", 0); + _castSkillId = params.getInt("castSkillId"); _chance = params.getInt("chance", 100); - _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); } @@ -67,9 +67,9 @@ public final class TriggerSkillBySkill extends AbstractEffect info.getEffected().removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this); } - public void onSkillUseEvent(OnCreatureSkillFinishCast event) + private void onSkillUseEvent(OnCreatureSkillFinishCast event) { - if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0) || (_castSkillId == 0))) + if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) { return; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillBySkillAttack.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillBySkillAttack.java index 6efc3c3806..4ba7fcfdf7 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillBySkillAttack.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillBySkillAttack.java @@ -77,9 +77,9 @@ public final class TriggerSkillBySkillAttack extends AbstractEffect info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_DEALT, listener -> listener.getOwner() == this); } - public void onAttackEvent(OnCreatureDamageDealt event) + private void onAttackEvent(OnCreatureDamageDealt event) { - if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0)) || (_attackSkill.getSkillId() == 0)) + if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0)) || (_attackSkill.getSkillId() == 0)) { return; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java index 1074ba99de..9145d11758 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BeastSoulShot.java @@ -121,7 +121,7 @@ public class BeastSoulShot implements IItemHandler if (!pet.isChargedShot(ShotType.SOULSHOTS)) { pet.setChargedShot(ShotType.SOULSHOTS, true); - skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(pet, pet, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600)); + skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(pet, pet, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600)); } } @@ -130,7 +130,7 @@ public class BeastSoulShot implements IItemHandler if (!s.isChargedShot(ShotType.SOULSHOTS)) { s.setChargedShot(ShotType.SOULSHOTS, true); - skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(s, s, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600)); + skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(s, s, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600)); } }); return true; diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java index b7cb04d247..356b31f29a 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BeastSpiritShot.java @@ -123,7 +123,7 @@ public class BeastSpiritShot implements IItemHandler if (!pet.isChargedShot(shotType)) { pet.setChargedShot(shotType, true); - skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(pet, pet, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600)); + skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(pet, pet, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600)); } } @@ -132,7 +132,7 @@ public class BeastSpiritShot implements IItemHandler if (!s.isChargedShot(shotType)) { s.setChargedShot(shotType, true); - skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(s, s, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600)); + skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(s, s, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600)); } }); return true; diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java index 434763e4f5..552f7a312f 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/BlessedSpiritShot.java @@ -101,7 +101,7 @@ public class BlessedSpiritShot implements IItemHandler { activeChar.sendPacket(SystemMessageId.YOUR_SPIRITSHOT_HAS_BEEN_ENABLED); } - skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600)); + skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600)); return true; } } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/FishShots.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/FishShots.java index 9aeca9f0ca..d03dafbb52 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/FishShots.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/FishShots.java @@ -88,7 +88,7 @@ public class FishShots implements IItemHandler return false; } - skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600)); + skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600)); activeChar.setTarget(oldTarget); return true; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/PetFood.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/PetFood.java index 895fd0833e..01078d1d00 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/PetFood.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/PetFood.java @@ -49,7 +49,7 @@ public class PetFood implements IItemHandler final List skills = item.getItem().getSkills(ItemSkillType.NORMAL); if (skills != null) { - skills.forEach(holder -> useFood(playable, holder.getSkillId(), holder.getSkillLvl(), item)); + skills.forEach(holder -> useFood(playable, holder.getSkillId(), holder.getSkillLevel(), item)); } return true; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java index 4c32af9452..10e06849e8 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/SoulShots.java @@ -113,7 +113,7 @@ public class SoulShots implements IItemHandler { activeChar.sendPacket(SystemMessageId.YOUR_SOULSHOTS_ARE_ENABLED); } - skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600)); + skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600)); return true; } } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java index 20f38a25e7..2ba517291e 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/itemhandlers/SpiritShot.java @@ -101,7 +101,7 @@ public class SpiritShot implements IItemHandler { activeChar.sendPacket(SystemMessageId.YOUR_SPIRITSHOT_HAS_BEEN_ENABLED); } - skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600)); + skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600)); return true; } } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/EnemyNot.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/EnemyNot.java index a8800f6ef7..3cb02d342d 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/EnemyNot.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/EnemyNot.java @@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.targets.TargetType; import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType; /** * Any friendly selected target. Works on dead targets or doors as well. Unable to force use. @@ -74,7 +73,7 @@ public class EnemyNot implements ITargetTypeHandler } } - if ((skill.getFlyType() == FlyType.CHARGE) && !GeoData.getInstance().canMove(activeChar, target)) + if ((skill.isFlyType()) && !GeoData.getInstance().canMove(activeChar, target)) { if (sendMessage) { diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/NpcBody.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/NpcBody.java index 68f1d4dfda..a3b42994ac 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/NpcBody.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/NpcBody.java @@ -20,6 +20,7 @@ import com.l2jmobius.gameserver.GeoData; import com.l2jmobius.gameserver.handler.ITargetTypeHandler; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.targets.TargetType; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -60,14 +61,14 @@ public class NpcBody implements ITargetTypeHandler return null; } - final L2Character target = (L2Character) selectedTarget; + final L2Npc npc = (L2Npc) selectedTarget; - if (target.isDead()) + if (npc.isDead()) { // Check for cast range if character cannot move. TODO: char will start follow until within castrange, but if his moving is blocked by geodata, this msg will be sent. if (dontMove) { - if (activeChar.calculateDistance(target, false, false) > skill.getCastRange()) + if (activeChar.calculateDistance(npc, false, false) > skill.getCastRange()) { if (sendMessage) { @@ -79,7 +80,7 @@ public class NpcBody implements ITargetTypeHandler } // Geodata check when character is within range. - if (!GeoData.getInstance().canSeeTarget(activeChar, target)) + if (!GeoData.getInstance().canSeeTarget(activeChar, npc)) { if (sendMessage) { @@ -89,7 +90,7 @@ public class NpcBody implements ITargetTypeHandler return null; } - return selectedTarget; + return npc; } // If target is not dead or not player/pet it will not even bother to walk within range, unlike Enemy target type. diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/Target.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/Target.java index 103183aba3..0d3b6b40c4 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/Target.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/Target.java @@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.skills.targets.TargetType; import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType; /** * Any friendly selected target or enemy if force use. Works on dead targets or doors as well. @@ -76,7 +75,7 @@ public class Target implements ITargetTypeHandler } } - if ((skill.getFlyType() == FlyType.CHARGE) && !GeoData.getInstance().canMove(activeChar, target)) + if ((skill.isFlyType()) && !GeoData.getInstance().canMove(activeChar, target)) { if (sendMessage) { diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/Fan.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/Fan.java index 4214b112d6..18c1d95224 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/Fan.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/Fan.java @@ -77,9 +77,9 @@ public class Fan implements IAffectScopeHandler }; // Add object of origin since its skipped in the forEachVisibleObjectInRange method. - if (target.isCharacter() && filter.test((L2Character) target)) + if (filter.test(activeChar)) { - action.accept(target); + action.accept(activeChar); } // Check and add targets. diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/PointBlank.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/PointBlank.java index 6fb8d52d66..cc087add71 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/PointBlank.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/PointBlank.java @@ -29,6 +29,7 @@ import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.skills.Skill; +import com.l2jmobius.gameserver.model.skills.targets.AffectObject; import com.l2jmobius.gameserver.model.skills.targets.AffectScope; import com.l2jmobius.gameserver.model.skills.targets.TargetType; @@ -53,11 +54,8 @@ public class PointBlank implements IAffectScopeHandler { return false; } - if (c.isDead()) - { - return false; - } - if ((affectObject != null) && !affectObject.checkAffectedObject(activeChar, c)) + // XXX : Find a proper way to fix, if it's not proper. + if ((affectObject != null) && (!c.isDead() || (skill.getAffectObject() == AffectObject.OBJECT_DEAD_NPC_BODY)) && !affectObject.checkAffectedObject(activeChar, c)) { return false; } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/Square.java b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/Square.java index 8041f21967..bbdc34784d 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/Square.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/handlers/targethandlers/affectscope/Square.java @@ -90,9 +90,9 @@ public class Square implements IAffectScopeHandler }; // Add object of origin since its skipped in the forEachVisibleObjectInRange method. - if (target.isCharacter() && filter.test((L2Character) target)) + if (filter.test(activeChar)) { - action.accept(target); + action.accept(activeChar); } // Check and add targets. diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/AbstractInstance.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/AbstractInstance.java index 069cb6ee35..f65779aa09 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/AbstractInstance.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/AbstractInstance.java @@ -18,6 +18,7 @@ package instances; import java.util.List; +import com.l2jmobius.commons.util.CommonUtil; import com.l2jmobius.gameserver.enums.InstanceReenterType; import com.l2jmobius.gameserver.instancemanager.InstanceManager; import com.l2jmobius.gameserver.model.Location; @@ -38,6 +39,27 @@ import ai.AbstractNpcAI; */ public abstract class AbstractInstance extends AbstractNpcAI { + private final int[] _templateIds; + + public AbstractInstance(int... templateId) + { + if (templateId.length == 0) + { + throw new IllegalStateException("No template ids were provided!"); + } + _templateIds = templateId; + } + + public int[] getTemplateId() + { + return _templateIds; + } + + public boolean isInInstance(Instance instance) + { + return (instance != null) && CommonUtil.contains(_templateIds, instance.getTemplateId()); + } + /** * Get instance world associated with {@code player}.
* @param player player who wants get instance world diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/BaylorWarzone/BaylorWarzone.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/BaylorWarzone/BaylorWarzone.java index 98d7988ea9..3fc7135fcc 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/BaylorWarzone/BaylorWarzone.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/BaylorWarzone/BaylorWarzone.java @@ -54,6 +54,7 @@ public final class BaylorWarzone extends AbstractInstance public BaylorWarzone() { + super(TEMPLATE_ID); addStartNpc(ENTRANCE_PORTAL); addTalkId(ENTRANCE_PORTAL); addInstanceCreatedId(TEMPLATE_ID); @@ -77,7 +78,7 @@ public final class BaylorWarzone extends AbstractInstance public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player) { final Instance world = npc.getInstanceWorld(); - if (isBylorInstance(world)) + if (isInInstance(world)) { switch (event) { @@ -265,7 +266,7 @@ public final class BaylorWarzone extends AbstractInstance public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill) { final Instance world = npc.getInstanceWorld(); - if (isBylorInstance(world)) + if (isInInstance(world)) { world.getAliveNpcs(INVISIBLE_NPC_1, INVISIBLE_NPC_2, INVISIBLE_NPC_3).forEach(L2Npc::deleteMe); world.getAliveNpcs(PRISON_GUARD).forEach(guard -> guard.doDie(null)); @@ -289,7 +290,7 @@ public final class BaylorWarzone extends AbstractInstance final L2Npc npc = (L2Npc) event.getTarget(); final Instance world = npc.getInstanceWorld(); - if (isBylorInstance(world)) + if (isInInstance(world)) { if (world.getAliveNpcs(BAYLOR).isEmpty()) { @@ -308,7 +309,7 @@ public final class BaylorWarzone extends AbstractInstance final L2Npc npc = (L2Npc) event.getSeer(); final Instance world = npc.getInstanceWorld(); - if (isBylorInstance(world) && creature.isPlayer() && npc.isScriptValue(0)) + if (isInInstance(world) && creature.isPlayer() && npc.isScriptValue(0)) { npc.setScriptValue(1); getTimers().addTimer("START_SCENE_01", 5000, npc, null); @@ -325,11 +326,6 @@ public final class BaylorWarzone extends AbstractInstance return super.onSpawn(npc); } - private boolean isBylorInstance(Instance instance) - { - return (instance != null) && (instance.getTemplateId() == TEMPLATE_ID); - } - public static void main(String[] args) { new BaylorWarzone(); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/CastleDungeon/CastleDungeon.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/CastleDungeon/CastleDungeon.java index a2861e760a..f6606acc88 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/CastleDungeon/CastleDungeon.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/CastleDungeon/CastleDungeon.java @@ -89,6 +89,7 @@ public final class CastleDungeon extends AbstractInstance public CastleDungeon() { + super(NPCS.values().stream().mapToInt(Integer::valueOf).toArray()); // NPCs addStartNpc(NPCS.keySet()); addTalkId(NPCS.keySet()); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/CavernOfThePirateCaptain/CavernOfThePirateCaptain.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/CavernOfThePirateCaptain/CavernOfThePirateCaptain.java index 6d1a2797b7..67a0ab8b4d 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/CavernOfThePirateCaptain/CavernOfThePirateCaptain.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/CavernOfThePirateCaptain/CavernOfThePirateCaptain.java @@ -124,6 +124,7 @@ public final class CavernOfThePirateCaptain extends AbstractInstance public CavernOfThePirateCaptain() { + super(TEMPLATE_ID_60, TEMPLATE_ID_83); addStartNpc(PATHFINDER); addTalkId(PATHFINDER); addKillId(ZAKEN_60, ZAKEN_83); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/ChambersOfDelusion/ChamberOfDelusion.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/ChambersOfDelusion/ChamberOfDelusion.java index ff889488d1..dd710244f9 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/ChambersOfDelusion/ChamberOfDelusion.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/ChambersOfDelusion/ChamberOfDelusion.java @@ -91,6 +91,7 @@ public final class ChamberOfDelusion extends AbstractInstance public ChamberOfDelusion() { + super(ENTRANCE_GATEKEEPER.values().stream().mapToInt(Integer::valueOf).toArray()); addStartNpc(ENTRANCE_GATEKEEPER.keySet()); addStartNpc(ROOM_GATEKEEPERS); addTalkId(ENTRANCE_GATEKEEPER.keySet()); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java index 84839244f2..0aae3383a4 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java @@ -110,6 +110,7 @@ public final class DarkCloudMansion extends AbstractInstance public DarkCloudMansion() { + super(TEMPLATE_ID); addStartNpc(YIYEN); addFirstTalkId(MONOLITH, TRUTH, FAITH, ADVERSITY, ADVENTURE); addTalkId(YIYEN, TRUTH); @@ -372,8 +373,10 @@ public final class DarkCloudMansion extends AbstractInstance break; } case 9: + { handleRoomE(world, npc); break; + } } } return null; diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/EvasHiddenSpace/EvasHiddenSpace.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/EvasHiddenSpace/EvasHiddenSpace.java index 44c6d08b06..89e076d0da 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/EvasHiddenSpace/EvasHiddenSpace.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/EvasHiddenSpace/EvasHiddenSpace.java @@ -38,6 +38,7 @@ public final class EvasHiddenSpace extends AbstractInstance public EvasHiddenSpace() { + super(TEMPLATE_ID); addStartNpc(CERENAS); addTalkId(CERENAS, EVAS_AVATAR); addFirstTalkId(EVAS_AVATAR); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/EvilIncubator/EvilIncubator.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/EvilIncubator/EvilIncubator.java index abed6a07f3..e355eded06 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/EvilIncubator/EvilIncubator.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/EvilIncubator/EvilIncubator.java @@ -187,6 +187,7 @@ public final class EvilIncubator extends AbstractInstance public EvilIncubator() { + super(TEMPLATE_ID); addStartNpc(VANGUARD_MEMBER); addTalkId(VANGUARD_MEMBER, ADOLPH, ALICE, BARTON, HAYUK, ELIYAH); addFirstTalkId(ADOLPH, ALICE, BARTON, HAYUK, ELIYAH); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/FaeronTrainingGrounds1/FaeronTrainingGrounds1.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/FaeronTrainingGrounds1/FaeronTrainingGrounds1.java index e0b47895bc..d2efec6fbf 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/FaeronTrainingGrounds1/FaeronTrainingGrounds1.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/FaeronTrainingGrounds1/FaeronTrainingGrounds1.java @@ -59,6 +59,7 @@ public final class FaeronTrainingGrounds1 extends AbstractInstance public FaeronTrainingGrounds1() { + super(TEMPLATE_ID); addStartNpc(AYANTHE, AYANTHE_2); addFirstTalkId(AYANTHE_2); addTalkId(AYANTHE, AYANTHE_2); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/FaeronTrainingGrounds2/FaeronTrainingGrounds2.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/FaeronTrainingGrounds2/FaeronTrainingGrounds2.java index c504d45e4f..50519359c1 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/FaeronTrainingGrounds2/FaeronTrainingGrounds2.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/FaeronTrainingGrounds2/FaeronTrainingGrounds2.java @@ -59,6 +59,7 @@ public final class FaeronTrainingGrounds2 extends AbstractInstance public FaeronTrainingGrounds2() { + super(TEMPLATE_ID); addStartNpc(KATALIN, KATALIN_2); addFirstTalkId(KATALIN_2); addTalkId(KATALIN, KATALIN_2); @@ -78,11 +79,15 @@ public final class FaeronTrainingGrounds2 extends AbstractInstance switch (event) { case "enter_instance": + { enterInstance(player, npc, TEMPLATE_ID); break; + } case "exit_instance": + { finishInstance(player, 0); break; + } case "33945-03.html": { if (qs.isCond(6)) diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/FortressDungeon/FortressDungeon.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/FortressDungeon/FortressDungeon.java index f1d7b9f13e..ee2492b568 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/FortressDungeon/FortressDungeon.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/FortressDungeon/FortressDungeon.java @@ -46,7 +46,6 @@ public final class FortressDungeon extends AbstractInstance { // NPCs private static final Map NPCS = new HashMap<>(); - static { NPCS.put(35666, 22); // Shanty @@ -103,6 +102,7 @@ public final class FortressDungeon extends AbstractInstance public FortressDungeon() { + super(NPCS.values().stream().mapToInt(Integer::valueOf).toArray()); // NPCs addStartNpc(NPCS.keySet()); addTalkId(NPCS.keySet()); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/FortressOfTheDead/FortressOfTheDead.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/FortressOfTheDead/FortressOfTheDead.java index 267d76fa01..8803291e63 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/FortressOfTheDead/FortressOfTheDead.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/FortressOfTheDead/FortressOfTheDead.java @@ -51,6 +51,7 @@ public final class FortressOfTheDead extends AbstractInstance public FortressOfTheDead() { + super(TEMPLATE_ID); addStartNpc(BROKEN_BOOKSHELF); addFirstTalkId(KAIN_VAN_HALTER); addTalkId(BROKEN_BOOKSHELF, KAIN_VAN_HALTER, MYSTERIOUS_WIZARD); @@ -69,7 +70,7 @@ public final class FortressOfTheDead extends AbstractInstance else { final Instance world = npc.getInstanceWorld(); - if (isFotDInstance(world)) + if (isInInstance(world)) { switch (event) { @@ -138,7 +139,7 @@ public final class FortressOfTheDead extends AbstractInstance { final Instance world = npc.getInstanceWorld(); - if (isFotDInstance(world)) + if (isInInstance(world)) { if (npc.getId() == VAMPIRIC_SOLDIER) { @@ -157,11 +158,6 @@ public final class FortressOfTheDead extends AbstractInstance return super.onKill(npc, player, isSummon); } - private boolean isFotDInstance(Instance instance) - { - return (instance != null) && (instance.getTemplateId() == TEMPLATE_ID); - } - public static void main(String[] args) { new FortressOfTheDead(); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/HarnakUndergroundRuins/HarnakUndergroundRuins.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/HarnakUndergroundRuins/HarnakUndergroundRuins.java index 48a8fb9608..65481c981c 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/HarnakUndergroundRuins/HarnakUndergroundRuins.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/HarnakUndergroundRuins/HarnakUndergroundRuins.java @@ -94,6 +94,7 @@ public final class HarnakUndergroundRuins extends AbstractInstance public HarnakUndergroundRuins() { + super(TEMPLATE_ID); registerMobs(KRAKIA_BATHUS, KRAKIA_CARCASS, KRAKIA_LOTUS, RAKZAN, WEISS_KHAN, BAMONTI, SEKNUS, WEISS_ELE, HARNAKS_WRAITH); addSeeCreatureId(POWER_SOURCES); addEnterZoneId(ZONE_ROOM_2, ZONE_ROOM_3); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/IceQueensCastle/IceQueensCastle.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/IceQueensCastle/IceQueensCastle.java index f0b3082f95..8d1edcdf83 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/IceQueensCastle/IceQueensCastle.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/IceQueensCastle/IceQueensCastle.java @@ -56,6 +56,7 @@ public final class IceQueensCastle extends AbstractInstance public IceQueensCastle() { + super(TEMPLATE_ID); addStartNpc(JINIA); addTalkId(JINIA); addSeeCreatureId(BATTALION_LEADER, LEGIONNAIRE, MERCENARY_ARCHER); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/IceQueensCastleBattle/IceQueensCastleBattle.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/IceQueensCastleBattle/IceQueensCastleBattle.java index a9dc8d50ea..de156c2b7a 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/IceQueensCastleBattle/IceQueensCastleBattle.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/IceQueensCastleBattle/IceQueensCastleBattle.java @@ -150,6 +150,7 @@ public final class IceQueensCastleBattle extends AbstractInstance public IceQueensCastleBattle() { + super(TEMPLATE_ID_EASY, TEMPLATE_ID_HARD); addStartNpc(SIRRA, SUPP_KEGOR, SUPP_JINIA); addFirstTalkId(SUPP_KEGOR, SUPP_JINIA); addTalkId(SIRRA, JINIA, SUPP_KEGOR); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/IstinaCavern/IstinaCavern.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/IstinaCavern/IstinaCavern.java index a700b645fc..ad1c5fcc95 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/IstinaCavern/IstinaCavern.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/IstinaCavern/IstinaCavern.java @@ -80,6 +80,7 @@ public final class IstinaCavern extends AbstractInstance public IstinaCavern() { + super(TEMPLATE_ID_COMMON, TEMPLATE_ID_EXTREME); addStartNpc(RUMIESE); addTalkId(RUMIESE, RUMIESE_INSTANCE); addFirstTalkId(RUMIESE_INSTANCE); @@ -95,7 +96,7 @@ public final class IstinaCavern extends AbstractInstance { String htmltext = null; final Instance instance = npc.getInstanceWorld(); - if (isIstinaInstance(instance)) + if (isInInstance(instance)) { switch (event) { @@ -157,7 +158,7 @@ public final class IstinaCavern extends AbstractInstance public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player) { final Instance instance = npc.getInstanceWorld(); - if (isIstinaInstance(instance)) + if (isInInstance(instance)) { final StatsSet npcParams = npc.getParameters(); final StatsSet npcVars = npc.getVariables(); @@ -363,7 +364,7 @@ public final class IstinaCavern extends AbstractInstance public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill) { final Instance instance = npc.getInstanceWorld(); - if ((skill != null) && isIstinaInstance(instance)) + if ((skill != null) && isInInstance(instance)) { final int skillId = skill.getId(); @@ -433,7 +434,7 @@ public final class IstinaCavern extends AbstractInstance public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill) { final Instance instance = npc.getInstanceWorld(); - if (isIstinaInstance(instance)) + if (isInInstance(instance)) { final StatsSet npcVars = npc.getVariables(); final int stage = npcVars.getInt("ISTINA_STAGE", -1); @@ -571,7 +572,7 @@ public final class IstinaCavern extends AbstractInstance public String onSpawn(L2Npc npc) { final Instance instance = npc.getInstanceWorld(); - if (isIstinaInstance(instance)) + if (isInInstance(instance)) { if (npc.getId() == INVISIBLE_NPC) { @@ -595,7 +596,7 @@ public final class IstinaCavern extends AbstractInstance { String htmltext = null; final Instance instance = npc.getInstanceWorld(); - if (isIstinaInstance(instance)) + if (isInInstance(instance)) { switch (instance.getStatus()) { @@ -624,11 +625,6 @@ public final class IstinaCavern extends AbstractInstance return instance.getTemplateId() == TEMPLATE_ID_EXTREME; } - private boolean isIstinaInstance(Instance instance) - { - return (instance != null) && ((instance.getTemplateId() == TEMPLATE_ID_COMMON) || (instance.getTemplateId() == TEMPLATE_ID_EXTREME)); - } - private int getChargedPercent(int score, boolean isExtreme) { final int charged; diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout1/JiniaGuildHideout1.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout1/JiniaGuildHideout1.java index 83db2e7bab..9f3e1ee363 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout1/JiniaGuildHideout1.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout1/JiniaGuildHideout1.java @@ -37,6 +37,7 @@ public final class JiniaGuildHideout1 extends AbstractInstance public JiniaGuildHideout1() { + super(TEMPLATE_ID); addStartNpc(RAFFORTY); addTalkId(RAFFORTY); } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout2/JiniaGuildHideout2.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout2/JiniaGuildHideout2.java index b67fbf5345..b2558fc577 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout2/JiniaGuildHideout2.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout2/JiniaGuildHideout2.java @@ -37,6 +37,7 @@ public final class JiniaGuildHideout2 extends AbstractInstance public JiniaGuildHideout2() { + super(TEMPLATE_ID); addStartNpc(RAFFORTY); addTalkId(RAFFORTY); } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout3/JiniaGuildHideout3.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout3/JiniaGuildHideout3.java index 5bd1427afd..50a2d5b3ea 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout3/JiniaGuildHideout3.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout3/JiniaGuildHideout3.java @@ -37,6 +37,7 @@ public final class JiniaGuildHideout3 extends AbstractInstance public JiniaGuildHideout3() { + super(TEMPLATE_ID); addStartNpc(RAFFORTY); addTalkId(RAFFORTY); } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout4/JiniaGuildHideout4.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout4/JiniaGuildHideout4.java index a91500c903..67cce1658f 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout4/JiniaGuildHideout4.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/JiniaGuildHideout4/JiniaGuildHideout4.java @@ -37,6 +37,7 @@ public final class JiniaGuildHideout4 extends AbstractInstance public JiniaGuildHideout4() { + super(TEMPLATE_ID); addStartNpc(RAFFORTY); addTalkId(RAFFORTY); } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/KaraphonHabitat/KaraphonHabitat.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/KaraphonHabitat/KaraphonHabitat.java index cb60f1a4b9..2903a74346 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/KaraphonHabitat/KaraphonHabitat.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/KaraphonHabitat/KaraphonHabitat.java @@ -40,6 +40,7 @@ public final class KaraphonHabitat extends AbstractInstance public KaraphonHabitat() { + super(TEMPLATE_ID); addStartNpc(DOLKIN); addFirstTalkId(DOLKIN_INSTANCE); addTalkId(DOLKIN); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/KartiasLabyrinth/KartiasLabyrinth.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/KartiasLabyrinth/KartiasLabyrinth.java index 5807766829..0cf4bb5c1e 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/KartiasLabyrinth/KartiasLabyrinth.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/KartiasLabyrinth/KartiasLabyrinth.java @@ -157,6 +157,7 @@ public final class KartiasLabyrinth extends AbstractInstance public KartiasLabyrinth() { + super(TEMPLATE_ID_SOLO_85, TEMPLATE_ID_SOLO_90, TEMPLATE_ID_SOLO_95, TEMPLATE_ID_GROUP_85, TEMPLATE_ID_GROUP_90, TEMPLATE_ID_GROUP_95); addStartNpc(KARTIA_RESEARCHER); addFirstTalkId(KARTIA_RESEARCHER); addFirstTalkId(ADOLPH); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/Kimerian/KimerianCommon.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/Kimerian/KimerianCommon.java index aa17ef3e28..884c6d4041 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/Kimerian/KimerianCommon.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/Kimerian/KimerianCommon.java @@ -72,6 +72,7 @@ public final class KimerianCommon extends AbstractInstance public KimerianCommon() { + super(TEMPLATE_ID); addStartNpc(NOETI_KASHERON); addTalkId(NOETI_KASHERON, NOETI_KASHERON_ENTRANCE); addFirstTalkId(NOETI_KASHERON_ENTRANCE, NOETI_KASHERON_LEAVE); @@ -86,7 +87,7 @@ public final class KimerianCommon extends AbstractInstance public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player) { final Instance instance = npc.getInstanceWorld(); - if (isKimerianInstance(instance)) + if (isInInstance(instance)) { switch (event) { @@ -141,7 +142,7 @@ public final class KimerianCommon extends AbstractInstance { String htmltext = null; final Instance instance = npc.getInstanceWorld(); - if (isKimerianInstance(instance)) + if (isInInstance(instance)) { switch (event) { @@ -206,7 +207,7 @@ public final class KimerianCommon extends AbstractInstance public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isSummon) { final Instance instance = npc.getInstanceWorld(); - if (isKimerianInstance(instance)) + if (isInInstance(instance)) { if (npc.getId() == KIMERIAN) { @@ -243,7 +244,7 @@ public final class KimerianCommon extends AbstractInstance public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final Instance instance = npc.getInstanceWorld(); - if (isKimerianInstance(instance)) + if (isInInstance(instance)) { switch (npc.getId()) { @@ -290,7 +291,7 @@ public final class KimerianCommon extends AbstractInstance { final L2Npc npc = (L2Npc) event.getTarget(); final Instance instance = npc.getInstanceWorld(); - if (isKimerianInstance(instance)) + if (isInInstance(instance)) { getTimers().cancelTimersOf(npc); } @@ -300,7 +301,7 @@ public final class KimerianCommon extends AbstractInstance public String onSpawn(L2Npc npc) { final Instance instance = npc.getInstanceWorld(); - if (isKimerianInstance(instance)) + if (isInInstance(instance)) { switch (npc.getId()) { @@ -355,7 +356,7 @@ public final class KimerianCommon extends AbstractInstance final StatsSet npcVars = npc.getVariables(); final Instance instance = npc.getInstanceWorld(); - if (isKimerianInstance(instance)) + if (isInInstance(instance)) { switch (npc.getId()) { @@ -431,7 +432,7 @@ public final class KimerianCommon extends AbstractInstance { final Instance instance = npc.getInstanceWorld(); - if (isKimerianInstance(instance)) + if (isInInstance(instance)) { if (isHollow) { @@ -454,11 +455,6 @@ public final class KimerianCommon extends AbstractInstance } } - private boolean isKimerianInstance(Instance instance) - { - return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID)); - } - public static void main(String[] args) { new KimerianCommon(); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/LabyrinthOfBelis/LabyrinthOfBelis.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/LabyrinthOfBelis/LabyrinthOfBelis.java index 06ebadbc36..48f4ad1102 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/LabyrinthOfBelis/LabyrinthOfBelis.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/LabyrinthOfBelis/LabyrinthOfBelis.java @@ -81,6 +81,7 @@ public final class LabyrinthOfBelis extends AbstractInstance public LabyrinthOfBelis() { + super(TEMPLATE_ID); addStartNpc(SEBION, INFILTRATION_OFFICER, BELIS_VERITIFICATION_SYSTEM); addFirstTalkId(INFILTRATION_OFFICER, ELECTRICITY_GENERATOR, BELIS_VERITIFICATION_SYSTEM); addTalkId(SEBION, INFILTRATION_OFFICER, BELIS_VERITIFICATION_SYSTEM); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/LastImperialTomb/LastImperialTomb.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/LastImperialTomb/LastImperialTomb.java index c179fd2409..39a14835d2 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/LastImperialTomb/LastImperialTomb.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/LastImperialTomb/LastImperialTomb.java @@ -154,6 +154,7 @@ public final class LastImperialTomb extends AbstractInstance public LastImperialTomb() { + super(TEMPLATE_ID); addTalkId(GUIDE, CUBE); addAttackId(SCARLET1); addKillId(ON_KILL_MONSTERS); @@ -831,7 +832,7 @@ public final class LastImperialTomb extends AbstractInstance final SkillHolder skill = new SkillHolder(5007, random); final SkillHolder skillEffect = new SkillHolder(5008, random); broadCastPacket(world, new ExShowScreenMessage(2, -1, 2, 0, 0, 0, 0, true, 4000, false, null, SKILL_MSG.get(random), null)); - broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, skill.getSkillId(), skill.getSkillLvl(), skill.getSkill().getHitTime(), 0)); + broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, skill.getSkillId(), skill.getSkillLevel(), skill.getSkill().getHitTime(), 0)); for (L2PcInstance player : world.getPlayers()) { if ((player != null) && player.isOnline()) diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/MemoryOfDisaster/MemoryOfDisaster.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/MemoryOfDisaster/MemoryOfDisaster.java index 1b4789bb3b..0f08777540 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/MemoryOfDisaster/MemoryOfDisaster.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/MemoryOfDisaster/MemoryOfDisaster.java @@ -25,6 +25,7 @@ import com.l2jmobius.gameserver.ai.CtrlIntention; import com.l2jmobius.gameserver.enums.CategoryType; import com.l2jmobius.gameserver.enums.ChatType; import com.l2jmobius.gameserver.enums.Movie; +import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.actor.L2Character; @@ -48,8 +49,10 @@ import com.l2jmobius.gameserver.network.NpcStringId; import com.l2jmobius.gameserver.network.serverpackets.Earthquake; import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage; import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger; +import com.l2jmobius.gameserver.network.serverpackets.TutorialShowHtml; import com.l2jmobius.gameserver.network.serverpackets.ValidateLocation; import com.l2jmobius.gameserver.network.serverpackets.awakening.ExCallToChangeClass; +import com.l2jmobius.gameserver.taskmanager.DecayTaskManager; import instances.AbstractInstance; @@ -73,6 +76,7 @@ public final class MemoryOfDisaster extends AbstractInstance private static final int SILVERA = 19194; private static final int WIRPHY = 19195; private static final int EARTH_WYRM_TRASKEN = 19217; + private static final int SWOOP_CANNON = 19190; private static final int[] DWARVES = { 19191, @@ -97,16 +101,31 @@ public final class MemoryOfDisaster extends AbstractInstance 19214, 19215 }; + private static final int CONTROL_DARKELF_AWAKE = 33550; + private static final int[] SACRIFICED_DARK_ELF = + { + 33536, + 33538, + 33540, + 33542, + 33544, + 33546 + }; // Skills + private static final SkillHolder SWOOP_CANNON_SKILL = new SkillHolder(16023, 1); private static final SkillHolder SIEGE_GOLEM_SKILL_1 = new SkillHolder(16022, 1); private static final SkillHolder SIEGE_GOLEM_SKILL_2 = new SkillHolder(16024, 1); private static final SkillHolder PULLER_SKILL = new SkillHolder(16031, 1); + private static final SkillHolder BOUNCER_SKILL = new SkillHolder(14649, 1); private static final SkillHolder TEREDOR_TRANSPARENT_SKILL = new SkillHolder(16021, 1); private static final SkillHolder TRASKEN_SKILL_1 = new SkillHolder(14505, 1); + private static final SkillHolder TRASKEN_SKILL_2 = new SkillHolder(14337, 1); + private static final SkillHolder TRASKEN_SKILL_3 = new SkillHolder(14338, 1); + private static final SkillHolder TRASKEN_SKILL_4 = new SkillHolder(14340, 1); // Items private static final int TRANSPARENT_1HS = 15280; // Locations - private static final Location BATTLE_PORT = new Location(116063, -183167, -1460, 64960); + private static final Location BATTLE_PORT = new Location(116063, -183167, -1480, 64960); private static final Location ROGIN_MOVE = new Location(116400, -183069, -1600); private static final Location AWAKENING_GUIDE_MOVE_1 = new Location(115830, -182103, -1400); private static final Location AWAKENING_GUIDE_MOVE_2 = new Location(115955, -181387, -1624); @@ -132,6 +151,7 @@ public final class MemoryOfDisaster extends AbstractInstance new Location(116925, -180420, -1200, 46585), new Location(116656, -180461, -1240, 56363), }; + private static final Location DE_VILLAGE_START = new Location(10400, 17092, -4584, Rnd.get(65520)); // Misc private static final int FIRE_IN_DWARVEN_VILLAGE = 23120700; private static final int TEMPLATE_ID = 200; @@ -158,24 +178,38 @@ public final class MemoryOfDisaster extends AbstractInstance NpcStringId.NO_WAY4, NpcStringId.ANOTHER_ONE_OVER_THERE }; + private static final NpcStringId[] SACRIFICED_DARK_ELF_SUICIDE_MESSAGES = + { + NpcStringId.GAH_SHILEN_WHY_MUST_YOU_MAKE_US_SUFFER, + NpcStringId.SHILEN_ABANDONED_US_IT_IS_OUR_TIME_TO_DIE, + NpcStringId.WITH_OUR_SACRIFICE_WILL_WE_FULFILL_THE_PROPHECY, + NpcStringId.BLOODY_RAIN_PLAGUE_DEATH_SHE_IS_NEAR, + NpcStringId.ARHHHH, + NpcStringId.WE_OFFER_OUR_BLOOD_AS_A_SACRIFICE_SHILEN_SEE_US, + NpcStringId.WILL_DARK_ELVES_BE_FORGOTTEN_AFTER_WHAT_WE_HAVE_DONE, + NpcStringId.UNBELIEVERS_RUN_DEATH_WILL_FOLLOW_YOU, + NpcStringId.I_CURSE_OUR_BLOOD_I_DESPISE_WHAT_WE_ARE_SHILEN + }; public MemoryOfDisaster() { + super(TEMPLATE_ID); addInstanceCreatedId(TEMPLATE_ID); - addSpawnId(INVISIBLE_NPC, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, SIEGE_GOLEM, WIRPHY, SILVERA, TEREDOR_TRANSPARENT, EARTH_WYRM_TRASKEN); + addSpawnId(INVISIBLE_NPC, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, SIEGE_GOLEM, WIRPHY, SILVERA, TEREDOR_TRANSPARENT, EARTH_WYRM_TRASKEN, SWOOP_CANNON, CONTROL_DARKELF_AWAKE); addMoveFinishedId(ROGIN, SOLDIER, WIRPHY, SILVERA); addMoveFinishedId(DWARVES); - addSpellFinishedId(SIEGE_GOLEM, INVISIBLE_NPC, TEREDOR_TRANSPARENT); + addSpellFinishedId(SIEGE_GOLEM, INVISIBLE_NPC, TEREDOR_TRANSPARENT, EARTH_WYRM_TRASKEN, SWOOP_CANNON); setCreatureKillId(this::onCreatureKill, BRONK, SILVERA); setCreatureAttackedId(this::onCreatureAttacked, BRONK, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, SIEGE_GOLEM, WIRPHY, SILVERA); - setCreatureSeeId(this::onCreatureSee, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, INVISIBLE_NPC); + setCreatureSeeId(this::onCreatureSee, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, INVISIBLE_NPC, CONTROL_DARKELF_AWAKE); + addEventReceivedId(SACRIFICED_DARK_ELF); } @Override public String onSpawn(L2Npc npc) { final Instance instance = npc.getInstanceWorld(); - if (isMoDInstance(instance)) + if (isInInstance(instance)) { switch (npc.getId()) { @@ -216,7 +250,6 @@ public final class MemoryOfDisaster extends AbstractInstance } case "EVENT_C": { - // Rework me plz, I'm dying final L2Npc golem = addSpawn(npc, SIEGE_GOLEM, 116881, -180742, -1248, 1843, false, 0, false, instance.getId()); golem.setIsInvul(true); break; @@ -232,6 +265,10 @@ public final class MemoryOfDisaster extends AbstractInstance { addSkillCastDesire(npc, instance.getFirstPlayer(), PULLER_SKILL, 100000000); } + else if (npc.getVariables().getString("type", "").equals("BOUNCER")) + { + addSkillCastDesire(npc, instance.getFirstPlayer(), BOUNCER_SKILL, 100000000); + } break; } } @@ -274,7 +311,6 @@ public final class MemoryOfDisaster extends AbstractInstance case SIEGE_GOLEM: { npc.initSeenCreatures(); - for (Location loc : TEREDOR_SPAWN_LOC) { final L2Npc teredor = addSpawn(TEREDOR, loc, false, 0, false, instance.getId()); @@ -287,7 +323,6 @@ public final class MemoryOfDisaster extends AbstractInstance { npc.setIsRunning(true); addMoveToDesire(npc, WIRPHY_MOVE, 23); - npc.getInstanceWorld().getAliveNpcs(TEREDOR).stream().filter(n -> n.isScriptValue(2)).forEach(n -> addAttackDesire(n, npc)); break; } case SILVERA: @@ -298,8 +333,6 @@ public final class MemoryOfDisaster extends AbstractInstance } case TEREDOR_TRANSPARENT: { - // TODO: Check why the first doesn't work :( - addSkillCastDesire(npc, npc, TEREDOR_TRANSPARENT_SKILL, 1000000); npc.setTarget(npc); npc.doCast(TEREDOR_TRANSPARENT_SKILL.getSkill()); break; @@ -310,17 +343,29 @@ public final class MemoryOfDisaster extends AbstractInstance getTimers().addTimer("ENTER_EVENT", 5000, npc, null); break; } + case SWOOP_CANNON: + { + npc.setTarget(npc); + npc.doCast(SWOOP_CANNON_SKILL.getSkill()); + break; + } + case CONTROL_DARKELF_AWAKE: + { + npc.initSeenCreatures(); + break; + } } } return super.onSpawn(npc); } - public void onCreatureSee(OnCreatureSee event) + private void onCreatureSee(OnCreatureSee event) { final L2Character creature = event.getSeen(); final L2Npc npc = (L2Npc) event.getSeer(); final Instance world = npc.getInstanceWorld(); - if (isMoDInstance(world)) + + if (isInInstance(world)) { if (creature.isNpc()) { @@ -370,7 +415,7 @@ public final class MemoryOfDisaster extends AbstractInstance siegeGolem.setScriptValue(1); siegeGolem.abortAttack(); siegeGolem.abortCast(); - addSkillCastDesire(siegeGolem, siegeGolem, SIEGE_GOLEM_SKILL_1, 1000000); + siegeGolem.doCast(SIEGE_GOLEM_SKILL_1.getSkill()); world.getAliveNpcs(TEREDOR).stream().filter(n -> n.isScriptValue(1)).forEach(n -> getTimers().addTimer("TEREDOR_SUICIDE", 10000, n, null)); getTimers().addTimer("CHASING_TRAJAN_TIME", 5000, npc, null); getTimers().addTimer("EARTHWORM_TIME", 15000, npc, null); @@ -386,6 +431,15 @@ public final class MemoryOfDisaster extends AbstractInstance } break; } + case CONTROL_DARKELF_AWAKE: + { + getTimers().addTimer("OPENING_DE_SCENE", 1000, e -> + { + playMovie(creature.getActingPlayer(), Movie.SC_AWAKENING_OPENING_D); + getTimers().addTimer("TIMER_ID_OP_SCEN_END", 25000, npc, creature.getActingPlayer()); + }); + break; + } } } } @@ -396,24 +450,15 @@ public final class MemoryOfDisaster extends AbstractInstance { switch (event) { - case "START_AWAKENING_OPENING_SCENE": - { - playMovie(player, Movie.SC_AWAKENING_OPENING); - break; - } case "EARTHQUAKE": { player.sendPacket(new Earthquake(player.getLocation(), 50, 4)); - break; - } - case "TELEPORT_PLAYER_TO_START": - { - player.teleToLocation(BATTLE_PORT); + getTimers().addTimer("EARTHQUAKE", 10000, null, player); break; } case "END_OF_OPENING_SCENE": { - player.teleToLocation(BATTLE_PORT); + player.teleToLocation(BATTLE_PORT, player.getInstanceWorld()); getTimers().addTimer("SPAWN_ROGIN", 10000, null, player); break; } @@ -529,14 +574,17 @@ public final class MemoryOfDisaster extends AbstractInstance case "ATTACK_TIME": { final List tentacles = npc.getInstanceWorld().getAliveNpcs(TENTACLE).stream().filter(n -> n.getVariables().getBoolean("isLeaderKiller", false)).collect(Collectors.toList()); - addAttackDesire(npc, tentacles.get(Rnd.get(tentacles.size()))); + npc.getInstanceWorld().getNpcs(DWARVES).forEach(n -> addAttackDesire(n, tentacles.get(Rnd.get(tentacles.size())))); break; } case "RUN_TIME": { - npc.broadcastSay(ChatType.NPC_GENERAL, SHOUT_RUN[Rnd.get(SHOUT_RUN.length)]); - addMoveToDesire(npc, DWARVES_MOVE_1, 23); - npc.setIsRunning(true); + npc.getInstanceWorld().getNpcs(DWARVES).forEach(n -> + { + n.setIsRunning(true); + n.broadcastSay(ChatType.NPC_GENERAL, SHOUT_RUN[Rnd.get(SHOUT_RUN.length)]); + n.getAI().moveTo(DWARVES_MOVE_1); + }); break; } case "TEREDOR_SUICIDE": @@ -553,10 +601,10 @@ public final class MemoryOfDisaster extends AbstractInstance case "SECOND_PULL": { addSkillCastDesire(npc, npc.getInstanceWorld().getFirstPlayer(), PULLER_SKILL, 100000000); - getTimers().addTimer("DESPAWNER_PULLER", 3000, npc, null); + getTimers().addTimer("DESPAWN_PULLER", 3000, npc, null); break; } - case "DESPAWNER_PULLER": + case "DESPAWN_PULLER": { npc.deleteMe(); break; @@ -569,12 +617,13 @@ public final class MemoryOfDisaster extends AbstractInstance } case "EARTHWORM_TIME": { - addSpawn(npc, TEREDOR_TRANSPARENT, 116511, -178729, -1176, 43905, false, 0, false, npc.getInstanceId()); + addSpawn(npc, TEREDOR_TRANSPARENT, 116511, -178729, -1176, 58208, false, 0, false, npc.getInstanceId()); break; } case "ENTER_EVENT": { - addSkillCastDesire(npc, npc, TRASKEN_SKILL_1, 100000000); + npc.setTarget(npc); + npc.doCast(TRASKEN_SKILL_1.getSkill()); npc.getInstanceWorld().getFirstPlayer().sendPacket(new Earthquake(npc.getLocation(), 50, 4)); getTimers().addTimer("TRASKEN_UNEQUIP", 2000, npc, null); break; @@ -582,37 +631,61 @@ public final class MemoryOfDisaster extends AbstractInstance case "TRASKEN_UNEQUIP": { npc.setLHandId(0); - npc.broadcastInfo(); - getTimers().addTimer("END_VIDEO", 20000, null, npc.getInstanceWorld().getFirstPlayer()); break; } - case "END_VIDEO": + case "PC_TEL_TIME": + { + player.sendPacket(new OnEventTrigger(FIRE_IN_DWARVEN_VILLAGE, false)); + getTimers().cancelTimer("EARTHQUAKE", null, player); + player.teleToLocation(DE_VILLAGE_START, player.getInstanceWorld()); + break; + } + case "TIMER_ID_OP_SCEN_END": + { + npc.broadcastEvent("SCE_J4D_DARK_ELF_START", 8000, null); + getTimers().addTimer("TIMER_ID_END", 60000, npc, player); + break; + } + case "TIMER_ID_END": + { + playMovie(player, Movie.SC_AWAKENING_OPENING_E); + getTimers().addTimer("TIMER_ID_ED_SCEN_END", 30000, npc, player); + break; + } + case "TIMER_ID_ED_SCEN_END": { playMovie(player, Movie.SC_AWAKENING_OPENING_F); - getTimers().addTimer("END_INSTANCE", 45000, null, player); + getTimers().addTimer("TIMER_ID_FINAL_ED_SCEN_END", 10000, npc, player); break; } - case "END_INSTANCE": + case "TIMER_ID_FINAL_ED_SCEN_END": { - getTimers().cancelTimers("EARTHQUAKE"); + // myself->SetOneTimeQuestFlag(myself->c_ai0, 10491, 1); + player.sendPacket(new TutorialShowHtml(getHtm(player.getHtmlPrefix(), "calltochange_end.htm"))); finishInstance(player, 0); break; } + case "TIMER_ID_DIE": + { + npc.broadcastSay(ChatType.NPC_GENERAL, SACRIFICED_DARK_ELF_SUICIDE_MESSAGES[Rnd.get(SACRIFICED_DARK_ELF_SUICIDE_MESSAGES.length)]); + npc.doDie(npc); + DecayTaskManager.getInstance().cancel(npc); + break; + } } } @Override public void onInstanceCreated(Instance instance, L2PcInstance player) { - getTimers().addTimer("OPENING_SCENE", 500, e -> + getTimers().addTimer("OPENING_SCENE", 1000, e -> { instance.getPlayers().forEach(p -> { p.sendPacket(new OnEventTrigger(FIRE_IN_DWARVEN_VILLAGE, true)); - getTimers().addRepeatingTimer("EARTHQUAKE", 10000, null, p); - getTimers().addTimer("END_OF_OPENING_SCENE", 30000, null, p); - getTimers().addTimer("START_AWAKENING_OPENING_SCENE", 1000, null, p); - getTimers().addTimer("TELEPORT_PLAYER_TO_START", 25000, null, p); + playMovie(p, Movie.SC_AWAKENING_OPENING); + getTimers().addTimer("EARTHQUAKE", 10000, null, p); + getTimers().addTimer("END_OF_OPENING_SCENE", 32000, null, p); }); }); } @@ -679,6 +752,7 @@ public final class MemoryOfDisaster extends AbstractInstance case WIRPHY: { npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HELP_ME3); + npc.getInstanceWorld().getAliveNpcs(TEREDOR).stream().filter(n -> n.isScriptValue(2)).forEach(n -> addAttackDesire(n, npc)); break; } case SILVERA: @@ -692,7 +766,7 @@ public final class MemoryOfDisaster extends AbstractInstance private void onCreatureAttacked(OnCreatureAttacked event) { final Instance world = event.getTarget().getInstanceWorld(); - if (isMoDInstance(world)) + if (isInInstance(world)) { if (!event.getAttacker().isPlayable()) { @@ -774,6 +848,10 @@ public final class MemoryOfDisaster extends AbstractInstance if ((attackCount == 80) || (attacker.getId() == SIEGE_GOLEM)) { npc.doDie(attacker); + final L2Npc golem = world.getNpc(SIEGE_GOLEM); + golem.abortAttack(); + golem.abortCast(); + world.getNpc(SIEGE_GOLEM).getAI().moveTo(GOLEM_MOVE); } addAttackDesire(npc, attacker); } @@ -791,17 +869,14 @@ public final class MemoryOfDisaster extends AbstractInstance { npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.NO_WAY2); npc.doDie(null); - // TODO : This shit doesn't attack silvera for some reason which prevents to trigger the dwarf text - // Used some additional method such as World.getInstance().getVisibleObjects(attacker, Npc.class, n -> (n.getId() == SILVERA)) - // It found the npc but didn't worked either. - addAttackDesire(attacker, world.getNpc(SILVERA)); + attacker.doAttack(world.getNpc(SILVERA)); break; } case SILVERA: { npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.MY_GOD); npc.doDie(null); - addAttackDesire(world.getNpc(SIEGE_GOLEM), attacker); + world.getNpc(SIEGE_GOLEM).doAttack(attacker); break; } } @@ -824,10 +899,10 @@ public final class MemoryOfDisaster extends AbstractInstance { dwarf.broadcastSay(ChatType.NPC_GENERAL, SHOUT_BRONK_DEATH[Rnd.get(SHOUT_BRONK_DEATH.length)]); } - getTimers().addTimer("ATTACK_TIME", 1000, dwarf, null); - getTimers().addTimer("RUN_TIME", 10000, dwarf, null); } npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.UGH_IF_I_SEE_YOU_IN_THE_SPIRIT_WORLD_FIRST_ROUND_IS_ON_ME); + getTimers().addTimer("ATTACK_TIME", 1000, npc, null); + getTimers().addTimer("RUN_TIME", 10000, npc, null); } else if (npc.getId() == SILVERA) { @@ -838,26 +913,104 @@ public final class MemoryOfDisaster extends AbstractInstance @Override public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill) { - if ((npc.getId() == SIEGE_GOLEM) && (skill.getId() == SIEGE_GOLEM_SKILL_1.getSkillId())) + switch (npc.getId()) { - addMoveToDesire(npc, GOLEM_MOVE, 23); - npc.setIsRunning(true); - } - else if ((npc.getId() == INVISIBLE_NPC) && npc.getVariables().getString("type", "").equals("PULLER") && (skill.getId() == PULLER_SKILL.getSkillId()) && npc.isScriptValue(0)) - { - npc.teleToLocation(PULLER_TELEPORT); - getTimers().addTimer("SECOND_PULL", 2000, npc, null); - } - else if ((npc.getId() == TEREDOR_TRANSPARENT) && (skill.getId() == TEREDOR_TRANSPARENT_SKILL.getSkillId())) - { - final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId()); - invisibleNpc.getVariables().set("type", "BOUNCER"); - addSpawn(npc, EARTH_WYRM_TRASKEN, npc.getLocation(), false, npc.getInstanceId()); - npc.deleteMe(); + case SIEGE_GOLEM: + { + if (skill.getId() == SIEGE_GOLEM_SKILL_1.getSkillId()) + { + npc.setIsRunning(true); + npc.getAI().moveTo(GOLEM_MOVE); + } + break; + } + case INVISIBLE_NPC: + { + if (npc.getVariables().getString("type", "").equals("PULLER") && (skill.getId() == PULLER_SKILL.getSkillId()) && npc.isScriptValue(0)) + { + npc.teleToLocation(PULLER_TELEPORT, npc.getInstanceWorld()); + npc.setScriptValue(1); + getTimers().addTimer("SECOND_PULL", 2000, npc, null); + } + else if (npc.getVariables().getString("type", "").equals("BOUNCER") && (skill.getId() == BOUNCER_SKILL.getSkillId())) + { + npc.deleteMe(); + } + break; + } + case TEREDOR_TRANSPARENT: + { + if (skill.getId() == TEREDOR_TRANSPARENT_SKILL.getSkillId()) + { + final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId()); + invisibleNpc.getVariables().set("type", "BOUNCER"); + addSpawn(npc, EARTH_WYRM_TRASKEN, npc.getLocation(), false, npc.getInstanceId()); + npc.deleteMe(); + } + break; + } + case EARTH_WYRM_TRASKEN: + { + if (skill.getId() == TRASKEN_SKILL_1.getSkillId()) + { + playMovie(npc.getInstanceWorld().getFirstPlayer(), Movie.SC_AWAKENING_OPENING_C); + npc.setTarget(npc.getInstanceWorld().getNpc(SIEGE_GOLEM)); + npc.doCast(TRASKEN_SKILL_2.getSkill()); + getTimers().addTimer("PC_TEL_TIME", 23000, npc, npc.getInstanceWorld().getFirstPlayer()); + } + else if (skill.getId() == TRASKEN_SKILL_2.getSkillId()) + { + if (npc.isScriptValue(0)) + { + npc.getInstanceWorld().getNpc(SIEGE_GOLEM).doDie(npc); + final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId()); + invisibleNpc.getVariables().set("type", "BOUNCER"); + } + npc.setTarget(npc); + npc.doCast(TRASKEN_SKILL_4.getSkill()); + } + else if (skill.getId() == TRASKEN_SKILL_4.getSkillId()) + { + npc.setTarget(npc); + npc.doCast(TRASKEN_SKILL_3.getSkill()); + if (npc.isScriptValue(0)) + { + final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId()); + invisibleNpc.getVariables().set("type", "BOUNCER"); + npc.setScriptValue(1); + } + } + else if (skill.getId() == TRASKEN_SKILL_3.getSkillId()) + { + npc.setTarget(npc); + npc.doCast(TRASKEN_SKILL_2.getSkill()); + } + break; + } + case SWOOP_CANNON: + { + npc.setTarget(npc); + npc.doCast(SWOOP_CANNON_SKILL.getSkill()); + break; + } } return super.onSpellFinished(npc, player, skill); } + @Override + public String onEventReceived(String event, L2Npc sender, L2Npc receiver, L2Object reference) + { + final Instance instance = receiver.getInstanceWorld(); + if (isInInstance(instance)) + { + if (event.equals("SCE_J4D_DARK_ELF_START")) + { + getTimers().addTimer("TIMER_ID_DIE", Rnd.get(60000) + 5000, receiver, null); + } + } + return super.onEventReceived(event, sender, receiver, reference); + } + @RegisterEvent(EventType.ON_PLAYER_CALL_TO_CHANGE_CLASS) @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) public void onPlayerCallToChangeClass(OnPlayerCallToChangeClass event) @@ -895,11 +1048,6 @@ public final class MemoryOfDisaster extends AbstractInstance } } - private boolean isMoDInstance(Instance instance) - { - return (instance != null) && (instance.getTemplateId() == TEMPLATE_ID); - } - public static void main(String[] args) { new MemoryOfDisaster(); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/MemoryOfDisaster/calltochange_end.htm b/L2J_Mobius_Underground/dist/game/data/scripts/instances/MemoryOfDisaster/calltochange_end.htm new file mode 100644 index 0000000000..790a2ac2fd --- /dev/null +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/MemoryOfDisaster/calltochange_end.htm @@ -0,0 +1,7 @@ +Hermuncus Call:
+My faithful servant Cellphine is waiting to guide you to your fate of Awakening. +To find Cellphine, go to the Museum, the largest building at Southern most part of Talking Island Village. +Speak to the Pantheon to enter the Museum and find Cellphine inside.
+Follow Cellphine's instructions to answer my call.
+ + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/MithrilMine/MithrilMine.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/MithrilMine/MithrilMine.java index b9078982c2..af8d5a5b97 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/MithrilMine/MithrilMine.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/MithrilMine/MithrilMine.java @@ -53,6 +53,7 @@ public final class MithrilMine extends AbstractInstance public MithrilMine() { + super(TEMPLATE_ID); addFirstTalkId(KEGOR); addKillId(KEGOR, MITHRIL_MILLIPEDE); addStartNpc(TARUN, KRUN); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/MuseumDungeon/MuseumDungeon.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/MuseumDungeon/MuseumDungeon.java index 5c18c7e89c..00c7ec8544 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/MuseumDungeon/MuseumDungeon.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/MuseumDungeon/MuseumDungeon.java @@ -61,6 +61,7 @@ public final class MuseumDungeon extends AbstractInstance public MuseumDungeon() { + super(TEMPLATE_ID); addStartNpc(PANTHEON); addFirstTalkId(DESK); addTalkId(PANTHEON, TOYRON); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/NightmareKamaloka.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/NightmareKamaloka.java index b04b379716..b95c8bc0c2 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/NightmareKamaloka.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/NightmareKamaloka.java @@ -55,6 +55,7 @@ public final class NightmareKamaloka extends AbstractInstance public NightmareKamaloka() { + super(TEMPLATE_ID); addStartNpc(KURTIZ); addTalkId(KURTIZ); addSpawnId(INVISIBLE_NPC); @@ -66,7 +67,7 @@ public final class NightmareKamaloka extends AbstractInstance public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player) { final Instance instance = npc.getInstanceWorld(); - if (isNightmareKamalokaInstance(instance)) + if (isInInstance(instance)) { switch (event) { @@ -93,7 +94,7 @@ public final class NightmareKamaloka extends AbstractInstance public String onSpawn(L2Npc npc) { final Instance instance = npc.getInstanceWorld(); - if (isNightmareKamalokaInstance(instance)) + if (isInInstance(instance)) { if (npc.getId() == INVISIBLE_NPC) { @@ -107,7 +108,7 @@ public final class NightmareKamaloka extends AbstractInstance public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final Instance instance = npc.getInstanceWorld(); - if (isNightmareKamalokaInstance(instance)) + if (isInInstance(instance)) { final int nextDoorId = BOSS_MAP.getOrDefault(npc.getId(), -1); if (nextDoorId == -1) @@ -126,7 +127,7 @@ public final class NightmareKamaloka extends AbstractInstance public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon) { final Instance instance = npc.getInstanceWorld(); - if (isNightmareKamalokaInstance(instance)) + if (isInInstance(instance)) { if (npc.getId() == DARK_RIDER_UD) { @@ -155,11 +156,6 @@ public final class NightmareKamaloka extends AbstractInstance return super.onAttack(npc, attacker, damage, isSummon); } - private boolean isNightmareKamalokaInstance(Instance instance) - { - return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID)); - } - public static void main(String[] args) { new NightmareKamaloka(); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/condNoPartyLeader.htm b/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/condNoPartyLeader.htm deleted file mode 100644 index a0ce38d0c6..0000000000 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/condNoPartyLeader.htm +++ /dev/null @@ -1,4 +0,0 @@ -Kurtiz
-Aren't you in a party? But you are not the party leader.
-(Only the party leader can request to enter.) - \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/condNoPartyLeader.html b/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/condNoPartyLeader.html new file mode 100644 index 0000000000..8332ff8979 --- /dev/null +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/NightmareKamaloka/condNoPartyLeader.html @@ -0,0 +1,4 @@ +Kurtiz
+Aren't you in a party? But you are not the party leader.
+(Only the party leader can request to enter.) + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/Nursery/Nursery.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/Nursery/Nursery.java index 55a02b5a78..24299d102e 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/Nursery/Nursery.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/Nursery/Nursery.java @@ -69,6 +69,7 @@ public final class Nursery extends AbstractInstance public Nursery() { + super(TEMPLATE_ID); addStartNpc(TIE); addFirstTalkId(TIE); addTalkId(TIE); @@ -82,7 +83,7 @@ public final class Nursery extends AbstractInstance public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player) { final Instance instance = npc.getInstanceWorld(); - if (isNurseryInstance(instance)) + if (isInInstance(instance)) { final StatsSet npcVars = npc.getVariables(); final int gameStage = npcVars.getInt("GAME_STAGE", 0); @@ -139,7 +140,7 @@ public final class Nursery extends AbstractInstance final Instance instance = npc.getInstanceWorld(); String htmltext = null; - if (isNurseryInstance(instance)) + if (isInInstance(instance)) { final StatsSet npcVars = npc.getVariables(); @@ -191,7 +192,7 @@ public final class Nursery extends AbstractInstance public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { final Instance instance = npc.getInstanceWorld(); - if (isNurseryInstance(instance)) + if (isInInstance(instance)) { final StatsSet npcVars = npc.getVariables(); final int gameStage = npcVars.getInt("GAME_STAGE", 0); @@ -272,7 +273,7 @@ public final class Nursery extends AbstractInstance public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon) { final Instance instance = npc.getInstanceWorld(); - if (isNurseryInstance(instance)) + if (isInInstance(instance)) { final StatsSet npcVars = npc.getVariables(); final int maguenStatus = npcVars.getInt("MAGUEN_STATUS", 0); @@ -316,7 +317,7 @@ public final class Nursery extends AbstractInstance public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final Instance instance = npc.getInstanceWorld(); - if (isNurseryInstance(instance)) + if (isInInstance(instance)) { if (getRandom(100) < 6) { @@ -389,7 +390,7 @@ public final class Nursery extends AbstractInstance public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill) { final Instance instance = npc.getInstanceWorld(); - if (isNurseryInstance(instance)) + if (isInInstance(instance)) { final L2Npc gameManager = instance.getNpc(TIE); if (gameManager != null) @@ -458,11 +459,6 @@ public final class Nursery extends AbstractInstance return super.onEnterZone(character, zone); } - private boolean isNurseryInstance(Instance instance) - { - return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID)); - } - public static void main(String[] args) { new Nursery(); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/OctavisWarzone/OctavisWarzone.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/OctavisWarzone/OctavisWarzone.java index 346be4dd6c..5eff40f7aa 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/OctavisWarzone/OctavisWarzone.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/OctavisWarzone/OctavisWarzone.java @@ -105,6 +105,7 @@ public final class OctavisWarzone extends AbstractInstance public OctavisWarzone() { + super(TEMPLATE_ID, EXTREME_TEMPLATE_ID); addStartNpc(LYDIA); addTalkId(LYDIA); addSpawnId(DOOR_MANAGER); @@ -140,7 +141,7 @@ public final class OctavisWarzone extends AbstractInstance case "reenterInstance": { final Instance activeInstance = getPlayerInstance(player); - if (isOctavisInstance(activeInstance)) + if (isInInstance(activeInstance)) { enterInstance(player, npc, activeInstance.getTemplateId()); return "PartyMemberReenter.html"; @@ -154,7 +155,7 @@ public final class OctavisWarzone extends AbstractInstance public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player) { final Instance world = npc.getInstanceWorld(); - if (isOctavisInstance(world)) + if (isInInstance(world)) { final StatsSet npcVars = npc.getVariables(); final StatsSet npcParams = npc.getParameters(); @@ -350,7 +351,7 @@ public final class OctavisWarzone extends AbstractInstance public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon) { final Instance world = npc.getInstanceWorld(); - if (isOctavisInstance(world)) + if (isInInstance(world)) { final int hpPer = npc.getCurrentHpPercent(); @@ -421,7 +422,7 @@ public final class OctavisWarzone extends AbstractInstance public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final Instance world = npc.getInstanceWorld(); - if (isOctavisInstance(world)) + if (isInInstance(world)) { if (CommonUtil.contains(OCTAVIS_STAGE_1, npc.getId())) { @@ -463,7 +464,7 @@ public final class OctavisWarzone extends AbstractInstance @Override public void onInstanceCreated(Instance instance, L2PcInstance player) { - if ((player != null) && isOctavisInstance(instance)) + if ((player != null) && isInInstance(instance)) { showHtmlFile(player, (instance.getTemplateId() == TEMPLATE_ID) ? "PartyEnterCommon.html" : "PartyEnterExtreme.html"); } @@ -473,7 +474,7 @@ public final class OctavisWarzone extends AbstractInstance public String onSpawn(L2Npc npc) { final Instance world = npc.getInstanceWorld(); - if (isOctavisInstance(world)) + if (isInInstance(world)) { if (CommonUtil.contains(GLADIATORS, npc.getId())) { @@ -490,7 +491,7 @@ public final class OctavisWarzone extends AbstractInstance public void onMoveFinished(L2Npc npc) { final Instance world = npc.getInstanceWorld(); - if (isOctavisInstance(world)) + if (isInInstance(world)) { world.openCloseDoor(npc.getParameters().getInt("My_DoorName", -1), false); } @@ -512,7 +513,7 @@ public final class OctavisWarzone extends AbstractInstance final L2Npc npc = (L2Npc) event.getSeer(); final Instance world = npc.getInstanceWorld(); - if (isOctavisInstance(world) && creature.isPlayer() && npc.isScriptValue(0)) + if (isInInstance(world) && creature.isPlayer() && npc.isScriptValue(0)) { world.openCloseDoor(MAIN_DOOR_1, true); getTimers().addTimer("SECOND_DOOR_OPEN", 3000, npc, null); @@ -525,7 +526,7 @@ public final class OctavisWarzone extends AbstractInstance public String onEnterZone(L2Character character, L2ZoneType zone) { final Instance world = character.getInstanceWorld(); - if (character.isPlayer() && isOctavisInstance(world)) + if (character.isPlayer() && isInInstance(world)) { if (world.getParameters().getBoolean("TELEPORT_ACTIVE", false)) { @@ -535,11 +536,6 @@ public final class OctavisWarzone extends AbstractInstance return super.onEnterZone(character, zone); } - private boolean isOctavisInstance(Instance instance) - { - return ((instance != null) && ((instance.getTemplateId() == TEMPLATE_ID) || (instance.getTemplateId() == EXTREME_TEMPLATE_ID))); - } - private boolean isExtremeMode(Instance instance) { return instance.getTemplateId() == EXTREME_TEMPLATE_ID; diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaDevilsLegacy/PailakaDevilsLegacy.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaDevilsLegacy/PailakaDevilsLegacy.java index 8775d38d2c..2e91b4c520 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaDevilsLegacy/PailakaDevilsLegacy.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaDevilsLegacy/PailakaDevilsLegacy.java @@ -71,6 +71,7 @@ public final class PailakaDevilsLegacy extends AbstractInstance public PailakaDevilsLegacy() { + super(TEMPLATE_ID); addTalkId(SURVIVOR); addAttackId(POWDER_KEG, TREASURE_BOX, LEMATAN); addKillId(LEMATAN); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaInjuredDragon/PailakaInjuredDragon.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaInjuredDragon/PailakaInjuredDragon.java index 7a2c317efe..1aeca355da 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaInjuredDragon/PailakaInjuredDragon.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaInjuredDragon/PailakaInjuredDragon.java @@ -84,6 +84,7 @@ public class PailakaInjuredDragon extends AbstractInstance public PailakaInjuredDragon() { + super(TEMPLATE_ID); addInstanceEnterId(TEMPLATE_ID); addStartNpc(KETRA_ORC_SHAMAN); addKillId(ANTELOPE1, ANTELOPE2, ANTELOPE3, GENERAL, GREAT_MAGUS, PROPHET, ELITE_GUARD, COMMANDER, OFFICER, RECRUIT, FOOTMAN, WARRIOR, PROPHET_GUARD, HEAD_GUARD, SHAMAN, CHIEF_PRIEST, GRAND_PRIEST, LATANA); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaRuneCastle/PailakaRuneCastle.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaRuneCastle/PailakaRuneCastle.java index f9e58d2a0e..cceeeb355e 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaRuneCastle/PailakaRuneCastle.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaRuneCastle/PailakaRuneCastle.java @@ -96,6 +96,7 @@ public final class PailakaRuneCastle extends AbstractInstance public PailakaRuneCastle() { + super(MANAGERS.values().stream().mapToInt(Integer::valueOf).toArray()); addFirstTalkId(VICTIMS); addTalkId(VICTIMS); addTalkId(MANAGERS.keySet()); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaSongOfIceAndFire/PailakaSongOfIceAndFire.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaSongOfIceAndFire/PailakaSongOfIceAndFire.java index 81f73f92ce..f9e90709e2 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaSongOfIceAndFire/PailakaSongOfIceAndFire.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/PailakaSongOfIceAndFire/PailakaSongOfIceAndFire.java @@ -52,6 +52,7 @@ public final class PailakaSongOfIceAndFire extends AbstractInstance public PailakaSongOfIceAndFire() { + super(TEMPLATE_ID); addStartNpc(ADLER1); addTalkId(ADLER1); addAttackId(BOTTLE, BRAZIER); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQDisciplesNecropolisPast/SSQDisciplesNecropolisPast.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQDisciplesNecropolisPast/SSQDisciplesNecropolisPast.java index 04f72052df..45610ed536 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQDisciplesNecropolisPast/SSQDisciplesNecropolisPast.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQDisciplesNecropolisPast/SSQDisciplesNecropolisPast.java @@ -110,6 +110,7 @@ public final class SSQDisciplesNecropolisPast extends AbstractInstance public SSQDisciplesNecropolisPast() { + super(TEMPLATE_ID); addAttackId(SEAL_DEVICE); addFirstTalkId(SHUNAIMAN, LEON, DISCIPLES_GATEKEEPER); addKillId(LILIM_BUTCHER, LILIM_MAGUS, LILIM_KNIGHT_ERRANT, LILIM_KNIGHT, SHILENS_EVIL_THOUGHTS1, SHILENS_EVIL_THOUGHTS2, LILIM_SLAYER, LILIM_GREAT_MAGUS, LILIM_GUARD_KNIGHT); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQElcadiasTent/SSQElcadiasTent.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQElcadiasTent/SSQElcadiasTent.java index b06b837222..206a0bd174 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQElcadiasTent/SSQElcadiasTent.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQElcadiasTent/SSQElcadiasTent.java @@ -40,6 +40,7 @@ public final class SSQElcadiasTent extends AbstractInstance public SSQElcadiasTent() { + super(TEMPLATE_ID); addFirstTalkId(GRUFF_LOOKING_MAN, ELCADIA); addStartNpc(GRUFF_LOOKING_MAN, ELCADIA); addTalkId(GRUFF_LOOKING_MAN, ELCADIA); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQHideoutOfTheDawn/SSQHideoutOfTheDawn.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQHideoutOfTheDawn/SSQHideoutOfTheDawn.java index da8ab7b89e..604c4c74fc 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQHideoutOfTheDawn/SSQHideoutOfTheDawn.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQHideoutOfTheDawn/SSQHideoutOfTheDawn.java @@ -35,6 +35,7 @@ public final class SSQHideoutOfTheDawn extends AbstractInstance public SSQHideoutOfTheDawn() { + super(TEMPLATE_ID); addStartNpc(WOOD); addTalkId(WOOD, JAINA); } diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQLibraryOfSages/SSQLibraryOfSages.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQLibraryOfSages/SSQLibraryOfSages.java index 478a489ee0..edce534b9e 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQLibraryOfSages/SSQLibraryOfSages.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQLibraryOfSages/SSQLibraryOfSages.java @@ -56,6 +56,7 @@ public final class SSQLibraryOfSages extends AbstractInstance public SSQLibraryOfSages() { + super(TEMPLATE_ID); addFirstTalkId(SOPHIA2, ELCADIA_INSTANCE, PILE_OF_BOOKS1, PILE_OF_BOOKS2, PILE_OF_BOOKS3, PILE_OF_BOOKS4, PILE_OF_BOOKS5); addStartNpc(SOPHIA1, SOPHIA2, SOPHIA3); addTalkId(SOPHIA1, SOPHIA2, SOPHIA3); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQMonasteryOfSilence/SSQMonasteryOfSilence.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQMonasteryOfSilence/SSQMonasteryOfSilence.java index 537295d626..4c367e0595 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQMonasteryOfSilence/SSQMonasteryOfSilence.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQMonasteryOfSilence/SSQMonasteryOfSilence.java @@ -72,6 +72,7 @@ public final class SSQMonasteryOfSilence extends AbstractInstance public SSQMonasteryOfSilence() { + super(TEMPLATE_ID); addFirstTalkId(TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS); addStartNpc(ODD_GLOBE, TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS); addTalkId(ODD_GLOBE, ERIS_EVIL_THOUGHTS, RELIC_GUARDIAN, RELIC_WATCHER1, RELIC_WATCHER2, RELIC_WATCHER3, RELIC_WATCHER4, TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQSanctumOftheLordsOfDawn/SSQSanctumOftheLordsOfDawn.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQSanctumOftheLordsOfDawn/SSQSanctumOftheLordsOfDawn.java index 09431f2d4e..b0268a163c 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQSanctumOftheLordsOfDawn/SSQSanctumOftheLordsOfDawn.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SSQSanctumOftheLordsOfDawn/SSQSanctumOftheLordsOfDawn.java @@ -67,6 +67,7 @@ public final class SSQSanctumOftheLordsOfDawn extends AbstractInstance public SSQSanctumOftheLordsOfDawn() { + super(TEMPLATE_ID); addStartNpc(LIGHT_OF_DAWN); addTalkId(LIGHT_OF_DAWN, IDENTITY_CONFIRM_DEVICE, PASSWORD_ENTRY_DEVICE, DARKNESS_OF_DAWN, SHELF); addAggroRangeEnterId(GUARDS_OF_THE_DAWN, GUARDS_OF_THE_DAWN_2, GUARDS_OF_THE_DAWN_3); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java index 2233c74d0f..3e42c3774e 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java @@ -182,11 +182,12 @@ public final class Stage1 extends AbstractInstance implements IGameXmlReader // Zone private static final int VIDEO_ZONE = 60010; // Misc - private static final int INSTANCEID = 110; // this is the client number + private static final int TEMPLATE_ID = 110; // this is the client number private static final int MAX_DEVICESPAWNEDMOBCOUNT = 100; // prevent too much mob spawn public Stage1() { + super(TEMPLATE_ID); load(); addStartNpc(ALENOS, TELEPORT); addTalkId(ALENOS, TELEPORT); @@ -198,7 +199,7 @@ public final class Stage1 extends AbstractInstance implements IGameXmlReader addTrapActionId(i); } addEnterZoneId(VIDEO_ZONE); - addInstanceCreatedId(INSTANCEID); + addInstanceCreatedId(TEMPLATE_ID); addDespawnId(SPAWN_DEVICE); } @@ -648,7 +649,7 @@ public final class Stage1 extends AbstractInstance implements IGameXmlReader final int state = GraciaSeedsManager.getInstance().getSoDState(); if (state == 1) { - enterInstance(player, npc, INSTANCEID); + enterInstance(player, npc, TEMPLATE_ID); } else if (state == 2) { diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/TaintedDimension/TaintedDimension.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/TaintedDimension/TaintedDimension.java index ab224c0f2e..93b54986f4 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/TaintedDimension/TaintedDimension.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/TaintedDimension/TaintedDimension.java @@ -90,6 +90,7 @@ public final class TaintedDimension extends AbstractInstance public TaintedDimension() { + super(TEMPLATE_ID); addSpawnId(CORPSES); addSpawnId(MYSTERIOUS_PRIEST, HUMAN_1, HUMAN_2, HUMAN_3, HUMAN_4, MONSTER_1, MONSTER_2); addEventReceivedId(WARD, MYSTERIOUS_PRIEST); @@ -99,7 +100,7 @@ public final class TaintedDimension extends AbstractInstance public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player) { final Instance instance = npc.getInstanceWorld(); - if (isTainedDimensionInstance(instance)) + if (isInInstance(instance)) { switch (event) { @@ -208,7 +209,7 @@ public final class TaintedDimension extends AbstractInstance public String onSpawn(L2Npc npc) { final Instance instance = npc.getInstanceWorld(); - if (isTainedDimensionInstance(instance)) + if (isInInstance(instance)) { switch (npc.getId()) { @@ -267,7 +268,7 @@ public final class TaintedDimension extends AbstractInstance public String onEventReceived(String event, L2Npc sender, L2Npc receiver, L2Object reference) { final Instance instance = receiver.getInstanceWorld(); - if (isTainedDimensionInstance(instance)) + if (isInInstance(instance)) { switch (receiver.getId()) { @@ -309,11 +310,6 @@ public final class TaintedDimension extends AbstractInstance return super.onEventReceived(event, sender, receiver, reference); } - private boolean isTainedDimensionInstance(Instance instance) - { - return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID)); - } - public static void main(String[] args) { new TaintedDimension(); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/TalkingIslandPast/TalkingIslandPast.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/TalkingIslandPast/TalkingIslandPast.java index fc9532bb7c..5f30cb8a76 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/TalkingIslandPast/TalkingIslandPast.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/TalkingIslandPast/TalkingIslandPast.java @@ -53,6 +53,7 @@ public final class TalkingIslandPast extends AbstractInstance public TalkingIslandPast() { + super(TEMPLATE_ID); addTalkId(DARIN, ROXXY, MYSTERIOUS_DARK_KNIGHT); addFirstTalkId(DARIN, ROXXY, MYSTERIOUS_DARK_KNIGHT); addExitZoneId(TALKING_ISLAND_ZONE); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/TautiWarzone/TautiWarzone.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/TautiWarzone/TautiWarzone.java index 3829227c59..5aa1bf008f 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/TautiWarzone/TautiWarzone.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/TautiWarzone/TautiWarzone.java @@ -53,6 +53,7 @@ public final class TautiWarzone extends AbstractInstance public TautiWarzone() { + super(TEMPLATE_ID, EXTREME_TEMPLATE_ID); addTalkId(FINARIA, TELEPORTER); addFirstTalkId(FINARIA, TELEPORTER); addAttackId(TAUTI_COMMON, TAUTI_EXTREME); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/instances/TeredorWarzone/TeredorWarzone.java b/L2J_Mobius_Underground/dist/game/data/scripts/instances/TeredorWarzone/TeredorWarzone.java index d9f2c0a6ff..dc5e28d9e0 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/instances/TeredorWarzone/TeredorWarzone.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/instances/TeredorWarzone/TeredorWarzone.java @@ -85,6 +85,7 @@ public final class TeredorWarzone extends AbstractInstance public TeredorWarzone() { + super(TEMPLATE_ID); addStartNpc(FILAUR); addTalkId(FILAUR); addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR); @@ -99,7 +100,7 @@ public final class TeredorWarzone extends AbstractInstance public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player) { final Instance instance = npc.getInstanceWorld(); - if (isTeredorInstance(instance)) + if (isInInstance(instance)) { final StatsSet npcVars = npc.getVariables(); final StatsSet npcParams = npc.getParameters(); @@ -192,7 +193,7 @@ public final class TeredorWarzone extends AbstractInstance public String onSpawn(L2Npc npc) { final Instance instance = npc.getInstanceWorld(); - if (isTeredorInstance(instance)) + if (isInInstance(instance)) { final StatsSet npcParams = npc.getParameters(); @@ -239,7 +240,7 @@ public final class TeredorWarzone extends AbstractInstance final L2Npc npc = (L2Npc) event.getSeer(); final Instance instance = npc.getInstanceWorld(); - if (isTeredorInstance(instance)) + if (isInInstance(instance)) { final StatsSet npcParams = npc.getParameters(); @@ -330,7 +331,7 @@ public final class TeredorWarzone extends AbstractInstance public String onEventReceived(String eventName, L2Npc sender, L2Npc npc, L2Object reference) { final Instance instance = npc.getInstanceWorld(); - if (isTeredorInstance(instance)) + if (isInInstance(instance)) { switch (npc.getId()) { @@ -407,7 +408,7 @@ public final class TeredorWarzone extends AbstractInstance public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill) { final Instance instance = npc.getInstanceWorld(); - if (isTeredorInstance(instance)) + if (isInInstance(instance)) { switch (npc.getId()) { @@ -574,7 +575,7 @@ public final class TeredorWarzone extends AbstractInstance public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) { final Instance instance = npc.getInstanceWorld(); - if (isTeredorInstance(instance)) + if (isInInstance(instance)) { switch (npc.getId()) { @@ -602,7 +603,7 @@ public final class TeredorWarzone extends AbstractInstance public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill) { final Instance instance = npc.getInstanceWorld(); - if (isTeredorInstance(instance)) + if (isInInstance(instance)) { switch (npc.getId()) { @@ -616,11 +617,6 @@ public final class TeredorWarzone extends AbstractInstance return super.onSpellFinished(npc, player, skill); } - private boolean isTeredorInstance(Instance instance) - { - return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID)); - } - public static void main(String[] args) { new TeredorWarzone(); diff --git a/L2J_Mobius_Underground/dist/game/data/scripts/quests/Q10322_SearchingForTheMysteriousPower/Q10322_SearchingForTheMysteriousPower.java b/L2J_Mobius_Underground/dist/game/data/scripts/quests/Q10322_SearchingForTheMysteriousPower/Q10322_SearchingForTheMysteriousPower.java index bf7d7045bb..8f82d58a94 100644 --- a/L2J_Mobius_Underground/dist/game/data/scripts/quests/Q10322_SearchingForTheMysteriousPower/Q10322_SearchingForTheMysteriousPower.java +++ b/L2J_Mobius_Underground/dist/game/data/scripts/quests/Q10322_SearchingForTheMysteriousPower/Q10322_SearchingForTheMysteriousPower.java @@ -118,7 +118,7 @@ public final class Q10322_SearchingForTheMysteriousPower extends Quest npc.setTarget(player); for (SkillHolder holder : buffs) { - npc.doCast(holder.getSkill()); + holder.getSkill().applyEffects(npc, player); } } player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\QT_002_Guide_01.htm", TutorialShowHtml.LARGE_WINDOW)); diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/2ndClass/Destroyer.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/2ndClass/Destroyer.xml index a2e7fd0550..7d256d6209 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/2ndClass/Destroyer.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/2ndClass/Destroyer.xml @@ -258,6 +258,7 @@ + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Doombringer.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Doombringer.xml index 008b60457c..dc8e223e72 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Doombringer.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Doombringer.xml @@ -1,6 +1,8 @@ + + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Dreadnought.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Dreadnought.xml index bbe565f672..ebeb158492 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Dreadnought.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Dreadnought.xml @@ -1,6 +1,9 @@ + + + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Duelist.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Duelist.xml index 8a5e55bbc3..ffcf8ee24a 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Duelist.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/Duelist.xml @@ -1,6 +1,9 @@ + + + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/GrandKhavatari.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/GrandKhavatari.xml index 1541f1cf26..42f09e33ac 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/GrandKhavatari.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/GrandKhavatari.xml @@ -1,6 +1,8 @@ + + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/PhoenixKnight.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/PhoenixKnight.xml index f81d8c04c6..7c0fda033d 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/PhoenixKnight.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/PhoenixKnight.xml @@ -1,6 +1,8 @@ + + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/ShillienTemplar.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/ShillienTemplar.xml index a5a65047ab..7b5d4e9518 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/ShillienTemplar.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/3rdClass/ShillienTemplar.xml @@ -1,6 +1,8 @@ + + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssDominator.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssDominator.xml index f4286d6918..5abe5b21a7 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssDominator.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssDominator.xml @@ -335,9 +335,7 @@ - - - + @@ -418,12 +416,10 @@ - - @@ -446,7 +442,6 @@ - @@ -472,7 +467,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssDoomcryer.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssDoomcryer.xml index bb8a4a2da0..b7cfac81d1 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssDoomcryer.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssDoomcryer.xml @@ -5,7 +5,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssSpectralDancer.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssSpectralDancer.xml index 7d87499afc..8854576a8e 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssSpectralDancer.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/IssSpectralDancer.xml @@ -136,7 +136,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnArcanaLord.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnArcanaLord.xml index 8b8f0a77ac..102243f11b 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnArcanaLord.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnArcanaLord.xml @@ -259,6 +259,7 @@ + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnElementalMaster.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnElementalMaster.xml index f286d73dcb..9f7d9b98ed 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnElementalMaster.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnElementalMaster.xml @@ -259,6 +259,7 @@ + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnSpectralMaster.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnSpectralMaster.xml index 1365a60f2a..f54e1a0976 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnSpectralMaster.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/4rthClass/WynnSpectralMaster.xml @@ -259,6 +259,7 @@ + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/Commons.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/Commons.xml index 034697d52d..26e6642967 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/Commons.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/Commons.xml @@ -34,7 +34,7 @@ - + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/ErtheiaClass/CloudBreaker.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/ErtheiaClass/CloudBreaker.xml index a9e9b75b27..a595350d69 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/ErtheiaClass/CloudBreaker.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/ErtheiaClass/CloudBreaker.xml @@ -35,8 +35,8 @@ - - + + diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/StartingClass/DwarvenFighter.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/StartingClass/DwarvenFighter.xml index b617eaf6f2..2954136e2d 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/StartingClass/DwarvenFighter.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/StartingClass/DwarvenFighter.xml @@ -1,16 +1,17 @@ + + + + - - - diff --git a/L2J_Mobius_Underground/dist/game/data/skillTrees/raceSkillTree.xml b/L2J_Mobius_Underground/dist/game/data/skillTrees/raceSkillTree.xml index 12e1c6e9f0..6305868900 100644 --- a/L2J_Mobius_Underground/dist/game/data/skillTrees/raceSkillTree.xml +++ b/L2J_Mobius_Underground/dist/game/data/skillTrees/raceSkillTree.xml @@ -24,6 +24,7 @@ + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-01.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-01.xml index d09e3c2bd5..d7285d272a 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-01.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-01.xml @@ -2,7 +2,8 @@ - + + @@ -10,7 +11,8 @@ - + + @@ -18,7 +20,8 @@ - + + @@ -26,7 +29,8 @@ - + + @@ -34,7 +38,8 @@ - + + @@ -42,7 +47,8 @@ - + + @@ -50,7 +56,8 @@ - + + @@ -58,7 +65,8 @@ - + + @@ -66,7 +74,8 @@ - + + @@ -74,7 +83,8 @@ - + + @@ -82,7 +92,8 @@ - + + @@ -90,7 +101,8 @@ - + + @@ -98,7 +110,8 @@ - + + @@ -106,7 +119,8 @@ - + + @@ -114,7 +128,8 @@ - + + @@ -122,7 +137,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-02.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-02.xml index ebf5b92aa8..3647728e49 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-02.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-02.xml @@ -2,7 +2,8 @@ - + + @@ -10,7 +11,8 @@ - + + @@ -18,7 +20,8 @@ - + + @@ -26,7 +29,8 @@ - + + @@ -34,7 +38,8 @@ - + + @@ -42,7 +47,8 @@ - + + @@ -50,7 +56,8 @@ - + + @@ -58,7 +65,8 @@ - + + @@ -66,7 +74,8 @@ - + + @@ -74,7 +83,8 @@ - + + @@ -82,7 +92,8 @@ - + + @@ -90,7 +101,8 @@ - + + @@ -98,7 +110,8 @@ - + + @@ -106,7 +119,8 @@ - + + @@ -114,7 +128,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-04.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-04.xml index b22b42af7a..3701ae8901 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-04.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-04.xml @@ -2,7 +2,8 @@ - + + @@ -10,7 +11,8 @@ - + + @@ -18,7 +20,8 @@ - + + @@ -26,7 +29,8 @@ - + + @@ -34,7 +38,8 @@ - + + @@ -42,7 +47,8 @@ - + + @@ -50,7 +56,8 @@ - + + @@ -58,7 +65,8 @@ - + + @@ -66,7 +74,8 @@ - + + @@ -74,7 +83,8 @@ - + + @@ -82,7 +92,8 @@ - + + @@ -90,7 +101,8 @@ - + + @@ -98,7 +110,8 @@ - + + @@ -106,7 +119,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-05.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-05.xml index 701f4faf87..d97413b6cf 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-05.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-05.xml @@ -2,7 +2,8 @@ - + + @@ -12,7 +13,8 @@ - + + @@ -22,7 +24,8 @@ - + + @@ -32,7 +35,8 @@ - + + @@ -42,7 +46,8 @@ - + + @@ -52,7 +57,8 @@ - + + @@ -62,7 +68,8 @@ - + + @@ -72,7 +79,8 @@ - + + @@ -82,7 +90,8 @@ - + + @@ -92,7 +101,8 @@ - + + @@ -102,7 +112,8 @@ - + + @@ -112,7 +123,8 @@ - + + @@ -122,7 +134,8 @@ - + + @@ -132,7 +145,8 @@ - + + @@ -142,7 +156,8 @@ - + + @@ -152,7 +167,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-06.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-06.xml index 441ee1e633..3677215205 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-06.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-06.xml @@ -2,7 +2,8 @@ - + + @@ -10,7 +11,8 @@ - + + @@ -18,7 +20,8 @@ - + + @@ -26,7 +29,8 @@ - + + @@ -34,7 +38,8 @@ - + + @@ -42,7 +47,8 @@ - + + @@ -50,7 +56,8 @@ - + + @@ -58,7 +65,8 @@ - + + @@ -66,7 +74,8 @@ - + + @@ -74,7 +83,8 @@ - + + @@ -82,7 +92,8 @@ - + + @@ -90,7 +101,8 @@ - + + @@ -98,7 +110,8 @@ - + + @@ -106,7 +119,8 @@ - + + @@ -114,7 +128,8 @@ - + + @@ -122,7 +137,8 @@ - + + @@ -130,7 +146,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-07.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-07.xml index 11b179a710..3fe1c44c04 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-07.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-07.xml @@ -2,7 +2,8 @@ - + + @@ -10,7 +11,8 @@ - + + @@ -18,7 +20,8 @@ - + + @@ -26,7 +29,8 @@ - + + @@ -34,7 +38,8 @@ - + + @@ -42,7 +47,8 @@ - + + @@ -50,7 +56,8 @@ - + + @@ -58,7 +65,8 @@ - + + @@ -66,7 +74,8 @@ - + + @@ -74,7 +83,8 @@ - + + @@ -82,7 +92,8 @@ - + + @@ -90,7 +101,8 @@ - + + @@ -98,7 +110,8 @@ - + + @@ -106,7 +119,8 @@ - + + @@ -114,7 +128,8 @@ - + + @@ -122,7 +137,8 @@ - + + @@ -130,7 +146,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-08.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-08.xml index 4f877a57f7..392a344107 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-08.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-08.xml @@ -2,7 +2,8 @@ - + + @@ -10,7 +11,8 @@ - + + @@ -18,7 +20,8 @@ - + + @@ -26,7 +29,8 @@ - + + @@ -34,7 +38,8 @@ - + + @@ -42,7 +47,8 @@ - + + @@ -50,7 +56,8 @@ - + + @@ -58,7 +65,8 @@ - + + @@ -66,7 +74,8 @@ - + + @@ -74,7 +83,8 @@ - + + @@ -82,7 +92,8 @@ - + + @@ -90,7 +101,8 @@ - + + @@ -98,7 +110,8 @@ - + + @@ -106,7 +119,8 @@ - + + @@ -114,7 +128,8 @@ - + + @@ -122,7 +137,8 @@ - + + @@ -130,7 +146,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-09.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-09.xml index e961172bd7..ab8b9dca0d 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-09.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-09.xml @@ -2,7 +2,8 @@ - + + @@ -12,7 +13,8 @@ - + + @@ -22,7 +24,8 @@ - + + @@ -32,7 +35,8 @@ - + + @@ -42,7 +46,8 @@ - + + @@ -52,7 +57,8 @@ - + + @@ -62,7 +68,8 @@ - + + @@ -72,7 +79,8 @@ - + + @@ -82,7 +90,8 @@ - + + @@ -92,7 +101,8 @@ - + + @@ -102,7 +112,8 @@ - + + @@ -112,7 +123,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-10.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-10.xml index 0032874c68..0345ff03ab 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-10.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-10.xml @@ -4,12 +4,14 @@ - + + - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-11.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-11.xml index 6719d69b31..f4ca6e0c7b 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-11.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-11.xml @@ -4,12 +4,14 @@ - + + - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-12.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-12.xml index 268d857d77..a94a4939b0 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-12.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-12.xml @@ -4,12 +4,14 @@ - + + - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-13.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-13.xml index ca48eba6be..b2e50a3428 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-13.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-13.xml @@ -4,12 +4,14 @@ - + + - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-14.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-14.xml index 86a42c507f..f20836a4e8 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-14.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-14.xml @@ -4,12 +4,14 @@ - + + - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-15.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-15.xml index 92a5cdd174..a0e1253245 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-15.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-15.xml @@ -4,12 +4,14 @@ - + + - + + @@ -19,12 +21,14 @@ - + + - + + @@ -34,12 +38,14 @@ - + + - + + @@ -49,12 +55,14 @@ - + + - + + @@ -64,12 +72,14 @@ - + + - + + @@ -79,12 +89,14 @@ - + + - + + @@ -94,12 +106,14 @@ - + + - + + @@ -109,12 +123,14 @@ - + + - + + @@ -124,12 +140,14 @@ - + + - + + @@ -139,12 +157,14 @@ - + + - + + @@ -154,12 +174,14 @@ - + + - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-16.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-16.xml index a35ff64807..589663a131 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-16.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-16.xml @@ -4,7 +4,8 @@ - + + @@ -13,7 +14,8 @@ - + + @@ -22,7 +24,8 @@ - + + @@ -31,7 +34,8 @@ - + + @@ -40,7 +44,8 @@ - + + @@ -49,7 +54,8 @@ - + + @@ -58,7 +64,8 @@ - + + @@ -67,7 +74,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-18.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-18.xml new file mode 100644 index 0000000000..7e9c40543d --- /dev/null +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-18.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-20.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-20.xml index cb9b83336b..a5d723e134 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-20.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-20.xml @@ -2,7 +2,8 @@ - + + @@ -10,7 +11,8 @@ - + + @@ -18,7 +20,8 @@ - + + @@ -26,7 +29,8 @@ - + + @@ -34,7 +38,8 @@ - + + @@ -42,7 +47,8 @@ - + + @@ -50,7 +56,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-21.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-21.xml index 4a1eed553a..18e7990018 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-21.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-21.xml @@ -2,7 +2,8 @@ - + + @@ -10,7 +11,8 @@ - + + @@ -18,7 +20,8 @@ - + + @@ -26,7 +29,8 @@ - + + @@ -34,7 +38,8 @@ - + + @@ -42,7 +47,8 @@ - + + @@ -50,7 +56,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-22.xml b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-22.xml index 70508a2314..3af0d603f3 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-22.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/cubics/cubic-22.xml @@ -4,7 +4,8 @@ - + + @@ -13,7 +14,8 @@ - + + @@ -22,7 +24,8 @@ - + + @@ -31,7 +34,8 @@ - + + @@ -40,7 +44,8 @@ - + + @@ -49,7 +54,8 @@ - + + @@ -58,7 +64,8 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/ensoul/ensoulOptions.xml b/L2J_Mobius_Underground/dist/game/data/stats/ensoul/ensoulOptions.xml index 0d30e1e13f..980b401e79 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/ensoul/ensoulOptions.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/ensoul/ensoulOptions.xml @@ -544,121 +544,121 @@ \ No newline at end of file diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/00000-00099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/00000-00099.xml index 723ce364b0..97d77038ca 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/00000-00099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/00000-00099.xml @@ -448,9 +448,6 @@ - - - -8 20 @@ -468,9 +465,6 @@ - - - -8 20 @@ -488,9 +482,6 @@ - - - -8 20 @@ -573,9 +564,6 @@ - - - 62 @@ -592,9 +580,6 @@ - - - 68 @@ -691,9 +676,6 @@ - - - 39 @@ -726,9 +708,6 @@ - - - 43 @@ -1141,9 +1120,6 @@ - - - 95 @@ -1163,9 +1139,6 @@ - - - 61 @@ -1186,9 +1159,6 @@ - - - 224 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/00100-00199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/00100-00199.xml index a6d5186f1f..cc2aeac276 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/00100-00199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/00100-00199.xml @@ -64,9 +64,6 @@ - - - -8 20 @@ -87,9 +84,6 @@ - - - -8 20 @@ -110,9 +104,6 @@ - - - -8 20 @@ -133,9 +124,6 @@ - - - -8 20 @@ -156,9 +144,6 @@ - - - -8 20 @@ -179,9 +164,6 @@ - - - -8 20 @@ -202,9 +184,6 @@ - - - -8 20 @@ -225,9 +204,6 @@ - - - -8 20 @@ -248,9 +224,6 @@ - - - -8 20 @@ -271,9 +244,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/00300-00399.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/00300-00399.xml index 9faf201382..800f620c18 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/00300-00399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/00300-00399.xml @@ -1353,9 +1353,6 @@ - - - 77 @@ -1375,9 +1372,6 @@ - - - 87 @@ -1397,9 +1391,6 @@ - - - 95 @@ -1419,9 +1410,6 @@ - - - 95 @@ -1441,9 +1429,6 @@ - - - 97 @@ -1463,9 +1448,6 @@ - - - 103 @@ -1485,9 +1467,6 @@ - - - 111 @@ -1507,9 +1486,6 @@ - - - 120 @@ -1529,9 +1505,6 @@ - - - 129 @@ -1552,9 +1525,6 @@ - - - 239 @@ -1574,9 +1544,6 @@ - - - 157 @@ -1596,9 +1563,6 @@ - - - 166 @@ -1732,9 +1696,6 @@ - - - 171 @@ -1907,9 +1868,6 @@ - - - 293 @@ -1954,9 +1912,6 @@ - - - 48 @@ -1976,9 +1931,6 @@ - - - 54 @@ -1998,9 +1950,6 @@ - - - 61 @@ -2020,9 +1969,6 @@ - - - 61 @@ -2042,9 +1988,6 @@ - - - 70 @@ -2064,9 +2007,6 @@ - - - 75 @@ -2086,9 +2026,6 @@ - - - 80 @@ -2108,9 +2045,6 @@ - - - 98 @@ -2206,9 +2140,6 @@ - - - 107 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/00400-00499.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/00400-00499.xml index 6315e208bb..f1b8e09ba2 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/00400-00499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/00400-00499.xml @@ -498,9 +498,6 @@ - - - 17 19 @@ -518,9 +515,6 @@ - - - 18 24 @@ -556,9 +550,6 @@ - - - 21 38 @@ -576,9 +567,6 @@ - - - 25 52 @@ -635,9 +623,6 @@ - - - 39 106 @@ -658,9 +643,6 @@ - - - 43 126 @@ -681,9 +663,6 @@ - - - 43 126 @@ -704,9 +683,6 @@ - - - 43 126 @@ -727,9 +703,6 @@ - - - 49 147 @@ -750,9 +723,6 @@ - - - 52 169 @@ -774,9 +744,6 @@ - - - 90 320 @@ -797,9 +764,6 @@ - - - 60 225 @@ -821,9 +785,6 @@ - - - 105 413 @@ -844,9 +805,6 @@ - - - 69 284 @@ -867,9 +825,6 @@ - - - 74 314 @@ -890,9 +845,6 @@ - - - 87 377 @@ -914,9 +866,6 @@ - - - 150 665 @@ -937,9 +886,6 @@ - - - 87 377 @@ -960,9 +906,6 @@ - - - 92 409 @@ -983,9 +926,6 @@ - - - 87 377 @@ -1007,9 +947,6 @@ - - - 150 665 @@ -1030,9 +967,6 @@ - - - 87 377 @@ -1054,9 +988,6 @@ - - - 150 665 @@ -1077,9 +1008,6 @@ - - - 87 377 @@ -1100,9 +1028,6 @@ - - - 92 409 @@ -1123,9 +1048,6 @@ - - - 87 377 @@ -1147,9 +1069,6 @@ - - - 150 665 @@ -1170,9 +1089,6 @@ - - - 87 377 @@ -1193,9 +1109,6 @@ - - - 92 409 @@ -1216,9 +1129,6 @@ - - - 87 377 @@ -1240,9 +1150,6 @@ - - - 150 665 @@ -1264,9 +1171,6 @@ - - - 158 718 @@ -1294,9 +1198,6 @@ - - - 158 773 @@ -1320,9 +1221,6 @@ - - - 10 10 @@ -1340,9 +1238,6 @@ - - - 11 15 @@ -1360,9 +1255,6 @@ - - - 13 23 @@ -1380,9 +1272,6 @@ - - - 16 33 @@ -1403,9 +1292,6 @@ - - - 24 66 @@ -1426,9 +1312,6 @@ - - - 27 79 @@ -1449,9 +1332,6 @@ - - - 27 79 @@ -1472,9 +1352,6 @@ - - - 27 79 @@ -1495,9 +1372,6 @@ - - - 30 92 @@ -1518,9 +1392,6 @@ - - - 32 105 @@ -1541,9 +1412,6 @@ - - - 37 141 @@ -1564,9 +1432,6 @@ - - - 43 177 @@ -1587,9 +1452,6 @@ - - - 46 196 @@ -1610,9 +1472,6 @@ - - - 55 236 @@ -1633,9 +1492,6 @@ - - - 55 236 @@ -1656,9 +1512,6 @@ - - - 58 256 @@ -1679,9 +1532,6 @@ - - - 55 236 @@ -1702,9 +1552,6 @@ - - - 55 236 @@ -1725,9 +1572,6 @@ - - - 55 236 @@ -1748,9 +1592,6 @@ - - - 58 256 @@ -1771,9 +1612,6 @@ - - - 55 236 @@ -1794,9 +1632,6 @@ - - - 55 236 @@ -1817,9 +1652,6 @@ - - - 58 256 @@ -1840,9 +1672,6 @@ - - - 55 236 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/00600-00699.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/00600-00699.xml index 34b10dd7be..4e4b237048 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/00600-00699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/00600-00699.xml @@ -448,9 +448,6 @@ - - - -8 20 @@ -471,9 +468,6 @@ - - - -8 20 @@ -494,9 +488,6 @@ - - - -8 20 @@ -517,9 +508,6 @@ - - - -8 20 @@ -540,9 +528,6 @@ - - - -8 20 @@ -563,9 +548,6 @@ - - - -8 20 @@ -586,9 +568,6 @@ - - - -8 20 @@ -609,9 +588,6 @@ - - - -8 20 @@ -632,9 +608,6 @@ - - - -8 20 @@ -656,9 +629,6 @@ - - - -8 20 @@ -679,9 +649,6 @@ - - - -8 20 @@ -702,9 +669,6 @@ - - - -8 20 @@ -725,9 +689,6 @@ - - - -8 20 @@ -748,9 +709,6 @@ - - - -8 20 @@ -771,9 +729,6 @@ - - - -8 20 @@ -794,9 +749,6 @@ - - - -8 20 @@ -817,9 +769,6 @@ - - - -8 20 @@ -840,9 +789,6 @@ - - - -8 20 @@ -863,9 +809,6 @@ - - - -8 20 @@ -886,9 +829,6 @@ - - - -8 20 @@ -909,9 +849,6 @@ - - - -8 20 @@ -932,9 +869,6 @@ - - - -8 20 @@ -955,9 +889,6 @@ - - - -8 20 @@ -978,9 +909,6 @@ - - - -8 20 @@ -1001,9 +929,6 @@ - - - -8 20 @@ -1024,9 +949,6 @@ - - - -8 20 @@ -1047,9 +969,6 @@ - - - -8 20 @@ -1070,9 +989,6 @@ - - - -8 20 @@ -1093,9 +1009,6 @@ - - - -8 20 @@ -1116,9 +1029,6 @@ - - - -8 20 @@ -1139,9 +1049,6 @@ - - - -8 20 @@ -1162,9 +1069,6 @@ - - - -8 20 @@ -1185,9 +1089,6 @@ - - - -8 20 @@ -1208,9 +1109,6 @@ - - - -8 20 @@ -1231,9 +1129,6 @@ - - - -8 20 @@ -1254,9 +1149,6 @@ - - - -8 20 @@ -1277,9 +1169,6 @@ - - - -8 20 @@ -1300,9 +1189,6 @@ - - - -8 20 @@ -1323,9 +1209,6 @@ - - - -8 20 @@ -1346,9 +1229,6 @@ - - - -8 20 @@ -1369,9 +1249,6 @@ - - - -8 20 @@ -1392,9 +1269,6 @@ - - - -8 20 @@ -1415,9 +1289,6 @@ - - - -8 20 @@ -1438,9 +1309,6 @@ - - - -8 20 @@ -1461,9 +1329,6 @@ - - - -8 20 @@ -1484,9 +1349,6 @@ - - - -8 20 @@ -1507,9 +1369,6 @@ - - - -8 20 @@ -1530,9 +1389,6 @@ - - - -8 20 @@ -1553,9 +1409,6 @@ - - - -8 20 @@ -1576,9 +1429,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/00900-00999.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/00900-00999.xml index 2338f6c589..739d502538 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/00900-00999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/00900-00999.xml @@ -765,9 +765,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/01100-01199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/01100-01199.xml index 70eee92cb9..309e7bdd6c 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/01100-01199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/01100-01199.xml @@ -13,9 +13,6 @@ - - - 21 38 @@ -33,9 +30,6 @@ - - - 30 67 @@ -54,9 +48,6 @@ - - - 34 86 @@ -75,9 +66,6 @@ - - - 13 23 @@ -96,9 +84,6 @@ - - - 19 42 @@ -117,9 +102,6 @@ - - - 21 54 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/01300-01399.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/01300-01399.xml index dc9fdeb282..a700935438 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/01300-01399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/01300-01399.xml @@ -274,9 +274,6 @@ - - - 51 @@ -299,9 +296,6 @@ - - - 51 @@ -324,9 +318,6 @@ - - - 51 96 @@ -372,9 +363,6 @@ - - - 51 142 @@ -398,9 +386,6 @@ - - - 32 @@ -423,9 +408,6 @@ - - - 32 @@ -448,9 +430,6 @@ - - - 32 60 @@ -496,9 +475,6 @@ - - - 32 79 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/02300-02399.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/02300-02399.xml index 20e1d48b1a..bc2c56b327 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/02300-02399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/02300-02399.xml @@ -1247,9 +1247,6 @@ - - - 157 @@ -1269,9 +1266,6 @@ - - - 64 @@ -1291,9 +1285,6 @@ - - - 64 @@ -1313,9 +1304,6 @@ - - - 98 @@ -1335,9 +1323,6 @@ - - - 104 @@ -1358,9 +1343,6 @@ - - - 270 @@ -1381,9 +1363,6 @@ - - - 278 @@ -1404,9 +1383,6 @@ - - - 293 @@ -1657,9 +1633,6 @@ - - - 54 169 @@ -1680,9 +1653,6 @@ - - - 78 345 @@ -1703,9 +1673,6 @@ - - - 83 377 @@ -1726,9 +1693,6 @@ - - - 83 377 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/02400-02499.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/02400-02499.xml index 98907082d9..7719ecf670 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/02400-02499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/02400-02499.xml @@ -15,9 +15,6 @@ - - - 86 409 @@ -38,9 +35,6 @@ - - - 34 105 @@ -61,9 +55,6 @@ - - - 49 216 @@ -84,9 +75,6 @@ - - - 52 236 @@ -107,9 +95,6 @@ - - - 52 236 @@ -130,9 +115,6 @@ - - - 53 256 @@ -154,9 +136,6 @@ - - - 127 561 @@ -178,9 +157,6 @@ - - - 139 665 @@ -202,9 +178,6 @@ - - - 147 718 @@ -226,9 +199,6 @@ - - - 147 718 @@ -1723,9 +1693,6 @@ - - - -8 20 @@ -1746,9 +1713,6 @@ - - - -8 20 @@ -1769,9 +1733,6 @@ - - - -8 20 @@ -1792,9 +1753,6 @@ - - - -8 20 @@ -1815,9 +1773,6 @@ - - - -8 20 @@ -1838,9 +1793,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/04200-04299.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/04200-04299.xml index d3c165b181..3d43407cca 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/04200-04299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/04200-04299.xml @@ -370,9 +370,6 @@ - - - 68 @@ -396,9 +393,6 @@ - - - 43 @@ -466,9 +460,6 @@ - - - 68 @@ -492,9 +483,6 @@ - - - 43 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/05200-05299.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/05200-05299.xml index f9747772f2..440ae756d0 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/05200-05299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/05200-05299.xml @@ -685,9 +685,6 @@ - - - @@ -1470,9 +1467,6 @@ - - - 171 @@ -1493,9 +1487,6 @@ - - - 107 @@ -1571,9 +1562,6 @@ - - - -8 20 @@ -1596,9 +1584,6 @@ - - - 278 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/05300-05399.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/05300-05399.xml index 1525a3809f..f55318fcd7 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/05300-05399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/05300-05399.xml @@ -93,9 +93,6 @@ - - - 86 409 @@ -117,9 +114,6 @@ - - - 53 256 @@ -179,9 +173,6 @@ - - - 139 665 @@ -241,9 +232,6 @@ - - - 293 @@ -319,9 +307,6 @@ - - - -8 20 @@ -344,9 +329,6 @@ - - - 293 @@ -539,9 +521,6 @@ - - - 147 718 @@ -601,9 +580,6 @@ - - - 147 718 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/05700-05799.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/05700-05799.xml index d7fcf1458b..4024edfaa5 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/05700-05799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/05700-05799.xml @@ -208,9 +208,6 @@ - - - 41 @@ -249,9 +246,6 @@ - - - 41 @@ -290,9 +284,6 @@ - - - 41 @@ -331,9 +322,6 @@ - - - 41 @@ -372,9 +360,6 @@ - - - 44 @@ -413,9 +398,6 @@ - - - 44 @@ -454,9 +436,6 @@ - - - 44 @@ -495,9 +474,6 @@ - - - 44 @@ -536,9 +512,6 @@ - - - 41 @@ -577,9 +550,6 @@ - - - 41 @@ -618,9 +588,6 @@ - - - 41 @@ -659,9 +626,6 @@ - - - 41 @@ -700,9 +664,6 @@ - - - 44 @@ -741,9 +702,6 @@ - - - 44 @@ -782,9 +740,6 @@ - - - 44 @@ -823,9 +778,6 @@ - - - 44 @@ -1149,9 +1101,6 @@ - - - 46 @@ -1190,9 +1139,6 @@ - - - 46 @@ -1212,9 +1158,6 @@ - - - 46 @@ -1253,9 +1196,6 @@ - - - 46 @@ -1275,9 +1215,6 @@ - - - 49 @@ -1316,9 +1253,6 @@ - - - 49 @@ -1338,9 +1272,6 @@ - - - 49 @@ -1379,9 +1310,6 @@ - - - 49 @@ -1401,9 +1329,6 @@ - - - 46 @@ -1442,9 +1367,6 @@ - - - 46 @@ -1464,9 +1386,6 @@ - - - 46 @@ -1505,9 +1424,6 @@ - - - 46 @@ -1527,9 +1443,6 @@ - - - 49 @@ -1568,9 +1481,6 @@ - - - 49 @@ -1590,9 +1500,6 @@ - - - 49 @@ -1631,9 +1538,6 @@ - - - 49 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/06300-06399.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/06300-06399.xml index ad5349cc54..6c58763578 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/06300-06399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/06300-06399.xml @@ -1501,9 +1501,6 @@ - - - 205 @@ -1524,9 +1521,6 @@ - - - 128 @@ -1546,9 +1540,6 @@ - - - 55 @@ -1568,9 +1559,6 @@ - - - 55 @@ -1590,9 +1578,6 @@ - - - -8 20 @@ -1613,9 +1598,6 @@ - - - 83 @@ -1714,9 +1696,6 @@ - - - 166 866 @@ -1737,9 +1716,6 @@ - - - 55 @@ -1759,9 +1735,6 @@ - - - 55 @@ -1780,9 +1753,6 @@ - - - 83 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/06500-06599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/06500-06599.xml index 1952934012..0778ab65fb 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/06500-06599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/06500-06599.xml @@ -328,7 +328,6 @@ - @@ -343,7 +342,6 @@ - @@ -358,7 +356,6 @@ - @@ -373,7 +370,6 @@ - @@ -388,7 +384,6 @@ - @@ -403,7 +398,6 @@ - @@ -418,7 +412,6 @@ - @@ -433,7 +426,6 @@ - @@ -448,7 +440,6 @@ - @@ -463,7 +454,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/06600-06699.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/06600-06699.xml index 48ea61f270..686a77d9a5 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/06600-06699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/06600-06699.xml @@ -1652,9 +1652,6 @@ - - - 193 @@ -1676,9 +1673,6 @@ - - - 121 @@ -1699,9 +1693,6 @@ - - - 55 @@ -1722,9 +1713,6 @@ - - - 55 @@ -1745,9 +1733,6 @@ - - - -8 20 @@ -1769,9 +1754,6 @@ - - - 83 @@ -1873,9 +1855,6 @@ - - - 157 866 @@ -1897,9 +1876,6 @@ - - - 55 @@ -1920,9 +1896,6 @@ - - - 55 @@ -1942,9 +1915,6 @@ - - - 83 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/07000-07099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/07000-07099.xml index 698a0d6b34..cfdec957e5 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/07000-07099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/07000-07099.xml @@ -1096,7 +1096,6 @@ - @@ -1109,7 +1108,6 @@ - @@ -1122,7 +1120,6 @@ - @@ -1135,7 +1132,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/07600-07699.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/07600-07699.xml index 1023bf8b26..d1803889d4 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/07600-07699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/07600-07699.xml @@ -167,7 +167,6 @@ - @@ -181,7 +180,6 @@ - @@ -195,7 +193,6 @@ - @@ -209,7 +206,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/07800-07899.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/07800-07899.xml index 8de21b422b..fd42caf139 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/07800-07899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/07800-07899.xml @@ -117,7 +117,6 @@ - @@ -131,7 +130,6 @@ - @@ -145,7 +143,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/08200-08299.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/08200-08299.xml index 8812fc19d1..72555c7d20 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/08200-08299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/08200-08299.xml @@ -37,7 +37,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/08400-08499.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/08400-08499.xml index bcee946c93..fdc015d5dc 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/08400-08499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/08400-08499.xml @@ -1334,7 +1334,6 @@ - @@ -1348,7 +1347,6 @@ - @@ -1362,7 +1360,6 @@ - @@ -1519,7 +1516,6 @@ - @@ -1533,7 +1529,6 @@ - @@ -1547,7 +1542,6 @@ - @@ -1561,7 +1555,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/08500-08599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/08500-08599.xml index c452d7e002..79c01a98fc 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/08500-08599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/08500-08599.xml @@ -5,7 +5,6 @@ - @@ -19,7 +18,6 @@ - @@ -33,7 +31,6 @@ - @@ -47,7 +44,6 @@ - @@ -61,7 +57,6 @@ - @@ -75,7 +70,6 @@ - @@ -89,7 +83,6 @@ - @@ -103,7 +96,6 @@ - @@ -117,7 +109,6 @@ - @@ -131,7 +122,6 @@ - @@ -145,7 +135,6 @@ - @@ -159,7 +148,6 @@ - @@ -173,7 +161,6 @@ - @@ -187,7 +174,6 @@ - @@ -831,7 +817,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/08600-08699.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/08600-08699.xml index df88b262c5..3c46afb402 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/08600-08699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/08600-08699.xml @@ -1218,9 +1218,6 @@ - - - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/09000-09099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/09000-09099.xml index 7c69b9bf07..ac0b987ac0 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/09000-09099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/09000-09099.xml @@ -989,9 +989,6 @@ - - - 68 @@ -1014,9 +1011,6 @@ - - - 43 @@ -1083,9 +1077,6 @@ - - - 34 86 @@ -1109,9 +1100,6 @@ - - - 21 54 @@ -1134,9 +1122,6 @@ - - - -8 20 @@ -1225,9 +1210,6 @@ - - - 95 @@ -1251,9 +1233,6 @@ - - - 61 @@ -1320,9 +1299,6 @@ - - - -8 20 @@ -1438,9 +1414,6 @@ - - - 49 147 @@ -1465,9 +1438,6 @@ - - - 30 92 @@ -1558,9 +1528,6 @@ - - - 224 @@ -1605,9 +1572,6 @@ - - - -8 20 @@ -1745,9 +1709,6 @@ - - - 69 284 @@ -1772,9 +1733,6 @@ - - - 43 177 @@ -1865,9 +1823,6 @@ - - - 157 @@ -1891,9 +1846,6 @@ - - - 98 @@ -1938,9 +1890,6 @@ - - - -8 20 @@ -1965,9 +1914,6 @@ - - - 41 @@ -1990,9 +1936,6 @@ - - - 41 @@ -2106,9 +2049,6 @@ - - - 78 345 @@ -2133,9 +2073,6 @@ - - - 49 216 @@ -2159,9 +2096,6 @@ - - - 41 @@ -2184,9 +2118,6 @@ - - - 41 @@ -2210,9 +2141,6 @@ - - - 171 @@ -2236,9 +2164,6 @@ - - - 107 @@ -2283,9 +2208,6 @@ - - - -8 20 @@ -2310,9 +2232,6 @@ - - - 46 @@ -2335,9 +2254,6 @@ - - - 46 @@ -2451,9 +2367,6 @@ - - - 139 665 @@ -2477,9 +2390,6 @@ - - - 46 @@ -2502,9 +2412,6 @@ - - - 46 @@ -2528,9 +2435,6 @@ - - - 293 @@ -2575,9 +2479,6 @@ - - - 49 @@ -2600,9 +2501,6 @@ - - - 49 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/09100-09199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/09100-09199.xml index e8bbb4cdba..5820c89c6e 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/09100-09199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/09100-09199.xml @@ -41,9 +41,6 @@ - - - 147 718 @@ -67,9 +64,6 @@ - - - 49 @@ -92,9 +86,6 @@ - - - 49 @@ -643,9 +634,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/09400-09499.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/09400-09499.xml index 2f40fbcedd..13fa362883 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/09400-09499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/09400-09499.xml @@ -312,9 +312,6 @@ - - - 226 @@ -443,9 +440,6 @@ - - - 141 @@ -464,9 +458,6 @@ - - - 92 @@ -486,9 +477,6 @@ - - - 61 @@ -508,9 +496,6 @@ - - - 61 @@ -675,9 +660,6 @@ - - - 113 592 @@ -811,9 +793,6 @@ - - - 71 370 @@ -833,9 +812,6 @@ - - - 92 @@ -855,9 +831,6 @@ - - - 61 @@ -877,9 +850,6 @@ - - - 61 @@ -899,9 +869,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/09500-09599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/09500-09599.xml index f3170f7c76..c9295d4e8a 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/09500-09599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/09500-09599.xml @@ -199,9 +199,6 @@ - - - 214 @@ -223,9 +220,6 @@ - - - 134 @@ -245,9 +239,6 @@ - - - 92 @@ -268,9 +259,6 @@ - - - 61 @@ -291,9 +279,6 @@ - - - 61 @@ -416,9 +401,6 @@ - - - 107 592 @@ -441,9 +423,6 @@ - - - 67 370 @@ -464,9 +443,6 @@ - - - 92 @@ -487,9 +463,6 @@ - - - 61 @@ -510,9 +483,6 @@ - - - 61 @@ -533,9 +503,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/10000-10099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/10000-10099.xml index 537665e4c9..bd3d0f8338 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/10000-10099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/10000-10099.xml @@ -501,9 +501,6 @@ - - - 77 @@ -527,9 +524,6 @@ - - - 48 @@ -599,9 +593,6 @@ - - - 39 106 @@ -626,9 +617,6 @@ - - - 24 66 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/10100-10199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/10100-10199.xml index 6645ce8008..f323763d7e 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/10100-10199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/10100-10199.xml @@ -224,9 +224,6 @@ - - - -8 20 @@ -243,9 +240,6 @@ - - - -8 20 @@ -268,9 +262,6 @@ - - - @@ -295,9 +286,6 @@ - - - -8 15 @@ -319,9 +307,6 @@ - - - -8 13 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/10200-10299.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/10200-10299.xml index 3d2d366600..9498a56e48 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/10200-10299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/10200-10299.xml @@ -672,9 +672,6 @@ - - - 226 @@ -871,9 +868,6 @@ - - - 113 592 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/10700-10799.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/10700-10799.xml index 19332d9c9f..83f6206b59 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/10700-10799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/10700-10799.xml @@ -3767,9 +3767,6 @@ - - - 293 @@ -3795,9 +3792,6 @@ - - - 293 @@ -3873,9 +3867,6 @@ - - - 147 718 @@ -3927,9 +3918,6 @@ - - - 205 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/10800-10899.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/10800-10899.xml index d3acd93ea8..b3717528ff 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/10800-10899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/10800-10899.xml @@ -46,9 +46,6 @@ - - - 166 866 @@ -74,9 +71,6 @@ - - - 226 @@ -305,9 +299,6 @@ - - - 113 592 @@ -576,9 +567,6 @@ - - - 226 @@ -807,9 +795,6 @@ - - - 113 592 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/11300-11399.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/11300-11399.xml index 2f6dc67d02..e77dbe5583 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/11300-11399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/11300-11399.xml @@ -1874,9 +1874,6 @@ - - - @@ -1899,9 +1896,6 @@ - - - @@ -1946,9 +1940,6 @@ - - - @@ -1971,9 +1962,6 @@ - - - @@ -2018,9 +2006,6 @@ - - - @@ -2043,9 +2028,6 @@ - - - @@ -2069,9 +2051,6 @@ - - - @@ -2095,9 +2074,6 @@ - - - @@ -2120,9 +2096,6 @@ - - - @@ -2167,9 +2140,6 @@ - - - @@ -2216,9 +2186,6 @@ - - - @@ -2242,9 +2209,6 @@ - - - @@ -2289,9 +2253,6 @@ - - - @@ -2313,9 +2274,6 @@ - - - @@ -2338,9 +2296,6 @@ - - - @@ -2366,9 +2321,6 @@ - - - @@ -2392,9 +2344,6 @@ - - - @@ -2418,9 +2367,6 @@ - - - @@ -2445,9 +2391,6 @@ - - - @@ -2471,9 +2414,6 @@ - - - @@ -2518,9 +2458,6 @@ - - - @@ -2543,9 +2480,6 @@ - - - @@ -2590,9 +2524,6 @@ - - - @@ -2615,9 +2546,6 @@ - - - @@ -2643,9 +2571,6 @@ - - - @@ -2667,9 +2592,6 @@ - - - @@ -2792,9 +2714,6 @@ - - - @@ -2819,9 +2738,6 @@ - - - @@ -2867,9 +2783,6 @@ - - - @@ -2914,9 +2827,6 @@ - - - @@ -2939,9 +2849,6 @@ - - - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/11400-11499.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/11400-11499.xml index b9952e3255..d7dbd8d433 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/11400-11499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/11400-11499.xml @@ -37,9 +37,6 @@ - - - @@ -63,9 +60,6 @@ - - - @@ -88,9 +82,6 @@ - - - @@ -114,9 +105,6 @@ - - - @@ -141,9 +129,6 @@ - - - @@ -167,9 +152,6 @@ - - - @@ -194,9 +176,6 @@ - - - @@ -219,9 +198,6 @@ - - - @@ -266,9 +242,6 @@ - - - @@ -315,9 +288,6 @@ - - - @@ -341,9 +311,6 @@ - - - @@ -388,9 +355,6 @@ - - - @@ -413,9 +377,6 @@ - - - @@ -440,9 +401,6 @@ - - - @@ -466,9 +424,6 @@ - - - @@ -515,9 +470,6 @@ - - - 107 @@ -577,9 +529,6 @@ - - - 139 665 @@ -619,9 +568,6 @@ - - - -8 20 @@ -642,9 +588,6 @@ - - - 69 @@ -665,9 +608,6 @@ - - - 171 @@ -766,9 +706,6 @@ - - - 86 409 @@ -790,9 +727,6 @@ - - - 278 @@ -811,9 +745,6 @@ - - - 69 @@ -834,9 +765,6 @@ - - - 53 256 @@ -875,9 +803,6 @@ - - - @@ -922,9 +847,6 @@ - - - @@ -970,9 +892,6 @@ - - - @@ -1017,9 +936,6 @@ - - - @@ -1043,9 +959,6 @@ - - - @@ -1070,9 +983,6 @@ - - - @@ -1094,9 +1004,6 @@ - - - @@ -1120,9 +1027,6 @@ - - - @@ -1146,9 +1050,6 @@ - - - @@ -1193,9 +1094,6 @@ - - - @@ -1242,9 +1140,6 @@ - - - @@ -1268,9 +1163,6 @@ - - - @@ -1315,9 +1207,6 @@ - - - @@ -1339,9 +1228,6 @@ - - - @@ -1365,9 +1251,6 @@ - - - @@ -1430,9 +1313,6 @@ - - - 147 718 @@ -1471,9 +1351,6 @@ - - - 73 @@ -1494,9 +1371,6 @@ - - - 293 @@ -1517,9 +1391,6 @@ - - - 293 @@ -1579,9 +1450,6 @@ - - - 147 718 @@ -1621,9 +1489,6 @@ - - - -8 20 @@ -1644,9 +1509,6 @@ - - - 73 @@ -1667,9 +1529,6 @@ - - - @@ -1692,9 +1551,6 @@ - - - @@ -1739,9 +1595,6 @@ - - - @@ -1788,9 +1641,6 @@ - - - @@ -1814,9 +1664,6 @@ - - - @@ -1861,9 +1708,6 @@ - - - @@ -1886,9 +1730,6 @@ - - - @@ -1912,9 +1753,6 @@ - - - @@ -2051,9 +1889,6 @@ - - - @@ -2078,9 +1913,6 @@ - - - @@ -2105,9 +1937,6 @@ - - - @@ -2130,9 +1959,6 @@ - - - @@ -2236,9 +2062,6 @@ - - - 55 @@ -2260,9 +2083,6 @@ - - - 157 866 @@ -2284,9 +2104,6 @@ - - - 55 @@ -2306,9 +2123,6 @@ - - - 83 @@ -2330,9 +2144,6 @@ - - - 121 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/11500-11599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/11500-11599.xml index aab82c09f1..aace8fdc48 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/11500-11599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/11500-11599.xml @@ -16,9 +16,6 @@ - - - 55 @@ -39,9 +36,6 @@ - - - 55 @@ -62,9 +56,6 @@ - - - -8 20 @@ -86,9 +77,6 @@ - - - 83 @@ -110,9 +98,6 @@ - - - 193 @@ -134,9 +119,6 @@ - - - @@ -160,9 +142,6 @@ - - - @@ -186,9 +165,6 @@ - - - @@ -212,9 +188,6 @@ - - - @@ -239,9 +212,6 @@ - - - @@ -266,9 +236,6 @@ - - - @@ -313,9 +280,6 @@ - - - @@ -339,9 +303,6 @@ - - - @@ -365,9 +326,6 @@ - - - @@ -657,9 +615,6 @@ - - - @@ -684,9 +639,6 @@ - - - @@ -818,9 +770,6 @@ - - - @@ -846,9 +795,6 @@ - - - @@ -873,9 +819,6 @@ - - - @@ -1011,9 +954,6 @@ - - - @@ -1206,9 +1146,6 @@ - - - @@ -1342,9 +1279,6 @@ - - - @@ -1475,9 +1409,6 @@ - - - @@ -1502,9 +1433,6 @@ - - - @@ -1530,9 +1458,6 @@ - - - 134 @@ -1553,9 +1478,6 @@ - - - 61 @@ -1576,9 +1498,6 @@ - - - 61 @@ -1700,9 +1619,6 @@ - - - 61 @@ -1724,9 +1640,6 @@ - - - 214 @@ -1747,9 +1660,6 @@ - - - -8 20 @@ -1772,9 +1682,6 @@ - - - 61 @@ -1794,9 +1701,6 @@ - - - 92 @@ -1818,9 +1722,6 @@ - - - 107 592 @@ -1841,9 +1742,6 @@ - - - 92 @@ -1865,9 +1763,6 @@ - - - 67 370 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12000-12099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12000-12099.xml index 2486bfd6ab..9b97f67a52 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12000-12099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12000-12099.xml @@ -220,9 +220,6 @@ - - - 77 @@ -258,9 +255,6 @@ - - - 39 106 @@ -280,9 +274,6 @@ - - - 24 66 @@ -302,9 +293,6 @@ - - - 48 @@ -322,9 +310,6 @@ - - - -8 20 @@ -398,9 +383,6 @@ - - - 27 79 @@ -420,9 +402,6 @@ - - - 43 126 @@ -442,9 +421,6 @@ - - - 27 79 @@ -500,9 +476,6 @@ - - - 43 126 @@ -522,9 +495,6 @@ - - - 54 @@ -543,9 +513,6 @@ - - - 87 @@ -563,9 +530,6 @@ - - - -8 20 @@ -586,9 +550,6 @@ - - - 43 126 @@ -608,9 +569,6 @@ - - - 27 79 @@ -664,9 +622,6 @@ - - - 95 @@ -685,9 +640,6 @@ - - - 95 @@ -706,9 +658,6 @@ - - - 95 @@ -831,9 +780,6 @@ - - - 61 @@ -869,9 +815,6 @@ - - - 61 @@ -926,9 +869,6 @@ - - - 97 @@ -981,9 +921,6 @@ - - - 49 147 @@ -1003,9 +940,6 @@ - - - 30 92 @@ -1025,9 +959,6 @@ - - - 61 @@ -1062,9 +993,6 @@ - - - -8 20 @@ -1155,9 +1083,6 @@ - - - 64 @@ -1176,9 +1101,6 @@ - - - 52 169 @@ -1198,9 +1120,6 @@ - - - 32 105 @@ -1220,9 +1139,6 @@ - - - 103 @@ -1241,9 +1157,6 @@ - - - 64 @@ -1295,9 +1208,6 @@ - - - -8 20 @@ -1402,9 +1312,6 @@ - - - -8 20 @@ -1475,9 +1382,6 @@ - - - -8 20 @@ -1566,9 +1470,6 @@ - - - -8 20 @@ -1606,9 +1507,6 @@ - - - 70 @@ -1627,9 +1525,6 @@ - - - 111 @@ -1665,9 +1560,6 @@ - - - 90 320 @@ -1807,9 +1699,6 @@ - - - -8 20 @@ -1864,9 +1753,6 @@ - - - 75 @@ -1885,9 +1771,6 @@ - - - 120 @@ -1905,9 +1788,6 @@ - - - -8 20 @@ -1962,9 +1842,6 @@ - - - 60 225 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12100-12199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12100-12199.xml index 6a2e650faf..cbc3634629 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12100-12199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12100-12199.xml @@ -14,9 +14,6 @@ - - - 37 141 @@ -52,9 +49,6 @@ - - - -8 20 @@ -144,9 +138,6 @@ - - - -8 20 @@ -184,9 +175,6 @@ - - - 80 @@ -205,9 +193,6 @@ - - - 129 @@ -296,9 +281,6 @@ - - - 105 413 @@ -437,9 +419,6 @@ - - - 69 284 @@ -459,9 +438,6 @@ - - - 43 177 @@ -497,9 +473,6 @@ - - - -8 20 @@ -537,9 +510,6 @@ - - - 224 @@ -557,9 +527,6 @@ - - - -8 20 @@ -719,9 +686,6 @@ - - - 74 314 @@ -741,9 +705,6 @@ - - - 46 196 @@ -813,9 +774,6 @@ - - - -8 20 @@ -836,9 +794,6 @@ - - - 239 @@ -978,9 +933,6 @@ - - - 98 @@ -998,9 +950,6 @@ - - - 41 @@ -1035,9 +984,6 @@ - - - 41 @@ -1055,9 +1001,6 @@ - - - 41 @@ -1092,9 +1035,6 @@ - - - 41 @@ -1112,9 +1052,6 @@ - - - -8 20 @@ -1152,9 +1089,6 @@ - - - 157 @@ -1172,9 +1106,6 @@ - - - 41 @@ -1209,9 +1140,6 @@ - - - 41 @@ -1248,9 +1176,6 @@ - - - 127 561 @@ -1269,9 +1194,6 @@ - - - 41 @@ -1306,9 +1228,6 @@ - - - 41 @@ -1343,9 +1262,6 @@ - - - -8 20 @@ -1366,9 +1282,6 @@ - - - 98 @@ -1387,9 +1300,6 @@ - - - 157 @@ -1425,9 +1335,6 @@ - - - 78 345 @@ -1447,9 +1354,6 @@ - - - 49 216 @@ -1468,9 +1372,6 @@ - - - 44 @@ -1505,9 +1406,6 @@ - - - 44 @@ -1525,9 +1423,6 @@ - - - 44 @@ -1562,9 +1457,6 @@ - - - 44 @@ -1582,9 +1474,6 @@ - - - -8 20 @@ -1605,9 +1494,6 @@ - - - 270 @@ -1746,9 +1632,6 @@ - - - 83 377 @@ -1768,9 +1651,6 @@ - - - 104 @@ -1806,9 +1686,6 @@ - - - 44 @@ -1843,9 +1720,6 @@ - - - 44 @@ -1863,9 +1737,6 @@ - - - 44 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12200-12299.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12200-12299.xml index 0b7e8096ff..fa7165d4bb 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12200-12299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12200-12299.xml @@ -13,9 +13,6 @@ - - - 44 @@ -34,9 +31,6 @@ - - - 83 377 @@ -73,9 +67,6 @@ - - - 52 236 @@ -95,9 +86,6 @@ - - - 166 @@ -116,9 +104,6 @@ - - - 52 236 @@ -138,9 +123,6 @@ - - - 107 @@ -158,9 +140,6 @@ - - - 46 @@ -195,9 +174,6 @@ - - - 46 @@ -234,9 +210,6 @@ - - - 139 665 @@ -255,9 +228,6 @@ - - - 46 @@ -292,9 +262,6 @@ - - - 46 @@ -312,9 +279,6 @@ - - - -8 20 @@ -352,9 +316,6 @@ - - - 171 @@ -408,9 +369,6 @@ - - - 107 @@ -464,9 +422,6 @@ - - - 139 665 @@ -502,9 +457,6 @@ - - - -8 20 @@ -542,9 +494,6 @@ - - - 171 @@ -633,9 +582,6 @@ - - - 86 409 @@ -655,9 +601,6 @@ - - - 278 @@ -693,9 +636,6 @@ - - - 53 256 @@ -714,9 +654,6 @@ - - - 46 @@ -751,9 +688,6 @@ - - - 46 @@ -789,9 +723,6 @@ - - - 46 @@ -826,9 +757,6 @@ - - - 46 @@ -847,9 +775,6 @@ - - - 86 409 @@ -869,9 +794,6 @@ - - - 278 @@ -907,9 +829,6 @@ - - - 53 256 @@ -928,9 +847,6 @@ - - - 49 @@ -965,9 +881,6 @@ - - - 49 @@ -1004,9 +917,6 @@ - - - 147 718 @@ -1025,9 +935,6 @@ - - - 49 @@ -1062,9 +969,6 @@ - - - 49 @@ -1100,9 +1004,6 @@ - - - 293 @@ -1156,9 +1057,6 @@ - - - 147 718 @@ -1212,9 +1110,6 @@ - - - 293 @@ -1233,9 +1128,6 @@ - - - 293 @@ -1289,9 +1181,6 @@ - - - 147 718 @@ -1327,9 +1216,6 @@ - - - -8 20 @@ -1367,9 +1253,6 @@ - - - 293 @@ -1387,9 +1270,6 @@ - - - 49 @@ -1424,9 +1304,6 @@ - - - 49 @@ -1463,9 +1340,6 @@ - - - 147 718 @@ -1484,9 +1358,6 @@ - - - 49 @@ -1521,9 +1392,6 @@ - - - 49 @@ -1541,9 +1409,6 @@ - - - -8 20 @@ -1666,9 +1531,6 @@ - - - 55 @@ -1687,9 +1549,6 @@ - - - 166 866 @@ -1708,9 +1567,6 @@ - - - 55 @@ -1728,9 +1584,6 @@ - - - 83 @@ -1834,9 +1687,6 @@ - - - 55 @@ -1855,9 +1705,6 @@ - - - 157 866 @@ -1876,9 +1723,6 @@ - - - 55 @@ -1896,9 +1740,6 @@ - - - 83 @@ -1917,9 +1758,6 @@ - - - 121 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12300-12399.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12300-12399.xml index 124f6a2c77..a566a8a395 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12300-12399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12300-12399.xml @@ -13,9 +13,6 @@ - - - 55 @@ -33,9 +30,6 @@ - - - 55 @@ -53,9 +47,6 @@ - - - -8 20 @@ -74,9 +65,6 @@ - - - 83 @@ -95,9 +83,6 @@ - - - 193 @@ -116,9 +101,6 @@ - - - 128 @@ -136,9 +118,6 @@ - - - 55 @@ -156,9 +135,6 @@ - - - 55 @@ -176,9 +152,6 @@ - - - -8 20 @@ -198,9 +171,6 @@ - - - 83 @@ -219,9 +189,6 @@ - - - 205 @@ -1373,7 +1340,6 @@ - 175 @@ -1394,7 +1360,6 @@ - 175 @@ -1416,7 +1381,6 @@ - @@ -1442,7 +1406,6 @@ - 397 @@ -1464,7 +1427,6 @@ - 175 @@ -1485,7 +1447,6 @@ - 175 @@ -1507,7 +1468,6 @@ - 175 @@ -1529,7 +1489,6 @@ - 175 @@ -1551,7 +1510,6 @@ - @@ -1576,7 +1534,6 @@ - 175 @@ -1598,7 +1555,6 @@ - 153 @@ -1620,7 +1576,6 @@ - 175 @@ -1641,7 +1596,6 @@ - @@ -1666,7 +1620,6 @@ - 175 @@ -1688,7 +1641,6 @@ - 153 @@ -1710,7 +1662,6 @@ - 194 @@ -1731,7 +1682,6 @@ - 194 @@ -1752,7 +1702,6 @@ - @@ -1777,7 +1726,6 @@ - 194 @@ -1799,7 +1747,6 @@ - 194 @@ -1821,7 +1768,6 @@ - 194 @@ -1843,7 +1789,6 @@ - 194 @@ -1865,7 +1810,6 @@ - 194 @@ -1887,7 +1831,6 @@ - 194 @@ -1909,7 +1852,6 @@ - 170 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12400-12499.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12400-12499.xml index 912e372f3d..660713d58a 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12400-12499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12400-12499.xml @@ -11,7 +11,6 @@ - 194 @@ -33,7 +32,6 @@ - @@ -58,7 +56,6 @@ - 194 @@ -80,7 +77,6 @@ - 400 @@ -102,7 +98,6 @@ - @@ -127,7 +122,6 @@ - 213 @@ -149,7 +143,6 @@ - @@ -174,7 +167,6 @@ - @@ -199,7 +191,6 @@ - 213 @@ -221,7 +212,6 @@ - 213 @@ -243,7 +233,6 @@ - 186 @@ -265,7 +254,6 @@ - 213 @@ -286,7 +274,6 @@ - 213 @@ -308,7 +295,6 @@ - 213 @@ -330,7 +316,6 @@ - 440 @@ -352,7 +337,6 @@ - 213 @@ -373,7 +357,6 @@ - 213 @@ -395,7 +378,6 @@ - @@ -420,7 +402,6 @@ - 213 @@ -442,7 +423,6 @@ - @@ -467,7 +447,6 @@ - 232 @@ -488,7 +467,6 @@ - @@ -513,7 +491,6 @@ - 232 @@ -535,7 +512,6 @@ - 232 @@ -557,7 +533,6 @@ - 232 @@ -578,7 +553,6 @@ - 232 @@ -600,7 +574,6 @@ - 232 @@ -622,7 +595,6 @@ - 232 @@ -643,7 +615,6 @@ - @@ -668,7 +639,6 @@ - 203 @@ -690,7 +660,6 @@ - 232 @@ -713,7 +682,6 @@ - 528 @@ -735,7 +703,6 @@ - 232 @@ -757,7 +724,6 @@ - 220 @@ -779,7 +745,6 @@ - 251 @@ -801,7 +766,6 @@ - 251 @@ -823,7 +787,6 @@ - @@ -848,7 +811,6 @@ - 251 @@ -870,7 +832,6 @@ - @@ -896,7 +857,6 @@ - 571 @@ -918,7 +878,6 @@ - 251 @@ -939,7 +898,6 @@ - 251 @@ -961,7 +919,6 @@ - 251 @@ -982,7 +939,6 @@ - @@ -1007,7 +963,6 @@ - 251 @@ -1029,7 +984,6 @@ - 251 @@ -1050,7 +1004,6 @@ - 251 @@ -1072,7 +1025,6 @@ - @@ -1097,7 +1049,6 @@ - 281 @@ -1120,7 +1071,6 @@ - 581 @@ -1142,7 +1092,6 @@ - 281 @@ -1164,7 +1113,6 @@ - @@ -1189,7 +1137,6 @@ - 281 @@ -1211,7 +1158,6 @@ - @@ -1236,7 +1182,6 @@ - 281 @@ -1258,7 +1203,6 @@ - 281 @@ -1280,7 +1224,6 @@ - 246 @@ -1302,7 +1245,6 @@ - 281 @@ -1324,7 +1266,6 @@ - 281 @@ -1345,7 +1286,6 @@ - 281 @@ -1366,7 +1306,6 @@ - @@ -1391,7 +1330,6 @@ - 291 @@ -1413,7 +1351,6 @@ - @@ -1438,7 +1375,6 @@ - 333 @@ -1460,7 +1396,6 @@ - 333 @@ -1483,7 +1418,6 @@ - 654 @@ -1505,7 +1439,6 @@ - 333 @@ -1526,7 +1459,6 @@ - 333 @@ -1547,7 +1479,6 @@ - 333 @@ -1569,7 +1500,6 @@ - 333 @@ -1591,7 +1521,6 @@ - 333 @@ -1613,7 +1542,6 @@ - @@ -1638,7 +1566,6 @@ - 333 @@ -1659,7 +1586,6 @@ - 333 @@ -1681,7 +1607,6 @@ - 318 @@ -1703,7 +1628,6 @@ - 363 @@ -1724,7 +1648,6 @@ - @@ -1749,7 +1672,6 @@ - @@ -1774,7 +1696,6 @@ - 363 @@ -1796,7 +1717,6 @@ - 689 @@ -1818,7 +1738,6 @@ - @@ -1843,7 +1762,6 @@ - 363 @@ -1865,7 +1783,6 @@ - 363 @@ -1887,7 +1804,6 @@ - 363 @@ -1909,7 +1825,6 @@ - 363 @@ -1930,7 +1845,6 @@ - 363 @@ -2035,9 +1949,6 @@ - - - 98 @@ -2052,9 +1963,6 @@ - - - 41 @@ -2083,9 +1991,6 @@ - - - 41 @@ -2100,9 +2005,6 @@ - - - 41 @@ -2131,9 +2033,6 @@ - - - 41 @@ -2148,9 +2047,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12500-12599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12500-12599.xml index 9b12166b93..e6f6e61315 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12500-12599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12500-12599.xml @@ -24,9 +24,6 @@ - - - 157 @@ -41,9 +38,6 @@ - - - 41 @@ -72,9 +66,6 @@ - - - 41 @@ -103,9 +94,6 @@ - - - 78 345 @@ -121,9 +109,6 @@ - - - 41 @@ -152,9 +137,6 @@ - - - 41 @@ -183,9 +165,6 @@ - - - -8 20 @@ -202,9 +181,6 @@ - - - 98 @@ -219,9 +195,6 @@ - - - 157 @@ -236,9 +209,6 @@ - - - 78 345 @@ -254,9 +224,6 @@ - - - 49 216 @@ -272,9 +239,6 @@ - - - 44 @@ -303,9 +267,6 @@ - - - 44 @@ -320,9 +281,6 @@ - - - 44 @@ -351,9 +309,6 @@ - - - 44 @@ -368,9 +323,6 @@ - - - -8 20 @@ -387,9 +339,6 @@ - - - 270 @@ -488,9 +437,6 @@ - - - 83 377 @@ -506,9 +452,6 @@ - - - 104 @@ -537,9 +480,6 @@ - - - 44 @@ -568,9 +508,6 @@ - - - 44 @@ -585,9 +522,6 @@ - - - 44 @@ -616,9 +550,6 @@ - - - 44 @@ -633,9 +564,6 @@ - - - 83 377 @@ -665,9 +593,6 @@ - - - 52 236 @@ -683,9 +608,6 @@ - - - 166 @@ -700,9 +622,6 @@ - - - 52 236 @@ -718,9 +637,6 @@ - - - 171 @@ -735,9 +651,6 @@ - - - 46 @@ -766,9 +679,6 @@ - - - 46 @@ -797,9 +707,6 @@ - - - 139 665 @@ -815,9 +722,6 @@ - - - 46 @@ -846,9 +750,6 @@ - - - 46 @@ -863,9 +764,6 @@ - - - 69 @@ -894,9 +792,6 @@ - - - 171 @@ -925,9 +820,6 @@ - - - 107 @@ -970,9 +862,6 @@ - - - 139 665 @@ -1002,9 +891,6 @@ - - - -8 20 @@ -1035,9 +921,6 @@ - - - 171 @@ -1108,9 +991,6 @@ - - - 86 409 @@ -1126,9 +1006,6 @@ - - - 278 @@ -1157,9 +1034,6 @@ - - - 53 256 @@ -1189,9 +1063,6 @@ - - - 46 @@ -1220,9 +1091,6 @@ - - - 46 @@ -1251,9 +1119,6 @@ - - - 46 @@ -1282,9 +1147,6 @@ - - - 46 @@ -1299,9 +1161,6 @@ - - - 86 409 @@ -1317,9 +1176,6 @@ - - - 278 @@ -1348,9 +1204,6 @@ - - - 53 256 @@ -1366,9 +1219,6 @@ - - - 49 @@ -1397,9 +1247,6 @@ - - - 49 @@ -1428,9 +1275,6 @@ - - - 147 718 @@ -1446,9 +1290,6 @@ - - - 49 @@ -1477,9 +1318,6 @@ - - - 49 @@ -1508,9 +1346,6 @@ - - - 293 @@ -1553,9 +1388,6 @@ - - - 147 718 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12600-12699.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12600-12699.xml index b308b72c81..73a17fcecc 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12600-12699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12600-12699.xml @@ -10,9 +10,6 @@ - - - 293 @@ -27,9 +24,6 @@ - - - 293 @@ -72,9 +66,6 @@ - - - 147 718 @@ -104,9 +95,6 @@ - - - -8 20 @@ -137,9 +125,6 @@ - - - 293 @@ -154,9 +139,6 @@ - - - 49 @@ -185,9 +167,6 @@ - - - 49 @@ -216,9 +195,6 @@ - - - 147 718 @@ -234,9 +210,6 @@ - - - 49 @@ -265,9 +238,6 @@ - - - 49 @@ -282,9 +252,6 @@ - - - -8 20 @@ -368,9 +335,6 @@ - - - 55 @@ -385,9 +349,6 @@ - - - 866 @@ -402,9 +363,6 @@ - - - 55 @@ -419,9 +377,6 @@ - - - 83 @@ -489,9 +444,6 @@ - - - 55 @@ -506,9 +458,6 @@ - - - 866 @@ -523,9 +472,6 @@ - - - 55 @@ -540,9 +486,6 @@ - - - 83 @@ -557,9 +500,6 @@ - - - @@ -571,9 +511,6 @@ - - - 55 @@ -588,9 +525,6 @@ - - - 55 @@ -605,9 +539,6 @@ - - - -8 20 @@ -623,9 +554,6 @@ - - - 83 @@ -640,9 +568,6 @@ - - - @@ -654,9 +579,6 @@ - - - @@ -668,9 +590,6 @@ - - - 55 @@ -685,9 +604,6 @@ - - - 55 @@ -702,9 +618,6 @@ - - - -8 20 @@ -720,9 +633,6 @@ - - - 83 @@ -737,9 +647,6 @@ - - - @@ -751,9 +658,6 @@ - - - 141 @@ -768,9 +672,6 @@ - - - 61 @@ -785,9 +686,6 @@ - - - 61 @@ -980,9 +878,6 @@ - - - 61 @@ -997,9 +892,6 @@ - - - 226 @@ -1094,9 +986,6 @@ - - - -8 20 @@ -1113,9 +1002,6 @@ - - - 61 @@ -1130,9 +1016,6 @@ - - - 592 @@ -1227,9 +1110,6 @@ - - - 92 @@ -1339,9 +1219,6 @@ - - - 113 592 @@ -1441,9 +1318,6 @@ - - - @@ -1523,9 +1397,6 @@ - - - 92 @@ -1540,9 +1411,6 @@ - - - 71 370 @@ -1558,9 +1426,6 @@ - - - 134 @@ -1575,9 +1440,6 @@ - - - 61 @@ -1592,9 +1454,6 @@ - - - 61 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12700-12799.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12700-12799.xml index ffdd991e8d..4360e208c6 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12700-12799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12700-12799.xml @@ -38,9 +38,6 @@ - - - 61 @@ -55,9 +52,6 @@ - - - 214 @@ -72,9 +66,6 @@ - - - -8 20 @@ -91,9 +82,6 @@ - - - 61 @@ -108,9 +96,6 @@ - - - 92 @@ -125,9 +110,6 @@ - - - 107 592 @@ -143,9 +125,6 @@ - - - 92 @@ -160,9 +139,6 @@ - - - 67 370 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12800-12899.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12800-12899.xml index 9e12f0f348..09ecf04149 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12800-12899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12800-12899.xml @@ -357,9 +357,6 @@ - - - -8 13 @@ -380,9 +377,6 @@ - - - -8 15 @@ -404,9 +398,6 @@ - - - -8 17 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/12900-12999.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/12900-12999.xml index e6211c3bac..fbb5ef2000 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/12900-12999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/12900-12999.xml @@ -3232,9 +3232,6 @@ - - - @@ -3277,9 +3274,6 @@ - - - @@ -3322,9 +3316,6 @@ - - - @@ -3367,9 +3358,6 @@ - - - @@ -3412,9 +3400,6 @@ - - - @@ -3457,9 +3442,6 @@ - - - @@ -3502,9 +3484,6 @@ - - - @@ -3547,9 +3526,6 @@ - - - @@ -3589,9 +3565,6 @@ - - - 69 @@ -3628,9 +3601,6 @@ - - - 69 @@ -3667,9 +3637,6 @@ - - - 73 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/13000-13099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/13000-13099.xml index 2c1987614f..1998dba1ff 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/13000-13099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/13000-13099.xml @@ -32,9 +32,6 @@ - - - 73 @@ -1708,9 +1705,6 @@ - - - -8 20 @@ -1732,9 +1726,6 @@ - - - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/13100-13199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/13100-13199.xml index 146a54c32c..43608bc4e3 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/13100-13199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/13100-13199.xml @@ -40,9 +40,6 @@ - - - -8 20 @@ -793,9 +790,6 @@ - - - 101 @@ -832,9 +826,6 @@ - - - 101 @@ -853,9 +844,6 @@ - - - 101 @@ -892,9 +880,6 @@ - - - 101 @@ -914,9 +899,6 @@ - - - 101 @@ -955,9 +937,6 @@ - - - 101 @@ -977,9 +956,6 @@ - - - 101 @@ -999,9 +975,6 @@ - - - 101 @@ -1021,9 +994,6 @@ - - - 101 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/13400-13499.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/13400-13499.xml index fd67410fc2..048c6ca98e 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/13400-13499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/13400-13499.xml @@ -691,9 +691,6 @@ - - - 250 @@ -734,9 +731,6 @@ - - - 125 637 @@ -758,9 +752,6 @@ - - - 250 @@ -801,9 +792,6 @@ - - - 125 637 @@ -825,9 +813,6 @@ - - - 156 @@ -847,9 +832,6 @@ - - - 68 @@ -869,9 +851,6 @@ - - - 68 @@ -950,9 +929,6 @@ - - - 78 415 @@ -973,9 +949,6 @@ - - - 68 @@ -995,9 +968,6 @@ - - - 68 @@ -1038,9 +1008,6 @@ - - - 156 @@ -1060,9 +1027,6 @@ - - - 68 @@ -1082,9 +1046,6 @@ - - - 68 @@ -1163,9 +1124,6 @@ - - - 78 415 @@ -1186,9 +1144,6 @@ - - - 68 @@ -1208,9 +1163,6 @@ - - - 68 @@ -1674,9 +1626,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/13500-13599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/13500-13599.xml index 3affd3736c..b622b6bd26 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/13500-13599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/13500-13599.xml @@ -500,9 +500,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/13800-13899.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/13800-13899.xml index a643ead3e4..6e8c7d163e 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/13800-13899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/13800-13899.xml @@ -1680,9 +1680,6 @@ - - - -8 13 @@ -1704,9 +1701,6 @@ - - - -8 15 @@ -1729,9 +1723,6 @@ - - - -8 17 @@ -1748,9 +1739,6 @@ - - - 2 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/13900-13999.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/13900-13999.xml index 8abab1e589..afdde9f359 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/13900-13999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/13900-13999.xml @@ -1312,9 +1312,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/14100-14199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/14100-14199.xml index 92b1227211..37ef7b5a01 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/14100-14199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/14100-14199.xml @@ -137,9 +137,6 @@ - - - 236 @@ -182,9 +179,6 @@ - - - 118 637 @@ -207,9 +201,6 @@ - - - 148 @@ -230,9 +221,6 @@ - - - 68 @@ -253,9 +241,6 @@ - - - 68 @@ -276,9 +261,6 @@ - - - -8 20 @@ -363,9 +345,6 @@ - - - 74 415 @@ -387,9 +366,6 @@ - - - 68 @@ -410,9 +386,6 @@ - - - 68 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/14500-14599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/14500-14599.xml index 01b4df43fa..a7179e44d0 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/14500-14599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/14500-14599.xml @@ -845,9 +845,6 @@ - - - @@ -902,9 +899,6 @@ - - - @@ -933,9 +927,6 @@ - - - @@ -990,9 +981,6 @@ - - - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/14700-14799.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/14700-14799.xml index 0dac71f4c0..3a810ee49d 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/14700-14799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/14700-14799.xml @@ -1736,9 +1736,6 @@ - - - -8 20 @@ -1869,9 +1866,6 @@ - - - -8 16 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/14900-14999.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/14900-14999.xml index 177bbddfaf..3410fc3552 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/14900-14999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/14900-14999.xml @@ -1431,9 +1431,6 @@ - - - 139 665 @@ -1478,9 +1475,6 @@ - - - 46 @@ -1503,9 +1497,6 @@ - - - 46 @@ -1527,9 +1518,6 @@ - - - -8 20 @@ -1555,9 +1543,6 @@ - - - 127 561 @@ -1602,9 +1587,6 @@ - - - 41 @@ -1627,9 +1609,6 @@ - - - 41 @@ -1651,9 +1630,6 @@ - - - -8 20 @@ -1678,9 +1654,6 @@ - - - 60 225 @@ -1704,9 +1677,6 @@ - - - 37 141 @@ -1772,9 +1742,6 @@ - - - 52 169 @@ -1798,9 +1765,6 @@ - - - 32 105 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/15000-15099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/15000-15099.xml index 8e5b0fee37..65b8e67965 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/15000-15099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/15000-15099.xml @@ -62,9 +62,6 @@ - - - 44 @@ -109,9 +106,6 @@ - - - 44 @@ -157,9 +151,6 @@ - - - 270 @@ -181,9 +172,6 @@ - - - -8 20 @@ -316,9 +304,6 @@ - - - 239 @@ -382,9 +367,6 @@ - - - -8 20 @@ -495,9 +477,6 @@ - - - 103 @@ -520,9 +499,6 @@ - - - 64 @@ -607,9 +583,6 @@ - - - -8 20 @@ -635,9 +608,6 @@ - - - 293 @@ -681,9 +651,6 @@ - - - 49 @@ -706,9 +673,6 @@ - - - 49 @@ -730,9 +694,6 @@ - - - -8 20 @@ -2741,9 +2702,6 @@ - - - 139 665 @@ -2788,9 +2746,6 @@ - - - 46 @@ -2813,9 +2768,6 @@ - - - 46 @@ -2837,9 +2789,6 @@ - - - -8 20 @@ -2865,9 +2814,6 @@ - - - 127 561 @@ -2912,9 +2858,6 @@ - - - 41 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/15100-15199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/15100-15199.xml index 515795d619..e3f27f2a9a 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/15100-15199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/15100-15199.xml @@ -18,9 +18,6 @@ - - - 41 @@ -42,9 +39,6 @@ - - - -8 20 @@ -69,9 +63,6 @@ - - - 60 225 @@ -95,9 +86,6 @@ - - - 37 141 @@ -163,9 +151,6 @@ - - - 52 169 @@ -189,9 +174,6 @@ - - - 32 105 @@ -389,9 +371,6 @@ - - - 44 @@ -436,9 +415,6 @@ - - - 44 @@ -484,9 +460,6 @@ - - - 270 @@ -508,9 +481,6 @@ - - - -8 20 @@ -643,9 +613,6 @@ - - - 239 @@ -709,9 +676,6 @@ - - - -8 20 @@ -822,9 +786,6 @@ - - - 103 @@ -847,9 +808,6 @@ - - - 64 @@ -934,9 +892,6 @@ - - - -8 20 @@ -962,9 +917,6 @@ - - - 293 @@ -1008,9 +960,6 @@ - - - 49 @@ -1033,9 +982,6 @@ - - - 49 @@ -1057,9 +1003,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/15500-15599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/15500-15599.xml index 3ad8421f0e..74e2133679 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/15500-15599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/15500-15599.xml @@ -1645,9 +1645,6 @@ - - - 110 @@ -1684,9 +1681,6 @@ - - - 110 @@ -1707,9 +1701,6 @@ - - - 272 @@ -1750,9 +1741,6 @@ - - - 136 661 @@ -1774,9 +1762,6 @@ - - - 170 @@ -1817,9 +1802,6 @@ - - - 85 439 @@ -1840,9 +1822,6 @@ - - - 74 @@ -1881,9 +1860,6 @@ - - - 74 @@ -1903,9 +1879,6 @@ - - - 74 @@ -1944,9 +1917,6 @@ - - - 74 @@ -1966,9 +1936,6 @@ - - - -8 20 @@ -1991,9 +1958,6 @@ - - - -8 21 @@ -2013,9 +1977,6 @@ - - - 107 @@ -2052,9 +2013,6 @@ - - - 107 @@ -2075,9 +2033,6 @@ - - - 263 @@ -2118,9 +2073,6 @@ - - - 132 649 @@ -2142,9 +2094,6 @@ - - - 164 @@ -2185,9 +2134,6 @@ - - - 82 427 @@ -2208,9 +2154,6 @@ - - - 71 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/15600-15699.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/15600-15699.xml index 2af005f5d3..ac57d41038 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/15600-15699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/15600-15699.xml @@ -15,9 +15,6 @@ - - - 71 @@ -37,9 +34,6 @@ - - - 71 @@ -78,9 +72,6 @@ - - - 71 @@ -100,9 +91,6 @@ - - - -8 20 @@ -125,9 +113,6 @@ - - - -8 19 @@ -147,9 +132,6 @@ - - - 96 @@ -186,9 +168,6 @@ - - - 96 @@ -209,9 +188,6 @@ - - - 238 @@ -252,9 +228,6 @@ - - - 119 614 @@ -276,9 +249,6 @@ - - - 149 @@ -319,9 +289,6 @@ - - - 74 392 @@ -342,9 +309,6 @@ - - - 64 @@ -383,9 +347,6 @@ - - - 64 @@ -405,9 +366,6 @@ - - - 64 @@ -446,9 +404,6 @@ - - - 64 @@ -468,9 +423,6 @@ - - - -8 20 @@ -493,9 +445,6 @@ - - - -8 16 @@ -1769,9 +1718,6 @@ - - - 96 @@ -1810,9 +1756,6 @@ - - - 96 @@ -1834,9 +1777,6 @@ - - - 225 @@ -1879,9 +1819,6 @@ - - - 112 614 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/15700-15799.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/15700-15799.xml index 9780f3bd6d..54c8cdb592 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/15700-15799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/15700-15799.xml @@ -17,9 +17,6 @@ - - - 141 @@ -62,9 +59,6 @@ - - - 70 392 @@ -86,9 +80,6 @@ - - - 64 @@ -129,9 +120,6 @@ - - - 64 @@ -152,9 +140,6 @@ - - - 64 @@ -195,9 +180,6 @@ - - - 64 @@ -219,9 +201,6 @@ - - - -8 16 @@ -243,9 +222,6 @@ - - - -8 20 @@ -538,9 +514,6 @@ - - - 110 @@ -579,9 +552,6 @@ - - - 110 @@ -603,9 +573,6 @@ - - - 257 @@ -648,9 +615,6 @@ - - - 129 661 @@ -673,9 +637,6 @@ - - - 161 @@ -718,9 +679,6 @@ - - - 80 439 @@ -742,9 +700,6 @@ - - - 74 @@ -785,9 +740,6 @@ - - - 74 @@ -808,9 +760,6 @@ - - - 74 @@ -851,9 +800,6 @@ - - - 74 @@ -874,9 +820,6 @@ - - - -8 20 @@ -900,9 +843,6 @@ - - - -8 21 @@ -923,9 +863,6 @@ - - - 107 @@ -964,9 +901,6 @@ - - - 107 @@ -988,9 +922,6 @@ - - - 249 @@ -1033,9 +964,6 @@ - - - 124 649 @@ -1058,9 +986,6 @@ - - - 156 @@ -1103,9 +1028,6 @@ - - - 78 427 @@ -1127,9 +1049,6 @@ - - - 71 @@ -1170,9 +1089,6 @@ - - - 71 @@ -1193,9 +1109,6 @@ - - - 71 @@ -1236,9 +1149,6 @@ - - - 71 @@ -1259,9 +1169,6 @@ - - - -8 20 @@ -1285,9 +1192,6 @@ - - - -8 19 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/16000-16099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/16000-16099.xml index 99399ff07e..63607685ad 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/16000-16099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/16000-16099.xml @@ -1088,7 +1088,6 @@ - @@ -1113,7 +1112,6 @@ - @@ -1138,7 +1136,6 @@ - @@ -1163,7 +1160,6 @@ - @@ -1188,7 +1184,6 @@ - @@ -1213,7 +1208,6 @@ - @@ -1238,7 +1232,6 @@ - @@ -1263,7 +1256,6 @@ - @@ -1288,7 +1280,6 @@ - @@ -1313,7 +1304,6 @@ - @@ -1338,7 +1328,6 @@ - @@ -1363,7 +1352,6 @@ - @@ -1388,7 +1376,6 @@ - @@ -1413,7 +1400,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/16100-16199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/16100-16199.xml index 2a4af8d914..ae4e86ba9f 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/16100-16199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/16100-16199.xml @@ -1638,9 +1638,6 @@ - - - @@ -1697,9 +1694,6 @@ - - - @@ -1729,9 +1723,6 @@ - - - @@ -1788,9 +1779,6 @@ - - - @@ -1820,9 +1808,6 @@ - - - @@ -1879,9 +1864,6 @@ - - - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/16200-16299.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/16200-16299.xml index 8dfa4e3ffd..dcc68608d0 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/16200-16299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/16200-16299.xml @@ -895,9 +895,6 @@ - - - 96 @@ -926,9 +923,6 @@ - - - 96 @@ -943,9 +937,6 @@ - - - 225 @@ -974,9 +965,6 @@ - - - 112 614 @@ -992,9 +980,6 @@ - - - 141 @@ -1023,9 +1008,6 @@ - - - 70 392 @@ -1041,9 +1023,6 @@ - - - 64 @@ -1072,9 +1051,6 @@ - - - 64 @@ -1089,9 +1065,6 @@ - - - 64 @@ -1120,9 +1093,6 @@ - - - 64 @@ -1137,9 +1107,6 @@ - - - -8 20 @@ -1156,9 +1123,6 @@ - - - -8 @@ -1173,9 +1137,6 @@ - - - 101 @@ -1204,9 +1165,6 @@ - - - 101 @@ -1221,9 +1179,6 @@ - - - 250 @@ -1252,9 +1207,6 @@ - - - 125 637 @@ -1270,9 +1222,6 @@ - - - 156 @@ -1301,9 +1250,6 @@ - - - 78 415 @@ -1319,9 +1265,6 @@ - - - 68 @@ -1350,9 +1293,6 @@ - - - 68 @@ -1367,9 +1307,6 @@ - - - 68 @@ -1398,9 +1335,6 @@ - - - 68 @@ -1415,9 +1349,6 @@ - - - -8 20 @@ -1434,9 +1365,6 @@ - - - -8 @@ -1451,9 +1379,6 @@ - - - 96 @@ -1482,9 +1407,6 @@ - - - 96 @@ -1499,9 +1421,6 @@ - - - 238 @@ -1530,9 +1449,6 @@ - - - 119 614 @@ -1548,9 +1464,6 @@ - - - 149 @@ -1579,9 +1492,6 @@ - - - 74 392 @@ -1597,9 +1507,6 @@ - - - 64 @@ -1628,9 +1535,6 @@ - - - 64 @@ -1645,9 +1549,6 @@ - - - 64 @@ -1676,9 +1577,6 @@ - - - 64 @@ -1693,9 +1591,6 @@ - - - -8 20 @@ -1712,9 +1607,6 @@ - - - -8 20 @@ -1731,9 +1623,6 @@ - - - 101 @@ -1762,9 +1651,6 @@ - - - 101 @@ -1779,9 +1665,6 @@ - - - 250 @@ -1810,9 +1693,6 @@ - - - 125 637 @@ -1828,9 +1708,6 @@ - - - 156 @@ -1859,9 +1736,6 @@ - - - 78 415 @@ -1877,9 +1751,6 @@ - - - 68 @@ -1908,9 +1779,6 @@ - - - 68 @@ -1925,9 +1793,6 @@ - - - 68 @@ -1956,9 +1821,6 @@ - - - 68 @@ -1973,9 +1835,6 @@ - - - -8 20 @@ -1992,9 +1851,6 @@ - - - -8 17 @@ -2015,9 +1871,6 @@ - - - @@ -2062,9 +1915,6 @@ - - - @@ -2089,9 +1939,6 @@ - - - @@ -2140,9 +1987,6 @@ - - - @@ -2168,9 +2012,6 @@ - - - @@ -2219,9 +2060,6 @@ - - - @@ -2246,9 +2084,6 @@ - - - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/16300-16399.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/16300-16399.xml index 664e7529d5..db964adb8c 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/16300-16399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/16300-16399.xml @@ -16,9 +16,6 @@ - - - @@ -42,9 +39,6 @@ - - - @@ -91,9 +85,6 @@ - - - @@ -117,9 +108,6 @@ - - - @@ -146,9 +134,6 @@ - - - @@ -172,9 +157,6 @@ - - - @@ -219,9 +201,6 @@ - - - @@ -246,9 +225,6 @@ - - - @@ -297,9 +273,6 @@ - - - @@ -325,9 +298,6 @@ - - - @@ -376,9 +346,6 @@ - - - @@ -403,9 +370,6 @@ - - - @@ -452,9 +416,6 @@ - - - @@ -478,9 +439,6 @@ - - - @@ -527,9 +485,6 @@ - - - @@ -553,9 +508,6 @@ - - - @@ -582,9 +534,6 @@ - - - @@ -608,9 +557,6 @@ - - - 96 @@ -649,9 +595,6 @@ - - - 96 @@ -673,9 +616,6 @@ - - - 225 @@ -718,9 +658,6 @@ - - - 112 614 @@ -743,9 +680,6 @@ - - - 141 @@ -788,9 +722,6 @@ - - - 70 392 @@ -812,9 +743,6 @@ - - - 64 @@ -855,9 +783,6 @@ - - - 64 @@ -878,9 +803,6 @@ - - - 64 @@ -921,9 +843,6 @@ - - - 64 @@ -944,9 +863,6 @@ - - - -8 20 @@ -970,9 +886,6 @@ - - - -8 16 @@ -993,9 +906,6 @@ - - - 101 @@ -1034,9 +944,6 @@ - - - 101 @@ -1058,9 +965,6 @@ - - - 250 @@ -1103,9 +1007,6 @@ - - - 125 637 @@ -1128,9 +1029,6 @@ - - - 148 @@ -1173,9 +1071,6 @@ - - - 74 415 @@ -1197,9 +1092,6 @@ - - - 68 @@ -1240,9 +1132,6 @@ - - - 68 @@ -1263,9 +1152,6 @@ - - - 68 @@ -1306,9 +1192,6 @@ - - - 68 @@ -1329,9 +1212,6 @@ - - - -8 20 @@ -1355,9 +1235,6 @@ - - - -8 17 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/16800-16899.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/16800-16899.xml index 2312c88b20..e9db990701 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/16800-16899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/16800-16899.xml @@ -15,9 +15,6 @@ - - - @@ -62,9 +59,6 @@ - - - @@ -89,9 +83,6 @@ - - - @@ -140,9 +131,6 @@ - - - @@ -168,9 +156,6 @@ - - - @@ -219,9 +204,6 @@ - - - @@ -246,9 +228,6 @@ - - - @@ -295,9 +274,6 @@ - - - @@ -321,9 +297,6 @@ - - - @@ -370,9 +343,6 @@ - - - @@ -697,9 +667,6 @@ - - - 139 665 @@ -744,9 +711,6 @@ - - - 46 @@ -769,9 +733,6 @@ - - - 46 @@ -793,9 +754,6 @@ - - - -8 20 @@ -821,9 +779,6 @@ - - - 127 561 @@ -868,9 +823,6 @@ - - - 41 @@ -893,9 +845,6 @@ - - - 41 @@ -917,9 +866,6 @@ - - - -8 20 @@ -944,9 +890,6 @@ - - - 60 225 @@ -970,9 +913,6 @@ - - - 37 141 @@ -1038,9 +978,6 @@ - - - 52 169 @@ -1064,9 +1001,6 @@ - - - 32 105 @@ -1264,9 +1198,6 @@ - - - 44 @@ -1311,9 +1242,6 @@ - - - 44 @@ -1359,9 +1287,6 @@ - - - 270 @@ -1383,9 +1308,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/16900-16999.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/16900-16999.xml index cb5c3dd14d..41d831106d 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/16900-16999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/16900-16999.xml @@ -40,9 +40,6 @@ - - - 239 @@ -106,9 +103,6 @@ - - - -8 20 @@ -219,9 +213,6 @@ - - - 103 @@ -244,9 +235,6 @@ - - - 64 @@ -331,9 +319,6 @@ - - - -8 20 @@ -359,9 +344,6 @@ - - - 293 @@ -405,9 +387,6 @@ - - - 49 @@ -430,9 +409,6 @@ - - - 49 @@ -454,9 +430,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/17000-17099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/17000-17099.xml index b84fd094bf..87ede767fb 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/17000-17099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/17000-17099.xml @@ -141,9 +141,6 @@ - - - 236 @@ -186,9 +183,6 @@ - - - 118 637 @@ -211,9 +205,6 @@ - - - 148 @@ -234,9 +225,6 @@ - - - 68 @@ -257,9 +245,6 @@ - - - 68 @@ -342,9 +327,6 @@ - - - 74 415 @@ -366,9 +348,6 @@ - - - 68 @@ -389,9 +368,6 @@ - - - 68 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/20200-20299.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/20200-20299.xml index abac18dcba..785c7c4468 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/20200-20299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/20200-20299.xml @@ -1676,9 +1676,6 @@ - - - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/20600-20699.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/20600-20699.xml index 9163940bdc..3d1b691835 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/20600-20699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/20600-20699.xml @@ -1015,9 +1015,6 @@ - - - -8 20 @@ -1063,9 +1060,6 @@ - - - 70 @@ -1088,9 +1082,6 @@ - - - 111 @@ -1168,9 +1159,6 @@ - - - 52 169 @@ -1194,9 +1182,6 @@ - - - 32 105 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/21700-21799.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/21700-21799.xml index c00f4b592a..b695984e56 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/21700-21799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/21700-21799.xml @@ -1523,9 +1523,6 @@ - - - 205 @@ -1550,9 +1547,6 @@ - - - 128 @@ -1645,9 +1639,6 @@ - - - -8 20 @@ -1813,9 +1804,6 @@ - - - 166 866 @@ -1958,9 +1946,6 @@ - - - 226 @@ -1985,9 +1970,6 @@ - - - 141 @@ -2080,9 +2062,6 @@ - - - -8 20 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/21800-21899.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/21800-21899.xml index 9e565ec791..6836e87778 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/21800-21899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/21800-21899.xml @@ -160,9 +160,6 @@ - - - 113 592 @@ -188,9 +185,6 @@ - - - 71 370 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/27400-27499.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/27400-27499.xml index 992a30e73c..d449034ecb 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/27400-27499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/27400-27499.xml @@ -943,127 +943,127 @@ + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/27500-27599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/27500-27599.xml index 156d96a1fb..5fd7484217 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/27500-27599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/27500-27599.xml @@ -3,138 +3,157 @@ + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + + - - + - + + - - + - + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/33800-33899.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/33800-33899.xml index f2a530b254..1d20185fdb 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/33800-33899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/33800-33899.xml @@ -100,9 +100,10 @@ - + + @@ -122,9 +123,10 @@ - + + @@ -144,9 +146,10 @@ - + + @@ -166,9 +169,10 @@ - + + @@ -188,9 +192,10 @@ - + + @@ -210,9 +215,10 @@ - + + @@ -232,9 +238,10 @@ - + + @@ -254,9 +261,10 @@ - + + @@ -276,9 +284,10 @@ - + + @@ -298,9 +307,10 @@ - + + @@ -320,9 +330,10 @@ - + + @@ -342,9 +353,10 @@ - + + @@ -363,9 +375,10 @@ - + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/35000-35099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/35000-35099.xml index 67ba30f0fa..1a52a0ccb4 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/35000-35099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/35000-35099.xml @@ -797,6 +797,7 @@ + 162 @@ -822,6 +823,7 @@ + @@ -847,6 +849,7 @@ + 270 @@ -870,6 +873,7 @@ + 108 @@ -893,6 +897,7 @@ + 108 @@ -915,6 +920,7 @@ + 162 @@ -940,6 +946,7 @@ + @@ -967,6 +974,7 @@ + 216 @@ -992,6 +1000,7 @@ + 108 @@ -1015,6 +1024,7 @@ + 108 @@ -1037,6 +1047,7 @@ + 162 @@ -1062,6 +1073,7 @@ + @@ -1088,6 +1100,7 @@ + 148 @@ -1112,6 +1125,7 @@ + 108 @@ -1135,6 +1149,7 @@ + 108 @@ -1157,6 +1172,7 @@ + 162 @@ -1182,6 +1198,7 @@ + @@ -1207,6 +1224,7 @@ + 270 @@ -1230,6 +1248,7 @@ + 108 @@ -1253,6 +1272,7 @@ + 108 @@ -1275,6 +1295,7 @@ + 162 @@ -1300,6 +1321,7 @@ + @@ -1327,6 +1349,7 @@ + 216 @@ -1352,6 +1375,7 @@ + 108 @@ -1375,6 +1399,7 @@ + 108 @@ -1397,6 +1422,7 @@ + 162 @@ -1422,6 +1448,7 @@ + @@ -1448,6 +1475,7 @@ + 148 @@ -1472,6 +1500,7 @@ + 108 @@ -1495,6 +1524,7 @@ + 108 @@ -1877,6 +1907,7 @@ + 162 @@ -1902,6 +1933,7 @@ + @@ -1927,6 +1959,7 @@ + 270 @@ -1950,6 +1983,7 @@ + 108 @@ -1973,6 +2007,7 @@ + 108 @@ -1995,6 +2030,7 @@ + 162 @@ -2020,6 +2056,7 @@ + @@ -2047,6 +2084,7 @@ + 216 @@ -2072,6 +2110,7 @@ + 108 @@ -2095,6 +2134,7 @@ + 108 @@ -2117,6 +2157,7 @@ + 162 @@ -2142,6 +2183,7 @@ + @@ -2168,6 +2210,7 @@ + 148 @@ -2192,6 +2235,7 @@ + 108 @@ -2215,6 +2259,7 @@ + 108 @@ -2242,6 +2287,7 @@ + @@ -2276,6 +2322,7 @@ + @@ -2309,6 +2356,7 @@ + @@ -2342,6 +2390,7 @@ + @@ -2376,6 +2425,7 @@ + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/35100-35199.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/35100-35199.xml index 08e3569e81..06546a0a65 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/35100-35199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/35100-35199.xml @@ -23,6 +23,7 @@ + @@ -58,6 +59,7 @@ + @@ -93,6 +95,7 @@ + @@ -127,6 +130,7 @@ + @@ -160,6 +164,7 @@ + @@ -194,6 +199,7 @@ + @@ -229,6 +235,7 @@ + @@ -262,6 +269,7 @@ + @@ -296,6 +304,7 @@ + @@ -331,6 +340,7 @@ + @@ -366,6 +376,7 @@ + @@ -401,6 +412,7 @@ + @@ -436,6 +448,7 @@ + @@ -470,6 +483,7 @@ + @@ -504,6 +518,7 @@ + @@ -538,6 +553,7 @@ + @@ -572,6 +588,7 @@ + @@ -606,6 +623,7 @@ + @@ -640,6 +658,7 @@ + @@ -675,6 +694,7 @@ + @@ -710,6 +730,7 @@ + @@ -745,6 +766,7 @@ + @@ -780,6 +802,7 @@ + @@ -815,6 +838,7 @@ + @@ -849,6 +873,7 @@ + @@ -884,6 +909,7 @@ + @@ -919,6 +945,7 @@ + @@ -956,6 +983,7 @@ + @@ -992,6 +1020,7 @@ + @@ -1028,6 +1057,7 @@ + @@ -1064,6 +1094,7 @@ + @@ -1101,6 +1132,7 @@ + @@ -1137,6 +1169,7 @@ + @@ -1172,6 +1205,7 @@ + @@ -1207,6 +1241,7 @@ + @@ -1241,6 +1276,7 @@ + @@ -1275,6 +1311,7 @@ + @@ -1310,6 +1347,7 @@ + @@ -1346,6 +1384,7 @@ + @@ -1381,6 +1420,7 @@ + @@ -1417,6 +1457,7 @@ + @@ -1453,6 +1494,7 @@ + @@ -1489,6 +1531,7 @@ + @@ -1523,6 +1566,7 @@ + @@ -1557,6 +1601,7 @@ + @@ -1591,6 +1636,7 @@ + @@ -1626,6 +1672,7 @@ + @@ -1661,6 +1708,7 @@ + @@ -1696,6 +1744,7 @@ + @@ -1731,6 +1780,7 @@ + @@ -1766,6 +1816,7 @@ + @@ -1800,6 +1851,7 @@ + @@ -1836,6 +1888,7 @@ + @@ -1872,6 +1925,7 @@ + @@ -1908,6 +1962,7 @@ + @@ -1943,6 +1998,7 @@ + @@ -1978,6 +2034,7 @@ + @@ -2013,6 +2070,7 @@ + @@ -2048,6 +2106,7 @@ + @@ -2083,6 +2142,7 @@ + @@ -2118,6 +2178,7 @@ + @@ -2154,6 +2215,7 @@ + @@ -2190,6 +2252,7 @@ + @@ -2226,6 +2289,7 @@ + @@ -2262,6 +2326,7 @@ + @@ -2298,6 +2363,7 @@ + @@ -2335,6 +2401,7 @@ + @@ -2372,6 +2439,7 @@ + @@ -2409,6 +2477,7 @@ + @@ -2446,6 +2515,7 @@ + @@ -2483,6 +2553,7 @@ + @@ -2520,6 +2591,7 @@ + @@ -2559,6 +2631,7 @@ + @@ -2597,6 +2670,7 @@ + @@ -2633,6 +2707,7 @@ + @@ -2671,6 +2746,7 @@ + @@ -2707,6 +2783,7 @@ + @@ -2741,6 +2818,7 @@ + @@ -2776,6 +2854,7 @@ + @@ -2814,6 +2893,7 @@ + @@ -2851,6 +2931,7 @@ + @@ -2886,6 +2967,7 @@ + @@ -2923,6 +3005,7 @@ + @@ -2960,6 +3043,7 @@ + @@ -2997,6 +3081,7 @@ + @@ -3032,6 +3117,7 @@ + @@ -3067,6 +3153,7 @@ + @@ -3102,6 +3189,7 @@ + @@ -3138,6 +3226,7 @@ + @@ -3174,6 +3263,7 @@ + @@ -3210,6 +3300,7 @@ + @@ -3246,6 +3337,7 @@ + @@ -3282,6 +3374,7 @@ + @@ -3318,6 +3411,7 @@ + @@ -3352,6 +3446,7 @@ + @@ -3385,6 +3480,7 @@ + @@ -3418,6 +3514,7 @@ + @@ -3452,6 +3549,7 @@ + @@ -3487,6 +3585,7 @@ + @@ -3522,6 +3621,7 @@ + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/35200-35299.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/35200-35299.xml index a09af089ab..aebe41ad6a 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/35200-35299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/35200-35299.xml @@ -23,6 +23,7 @@ + @@ -57,6 +58,7 @@ + @@ -90,6 +92,7 @@ + @@ -124,6 +127,7 @@ + @@ -159,6 +163,7 @@ + @@ -192,6 +197,7 @@ + @@ -226,6 +232,7 @@ + @@ -261,6 +268,7 @@ + @@ -296,6 +304,7 @@ + @@ -331,6 +340,7 @@ + @@ -366,6 +376,7 @@ + @@ -400,6 +411,7 @@ + @@ -434,6 +446,7 @@ + @@ -468,6 +481,7 @@ + @@ -502,6 +516,7 @@ + @@ -536,6 +551,7 @@ + @@ -570,6 +586,7 @@ + @@ -605,6 +622,7 @@ + @@ -640,6 +658,7 @@ + @@ -675,6 +694,7 @@ + @@ -710,6 +730,7 @@ + @@ -745,6 +766,7 @@ + @@ -780,6 +802,7 @@ + @@ -815,6 +838,7 @@ + @@ -850,6 +874,7 @@ + @@ -886,6 +911,7 @@ + @@ -922,6 +948,7 @@ + @@ -958,6 +985,7 @@ + @@ -994,6 +1022,7 @@ + @@ -1031,6 +1060,7 @@ + @@ -1067,6 +1097,7 @@ + @@ -1102,6 +1133,7 @@ + @@ -1137,6 +1169,7 @@ + @@ -1171,6 +1204,7 @@ + @@ -1205,6 +1239,7 @@ + @@ -1240,6 +1275,7 @@ + @@ -1276,6 +1312,7 @@ + @@ -1311,6 +1348,7 @@ + @@ -1347,6 +1385,7 @@ + @@ -1383,6 +1422,7 @@ + @@ -1419,6 +1459,7 @@ + @@ -1453,6 +1494,7 @@ + @@ -1487,6 +1529,7 @@ + @@ -1521,6 +1564,7 @@ + @@ -1556,6 +1600,7 @@ + @@ -1591,6 +1636,7 @@ + @@ -1626,6 +1672,7 @@ + @@ -1661,6 +1708,7 @@ + @@ -1696,6 +1744,7 @@ + @@ -1730,6 +1779,7 @@ + @@ -1766,6 +1816,7 @@ + @@ -1802,6 +1853,7 @@ + @@ -1838,6 +1890,7 @@ + @@ -1873,6 +1926,7 @@ + @@ -1908,6 +1962,7 @@ + @@ -1943,6 +1998,7 @@ + @@ -1978,6 +2034,7 @@ + @@ -2013,6 +2070,7 @@ + @@ -2048,6 +2106,7 @@ + @@ -2084,6 +2143,7 @@ + @@ -2120,6 +2180,7 @@ + @@ -2156,6 +2217,7 @@ + @@ -2192,6 +2254,7 @@ + @@ -2228,6 +2291,7 @@ + @@ -2264,6 +2328,7 @@ + @@ -2301,6 +2366,7 @@ + @@ -2338,6 +2404,7 @@ + @@ -2376,6 +2443,7 @@ + @@ -2413,6 +2481,7 @@ + @@ -2450,6 +2519,7 @@ + @@ -2488,6 +2558,7 @@ + @@ -2526,6 +2597,7 @@ + @@ -2563,6 +2635,7 @@ + @@ -2599,6 +2672,7 @@ + @@ -2635,6 +2709,7 @@ + @@ -2671,6 +2746,7 @@ + @@ -2706,6 +2782,7 @@ + @@ -2742,6 +2819,7 @@ + @@ -2779,6 +2857,7 @@ + @@ -2816,6 +2895,7 @@ + @@ -2853,6 +2933,7 @@ + @@ -2890,6 +2971,7 @@ + @@ -2927,6 +3009,7 @@ + @@ -2962,6 +3045,7 @@ + @@ -2997,6 +3081,7 @@ + @@ -3032,6 +3117,7 @@ + @@ -3068,6 +3154,7 @@ + @@ -3104,6 +3191,7 @@ + @@ -3140,6 +3228,7 @@ + @@ -3176,6 +3265,7 @@ + @@ -3212,6 +3302,7 @@ + @@ -3244,7 +3335,7 @@ 60 - + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/38800-38899.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/38800-38899.xml index 95f59c6ef3..c91251daec 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/38800-38899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/38800-38899.xml @@ -1188,9 +1188,9 @@ - - 3 - + + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/39500-39599.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/39500-39599.xml index 9129c01fdd..3be6ca0461 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/39500-39599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/39500-39599.xml @@ -1075,16 +1075,27 @@ - - + + + - + + + + + + + + + + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/45400-45499.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/45400-45499.xml index 51f5895a8f..d57c6038ab 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/45400-45499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/45400-45499.xml @@ -1069,7 +1069,6 @@ - @@ -1081,7 +1080,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/items/46000-46099.xml b/L2J_Mobius_Underground/dist/game/data/stats/items/46000-46099.xml index 2237a9d282..75bcfee4f9 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/items/46000-46099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/items/46000-46099.xml @@ -1120,7 +1120,6 @@ - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/npcs/19100-19199.xml b/L2J_Mobius_Underground/dist/game/data/stats/npcs/19100-19199.xml index 12e311fd5d..24f31c6c92 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/npcs/19100-19199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/npcs/19100-19199.xml @@ -1652,7 +1652,7 @@ - + HUMAN MALE @@ -1678,7 +1678,7 @@ - + HUMAN MALE @@ -1703,7 +1703,7 @@ - + ANIMAL MALE @@ -1728,7 +1728,7 @@ - + HUMAN MALE @@ -2196,7 +2196,7 @@ - + @@ -2807,7 +2807,7 @@ - + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/npcs/25600-25699.xml b/L2J_Mobius_Underground/dist/game/data/stats/npcs/25600-25699.xml index 19b1380d3b..52105c8a9e 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/npcs/25600-25699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/npcs/25600-25699.xml @@ -2931,7 +2931,7 @@ - + @@ -2969,7 +2969,7 @@ - + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/npcs/33500-33599.xml b/L2J_Mobius_Underground/dist/game/data/stats/npcs/33500-33599.xml index 887b31a4b5..c15aa88677 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/npcs/33500-33599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/npcs/33500-33599.xml @@ -1719,7 +1719,7 @@ - + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00000-00099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00000-00099.xml index 25b53e2714..8f09b90786 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00000-00099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00000-00099.xml @@ -123,7 +123,7 @@ 86 86 - true + ATTACK A1 3000 NONE @@ -307,7 +307,7 @@ 16 17 - true + ATTACK A1 3000 NONE @@ -482,7 +482,7 @@ 104 105 - true + ATTACK A1 3000 NONE @@ -724,7 +724,7 @@ - + 5-12 150 500 @@ -778,8 +778,6 @@ 1000 1790 icon.skill0007 - 3 - 5589 47 48 @@ -936,9 +934,17 @@ 23352 24490 25628 + {base + base / 100 * subIndex} true - 15 + + 15 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + @@ -1120,7 +1126,7 @@ 89 90 - true + ATTACK A1 2000 NONE @@ -1735,7 +1741,7 @@ 29 30 - true + ATTACK A1 3000 NONE @@ -1901,7 +1907,7 @@ 104 105 - true + ATTACK A1 3000 NONE @@ -3045,7 +3051,7 @@ 38 39 - true + ATTACK A1 4000 NONE @@ -3189,7 +3195,7 @@ 111 112 - true + ATTACK A1 3000 NONE @@ -3490,8 +3496,6 @@ 1000 1790 icon.skill0035 - 2 - 5589 47 48 @@ -3646,9 +3650,17 @@ 23352 24490 25628 + {base + base / 100 * subIndex} true - 15 + + 15 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + @@ -3840,7 +3852,6 @@ 20 400 - -1 500 icon.skill0042 2 @@ -4066,7 +4077,10 @@ 9 STUN STUN - 50 + + 50 + {base + base / 100 * subIndex} + 6-12 150 PHYSICAL @@ -4295,9 +4309,13 @@ 39349 40997 42645 + {base + base / 100 * subIndex} true - 15 + + 15 + {base + base / 100 * subIndex} + true @@ -5586,6 +5604,7 @@ 2520 2582 2644 + {base + base / 100 * subIndex} @@ -6130,7 +6149,7 @@ 64 74 - true + ATTACK A1 300000 NONE @@ -6622,7 +6641,7 @@ 37 38 - true + ATTACK A2 3000 NONE @@ -6650,7 +6669,10 @@ 6 7 - 600 + + 600 + {base + subIndex * 30} + PA_UP_SPECIAL 235 1500 @@ -6703,7 +6725,7 @@ 10 15 - PER + PER @@ -6715,7 +6737,7 @@ 10 15 - PER + PER 15 @@ -6736,6 +6758,12 @@ DUALBLUNT + + + {0.6 + 0.4 * subIndex} + + PER + @@ -6925,7 +6953,7 @@ 83 89 - true + ATTACK A2 3000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00100-00199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00100-00199.xml index c7f7f19da2..a157fef2e8 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00100-00199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00100-00199.xml @@ -66,7 +66,7 @@ 32 33 - true + ATTACK A2 3000 NONE @@ -1335,7 +1335,7 @@ 32 33 - true + ATTACK A2 3000 NONE @@ -1849,11 +1849,6 @@ - 50 55 60 65 70 75 80 85 90
- 60 60 60 60 60 90 90 90 90
- - - 2 2.1 2.2 2.3 2.4 2.5 2.6 2.8 3
1 2 @@ -1865,7 +1860,11 @@ 8 9 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + PINCH 341 @@ -1948,6 +1947,40 @@ DEBUFF + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + +
@@ -2776,7 +2809,11 @@ 8 9 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + PINCH 303 @@ -2947,6 +2984,40 @@ DIFF 30 + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + @@ -3098,7 +3169,7 @@ 74 75 - true + ATTACK A1 3000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00200-00299.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00200-00299.xml index 64693c23ab..d73fdc889d 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00200-00299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00200-00299.xml @@ -1141,7 +1141,7 @@ 74 75 - true + ATTACK A2 3000 NONE @@ -2545,7 +2545,7 @@ 33 34 - true + ATTACK A1 4000 NONE @@ -3394,7 +3394,7 @@ 63 67 - true + ATTACK A1 3000 NONE @@ -3464,7 +3464,7 @@ 33 34 - true + ATTACK A1 3000 NONE @@ -3965,7 +3965,7 @@ 71 72 - true + ATTACK A2 3000 NONE @@ -4030,9 +4030,6 @@ - - - 1948 2042 2138 2236 2337 2439 2544 2651 2760 2870 2982 3095 3210 3325 3442 3559 3676 3794 3911 4029 4146 4262 4299 4415 4645 4875 5106 22531 26017 29503 33377 38441 40315 42189
40 500 @@ -4148,7 +4145,7 @@ 135 143 - true + ATTACK A1 10000 NONE @@ -4166,7 +4163,14 @@ 4 - 15 + + 15 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + true 1948 @@ -4203,6 +4207,7 @@ 38441 40315 42189 + {base + base / 100 * subIndex} true @@ -4507,7 +4512,7 @@ 67 68 - true + ATTACK A1 3000 NONE @@ -5062,10 +5067,14 @@ - - 2927 3444 3990 4553 5114 5131 5334 5662 5991 6318 17140 20255 23370 25862 27108 28354 29600
+ 2 5 - 40 + PARALYZE + PARALYZE + + 40 + {base + base / 100 * subIndex} + MAGIC 400 500 @@ -5132,13 +5141,11 @@ 124 131 - true + ATTACK A2 10000 NONE;STRIDER;WYVERN;WOLF - PARALYZE 5 - 1 PARALYZE ENEMY SINGLE @@ -5162,30 +5169,18 @@ 27108 28354 29600 + {base + base / 100 * subIndex} - - -50 - PER + + 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 - - -50 - PER - - - -50 - PER + + 100
- - - 6090 - 1 - -
- 517 549 583 619 656 694 735 777 820 865 912 960 1010 1062 1115 1169 1225 1283 1342 1402 1464 1527 1591 1656 1722 1789 1857 1926 1995 2065 2135 2206 2277 2347 2417 2488 2557
40 -213 @@ -5309,7 +5304,7 @@ 86 87 - true + ATTACK A1 4000 NONE @@ -5579,7 +5574,7 @@ 71 72 - true + ATTACK A2 3000 NONE @@ -5893,7 +5888,7 @@ 104 105 - true + ATTACK A1 4000 NONE @@ -6098,6 +6093,12 @@ -30 + + + {-0.6 - 0.4 * subIndex} + + PER +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00300-00399.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00300-00399.xml index fb513e9fa0..5f1a8919ac 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00300-00399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00300-00399.xml @@ -1,7 +1,6 @@ - 14702 14703 14704 14705 14706
6000 icon.skill0301 @@ -92,7 +91,7 @@ 194 204 - true + ATTACK A1 3000 NONE @@ -757,7 +756,7 @@ 73 74 - true + ATTACK A1 7000 NONE @@ -765,7 +764,7 @@ ENEMY SINGLE - + SWORD BLUNT @@ -917,7 +916,6 @@
- 5-12 80 40 @@ -1023,7 +1021,6 @@ - 2751 2850 2850 3050 3151 3252 3353 3453 3553 3653
1 15 SPEED_UP_SPECIAL @@ -1068,7 +1065,7 @@ 71 72 - true + ATTACK A3 30000 NONE @@ -1641,7 +1638,7 @@ true 20 78 - true + ATTACK A2 150000 NONE @@ -1715,7 +1712,7 @@ icon.skill0344 76 77 - true + ATTACK A1 4000 NONE @@ -1746,9 +1743,13 @@
- - - 195 205 215 225 551 565 598 630 662 693 725 757 812 844 876
+ 4 + 20 + PD_DOWN + + 80 + {base + base / 100 * subIndex} + 600 300 -709 @@ -1789,7 +1790,7 @@ 75 77 - true + ATTACK A1 NONE 5 @@ -1822,10 +1823,23 @@ 812 844 876 + {base + base / 100 * subIndex} true 10 + + + -23 + + PER + + + + {-2 * subIndex} + + DIFF + @@ -1835,15 +1849,20 @@
- - - 195 205 215 225 551 565 598 630 662 693 725 757 812 844 876
+ 4 + 20 + PD_DOWN + + 80 + {base + base / 100 * subIndex} + 600 -709 1100 1200 50 icon.skill0346 + 5 78 79 @@ -1878,10 +1897,9 @@ 75 77 - true - A1 + ATTACK + A2 NONE - 5 300 true ENEMY @@ -1911,14 +1929,24 @@ 812 844 876 + {base + base / 100 * subIndex} true 10 + + + {-2 * subIndex} + + DIFF + - 8 + + 8 + 15 +
@@ -1969,7 +1997,7 @@ icon.skill0348 76 70 - true + ATTACK A1 3000 NONE @@ -2126,7 +2154,7 @@ 30 77 18 - true + ATTACK A2 3000 NONE @@ -2160,7 +2188,7 @@ 20 77 35 - true + ATTACK A2 8000 NONE @@ -2515,7 +2543,7 @@ 20 77 35 - true + ATTACK A2 4000 NONE @@ -2736,7 +2764,10 @@ 10 TURN_STONE FLESH_STONE - 40 + + 40 + {base + base / 100 * subIndex} + 10-10 150 MAGIC diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00400-00499.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00400-00499.xml index 49094f3183..3bf79062fa 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00400-00499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00400-00499.xml @@ -1,9 +1,6 @@ - 924 1054 1146 1240 1337 1437 1538 1639 1741 1841
- -0.3 -0.3 -0.3 -0.3 -0.3 -0.4 -0.4 -0.4 -0.4 -0.5
- -12 -12 -12 -12 -12 -16 -16 -16 -16 -20
1 1 @@ -65,7 +62,7 @@ 70 72 - true + ATTACK A2 4000 NONE @@ -226,9 +223,6 @@
- 0.75 0.75 0.75 0.75 0.75 0.7 0.7 0.7 0.7 0.65
- 1056 1205 1309 1417 1528 1642 1757 1873 1989 2104
- -12 -12 -12 -12 -12 -16 -16 -16 -16 -20
1 1 @@ -290,7 +284,7 @@ 70 72 - true + ATTACK A2 4000 NONE @@ -585,7 +579,10 @@ 10 ROOT_PHYSICALLY ROOT - 40 + + 40 + {base + base / 100 * subIndex} + 10-10 150 MAGIC @@ -664,6 +661,18 @@ 100 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER +
@@ -746,10 +755,6 @@ - 1.33 1.66 2
- 1.1 1.2 1.3
- 33 66 100
- 10 20 30
1 2 @@ -863,8 +868,6 @@
- 0.9 0.9 0.9 0.85 0.85 0.8 0.8 0.75 0.75 0.7
- 687 784 852 923 995 1069 1144 1220 1295 1370
1 1 @@ -996,8 +999,6 @@
- 0.9 0.9 0.9 0.85 0.85 0.8 0.8 0.75 0.75 0.7
- 825 941 1023 1107 1194 1283 1373 1464 1554 1644
1 1 @@ -1123,8 +1124,6 @@ - 1.1 1.1 1.1 1.15 1.15 1.2 1.2 1.25 1.25 1.3
- 1832 2091 2272 2460 2653 2850 3050 3252 3453 3653
1 1 @@ -1180,7 +1179,7 @@ 70 72 - true + ATTACK A3 30000 NONE @@ -1237,7 +1236,6 @@
- 1.1 1.15 1.2 1.22 1.24 1.26 1.28 1.30
1 @@ -1248,8 +1246,11 @@ 6 7 8 - - 120 +
+ + 120 + {base + subIndex * 15} + MIGHT_MORTAL 549 @@ -1312,6 +1313,40 @@ PER + + + 532 + 570 + 607 + 644 + 681 + 718 + 756 + 793 + 830 + 867 + 904 + 942 + 979 + 1016 + 1053 + 1090 + 1128 + 1165 + 1202 + 1240 + 1264 + 1289 + 1314 + 1339 + 1363 + 1389 + 1413 + 1438 + 1463 + 1488 + +
@@ -1387,7 +1422,6 @@ - 6 6 6 6 6 9 9 9 9 12
1 1 @@ -1471,7 +1505,6 @@
- 62 67 73 78 83 89 94 100
1 2 @@ -1564,8 +1597,6 @@
- 1 1 2 2 2 3 3 3
- 124 134 155 155 166 177 188 199
1 2 @@ -1674,7 +1705,6 @@
- 0.9 0.8 0.7
2 4 @@ -1719,7 +1749,6 @@
- 0.9 0.85 0.8
2 4 @@ -1807,7 +1836,6 @@
- 1.3 1.4 1.5
icon.skill0418 58 @@ -1903,10 +1931,6 @@
- 1.33 1.66 2
- 1.1 1.2 1.3
- 33 66 100
- 10 20 30
1 2 @@ -2027,7 +2051,6 @@
- 1 2 3 4 5
1 2 @@ -2088,7 +2111,6 @@
- 2 3 4
icon.skill0422 58 @@ -2123,8 +2145,6 @@
- 10 15 20
- 3 5 10
1 300 HOLY_ATTACK @@ -2173,8 +2193,6 @@
- 5 10 15
- 10 20 30
icon.skill0424 58 @@ -2348,8 +2366,6 @@
- 2 4 6 8 10 12 14 16
- 2 2 3 4 5 6 7 8
icon.skill0430 P 5 @@ -2553,7 +2569,10 @@ 10 SILENCE_ALL SILENCE - 60 + + 60 + {base + base / 100 * subIndex} + 10-10 150 MAGIC @@ -2592,7 +2611,10 @@ 2 - 1800 + + 1800 + {1800 + subIndex * 90} + RESURRECTION_SPECIAL 673 4000 @@ -2912,7 +2934,6 @@ - 1 2 3 4
6000 icon.skill0449 1 @@ -3035,7 +3056,6 @@
- 40 66
1 15 SPEED_UP_SPECIAL @@ -3090,7 +3110,6 @@
- 40 50 60 70 80
1 9 STUN @@ -3443,7 +3462,6 @@
- ROOT_PHYSICALLY,3;ROOT_MAGICALLY,3 SPEED_DOWN,3;ROOT_PHYSICALLY,3;ROOT_MAGICALLY,3
2 3 @@ -3501,7 +3519,6 @@
- 2 3 4
icon.skill0141 5 @@ -3527,8 +3544,6 @@
- 9 11 12 13 14
- 0 0 0 3 3
icon.skill0142 5 @@ -3567,8 +3582,6 @@
- 0.9 2.2 3.2 4.2 5.3 6 6.8 8.4 9.2 10.1 11.9 12.8 13.7 15.7 16.7 17.8 18.8 19.9 21.1 22.2 23.4 24.5 25.8 27 28.2 29.5 30.8 32.1 33.5 34.8 36.2 37.6 39.1 40.5 42 43.5 44.9 46.5 48 49.5 51.1 52.7 54.2 55.8 57.4 59.1 60.7 62.3 63.9 65.6
- 3 3 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
icon.skill0465 18 @@ -3760,8 +3773,6 @@
- 1 1 1 1 1 1 1 1 1 1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.05 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.2 1.2 1.2 1.2 1.2 1.2 1.25 1.25 1.25 1.25 1.25 1.25
- 11 12 13 15 17 19 20 22 24 26 27 28 30 31 32 35 36 37 40 42 43 44 46 47 49 51 52 54 56 57 59 61 63 64 66 68 70 72 74 76 78 80 82 84 86 88 91 93 95 97 99 102 104 106 108
icon.skill0466 5 @@ -3947,9 +3958,6 @@
- 0 0 0 15 15 15 15 15 20 20 20 20 20 20 25 25 25 25 25 25 30 30 30
- 73 147 220 294 385 486 614 777 960 1109 1269 1440 1622 1815 2018 2160 2306 2457 2613 2774 2940 3110 3285
- 5 8 10 12 14 16 18 20 21 22 23 24 25 26 27 28 29 30 32 34 36 38 40
icon.skill0467 5 @@ -4072,7 +4080,6 @@
- 30 32 35 46 51 55 71 78 84
40 300 @@ -4111,7 +4118,7 @@ 16 17 - true + ATTACK A1 3000 NONE @@ -4172,7 +4179,6 @@
- 18 28 38 48 58 68 78
300 2500 icon.skill0470 @@ -4217,7 +4223,6 @@
- 18 28 38 48 58 68 78
400 500 4000 @@ -4261,7 +4266,6 @@
- 5.2 8.1 9.9 11.9 14.1 16.6 19.4 22.5 25.9 27.7 29.6 31.6 33.7 35.9 38.1 40.5 42.9 45.4 48.1 50.8 53.6 56.5 59.4 62.5 65.6 68.9 72.2 75.6 79 82.5 86.1 89.8 93.5 97.3 101.1 104.9 108.8 112.7 116.7 120.6 124.6 128.5 132.5 136.4 140.3
icon.skill0472 20 @@ -4370,7 +4374,6 @@
- 12.64 18 21.28 24.88 29.04 33.6 38.72 44.32 50.56 53.92 86.72 92.16 97.84 103.76 109.92 116.32 122.96 129.84 136.96 144.4 152 159.92 168 176.32 184.96 193.76 202.8 212 221.44 231.04 240.88 250.8 260.96 271.2 281.6 292.16 302.72 313.44 324.16 334.96 345.76 356.56 367.28 378 388.72
icon.skill0473 20 @@ -4479,8 +4482,6 @@
- 1 1 1 1 1 1 1 1 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15
- 3.2 5.28 6.48 7.84 9.36 11.12 13.04 15.2 17.52 18.8 20.08 21.44 22.88 24.4 25.92 27.6 29.28 30.96 32.8 34.64 36.56 38.56 40.64 42.72 44.88 47.12 49.44 51.76 54.16 56.56 59.04 61.52 64.08 66.72 69.36 72 74.64 77.36 80.08 82.8 85.52 88.24 90.96 93.68 96.4
icon.skill0474 20 @@ -4660,7 +4661,6 @@
- 108 117 126 147 159 171 198 213 229 263 281 301 344 367 391
40 300 @@ -4717,7 +4717,7 @@ 26 27 - true + ATTACK A1 3000 NONE @@ -4759,7 +4759,6 @@
- 738 784 833 884 937 992 1049 1109 1171 1236 1302 1371 1443 1516 1592 1670 1750 1832 1917 2003 2091 2181 2272 2366 2460 2556 2653 2751 2850 2950 3050 3151 3252 3353 3453 3553 3653
40 300 @@ -4882,7 +4881,7 @@ 59 60 - true + ATTACK A1 3000 NONE @@ -4950,7 +4949,6 @@
- 108 117 126 147 159 171 198 213 229 263 281 301 344 367 391
40 300 @@ -5007,7 +5005,7 @@ 26 27 - true + ATTACK A1 3000 NONE @@ -5081,7 +5079,6 @@
- 7 10
icon.skill0481 32 @@ -5103,8 +5100,6 @@
- 1.25 1.3
- 0.2 0.3
1 2 @@ -5155,8 +5150,6 @@
- 2000 4000 4750 5250 6250 6250 6250 7500
- 0.6 0.6 0.6 0.6 0.7 0.8 0.9 1
1 2 @@ -5167,7 +5160,11 @@ 7 8 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + PD_UP_SPECIAL 204 @@ -5235,6 +5232,12 @@ DIFF + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -5243,12 +5246,11 @@ 200 -303 600 - CHARGE 800 icon.skill0484 32 20 - true + ATTACK DA1 NONE 5 @@ -5266,9 +5268,6 @@ 200 - - - @@ -5276,7 +5275,10 @@ 5 DISARM DOT_BLEEDING - 70 + + 70 + {base + base / 100 * subIndex} + PHYSICAL 40 500 @@ -5362,11 +5364,22 @@ -40 PER + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + DIFF + - 200 400
icon.skill0486 24 @@ -5389,7 +5402,6 @@
- 179 194 210 245 264 285 330 354 381 438 469 502 573 611 651
500 800 @@ -5522,7 +5534,6 @@
- 1.08 1.12
1 2 @@ -5586,7 +5597,6 @@
- 866 910 955 1002 1050 1100 1150 1202 1255 1309 1364 1420 1476 1534 1592 1651 1710 1770 1830 1891 1951 2012 2072 2132 2192
5-12 150 NONE @@ -5718,7 +5728,6 @@
- 742 782 823 866 910 955 1002 1050 1100 1150 1202 1255 1309 1364 1420 1476 1534 1592 1651 1710 1770 1830 1891 1951 2012 2072 2132 2192
5-12 150 @@ -5812,7 +5821,6 @@ 800 800 - CHARGE 800 icon.skill0493 @@ -5875,7 +5883,7 @@ 74 75 - true + ATTACK DA1 NONE 5 @@ -6061,7 +6069,6 @@ 800 800 - CHARGE 800 icon.skill0494 true @@ -6144,7 +6151,7 @@ 52 53 - true + ATTACK DA2 4000 NONE @@ -6174,13 +6181,13 @@ 1 true - - + + 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 +
- 107 107 123 123 123 123 123 134 134 134
6 6 @@ -6237,7 +6244,6 @@ 800 0;0;300;100 - CHARGE 800 icon.skill0495 true @@ -6266,7 +6272,7 @@ 88 90 - true + ATTACK DA2 4000 NONE @@ -6311,7 +6317,6 @@
- 787 832 879 927 977 1029 1082 1137 1194 1253 1313 1374 1438 1502 1568 1636 1704 1774 1845 1917 1990 2064 2138 2213 2288 2363 2439 2515 2590 2665 2740
6-12 150 300 @@ -6478,7 +6483,6 @@
- 4558 4750 4944 5142 5342 5545 5751 5958 6166 6376 6586 6797 7008 7218 7427 7635
40 500 @@ -6538,7 +6542,7 @@ 74 75 - true + ATTACK A1 7000 NONE @@ -6586,7 +6590,6 @@
- 5342 5545 5751 5958 6166 6376 6586 6797 7008 7218 7427 7635
40 700 @@ -6634,7 +6637,7 @@ 74 75 - true + ATTACK A1 7000 NONE @@ -6680,7 +6683,6 @@
- 40 60 100
1 2 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00500-00599.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00500-00599.xml index 94445fd193..1e2f6f337a 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00500-00599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00500-00599.xml @@ -2,8 +2,6 @@ - 1.05 1.08
- 2 4
icon.skill0500 40 @@ -190,7 +188,7 @@ 28 33 - true + ATTACK A1 4000 NONE @@ -324,7 +322,7 @@ 59 60 - true + ATTACK A1 3000 NONE @@ -482,7 +480,7 @@ 59 60 - true + ATTACK A1 3000 NONE @@ -560,7 +558,7 @@ 47 51 - true + ATTACK A1 3000 NONE @@ -783,7 +781,6 @@
- 350 370 391 412 434 457 481 506 531 557 584 611 639 668 697 727 758 789 820 852 885 917 950 984 1017 1051 1084 1118 1151 1185 1218
5-12 150 500 @@ -1947,7 +1944,7 @@ 74 30 - true + ATTACK A2 15000 NONE @@ -2066,7 +2063,7 @@ icon.skill0526 78 78 - true + ATTACK A1 75000 NONE @@ -2225,11 +2222,17 @@
- 1.3 1.32 1.33 1.34 1.35 1.35 1.35 1.35
1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + T_CRT_RATE_UP - 80 + + 80 + {base + base / 100 * subIndex} + PHYSICAL 40 -671 @@ -2258,7 +2261,7 @@ 52 55 - true + ATTACK A2 8000 NONE @@ -2440,7 +2443,7 @@ 20 79 72 - true + ATTACK A2 15000 NONE @@ -2530,7 +2533,7 @@ 71 72 - true + ATTACK A1 3000 NONE @@ -2556,7 +2559,6 @@ 200 -676 600 - CHARGE 800 icon.skill0540 @@ -2567,7 +2569,7 @@ 71 72 - true + ATTACK DA1 NONE 5 @@ -3240,7 +3242,7 @@ 67 70 - true + ATTACK A2 3000 NONE @@ -3291,7 +3293,7 @@ 67 70 - true + ATTACK A1 15000 NONE @@ -3417,7 +3419,7 @@ 67 70 - true + ATTACK A1 3000 NONE @@ -3611,7 +3613,7 @@ 67 70 - true + ATTACK A1 3000 NONE @@ -3816,7 +3818,7 @@ 67 70 - true + ATTACK A1 3000 NONE @@ -3949,7 +3951,7 @@ 67 70 - true + ATTACK A1 3000 NONE @@ -3994,7 +3996,7 @@ 67 70 - true + ATTACK A1 3000 NONE @@ -4225,7 +4227,7 @@ 67 70 - true + ATTACK A1 3000 NONE @@ -4440,7 +4442,7 @@ icon.skill_transform_s_attack 55 55 - true + ATTACK A1 3000 NONE @@ -4531,7 +4533,7 @@ 54 58 - true + ATTACK A1 3000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00600-00699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00600-00699.xml index 47d7c5d457..a4a4335f7b 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00600-00699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00600-00699.xml @@ -2231,7 +2231,7 @@ icon.skill_transform_s_attack 80 112 - true + ATTACK A1 3000 NONE @@ -2428,7 +2428,7 @@ 20 80 76 - true + ATTACK A2 3000 NONE @@ -2626,7 +2626,7 @@ 20 80 80 - true + ATTACK A2 3000 NONE @@ -2654,7 +2654,7 @@ icon.skill_transform_s_attack 80 72 - true + ATTACK A1 3000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00700-00799.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00700-00799.xml index 273d5b1cbe..a1bb94078f 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00700-00799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00700-00799.xml @@ -952,7 +952,7 @@ 69 72 - true + ATTACK A1 2000 NONE @@ -1311,7 +1311,7 @@ 20 80 19 - true + ATTACK A2 3000 NONE @@ -1841,7 +1841,7 @@ 76 88 - true + ATTACK A1 3000 NONE @@ -1966,7 +1966,7 @@ 71 73 - true + ATTACK A2 3000 NONE @@ -2046,7 +2046,7 @@ 74 77 - true + ATTACK A1 4000 NONE @@ -2095,7 +2095,7 @@ 74 77 - true + ATTACK A2 3000 NONE @@ -3021,7 +3021,7 @@ ENEMY_ONLY SINGLE - + SWORD BLUNT @@ -3545,13 +3545,15 @@
- 0.9 0.8 0.7 0.6 0.5 0.5 0.5 0.5
- 149 158 169 179 188 191 195 199
1 3 PARALYZE PARALYZE 50 + + 50 + {base + base / 100 * subIndex} + 6-12 150 MAGIC @@ -3583,8 +3585,41 @@ POINT_BLANK NOT_FRIEND - - 69 + + + 149 + 158 + 169 + 179 + 188 + 191 + 195 + 199 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} + @@ -3662,7 +3697,10 @@ 5 STUN STUN - 60 + + 60 + {base + base / 100 * subIndex} + 5-12 600 PHYSICAL @@ -3671,7 +3709,6 @@ -669 800 0;0;600;60 - CHARGE 800 28 icon.skill0793 @@ -3697,7 +3734,7 @@ 122 128 - true + ATTACK DA2 NONE 5 @@ -3723,7 +3760,7 @@ - + 4040 11557 @@ -3735,7 +3772,21 @@ 19348 - + + 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 + + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER +
@@ -3863,7 +3914,7 @@ 20 80 88 - true + ATTACK A2 3000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00800-00899.xml index 9a3183f66e..c8dfe198f0 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00800-00899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00800-00899.xml @@ -502,7 +502,7 @@ POINT_BLANK NOT_FRIEND - + SWORD BLUNT @@ -917,7 +917,7 @@ 82 83 - true + ATTACK A1 4000 NONE @@ -925,7 +925,7 @@ ENEMY SINGLE - + SWORD BLUNT @@ -1128,7 +1128,7 @@ 82 83 - true + ATTACK A1 4000 NONE @@ -1788,7 +1788,7 @@ 74 30 - true + ATTACK A2 15000 NONE @@ -2734,7 +2734,7 @@ 86 8 - true + ATTACK A1 3000 NONE @@ -2786,7 +2786,7 @@ 86 8 - true + ATTACK A1 3000 NONE @@ -3039,7 +3039,7 @@ 86 25 - true + ATTACK A1 75000 NONE @@ -3142,7 +3142,7 @@ 86 1 - true + ATTACK A1 3000 NONE @@ -3386,7 +3386,6 @@ 2500 200 -1378 - CHARGE 800 icon.skill_transform_etc @@ -3403,7 +3402,7 @@ 85 30 - true + ATTACK DA1 23000 NONE @@ -4159,7 +4158,7 @@ 75 75 - true + ATTACK A1 1000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/00900-00999.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/00900-00999.xml index 752bdcbbae..1e9f5ff7f0 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/00900-00999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/00900-00999.xml @@ -95,7 +95,7 @@ 75 75 - true + ATTACK A1 1000 NONE @@ -1241,7 +1241,7 @@ 76 77 - true + ATTACK A1 3000 NONE @@ -1311,7 +1311,7 @@ icon.skill0921 76 77 - true + ATTACK A1 3000 NONE @@ -1535,7 +1535,7 @@ 74 19 - true + ATTACK A2 3000 NONE @@ -1608,7 +1608,7 @@ icon.skill0928_1 83 82 - true + ATTACK A1 8000 NONE @@ -2780,7 +2780,7 @@ icon.skill0939 78 5 - true + ATTACK A1 NONE 5 @@ -2904,7 +2904,7 @@ icon.skill0947 81 70 - true + ATTACK A1 3000 NONE @@ -2973,7 +2973,7 @@ 20 81 35 - true + ATTACK A2 3000 NONE @@ -3028,7 +3028,7 @@ 74 74 - true + ATTACK A1 3000 NONE @@ -3059,7 +3059,6 @@ 200 -676 600 - CHARGE 800 icon.skill0540 @@ -3080,7 +3079,7 @@ 74 74 - true + ATTACK DA1 NONE 5 @@ -3196,7 +3195,7 @@ 30 55 68 - true + ATTACK A2 3000 NONE @@ -3432,7 +3431,7 @@ 99 99 - true + ATTACK A1 7000 NONE @@ -3440,7 +3439,7 @@ ENEMY SINGLE - + SWORD BLUNT @@ -3620,7 +3619,7 @@ 99 99 - true + ATTACK A1 3000 NONE @@ -3871,7 +3870,7 @@ icon.skill_transform_s_attack 85 99 - true + ATTACK A1 7000 NONE @@ -4060,7 +4059,7 @@ 78 79 - true + ATTACK A2 3000 NONE @@ -4370,7 +4369,6 @@ -347 800 - CHARGE 800 icon.skill0494 true @@ -4393,7 +4391,7 @@ 58 58 - true + ATTACK DA2 4000 NONE @@ -4412,7 +4410,6 @@ true - @@ -4720,7 +4717,7 @@ 82 83 - true + ATTACK A1 6000 NONE @@ -4864,7 +4861,7 @@ 82 83 - true + ATTACK A1 5000 NONE @@ -5098,7 +5095,7 @@ 20 82 82 - true + ATTACK A2 45000 NONE @@ -5288,12 +5285,11 @@ 200 -379 600 - CHARGE 800 icon.skill0484 40 38 - true + ATTACK DA1 3000 NONE @@ -5317,9 +5313,6 @@ 200 - - - @@ -5335,14 +5328,13 @@ 200 -681 800 - CHARGE 800 icon.skill0793 true 20 83 82 - true + ATTACK DA2 20000 NONE @@ -5550,12 +5542,11 @@ 200 -630 600 - CHARGE 800 icon.skill0998 40 38 - true + ATTACK DA1 3000 NONE @@ -5579,8 +5570,5 @@ 200 - - -
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/01000-01099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/01000-01099.xml index f7e413344b..0f4ff62a60 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/01000-01099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/01000-01099.xml @@ -2,12 +2,6 @@ - 0 0 1 2 2 2 3 3 4 4 5 5 6 6 7
- 0 0 0 0 0 0 1.05 1.05 1.07 1.1 1.12 1.14 1.16 1.18 1.2
- 0 0 0 0 0 0 0 1.05 1.07 1.1 1.12 1.14 1.16 1.18 1.2
- 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 1.04 1.05 1.05 1.05 1.05 1.05 1.07 1.1 1.12 1.14 1.16 1.18 1.2
- 0 0 0 0 0 1.05 1.05 1.05 1.07 1.1 1.12 1.14 1.16 1.18 1.2
icon.skill1001 1 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/01200-01299.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/01200-01299.xml index 950780b145..8928e1669a 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/01200-01299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/01200-01299.xml @@ -2987,7 +2987,6 @@
- 39 42 44 47 49 52 55 57 60 63 64 66 67 68 70 71 72 74 75 77 78 79 80 82 83 84 85 87
0 3 MA_DOWN @@ -4339,8 +4338,6 @@
- 112 137 158 172 198 330 358 377 394 412 421 430 439
- 132 162 187 204 234 390 423 445 466 487 498 509 520
5 6 @@ -4360,6 +4357,10 @@ DOT_ATTR DOT_BLEEDING 70 + + 70 + {base + base / 100 * subIndex} + MAGIC 900 500 @@ -4421,6 +4422,8 @@ 5000 NONE;STRIDER;WYVERN;WOLF 5 + ENEMY_ONLY + SINGLE @@ -4460,9 +4463,19 @@ 1 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + PER + - ENEMY_ONLY - SINGLE
52 58 65 72 78 82 85 89 92 96 99 102 105 108
@@ -5684,10 +5697,11 @@
- 47 52 57 63 66 68 71 74 77 79 82 84 87 93 96 99 102 105 108 112 115 119 121 123
- 10 10 10 10 10 20 20 20 20 30 30 30 30 40 40 40 40 50 50 50 50 50 50 50
3 - 10 + + 10 + {base + 0.5 * subIndex} + MD_DOWN 100 MAGIC @@ -5838,10 +5852,40 @@ 119 121 123 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} - -15 + + -15 + -20 + -30 + -40 + -50 + PER @@ -6315,7 +6359,6 @@
- 6 7 8 9
1 2 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/01300-01399.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/01300-01399.xml index b23b599f90..c0db0b7aec 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/01300-01399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/01300-01399.xml @@ -4564,8 +4564,6 @@
- 0.96 0.93 0.9
- 0.9 0.85 0.8
1 2 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/01400-01499.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/01400-01499.xml index 73843c5dbf..de84e5ed3e 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/01400-01499.xml @@ -702,12 +702,12 @@
- 79 81 83 85 90 95 99 101
- 1.02 1.03 1.04 1.05 1.06 1.07 1.1 1.15
- 84 90 95 102 111 122 133 143
- 21 22 24 25 28 31 33 36
2 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + CP_UP 50-100 1000 @@ -755,6 +755,18 @@ PER + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -2155,7 +2167,7 @@ 14 14 - true + ATTACK A1 4000 NONE;STRIDER;WYVERN;WOLF @@ -2211,7 +2223,7 @@ 13 14 - true + ATTACK A1 15000 NONE;STRIDER;WYVERN;WOLF @@ -3045,6 +3057,7 @@ 1200 1800 + {base + 90 * subIndex} MA_UP_SPECIAL 1 @@ -3077,6 +3090,12 @@ PER 1 + + + {0.6 + 0.4 * subIndex} + + PER + @@ -3207,7 +3226,10 @@ 1 10 NORMAL_ATTACK_BLOCK - 80 + + 80 + {base + base / 100 * subIndex} + 10-10 200 MAGIC @@ -3235,6 +3257,18 @@ 80 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/01500-01599.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/01500-01599.xml index 0d8a751a65..22de1e9226 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/01500-01599.xml @@ -340,11 +340,13 @@ - 0.8 0.7 0.6 0.5 0.4 0.3 0.4 0.4 0.3
3 30 LIMIT - 60 + + 60 + {base + base / 100 * subIndex} + 10-10 200 MAGIC @@ -439,6 +441,18 @@ PER + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER +
@@ -651,11 +665,12 @@ - 58 63 74 85 90 95 99
- 2 2 2.1 2.2 2.3 2.4 2.5
- 10 15 20 30 35 40 45
1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + PD_UP_BOW 150 1000 @@ -729,6 +744,12 @@ PER + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -3658,7 +3679,7 @@ icon.skill1560 83 82 - true + ATTACK A1 8000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/01600-01699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/01600-01699.xml index 239fa25d0c..19a6630400 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/01600-01699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/01600-01699.xml @@ -359,7 +359,7 @@ SHOCK STUN true - true + ATTACK ENEMY_ONLY SINGLE @@ -389,7 +389,7 @@ SHOCK STUN true - true + ATTACK ENEMY_ONLY FAN NOT_FRIEND @@ -418,7 +418,7 @@ 1000 STUN true - true + ATTACK SELF POINT_BLANK NOT_FRIEND @@ -764,7 +764,7 @@ 400 85 1000 - true + ATTACK ENEMY SINGLE @@ -786,7 +786,7 @@ 400 95 1000 - true + ATTACK ENEMY SINGLE @@ -809,7 +809,7 @@ 1400 95 1000 - true + ATTACK ENEMY SINGLE @@ -832,7 +832,7 @@ 1400 95 1000 - true + ATTACK ENEMY SINGLE @@ -857,7 +857,7 @@ 300 5-12 2000 - true + ATTACK ENEMY RANGE NOT_FRIEND @@ -931,7 +931,7 @@ 5-12 0;0;1000;90 4000 - true + ATTACK ENEMY FAN NOT_FRIEND @@ -1254,7 +1254,9 @@ POINT_BLANK NOT_FRIEND - + + 300 + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/01900-01999.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/01900-01999.xml index 71520cf8fa..4b169325ce 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/01900-01999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/01900-01999.xml @@ -1123,7 +1123,6 @@ 1 600 600 - CHARGE 800 200 -1 @@ -1138,7 +1137,6 @@ - 5841 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/02000-02099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/02000-02099.xml index f56de26250..1ad01c5102 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/02000-02099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/02000-02099.xml @@ -1761,7 +1761,7 @@ 6 8 - true + ATTACK A1 10000 NONE;STRIDER;WYVERN;WOLF diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/03000-03099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/03000-03099.xml index ee80c73df1..3fbb5fed48 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/03000-03099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/03000-03099.xml @@ -3593,7 +3593,7 @@ 107 109 - true + ATTACK A2 30000 NONE;STRIDER;WYVERN;WOLF diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/03100-03199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/03100-03199.xml index 7853d07ca3..244257c913 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/03100-03199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/03100-03199.xml @@ -329,7 +329,7 @@ 107 109 - true + ATTACK A2 30000 NONE;STRIDER;WYVERN;WOLF @@ -1102,7 +1102,7 @@ 109 109 - true + ATTACK A2 30000 NONE;STRIDER;WYVERN;WOLF @@ -7015,7 +7015,7 @@ 14 14 - true + ATTACK A2 30000 NONE;STRIDER;WYVERN;WOLF diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/03300-03399.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/03300-03399.xml index 128f7b9149..a013e877dc 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/03300-03399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/03300-03399.xml @@ -390,7 +390,7 @@ icon.weapon_dual_sword_i00 78 140 - true + ATTACK A1 60000 NONE @@ -413,7 +413,7 @@ icon.weapon_unique_zariche_i00 99 140 - true + ATTACK A1 60000 NONE @@ -438,7 +438,7 @@ icon.skill3630 99 140 - true + ATTACK A1 60000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/04100-04199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/04100-04199.xml index 5d2e74c7fe..239d0a0c95 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/04100-04199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/04100-04199.xml @@ -412,8 +412,6 @@ FIRE 180 0;180;1500;400 - 600 - THROW_UP 3000 icon.skill4107 true @@ -432,7 +430,9 @@ 28600 - + + 600 + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/04600-04699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/04600-04699.xml index a75cd08bc5..efee82fe84 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/04600-04699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/04600-04699.xml @@ -5123,8 +5123,6 @@ FIRE 180 0;180;250;500 - 600 - THROW_UP 3000 icon.skill4688 true @@ -5143,7 +5141,9 @@ 27849 10 - + + 600 +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05000-05099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05000-05099.xml index ac5c058817..b53145545b 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05000-05099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05000-05099.xml @@ -100,8 +100,6 @@ -100 DARK 180 - 300 - THROW_UP 5800 icon.skill0100 true @@ -118,7 +116,9 @@ 5964 - + + 300 +
@@ -517,7 +517,6 @@ - 48761 52970 68074 48761 52970 68074
400 500 @@ -547,15 +546,6 @@ 0;0;500;170 0;0;700;200 - - 400 - 500 - 700 - 400 - 500 - 700 - - CHARGE 1500 85 A1 @@ -1389,7 +1379,7 @@ 42 43 - true + ATTACK A1 8000 NONE @@ -2946,7 +2936,7 @@ 1080 85 83 - true + ATTACK A3 NONE NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05100-05199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05100-05199.xml index 7af58b7acc..164f588b8c 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05100-05199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05100-05199.xml @@ -576,7 +576,7 @@ icon.skill0245 90 84 - true + ATTACK A1 17000 NONE @@ -989,7 +989,7 @@ 1080 80 214 - true + ATTACK A1 8000 NONE @@ -1079,7 +1079,7 @@ 1 80 214 - true + ATTACK A2 8000 NONE @@ -1170,7 +1170,7 @@ 1080 80 214 - true + ATTACK A1 8000 NONE @@ -2752,7 +2752,7 @@ 95 99 - true + ATTACK A2 30000 NONE;STRIDER;WYVERN;WOLF @@ -2935,8 +2935,6 @@ 300 -100 - 300 - THROW_UP icon.skill0100 85 A1 @@ -2948,7 +2946,9 @@ POINT_BLANK NOT_FRIEND - + + 300 +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05200-05299.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05200-05299.xml index 2de1eceace..fdd55087fa 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05200-05299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05200-05299.xml @@ -814,8 +814,6 @@ SELF POINT_BLANK NOT_FRIEND - 200 - THROW_UP @@ -824,7 +822,9 @@ 20 - + + 200 + @@ -847,8 +847,6 @@ SELF POINT_BLANK NOT_FRIEND - 200 - THROW_UP @@ -857,7 +855,9 @@ 20 - + + 200 + @@ -872,8 +872,6 @@ 600 -100 1100 - 300 - THROW_UP 3000 icon.skill0100 true @@ -890,8 +888,6 @@ SHOCK ENEMY SINGLE - 300 - THROW_UP @@ -903,7 +899,9 @@ 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 - + + 300 + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05300-05399.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05300-05399.xml index bd1dd0ba05..7762c64015 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05300-05399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05300-05399.xml @@ -94,7 +94,7 @@ 86 87 - true + ATTACK A2 NONE -5 @@ -331,7 +331,7 @@ 86 87 - true + ATTACK A2 NONE -5 @@ -533,7 +533,7 @@ 86 87 - true + ATTACK A2 NONE -5 @@ -2928,7 +2928,7 @@ 86 87 - true + ATTACK A2 NONE -5 @@ -3155,7 +3155,7 @@ 96 99 - true + ATTACK A2 NONE -5 @@ -3273,7 +3273,7 @@ 96 99 - true + ATTACK A2 NONE -5 @@ -3309,7 +3309,7 @@ 96 99 - true + ATTACK A2 NONE -5 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05400-05499.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05400-05499.xml index f0f35c9ba7..1c8c7d9281 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05400-05499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05400-05499.xml @@ -22,8 +22,6 @@ FLY_AWAY 300 -100 - 300 - THROW_UP 5800 icon.skill0100 true @@ -37,7 +35,9 @@ POINT_BLANK NOT_FRIEND - + + 300 + @@ -642,7 +642,7 @@ 2000 2 40 - true + ATTACK A2 8000 NONE @@ -1048,7 +1048,7 @@ 66 71 - true + ATTACK A2 11000 NONE @@ -2065,8 +2065,6 @@ 1 - 300 - THROW_UP true 86 A1 @@ -2076,7 +2074,9 @@ SELF SINGLE - + + 300 + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05500-05599.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05500-05599.xml index d16bdd0afc..6d75f2b84c 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05500-05599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05500-05599.xml @@ -1901,12 +1901,8 @@ 0 - - - 0 - 0 - 8 - + + 8 30 @@ -1940,7 +1936,7 @@ 2 81 43 - true + ATTACK A2 30000 NONE @@ -2340,7 +2336,7 @@ icon.skill0100 80 76 - true + ATTACK A1 13000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05600-05699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05600-05699.xml index 5409a178b6..0a37f8b462 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05600-05699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05600-05699.xml @@ -1030,7 +1030,7 @@ NONE;STRIDER;WYVERN;WOLF NONE -5 - TARGET + ENEMY_NOT SINGLE @@ -3912,7 +3912,7 @@ icon.skill0005 true 80 - true + ATTACK A1 10000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05700-05799.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05700-05799.xml index 5cc371a91a..6c1edbf787 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05700-05799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05700-05799.xml @@ -1583,7 +1583,7 @@ 252 255 - true + ATTACK A1 20000 NONE @@ -1657,7 +1657,7 @@ 105 107 - true + ATTACK A1 15000 NONE @@ -1740,7 +1740,7 @@ 84 85 - true + ATTACK A2 13000 NONE @@ -1801,7 +1801,7 @@ 90 95 - true + ATTACK A1 20000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05800-05899.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05800-05899.xml index 6fee4f03d8..e019ed0c34 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05800-05899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05800-05899.xml @@ -117,7 +117,7 @@ -1332 800 77 - true + ATTACK DA1 1000 NONE @@ -127,6 +127,11 @@ 600 ENEMY SINGLE + + + 1973 + + -659 @@ -1252,7 +1257,6 @@ 40 - -1 400 1000 icon.skill_transform_s_attack @@ -1261,16 +1265,12 @@ 2000 NONE -5 - ENEMY + OTHERS SINGLE - - - 40 - -1 400 1000 icon.skill_transform_s_attack @@ -1279,11 +1279,8 @@ 2000 NONE -5 - ENEMY + OTHERS SINGLE - - - 3 @@ -2275,7 +2272,7 @@ - + 2319 18664
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/05900-05999.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/05900-05999.xml index 0f66536e89..4dbfb4c067 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/05900-05999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/05900-05999.xml @@ -721,6 +721,11 @@ 200 + + + 2319 + +
5-15 @@ -1535,7 +1540,7 @@ 64 74 - true + ATTACK A3 120000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/06000-06099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/06000-06099.xml index e0007741de..ff59481545 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/06000-06099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/06000-06099.xml @@ -515,11 +515,10 @@ 200 -679 600 - CHARGE 800 icon.skill6041 81 - true + ATTACK DA1 30000 NONE @@ -535,7 +534,6 @@ 2372 - @@ -601,7 +599,7 @@ icon.skill6044 81 80 - true + ATTACK A1 13000 NONE @@ -1634,7 +1632,7 @@ 2 true 58 - true + ATTACK A2 NONE;STRIDER;WYVERN;WOLF NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/06100-06199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/06100-06199.xml index 0f9db825d9..de6d1b34ea 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/06100-06199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/06100-06199.xml @@ -1339,7 +1339,7 @@ 100 icon.skill6169 83 - A1 + A2 NONE NONE -5 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/06200-06299.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/06200-06299.xml index 5582dea90e..bdec7ee2bc 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/06200-06299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/06200-06299.xml @@ -294,7 +294,7 @@ 105 105 - true + ATTACK A2 3000 NONE @@ -1986,11 +1986,10 @@ 1100 WATER 20 - CHARGE 500 85 20 - true + ATTACK DA1 NONE -5 @@ -2005,7 +2004,6 @@ 4563 - @@ -2086,11 +2084,10 @@ 1100 WATER 20 - CHARGE 500 85 20 - true + ATTACK DA1 NONE -5 @@ -2105,7 +2102,6 @@ 4563 - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/06300-06399.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/06300-06399.xml index 875a9df53e..9c41a27faf 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/06300-06399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/06300-06399.xml @@ -197,7 +197,7 @@ 2 83 121 - true + ATTACK A2 4000 NONE @@ -934,7 +934,7 @@ 2 83 121 - true + ATTACK A2 1000 NONE @@ -1099,7 +1099,7 @@ 2 84 121 - true + ATTACK A2 1000 NONE @@ -1655,7 +1655,7 @@ icon.skill0096 2 85 - true + ATTACK A2 1000 NONE @@ -1750,7 +1750,7 @@ 2 85 121 - true + ATTACK A2 1000 NONE @@ -1838,7 +1838,7 @@ 2 85 121 - true + ATTACK A2 1000 NONE @@ -2124,7 +2124,7 @@ 2 85 121 - true + ATTACK A2 1000 NONE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/06600-06699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/06600-06699.xml index 2b97676913..9e89fef1fa 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/06600-06699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/06600-06699.xml @@ -2034,7 +2034,6 @@ 900 FIRE 20 - CHARGE 500 85 83 @@ -2054,7 +2053,6 @@ 2319 - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/07000-07099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/07000-07099.xml index e5780553ee..c2fe8c8497 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/07000-07099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/07000-07099.xml @@ -1416,7 +1416,7 @@ 200 800 75 - true + ATTACK DA1 NONE -5 @@ -1441,7 +1441,7 @@ 800 1 75 - true + ATTACK DA2 NONE -5 @@ -1456,6 +1456,11 @@ 200 + + + 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 + + 1 @@ -1468,7 +1473,7 @@ 800 2 75 - true + ATTACK DA2 NONE -5 @@ -1489,7 +1494,7 @@ 2000 1 75 - true + ATTACK A1 NONE;STRIDER;WYVERN;WOLF -5 @@ -1508,7 +1513,7 @@ 2000 1 75 - true + ATTACK A1 NONE;STRIDER;WYVERN;WOLF -5 @@ -1612,7 +1617,7 @@ 1080 2 70 - true + ATTACK A2 NONE -5 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/08500-08599.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/08500-08599.xml index fc626ba4c7..34b373016d 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/08500-08599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/08500-08599.xml @@ -2087,7 +2087,7 @@ 1100 78 1500 - true + ATTACK ENEMY SINGLE @@ -2125,7 +2125,7 @@ 1100 78 1500 - true + ATTACK ENEMY SINGLE @@ -2209,7 +2209,7 @@ SHOCK true STUN - true + ATTACK ENEMY SINGLE diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/08800-08899.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/08800-08899.xml index acf78a3f36..5da08b2abb 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/08800-08899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/08800-08899.xml @@ -33,476 +33,1344 @@ 85 - + icon.accessory_bangel_of_tauti_i01 P 5 1 + + + 5 + + + 1 + STR + + + 1 + INT + + - + icon.karma P 5 99 + + + 3 + PER + + + 3 + PER + + + 3 + PER + + - + icon.karma P 5 99 + + + 8 + PER + + + 8 + PER + + + 8 + PER + + - + icon.karma P 5 99 + + + 5 + PER + + + 5 + PER + + + 5 + PER + + - + icon.karma P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - + icon.karma P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - + icon.karma P 5 99 + + + 3 + PER + + + 3 + PER + + + 3 + PER + + - + icon.karma P 5 99 + + + 8 + PER + + + 8 + PER + + + 8 + PER + + - + icon.karma P 5 99 + + + 5 + PER + + + 5 + PER + + + 5 + PER + + - + icon.karma P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - + icon.karma P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - + icon.karma P 5 99 + + + 3 + PER + + + 3 + PER + + + 3 + PER + + - + icon.karma P 5 99 + + + 8 + PER + + + 8 + PER + + + 8 + PER + + - + icon.karma P 5 99 + + + 5 + PER + + + 5 + PER + + + 5 + PER + + - + icon.karma P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - + icon.karma P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.karma P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 3 + PER + + + 3 + PER + + + 3 + PER + + - - + + + icon.pk P 5 99 + + + 8 + PER + + + 8 + PER + + + 8 + PER + + - - + + + icon.pk P 5 99 + + + 5 + PER + + + 5 + PER + + + 5 + PER + + - - + + + icon.pk P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - - + + + icon.pk P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - - + + + icon.pk P 5 99 + + + 3 + PER + + + 3 + PER + + + 3 + PER + + - - + + + icon.pk P 5 99 + + + 8 + PER + + + 8 + PER + + + 8 + PER + + - - + + + icon.pk P 5 99 + + + 5 + PER + + + 5 + PER + + + 5 + PER + + - - + + + icon.pk P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - - + + + icon.pk P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - - + + + icon.pk P 5 99 + + + 3 + PER + + + 3 + PER + + + 3 + PER + + - - + + + icon.pk P 5 99 + + + 8 + PER + + + 8 + PER + + + 8 + PER + + - - + + + icon.pk P 5 99 + + + 5 + PER + + + 5 + PER + + + 5 + PER + + - - + + + icon.pk P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - - + + + icon.pk P 5 99 + + + 2 + PER + + + 2 + PER + + + 2 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + - - + + + icon.pk P 5 99 + + + 15 + PER + + + 15 + PER + + + 15 + PER + + @@ -1170,7 +2038,7 @@ DIFF - +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10000-10099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10000-10099.xml index 0334d76b5d..43e24d6d8c 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10000-10099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10000-10099.xml @@ -439,7 +439,10 @@ - 80 + + 80 + {base + base / 100 * subIndex} + 1 2 @@ -472,7 +475,7 @@ 71 5 - true + ATTACK 40 800 570 @@ -533,6 +536,7 @@ 22354 23444 24534 + {base + base / 100 * subIndex} @@ -547,6 +551,12 @@ -10 PER + + + {-2 * subIndex} + + DIFF + @@ -555,7 +565,10 @@ 4 5 SPEED_DOWN - 100 + + 100 + {base + base / 100 * subIndex} + 400 icon.skill10009 A2 @@ -586,7 +599,7 @@ 83 85 - true + ATTACK 40 1200 470 @@ -632,6 +645,7 @@ 27148 28472 29796 + {base + base / 100 * subIndex} true 5 @@ -640,6 +654,12 @@ -70 DIFF + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -648,9 +668,12 @@ 4 5 CRITICAL_DMG_DOWN - 200 + + 200 + {base + base / 100 * subIndex} + 30 - true + ATTACK 85 87 @@ -682,7 +705,7 @@ 106 109 - true + ATTACK 40 400 1700 @@ -728,6 +751,7 @@ 34357 35175 36811 + {base + base / 100 * subIndex} true 5 @@ -743,6 +767,12 @@ -20 PER + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -752,7 +782,10 @@ 5 STUN STUN - 90 + + 90 + {base + base / 100 * subIndex} + 5-12 0;0;150;180 30 @@ -816,12 +849,19 @@ 18453 19353 20253 + {base + base / 100 * subIndex} 5 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -833,7 +873,10 @@ 9 STUN STUN - 70 + + 70 + {base + base / 100 * subIndex} + PHYSICAL 0;0;150;180 30 @@ -905,12 +948,19 @@ 14897 15623 16349 + {base + base / 100 * subIndex} 5 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -997,9 +1047,17 @@ 18045 19013 19981 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + @@ -1009,7 +1067,10 @@ 3 5 HEAL_EFFECT_DOWN - 80 + + 80 + {base + base / 100 * subIndex} + 5-12 200 2 @@ -1080,6 +1141,7 @@ 23468 24612 25756 + {base + base / 100 * subIndex} 5 @@ -1087,6 +1149,12 @@ -90 PER + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -1095,7 +1163,10 @@ 1 1 STUN - 190 + + 190 + {base + base / 100 * subIndex} + 30 PHYSICAL @@ -1123,7 +1194,10 @@ 78 81 - 600 + + 600 + {base + 10 * subIndex} + 500 1000 10000 @@ -1166,7 +1240,10 @@ 1 STUN 200 - 150 + + 150 + {base + base / 100 * subIndex} + 30 5 @@ -1193,7 +1270,10 @@ 152 156 - 600 + + 600 + {base + 10 * subIndex} + 1100 500 1000 @@ -1235,7 +1315,11 @@ 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + PD_UP_SPECIAL ULTIMATE_DEFENCE 5 @@ -1328,14 +1412,28 @@ 100 + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF + - 60 90
1 - 10 + + 10 + {base + 0.5 * subIndex} + SACRIFICE 1000 5 @@ -1375,17 +1473,23 @@ 90 + + + {-1 - ((subIndex - 1} * 0.5)} + + PER +
- 5000 10000 11000 12000 13000
- 5000 7000 8000 9000 10000
- 50 70 70 70 70
1000 2 - 15 + + 15 + {base + 0.5 * subIndex} + TRANSFER_DAMAGE 5 @@ -1455,14 +1559,17 @@ DEBUFF + + + {2 * subIndex} + + DIFF +
- 700 800 900 1000 1100 1200 1300
- 350 400 450 500 550 600 650
- 1.35 1.4 1.45 1.5 1.5 1.5 1.5
50 5 @@ -1525,10 +1632,11 @@ - 85 90 95 99 100 102 104
- 10 15 20 25 27 30 32
1 - 10 + + 10 + {base + 0.5 * subIndex} + REFLECT_MAGIC_DD icon.skill10021 A2 @@ -1575,13 +1683,28 @@ 50 MAGIC + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF +
1 - 10 + + 10 + {base + 0.5 * subIndex} + RESIST_DEATH 97 icon.skill10022 @@ -1600,13 +1723,25 @@ SINGLE + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF + 5-12 - true + ATTACK 5 95 @@ -1644,25 +1779,39 @@ ENEMY SQUARE NOT_FRIEND - - - 35222 - 38826 - 43471 - 45591 - 47711 - - true - + + + + 35222 + 38826 + 43471 + 45591 + 47711 + {base + base / 100 * subIndex} + + true + + 1 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + + + 2 - 15 + + 15 + {base + 0.5 * subIndex} + TRANSFER_DAMAGE 99 1000 @@ -1696,6 +1845,12 @@ 10 + + + {2 * subIndex} + + DIFF + @@ -1816,6 +1971,10 @@ 1 5 TARGET_LOCK + + 90 + {base + base / 100 * subIndex} + -100;200 85 @@ -1868,6 +2027,18 @@ 10060 1 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + DIFF + @@ -1876,6 +2047,10 @@ 1 5 TARGET_LOCK + + 80 + {base + base / 100 * subIndex} + 10-10 300 @@ -1935,6 +2110,18 @@ 10060 1 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + DIFF + @@ -2245,7 +2432,7 @@ NONE NONE 1000 - SELF + MY_PARTY PARTY FRIEND @@ -3251,7 +3438,6 @@ 80 20 PHYSICAL - CHARGE DA2 SHOCK 5 @@ -3762,8 +3948,6 @@ - 85 90 95 99
- 1000 1300 1500 2000
icon.skill10064 A1 TARGET @@ -4127,21 +4311,48 @@
- - + icon.skill10073 A1 SELF SINGLE 96 + + 85 + 90 + 95 + 99 + 101 + 103 + 105 + 2200 300 30000 1 + NONE + 5 + + + + + + 18 + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + + + - + icon.skill10074 A1 @@ -4197,9 +4408,6 @@ - - 1.02 1.03 1.04 1.06
- 1 2 3 4
icon.skill11832 85 @@ -4248,7 +4456,6 @@ - 1.02 1.03 1.04 1.06
1 2 @@ -4425,33 +4632,113 @@
- - + icon.skill0000 A1 SELF SINGLE 408 5000 + + 85 + 90 + 95 + 99 + 101 + 103 + 105 + + + + + 600 + 650 + 700 + 750 + 800 + 850 + 900 + + + + + 60 + 65 + 70 + 75 + 80 + 85 + 90 + + + - - + icon.skill0000 A1 SELF SINGLE 408 5000 + + 85 + 90 + 95 + 99 + 101 + 103 + 105 + + + + + 400 + 450 + 500 + 550 + 600 + 650 + 700 + + + + + 40 + 45 + 50 + 55 + 60 + 65 + 70 + + + - + icon.skill0191 A1 SELF SINGLE 408 5000 + + 85 + 90 + 95 + 99 + + + + + 40 + 45 + 50 + 55 + + + @@ -4614,10 +4901,10 @@ 600 PHYSICAL 0;0;600;60 - CHARGE DA2 ENEMY FAN + NOT_FRIEND SHOCK 30 @@ -4655,13 +4942,29 @@ - + icon.skill0191 A1 SELF SINGLE 408 5000 + + 85 + 90 + 95 + 99 + + + + + 60 + 65 + 70 + 75 + + + @@ -4731,6 +5034,108 @@ 100 10 + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + + + + 532 + 570 + 607 + 644 + 681 + 718 + 756 + 793 + 830 + 867 + 904 + 942 + 979 + 1016 + 1053 + 1090 + 1128 + 1165 + 1202 + 1240 + 1264 + 1289 + 1314 + 1339 + 1363 + 1389 + 1413 + 1438 + 1463 + 1488 + + + + + 2421 + 2590 + 2759 + 2928 + 3097 + 3265 + 3434 + 3603 + 3772 + 3941 + 4110 + 4279 + 4448 + 4617 + 4786 + 4955 + 5124 + 5293 + 5462 + 5631 + 5743 + 5856 + 5968 + 6081 + 6194 + 6306 + 6419 + 6531 + 6644 + 6757 + + @@ -4816,11 +5221,14 @@ - 11997 14177 16357 18101 18973 19845 20717
1 5 PARALYZE - 40 + PARALYZE + + 40 + {base + base / 100 * subIndex} + 10-10 100 MAGIC @@ -4845,10 +5253,9 @@ 90 95 99 - - 101 - 103 - 105 + 101 + 103 + 105
140 @@ -4859,13 +5266,14 @@ 185 195 - true + ATTACK 400 1500 500 60000 -828 true + PARALYZE @@ -4879,6 +5287,7 @@ 18973 19845 20717 + {base + base / 100 * subIndex} @@ -5001,8 +5410,16 @@ 19863 20831 21799 + {base + base / 100 * subIndex} - 15 + + 15 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + true @@ -5011,16 +5428,13 @@
- 1.5 1.7 2 2.2
- 10 20 25 30
- 10 20 25 30
- 4 6 8 10
- 1.1 1.2 1.25 1.3
- 30 40 50 60
- 1.3 1.4 1.5 1.6
1 - 60 - PINCH + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + + POSSESSION icon.skill10098 A2 SELF @@ -5130,13 +5544,23 @@ BLUNT + + + {-1 - ((subIndex - 1} * 0.5)} + + PER +
1 - 60 - PINCH + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + + POSSESSION icon.skill10099 A2 SELF @@ -5246,6 +5670,12 @@ BLUNT + + + {-1 - ((subIndex - 1} * 0.5)} + + PER +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10100-10199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10100-10199.xml index b2e4def318..814128f5b8 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10100-10199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10100-10199.xml @@ -2,16 +2,13 @@ - 1.5 1.7 2 2.2
- 10 20 25 30
- 10 20 25 30
- 4 6 8 10
- 1.1 1.2 1.25 1.3
- 30 40 50 60
- 1.3 1.4 1.5 1.6
1 - 60 - PINCH + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + + POSSESSION icon.skill10100 A2 SELF @@ -166,20 +163,23 @@ DARK + + + {-1 - ((subIndex - 1} * 0.5)} + + PER +
- 1.05 1.07 1.1 1.15
- 1.5 1.65 1.8 2
- 10 20 25 30
- 4 6 8 10
- 1.1 1.15 1.2 1.25
- 30 40 50 60
- 1.3 1.4 1.5 1.6
1 - 60 - PINCH + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + + POSSESSION icon.skill10101 A2 SELF @@ -289,21 +289,28 @@ BLUNT + + + {-1 - ((subIndex - 1} * 0.5)} + + PER +
- 97 98 99 101 103 105
- 33505 34353 35201 36897 38593 40289
1 1 KNOCKDOWN KNOCKDOWN 5-12 150 - 50 + + 50 + {base + base / 100 * subIndex} + 1 - true + ATTACK icon.skill10102 1785 6 @@ -346,6 +353,7 @@ 36897 38593 40289 + {base + base / 100 * subIndex} true @@ -358,11 +366,13 @@
- 18151 18641 19131 20111 21091 22071
2 10 SPEED_DOWN - 60 + + 60 + {base + base / 100 * subIndex} + 10-10 200 MAGIC @@ -407,6 +417,7 @@ 20111 21091 22071 + {base + base / 100 * subIndex} @@ -419,8 +430,8 @@ 5 4 - AURA_BUFF_SELF - 85 + PHOENIX_AURA + 101 icon.skill10104 AU 1000 @@ -429,18 +440,28 @@ 10108 1 + + {1000 + subIndex} + {2000 + subIndex} + 7 - 25 + + 25 + {0.7 + 0.3 * subIndex} + PER 25 PER - - -25 + + + -25 + {-0.7 - 0.3 * subIndex} + PER @@ -449,7 +470,7 @@ 5 4 - AURA_BUFF_SELF + REVENGE_AURA 85 icon.skill10105 AU @@ -459,10 +480,16 @@ 10109 1 + + {2000 + subIndex} + 7 - 25 + + 25 + {0.7 + 0.3 * subIndex} + PER @@ -487,7 +514,7 @@ 5 4 - AURA_BUFF_SELF + EVAS_AURA 85 icon.skill10106 AU @@ -497,10 +524,17 @@ 10110 1 + + {1000 + subIndex} + {2000 + subIndex} + 7 - 25 + + 25 + {0.7 + 0.3 * subIndex} + PER @@ -508,28 +542,54 @@ DEBUFF - 50 + + 50 + {5 + subIndex} + FIRE - 50 + + 50 + {5 + subIndex} + WATER - 50 + + 50 + {5 + subIndex} + WIND - 50 + + 50 + {5 + subIndex} + EARTH + + + 50 + {5 + subIndex} + + HOLY + + + + 50 + {5 + subIndex} + + DARK +
5 4 - AURA_BUFF_SELF + TEMPLAR_AURA 85 icon.skill10107 AU @@ -539,18 +599,31 @@ 10111 1 + + {1000 + subIndex} + {2000 + subIndex} + 7 - 15 + + 15 + {0.7 + 0.3 * subIndex} + PER - 10 + + 10 + {subIndex * 0.5} + DIFF - 15 + + 15 + {0.7 + 0.3 * subIndex} + PER @@ -560,7 +633,6 @@ 1 11 AURA - AURA_BUFF 1000 false 5 @@ -575,15 +647,21 @@ 1000 - 20 + + 20 + {0.7 + 0.3 * subIndex} + PER 20 PER - - -20 + + + -20 + {-0.7 - 0.3 * subIndex} + PER @@ -593,7 +671,6 @@ 1 11 AURA - AURA_DEBUFF 300 false 5 @@ -609,15 +686,21 @@ true - -30 + + -30 + {-0.7 - 0.3 * subIndex} + PER - -30 + + -30 + {-0.7 - 0.3 * subIndex} + PER - 0.7 + -20 DIFF @@ -628,7 +711,7 @@ -30 PER - + 15 PER @@ -639,7 +722,6 @@ 1 11 AURA - AURA_BUFF 1000 false 85 @@ -653,7 +735,10 @@ 1000 - 20 + + 20 + {0.7 + 0.3 * subIndex} + PER @@ -661,21 +746,47 @@ DEBUFF - 40 + + 40 + {5 + subIndex} + FIRE - 40 + + 40 + {5 + subIndex} + WATER - 40 + + 40 + {5 + subIndex} + WIND - 40 + + 40 + {5 + subIndex} + EARTH + + + 40 + {5 + subIndex} + + HOLY + + + + 40 + {5 + subIndex} + + DARK + @@ -683,7 +794,6 @@ 1 11 AURA - AURA_BUFF 1000 false 5 @@ -698,7 +808,10 @@ 1000 - 10 + + 10 + {0.7 + 0.3 * subIndex} + PER @@ -706,15 +819,24 @@ PER - 10 + + 10 + {subIndex * 0.5} + DIFF - 10 + + 10 + {0.7 + 0.3 * subIndex} + PER - 10 + + 10 + {0.7 + 0.3 * subIndex} + PER diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10200-10299.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10200-10299.xml index 58618e32da..619413543d 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10200-10299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10200-10299.xml @@ -126,7 +126,7 @@ icon.skill10317 5 85 - true + ATTACK A1 40 200 @@ -157,7 +157,7 @@ icon.skill10317 5 85 - true + ATTACK DA1 600 800 @@ -184,7 +184,6 @@ - 1689 1958 2270 2555 2895 3071 3258 3457 3667 3890
icon.skill10251 P 5 @@ -201,6 +200,17 @@ 110 + + L2Character + 1 + 107 + 1 + 50 + SELF + true + 10284 + 1 + STR @@ -262,7 +272,6 @@ - 1689 1958 2270 2555 2895 3071 3258 3457 3667 3890
icon.skill10252 P 5 @@ -330,7 +339,6 @@ - 1731 1901 2088 2252 2524 2619 2718 2821 2940 3052
P 5 @@ -381,7 +389,6 @@ - 1506 1654 1817 1959 2196 2279 2365 2455 2558 2655
P 5 @@ -467,7 +474,6 @@ - 20 22 24 26 30 32 34 36 38 40
icon.skill10255 P 5 @@ -530,9 +536,6 @@ - 296 296 411 489 533 596 660 723 787 850
- 606 606 843 1002 1092 1222 1352 1482 1612 1742
- 1027 1027 1381 1554 1761 1869 1982 2103 2231 2367
P 5 @@ -632,11 +635,13 @@ - 11159 11936 12714 13491 14269 15046 15824 16601 20595 21599 22603
4 20 PD_DOWN - 80 + + 80 + {base + base / 100 * subIndex} + 40 200 400 @@ -669,7 +674,7 @@ 66 68 - true + ATTACK A2 2000 NONE @@ -721,6 +726,7 @@ 20595 21599 22603 + {base + base / 100 * subIndex} true 5 @@ -730,6 +736,12 @@ -23 PER + + + {-2 * subIndex} + + DIFF +
@@ -740,7 +752,6 @@ - 19893 20581 21956 23332 24707 26082 27458 28833 31628 33090 34552
40 400 200 @@ -817,10 +828,18 @@ 31628 33090 34552 + {base + base / 100 * subIndex} true 3 - 3 + + 3 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + true
@@ -833,7 +852,10 @@ 3 KNOCKDOWN KNOCKDOWN - 120 + + 120 + {base + base / 100 * subIndex} + 40 500 400 @@ -905,6 +927,7 @@ 32981 34497 36013 + {base + base / 100 * subIndex} true 3 @@ -927,16 +950,24 @@ 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 + + + {-0.6 - 0.4 * subIndex} + + PER +
- 551 566 598 630 662 693 725 757 812 844 876
4 20 PD_DOWN - 80 + + 80 + {base + base / 100 * subIndex} + 600 300 1100 @@ -1014,12 +1045,19 @@ 812 844 876 + {base + base / 100 * subIndex} -23 PER + + + {-2 * subIndex} + + DIFF + @@ -1037,7 +1075,10 @@ STUN 5-12 300 - 130 + + 130 + {base + base / 100 * subIndex} + -687 -690 @@ -1118,6 +1159,7 @@ 17896 18622 19348 + {base + base / 100 * subIndex} true 5 @@ -1129,6 +1171,12 @@ 60 + + + {-0.6 - 0.4 * subIndex} + + PER +
@@ -1140,7 +1188,10 @@ KNOCKDOWN 5-12 200 - 90 + + 90 + {base + base / 100 * subIndex} + 30 icon.skill10266 A2 @@ -1224,23 +1275,29 @@ 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 + + + {-0.6 - 0.4 * subIndex} + + PER + - 1 2 3 4 5 6 7 8 9
1 3 STUN STUN - 130 + + 130 + {base + base / 100 * subIndex} + PHYSICAL icon.skill10267 - 800 - CHARGE DA2 - true + ATTACK 5 38 @@ -1253,7 +1310,10 @@ 53 56 - 600 + + 600 + {base + 10 * subIndex} + 800 500 100 @@ -1297,7 +1357,10 @@ - 200 + + 200 + {base - (3 * subIndex)} + @@ -1353,16 +1416,17 @@ - 10508 11190 11872 12554 13236 13918 14600 15539 16297 17055
4 5 SPEED_DOWN - 90 + + 90 + {base + base / 100 * subIndex} + 20 PHYSICAL 5-12 150 - CHARGE icon.skill10269 DA2 5 @@ -1390,8 +1454,11 @@ 142 146 - true - 600 + ATTACK + + 600 + {base + 10 * subIndex} + 890 500 5000 @@ -1426,11 +1493,13 @@ - 200 + + 200 + {base - (3 * subIndex)} + - 10508 @@ -1458,7 +1527,10 @@ 1 - 120 + + 120 + {base + subIndex * 15} + FORCE_HP_UP 696 1200 @@ -1486,15 +1558,31 @@ 15 PER + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
- + 0.8 0.75
4 10 PD_DOWN + + 100 + {base + base / 100 * subIndex} + 9-10 700 icon.skill10271 @@ -1544,7 +1632,10 @@ 5 DISARM DOT_BLEEDING - 90 + + 90 + {base + base / 100 * subIndex} + 6-12 200 PHYSICAL @@ -1590,6 +1681,18 @@ PER + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + DIFF +
@@ -1601,7 +1704,11 @@ 3 4
- 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + SPECIAL_BERSERKER icon.skill10274 A2 @@ -1634,7 +1741,28 @@ SINGLE - 70 + + 70 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + LESS CASTER @@ -1661,9 +1789,8 @@ 30 - 100 - 10285 + 10285 1 @@ -1727,9 +1854,8 @@
- + - 65085 69414 73352 77290
icon.skill10275 A1 1178 @@ -1747,7 +1873,7 @@ 30000 -709 true - true + ATTACK NONE 4 true @@ -1767,14 +1893,22 @@ - 5 - true 65085 69414 73352 77290 + {base + base / 100 * subIndex} + true + + 5 + {base + base / 100 * subIndex} + + + 0.7 + {0.99 - 0.006 * (subIndex - 1)} +
@@ -1800,6 +1934,74 @@ + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + + + + 2421 + 2590 + 2759 + 2928 + 3097 + 3265 + 3434 + 3603 + 3772 + 3941 + 4110 + 4279 + 4448 + 4617 + 4786 + 4955 + 5124 + 5293 + 5462 + 5631 + 5743 + 5856 + 5968 + 6081 + 6194 + 6306 + 6419 + 6531 + 6644 + 6757 + +
@@ -1926,7 +2128,11 @@ 4 - 10 + + 10 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + ABNORMAL_INVINCIBILITY INVINCIBILITY icon.skill10279 @@ -1944,7 +2150,28 @@ SINGLE - 70 + + 70 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + LESS CASTER @@ -1995,7 +2222,6 @@ - 44711 46723 50165 52369 54573
1 3 KNOCKDOWN @@ -2057,9 +2283,17 @@ 50165 52369 54573 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + 700 @@ -2087,7 +2321,6 @@
- icon.skill10284 @@ -2115,6 +2348,54 @@ 4 TARGET SINGLE + + + L2Character + 1 + 107 + 1 + 20 + SELF + true + 10284 + 2 + + + L2Character + 1 + 107 + 1 + 10 + SELF + true + 10284 + 3 + + + + 10 + 20 + 30 + + PER + + DUAL + POLE + SWORD + BLUNT + DUALFIST + DUALBLUNT + + + + + 5 + 7 + 10 + + DIFF + + @@ -2140,8 +2421,6 @@ - 776 878 993 1097 1237 1299 1365 1434 1507 1583
- 20 22 24 26 30 32 34 36 38 40
icon.skill10257 P 5 @@ -2242,7 +2521,6 @@ - 225 228 232 235 238 242
1 2 @@ -2301,7 +2579,6 @@ - 11557 11956 12754 13553 14351 15150 15948 16747 20787 21925 23063
5-12 150 icon.skill10288 @@ -2333,7 +2610,7 @@ 210 216 - true + ATTACK 500 1000 1790 @@ -2370,22 +2647,32 @@ 20787 21925 23063 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + 0.9 0.9 1.5
- + - 1.3 1.35 1.4 1.45
- 1.05 1.1 1.15 1.2
1 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + SUPER_AVOID icon.skill10289 5 @@ -2433,6 +2720,18 @@ PER + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -2487,7 +2786,10 @@ 1 - 300 + + 300 + {base + subIndex * 15} + POSSESSION 707 2000 @@ -2510,13 +2812,22 @@ 30 PER + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + 1 - 300 + + 300 + {300 + subIndex * 15} + POSSESSION 707 2000 @@ -2552,13 +2863,22 @@ 10 PER + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + 1 - 300 + + 300 + {300 + subIndex * 15} + POSSESSION 707 2000 @@ -2581,8 +2901,11 @@ 20 PER - - -40 + + + -40 + {-1 - ((subIndex - 1} * 0.5)} + PER @@ -2591,7 +2914,10 @@ 1 - 300 + + 300 + {300 + subIndex * 15} + POSSESSION 707 2000 @@ -2618,13 +2944,22 @@ 30 PER + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + 1 - 300 + + 300 + {300 + subIndex * 15} + POSSESSION 707 2000 @@ -2651,13 +2986,22 @@ 120 DIFF + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + 2 - 1800 + + 1800 + {1800 + subIndex * 15} + DETECT_WEAKNESS icon.skill0359 A2 @@ -2677,13 +3021,22 @@ 10 10 + + + {0.6 + 0.4 * subIndex} + + PER + 2 - 1800 + + 1800 + {1800 + subIndex * 15} + DETECT_WEAKNESS icon.skill0360 A2 @@ -2704,10 +3057,16 @@ 10 10 + + + {0.6 + 0.4 * subIndex} + + PER + - + 707 icon.skill10298 @@ -2725,6 +3084,80 @@ 100 + + 50 + + + 50 + + + + 532 + 570 + 607 + 644 + 681 + 718 + 756 + 793 + 830 + 867 + 904 + 942 + 979 + 1016 + 1053 + 1090 + 1128 + 1165 + 1202 + 1240 + 1264 + 1289 + 1314 + 1339 + 1363 + 1389 + 1413 + 1438 + 1463 + 1488 + + + + + 2421 + 2590 + 2759 + 2928 + 3097 + 3265 + 3434 + 3603 + 3772 + 3941 + 4110 + 4279 + 4448 + 4617 + 4786 + 4955 + 5124 + 5293 + 5462 + 5631 + 5743 + 5856 + 5968 + 6081 + 6194 + 6306 + 6419 + 6531 + 6644 + 6757 + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10300-10399.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10300-10399.xml index 311a8f8cb9..ce28b0760c 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10300-10399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10300-10399.xml @@ -3,7 +3,6 @@ - 52746 59601 65085 69414 73352 77290
5 90 @@ -23,7 +22,7 @@ 351 369 - true + ATTACK 40 400 1690 @@ -48,7 +47,18 @@
- 10 + + 10 + {base + (subIndex -1)} + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + LESS TARGET @@ -237,9 +247,6 @@
- 1 1 2 2
- 583 678 807 978
- 1.02 1.03 1.04 1.05
icon.skill11836 P @@ -293,7 +300,10 @@ 1 - 300 + + 300 + {base + subIndex * 15} + POSSESSION icon.skill11834 A2 @@ -365,6 +375,12 @@ DUALBLUNT + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + @@ -466,7 +482,7 @@ 4 5 - PER + PER @@ -475,7 +491,7 @@ 4 5 - PER + PER @@ -514,7 +530,6 @@ PHYSICAL 800 0;0;600;60 - CHARGE 1 85 @@ -522,7 +537,7 @@ 95 99 - true + ATTACK icon.skill10313 A1 ENEMY @@ -723,7 +738,6 @@ - 17438 20033 22717 25700 27419 28665 29911
icon.skill10318new A1 ENEMY @@ -746,7 +760,7 @@ 133 140 - true + ATTACK 600 1500 500 @@ -779,9 +793,17 @@ 27419 28665 29911 + {base + base / 100 * subIndex} true - 15 + 15 + 15 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} + 3 @@ -875,12 +897,14 @@
- 22536 26428 29542 32656 35788 37424 39060
1 9 STUN STUN - 50 + + 50 + {base + base / 100 * subIndex} + 6-12 150 PHYSICAL @@ -931,6 +955,7 @@ 35788 37424 39060 + {base + base / 100 * subIndex} true 15 @@ -938,12 +963,21 @@ + + + {-0.6 - 0.4 * subIndex} + + PER +
1 - 300 + + 300 + {base + subIndex * 15} + POSSESSION icon.skll10320 A2 @@ -982,6 +1016,12 @@ 25 PER + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + @@ -1034,7 +1074,10 @@ BUFF - 25 + 25 + 80 + {base + base / 100 * subIndex} + 2 @@ -1073,8 +1116,9 @@ 105 112 119 - 133 - 140 + 126 + 133 + 140 600 150 @@ -1132,7 +1176,6 @@ - 1.1 1.12 1.5
icon.skill10328 97 @@ -1210,12 +1253,15 @@
- 18005 22505 27005 30605 32405 34205 36005
1 5 STUN STUN 60 + + 60 + {base + base / 100 * subIndex} + PHYSICAL 1 SHOCK @@ -1256,9 +1302,22 @@ + + 18005 + 22505 + 27005 + 30605 + 32405 + 34205 + 36005 + {base + base / 100 * subIndex} + + true + + 15 + {base + base / 100 * subIndex} + 0.7 - true - 15
@@ -1275,22 +1334,59 @@ true
- + 1 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + + LONG_BLOW icon.skill10332 + 5 + 1785 A2 64 2000 200 673 - 60 300000 + + + 20 + PER + + DUALBLUNT + DUAL + + + + 20 + PER + + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + 1 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + LONG_BLOW icon.skill10333 5 @@ -1343,13 +1439,29 @@ 80 DIFF + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + 1 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + WIDE_SWORD icon.skill10334 5 @@ -1365,23 +1477,39 @@ 30 - PER + PER 30 - PER + PER 5 DIFF + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + 1 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + BIG_FIST icon.skill10335 5 @@ -1437,6 +1565,18 @@ DUALFIST + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10400-10499.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10400-10499.xml index dc89c54aac..b65baaf790 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10400-10499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10400-10499.xml @@ -40,7 +40,7 @@ icon.skill10317 5 85 - true + ATTACK A1 40 200 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10500-10599.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10500-10599.xml index 86ec285c4e..d4442257ca 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10500-10599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10500-10599.xml @@ -33,7 +33,6 @@ - 739 856 993 1117 1266 1343 1425 1512 1604 1702
icon.skill10501 5 @@ -99,7 +98,6 @@ - 844 979 1135 1277 1447 1535 1629 1728 1833 1945
icon.skill10502 5 @@ -162,7 +160,6 @@ - 1506 1654 1817 1959 2196 2279 2365 2455 2558 2655
icon.skill10503 5 @@ -247,7 +244,6 @@ - 17 18 19 20 22 23 24 25 26 27
icon.skill10504 5 @@ -297,7 +293,6 @@ - 539 644 750 891 970 1085 1200 1315 1430 1545
icon.skill10505 85 @@ -393,7 +388,6 @@ - 32401 33521 35765 38007 40251 42495 44737 46983 48511 50491 52471
1 2 @@ -440,7 +434,7 @@ 77 79 - true + ATTACK 40 400 830 @@ -474,6 +468,15 @@ + + 15 + + + 70 + 5 + + + 32401 @@ -487,19 +490,35 @@ 48511 50491 52471 + {base + base / 100 * subIndex} 30 40 true - - 15 + + + + + 32401 + 33521 + 35765 + 38007 + 40251 + 42495 + 44737 + 46983 + 48511 + 50491 + 52471 + {base + base / 100 * subIndex} + {base + base / 100 * (5 + subIndex)} + + 30 + 40 + true - - 70 - 5 - - +
@@ -537,7 +556,7 @@ 86 88 - true + ATTACK 40 400 1030 @@ -574,6 +593,19 @@ + + 15 + + + 40 + DIFF + + + 5 + DIFF + + + 21344 @@ -587,23 +619,35 @@ 35304 37026 38748 + {base + base / 100 * subIndex} 15 36.5 true - - 15 + + + + + 21344 + 22083 + 23560 + 25039 + 26516 + 27993 + 29472 + 30949 + 35304 + 37026 + 38748 + {base + base / 100 * subIndex} + {base + base / 100 * (5 + subIndex)} + + 15 + 36.5 + true - - 40 - DIFF - - - 5 - DIFF - - + @@ -617,9 +661,8 @@ - 22718 24289 25861 27431 29003 30574 32146 33717 37332 39152 40972
icon.skill10510 - true + ATTACK A1 5 @@ -678,6 +721,11 @@ + + 15 + + + 22718 @@ -691,6 +739,7 @@ 37332 39152 40972 + {base + base / 100 * subIndex} 20 BLEEDING @@ -698,18 +747,38 @@ 36.5 true - - 15 + + + + + 22718 + 24289 + 25861 + 27431 + 29003 + 30574 + 32146 + 33717 + 37332 + 39152 + 40972 + {base + base / 100 * subIndex} + {base + base / 100 * (5 + subIndex)} + + 20 + BLEEDING + 4130 + 36.5 + true - +
- 26320 30840 35360 38976 41506 43360 45214
icon.skill10511 - true + ATTACK A1 5 @@ -757,6 +826,11 @@ + + 15 + + + 26320 @@ -766,21 +840,36 @@ 41506 43360 45214 + {base + base / 100 * subIndex} 20 36.5 true - - 15 + + + + + 26320 + 30840 + 35360 + 38976 + 41506 + 43360 + 45214 + {base + base / 100 * subIndex} + {base + base / 100 * (5 + subIndex)} + + 20 + 36.5 + true - +
- 11903 12313 13135 13957 14779 15601 16423 17244 20954 21976 22998
icon.skill10512 5-12 200 @@ -812,7 +901,7 @@ 162 166 - true + ATTACK 600 1100 1430 @@ -857,9 +946,17 @@ 20954 21976 22998 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} +
@@ -867,13 +964,15 @@ - 13649 14529 15409 16289 17169 18049 18929 20954 21976 22998
icon.skill10513 1 15 BLEEDING DOT_BLEEDING - 90 + + 90 + {base + base / 100 * subIndex} + 5-12 300 A2 @@ -944,6 +1043,7 @@ 20954 21976 22998 + {base + base / 100 * subIndex} true 5 @@ -952,13 +1052,18 @@ 70 5 + + + {-0.6 - 0.4 * subIndex} + + PER +
- 1 2 3 4 5 6 6 6
icon.skill10514 1 @@ -972,7 +1077,10 @@ 10 PARALYZE - 80 + + 80 + {base + base / 100 * subIndex} + 20 PARALYZE NONE @@ -1031,6 +1139,12 @@ -23 PER + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -1043,7 +1157,6 @@ - 1 2 3 4 5 6 6 6
1 2 @@ -1107,7 +1220,10 @@ 3 STUN STUN - 100 + + 100 + {base + base / 100 * subIndex} + 5 85 @@ -1134,7 +1250,10 @@ 51 53 - 600 + + 600 + {base + 10 * subIndex} + 1100 800 100 @@ -1168,7 +1287,11 @@ 1 - 50 + + 50 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + HIDE STEALTH icon.skill10517 @@ -1202,6 +1325,13 @@ 15 PER
+ + + -50 + {base + (2 * subIndex)} + + DIFF +
@@ -1235,16 +1365,17 @@ - 60 65 70 75
- 60 70 80 90
- 1 2 3 4
1 2 3 4 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + SUPER_AVOID icon.skill10520 A2 @@ -1317,13 +1448,18 @@ -30 BUFF + + + {0.6 + 0.4 * subIndex} + + PER +
- 13310 13377 13378 13379 13380 13381 13452 13453 13454
icon.skill10522 A1 5 @@ -1389,7 +1525,6 @@ - 687 700 721 742 762 783 803 823 844
1 2 @@ -1484,8 +1619,6 @@ - 70 75 80
- 70 75 80
icon.skill10524 1 @@ -1535,15 +1668,30 @@ 80 + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
- 10 20 30 40 43 46 49
- 4 6 8 10 12 14 16
- 66 66 66 66 68 70 72
1 2 @@ -1628,6 +1776,24 @@ DIFF + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -1638,7 +1804,10 @@ 3 5 SPEED_DOWN - 80 + + 80 + {base + base / 100 * subIndex} + A2 DERANGEMENT 5 @@ -1693,6 +1862,12 @@ -70 DIFF + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -1703,7 +1878,10 @@ 1 3 CONFUSION - 80 + + 80 + {base + base / 100 * subIndex} + 80 5-12 0;0;80;150 @@ -1734,6 +1912,12 @@ + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -1765,7 +1949,10 @@ 4 STUN STUN - 100 + + 100 + {base + base / 100 * subIndex} + SHOCK A2 5 @@ -1776,7 +1963,10 @@ 105 71 - 600 + + 600 + {base + 10 * subIndex} + 1100 1000 500 @@ -1851,15 +2041,15 @@ - 1.4 1.45
- 75 80
- 30 34
- 1 2
1 2 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + MOVEMENT icon.skill10531 A2 @@ -1937,13 +2127,18 @@ -80 BUFF + + + {0.6 + 0.4 * subIndex} + + PER +
- 13302 13303 13304 13305 13455 13456 13457
icon.skill10532 A1 5 @@ -1965,7 +2160,7 @@ 51 53 - true + ATTACK 400 900 3000 @@ -2061,8 +2256,6 @@ - 0 0 1 2
- 1 2 3 4
icon.skill10535 P 5 @@ -2156,7 +2349,6 @@ - 1.1 1.11 1.12 1.13
icon.skill1222 1 @@ -2210,7 +2402,6 @@ - 7396 7647 8149 8652 9154 9657 10159 10662 12098 12688 13278
1 2 @@ -2226,7 +2417,10 @@ 10 SPEED_DOWN - 80 + + 80 + {base + base / 100 * subIndex} + 20 MAGIC 900 @@ -2259,7 +2453,7 @@ 93 96 - true + ATTACK 800 1730 100 @@ -2304,6 +2498,7 @@ 12098 12688 13278 + {base + base / 100 * subIndex} true @@ -2311,13 +2506,18 @@ -180 DIFF + + + {0.6 + 0.4 * subIndex} + + PER +
- 40 42 44 46 48 50 52 54
1 2 @@ -2330,7 +2530,10 @@ 5 HIT_DOWN - 80 + + 80 + {base + base / 100 * subIndex} + icon.skill10540 A2 5 @@ -2390,6 +2593,12 @@ DIFF + + + {-0.6 - 0.4 * subIndex} + + PER +
@@ -2630,7 +2839,10 @@ 2 KNOCKDOWN KNOCKDOWN - 90 + + 90 + {base + base / 100 * subIndex} + 40 400 A2 @@ -2657,7 +2869,7 @@ 51 53 - true + ATTACK -709 NONE NONE @@ -2795,8 +3007,11 @@ STUN 2 KNOCKBACK - 140 - true + + 140 + {base + base / 100 * subIndex} + + ATTACK 40 400 A2 @@ -2860,7 +3075,6 @@ - 21344 22083 23560 25039 26516 27993 29472
icon.skill10550 1 7 @@ -2983,8 +3197,6 @@ - 776 878 993 1097 1237 1299 1365 1434 1507 1583
- 20 22 24 26 30 32 34 36 38 40
icon.skill10005 5 @@ -3085,7 +3297,6 @@ - 6871 7012 7300 7599 7909 8232 8568 8917
icon.skill0005 5-12 300 @@ -3150,7 +3361,10 @@ 3 STUN STUN - 120 + + 120 + {base + base / 100 * subIndex} + MAGIC icon.skill10554 20 @@ -3274,9 +3488,6 @@
- 2 0
- 0.3 0.4
- 0.6 0.7
icon.skill10542 icon.skill10542_2 @@ -3360,6 +3571,18 @@ 80 SELF + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -3411,15 +3634,25 @@ - -1.1 - DIFF + 10 + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER - 1.07 1.09 1.11 1.15
- 4 6 8 10
icon.skill11864 85 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10600-10699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10600-10699.xml index 5f2b67bc68..213b55af4f 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10600-10699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10600-10699.xml @@ -28,6 +28,18 @@ 0 90 + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -197,6 +209,18 @@ 90 + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + @@ -235,8 +259,6 @@ - 1.05 1.06 1.07 1.10
- 2 3 4 5
icon.skill10655 85 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10700-10799.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10700-10799.xml index 2d051e94ad..ac1b825f02 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10700-10799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10700-10799.xml @@ -2,7 +2,6 @@ - 11903 13957 15601 17244 21855 22921 23987
9-10 250 icon.skill10700 @@ -28,7 +27,7 @@ 33 36 - true + ATTACK 40 400 1030 @@ -54,14 +53,18 @@ 21855 22921 23987 + {base + base / 100 * subIndex} + + 1 + {0.99 - 0.006 * (subIndex - 1)} +
- 1.05 1.07 1.1 1.15
icon.skill0211 85 @@ -114,7 +117,6 @@
- 13580 15946 18311 20204 27142 28466 29790
icon.skill10548 A1 ENEMY @@ -137,7 +139,7 @@ 22 24 - true + ATTACK 40 400 830 @@ -162,7 +164,12 @@ 27142 28466 29790 + {base + base / 100 * subIndex} + + 1 + {0.99 - 0.006 * (subIndex - 1)} + @@ -174,7 +181,10 @@ 1 3 DISARM - 80 + + 80 + {base + base / 100 * subIndex} + PHYSICAL A2 ENEMY @@ -202,7 +212,10 @@ 3 STUN STUN - 80 + + 80 + {base + base / 100 * subIndex} + 200 MAGIC 2 @@ -339,7 +352,7 @@ icon.skill10317 5 85 - true + ATTACK A1 40 200 @@ -370,10 +383,9 @@ icon.skill10317 - CHARGE 5 85 - true + ATTACK DA1 600 800 @@ -402,7 +414,6 @@ - 1663 1928 2235 2515 2850 3023 3208 3403 3610 3830
icon.skill10751 5 @@ -478,7 +489,6 @@ - 1506 1645 1817 1959 2196 2279 2365 2455 2558 2655
icon.skill10752 5 P @@ -594,7 +604,6 @@ - 17 18 19 20 22 23 24 25 26 27
icon.skill0295 5 @@ -653,7 +662,6 @@ - 20 22 24 26 30 32 34 36 38 40
icon.skill10005 P 5 @@ -774,7 +782,6 @@ - 1.05 1.06 1.07 1.08 1.1 1.12 1.14 1.16 1.18 1.20
icon.skill10756 P 5 @@ -823,15 +830,16 @@ - 1.10 1.12 1.15 1.20
- 1.05 1.06 1.07 1.10
1 2 3 4 - 1800 + + 1800 + {1800 + subIndex * 90} + SHOOTING_STANCE icon.skill10757 A2 @@ -879,20 +887,33 @@ TWOHANDCROSSBOW
+ + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
- 1.10 1.12 1.15 1.20
- 0.95 0.94 0.93 0.90
1 2 3 4 - 1800 + + 1800 + {1800 + subIndex * 90} + SHOOTING_STANCE icon.skill10758 A2 @@ -941,20 +962,33 @@ TWOHANDCROSSBOW + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
- 1.10 1.12 1.15 1.20
- 1.05 1.06 1.07 1.10
1 2 3 4 - 1800 + + 1800 + {1800 + subIndex * 90} + SHOOTING_STANCE icon.skill10759 A2 @@ -1002,12 +1036,23 @@ TWOHANDCROSSBOW + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
- 20814 21546 23011 24476 25941 27406 28871 30336 33258 34786 36314
icon.skill10760 A1 @@ -1101,21 +1146,31 @@ 33258 34786 36314 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} +
- 2681 2771 2952 3133 3313 3494 3675 3855 4063 4239 4415
1 1 STUN KNOCKBACK - 200 + + 200 + {base + base / 100 * subIndex} + 20 icon.skill10761 A2 @@ -1146,7 +1201,7 @@ 80 83 - true + ATTACK 40 400 1200 @@ -1194,6 +1249,7 @@ 4063 4239 4415 + {base + base / 100 * subIndex} true 5 @@ -1215,7 +1271,6 @@ - 22183 24401 26619 28837 31055 33273 35491 37709 39249 41163 43077
icon.skill10762 A1 5 @@ -1245,7 +1300,7 @@ 105 108 - true + ATTACK 1100 1500 1800 @@ -1278,7 +1333,6 @@ - 22183 24401 @@ -1291,9 +1345,16 @@ 39249 41163 43077 + {base + base / 100 * subIndex} - 5 - 0.70 + + 5 + {base + base / 100 * subIndex} + + + 0.7 + {0.69 - 0.006 * (subIndex - 1)} + true @@ -1301,10 +1362,9 @@ - 32463 34086 37332 40578 43824 47070 50316 53562 56259 59003 61747
icon.skill10763 A1 - true + ATTACK 5 85 @@ -1376,9 +1436,16 @@ 56259 59003 61747 + {base + base / 100 * subIndex} - 10 - 0.7 + + 10 + {base + base / 100 * subIndex} + + + 0.7 + {0.69 - 0.006 * (subIndex - 1)} + true @@ -1529,14 +1596,16 @@ - 24834 28557 32280 36003 39726 42208 43724 45734 47744
1 5 STUN STUN - 90 + + 90 + {base + base / 100 * subIndex} + PHYSICAL - true + ATTACK 5 85 @@ -1605,7 +1674,12 @@ 43724 45734 47744 + {base + base / 100 * subIndex} + + 5 + {base + base / 100 * subIndex} + true
@@ -1620,9 +1694,12 @@ 2 STUN KNOCKBACK - 90 + + 90 + {base + base / 100 * subIndex} + PHYSICAL - true + ATTACK 5 85 @@ -1699,9 +1776,13 @@ 45432 47520 49608 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + 500 @@ -1715,7 +1796,6 @@ - 23391 25018 26645 28272 29900 31527 33154 34781 35966 37720 39474
icon.skill10771 A1 5-12 @@ -1748,7 +1828,7 @@ 163 167 - true + ATTACK 1100 1500 2900 @@ -1795,16 +1875,23 @@ 35966 37720 39474 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} +
- 22526 23310 24879 26448 28017 29586 31155 32724 33772 35526 37280
icon.skill10772 A1 5-12 @@ -1836,7 +1923,7 @@ 164 169 - true + ATTACK 1100 1500 2900 @@ -1882,9 +1969,17 @@ 33772 35526 37280 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} +
@@ -1921,7 +2016,6 @@ - 300 350 400 450
icon.skill10774 DA3 5 @@ -1942,6 +2036,7 @@ 350 400 450 + {base + 10 * subIndex} 1000 @@ -1968,20 +2063,6 @@ - - - - WARP_BACK - 333 - 0 - - 300 - 350 - 400 - 450 - - -
@@ -2016,15 +2097,85 @@ 13328 1 + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + + + + 2421 + 2590 + 2759 + 2928 + 3097 + 3265 + 3434 + 3603 + 3772 + 3941 + 4110 + 4279 + 4448 + 4617 + 4786 + 4955 + 5124 + 5293 + 5462 + 5631 + 5743 + 5856 + 5968 + 6081 + 6194 + 6306 + 6419 + 6531 + 6644 + 6757 + + - 60 70 80 90
- 80 85 90 95
1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + AVOID_UP_SPECIAL icon.skill10776 5 @@ -2086,6 +2237,12 @@ -95 BUFF + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -2164,7 +2321,11 @@ 4 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + SNIPE icon.skill10779 A2 @@ -2205,16 +2366,30 @@ TWOHANDCROSSBOW + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + - 23860 25053 28632 32211 35790 39369 42001 43930 45960
3 10 SPEED_DOWN - 40 + + 40 + {base + base / 100 * subIndex} + MAGIC icon.skill10780 20 @@ -2242,7 +2417,7 @@ 126 131 - true + ATTACK 1100 1500 2100 @@ -2284,8 +2459,12 @@ 42001 43930 45960 + {base + base / 100 * subIndex} - 5 + + 5 + {base + base / 100 * subIndex} + -70 @@ -2337,7 +2516,16 @@ 56558 59316 62074 + {base + base / 100 * subIndex} + + 5 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} +
@@ -2382,11 +2570,12 @@ - 25 30 35 40
- 200 220 240 250
- 1.7 1.9 2.1 2.3
1 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + POSSESSION icon.skill10783 A2 @@ -2441,6 +2630,12 @@ DIFF + + + {2 * subIndex} + + PER +
@@ -2448,7 +2643,11 @@ icon.skill10784 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + HIDE STEALTH A2 @@ -2470,15 +2669,14 @@ - -30 - PER + -100 + DIFF - NONE NONE HIDE HIDE HIDE
1 0 @@ -2526,14 +2724,8 @@ HIDE,9 - - - NONE - NONE - HIDE - HIDE - HIDE - + + HIDE
@@ -2836,6 +3028,18 @@ DIFF + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -2854,11 +3058,10 @@ 97 99
- true + ATTACK DA1 400 600 - CHARGE 800 750 @@ -2880,9 +3083,6 @@ 200 - - -
@@ -2959,7 +3159,6 @@ - 5555 5787 6029 6280 6541 6813 7095 7389
FIRE 20 icon.skill6044 @@ -3022,8 +3221,6 @@ - 2796 2912 3034 3160 3291 3427 3569 3717
- 71 72 73 74 75 76 77 78
icon.skill0096 3 15 @@ -3055,7 +3252,7 @@ 86 86 - true + ATTACK 40 400 1080 @@ -3106,7 +3303,6 @@ - 776 878 993 1097 1237 1299 1365 1434 1507 1583
icon.skill10004 P 5 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10800-10899.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10800-10899.xml index 98a7f3d3f8..1014a258f7 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10800-10899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10800-10899.xml @@ -3,7 +3,6 @@ - 20 22 24 26 30 32 34 36 38 40
icon.skill10044 P @@ -90,13 +89,14 @@ - 0.95 0.90 0.85 0.80 0.75 0.75 0.75 0.75
- -40 -45 -50 -55 -60 -60 -60 -60
4 15 REAL_TARGET REAL_TARGET - 100 + + 100 + {base + base / 100 * subIndex} + icon.skill10801 A2 @@ -194,18 +194,32 @@ PER + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + DIFF +
- 1 2 3 4
4 15 REAL_TARGET REAL_TARGET - 100 + + 100 + {base + base / 100 * subIndex} + 5-12 400 icon.skill10782 @@ -240,11 +254,22 @@ -25 PER + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + PER + - - 10804 + 10804 1 2 @@ -257,7 +282,6 @@ - 30000 33546 35088 36630
icon.skill0099 A1 NONE @@ -282,7 +306,6 @@ - 30000 33546 35088 36630
icon.skill0099 A1 NONE @@ -326,6 +349,7 @@ 600 700 800 + {base + 10 * subIndex} 1000 @@ -354,20 +378,6 @@ - - - - CHARGE - 333 - 180 - - 500 - 600 - 700 - 800 - - -
@@ -501,14 +511,16 @@ - 1.05 1.06 1.07 1.1
1 2 3 4 - 1800 + + 1800 + {1800 + subIndex * 90} + 687 icon.skill11870 @@ -577,11 +589,22 @@ TWOHANDCROSSBOW
+ + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {2 * subIndex} + + PER +
- 1.05 1.06 1.07 1.1
icon.skill10811 85 @@ -608,7 +631,6 @@
- 29176 30726 32277
@@ -648,7 +670,10 @@ 3 4 - 1800 + + 1800 + {1800 + subIndex * 90} + icon.skill11871 @@ -714,6 +739,18 @@ TWOHANDCROSSBOW + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {2 * subIndex} + + PER +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/10900-10999.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/10900-10999.xml index cf4fefb97c..081e893660 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/10900-10999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/10900-10999.xml @@ -2,15 +2,16 @@ - 0.95 0.93 0.9 0.85
- 1.05 1.06 1.07 1.1
1 2 3 4 - 1800 + + 1800 + {1800 + subIndex * 90} + icon.skill11872 A2 @@ -72,11 +73,22 @@ CROSSBOW + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {2 * subIndex} + + PER +
- 1.05 1.06 1.07 1.1
icon.skill11874 85 @@ -145,7 +157,10 @@ 3 4 - 1800 + + 1800 + {1800 + subIndex * 90} + icon.skill11873 A2 @@ -233,11 +248,22 @@ CROSSBOW + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + + + + {2 * subIndex} + + PER +
- 1.05 1.07 1.1 1.15
icon.skill10951 85 @@ -300,7 +326,11 @@ 1 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + POSSESSION icon.skill10952 5 @@ -334,12 +364,22 @@ 20 PER + + + {2 * subIndex} + + PER + 1 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + POSSESSION icon.skill10953 5 @@ -361,12 +401,22 @@ 20 PER + + + {2 * subIndex} + + PER + 1 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + POSSESSION icon.skill10954 5 @@ -384,12 +434,22 @@ 40 PER + + + {2 * subIndex} + + PER + 1 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + POSSESSION icon.skill10955 5 @@ -415,10 +475,16 @@ 20 PER - + 20 PER + + + {2 * subIndex} + + PER + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/11000-11099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/11000-11099.xml index 93a4beddd0..4054fd28d7 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/11000-11099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/11000-11099.xml @@ -38,7 +38,7 @@ - + 85 90 @@ -304,7 +304,6 @@ - 133 134 139 142 146 150 154 157 164 168 172
icon.skill11011 1 A1 @@ -354,7 +353,10 @@ -712 NONE - 6 + + 6 + {base + base / 100 * subIndex} + 1 @@ -395,6 +397,30 @@ 164 168 172 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -404,7 +430,6 @@ - 133 134 139 142 146 150 154 157 164 168 172
icon.skill11011 FIRE 20 @@ -456,7 +481,10 @@ -712 NONE - 6 + + 6 + {base + base / 100 * subIndex} + 1 @@ -472,6 +500,30 @@ 164 168 172 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -481,7 +533,6 @@ - 133 134 139 142 146 150 154 157 164 168 172
icon.skill11011 WATER 20 @@ -533,7 +584,10 @@ -712 NONE - 6 + + 6 + {base + base / 100 * subIndex} + 1 @@ -549,6 +603,30 @@ 164 168 172 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -558,7 +636,6 @@ - 133 134 139 142 146 150 154 157 164 168 172
icon.skill11011 WIND 20 @@ -610,7 +687,10 @@ -712 NONE - 6 + + 6 + {base + base / 100 * subIndex} + 1 @@ -626,6 +706,30 @@ 164 168 172 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -635,7 +739,6 @@ - 133 134 139 142 146 150 154 157 164 168 172
icon.skill11011 EARTH 20 @@ -687,7 +790,10 @@ -712 NONE - 6 + + 6 + {base + base / 100 * subIndex} + 1 @@ -703,6 +809,30 @@ 164 168 172 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -712,7 +842,6 @@ - 133 134 139 142 146 150 154 157 164 168 172
icon.skill11011 A1 11011 @@ -760,7 +889,10 @@ -712 NONE - 6 + + 6 + {base + base / 100 * subIndex} + true 1 ENEMY @@ -779,6 +911,30 @@ 164 168 172 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -788,7 +944,6 @@ - 158 161 165 169 175 179 184 188 193 197 201
icon.skill11017 1 A1 @@ -839,7 +994,10 @@ -712 NONE - 5 + + 5 + {base + base / 100 * subIndex} + 0.8 1 @@ -876,6 +1034,30 @@ 193 197 201 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -885,7 +1067,6 @@ - 158 161 165 169 175 179 184 188 193 197 201
icon.skill11017 FIRE 20 @@ -938,7 +1119,10 @@ -712 NONE - 5 + + 5 + {base + base / 100 * subIndex} + 1 @@ -954,6 +1138,30 @@ 193 197 201 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -963,7 +1171,6 @@ - 158 161 165 169 175 179 184 188 193 197 201
icon.skill11017 WATER 20 @@ -1016,7 +1223,10 @@ -712 NONE - 5 + + 5 + {base + base / 100 * subIndex} + 1 @@ -1032,6 +1242,30 @@ 193 197 201 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1041,7 +1275,6 @@ - 158 161 165 169 175 179 184 188 193 197 201
icon.skill11017 WIND 20 @@ -1094,7 +1327,10 @@ -712 NONE - 5 + + 5 + {base + base / 100 * subIndex} + 1 @@ -1110,6 +1346,30 @@ 193 197 201 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1119,7 +1379,6 @@ - 158 161 165 169 175 179 184 188 193 197 201
icon.skill11017 EARTH 20 @@ -1172,7 +1431,10 @@ -712 NONE - 5 + + 5 + {base + base / 100 * subIndex} + 1 @@ -1188,6 +1450,30 @@ 193 197 201 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1197,7 +1483,6 @@ - 158 161 165 169 175 179 184 188 193 197 201
icon.skill11017 A1 11017 @@ -1246,7 +1531,10 @@ -712 NONE - 5 + + 5 + {base + base / 100 * subIndex} + 0.8 true 1 @@ -1266,6 +1554,30 @@ 193 197 201 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1275,7 +1587,6 @@ - 431 444 457 469 481 493 506 518 529 541 553
icon.skill11023 1 A1 @@ -1326,7 +1637,10 @@ -721 NONE - 11 + + 11 + {base + base / 100 * subIndex} + 1 1 @@ -1363,6 +1677,30 @@ 529 541 553 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1372,7 +1710,6 @@ - 431 444 457 469 481 493 506 518 529 541 553
icon.skill11023 FIRE 20 @@ -1411,6 +1748,12 @@ 6080 1000 6700 + NONE + + 11 + {base + base / 100 * subIndex} + + 1 1 -687 @@ -1440,6 +1783,30 @@ 529 541 553 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1449,7 +1816,6 @@ - 431 444 457 469 481 493 506 518 529 541 553
icon.skill11023 WATER 20 @@ -1488,6 +1854,11 @@ 6080 1000 6700 + + 11 + {base + base / 100 * subIndex} + + 1 1 -687 @@ -1517,6 +1888,30 @@ 529 541 553 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1526,7 +1921,6 @@ - 431 444 457 469 481 493 506 518 529 541 553
icon.skill11023 WIND 20 @@ -1565,6 +1959,11 @@ 6080 1000 6700 + + 11 + {base + base / 100 * subIndex} + + 1 1 -687 @@ -1594,6 +1993,30 @@ 529 541 553 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1603,7 +2026,6 @@ - 431 444 457 469 481 493 506 518 529 541 553
icon.skill11023 EARTH 20 @@ -1642,6 +2064,11 @@ 6080 1000 6700 + + 11 + {base + base / 100 * subIndex} + + 1 1 -687 @@ -1671,6 +2098,30 @@ 529 541 553 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1680,7 +2131,6 @@ - 431 444 457 469 481 493 506 518 529 541 553
icon.skill11023 A1 11023 @@ -1730,7 +2180,10 @@ -721
NONE - 11 + + 11 + {base + base / 100 * subIndex} + 1 true true @@ -1750,6 +2203,30 @@ 529 541 553 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1759,13 +2236,15 @@ - 480 494 509 523 537
icon.skill11029 1 15 BLEEDING DOT_BLEEDING - 100 + + 100 + {base + base / 100 * subIndex} + NONE A2 @@ -1810,12 +2289,17 @@ 1 + + + {-2 * subIndex} + + DIFF +
- 25 50 75 100
icon.skill11030 11030 1000 @@ -1845,7 +2329,10 @@ -709 NONE - 5 + + 5 + {base + base / 100 * subIndex} + 15 true @@ -1855,6 +2342,7 @@ 50 75 100 + {base + base / 100 * subIndex} 100 @@ -1872,7 +2360,10 @@ 1 STUN KNOCKBACK - 150 + + 150 + {base + base / 100 * subIndex} + 6-12 200 NONE @@ -1924,6 +2415,30 @@ 194 198 202 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -1937,7 +2452,6 @@ - 0.6 0.4 0.2
1 3 @@ -1980,7 +2494,6 @@ - 210 213 219 226 231 238 243 250
5-12 100 icon.skill11034 @@ -2024,7 +2537,10 @@ -712 NONE - 5 + + 5 + {base + base / 100 * subIndex} + 1 @@ -2058,6 +2574,30 @@ 238 243 250 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2067,7 +2607,6 @@ - 210 213 219 226 231 238 243 250
5-12 100 icon.skill11034 @@ -2103,6 +2642,10 @@ 3780 300 6700 + + 5 + {base + base / 100 * subIndex} + 1 -687 @@ -2126,6 +2669,30 @@ 238 243 250 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2135,7 +2702,6 @@ - 210 213 219 226 231 238 243 250
5-12 100 icon.skill11034 @@ -2171,6 +2737,10 @@ 3780 300 6700 + + 5 + {base + base / 100 * subIndex} + 1 -687 @@ -2194,6 +2764,30 @@ 238 243 250 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2202,7 +2796,6 @@ - 210 213 219 226 231 238 243 250
5-12 100 icon.skill11034 @@ -2238,6 +2831,10 @@ 3780 300 6700 + + 5 + {base + base / 100 * subIndex} + 1 -687 @@ -2261,6 +2858,30 @@ 238 243 250 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2270,7 +2891,6 @@ - 210 213 219 226 231 238 243 250
5-12 100 icon.skill11034 @@ -2306,6 +2926,10 @@ 3780 300 6700 + + 5 + {base + base / 100 * subIndex} + 1 -687 @@ -2329,6 +2953,30 @@ 238 243 250 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2338,7 +2986,6 @@ - 210 213 219 226 231 238 243 250
5-12 100 icon.skill11034 @@ -2369,6 +3016,10 @@ 3780 300 6700 + + 5 + {base + base / 100 * subIndex} + 1 -687 @@ -2398,6 +3049,30 @@ 238 243 250 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2451,7 +3126,10 @@ -712 NONE - 11 + + 11 + {base + base / 100 * subIndex} + 1 @@ -2485,6 +3163,30 @@ 299 307 315 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2531,6 +3233,10 @@ 300 6700 1 + + 11 + {base + base / 100 * subIndex} + -687 -696 @@ -2553,6 +3259,30 @@ 299 307 315 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2599,6 +3329,10 @@ 300 6700 1 + + 11 + {base + base / 100 * subIndex} + -687 -696 @@ -2621,6 +3355,30 @@ 299 307 315 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2667,6 +3425,10 @@ 300 6700 1 + + 11 + {base + base / 100 * subIndex} + -687 -696 @@ -2689,6 +3451,30 @@ 299 307 315 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2735,6 +3521,10 @@ 300 6700 1 + + 11 + {base + base / 100 * subIndex} + -687 -696 @@ -2757,6 +3547,30 @@ 299 307 315 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2809,7 +3623,10 @@ -712 NONE - 11 + + 11 + {base + base / 100 * subIndex} + true true ENEMY @@ -2826,6 +3643,30 @@ 299 307 315 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -2837,7 +3678,11 @@ icon.skill11046 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + FINAL_SECRET A2 @@ -2872,6 +3717,10 @@ 1 + 30 + PER + + 20 30 @@ -2879,39 +3728,33 @@ PER - 20 + + 20 + 30 + PER - - 20 - PER - - - 2 - DIFF - - - 50 - 60 - + 50 PER - - -50 - -60 - + -50 PER 1 + + + {-1 - ((subIndex - 1} * 0.5)} + + PER +
- 157 160 166 174 180 187 191 195 199
icon.skill11047 1 @@ -2926,7 +3769,10 @@ 20 MULTI_DEBUFF - 60 + + 60 + {base + base / 100 * subIndex} + A2 85 @@ -2986,6 +3832,30 @@ 191 195 199 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -2993,7 +3863,10 @@ PER - -10 + + -10 + {base - (2 * subIndex)} + PER @@ -3031,7 +3904,10 @@ 5 20 MULTI_DEBUFF - 60 + + 60 + {base + base / 100 * subIndex} + 300 A2 @@ -3093,6 +3969,7 @@ 155 159 163 + {base + base / 100 * subIndex} 25 @@ -3133,7 +4010,6 @@ - 1 2 2 2 2
icon.skill11049 A1 @@ -3143,7 +4019,10 @@ 109 118 - 1100 + + 1100 + {base + 10 * subIndex} + 1100 3000 300000 @@ -3170,7 +4049,10 @@ BUFF - 60 + + 60 + {base + base / 100 * subIndex} + 1 2 @@ -3189,7 +4071,10 @@ 5 AIRBIND AIRBIND - 90 + + 90 + {base + base / 100 * subIndex} + NONE A2 AIRBIND @@ -3248,6 +4133,18 @@ 100 100 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER +
@@ -3258,7 +4155,10 @@ 5 AIRBIND AIRBIND - 90 + + 90 + {base + base / 100 * subIndex} + NONE A2 AIRBIND @@ -3317,19 +4217,34 @@ 100 100 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + icon.skill11052 - 100 + + 100 + {base + base / 100 * subIndex} + + 1 + 9 + AIRBIND + AIRBIND NONE - 11182 - 1200 - 2000 - 15 - CA2 + A2 AIRBIND 228 @@ -3361,7 +4276,7 @@ 150 5-12 true - 2 + 1 true ENEMY RANGE @@ -3369,14 +4284,49 @@ + + + 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 + + + + 100 + 1 + + + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + + icon.skill1042 - 100 + + 100 + {base + base / 100 * subIndex} + NONE - 11182 + 11182 1200 2000 15 @@ -3420,6 +4370,20 @@ + + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + + @@ -3437,7 +4401,10 @@ NONE NONE 5 - 100 + + 100 + {base + base / 100 * subIndex} + 85 true ENEMY @@ -3464,6 +4431,18 @@ 100 100 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -3475,7 +4454,10 @@ 10 TURN_FLEE TURN_FLEE - 60 + + 60 + {base + base / 100 * subIndex} + NONE A2 DERANGEMENT @@ -3555,6 +4537,18 @@ PER + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -3568,7 +4562,10 @@ TURN_FLEE 10-10 150 - 60 + + 60 + {base + base / 100 * subIndex} + NONE A2 @@ -3653,6 +4650,18 @@ PER + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -3667,7 +4676,10 @@ STUN 6-12 150 - 150 + + 150 + {base + base / 100 * subIndex} + NONE A2 SHOCK @@ -3732,6 +4744,30 @@ 163 167 171 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -3748,7 +4784,6 @@ - 13323 13324 13325 13458 13459 13460
icon.skill11058 A1 @@ -3841,10 +4876,12 @@ - 60 70 80 90
icon.skill11062 2 - 15 + + 15 + {base + 0.5 * subIndex} + SPEED_UP_SPECIAL A2 @@ -3893,6 +4930,18 @@ DIFF
+ + + {0.4 + 0.6 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -3979,6 +5028,7 @@ 591 623 655 + {base + base / 100 * subIndex} DIFF @@ -3990,7 +5040,10 @@ icon.skill11065 1 - 20 + + 20 + {base + 0.5 * subIndex} + MP_SHIELD MP_SHIELD A2 @@ -4014,19 +5067,33 @@ 10 DIFF + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + - 620 677 693 709
icon.skill11066 7 5 TURN_FLEE TURN_FLEE - 100 + + 100 + {base + base / 100 * subIndex} + NONE A2 DERANGEMENT @@ -4047,7 +5114,7 @@ 6750 500 30000 - 2 + 1 -704 NONE 5 @@ -4061,6 +5128,30 @@ 677 693 709 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} true @@ -4074,18 +5165,26 @@ -40 PER + + + {-0.6 - 0.4 * subIndex} + + PER +
- 620 641 655 669
7 5 TURN_FLEE TURN_FLEE - 100 + + 100 + {base + base / 100 * subIndex} + 5-12 150 NONE @@ -4109,7 +5208,7 @@ 10000 500 30000 - 2 + 1 -709 NONE 5 @@ -4124,6 +5223,30 @@ 641 655 669 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -4136,15 +5259,23 @@ -20 PER + + + {-0.6 - 0.4 * subIndex} + + PER +
- 0.95 0.9 0.85 0.8
- 0.5 0.4 0.3 0.2
icon.skill11068 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + A2 85 @@ -4167,7 +5298,7 @@ NONE 5 1 - 2 + 1 SELF SINGLE @@ -4196,6 +5327,12 @@ PER 1 + + + {0.4 + 0.6 * subIndex} + + PER +
@@ -4900,7 +6037,10 @@ 1 STUN STUN - 150 + + 150 + {base + base / 100 * subIndex} + 150 6-12 NONE @@ -4967,6 +6107,30 @@ 163 167 171 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/11100-11199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/11100-11199.xml index e915243901..588ed7f3ea 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/11100-11199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/11100-11199.xml @@ -94,7 +94,6 @@ - 569 618 649 683 705 723 741
icon.skill11865 15 @@ -143,6 +142,10 @@ 1 -1009 true + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -160,6 +163,30 @@ 705 723 741 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -176,7 +203,6 @@ - 569 618 649 683 705 723 741
icon.skill11865 15 @@ -222,6 +248,10 @@ 1 -1009 true + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -239,6 +269,30 @@ 705 723 741 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -255,7 +309,6 @@ - 569 618 649 683 705 723 741
icon.skill11865 15 @@ -301,6 +354,10 @@ 1 -1009 true + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -318,6 +375,30 @@ 705 723 741 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -334,7 +415,6 @@ - 569 618 649 683 705 723 741
icon.skill11865 15 @@ -380,6 +460,10 @@ 1 -1009 true + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -397,6 +481,30 @@ 705 723 741 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -413,7 +521,6 @@ - 569 618 649 683 705 723 741
icon.skill11865 15 @@ -459,6 +566,10 @@ 1 -1009 true + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -476,6 +587,30 @@ 705 723 741 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -492,7 +627,6 @@ - 569 618 649 683 705 723 741
icon.skill11865 15 @@ -536,6 +670,10 @@ 1 -1009 true + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -553,6 +691,30 @@ 705 723 741 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -569,7 +731,6 @@ - 517 562 591 622 637 655 673
icon.skill11865 11112 11113 @@ -605,6 +766,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -622,6 +787,30 @@ 637 655 673 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -634,7 +823,6 @@ - 517 562 591 622 637 655 673
icon.skill11865 11112 FIRE @@ -667,6 +855,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -684,6 +876,30 @@ 637 655 673 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -696,7 +912,6 @@ - 517 562 591 622 637 655 673
icon.skill11865 11112 WATER @@ -729,6 +944,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -746,6 +965,30 @@ 637 655 673 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -758,7 +1001,6 @@ - 517 562 591 622 637 655 673
icon.skill11865 11112 WIND @@ -791,6 +1033,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -808,6 +1054,30 @@ 637 655 673 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -820,7 +1090,6 @@ - 517 562 591 622 637 655 673
icon.skill11865 11112 EARTH @@ -853,6 +1122,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -870,6 +1143,30 @@ 637 655 673 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -882,7 +1179,6 @@ - 517 562 591 622 637 655 673
icon.skill11865 11112 A1 @@ -913,6 +1209,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -930,6 +1230,30 @@ 637 655 673 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -942,7 +1266,6 @@ - 569 618 649 683 697 715 733
icon.skill11865 11118 11119 @@ -978,6 +1301,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -995,6 +1322,30 @@ 697 715 733 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -1007,7 +1358,6 @@ - 569 618 649 683 697 715 733
icon.skill11865 11118 FIRE @@ -1040,6 +1390,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -1057,6 +1411,30 @@ 697 715 733 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -1069,7 +1447,6 @@ - 569 618 649 683 697 715 733
icon.skill11865 11118 WATER @@ -1102,6 +1479,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -1119,6 +1500,30 @@ 697 715 733 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -1131,7 +1536,6 @@ - 569 618 649 683 697 715 733
icon.skill11865 11118 WIND @@ -1164,6 +1568,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -1181,6 +1589,30 @@ 697 715 733 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -1193,7 +1625,6 @@ - 569 618 649 683 697 715 733
icon.skill11865 11118 EARTH @@ -1226,6 +1657,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -1243,6 +1678,30 @@ 697 715 733 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -1255,7 +1714,6 @@ - 569 618 649 683 697 715 733
icon.skill11865 11118 A1 @@ -1286,6 +1744,10 @@ 6700 -1009 1 + + 6 + {base + base / 100 * subIndex} + BODY_DESTRUCTION @@ -1303,6 +1765,30 @@ 697 715 733 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -1314,8 +1800,6 @@
- 1.05 1.06 1.07 1.10
- 1.05 1.07 1.10 1.15
icon.skill0945 85 @@ -1360,7 +1844,6 @@
- 1.10 1.12 1.15 1.20
icon.skill0945 85 @@ -1384,7 +1867,6 @@ - 620 657 695
icon.skill0000 1 3 @@ -1426,7 +1908,6 @@ - 713 755 799
icon.skill0000 DARK 20 @@ -1458,7 +1939,6 @@ - 620 657 695
icon.skill0000 1 @@ -1504,7 +1984,6 @@ - 620 657 695
icon.skill0000 1 STUN @@ -1549,7 +2028,6 @@ - 620 657 695
icon.skill0000 1 3 @@ -1588,7 +2066,6 @@ - 115 225 300
icon.skill0000 11131 1000 @@ -1626,7 +2103,6 @@ - 1 2 3
icon.skill1515 1 @@ -1712,10 +2188,36 @@ 12000 120000 -676 - 1 + 2 - 860 + + 860 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} + @@ -1746,11 +2248,17 @@ 12000 120000 -676 - 1 + 2 - 550 - 50 + + 550 + {base + base / 100 * subIndex} + + + 50 + {base + base / 100 * subIndex} + @@ -1784,10 +2292,36 @@ 12000 120000 -676 - 1 + 2 - 440 + + 440 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} + @@ -1818,10 +2352,36 @@ 12000 120000 -676 - 1 + 2 - 550 + + 550 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} + @@ -1844,6 +2404,7 @@ CA1 GROUND POINT_BLANK + NOT_FRIEND 52 900 12000 @@ -1865,7 +2426,6 @@ - 431 503 720
icon.skill11134 1 @@ -1898,7 +2458,6 @@ - 0.90 0.80 0.70 0.60 0.00
icon.skill11135 1 @@ -1934,7 +2493,6 @@ - 0.90 0.80 0.70 0.60 0.00
icon.skill11136 1 @@ -1977,7 +2535,6 @@ - 0.6 0.4 0.2
1 3 @@ -2019,7 +2576,6 @@ - 0.6 0.4 0.2
1 3 @@ -2061,7 +2617,6 @@ - 0.90 0.80 0.70 0.60 0.00
icon.skill11137 1 @@ -2104,7 +2659,6 @@ - 0.90 0.80 0.70 0.60 0.50
icon.skill11138 1 @@ -2210,7 +2764,6 @@
- 1.05 1.06 1.07 1.10
icon.skill0945 85 @@ -2273,6 +2826,108 @@ + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + + + + 532 + 570 + 607 + 644 + 681 + 718 + 756 + 793 + 830 + 867 + 904 + 942 + 979 + 1016 + 1053 + 1090 + 1128 + 1165 + 1202 + 1240 + 1264 + 1289 + 1314 + 1339 + 1363 + 1389 + 1413 + 1438 + 1463 + 1488 + + + + + 2421 + 2590 + 2759 + 2928 + 3097 + 3265 + 3434 + 3603 + 3772 + 3941 + 4110 + 4279 + 4448 + 4617 + 4786 + 4955 + 5124 + 5293 + 5462 + 5631 + 5743 + 5856 + 5968 + 6081 + 6194 + 6306 + 6419 + 6531 + 6644 + 6757 + +
@@ -2354,7 +3009,6 @@ - 0.95 0.94 0.93 0.90
icon.skill0945 85 @@ -2681,7 +3335,6 @@ - 313 374 435 517 566 635 704 773 842 911
icon.skill0213 85 @@ -2722,7 +3375,6 @@ - 3.6 4.2 4.8 5.4 6.2 7.0 7.8 8.6 9.4 10.2
icon.skill0229 85 @@ -2763,8 +3415,6 @@ - 5.1 5.7 6.3 6.9 7.7 8.5 9.3 10.1 10.9 11.7
- 6.5 7.1 7.7 8.3 9.1 9.9 10.7 11.5 12.3 13.1
icon.skill11187 85 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/11200-11299.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/11200-11299.xml index 7ba2fe9a6a..187ea42920 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/11200-11299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/11200-11299.xml @@ -27,7 +27,6 @@ - 0.80 0.70 0.60 0.50
icon.skill11868 1 3 @@ -71,10 +70,12 @@ - 5000 5300 5600 6000 6400 6800 7300
icon.skill11869 1 - 20 + + 20 + {base + 0.5 * subIndex} + PD_UP_SPECIAL A2 SELF @@ -106,11 +107,16 @@ DIFF
+ + + {2 * subIndex} + + DIFF +
- 1.05 1.06 1.07 1.10
icon.skill0945 85 @@ -367,8 +373,6 @@ - 1079 1252 1451 1633 1850 1963 2083 2210 2344 2478
- 822 953 1105 1244 1409 1495 1586 1683 1786 1894
85 90 @@ -453,7 +457,6 @@ - 1212 1330 1462 1576 1767 1833 1903 1975 2058 2136
85 90 @@ -508,7 +511,6 @@ - 862 976 1104 1219 1374 1444 1517 1593 1674 1759
BUFF 85 @@ -633,7 +635,6 @@ - 14929 14947 14948 14949 14950 14951 14952 14953
icon.skill11256 A1 @@ -690,7 +691,6 @@ - 14930 14954 14955 14956 14957 14958 14959 14960
icon.skill11257 A1 @@ -747,7 +747,6 @@ - 14931 14961 14962 14963 14964 14965 14966 14967
icon.skill11258 A1 @@ -820,7 +819,10 @@
10 MARK_DEBUF_B - 100 + + 100 + {base + base / 100 * subIndex} + NONE A2 @@ -894,6 +896,7 @@ 117 121 125 + {base + base / 100 * subIndex} 1 @@ -923,9 +926,12 @@ 10 MARK_DEBUF_A - 90 + + 90 + {base + base / 100 * subIndex} + NONE - A3 + A2 85 88 @@ -988,6 +994,7 @@ 117 121 125 + {base + base / 100 * subIndex} 1 @@ -1010,7 +1017,10 @@ 10 MARK_DEBUF_C - 90 + + 90 + {base + base / 100 * subIndex} + NONE A2 @@ -1071,6 +1081,7 @@ 117 121 125 + {base + base / 100 * subIndex} 1 @@ -1083,7 +1094,6 @@ - 85 87 93 99 105 111 117 121 125
icon.skill11262 1 @@ -1098,7 +1108,10 @@ 10 MARK_DEBUF_D - 50 + + 50 + {base + base / 100 * subIndex} + NONE A2 @@ -1159,6 +1172,7 @@ 117 121 125 + {base + base / 100 * subIndex} 1 @@ -1172,7 +1186,6 @@ - 147 151 156 160 164 168 172 198 204 210
icon.skill11263 A1 200 @@ -1200,7 +1213,10 @@ 306 316 - 600 + + 600 + {base + 10 * subIndex} + 2560 500 15000 @@ -1217,7 +1233,10 @@ -709
NONE;STRIDER;WYVERN;WOLF - 5 + + 5 + {base + base / 100 * subIndex} + 3 1100 5-12 @@ -1238,6 +1257,30 @@ 198 204 210 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -1282,6 +1325,7 @@ 210 220 230 + {base + base / 100 * subIndex} DIFF @@ -1331,7 +1375,6 @@ - 14927 15200 15201 15202
icon.skill11266 A1 @@ -1386,6 +1429,7 @@ 300 420 600 + {base + 15 * subIndex}
TRANSFORM A2 @@ -1437,6 +1481,18 @@ 50 PER + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.4 + 0.6 * subIndex} + + PER +
@@ -1503,7 +1559,6 @@ - 1308 1336 1358 1381 1733 1747 1761
icon.skill11269 A1 @@ -1546,6 +1601,7 @@ 1733 1747 1761 + {base + base / 100 * subIndex} @@ -1554,7 +1610,6 @@ - 70 72 74 75
icon.skill11270 T @@ -1654,6 +1709,30 @@ 228 233 238 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} MARK_DEBUF_B @@ -1670,6 +1749,30 @@ 287 294 300 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} MARK_DEBUF_C @@ -1686,6 +1789,30 @@ 248 254 260 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} MARK_DEBUF_D @@ -1697,7 +1824,10 @@ icon.skill11272 A1 97 - 600 + + 600 + {base + 10 * subIndex} + 1200 300 60000 @@ -1716,13 +1846,46 @@ + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + +
- 353 364 374 385 395 409 416 423
icon.skill11273 1 @@ -1737,7 +1900,10 @@ 10 DEPORT DEPORT - 90 + + 90 + {base + base / 100 * subIndex} + NONE A2 DEPORT @@ -1797,6 +1963,7 @@ 409 416 423 + {base + base / 100 * subIndex} 1 @@ -1814,7 +1981,6 @@ - 1.2 1.3 1.4 1.5
icon.skill11274 1 @@ -1827,6 +1993,7 @@ 8 10 12 + {base + 0.5 * subIndex} INVINCIBILITY INVINCIBILITY @@ -1875,12 +2042,79 @@ PER + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + + + + 532 + 570 + 607 + 644 + 681 + 718 + 756 + 793 + 830 + 867 + 904 + 942 + 979 + 1016 + 1053 + 1090 + 1128 + 1165 + 1202 + 1240 + 1264 + 1289 + 1314 + 1339 + 1363 + 1389 + 1413 + 1438 + 1463 + 1488 + +
- 100 150
icon.skill0003 A1 @@ -1918,9 +2152,16 @@ icon.skill11276 - 100 + + 100 + {base + base / 100 * subIndex} + + 1 + 9 + AIRBIND + AIRBIND NONE - CA2 + A2 90 900 10000 @@ -1938,18 +2179,42 @@ 103 105
- 11300 - 1200 - 2000 - 15 true - 2 + 1 true ENEMY SINGLE + + + 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 + + + + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + +
@@ -2052,7 +2317,7 @@ 98 99 - true + ATTACK 50 1560 500 @@ -2210,7 +2475,7 @@ 98 99 - true + ATTACK 50 1560 500 @@ -2286,7 +2551,6 @@ 660 600 800 - CHARGE 7000 -687 @@ -2478,7 +2742,7 @@ 99 99 - true + ATTACK 40 1760 300 @@ -2982,7 +3246,6 @@ - 282 288 296 305 313 322 336 343 350
icon.skill11296 1 @@ -2998,7 +3261,10 @@ 10 DEPORT DEPORT - 80 + + 80 + {base + base / 100 * subIndex} + 6-12 150 NONE @@ -3056,6 +3322,7 @@ 336 343 350 + {base + base / 100 * subIndex} 1 @@ -3073,7 +3340,6 @@ - 0.85 0.90 0.95 1
icon.skill11297 1 @@ -3173,7 +3439,6 @@ - 168 170 175 180 185 189 194 199 222 228 234
icon.skill11298 A1 @@ -3195,7 +3460,10 @@ 30000 -500 NONE;STRIDER;WYVERN;WOLF - 5 + + 5 + {base + base / 100 * subIndex} + 1400 85 @@ -3228,17 +3496,44 @@ 222 228 234 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} 40
- + icon.skill11299 1000 - A1 + + A1 + A2 + 63 900 5000 @@ -3248,17 +3543,56 @@ NONE;STRIDER;WYVERN;WOLF 5 1100 - 85 + + 91 + 97 + 0 15 + LIFE_FORCE_OTHERS 1 SUMMON SUMMON_EXCEPT_MASTER FRIEND + + 333 + 1 + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + + 333 + 1 + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/11300-11399.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/11300-11399.xml index a7f081d141..69e073abec 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/11300-11399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/11300-11399.xml @@ -45,7 +45,6 @@ - 152 154 157 161 165 169 173 177
icon.skill0005 300 5-12 @@ -137,6 +136,7 @@ 1928 1944 1960 + {base + base / 100 * subIndex} @@ -337,6 +337,7 @@ + 5 icon.skill1301 A2 70 @@ -350,7 +351,6 @@ 1100 85 1000 - 3 1 SUMMON SUMMON_EXCEPT_MASTER @@ -362,17 +362,87 @@ 10 + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + + + + 532 + 570 + 607 + 644 + 681 + 718 + 756 + 793 + 830 + 867 + 904 + 942 + 979 + 1016 + 1053 + 1090 + 1128 + 1165 + 1202 + 1240 + 1264 + 1289 + 1314 + 1339 + 1363 + 1389 + 1413 + 1438 + 1463 + 1488 + +
- 4680 9360
- 4212 8424
icon.skill1299 2 - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + PD_UP_SPECIAL A2 70 @@ -406,17 +476,22 @@ DIFF + + + {0.6 + 0.4 * subIndex} + + PER +
- 20633 21717 22799
icon.skill_transform_etc A1 70 - true + ATTACK 40 1490 500 @@ -446,11 +521,10 @@ - 18758 19743 20727
icon.skill_transform_etc A1 70 - true + ATTACK 900 1490 500 @@ -480,7 +554,6 @@ - 18758 19743 20727
icon.skill_transform_etc 200 A1 @@ -514,7 +587,6 @@ - 370 372 374
icon.skill_transform_debuff 150 A1 @@ -659,7 +731,6 @@ - 15066 15067 15068 15069 15070 15071 15072 15073
icon.skill11844 A1 SELF @@ -703,7 +774,6 @@ - 15074 15075 15076 15077 15078 15079 15080 15081
icon.skill11845 A1 SELF @@ -747,7 +817,6 @@ - 15082 15083 15084 15085 15086 15087 15088 15089
icon.skill11846 A1 SELF @@ -861,7 +930,6 @@ - 10508 11190 11872 12554 13236 13918 14600 15282
icon.skill0121 A1 ENEMY @@ -876,7 +944,7 @@ 60 62 - true + ATTACK 40 1490 500 @@ -900,7 +968,6 @@ - 8406 8920 9497 10043 10588 11134 11680 12225
icon.skill0121 1 @@ -931,9 +998,8 @@ 60 62 - true + ATTACK 600 - CHARGE 100 500 800 @@ -967,7 +1033,6 @@ - 10508 11190 11872 12554 13236 13918 14600 15282
icon.skill1234 A1 ENEMY @@ -1005,7 +1070,6 @@ - 11558 12309 13059 13809 14559 15309 16060 16810
icon.skill1171 150 A1 @@ -1045,7 +1109,6 @@ - 15114 15115 15116 15117 15118 15119 15120 15121
icon.skill11847 A1 SELF @@ -1089,7 +1152,6 @@ - 15122 15123 15124 15125 15126 15127 15128 15129
icon.skill11848 A1 SELF @@ -1133,7 +1195,6 @@ - 15130 15131 15132 15133 15134 15135 15136 15137
icon.skill11849 A1 SELF @@ -1247,7 +1308,6 @@ - 10508 11190 11872 12554 13236 13918 14600 15282
icon.skill0121 A1 ENEMY @@ -1262,7 +1322,7 @@ 60 62 - true + ATTACK 40 1490 500 @@ -1286,7 +1346,6 @@ - 8406 8920 9497 10043 10588 11134 11680 12225
icon.skill0121 1 @@ -1317,9 +1376,8 @@ 60 62 - true + ATTACK 600 - CHARGE 100 500 800 @@ -1353,7 +1411,6 @@ - 10508 11190 11872 12554 13236 13918 14600 15282
icon.skill1234 A1 ENEMY @@ -1391,7 +1448,6 @@ - 11558 12309 13059 13809 14559 15309 16060 16810
icon.skill1171 150 A1 @@ -1431,7 +1487,6 @@ - 15090 15091 15092 15093 15094 15095 15096 15097
icon.skill11850 A1 SELF @@ -1475,7 +1530,6 @@ - 15098 15099 15100 15101 15102 15103 15104 15105
icon.skill11851 A1 SELF @@ -1519,7 +1573,6 @@ - 15106 15107 15108 15109 15110 15111 15112 15113
icon.skill11852 A1 SELF @@ -1633,7 +1686,6 @@ - 10508 11190 11872 12554 13236 13918 14600 15282
icon.skill0121 A1 ENEMY @@ -1648,7 +1700,7 @@ 60 62 - true + ATTACK 40 1490 500 @@ -1672,7 +1724,6 @@ - 8406 8920 9497 10043 10588 11134 11680 12225
icon.skill0121 1 @@ -1703,9 +1754,8 @@ 60 62 - true + ATTACK 600 - CHARGE 100 500 800 @@ -1739,7 +1789,6 @@ - 10508 11190 11872 12554 13236 13918 14600 15282
icon.skill1234 A1 ENEMY @@ -1777,7 +1826,6 @@ - 11558 12309 13059 13809 14559 15309 16060 16810
icon.skill1171 150 A1 @@ -1817,7 +1865,6 @@ - 1.10 1.12 1.15 1.20
icon.skill11347 1 @@ -1853,12 +1900,29 @@ PER + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF +
- 1.10 1.12 1.15 1.20
icon.skill11348 1 @@ -1894,12 +1958,29 @@ PER + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF +
- 1.10 1.12 1.15 1.20
icon.skill11349 1 @@ -1935,12 +2016,29 @@ PER + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF +
- 188 202 215 227 242 248 254
icon.skill11350 A1 ENEMY @@ -1968,6 +2066,10 @@ -715 1 + + 6 + {base + base / 100 * subIndex} + @@ -1978,6 +2080,30 @@ 242 248 254 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -1985,9 +2111,6 @@ - 1.01 1.03 1.05 1.10 1.15
- 0.1 0.15 0.2 0.25 0.3
- 1.01 1.03 1.05 1.10 1.15
icon.skill11351 1 @@ -2042,7 +2165,6 @@ - 1.03 1.05 1.07 1.10
icon.skill11277 P @@ -2102,7 +2224,6 @@ - 188 202 215 227 242 248 254
icon.skill11353 A1 ENEMY @@ -2130,6 +2251,10 @@ -715 1 + + 6 + {base + base / 100 * subIndex} + @@ -2140,6 +2265,30 @@ 242 248 254 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -2147,9 +2296,6 @@ - 1.01 1.03 1.05 1.10 1.15
- 0.1 0.15 0.2 0.25 0.3
- 1.01 1.03 1.05 1.10 1.15
icon.skill11354 1 @@ -2221,7 +2367,6 @@ - 188 202 215 227 242 248 254
icon.skill11356 A1 ENEMY @@ -2249,6 +2394,10 @@ -715 1 + + 6 + {base + base / 100 * subIndex} + @@ -2259,6 +2408,30 @@ 242 248 254 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -2266,9 +2439,6 @@ - 1.01 1.03 1.05 1.10 1.15
- 0.1 0.15 0.2 0.25 0.3
- 1.01 1.03 1.05 1.10 1.15
icon.skill11357 1 @@ -2323,7 +2493,6 @@ - 1.03 1.05 1.07 1.10
icon.skill11277 P @@ -2570,7 +2739,6 @@ - 518 526 542 558
icon.skill11365 1 @@ -2595,6 +2763,12 @@ 394 394 + + 99 + 101 + 103 + 105 + 600 2500 500 @@ -2640,10 +2814,6 @@ - 1.07 1.10 1.12
- 1.10 1.12 1.15
- 10 12 15
- 10 12 15
icon.skill11360 3 @@ -2724,10 +2894,6 @@ - 1.10 1.15 1.15
- 1.15 1.20 1.20
- 15 20 20
- 15 20 20
icon.skill11360 5 @@ -3087,7 +3253,6 @@ - 18224 19158 20092
icon.skill0121 1 @@ -3107,11 +3272,10 @@ 86 87 - true + ATTACK 600 800 0;0;600;60 - CHARGE 100 500 5000 @@ -3139,7 +3303,6 @@ - 32410 34072 35734
icon.skill10546 1 3 @@ -3180,7 +3343,6 @@ - 31903 33539 35175
icon.skill1171 150 A1 @@ -3214,7 +3376,6 @@ - 30623 32193 33763
icon.skill1171 1 STUN @@ -3261,7 +3422,6 @@ - 16198 17028 17858
icon.skill0121 1 @@ -3276,7 +3436,6 @@ PHYSICAL 800 0;0;600;60 - CHARGE DA2 ENEMY FAN @@ -3287,7 +3446,7 @@ 86 87 - true + ATTACK 600 500 500 @@ -3317,7 +3476,6 @@ - 22677 23839 25001
icon.skill30006 1 STUN @@ -3363,7 +3521,6 @@ - 31903 33539 35175
icon.skill1171 150 A1 @@ -3397,7 +3554,6 @@ - 34449 36215 37981
icon.skill10103 1 @@ -3445,7 +3601,6 @@ - 40502 42578 44654
icon.skill0121 A1 ENEMY @@ -3455,7 +3610,7 @@ 86 87 - true + ATTACK 50 1500 500 @@ -3474,7 +3629,6 @@ - 45696 47772 49848
icon.skill10511 A1 ENEMY @@ -3485,7 +3639,7 @@ 86 87 - true + ATTACK 50 1500 500 @@ -3510,7 +3664,6 @@ - 51411 53747 56083
icon.skill1171 A1 ENEMY @@ -3545,7 +3698,6 @@ - 45568 47904 50240
icon.skill1171 A1 ENEMY diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/11500-11599.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/11500-11599.xml index 8d443c3718..0c5fcb1393 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/11500-11599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/11500-11599.xml @@ -34,7 +34,6 @@ - 1027 1191 1381 1554 1761 1869 1982 2103 2231 2367
icon.skill10252 P @@ -115,7 +114,6 @@ - 969 1064 1169 1261 1413 1467 1522 1580 1646 1709
icon.skill11252 P @@ -166,7 +164,6 @@ - 1355 1488 1635 1763 1976 2051 2128 2209 2302 2389
icon.skill10254 P @@ -217,7 +214,6 @@ - 1558 1711 1880 2027 2271 2357 2446 2539 2646 2746
icon.skill10002 P @@ -268,7 +264,6 @@ - 776 878 993 1097 1237 1299 1365 1434 1507 1583
icon.skill10004 P @@ -309,7 +304,6 @@ - 513 574 635 717 766 835 904 973 1042 1111
icon.skill0211 P @@ -350,7 +344,6 @@ - 313 374 435 517 566 635 704 773 842 911
icon.skill0213 P @@ -396,10 +389,12 @@ 1 STUN STUN - 150 + + 150 + {base + base / 100 * subIndex} + NONE - CHARGE - true + ATTACK DA2 1 @@ -413,7 +408,10 @@ 51 53 - 600 + + 600 + {base + 10 * subIndex} + 800 200 10000 @@ -456,11 +454,13 @@ - 200 + + 200 + {base - (3 * subIndex)} + - 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 @@ -472,7 +472,10 @@ 5 20 ULTIMATE_DEBUFF - 99 + + 99 + {base + base / 100 * subIndex} + 40 300 400 @@ -505,7 +508,7 @@ 63 A2 - true + ATTACK 7000 NONE @@ -555,9 +558,14 @@ 26008 27138 28268 + {base + base / 100 * subIndex} true 5 + + 1 + {0.99 - 0.006 * (subIndex - 1)} + -40 @@ -576,11 +584,13 @@ - 14608 15776 16944 18112 19280 20448 21616 22784 28162 29386 30610
5 20 CRITICAL_PROB_DOWN - 99 + + 99 + {base + base / 100 * subIndex} + 40 300 400 @@ -613,7 +623,7 @@ 68 A2 - true + ATTACK 7000 NONE @@ -658,9 +668,14 @@ 28162 29386 30610 + {base + base / 100 * subIndex} true 5 + + 1 + {0.99 - 0.006 * (subIndex - 1)} +
-40 @@ -707,7 +722,7 @@ 99 A1 - true + ATTACK 7000 NONE @@ -750,20 +765,31 @@ 40673 42657 44641 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + + + 1 + {0.99 - 0.006 * (subIndex - 1)} +
- 10263 10616 11322 12027 12733 13438 14144 14849 19113 20045 20977
icon.skill11513 5 20 ULTIMATE_DEBUFF + + 99 + {base + base / 100 * subIndex} + 5-12 200 40 @@ -796,7 +822,7 @@ 168 172 - true + ATTACK A2 10000 NONE @@ -816,7 +842,6 @@ NONE 5 400 - 99 true ENEMY RANGE @@ -845,9 +870,14 @@ 19113 20045 20977 + {base + base / 100 * subIndex} true 5 + + 1 + {0.99 - 0.006 * (subIndex - 1)} + -40 @@ -866,10 +896,13 @@ - 11722 12525 13327 14130 14933 15736 16539 17342 21340 22380 23420
5 20 CRITICAL_PROB_DOWN + + 99 + {base + base / 100 * subIndex} + 5-12 200 40 @@ -902,7 +935,7 @@ 194 200 - true + ATTACK A2 10000 NONE @@ -922,7 +955,6 @@ NONE 5 400 - 99 true ENEMY RANGE @@ -951,9 +983,14 @@ 21340 22380 23420 + {base + base / 100 * subIndex} true 5 + + 1 + {0.99 - 0.006 * (subIndex - 1)} +
-40 @@ -968,7 +1005,6 @@ - 1 2 3 4 5
icon.skill11515 A2 @@ -1038,7 +1074,6 @@
- 8805 9717 10630 11542 12454 13366 13670 13974 14278 14582 14886 15190 15494 15799 16103
icon.skill1170 A1 @@ -1114,7 +1149,10 @@ 3 4
- 1800 + + 1800 + {base + subIndex * 90} + BUFF_SPECIAL_ATTACK 1000 icon.skill11517 @@ -1210,7 +1248,10 @@ 4
BUFF_SPECIAL_DEFENCE - 1800 + + 1800 + {base + subIndex * 90} + 1000 icon.skill11522 A2 @@ -1346,7 +1387,10 @@ 4
BUFF_SPECIAL_CONDITION - 1800 + + 1800 + {base + subIndex * 90} + 1000 icon.skill11519 A2 @@ -1446,7 +1490,10 @@ 4
BUFF_SPECIAL_CRITICAL - 1800 + + 1800 + {base + subIndex * 90} + 1000 icon.skill11520 A2 @@ -1546,7 +1593,10 @@ 3 4
- 1800 + + 1800 + {base + subIndex * 90} + BUFF_SPECIAL_HITAVOID 1000 icon.skill11521 @@ -1651,7 +1701,10 @@ 4
BUFF_SPECIAL_MOVE - 1800 + + 1800 + {base + subIndex * 90} + 1000 icon.skill11518 A2 @@ -1731,7 +1784,10 @@ 1 - 1800 + + 1800 + {base + subIndex * 90} + BUFF_SPECIAL_CLASS icon.skill11523 A2 @@ -1793,7 +1849,10 @@ 1 - 1800 + + 1800 + {base + subIndex * 90} + BUFF_SPECIAL_CLASS icon.skill11524 A2 @@ -1859,7 +1918,10 @@ 1 - 1800 + + 1800 + {base + subIndex * 90} + BUFF_SPECIAL_CLASS icon.skill11525 A2 @@ -1953,7 +2015,6 @@ - 1027 1191 1381 1554 1761 1869 1982 2103 2231 2367
icon.skill10001 P @@ -2017,7 +2078,10 @@ 1000 1 BUFF_SPECIAL_AURA - 300 + + 300 + {base + subIndex * 30} + icon.skill11529 A2 140 @@ -2076,7 +2140,10 @@ 1000 1 ENCHANTER_MOD - 300 + + 300 + {base + subIndex * 30} + icon.skill11530 A2 140 @@ -2146,7 +2213,10 @@ 1000 1 SYNERGY_IS - 300 + + 300 + {base + subIndex * 30} + icon.skill11532 A2 140 @@ -2242,6 +2312,24 @@ 80 30 + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.4 + 0.6 * subIndex} + + PER + + + + {-1 - ((subIndex - 1} * 0.5)} + + PER +
@@ -2302,13 +2390,30 @@ + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {-1 - ((subIndex - 1} * 0.5)} + + PER + - 35 40 45 50 55 60 60 60 60
icon.skill11536 -709 A1 @@ -2358,6 +2463,7 @@ 60 60 60 + {base + base / 100 * subIndex} 2 @@ -2366,9 +2472,16 @@ + 1 + 15 + CHANGEBODY + CHANGEBODY + + 60 + {base + base / 100 * subIndex} + icon.skill11537 A2 - 15 CHANGEBODY 85 @@ -2394,7 +2507,10 @@ 184 193 - 900 + + 900 + {base + 10 * subIndex} + 1500 500 60000 @@ -2412,14 +2528,10 @@ -711 -711 - CHANGEBODY NONE NONE;STRIDER;WYVERN;WOLF 5 1100 - 60 - 1 - CHANGEBODY true ENEMY_ONLY SINGLE @@ -2471,7 +2583,10 @@ 15 ROOT_MAGICALLY ROOT - 65 + + 65 + {base + base / 100 * subIndex} + 9-10 200 MAGIC @@ -2514,6 +2629,18 @@ 100 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -2525,7 +2652,10 @@ 15 TURN_STONE FLESH_STONE - 60 + + 60 + {base + base / 100 * subIndex} + MAGIC -687 1100 @@ -2556,7 +2686,10 @@ 100 104 - 900 + + 900 + {base + 10 * subIndex} + 1700 300 120000 @@ -2666,6 +2799,24 @@ DIFF + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF + @@ -2701,7 +2852,10 @@ - -50 + + -50 + {base + subIndex * 1.5} + PER @@ -2712,13 +2866,51 @@ 4500 DIFF + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + + + + {16 + subIndex} + + 1 + - 2000 3000 4000 4500 5000 5500
- 44 44 44 48 52 56
icon.skill11543 5 30 @@ -2821,6 +3013,18 @@ -80 PER + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER +
@@ -2840,7 +3044,6 @@ 5 89 5 - 2 600000 SELF PARTY @@ -2862,6 +3065,24 @@ 100 PER + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF + @@ -2895,18 +3116,38 @@ 50 PER + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF + - 99 101 103 105
- 38826 44708 46888 49068
10-10 300 5 10 MULTI_DEBUFF + 100 + 100 + {base + base / 100 * subIndex} + icon.skill11533 A2 1767 @@ -2918,7 +3159,6 @@ NONE 5 1100 - 100 99 DERANGEMENT 2 @@ -2943,9 +3183,13 @@ 44708 46888 49068 + {base + base / 100 * subIndex} true - 5 + + 5 + {base + base / 100 * subIndex} + -50 @@ -3093,7 +3337,6 @@ - 0.94 0.91 0.88 0.85
P 85 icon.skill11506 @@ -3348,6 +3591,108 @@ BLOCK_MP
+ + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + + + + 532 + 570 + 607 + 644 + 681 + 718 + 756 + 793 + 830 + 867 + 904 + 942 + 979 + 1016 + 1053 + 1090 + 1128 + 1165 + 1202 + 1240 + 1264 + 1289 + 1314 + 1339 + 1363 + 1389 + 1413 + 1438 + 1463 + 1488 + + + + + 2421 + 2590 + 2759 + 2928 + 3097 + 3265 + 3434 + 3603 + 3772 + 3941 + 4110 + 4279 + 4448 + 4617 + 4786 + 4955 + 5124 + 5293 + 5462 + 5631 + 5743 + 5856 + 5968 + 6081 + 6194 + 6306 + 6419 + 6531 + 6644 + 6757 + +
@@ -3359,7 +3704,10 @@ 15 ROOT_MAGICALLY ROOT - 65 + + 65 + {base + base / 100 * subIndex} + MAGIC A2 @@ -3406,6 +3754,18 @@ 100 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -3414,7 +3774,10 @@ icon.skill11562 3 - 120 + + 120 + {base + subIndex * 15} + DANCE_OF_SHADOW STEALTH 1000 @@ -3468,6 +3831,12 @@ false SWORD,BLUNT + + + {2 * subIndex} + + DIFF + @@ -3499,7 +3868,6 @@ - 40 50 60 70
icon.skill1016 true A1 @@ -3542,7 +3910,10 @@ 1000 5 ARMOR_ELEMENT_ALL - 1800 + + 1800 + {base + subIndex * 15} + icon.skill11565 A2 140 @@ -3596,7 +3967,10 @@ 1000 5 ARMOR_HOLY - 1800 + + 1800 + {base + subIndex * 15} + icon.skill11567 A2 140 @@ -3646,7 +4020,10 @@ 1000 5 RESIST_DERANGEMENT - 1800 + + 1800 + {base + subIndex * 15} + icon.skill11824 A2 140 @@ -3788,12 +4165,19 @@ 10 CHANGEBODY CHANGEBODY + + 60 + {base + base / 100 * subIndex} + A2 ENEMY_ONLY RANGE NOT_FRIEND CHANGEBODY - 200 + + 200 + {base + 10 * subIndex} + 85 90 @@ -3813,8 +4197,14 @@ 205 true - 900 - 1400 + + 900 + {base + 10 * subIndex} + + + 1400 + {base + 10 * subIndex} + 1410 500 120000 @@ -3929,7 +4319,6 @@ - 4 5 6 7
icon.skill11839 10 SILENCE_ALL @@ -4176,7 +4565,10 @@ 3 4
- 1800 + + 1800 + {base + subIndex * 90} + BUFF_SPECIAL_ATTACK 50-50 1000 @@ -4269,7 +4661,10 @@ 4
BUFF_SPECIAL_DEFENCE - 1800 + + 1800 + {base + subIndex * 90} + 50-50 1000 A2 @@ -4394,7 +4789,10 @@ 4
BUFF_SPECIAL_CONDITION - 1800 + + 1800 + {base + subIndex * 90} + 50-50 1000 A2 @@ -4481,7 +4879,10 @@ 4
BUFF_SPECIAL_CRITICAL - 1800 + + 1800 + {base + subIndex * 90} + 50-100 1000 A2 @@ -4559,7 +4960,10 @@ 4
BUFF_SPECIAL_HITAVOID - 1800 + + 1800 + {base + subIndex * 90} + 50-50 1000 A2 @@ -4651,7 +5055,10 @@ 4
BUFF_SPECIAL_MOVE - 1800 + + 1800 + {base + subIndex * 90} + 50-50 1000 A2 @@ -4718,7 +5125,10 @@ icon.skill11596 1 - 1800 + + 1800 + {base + subIndex * 90} + BUFF_SPECIAL_CLASS A2 SELF @@ -4774,7 +5184,10 @@ icon.skill11595 1 - 1800 + + 1800 + {base + subIndex * 90} + BUFF_SPECIAL_CLASS icon.skill11524 A2 @@ -4835,7 +5248,10 @@ icon.skill11597 1 - 1800 + + 1800 + {base + subIndex * 90} + BUFF_SPECIAL_CLASS A2 SELF @@ -4922,7 +5338,6 @@ - 326 343 359 375
icon.skill11598 10 DOT_ATTR @@ -4963,8 +5378,6 @@ - 1.05 1.07 1.10 1.15
- 4 4 4 4
icon.skill1001 T SELF diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/11600-11699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/11600-11699.xml index 1bd2980d02..0159bea435 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/11600-11699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/11600-11699.xml @@ -6,7 +6,10 @@ icon.skill11600 1 BUFF_SPECIAL_AURA - 300 + + 300 + {base + subIndex * 30} + 1000 A2 SELF @@ -60,7 +63,10 @@ 1000 1 ENCHANTER_MOD - 300 + + 300 + {base + subIndex * 30} + A2 SELF PLEDGE @@ -121,7 +127,10 @@ 1000 1 SYNERGY_IS - 300 + + 300 + {base + subIndex * 30} + A2 SELF PLEDGE @@ -290,7 +299,10 @@ icon.skill11606new - 1800 + + 1800 + {base + subIndex * 90} + A2 SELF SINGLE @@ -326,7 +338,10 @@ icon.skill11605new - 1800 + + 1800 + {base + subIndex * 90} + A2 SELF SINGLE @@ -359,7 +374,10 @@ 1000 1 BUFF_SPECIAL_AURA - 300 + + 300 + {base + subIndex * 30} + icon.skill11607 A2 SELF @@ -412,7 +430,10 @@ 1000 1 ENCHANTER_MOD - 300 + + 300 + {base + subIndex * 30} + icon.skill11608 A2 SELF @@ -477,7 +498,10 @@ 1000 1 SYNERGY_IS - 300 + + 300 + {base + subIndex * 30} + icon.skill11609 A2 SELF @@ -541,7 +565,10 @@ 1000 1 BUFF_SPECIAL_AURA - 300 + + 300 + {base + subIndex * 30} + icon.skill11610 A2 SELF @@ -594,7 +621,10 @@ 1000 1 ENCHANTER_MOD - 300 + + 300 + {base + subIndex * 30} + icon.skill11611 A2 SELF @@ -659,7 +689,10 @@ 1000 1 SYNERGY_IS - 300 + + 300 + {base + subIndex * 30} + icon.skill11612 A2 SELF @@ -721,10 +754,13 @@ - 1000 2000 3000 5000
icon.skill11613 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + PD_UP_SPECIAL ULTIMATE_DEFENCE A2 @@ -764,7 +800,11 @@ 1.50 1.60 1.70 2.00
icon.skill11614 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + A2 SELF SINGLE @@ -821,7 +861,10 @@ icon.skill11615 - 1800 + + 1800 + {base + subIndex * 90} + 1 DITTY 10 @@ -871,7 +914,10 @@ icon.skill11616 - 1800 + + 1800 + {base + subIndex * 90} + 1 DITTY 10 @@ -917,7 +963,10 @@ icon.skill11617 - 1800 + + 1800 + {base + subIndex * 90} + 1 DITTY 10 @@ -965,7 +1014,10 @@ icon.skill11618 - 1800 + + 1800 + {base + subIndex * 90} + 1 DITTY 10 @@ -1154,6 +1206,7 @@ 1 10 BARRIER + ABSORB_SHIELD icon.skill11621 A2 99 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/11700-11799.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/11700-11799.xml index 4f4eee12eb..ff42e63287 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/11700-11799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/11700-11799.xml @@ -4,7 +4,6 @@ - 1.50 1.55 1.60
icon.skill1520 85 @@ -146,7 +145,6 @@ - 981 1138 1319 1458 1682 1785 1893 2009 2131 2261
icon.skill11251 85 @@ -199,8 +197,6 @@ - 1.10 1.13 1.16 1.19 1.22 1.25 1.28 1.3 1.3 1.3 1.3
- 172 173 173 174 174 175 175 176 184 192 200
15 1 LIFE_FORCE_HEALER @@ -288,6 +284,7 @@ 184 192 200 + {base + base / 100 * subIndex} 1 @@ -304,9 +301,16 @@ 30 30 30 + {base + base / 100 * subIndex} PER + + + {subIndex} + + DIFF + @@ -349,7 +353,11 @@ - 60 + + 60 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + 2 3 @@ -502,7 +510,10 @@ 124 126 - 5 + + 5 + {base + base / 100 * subIndex} + 1 28 @@ -533,6 +544,7 @@ 1749 1763 1777 + {base + base / 100 * subIndex} @@ -601,7 +613,10 @@ 500 1000 NONE;STRIDER;WYVERN;WOLF - 5 + + 5 + {base + base / 100 * subIndex} + 1 TARGET SINGLE @@ -619,6 +634,7 @@ 1749 1763 1777 + {base + base / 100 * subIndex} @@ -672,7 +688,10 @@ 500 5000 NONE;STRIDER;WYVERN;WOLF - 5 + + 5 + {base + base / 100 * subIndex} + 1 1 SELF @@ -692,6 +711,7 @@ 1406 1418 1430 + {base + base / 100 * subIndex} @@ -742,6 +762,40 @@ INVINCIBILITY_SPECIAL + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + @@ -791,6 +845,40 @@ INVINCIBILITY_SPECIAL + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + @@ -803,8 +891,6 @@ - 166 167 170 174 177 180 183 187 191 195 201
- 12 12 12 12 13 13 13 13 13 13 13
1 MP_RECOVER 10 @@ -853,7 +939,10 @@ 43 43 - 600 + + 600 + {base + 10 * subIndex} + 867 874 @@ -867,7 +956,10 @@ 944 952 - 1100 + + 1100 + {base + 10 * subIndex} + NONE NONE;STRIDER;WYVERN;WOLF 5 @@ -898,6 +990,7 @@ 191 195 201 + {base + base / 100 * subIndex}
@@ -913,6 +1006,7 @@ 13 13 13 + {base + base / 100 * subIndex} 1 @@ -991,6 +1085,7 @@ 768 786 804 + {base + base / 100 * subIndex}
@@ -1003,9 +1098,44 @@ 11 11 11 + {base + base / 100 * subIndex} 1 + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + +
@@ -1034,9 +1164,18 @@ - 333 + + 333 + {base + base / 100 * subIndex} + 1 + + + {subIndex} + + DIFF + @@ -1064,6 +1203,40 @@ 100 10 + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + @@ -1098,14 +1271,50 @@ 10 + + + 1936 + 2072 + 2207 + 2342 + 2477 + 2612 + 2747 + 2882 + 3017 + 3152 + 3288 + 3423 + 3558 + 3693 + 3828 + 3964 + 4099 + 4234 + 4369 + 4504 + 4594 + 4684 + 4774 + 4864 + 4955 + 5044 + 5135 + 5224 + 5315 + 5405 + + - 266 273 280 285 342 410 492
- 74 77 81 84 101 121 145
10 + + 10 + {base + 0.5 * subIndex} + 2 3 @@ -1170,6 +1379,7 @@ 342 410 492 + {base + base / 100 * subIndex} 1 @@ -1182,6 +1392,7 @@ 101 121 145 + {base + base / 100 * subIndex} 1 @@ -1238,7 +1449,10 @@ 500 2000 NONE;STRIDER;WYVERN;WOLF - 5 + + 5 + {base + base / 100 * subIndex} + 1 @@ -1261,6 +1475,30 @@ 203 209 215 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -1269,7 +1507,6 @@ - 117 119 123 126 129 133 136 139 149 151 157
10-10 300 icon.skill11767 @@ -1319,10 +1556,14 @@ 500 6700 NONE;STRIDER;WYVERN;WOLF - 5 + + 5 + {base + base / 100 * subIndex} + 1 ENEMY RANGE + NOT_FRIEND @@ -1337,6 +1578,30 @@ 149 151 157 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -1377,7 +1642,10 @@ DEBUFF - 40 + + 40 + {base + base / 100 * subIndex} + 10 @@ -1385,9 +1653,10 @@ - 1.5 2.5 3.0 3.5 4.0 4.0 4.0 4.0 4.0
- 0.8 0.8 0.8 0.8 0.8 0.8 0.75 0.7 0.65
- 80 + + 80 + {base + base / 100 * subIndex} + 30 MAGIC 3 @@ -1488,9 +1757,8 @@ 300 300 300 - -100 + 300 300 - 300 PER 1 @@ -1504,9 +1772,8 @@ 300 300 300 - -100 + 300 300 - 300 PER 0 @@ -1520,13 +1787,24 @@ 300 300 300 - -100 + 300 300 - 300 PER 3 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER +
@@ -1557,6 +1835,10 @@ 11835 1 + + {1000 + subIndex} + {2000 + subIndex} + @@ -1588,9 +1870,12 @@ - 1000 1500 2000 2500 2500 2500 2500
- 1000 1500 2000 2500 4000 4500 5000
30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + 1 HEAL_POWER_UP A2 @@ -1669,6 +1954,12 @@ DIFF + + + {-1 - ((subIndex - 1} * 0.5)} + + PER +
@@ -1844,7 +2135,10 @@ 60 3 MARK_OF_LUMI - 90 + + 90 + {base + base / 100 * subIndex} + 20 icon.skill11777 A2 @@ -1911,6 +2205,7 @@ 134 134 134 + {base + base / 100 * subIndex} 1 @@ -1950,7 +2245,10 @@ 20 SLEEP SLEEP - 100 + + 100 + {base + base / 100 * subIndex} + MAGIC A2 @@ -2004,6 +2302,12 @@ 100 + + + {-0.6 - 0.4 * subIndex} + + PER + @@ -2093,7 +2397,10 @@ 60 3 HEAL_EFFECT_DOWN - 100 + + 100 + {base + base / 100 * subIndex} + 30 icon.skill11780 A2 @@ -2168,6 +2475,18 @@ PER + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + PER + @@ -2381,9 +2700,6 @@ - 1212 1330 1462 1576 1767 1833 1903 1975 2058 2136
- 2.8 3.4 4 4.6 5.4 6.2 7.8 7.8 8.6 9.4
- 3.6 4.2 4.8 5.4 6.2 7 8.6 8.6 9.4 10.2
icon.skill11787 P @@ -2474,7 +2790,6 @@ - 313 374 435 517 566 635 704 773 842 911
icon.skill11788 P @@ -2529,7 +2844,6 @@ - 862 976 1104 1219 1374 1444 1517 1593 1674 1759
icon.skill10004 P @@ -2574,7 +2888,6 @@ - 20 22 24 26 30 32 34 36 38 40
icon.skill10044 P @@ -2689,7 +3002,6 @@ - 20 22 24 26 30 32 34 36 38 40
icon.skill10005 85 @@ -2811,8 +3123,6 @@ - 1.10 1.20 1.30
- 103 138 174
1 15 LIFE_FORCE_HEALER diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/11800-11899.xml index 26c3378bfe..dc369e962f 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/11800-11899.xml @@ -467,7 +467,10 @@ STUN 1 KNOCKBACK - 90 + + 90 + {base + base / 100 * subIndex} + PHYSICAL 20 icon.skill11814 @@ -519,7 +522,10 @@ 1 true NONE - 5 + + 5 + {base + base / 100 * subIndex} + KNOCKDOWN ENEMY SINGLE @@ -537,6 +543,30 @@ 178 182 186 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))} @@ -639,7 +669,6 @@ - 102 104 107 110 113 116 119 122 162 166 170
10-10 300 icon.skill11817 @@ -689,7 +718,10 @@ 500 6700 NONE;STRIDER;WYVERN;WOLF - 5 + + 5 + {base + base / 100 * subIndex} + 1 SELF POINT_BLANK @@ -708,6 +740,30 @@ 162 166 170 + {base + base / 100 * (1 + 0.4 * (subIndex - 1))} + {base + base / 100 * (2 + 0.8 * (subIndex - 5))} + {base + base / 100 * (3 + 0.3 * (subIndex - 6))} + {base + base / 100 * (3 + 0.3 * (subIndex - 7))} + {base + base / 100 * (4 + 0.4 * (subIndex - 8))} + {base + base / 100 * (5 + 0.1 * (subIndex - 11))} + {base + base / 100 * (5 + 0.5 * (subIndex - 12))} + {base + base / 100 * (5 + 0.9 * (subIndex - 13))} + {base + base / 100 * (6 + 0.2 * (subIndex - 14))} + {base + base / 100 * (6 + 0.6 * (subIndex - 15))} + {base + base / 100 * (7 * (subIndex - 16))} + {base + base / 100 * (7 + 0.4 * (subIndex - 17))} + {base + base / 100 * (7 + 0.7 * (subIndex - 18))} + {base + base / 100 * (8 + 0.1 * (subIndex - 19))} + {base + base / 100 * (8 + 0.5 * (subIndex - 20))} + {base + base / 100 * (8 + 0.8 * (subIndex - 21))} + {base + base / 100 * (9 + 0.2 * (subIndex - 22))} + {base + base / 100 * (9 + 0.6 * (subIndex - 23))} + {base + base / 100 * (10 * (subIndex - 24))} + {base + base / 100 * (10 + 0.3 * (subIndex - 25))} + {base + base / 100 * (10 + 0.7 * (subIndex - 26))} + {base + base / 100 * (11 + 0.1 * (subIndex - 27))} + {base + base / 100 * (11 + 0.4 * (subIndex - 28))} + {base + base / 100 * (11 + 0.8 * (subIndex - 29))}
@@ -1064,7 +1120,10 @@ 2 RESURRECTION_SPECIAL - 3600 + + 3600 + {base + subIndex * 90} + 600 687 1100 @@ -1293,7 +1352,10 @@ 30 SLEEP SLEEP - 80 + + 80 + {base + base / 100 * subIndex} + 9-10 300 MAGIC @@ -1350,6 +1412,12 @@ 100 + + + {-0.6 - 0.4 * subIndex} + + PER +
@@ -1449,6 +1517,18 @@ 100 DIFF + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + @@ -1519,11 +1599,44 @@ 100 + + + 532 + 570 + 607 + 644 + 681 + 718 + 756 + 793 + 830 + 867 + 904 + 942 + 979 + 1016 + 1053 + 1090 + 1128 + 1165 + 1202 + 1240 + 1264 + 1289 + 1314 + 1339 + 1363 + 1389 + 1413 + 1438 + 1463 + 1488 + + - 1.05 1.07 1.10 1.15
4 5 @@ -1572,6 +1685,24 @@ PER + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + PER +
@@ -1624,11 +1755,28 @@ DIFF + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF + - 0.95 0.94 0.93 0.9
icon.skill0228 P @@ -1652,7 +1800,6 @@
- 33 35 37 40
2 3 @@ -1700,11 +1847,28 @@ DIFF + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.6 + 0.4 * subIndex} + + PER + + + + {2 * subIndex} + + DIFF +
- 1.1 1.12 1.15 1.2
icon.skill0945 P @@ -1731,7 +1895,6 @@
- icon.skill11856 A1 @@ -1742,6 +1905,14 @@ 600000 1811 1 + SELF + PARTY + FRIEND + + + 100 + + @@ -1834,6 +2005,9 @@ + 1 + 1800 + HEAL_RESISTANCE icon.skill11861 A2 SELF @@ -1845,9 +2019,6 @@ 500 2000 687 - 1800 - 1 - 1 10 3031 @@ -1868,13 +2039,31 @@ 30 EARTH + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.4 + 0.6 * subIndex} + + PER + + + + {2 * subIndex} + + PER + 1 1800 - + HEAL_RESISTANCE icon.skill11862 10 3031 @@ -1906,13 +2095,31 @@ 5 5 + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.4 + 0.6 * subIndex} + + PER + + + + {2 * subIndex} + + PER + 1 1800 - + HEAL_RESISTANCE icon.skill11863 10 3031 @@ -1937,6 +2144,24 @@ 5 5 + + + {0.6 + 0.4 * subIndex} + + PER + + + + {0.4 + 0.6 * subIndex} + + PER + + + + {2 * subIndex} + + PER +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/13000-13099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/13000-13099.xml index 3019c81ff2..d03bb3a645 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/13000-13099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/13000-13099.xml @@ -831,13 +831,8 @@ - - - 0 - 0 - 0 - 3 - + + 3 30 @@ -2736,13 +2731,8 @@ 10 - - - 0 - 0 - 2 - 2 - + + 2 30 @@ -2981,13 +2971,8 @@ 15 - - - 0 - 0 - 2 - 2 - + + 2 30 @@ -3890,13 +3875,8 @@ 10 - - - 0 - 0 - 2 - 2 - + + 2 30 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/13600-13699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/13600-13699.xml index a2bee3eaff..af9e37de3c 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/13600-13699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/13600-13699.xml @@ -331,6 +331,7 @@ P
+ icon.etc_bm_brooch_lavianrose_i00 P @@ -341,6 +342,7 @@ + icon.etc_bm_brooch_lavianrose_i00 P @@ -351,6 +353,7 @@ + icon.etc_bm_brooch_lavianrose_i01 P @@ -361,6 +364,7 @@ + icon.etc_bm_brooch_lavianrose_i02 P @@ -372,16 +376,17 @@ - - icon.etc_bm_brooch_lavianrose_i03 - P + + icon.etc_bm_brooch_lavianrose_i03 + P 5 - +
+ icon.etc_rbracelet_s_i03 P @@ -392,6 +397,7 @@ + icon.etc_bm_brooch_lavianrose_i02 P diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/13700-13799.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/13700-13799.xml index b2d12229ae..035b37c2b8 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/13700-13799.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/13700-13799.xml @@ -1313,210 +1313,665 @@ P + icon.accessory_noblesse2_tiara_i00 P 5 - 1 + 99 - + 50 - FIRE - - - 50 - WATER - - - 50 - WIND - - - 50 - EARTH - - - 50 - HOLY - - - 50 - DARK - + icon.cloak_noblesse2_i00 P + 5 + 99 + + + 1 + STR + + + 1 + DEX + + + 1 + CON + + + 1 + INT + + + 1 + WIT + + + 1 + MEN + + + 1 + LUC + + + 1 + CHA + + - + icon.accessory_noblesse2_tiara_i00 P + 5 + 99 + + + 30 + + - + icon.weapon_R99_dagger_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_onehand_sword_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_twohand_sword_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_onehand_blunt_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_fist_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_spear_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_bow_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_crossbow_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_onehand_magic_sword_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_onehand_magic_blunt_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_twohand_magic_blunt_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_dual_sword_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_dual_dagger_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_dual_blunt_pvp_i10 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_dagger_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_onehand_sword_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_twohand_sword_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_onehand_blunt_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_fist_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_spear_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_bow_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_crossbow_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_onehand_magic_sword_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_onehand_magic_blunt_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_twohand_magic_blunt_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_dual_sword_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.weapon_R99_dual_dagger_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/13800-13899.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/13800-13899.xml index b81e5fa31a..3a094be015 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/13800-13899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/13800-13899.xml @@ -1,100 +1,296 @@ - + icon.weapon_R99_dual_blunt_pve_i00 P + 5 + 99 + + + 10 + PER + + + 10 + PER + + + 10 + PER + + - + icon.armor_helmet_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t801_u_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t801_l_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t801_g_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t801_b_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_leather_helmet_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t802_u_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t802_l_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t802_g_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t802_b_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_circlet_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t803_u_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t803_l_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t803_g_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + - + icon.armor_t803_b_i00 P + 5 + 99 + + + 1 + PER + + + 2 + PER + + @@ -394,15 +590,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -418,15 +614,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -442,15 +638,15 @@ DIFF - + 5 PER - + 5 PER - + 5 PER @@ -466,15 +662,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -501,15 +697,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -525,15 +721,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -549,15 +745,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -573,15 +769,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -597,15 +793,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -621,15 +817,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -658,15 +854,15 @@ DIFF - + 5 PER - + 5 PER - + 5 PER @@ -703,15 +899,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -758,15 +954,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -796,15 +992,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -844,15 +1040,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -889,15 +1085,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -935,15 +1131,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -981,15 +1177,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -1027,15 +1223,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -1073,15 +1269,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -1118,15 +1314,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -1163,15 +1359,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -1208,15 +1404,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -1253,15 +1449,15 @@ PER - + 5 PER - + 5 PER - + 5 PER @@ -1271,16 +1467,143 @@ icon.ensoul_big_pm P + + + + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + + PER + + + + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + PER + + + 5 + PER + + + 5 + PER + + + 5 + PER + + icon.ensoul_big_pm P + + + + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + + PER + + + + 26 + 29 + 32 + 34 + 37 + 40 + 42 + 45 + 48 + 50 + 53 + 56 + 59 + 61 + 64 + + DIFF + + + 5 + PER + + + 5 + PER + + + 5 + PER + + icon.ensoul_big_pm P + + + + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + + PER + + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + + PER + + + 5 + PER + + + 5 + PER + + + 5 + PER + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/14000-14099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/14000-14099.xml index ad535c53da..84523282e7 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/14000-14099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/14000-14099.xml @@ -878,7 +878,9 @@ 10279;10517;10025;10776;11770;1904 - + + 200 + @@ -916,7 +918,9 @@ 10279;10517;10025;10776;11770;1904 - + + 300 + @@ -999,7 +1003,9 @@ 10279;10517;10025;10776;11770;1904 - + + 450 + @@ -1871,7 +1877,6 @@ 5000 ENEMY SINGLE - CHARGE @@ -2260,10 +2265,6 @@ 1000 ENEMY SINGLE - CHARGE - - - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/14100-14199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/14100-14199.xml index 7d34ac7cf7..806fd34213 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/14100-14199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/14100-14199.xml @@ -2399,7 +2399,6 @@ icon.skill0484 DA1 - CHARGE 20 350 1500 @@ -2416,7 +2415,6 @@ 5 - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/14200-14299.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/14200-14299.xml index b3fda7bc0c..ba33845ba2 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/14200-14299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/14200-14299.xml @@ -1355,7 +1355,9 @@ 2000 - + + 200 + 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/14300-14399.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/14300-14399.xml index 976ee848dd..26b82e73cd 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/14300-14399.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/14300-14399.xml @@ -1055,7 +1055,7 @@ 99 0;0;2000;600 10000 - ENEMY + TARGET SQUARE NOT_FRIEND @@ -1197,7 +1197,9 @@ POINT_BLANK NOT_FRIEND - + + 600 + 1 @@ -2275,7 +2277,9 @@ 40000 - + + 600 + 10279;10517;10025;10776;11770;1904 @@ -2376,7 +2380,9 @@ 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 - + + 600 +
@@ -2803,7 +2809,9 @@ 27849 - + + 600 + 10279;10517;10025;10776;11770;1904 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/14500-14599.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/14500-14599.xml index aa1589ef53..9e2c6880d9 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/14500-14599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/14500-14599.xml @@ -1690,7 +1690,9 @@ 10279;10517;10025;10776;11770;1904 - + + 600 + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/14600-14699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/14600-14699.xml index 0d2eae21b6..d5e8a5e1b9 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/14600-14699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/14600-14699.xml @@ -1416,7 +1416,9 @@ POINT_BLANK NOT_FRIEND - + + 600 + 10279;10517;10025;10776;11770;1904 @@ -1800,7 +1802,6 @@ icon.skill0493 DA1 - CHARGE 400 3000 200 @@ -1829,7 +1830,6 @@ 50937 - @@ -1999,7 +1999,9 @@ SINGLE NOT_FRIEND - + + 600 + 10279;10517;10025;10776;11770;1904 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/14800-14899.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/14800-14899.xml index c6dd02f831..33cbbfdfed 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/14800-14899.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/14800-14899.xml @@ -1584,14 +1584,12 @@ SHOCK true STUN - CHARGE ENEMY SINGLE 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 - @@ -1616,14 +1614,12 @@ SHOCK true STUN - CHARGE ENEMY SINGLE 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 - @@ -1648,14 +1644,12 @@ SHOCK true STUN - CHARGE ENEMY SINGLE 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912 - @@ -2484,15 +2478,6 @@ true SELF SINGLE - - - - WARP_BACK - 333 - 0 - 300 - - diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/15000-15099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/15000-15099.xml index b04038be33..f712a33eac 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/15000-15099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/15000-15099.xml @@ -1600,7 +1600,9 @@ 180000 - + + 300 + @@ -1629,7 +1631,9 @@ 180000 - + + 300 + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/15100-15199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/15100-15199.xml index 95d13c9773..2a0ef88872 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/15100-15199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/15100-15199.xml @@ -295,7 +295,9 @@ 120000 - + + 600 + 10279;10517;10025;10776;11770;1904 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/17900-17999.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/17900-17999.xml index 881afa598b..bb5edd2f84 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/17900-17999.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/17900-17999.xml @@ -156,7 +156,7 @@ icon.etc_potion_gold_i00 P - + icon.love_potion_party @@ -961,26 +961,70 @@ 1200000 - + icon.accessory_punishment_talisman_i01 A2 + SEED_TALISMAN1 + SEED_TALISMAN1 + NONE + NONE;STRIDER;WYVERN;WOLF + 5 + -2 + 0 + 99 + 7 + -1 + true + true 3 + SELF + SINGLE - + icon.accessory_punishment_talisman_i01 A1 1 + NONE;STRIDER;WYVERN;WOLF + 5 + 0 + 99 + HOLD + 2 + SELF + SINGLE + + + SEED_TALISMAN1,-1 + + - + icon.accessory_punishment_talisman_i01 A1 2000 200 + NONE;STRIDER;WYVERN;WOLF + 5 + 1 + 1 + 39573 + 2 3000 + SELF + SINGLE + + + 10 + 10 + + + + + icon.skill0000 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/19200-19299.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/19200-19299.xml index 15dd7253ba..9c0a2816bc 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/19200-19299.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/19200-19299.xml @@ -97,13 +97,29 @@ -60 -60 + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + DIFF + - 1 - 300 + + 300 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + + SONG_WEAPON icon.skill19204 5 3031 @@ -147,7 +163,11 @@ 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + SONG_OF_ARCHERY 1000 icon.skillsongofarchery @@ -172,7 +192,11 @@ 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + DANCE_OF_SAGE 1000 icon.skilldanceofwisdom @@ -195,10 +219,14 @@ - 1 - 300 + + 300 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + + SONG_WEAPON 1000 icon.skill19207 10 @@ -254,6 +282,24 @@ INVINCIBILITY + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-0.6 - 0.4 * subIndex} + + PER + + + + {-2 * subIndex} + + DIFF + @@ -265,7 +311,12 @@ 180000 1 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + + DIVINITY SELF SINGLE 101 @@ -309,6 +360,40 @@ 15154 30 + + + 532 + 570 + 607 + 644 + 681 + 718 + 756 + 793 + 830 + 867 + 904 + 942 + 979 + 1016 + 1053 + 1090 + 1128 + 1165 + 1202 + 1240 + 1264 + 1289 + 1314 + 1339 + 1363 + 1389 + 1413 + 1438 + 1463 + 1488 + + @@ -336,8 +421,13 @@ 180000 867 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + SHILLIEN_PROTECTION + SHILLIEN_PROTECTION 1 TARGET SINGLE @@ -564,6 +654,8 @@ 5000 2 1 + SELF + SINGLE SHILLIEN_PROTECTION,1 @@ -632,12 +724,12 @@ - 70 100
1 2 7 + HIDE WIND_BLEND true true @@ -651,10 +743,9 @@ SELF SINGLE 687 - 1 + 4 - - + 70 @@ -716,7 +807,11 @@ 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + SONG_OF_WISDOM 1000 icon.skill19231 @@ -742,7 +837,11 @@ 1 - 30 + + 30 + {base + subIndex} + {base + 10 + 0.5 * subIndex} + CRIPPLING_DANCE 1000 icon.skill19232 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/23400-23499.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/23400-23499.xml index 0c4b8294db..04c70798bf 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/23400-23499.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/23400-23499.xml @@ -1380,7 +1380,7 @@ 5-12 0;0;150;120 7000 - true + ATTACK ENEMY FAN NOT_FRIEND_PC diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/27500-27599.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/27500-27599.xml index 401a425170..9217cc58fe 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/27500-27599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/27500-27599.xml @@ -1066,140 +1066,153 @@ A1
+ + 27491 + 1 icon.skill0000 A1 NONE;STRIDER;WYVERN;WOLF 5 + 0 + 1 + 2 SELF SINGLE - 20 + 10 10 - - - - + - + - + - + - + - + - - + + + + 27492 + 1 icon.skill0000 A1 - NONE;STRIDER;WYVERN;WOLF 5 + 0 + 1 + 2 SELF SINGLE - 20 + 10 10 - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27493 + 1 icon.skill0000 A1 - NONE;STRIDER;WYVERN;WOLF 5 + 0 + 1 + 2 SELF SINGLE - 20 + 10 10 - + - + - + - + - + - + - + @@ -1207,153 +1220,835 @@ - + + 27494 + 1 icon.skill0000 A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - - icon.skill0000 - A1 - - - icon.skill0000 - A1 - NONE;STRIDER;WYVERN;WOLF 5 + 0 + 1 + 2 SELF SINGLE - 20 + 10 10 - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - + + - + - + + + 27495 + 1 icon.skill0000 A1 - NONE;STRIDER;WYVERN;WOLF 5 + 0 + 1 + 2 SELF SINGLE - 20 + 10 10 - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27496 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27497 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27498 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27499 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27500 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27501 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + 27502 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27503 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + 27504 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27505 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 27506 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + - + + + + + + + - + + + + + + + + + + + + + + + + + + + 27507 + 1 + icon.skill0000 + A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + - + - + @@ -1385,19 +2080,145 @@ - + + 27508 + 1 icon.skill0000 A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + - + + 27509 + 1 icon.skill0000 A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + 27510 + 1 icon.skill0000 A1 + 5 + 0 + 1 + 2 + SELF + SINGLE + + + 10 + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/30000-30099.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/30000-30099.xml index 7201b8d0fa..c56b8221fe 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/30000-30099.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/30000-30099.xml @@ -1,16 +1,24 @@ - + icon.skill11011 P - 0 + + + 30001 + 30002 + 1 + 3 + 100 + TARGET + + - + - 6 14 19 25 32 36 41 46 50 55 60 64 69 72 75 77 79 171 179 187 195 203 211 219 227 231 235 239
icon.skill30001 A1 ENEMY @@ -76,7 +84,7 @@ 8 80 - 160 + 400 -692 1000 500 @@ -111,6 +119,8 @@ 103 105 + CAST + 6 @@ -158,14 +168,19 @@ - STORM_SIGN 1 2 3 - icon.skill30027 5 + STORM_SIGN + + + + STORM_SIGN1 + + icon.skill30027 A2 ENEMY SINGLE @@ -173,7 +188,6 @@ -100 true - -70 DIFF @@ -187,9 +201,7 @@ - 110 120 130 140 150 157 162 167 172 501 515 543 571 599 627 655 683 711 725 739
icon.skill30003 - 100 A1 ENEMY SINGLE @@ -216,6 +228,7 @@ 73 80 + 400 -696 4000 500 @@ -242,6 +255,7 @@ 103 105 + 6 @@ -289,13 +303,11 @@ - 57 66 74 83 92 101 110 118 127 136 140 145 149 154 420 442 464 486 508 530 552 574 584 594 604
1 STUN 5 - KNOCKBACK + WIND_STUN icon.skill30004 - 100 A2 ENEMY SINGLE @@ -327,6 +339,7 @@ 73 80 + 400 -696 3000 500 @@ -361,17 +374,13 @@ KNOCKBACK + SWORD BLUNT - - STORM_SIGN - 1 - true - @@ -403,15 +412,18 @@ 604 - - 60 - THROW_UP + + 10279;10517;10025;10776;11770;1904;11264;11093;13314;1912
- + + 4 + 5 + STORM_SIGN + STORM_SIGN2 icon.skill30027 A2 ENEMY @@ -420,7 +432,6 @@ -100 true - -100 DIFF @@ -434,7 +445,6 @@ - 255 269 283 297 311 325 339 353 359 365 371
icon.skill30006 1 STUN @@ -514,10 +524,7 @@ - 123 127 130 134 386 396 416 436 456 476 496 516 536 546 556
icon.skill30007 - 5-10 - 100 A1 ENEMY SINGLE @@ -556,6 +563,7 @@ 73 80 + 400 -696 4000 500 @@ -609,7 +617,6 @@ - 1 2 2 2 2
icon.skill30008 1 @@ -653,10 +660,14 @@
+ + + 50 + + - - 19227 + 19227 1 2 @@ -684,6 +695,7 @@ 10 5 + HIDE DECEPTIVE_BLINK 687 A2 @@ -717,12 +729,10 @@
- - 0 + 0 400 - - + 100 DIFF @@ -753,10 +763,9 @@ 1 - DEBUFF 100 - 99 + 10 @@ -775,7 +784,7 @@ icon.skill30011 - 1400 + 1200 A1 ENEMY SINGLE @@ -829,8 +838,7 @@ - - 30002 + 30002 3 @@ -840,8 +848,8 @@ icon.skill30012 1 - 1 - KNOCKDOWN + 5 + STUN KNOCKDOWN DA2 ENEMY @@ -878,11 +886,9 @@ 1000 500 7000 - 900 - CHARGE 1 true - KNOCKDOWN + KNOCKBACK @@ -895,9 +901,6 @@ - - 333 - 1.1 @@ -945,7 +948,7 @@ icon.skill30005 - 1400 + 1400 -709 A1 ENEMY @@ -972,6 +975,9 @@ + 1 + 5 + PSY_POWER icon.skill30014 -1371 A2 @@ -997,8 +1003,9 @@ 500 10000 1 - 5 true + ENEMY + SINGLE @@ -1011,6 +1018,9 @@ + 1 + 5 + PSY_POWER icon.skill0028 A2 1100 @@ -1019,13 +1029,23 @@ 1 -1371 true + SELF + POINT_BLANK + NOT_FRIEND + + + + SWORD + BLUNT + + + - 1 0.5 0.5 0.5
- 0 0 90 90
icon.skill30016 + 1 30 687 A2 @@ -1042,43 +1062,13 @@ 300000 1 - - - 0 - 0 - 90 - 90 - - - 0 - 0 - 90 - 90 - - - 0 - 0 - 90 - 90 - - - 0 - 0 - 90 - 90 - - - 0 - 0 - 90 - 90 - - - 0 - 0 - 90 - 90 - + + 90 + 90 + 90 + 90 + 90 + 90 30 @@ -1092,13 +1082,8 @@ 100 DIFF - - - 0 - -50 - -50 - -50 - + + -50 PER 1 @@ -1107,9 +1092,6 @@ - 0.85 0.85 0.85 0.8
- 0 7 7 7
- 1 2 3 4
icon.skill30017 1 @@ -1119,7 +1101,7 @@ 600 SQUALL - 2 + 2 A2 SELF SINGLE @@ -1150,12 +1132,10 @@ PER
- - - 50 + 50 ENEMY SINGLE - 30026 + 30026 1 2 @@ -1163,19 +1143,13 @@ 4 - - + DEBUFF 100 99 - - - 0 - 7 - 7 - 7 - + + 7 DIFF @@ -1209,17 +1183,15 @@ - DEBUFF 100 - 99 + 10
- 533 561 589 617 645 673 701 729 743 757 771
icon.skill30019 1 @@ -1280,6 +1252,10 @@
+ + 30002 + 3 + 533 @@ -1340,12 +1316,10 @@ PER - - - 50 + 50 ENEMY SINGLE - 30027 + 30027 1 @@ -1361,8 +1335,6 @@ - 50 70
- 30 40
icon.skill30022 1 30 @@ -1435,11 +1407,12 @@ - 50 100 150 200
icon.skill30026 - 30 - 1600 - -711 + 3 + 5 + SPEED_DOWN + 1600 + -711 A2 ENEMY SINGLE @@ -1465,8 +1438,8 @@ icon.skill30026 - 1600 - -711 + 1400 + -711 A1 ENEMY SINGLE @@ -1478,8 +1451,7 @@ 300
- - 30005 + 30005 10
@@ -1487,9 +1459,8 @@ - 448 465 473 481
icon.iconskill30007 - 5 + 5 10-10 200 -707 @@ -1549,40 +1520,28 @@ - 1.17 1.17 1.17 1.17 1.17 1.17 1.17 1.40 1.40 1.40 1.40 1.40 1.40 1.40 1.40 1.40 1.40
- 10 57 228 436 728 834 942 1963 2276 2638 2970 3365 3570 3787 4018 4262 4522
- 1.05 1.05 1.10 1.10 1.10 1.15 1.20 1.30 1.30 1.30 1.30 1.30 1.30 1.30 1.30 1.30 1.30
- 1 1 1 1 1 1 1 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10
- 1 1 1 1 1 1 1 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10
icon.skill30023 P - - - - 30002 + + 30002 1 3 BLUNT - 30001 - 5 + 30001 - - - - 30019 + + 30019 BLUNT - 30002 + 30002 3 - - - - - 33 - 30003 + + 33 + 30003 BLUNT - 30005 + 30005 + 4 @@ -1715,33 +1674,13 @@ - 7 12 27 39 55 69 77 1333 1464 1608 1734 1943 2017 2093 2172 2264 2350
- 1 1 1 1 1 1 1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1
- 0 0 0 0 0 0 533 949 1073 1214 1340 1511 1588 1668 1753 1842 1935
- 1 1 1 1 1 1 1.03 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1
- 1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.35 1.35 1.35 1.35 1.35 1.35 1.35 1.35 1.35
icon.skill30024 P - + - 0 - 0 - 0 - 0 - 0 - 0 3 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 + 10 PER @@ -1853,30 +1792,11 @@ - 0 0 0 4891 4891 4891 4891 4891 4891 4891 4891 4891 4891
- 33 77 223 692 758 827 883 897 925 954 983 1013 1043
- 1 3 5 12 12 12 12 12 12 12 12 12 12
- 0.9 0.85 0.8 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7
- 1 1 0.95 0.93 0.93 0.93 0.93 0.93 0.93 0.93 0.93 0.93 0.93
icon.skill10504 P - - - 0 - 0 - 0 - 4891 - 4891 - 4891 - 4891 - 4891 - 4891 - 4891 - 4891 - 4891 - 4891 - + + 4891 DIFF @@ -1884,34 +1804,14 @@ 1 3 5 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 + 12
DIFF
- + - 0 - 0 -5 - -7 - -7 - -7 - -7 - -7 - -7 - -7 - -7 - -7 - -7 + -7 PER 1 @@ -1921,16 +1821,7 @@ -10 -15 -20 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 + -30 PER 1 @@ -1939,9 +1830,7 @@
- - 10 20 22 24 26 30 32 34 36 38 40
icon.skill11006 P @@ -1958,6 +1847,21 @@ 110 + + + 10 + 20 + 22 + 24 + 26 + 30 + 32 + 34 + 36 + 38 + 40 + + 10 @@ -2043,8 +1947,6 @@ - 0 30
- 0 30
icon.skill10005 P @@ -2064,7 +1966,6 @@
- 2 4 16
icon.skill11253 P diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/30500-30599.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/30500-30599.xml index 764e98d600..e93ca8542e 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/30500-30599.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/30500-30599.xml @@ -3,8 +3,6 @@ - 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7
- 22 77 141 221 669 856 1073 1323 1602 1913 2256 2629 3034 3879 4149 4434 4733 18990 20811 23098 25950 29500 33928 39478 46478 47996 49514 51032
icon.skill30500 20 PD_DOWN @@ -73,7 +71,7 @@ 79 80 - true + ATTACK A2 2000 ENEMY @@ -88,7 +86,6 @@ - 22 77 @@ -119,41 +116,15 @@ 49514 51032 - 15 + 15 STUN 1.2 true - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 + -10 + -30 PER @@ -161,13 +132,12 @@
- - 129 235 369 1116 1428 1789 2205 2671 3189 3760 4383 5058 6466 6916 7390 7888 28134 30832 34221 38446 43706 50268 58492 68865 71115 73365 75615
+ icon.skill30501 40 500 -687 - 400 + 400 1000 20 @@ -227,7 +197,7 @@ 79 80 - true + ATTACK A1 5000 ENEMY @@ -241,7 +211,6 @@ - 129 235 @@ -281,10 +250,12 @@ icon.skill30502 + 1 3 KNOCKDOWN KNOCKDOWN - 100 + 100 + 20 40 500 -709 @@ -342,7 +313,7 @@ 79 80 - true + ATTACK A2 30000 ENEMY @@ -367,12 +338,11 @@ - 35167 36755 40540 45273 51165 58506 67683 79217 88893 91705 94517
icon.skill30503 60 500 -687 - 400 + 400 2000 85 @@ -400,7 +370,7 @@ 84 84 - true + ATTACK A1 5000 ENEMY @@ -414,7 +384,6 @@ - 35167 36755 @@ -429,16 +398,13 @@ 94517 true - 15 + 15 true
- - - 10417 11147 11917 12727 13577 35167 38540 42776 48058 54633 62836 73116 86081 88893 91705 94517
icon.skill30504 40 500 @@ -481,7 +447,7 @@ 87 88 - true + ATTACK A1 9000 ENEMY @@ -495,8 +461,6 @@ - - 10417 11147 @@ -524,15 +488,14 @@ - 17266 19164 21530 24475 28150 32755 38563 39823 41083 42343
icon.skill30505 1 1 80 200 + 10-10 500 -687 - 400 2000 87 @@ -599,8 +562,6 @@ - - 5164 5518 5890 19693 21581 23953 26909 30589 35181 40936 48195 49769 51343 52917
icon.skill30506 1 STUN @@ -610,7 +571,7 @@ 80 1000 -687 - 400 + 400 0;0;200;90 2000 @@ -645,7 +606,7 @@ 159 161 - true + ATTACK A2 30000 ENEMY @@ -662,7 +623,6 @@ - 5164 5518 @@ -679,7 +639,7 @@ 51343 52917 - 15 + 15 THROW_UP @@ -699,7 +659,7 @@ 80 -687 900 - A2 + DA4 ENEMY SINGLE @@ -728,7 +688,7 @@ 30 30 - true + ATTACK 300 100 300 @@ -742,32 +702,22 @@ - - - - CHARGE - 333 - 270 - - - - 100 + 90
- -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 -30
icon.skill30508 5 REAL_TARGET -687 900 - A2 + DA5 ENEMY SINGLE @@ -799,7 +749,7 @@ 33 34 - true + ATTACK 300 100 300 @@ -812,62 +762,23 @@ - - - - CHARGE - 333 - 90 - - - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -10 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 - -30 + -10 + -30 - - 100 + 90
- 1.05 1.10 1.15 1.20 1.20
- 0 0 0 0 50
icon.skill30509 - 1 - 5 - NONE - A2 + DA3 ENEMY SINGLE @@ -888,41 +799,21 @@ - - - - WARP_BACK - 180 - 333 - 280 - false - - - - 100 - - - - 5 - 10 - 15 - 20 - 20 - - PER + 90 - - - 0 - 0 - 0 - 0 - 50 - + + 30608 + + 1 + 2 + 3 + 4 + 5 +
@@ -933,27 +824,21 @@ P 97 - - - - 30532 + + 30532 1 - 30507 + 30507 - - - - 30532 + + 30532 1 - 30508 + 30508
- 1.10 1.15 1.20 1.25 1.25
- 0 15 20 25 30
icon.skill30511 1 @@ -1618,12 +1503,6 @@ - 2 3 3
- 10 20 40
- 1 1 1.20
- 1.10 1.20 1.40
- 1 1 1.20
- 1 1 1.20
icon.skill30510 10 A2 @@ -1633,42 +1512,13 @@ 2 4 - - - 0 - 0 - 25 - + + + 25 PER - - - - 30532 - - 2 - 3 - 3 - - 30507 - - - - - 30532 - - 2 - 3 - 3 - - 30508 - - - - 0 - 0 - 20 - + + 20 PER @@ -1684,13 +1534,6 @@ - 0 2 3 3 3 4 4 8 8 8 8 8 8 8 8 8 8
- 1 1 1 1 1 1.1 1.1 1.45 1.45 1.45 1.45 1.45 1.45 1.45 1.45 1.45 1.45
- 1 1 1 1 1 1 1 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15 1.15
- - 4 13 63 124 208 306 471 3378 3916 4540 5110 5790 6143 6517 6914 7335 7781
- 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.45 1.45 1.45 1.45 1.45 1.45 1.45 1.45 1.45 1.45
- 0 0 10 10 10 20 20 60 60 60 60 60 60 60 60 60 60
icon.skill30524 5 @@ -1704,34 +1547,19 @@ 90 95 99 - 99 - 99 - 99 - 99 - 99 - 99 + 100 + 102 + 104 + 106 + 108 + 110 P - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 45 - 45 - 45 - 45 - 45 - 45 - 45 - 45 - 45 - 45 + 10 + 45 PER @@ -1765,25 +1593,12 @@ DUALFIST - + - 0 2 - 3 - 3 - 3 - 4 - 4 - 8 - 8 - 8 - 8 - 8 - 8 - 8 - 8 - 8 - 8 + 3 + 4 + 8 DIFF @@ -1791,26 +1606,8 @@ DUALFIST - - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 15 - 15 - 15 - 15 - 15 - 15 - 15 - 15 - 15 - 15 - + + 15 PER FIST @@ -1825,25 +1622,10 @@ DUALFIST - + - 0 - 0 - 0 - 0 - 0 - 10 - 10 - 45 - 45 - 45 - 45 - 45 - 45 - 45 - 45 - 45 - 45 + 10 + 45 PER @@ -1851,25 +1633,11 @@ DUALFIST - + - 0 - 0 - 10 - 10 - 10 - 20 - 20 - 60 - 60 - 60 - 60 - 60 - 60 - 60 - 60 - 60 - 60 + 10 + 20 + 60 DIFF @@ -1882,13 +1650,6 @@ - 1 0.85 0.80 0.80 0.80 0.75 0.75 0.65 0.65 0.65 0.65 0.65 0.65 0.65 0.65 0.65 0.65
- 1 1 1 1 1 1 1 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10
- 14 17 34 51 69 91 99 1657 1819 1999 2155 2415 2506 2601 2700 2813 2920
- 1 1 1 1 1 1 1.03 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10 1.10
- 0 0 0 0 0 0 276 949 1073 1214 1340 1511 1588 1668 1753 1842 1935
- 0 2 3 3 3 4 4 12 12 12 12 12 12 12 12 12 12
- icon.skill10254 5 @@ -1902,48 +1663,27 @@ 90 95 99 - 99 - 99 - 99 - 99 - 99 - 99 + 100 + 102 + 104 + 106 + 108 + 110 P - + - 0 - 0 - 0 - 0 - 0 - 0 3 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 + 10 PER LIGHT - + - 0 - 0 - 0 - 0 - 0 - 0 276 949 1073 @@ -1961,26 +1701,8 @@ LIGHT - - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - 10 - + + 10 PER LIGHT @@ -2011,75 +1733,36 @@ LIGHT - + - 0 2 - 3 - 3 - 3 - 4 - 4 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 + 3 + 4 + 12 DIFF LIGHT - + - 0 -15 - -20 - -20 - -20 - -25 - -25 - -35 - -35 - -35 - -35 - -35 - -35 - -35 - -35 - -35 - -35 + -20 + -25 + -35 PER LIGHT - + - 0 -15 - -20 - -20 - -20 - -25 - -25 - -35 - -35 - -35 - -35 - -35 - -35 - -35 - -35 - -35 - -35 + -20 + -25 + -35 PER @@ -2091,12 +1774,6 @@ - 58 196 473 6004 6305 6620 6883 6951 7088 7227 7370 7515 7663
- 0 0 231 545 573 601 625 631 644 657 670 683 696
- 2.5 4.5 6.5 12 12 12 12 12 12 12 12 12 12
- 1.2 1.8 2.4 6 6 6 6 6 6 6 6 6 6
- 0 0 2.4 12 12 12 12 12 12 12 12 12 12
- 0 0 10 14 14 14 14 14 14 14 14 14 14
icon.skill11506 20 @@ -2109,9 +1786,9 @@ 100 102 104 - 104 - 104 - 104 + 106 + 108 + 110 P @@ -2133,28 +1810,15 @@
DIFF
- + - 0 - 0 10 - 14 - 14 - 14 - 14 - 14 - 14 - 14 - 14 - 14 - 14 + 14 DIFF - + - 0 - 0 231 545 573 @@ -2174,16 +1838,7 @@ 2.5 4.5 6.5 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 + 12 DIFF @@ -2192,34 +1847,14 @@ 1.2 1.8 2.4 - 6 - 6 - 6 - 6 - 6 - 6 - 6 - 6 - 6 - 6 + 6 DIFF - + - 2.5 - 4.5 - 6.5 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 - 12 + 2.4 + 12 DIFF @@ -2228,8 +1863,6 @@ - 10 20 22 24 26 30 32 34 36 38 40
- icon.skill11006 76 @@ -2443,8 +2076,6 @@ - 30 30
- 0 30
icon.skill10005 76 @@ -2453,14 +2084,8 @@ P - - 30 - 30 - - - 30 - 30 - + 30 + 30 0 30 @@ -2478,7 +2103,6 @@
- 2 4 14
icon.skill0430 P @@ -2487,7 +2111,7 @@ 85 - + STR @@ -2509,12 +2133,24 @@ KNOCKDOWN 80 PHYSICAL - CHARGE - true + ATTACK DA2 KNOCKDOWN ENEMY SINGLE + + 85 + 87 + 89 + 91 + 93 + 95 + 97 + 99 + 101 + 103 + 105 + 29 29 @@ -2553,13 +2189,17 @@
- - 91570 95080 98736 102392
icon.skill30547 A1 ENEMY SINGLE + + 99 + 101 + 103 + 105 + 85 80 500 @@ -2580,7 +2220,6 @@ - 91570 95080 diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/30600-30699.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/30600-30699.xml index 9ac4e7b477..c9f6c9dd2a 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/30600-30699.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/30600-30699.xml @@ -32,8 +32,7 @@ 3 - - 30603 + 30603 1 7 @@ -60,7 +59,6 @@
- icon.icon_lender P @@ -76,8 +74,7 @@ 3 - - 30606 + 30606 1 7 @@ -108,7 +105,6 @@ - icon.icon_Er_wizard P @@ -116,10 +112,28 @@ + 1 + 5 + PA_UP icon.skill30509 A2 300 500 4 + + + + 5 + 10 + 15 + 20 + 20 + + PER + + + 50 + +
diff --git a/L2J_Mobius_Underground/dist/game/data/stats/skills/39100-39199.xml b/L2J_Mobius_Underground/dist/game/data/stats/skills/39100-39199.xml index 7689381ec7..ef5a215135 100644 --- a/L2J_Mobius_Underground/dist/game/data/stats/skills/39100-39199.xml +++ b/L2J_Mobius_Underground/dist/game/data/stats/skills/39100-39199.xml @@ -3,11 +3,18 @@ + 15 icon.skill0998 A2 1000 438 30000 + + + 66 + DIFF + + @@ -15,5 +22,15 @@ icon.skill10518 T 1 + STEALTH + NONE + 5 + NONE + + + 2 + 5 + +
diff --git a/L2J_Mobius_Underground/dist/game/data/xsd/EnchantSkillGroups.xsd b/L2J_Mobius_Underground/dist/game/data/xsd/EnchantSkillGroups.xsd index 1761bfcf63..291a869727 100644 --- a/L2J_Mobius_Underground/dist/game/data/xsd/EnchantSkillGroups.xsd +++ b/L2J_Mobius_Underground/dist/game/data/xsd/EnchantSkillGroups.xsd @@ -1,299 +1,84 @@ - - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + diff --git a/L2J_Mobius_Underground/dist/game/data/xsd/cubics.xsd b/L2J_Mobius_Underground/dist/game/data/xsd/cubics.xsd index b32befbf6a..eed3cfcd29 100644 --- a/L2J_Mobius_Underground/dist/game/data/xsd/cubics.xsd +++ b/L2J_Mobius_Underground/dist/game/data/xsd/cubics.xsd @@ -1,7 +1,7 @@ - + @@ -11,8 +11,12 @@ - - + + + + + + @@ -20,7 +24,7 @@ - + @@ -30,8 +34,12 @@ - - + + + + + + diff --git a/L2J_Mobius_Underground/dist/game/data/xsd/zones.xsd b/L2J_Mobius_Underground/dist/game/data/xsd/zones.xsd index a0380d3c4c..0096877cfa 100644 --- a/L2J_Mobius_Underground/dist/game/data/xsd/zones.xsd +++ b/L2J_Mobius_Underground/dist/game/data/xsd/zones.xsd @@ -150,6 +150,7 @@ + diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/GeoData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/GeoData.java index 17223a7967..aacfc708bf 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/GeoData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/GeoData.java @@ -468,7 +468,6 @@ public class GeoData if (WarpedSpaceManager.getInstance().checkForWarpedSpace(new Location(x, y, z), new Location(tx, ty, tz), instance)) { - System.out.println("there is a warp space in path !"); return new Location(x, y, getHeight(x, y, z)); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/ai/AbstractAI.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/ai/AbstractAI.java index f6629e006b..6264f0fd61 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/ai/AbstractAI.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/ai/AbstractAI.java @@ -31,6 +31,7 @@ import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Summon; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.interfaces.ILocational; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; @@ -510,6 +511,11 @@ public abstract class AbstractAI implements Ctrl } } + public void moveTo(ILocational loc) + { + moveTo(loc.getX(), loc.getY(), loc.getZ()); + } + /** * Move the actor to Location (x,y,z) server side AND client side by sending Server->Client packet CharMoveToLocation (broadcast).
* Caution : Low level function, used by AI subclasses diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/sql/impl/SummonSkillsTable.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/sql/impl/SummonSkillsTable.java index ee040ce51e..cf31d8bcac 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/sql/impl/SummonSkillsTable.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/sql/impl/SummonSkillsTable.java @@ -34,7 +34,7 @@ import com.l2jmobius.gameserver.model.actor.L2Summon; public class SummonSkillsTable { private static Logger LOGGER = Logger.getLogger(SummonSkillsTable.class.getName()); - private final Map> _skillTrees = new HashMap<>(); + private final Map> _skillTrees = new HashMap<>(); protected SummonSkillsTable() { @@ -52,7 +52,7 @@ public class SummonSkillsTable while (rs.next()) { final int npcId = rs.getInt("templateId"); - Map skillTree = _skillTrees.get(npcId); + Map skillTree = _skillTrees.get(npcId); if (skillTree == null) { skillTree = new HashMap<>(); @@ -110,9 +110,12 @@ public class SummonSkillsTable } break; } - if ((temp.getMinLevel() <= cha.getLevel()) && (temp.getLevel() > lvl)) + else if (temp.getMinLevel() <= cha.getLevel()) { - lvl = temp.getLevel(); + if (temp.getLevel() > lvl) + { + lvl = temp.getLevel(); + } } } return lvl; diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/AlchemyData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/AlchemyData.java index 6bcac19383..9e19f96009 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/AlchemyData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/AlchemyData.java @@ -37,7 +37,7 @@ public class AlchemyData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(AlchemyData.class.getName()); - private final Map _alchemy = new HashMap<>(); + private final Map _alchemy = new HashMap<>(); protected AlchemyData() { @@ -112,8 +112,7 @@ public class AlchemyData implements IGameXmlReader } } } - final int skillHashCode = SkillData.getSkillHashCode(set.getInt("id"), set.getInt("level")); - _alchemy.put(skillHashCode, alchemyCraft); + _alchemy.put(SkillData.getSkillHashCode(set.getInt("id"), set.getInt("level")), alchemyCraft); } } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/CubicData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/CubicData.java index 23ec671066..58c7ba1d53 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/CubicData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/CubicData.java @@ -31,9 +31,10 @@ import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.actor.templates.L2CubicTemplate; import com.l2jmobius.gameserver.model.cubic.CubicSkill; import com.l2jmobius.gameserver.model.cubic.ICubicConditionHolder; -import com.l2jmobius.gameserver.model.cubic.conditions.GeneralCondition; -import com.l2jmobius.gameserver.model.cubic.conditions.GeneralCondition.GeneralConditionType; import com.l2jmobius.gameserver.model.cubic.conditions.HealthCondition; +import com.l2jmobius.gameserver.model.cubic.conditions.HpCondition; +import com.l2jmobius.gameserver.model.cubic.conditions.HpCondition.HpConditionType; +import com.l2jmobius.gameserver.model.cubic.conditions.RangeCondition; /** * @author UnAfraid @@ -102,12 +103,17 @@ public class CubicData implements IGameXmlReader { switch (conditionNode.getNodeName()) { - case "general": + case "hp": { - final GeneralConditionType type = parseEnum(conditionNode.getAttributes(), GeneralConditionType.class, "type"); - final int hpPer = parseInteger(conditionNode.getAttributes(), "hpPercent"); - final int hp = parseInteger(conditionNode.getAttributes(), "hp"); - holder.addCondition(new GeneralCondition(type, hpPer, hp)); + final HpConditionType type = parseEnum(conditionNode.getAttributes(), HpConditionType.class, "type"); + final int hpPer = parseInteger(conditionNode.getAttributes(), "percent"); + holder.addCondition(new HpCondition(type, hpPer)); + break; + } + case "range": + { + final int range = parseInteger(conditionNode.getAttributes(), "value"); + holder.addCondition(new RangeCondition(range)); break; } case "healthPercent": diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/EnchantSkillGroupsData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/EnchantSkillGroupsData.java index c7c0d87e7e..0a665f7d1e 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/EnchantSkillGroupsData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/EnchantSkillGroupsData.java @@ -17,21 +17,22 @@ package com.l2jmobius.gameserver.data.xml.impl; import java.io.File; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.Map; +import java.util.Set; import java.util.logging.Logger; import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import com.l2jmobius.Config; import com.l2jmobius.commons.util.IGameXmlReader; -import com.l2jmobius.gameserver.model.L2EnchantSkillGroup; -import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder; -import com.l2jmobius.gameserver.model.L2EnchantSkillLearn; +import com.l2jmobius.gameserver.enums.SkillEnchantType; import com.l2jmobius.gameserver.model.StatsSet; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.holders.EnchantSkillHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.SkillHolder; import com.l2jmobius.gameserver.model.skills.Skill; /** @@ -42,29 +43,10 @@ public class EnchantSkillGroupsData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(EnchantSkillGroupsData.class.getName()); - public static final int NORMAL_ENCHANT_COST_MULTIPLIER = Config.NORMAL_ENCHANT_COST_MULTIPLIER; - public static final int SAFE_ENCHANT_COST_MULTIPLIER = Config.SAFE_ENCHANT_COST_MULTIPLIER; + private final Map _enchantSkillHolders = new LinkedHashMap<>(); + private final Map> _enchantSkillTrees = new HashMap<>(); - public static final int NORMAL_ENCHANT_BOOK_OLD = 6622; - public static final int SAFE_ENCHANT_BOOK_OLD = 9627; - public static final int CHANGE_ENCHANT_BOOK_OLD = 9626; - public static final int UNTRAIN_ENCHANT_BOOK_OLD = 9625; - public static final int NORMAL_ENCHANT_BOOK = 30297; - public static final int SAFE_ENCHANT_BOOK = 30298; - public static final int CHANGE_ENCHANT_BOOK = 30299; - public static final int UNTRAIN_ENCHANT_BOOK = 30300; - public static final int IMMORTAL_SCROLL = 37044; - public static final int NORMAL_ENCHANT_BOOK_V2 = 46150; - public static final int SAFE_ENCHANT_BOOK_V2 = 46151; - public static final int CHANGE_ENCHANT_BOOK_V2 = 46152; - public static final int IMMORTAL_SCROLL_V2 = 46153; - public static final int NORMAL_ENCHANT_BOOK_V3 = 46154; - public static final int SAFE_ENCHANT_BOOK_V3 = 46155; - public static final int CHANGE_ENCHANT_BOOK_V3 = 46156; - public static final int IMMORTAL_SCROLL_V3 = 46157; - - private final Map _enchantSkillGroups = new HashMap<>(); - private final Map _enchantSkillTrees = new HashMap<>(); + public static int MAX_ENCHANT_LEVEL; /** * Instantiates a new enchant groups table. @@ -77,188 +59,78 @@ public class EnchantSkillGroupsData implements IGameXmlReader @Override public void load() { - _enchantSkillGroups.clear(); - _enchantSkillTrees.clear(); - parseDatapackFile("data/EnchantSkillGroups.xml"); - int routes = 0; - for (L2EnchantSkillGroup group : _enchantSkillGroups.values()) - { - routes += group.getEnchantGroupDetails().size(); - } - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _enchantSkillGroups.size() + " groups and " + routes + " routes."); + _enchantSkillHolders.clear(); + parseDatapackFile("data/enchantSkillGroups.xml"); + MAX_ENCHANT_LEVEL = _enchantSkillHolders.size(); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _enchantSkillHolders.size() + " enchant routes, max enchant set to " + MAX_ENCHANT_LEVEL + "."); } @Override public void parseDocument(Document doc, File f) { - NamedNodeMap attrs; - StatsSet set; - Node att; - int id = 0; - L2EnchantSkillGroup group; - for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) + forEach(doc, "list", listNode -> forEach(listNode, "enchant", enchantNode -> { - if ("list".equalsIgnoreCase(n.getNodeName())) - { - for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) - { - if ("group".equalsIgnoreCase(d.getNodeName())) - { - attrs = d.getAttributes(); - id = parseInteger(attrs, "id"); - - group = _enchantSkillGroups.get(id); - if (group == null) - { - group = new L2EnchantSkillGroup(id); - _enchantSkillGroups.put(id, group); - } - - for (Node b = d.getFirstChild(); b != null; b = b.getNextSibling()) - { - if ("enchant".equalsIgnoreCase(b.getNodeName())) - { - attrs = b.getAttributes(); - set = new StatsSet(); - - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - group.addEnchantDetail(new EnchantSkillHolder(set)); - } - } - } - } - } - } - } - - /** - * Adds the new route for skill. - * @param skillId the skill id - * @param maxLvL the max lvl - * @param route the route - * @param group the group - * @return the int - */ - public int addNewRouteForSkill(int skillId, int maxLvL, int route, int group) - { - L2EnchantSkillLearn enchantableSkill = _enchantSkillTrees.get(skillId); - if (enchantableSkill == null) - { - enchantableSkill = new L2EnchantSkillLearn(skillId, maxLvL); - _enchantSkillTrees.put(skillId, enchantableSkill); - } - if (_enchantSkillGroups.containsKey(group)) - { - enchantableSkill.addNewEnchantRoute(route, group); + final EnchantSkillHolder enchantSkillHolder = new EnchantSkillHolder(new StatsSet(parseAttributes(enchantNode))); - return _enchantSkillGroups.get(group).getEnchantGroupDetails().size(); - } - LOGGER.severe(getClass().getSimpleName() + ": Error while loading generating enchant skill id: " + skillId + "; route: " + route + " missing group: " + group); - return 0; - } - - /** - * Gets the skill enchantment for skill. - * @param skill the skill - * @return the skill enchantment for skill - */ - public L2EnchantSkillLearn getSkillEnchantmentForSkill(Skill skill) - { - // there is enchantment for this skill and we have the required level of it - final L2EnchantSkillLearn esl = getSkillEnchantmentBySkillId(skill.getId()); - if ((esl != null) && (skill.getLevel() >= esl.getBaseLevel())) - { - return esl; - } - return null; - } - - /** - * Gets the skill enchantment by skill id. - * @param skillId the skill id - * @return the skill enchantment by skill id - */ - public L2EnchantSkillLearn getSkillEnchantmentBySkillId(int skillId) - { - return _enchantSkillTrees.get(skillId); - } - - /** - * Gets the enchant skill group by id. - * @param id the id - * @return the enchant skill group by id - */ - public L2EnchantSkillGroup getEnchantSkillGroupById(int id) - { - return _enchantSkillGroups.get(id); - } - - /** - * Gets the enchant skill sp cost. - * @param skill the skill - * @return the enchant skill sp cost - */ - public int getEnchantSkillSpCost(Skill skill) - { - final L2EnchantSkillLearn enchantSkillLearn = _enchantSkillTrees.get(skill.getId()); - if (enchantSkillLearn != null) - { - final EnchantSkillHolder esh = enchantSkillLearn.getEnchantSkillHolder(skill.getLevel()); - if (esh != null) + forEach(enchantNode, "sps", spsNode -> forEach(spsNode, "sp", spNode -> { - return esh.getSpCost(); - } - } - return Integer.MAX_VALUE; - } - - /** - * Gets the enchant skill Adena cost. - * @param skill the skill - * @return the enchant skill Adena cost - */ - public int getEnchantSkillAdenaCost(Skill skill) - { - final L2EnchantSkillLearn enchantSkillLearn = _enchantSkillTrees.get(skill.getId()); - if (enchantSkillLearn != null) - { - final EnchantSkillHolder esh = enchantSkillLearn.getEnchantSkillHolder(skill.getLevel()); - if (esh != null) + enchantSkillHolder.addSp(parseEnum(spNode.getAttributes(), SkillEnchantType.class, "type"), parseInteger(spNode.getAttributes(), "amount")); + })); + + forEach(enchantNode, "chances", chancesNode -> forEach(chancesNode, "chance", chanceNode -> { - return esh.getAdenaCost(); - } - } - return Integer.MAX_VALUE; - } - - /** - * Gets the enchant skill rate. - * @param player the player - * @param skill the skill - * @return the enchant skill rate - */ - public byte getEnchantSkillRate(L2PcInstance player, Skill skill) - { - final L2EnchantSkillLearn enchantSkillLearn = _enchantSkillTrees.get(skill.getId()); - if (enchantSkillLearn != null) - { - final EnchantSkillHolder esh = enchantSkillLearn.getEnchantSkillHolder(skill.getLevel()); - if (esh != null) + enchantSkillHolder.addChance(parseEnum(chanceNode.getAttributes(), SkillEnchantType.class, "type"), parseInteger(chanceNode.getAttributes(), "value")); + })); + + forEach(enchantNode, "items", itemsNode -> forEach(itemsNode, "item", itemNode -> { - return esh.getRate(player); - } - } - return 0; + enchantSkillHolder.addRequiredItem(parseEnum(itemNode.getAttributes(), SkillEnchantType.class, "type"), new ItemHolder(new StatsSet(parseAttributes(itemNode)))); + })); + + _enchantSkillHolders.put(parseInteger(enchantNode.getAttributes(), "level"), enchantSkillHolder); + })); + } + + public void addRouteForSkill(int skillId, int level, int route) + { + addRouteForSkill(new SkillHolder(skillId, level), route); + } + + public void addRouteForSkill(SkillHolder holder, int route) + { + _enchantSkillTrees.computeIfAbsent(holder, k -> new HashSet<>()).add(route); + } + + public Set getRouteForSkill(int skillId, int level) + { + return getRouteForSkill(skillId, level, 0); + } + + public Set getRouteForSkill(int skillId, int level, int subLevel) + { + return getRouteForSkill(new SkillHolder(skillId, level, subLevel)); + } + + public Set getRouteForSkill(SkillHolder holder) + { + return _enchantSkillTrees.getOrDefault(holder, Collections.emptySet()); + } + + public boolean isEnchantable(Skill skill) + { + return isEnchantable(new SkillHolder(skill.getId(), skill.getLevel())); + } + + public boolean isEnchantable(SkillHolder holder) + { + return _enchantSkillTrees.containsKey(holder); + } + + public EnchantSkillHolder getEnchantSkillHolder(int level) + { + return _enchantSkillHolders.getOrDefault(level, null); } - /** - * Gets the single instance of EnchantGroupsData. - * @return single instance of EnchantGroupsData - */ public static EnchantSkillGroupsData getInstance() { return SingletonHolder._instance; diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/InitialShortcutData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/InitialShortcutData.java index 8da449bbe7..e582808665 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/InitialShortcutData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/InitialShortcutData.java @@ -225,7 +225,7 @@ public final class InitialShortcutData implements IGameXmlReader final int shortcutId = parseInteger(attrs, "shortcutId"); final int shortcutLevel = parseInteger(attrs, "shortcutLevel", 0); final int characterType = parseInteger(attrs, "characterType", 0); - return new Shortcut(slotId, pageId, shortcutType, shortcutId, shortcutLevel, characterType); + return new Shortcut(slotId, pageId, shortcutType, shortcutId, shortcutLevel, 0, characterType); } /** @@ -305,7 +305,7 @@ public final class InitialShortcutData implements IGameXmlReader } // Register shortcut - final Shortcut newShortcut = new Shortcut(shortcut.getSlot(), shortcut.getPage(), shortcut.getType(), shortcutId, shortcut.getLevel(), shortcut.getCharacterType()); + final Shortcut newShortcut = new Shortcut(shortcut.getSlot(), shortcut.getPage(), shortcut.getType(), shortcutId, shortcut.getLevel(), shortcut.getSubLevel(), shortcut.getCharacterType()); player.sendPacket(new ShortCutRegister(newShortcut)); player.registerShortCut(newShortcut); } @@ -348,7 +348,7 @@ public final class InitialShortcutData implements IGameXmlReader } } // Register shortcut - final Shortcut newShortcut = new Shortcut(shortcut.getSlot(), shortcut.getPage(), shortcut.getType(), shortcutId, shortcut.getLevel(), shortcut.getCharacterType()); + final Shortcut newShortcut = new Shortcut(shortcut.getSlot(), shortcut.getPage(), shortcut.getType(), shortcutId, shortcut.getLevel(), shortcut.getSubLevel(), shortcut.getCharacterType()); player.sendPacket(new ShortCutRegister(newShortcut)); player.registerShortCut(newShortcut); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SkillData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SkillData.java index 950be7d1b0..6810897ef2 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SkillData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SkillData.java @@ -56,9 +56,8 @@ public class SkillData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(SkillData.class.getName()); - private final Map _skills = new HashMap<>(); + private final Map _skills = new HashMap<>(); private final Map _skillsMaxLevel = new HashMap<>(); - private final Set _enchantable = new HashSet<>(); private class NamedParamInfo { @@ -68,9 +67,8 @@ public class SkillData implements IGameXmlReader private final Integer _fromSubLevel; private final Integer _toSubLevel; private final Map> _info; - private final StatsSet _generalInfo; - public NamedParamInfo(String name, Integer fromLevel, Integer toLevel, Integer fromSubLevel, Integer toSubLevel, Map> info, StatsSet generalInfo) + public NamedParamInfo(String name, Integer fromLevel, Integer toLevel, Integer fromSubLevel, Integer toSubLevel, Map> info) { _name = name; _fromLevel = fromLevel; @@ -78,7 +76,6 @@ public class SkillData implements IGameXmlReader _fromSubLevel = fromSubLevel; _toSubLevel = toSubLevel; _info = info; - _generalInfo = generalInfo; } public String getName() @@ -110,11 +107,6 @@ public class SkillData implements IGameXmlReader { return _info; } - - public StatsSet getGeneralInfo() - { - return _generalInfo; - } } protected SkillData() @@ -127,9 +119,9 @@ public class SkillData implements IGameXmlReader * @param skill The L2Skill to be hashed * @return getSkillHashCode(skill.getId(), skill.getLevel()) */ - public static int getSkillHashCode(Skill skill) + public static long getSkillHashCode(Skill skill) { - return getSkillHashCode(skill.getId(), skill.getLevel()); + return getSkillHashCode(skill.getId(), skill.getLevel(), skill.getSubLevel()); } /** @@ -138,14 +130,31 @@ public class SkillData implements IGameXmlReader * @param skillLevel The Skill Level * @return The Skill hash number */ - public static int getSkillHashCode(int skillId, int skillLevel) + public static long getSkillHashCode(int skillId, int skillLevel) { - return (skillId * 1031) + skillLevel; + return getSkillHashCode(skillId, skillLevel, 0); + } + + /** + * Centralized method for easier change of the hashing sys + * @param skillId The Skill Id + * @param skillLevel The Skill Level + * @param subSkillLevel The skill sub level + * @return The Skill hash number + */ + public static long getSkillHashCode(int skillId, int skillLevel, int subSkillLevel) + { + return subSkillLevel > 0 ? ((skillId * 4294967296L) + (subSkillLevel * 65536) + skillLevel) : (skillId * 65536) + skillLevel; } public Skill getSkill(int skillId, int level) { - final Skill result = _skills.get(getSkillHashCode(skillId, level)); + return getSkill(skillId, level, 0); + } + + public Skill getSkill(int skillId, int level, int subLevel) + { + final Skill result = _skills.get(getSkillHashCode(skillId, level, subLevel)); if (result != null) { return result; @@ -156,7 +165,7 @@ public class SkillData implements IGameXmlReader // requested level too high if ((maxLvl > 0) && (level > maxLvl)) { - LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Call to unexisting skill level id: " + skillId + " requested level: " + level + " max level: " + maxLvl, new Throwable()); + LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Call to unexisting skill level id: " + skillId + " requested level: " + level + " max level: " + maxLvl + ".", new Throwable()); return _skills.get(getSkillHashCode(skillId, maxLvl)); } @@ -170,16 +179,6 @@ public class SkillData implements IGameXmlReader return maxLevel != null ? maxLevel : 0; } - /** - * Verifies if the given skill ID correspond to an enchantable skill. - * @param skillId the skill ID - * @return {@code true} if the skill is enchantable, {@code false} otherwise - */ - public boolean isEnchantable(int skillId) - { - return _enchantable.contains(skillId); - } - /** * @param addNoble * @param hasCastle @@ -217,7 +216,6 @@ public class SkillData implements IGameXmlReader { _skills.clear(); _skillsMaxLevel.clear(); - _enchantable.clear(); parseDatapackDirectory("data/stats/skills/", true); LOGGER.info(getClass().getSimpleName() + ": Loaded " + _skills.size() + " Skills."); } @@ -243,12 +241,11 @@ public class SkillData implements IGameXmlReader NamedNodeMap attributes = listNode.getAttributes(); final Map> levels = new HashMap<>(); final Map> skillInfo = new HashMap<>(); - final StatsSet generalSkillInfo = new StatsSet(); + final StatsSet generalSkillInfo = skillInfo.computeIfAbsent(-1, k -> new HashMap<>()).computeIfAbsent(-1, k -> new StatsSet()); parseAttributes(attributes, "", generalSkillInfo); final Map>> variableValues = new HashMap<>(); - final Map variableGeneralValues = new HashMap<>(); final Map> effectParamInfo = new HashMap<>(); final Map> conditionParamInfo = new HashMap<>(); for (Node skillNode = listNode.getFirstChild(); skillNode != null; skillNode = skillNode.getNextSibling()) @@ -260,7 +257,7 @@ public class SkillData implements IGameXmlReader { attributes = skillNode.getAttributes(); final String name = "@" + parseString(attributes, "name"); - variableGeneralValues.put(name, parseValues(skillNode, variableValues.computeIfAbsent(name, k -> new HashMap<>()))); + variableValues.put(name, parseValues(skillNode)); break; } case "#text": @@ -278,7 +275,7 @@ public class SkillData implements IGameXmlReader { case "effect": { - effectParamInfo.computeIfAbsent(effectScope, k -> new LinkedList<>()).add(parseNamedParamInfo(effectsNode, variableValues, variableGeneralValues)); + effectParamInfo.computeIfAbsent(effectScope, k -> new LinkedList<>()).add(parseNamedParamInfo(effectsNode, variableValues)); break; } } @@ -294,7 +291,7 @@ public class SkillData implements IGameXmlReader { case "condition": { - conditionParamInfo.computeIfAbsent(skillConditionScope, k -> new LinkedList<>()).add(parseNamedParamInfo(conditionNode, variableValues, variableGeneralValues)); + conditionParamInfo.computeIfAbsent(skillConditionScope, k -> new LinkedList<>()).add(parseNamedParamInfo(conditionNode, variableValues)); break; } } @@ -302,7 +299,7 @@ public class SkillData implements IGameXmlReader } else { - parseInfo(skillNode, variableValues, variableGeneralValues, skillInfo, generalSkillInfo); + parseInfo(skillNode, variableValues, skillInfo); } break; } @@ -319,8 +316,16 @@ public class SkillData implements IGameXmlReader skillInfo.forEach((level, subLevelMap) -> { + if (level == -1) + { + return; + } subLevelMap.forEach((subLevel, statsSet) -> { + if (subLevel == -1) + { + return; + } levels.computeIfAbsent(level, k -> new HashSet<>()).add(subLevel); }); }); @@ -331,8 +336,16 @@ public class SkillData implements IGameXmlReader { namedParamInfo.getInfo().forEach((level, subLevelMap) -> { + if (level == -1) + { + return; + } subLevelMap.forEach((subLevel, statsSet) -> { + if (subLevel == -1) + { + return; + } levels.computeIfAbsent(level, k -> new HashSet<>()).add(subLevel); }); }); @@ -362,8 +375,9 @@ public class SkillData implements IGameXmlReader { subLevels.forEach(subLevel -> { - final StatsSet statsSet = Optional.ofNullable(skillInfo.getOrDefault(level, Collections.emptyMap()).get(subLevel)).orElseGet(() -> new StatsSet()); - generalSkillInfo.getSet().forEach((k, v) -> statsSet.getSet().putIfAbsent(k, v)); + final StatsSet statsSet = Optional.ofNullable(skillInfo.getOrDefault(level, Collections.emptyMap()).get(subLevel)).orElseGet(StatsSet::new); + skillInfo.getOrDefault(level, Collections.emptyMap()).getOrDefault(-1, StatsSet.EMPTY_STATSET).getSet().forEach(statsSet.getSet()::putIfAbsent); + skillInfo.getOrDefault(-1, Collections.emptyMap()).getOrDefault(-1, StatsSet.EMPTY_STATSET).getSet().forEach(statsSet.getSet()::putIfAbsent); statsSet.set(".level", level); statsSet.set(".subLevel", subLevel); final Skill skill = new Skill(statsSet); @@ -413,9 +427,9 @@ public class SkillData implements IGameXmlReader _skills.put(getSkillHashCode(skill), skill); _skillsMaxLevel.merge(skill.getId(), skill.getLevel(), Integer::max); - if ((skill.getLevel() > 99) && !_enchantable.contains(skill.getId())) + if ((skill.getSubLevel() % 1000) == 1) { - _enchantable.add(skill.getId()); + EnchantSkillGroupsData.getInstance().addRouteForSkill(skill.getId(), skill.getLevel(), skill.getSubLevel()); } }); }); @@ -435,8 +449,9 @@ public class SkillData implements IGameXmlReader { if (((namedParamInfo.getFromSubLevel() == null) && (namedParamInfo.getToSubLevel() == null)) || ((namedParamInfo.getFromSubLevel() <= subLevel) && (namedParamInfo.getToSubLevel() >= subLevel))) { - final StatsSet params = Optional.ofNullable(namedParamInfo.getInfo().getOrDefault(level, Collections.emptyMap()).get(subLevel)).orElseGet(() -> new StatsSet()); - namedParamInfo.getGeneralInfo().getSet().forEach((k, v) -> params.getSet().putIfAbsent(k, v)); + final StatsSet params = Optional.ofNullable(namedParamInfo.getInfo().getOrDefault(level, Collections.emptyMap()).get(subLevel)).orElseGet(StatsSet::new); + namedParamInfo.getInfo().getOrDefault(level, Collections.emptyMap()).getOrDefault(-1, StatsSet.EMPTY_STATSET).getSet().forEach(params.getSet()::putIfAbsent); + namedParamInfo.getInfo().getOrDefault(-1, Collections.emptyMap()).getOrDefault(-1, StatsSet.EMPTY_STATSET).getSet().forEach(params.getSet()::putIfAbsent); params.set(".name", namedParamInfo.getName()); consumer.accept(scope, params); } @@ -445,58 +460,46 @@ public class SkillData implements IGameXmlReader }); } - private NamedParamInfo parseNamedParamInfo(Node node, Map>> variableValues, Map variableGeneralValues) + private NamedParamInfo parseNamedParamInfo(Node node, Map>> variableValues) { final NamedNodeMap attributes = node.getAttributes(); final String name = parseString(attributes, "name"); final Integer level = parseInteger(attributes, "level"); final Integer fromLevel = parseInteger(attributes, "fromLevel", level); final Integer toLevel = parseInteger(attributes, "toLevel", level); - final Integer subLevel = parseInteger(attributes, "subLevel", 0); + final Integer subLevel = parseInteger(attributes, "subLevel"); final Integer fromSubLevel = parseInteger(attributes, "fromSubLevel", subLevel); final Integer toSubLevel = parseInteger(attributes, "toSubLevel", subLevel); final Map> info = new HashMap<>(); - final StatsSet generalInfo = new StatsSet(); for (node = node.getFirstChild(); node != null; node = node.getNextSibling()) { if (!node.getNodeName().equals("#text")) { - parseInfo(node, variableValues, variableGeneralValues, info, generalInfo); + parseInfo(node, variableValues, info); } } - return new NamedParamInfo(name, fromLevel, toLevel, fromSubLevel, toSubLevel, info, generalInfo); + return new NamedParamInfo(name, fromLevel, toLevel, fromSubLevel, toSubLevel, info); } - private void parseInfo(Node node, Map>> variableValues, Map variableGeneralValues, Map> info, StatsSet generalInfo) + private void parseInfo(Node node, Map>> variableValues, Map> info) { - Map> values = new HashMap<>(); - final Object generalValue = parseValues(node, values); + Map> values = parseValues(node); + final Object generalValue = values.getOrDefault(-1, Collections.emptyMap()).get(-1); if (generalValue != null) { final String stringGeneralValue = String.valueOf(generalValue); if (stringGeneralValue.startsWith("@")) { - final Map> tableValue = variableValues.get(stringGeneralValue); - if (tableValue != null) + Map> variableValue = variableValues.get(stringGeneralValue); + if (variableValue != null) { - if (!tableValue.isEmpty()) - { - values = tableValue; - } - else - { - generalInfo.set(node.getNodeName(), variableGeneralValues.get(stringGeneralValue)); - } + values = variableValue; } else { throw new IllegalArgumentException("undefined variable " + stringGeneralValue); } } - else - { - generalInfo.set(node.getNodeName(), generalValue); - } } values.forEach((level, subLevelMap) -> @@ -508,60 +511,62 @@ public class SkillData implements IGameXmlReader }); } - private Object parseValues(Node node, Map> values) + private Map> parseValues(Node node) { + final Map> values = new HashMap<>(); Object parsedValue = parseValue(node, true, false, Collections.emptyMap()); if (parsedValue != null) { - return parsedValue; + values.computeIfAbsent(-1, k -> new HashMap<>()).put(-1, parsedValue); } - - final List list = null; - for (node = node.getFirstChild(); node != null; node = node.getNextSibling()) + else { - if (node.getNodeName().equalsIgnoreCase("value")) + for (node = node.getFirstChild(); node != null; node = node.getNextSibling()) { - final NamedNodeMap attributes = node.getAttributes(); - final Integer level = parseInteger(attributes, "level"); - if (level != null) + if (node.getNodeName().equalsIgnoreCase("value")) { - parsedValue = parseValue(node, false, false, Collections.emptyMap()); - if (parsedValue != null) + final NamedNodeMap attributes = node.getAttributes(); + final Integer level = parseInteger(attributes, "level"); + if (level != null) { - final Integer subLevel = parseInteger(attributes, "subLevel", 0); - values.computeIfAbsent(level, k -> new HashMap<>()).put(subLevel, parsedValue); - } - } - else - { - final int fromLevel = parseInteger(attributes, "fromLevel"); - final int toLevel = parseInteger(attributes, "toLevel"); - final int fromSubLevel = parseInteger(attributes, "fromSubLevel", 0); - final int toSubLevel = parseInteger(attributes, "toSubLevel", 0); - for (int i = fromLevel; i <= toLevel; i++) - { - for (int j = fromSubLevel; j <= toSubLevel; j++) + parsedValue = parseValue(node, false, false, Collections.emptyMap()); + if (parsedValue != null) { - final Map subValues = values.computeIfAbsent(i, k -> new HashMap<>()); - final Map variables = new HashMap<>(); - variables.put("index", (i - fromLevel) + 1d); - variables.put("subIndex", (j - fromSubLevel) + 1d); - final Object base = values.getOrDefault(i, Collections.emptyMap()).get(0); - if ((base != null) && !(base instanceof StatsSet)) + final Integer subLevel = parseInteger(attributes, "subLevel", -1); + values.computeIfAbsent(level, k -> new HashMap<>()).put(subLevel, parsedValue); + } + } + else + { + final int fromLevel = parseInteger(attributes, "fromLevel"); + final int toLevel = parseInteger(attributes, "toLevel"); + final int fromSubLevel = parseInteger(attributes, "fromSubLevel", -1); + final int toSubLevel = parseInteger(attributes, "toSubLevel", -1); + for (int i = fromLevel; i <= toLevel; i++) + { + for (int j = fromSubLevel; j <= toSubLevel; j++) { - variables.put("base", Double.parseDouble(String.valueOf(base))); - } - parsedValue = parseValue(node, false, false, variables); - if (parsedValue != null) - { - subValues.put(j, parsedValue); + Map subValues = values.computeIfAbsent(i, k -> new HashMap<>()); + Map variables = new HashMap<>(); + variables.put("index", (i - fromLevel) + 1d); + variables.put("subIndex", (j - fromSubLevel) + 1d); + Object base = values.getOrDefault(i, Collections.emptyMap()).get(-1); + if ((base != null) && !(base instanceof StatsSet)) + { + variables.put("base", Double.parseDouble(String.valueOf(base))); + } + parsedValue = parseValue(node, false, false, variables); + if (parsedValue != null) + { + subValues.put(j, parsedValue); + } } } } } } } - return list; + return values; } Object parseValue(Node node, boolean blockValue, boolean parseAttributes, Map variables) diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java index 0f5ed59269..a2d70a0a11 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SkillTreesData.java @@ -80,39 +80,39 @@ public final class SkillTreesData implements IGameXmlReader private static final Logger LOGGER = Logger.getLogger(SkillTreesData.class.getName()); // ClassId, Map of Skill Hash Code, L2SkillLearn - private static final Map> _classSkillTrees = new HashMap<>(); - private static final Map> _transferSkillTrees = new HashMap<>(); - private static final Map> _raceSkillTree = new HashMap<>(); - private static final Map> _revelationSkillTree = new HashMap<>(); + private static final Map> _classSkillTrees = new HashMap<>(); + private static final Map> _transferSkillTrees = new HashMap<>(); + private static final Map> _raceSkillTree = new HashMap<>(); + private static final Map> _revelationSkillTree = new HashMap<>(); private static final Map> _awakeningSaveSkillTree = new HashMap<>(); // Skill Hash Code, L2SkillLearn - private static final Map _collectSkillTree = new HashMap<>(); - private static final Map _fishingSkillTree = new HashMap<>(); - private static final Map _pledgeSkillTree = new HashMap<>(); - private static final Map _subClassSkillTree = new HashMap<>(); - private static final Map _subPledgeSkillTree = new HashMap<>(); - private static final Map _transformSkillTree = new HashMap<>(); - private static final Map _commonSkillTree = new HashMap<>(); - private static final Map _subClassChangeSkillTree = new HashMap<>(); - private static final Map _abilitySkillTree = new HashMap<>(); - private static final Map _alchemySkillTree = new HashMap<>(); - private static final Map _dualClassSkillTree = new HashMap<>(); + private static final Map _collectSkillTree = new HashMap<>(); + private static final Map _fishingSkillTree = new HashMap<>(); + private static final Map _pledgeSkillTree = new HashMap<>(); + private static final Map _subClassSkillTree = new HashMap<>(); + private static final Map _subPledgeSkillTree = new HashMap<>(); + private static final Map _transformSkillTree = new HashMap<>(); + private static final Map _commonSkillTree = new HashMap<>(); + private static final Map _subClassChangeSkillTree = new HashMap<>(); + private static final Map _abilitySkillTree = new HashMap<>(); + private static final Map _alchemySkillTree = new HashMap<>(); + private static final Map _dualClassSkillTree = new HashMap<>(); // Other skill trees - private static final Map _nobleSkillTree = new HashMap<>(); - private static final Map _heroSkillTree = new HashMap<>(); - private static final Map _gameMasterSkillTree = new HashMap<>(); - private static final Map _gameMasterAuraSkillTree = new HashMap<>(); + private static final Map _nobleSkillTree = new HashMap<>(); + private static final Map _heroSkillTree = new HashMap<>(); + private static final Map _gameMasterSkillTree = new HashMap<>(); + private static final Map _gameMasterAuraSkillTree = new HashMap<>(); // Remove skill tree private static final Map> _removeSkillCache = new HashMap<>(); // Checker, sorted arrays of hash codes - private Map _skillsByClassIdHashCodes; // Occupation skills - private Map _skillsByRaceHashCodes; // Race-specific Transformations - private int[] _allSkillsHashCodes; // Fishing, Collection, Transformations, Common Skills. + private Map _skillsByClassIdHashCodes; // Occupation skills + private Map _skillsByRaceHashCodes; // Race-specific Transformations + private long[] _allSkillsHashCodes; // Fishing, Collection, Transformations, Common Skills. private boolean _loading = true; - /** Parent class IDs are read from XML and stored in this map, to allow easy customization. */ + /** Parent class Ids are read from XML and stored in this map, to allow easy customization. */ private static final Map _parentClassMap = new HashMap<>(); /** @@ -182,10 +182,10 @@ public final class SkillTreesData implements IGameXmlReader { if ("skillTree".equalsIgnoreCase(d.getNodeName())) { - final Map classSkillTree = new HashMap<>(); - final Map transferSkillTree = new HashMap<>(); - final Map raceSkillTree = new HashMap<>(); - final Map revelationSkillTree = new HashMap<>(); + final Map classSkillTree = new HashMap<>(); + final Map transferSkillTree = new HashMap<>(); + final Map raceSkillTree = new HashMap<>(); + final Map revelationSkillTree = new HashMap<>(); type = d.getAttributes().getNamedItem("type").getNodeValue(); attr = d.getAttributes().getNamedItem("classId"); @@ -274,7 +274,7 @@ public final class SkillTreesData implements IGameXmlReader } } - final int skillHashCode = SkillData.getSkillHashCode(skillLearn.getSkillId(), skillLearn.getSkillLevel()); + final long skillHashCode = SkillData.getSkillHashCode(skillLearn.getSkillId(), skillLearn.getSkillLevel()); switch (type) { case "classSkillTree": @@ -393,35 +393,38 @@ public final class SkillTreesData implements IGameXmlReader } else if (type.equals("classSkillTree") && (cId > -1)) { - if (!_classSkillTrees.containsKey(classId)) + final Map classSkillTrees = _classSkillTrees.get(classId); + if (classSkillTrees == null) { _classSkillTrees.put(classId, classSkillTree); } else { - _classSkillTrees.get(classId).putAll(classSkillTree); + classSkillTrees.putAll(classSkillTree); } } else if (type.equals("raceSkillTree") && (race != null)) { - if (!_raceSkillTree.containsKey(race)) + final Map raceSkillTrees = _raceSkillTree.get(race); + if (raceSkillTrees == null) { _raceSkillTree.put(race, raceSkillTree); } else { - _raceSkillTree.get(race).putAll(raceSkillTree); + raceSkillTrees.putAll(raceSkillTree); } } else if (type.equals("revelationSkillTree") && (subType != null)) { - if (!_revelationSkillTree.containsKey(subType)) + final Map revelationSkillTrees = _revelationSkillTree.get(race); + if (revelationSkillTrees == null) { _revelationSkillTree.put(subType, revelationSkillTree); } else { - _revelationSkillTree.get(subType).putAll(revelationSkillTree); + revelationSkillTrees.putAll(revelationSkillTree); } } } @@ -437,9 +440,9 @@ public final class SkillTreesData implements IGameXmlReader * @param classId the class skill tree Id * @return the complete Class Skill Tree including skill trees from parent class for a given {@code classId} */ - public Map getCompleteClassSkillTree(ClassId classId) + public Map getCompleteClassSkillTree(ClassId classId) { - final Map skillTree = new HashMap<>(); + final Map skillTree = new HashMap<>(); // Add all skills that belong to all classes. skillTree.putAll(_commonSkillTree); while ((classId != null) && (_classSkillTrees.get(classId) != null)) @@ -456,7 +459,7 @@ public final class SkillTreesData implements IGameXmlReader * @param classId the transfer skill tree Id * @return the complete Transfer Skill Tree for a given {@code classId} */ - public Map getTransferSkillTree(ClassId classId) + public Map getTransferSkillTree(ClassId classId) { return _transferSkillTrees.get(classId); } @@ -475,7 +478,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the common skill tree. * @return the complete Common Skill Tree */ - public Map getCommonSkillTree() + public Map getCommonSkillTree() { return _commonSkillTree; } @@ -484,7 +487,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the collect skill tree. * @return the complete Collect Skill Tree */ - public Map getCollectSkillTree() + public Map getCollectSkillTree() { return _collectSkillTree; } @@ -493,7 +496,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the fishing skill tree. * @return the complete Fishing Skill Tree */ - public Map getFishingSkillTree() + public Map getFishingSkillTree() { return _fishingSkillTree; } @@ -502,7 +505,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the pledge skill tree. * @return the complete Pledge Skill Tree */ - public Map getPledgeSkillTree() + public Map getPledgeSkillTree() { return _pledgeSkillTree; } @@ -511,7 +514,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the sub class skill tree. * @return the complete Sub-Class Skill Tree */ - public Map getSubClassSkillTree() + public Map getSubClassSkillTree() { return _subClassSkillTree; } @@ -520,7 +523,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the sub class change skill tree. * @return the complete Common Skill Tree */ - public Map getSubClassChangeSkillTree() + public Map getSubClassChangeSkillTree() { return _subClassChangeSkillTree; } @@ -529,7 +532,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the sub pledge skill tree. * @return the complete Sub-Pledge Skill Tree */ - public Map getSubPledgeSkillTree() + public Map getSubPledgeSkillTree() { return _subPledgeSkillTree; } @@ -538,7 +541,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the transform skill tree. * @return the complete Transform Skill Tree */ - public Map getTransformSkillTree() + public Map getTransformSkillTree() { return _transformSkillTree; } @@ -547,7 +550,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the ability skill tree. * @return the complete Ability Skill Tree */ - public Map getAbilitySkillTree() + public Map getAbilitySkillTree() { return _abilitySkillTree; } @@ -556,7 +559,7 @@ public final class SkillTreesData implements IGameXmlReader * Gets the ability skill tree. * @return the complete Ability Skill Tree */ - public Map getAlchemySkillTree() + public Map getAlchemySkillTree() { return _alchemySkillTree; } @@ -565,11 +568,11 @@ public final class SkillTreesData implements IGameXmlReader * Gets the noble skill tree. * @return the complete Noble Skill Tree */ - public Map getNobleSkillTree() + public Map getNobleSkillTree() { - final Map tree = new HashMap<>(); + final Map tree = new HashMap<>(); final SkillData st = SkillData.getInstance(); - for (Entry e : _nobleSkillTree.entrySet()) + for (Entry e : _nobleSkillTree.entrySet()) { tree.put(e.getKey(), st.getSkill(e.getValue().getSkillId(), e.getValue().getSkillLevel())); } @@ -580,11 +583,11 @@ public final class SkillTreesData implements IGameXmlReader * Gets the hero skill tree. * @return the complete Hero Skill Tree */ - public Map getHeroSkillTree() + public Map getHeroSkillTree() { - final Map tree = new HashMap<>(); + final Map tree = new HashMap<>(); final SkillData st = SkillData.getInstance(); - for (Entry e : _heroSkillTree.entrySet()) + for (Entry e : _heroSkillTree.entrySet()) { tree.put(e.getKey(), st.getSkill(e.getValue().getSkillId(), e.getValue().getSkillLevel())); } @@ -595,11 +598,11 @@ public final class SkillTreesData implements IGameXmlReader * Gets the Game Master skill tree. * @return the complete Game Master Skill Tree */ - public Map getGMSkillTree() + public Map getGMSkillTree() { - final Map tree = new HashMap<>(); + final Map tree = new HashMap<>(); final SkillData st = SkillData.getInstance(); - for (Entry e : _gameMasterSkillTree.entrySet()) + for (Entry e : _gameMasterSkillTree.entrySet()) { tree.put(e.getKey(), st.getSkill(e.getValue().getSkillId(), e.getValue().getSkillLevel())); } @@ -610,11 +613,11 @@ public final class SkillTreesData implements IGameXmlReader * Gets the Game Master Aura skill tree. * @return the complete Game Master Aura Skill Tree */ - public Map getGMAuraSkillTree() + public Map getGMAuraSkillTree() { - final Map tree = new HashMap<>(); + final Map tree = new HashMap<>(); final SkillData st = SkillData.getInstance(); - for (Entry e : _gameMasterAuraSkillTree.entrySet()) + for (Entry e : _gameMasterAuraSkillTree.entrySet()) { tree.put(e.getKey(), st.getSkill(e.getValue().getSkillId(), e.getValue().getSkillLevel())); } @@ -628,7 +631,7 @@ public final class SkillTreesData implements IGameXmlReader */ public boolean hasAvailableSkills(L2PcInstance player, ClassId classId) { - final Map skills = getCompleteClassSkillTree(classId); + final Map skills = getCompleteClassSkillTree(classId); for (L2SkillLearn skill : skills.values()) { if ((skill.getSkillId() == CommonSkill.DIVINE_INSPIRATION.getId()) || skill.isAutoGet() || skill.isLearnedByFS() || (skill.getGetLevel() > player.getLevel())) @@ -673,7 +676,7 @@ public final class SkillTreesData implements IGameXmlReader private List getAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet, ISkillsHolder holder) { final List result = new LinkedList<>(); - final Map skills = getCompleteClassSkillTree(classId); + final Map skills = getCompleteClassSkillTree(classId); if (skills.isEmpty()) { @@ -684,7 +687,7 @@ public final class SkillTreesData implements IGameXmlReader final boolean isAwaken = player.isInCategory(CategoryType.AWAKEN_GROUP) && (player.getRace() != Race.ERTHEIA); - for (Entry entry : skills.entrySet()) + for (Entry entry : skills.entrySet()) { final L2SkillLearn skill = entry.getValue(); @@ -787,7 +790,7 @@ public final class SkillTreesData implements IGameXmlReader public List getAvailableAutoGetSkills(L2PcInstance player) { final List result = new ArrayList<>(); - final Map skills = getCompleteClassSkillTree(player.getClassId()); + final Map skills = getCompleteClassSkillTree(player.getClassId()); if (skills.isEmpty()) { // The Skill Tree for this class is undefined, so we return an empty list. @@ -818,7 +821,7 @@ public final class SkillTreesData implements IGameXmlReader } final int maxLvl = SkillData.getInstance().getMaxLevel(skill.getSkillId()); - final int hashCode = SkillData.getSkillHashCode(skill.getSkillId(), maxLvl); + final long hashCode = SkillData.getSkillHashCode(skill.getSkillId(), maxLvl); if (skill.isAutoGet() && (player.getLevel() >= skill.getGetLevel())) { @@ -884,7 +887,7 @@ public final class SkillTreesData implements IGameXmlReader public List getAvailableRevelationSkills(L2PcInstance player, SubclassType type) { final List result = new ArrayList<>(); - final Map revelationSkills = _revelationSkillTree.get(type); + final Map revelationSkills = _revelationSkillTree.get(type); for (L2SkillLearn skill : revelationSkills.values()) { @@ -1382,7 +1385,7 @@ public final class SkillTreesData implements IGameXmlReader * @param skillTree the skill tree to search the minimum get level * @return the minimum level for a new skill for a given {@code player} and {@code skillTree} */ - public int getMinLevelForNewSkill(L2PcInstance player, Map skillTree) + public int getMinLevelForNewSkill(L2PcInstance player, Map skillTree) { int minLevel = 0; if (skillTree.isEmpty()) @@ -1407,7 +1410,7 @@ public final class SkillTreesData implements IGameXmlReader public List getNextAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet) { - final Map completeClassSkillTree = getCompleteClassSkillTree(classId); + final Map completeClassSkillTree = getCompleteClassSkillTree(classId); final List result = new LinkedList<>(); if (completeClassSkillTree.isEmpty()) { @@ -1448,7 +1451,7 @@ public final class SkillTreesData implements IGameXmlReader for (Skill skill : player.getAllSkills()) { final int maxLvl = SkillData.getInstance().getMaxLevel(skill.getId()); - final int hashCode = SkillData.getSkillHashCode(skill.getId(), maxLvl); + final long hashCode = SkillData.getSkillHashCode(skill.getId(), maxLvl); if (!isCurrentClassSkillNoParent(player.getClassId(), hashCode) && !isRemoveSkill(player.getClassId(), skill.getId()) && !isAwakenSaveSkill(player.getClassId(), skill.getId())) { @@ -1481,7 +1484,7 @@ public final class SkillTreesData implements IGameXmlReader */ public boolean isGMSkill(int skillId, int skillLevel) { - final int hashCode = SkillData.getSkillHashCode(skillId, skillLevel); + final long hashCode = SkillData.getSkillHashCode(skillId, skillLevel); return _gameMasterSkillTree.containsKey(hashCode) || _gameMasterAuraSkillTree.containsKey(hashCode); } @@ -1493,7 +1496,7 @@ public final class SkillTreesData implements IGameXmlReader */ public boolean isClanSkill(int skillId, int skillLevel) { - final int hashCode = SkillData.getSkillHashCode(skillId, skillLevel); + final long hashCode = SkillData.getSkillHashCode(skillId, skillLevel); return _pledgeSkillTree.containsKey(hashCode) || _subPledgeSkillTree.containsKey(hashCode); } @@ -1513,7 +1516,7 @@ public final class SkillTreesData implements IGameXmlReader return _removeSkillCache.getOrDefault(classId, Collections.emptySet()).contains(skillId); } - public boolean isCurrentClassSkillNoParent(ClassId classId, Integer hashCode) + public boolean isCurrentClassSkillNoParent(ClassId classId, Long hashCode) { return _classSkillTrees.getOrDefault(classId, Collections.emptyMap()).containsKey(hashCode); } @@ -1544,18 +1547,18 @@ public final class SkillTreesData implements IGameXmlReader private void generateCheckArrays() { int i; - int[] array; + long[] array; // Class specific skills: - Map tempMap; + Map tempMap; final Set keySet = _classSkillTrees.keySet(); _skillsByClassIdHashCodes = new HashMap<>(keySet.size()); for (ClassId cls : keySet) { i = 0; tempMap = getCompleteClassSkillTree(cls); - array = new int[tempMap.size()]; - for (int h : tempMap.keySet()) + array = new long[tempMap.size()]; + for (long h : tempMap.keySet()) { array[i++] = h; } @@ -1565,7 +1568,7 @@ public final class SkillTreesData implements IGameXmlReader } // Race specific skills from Fishing and Transformation skill trees. - final List list = new ArrayList<>(); + final List list = new ArrayList<>(); _skillsByRaceHashCodes = new HashMap<>(Race.values().length); for (Race r : Race.values()) { @@ -1586,8 +1589,8 @@ public final class SkillTreesData implements IGameXmlReader } i = 0; - array = new int[list.size()]; - for (int s : list) + array = new long[list.size()]; + for (long s : list) { array[i++] = s; } @@ -1636,9 +1639,9 @@ public final class SkillTreesData implements IGameXmlReader list.add(SkillData.getSkillHashCode(s.getSkillId(), s.getSkillLevel())); } - _allSkillsHashCodes = new int[list.size()]; + _allSkillsHashCodes = new long[list.size()]; int j = 0; - for (int hashcode : list) + for (long hashcode : list) { _allSkillsHashCodes[j++] = hashcode; } @@ -1671,7 +1674,7 @@ public final class SkillTreesData implements IGameXmlReader } final int maxLvl = SkillData.getInstance().getMaxLevel(skill.getId()); - final int hashCode = SkillData.getSkillHashCode(skill.getId(), Math.min(skill.getLevel(), maxLvl)); + final long hashCode = SkillData.getSkillHashCode(skill.getId(), Math.min(skill.getLevel(), maxLvl)); if (Arrays.binarySearch(_skillsByClassIdHashCodes.get(player.getClassId().ordinal()), hashCode) >= 0) { @@ -1708,25 +1711,25 @@ public final class SkillTreesData implements IGameXmlReader private void report() { int classSkillTreeCount = 0; - for (Map classSkillTree : _classSkillTrees.values()) + for (Map classSkillTree : _classSkillTrees.values()) { classSkillTreeCount += classSkillTree.size(); } int transferSkillTreeCount = 0; - for (Map trasferSkillTree : _transferSkillTrees.values()) + for (Map trasferSkillTree : _transferSkillTrees.values()) { transferSkillTreeCount += trasferSkillTree.size(); } int raceSkillTreeCount = 0; - for (Map raceSkillTree : _raceSkillTree.values()) + for (Map raceSkillTree : _raceSkillTree.values()) { raceSkillTreeCount += raceSkillTree.size(); } int revelationSkillTreeCount = 0; - for (Map revelationSkillTree : _revelationSkillTree.values()) + for (Map revelationSkillTree : _revelationSkillTree.values()) { revelationSkillTreeCount += revelationSkillTree.size(); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SpawnsData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SpawnsData.java index 6fe8873c14..2ff4c9322d 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SpawnsData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/data/xml/impl/SpawnsData.java @@ -117,7 +117,17 @@ public class SpawnsData implements IGameXmlReader return _spawns; } - public List getSpawns(Predicate condition) + public List getSpawns(Predicate condition) + { + return _spawns.stream().filter(condition).collect(Collectors.toList()); + } + + public List getGroupsByName(String groupName) + { + return _spawns.stream().filter(template -> (template.getName() != null) && groupName.equalsIgnoreCase(template.getName())).flatMap(template -> template.getGroups().stream()).collect(Collectors.toList()); + } + + public List getNpcSpawns(Predicate condition) { return _spawns.stream().flatMap(template -> template.getGroups().stream()).flatMap(group -> group.getSpawns().stream()).filter(condition).collect(Collectors.toList()); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/engines/DocumentEngine.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/engines/DocumentEngine.java index 9312a1ba47..2241f1eed6 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/engines/DocumentEngine.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/engines/DocumentEngine.java @@ -17,18 +17,14 @@ package com.l2jmobius.gameserver.engines; import java.io.File; -import java.util.Collections; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.logging.Logger; import com.l2jmobius.Config; import com.l2jmobius.commons.util.file.filter.XMLFilter; -import com.l2jmobius.gameserver.data.xml.impl.SkillData; import com.l2jmobius.gameserver.engines.items.DocumentItem; import com.l2jmobius.gameserver.model.items.L2Item; -import com.l2jmobius.gameserver.model.skills.Skill; /** * @author mkizub @@ -38,7 +34,6 @@ public class DocumentEngine private static final Logger LOGGER = Logger.getLogger(DocumentEngine.class.getName()); private final List _itemFiles = new LinkedList<>(); - private final List _skillFiles = new LinkedList<>(); public static DocumentEngine getInstance() { @@ -52,11 +47,6 @@ public class DocumentEngine { hashFiles("data/stats/items/custom", _itemFiles); } - hashFiles("data/stats/skills", _skillFiles); - if (Config.CUSTOM_SKILLS_LOAD) - { - hashFiles("data/stats/skills/custom", _skillFiles); - } } private void hashFiles(String dirname, List hash) @@ -74,35 +64,6 @@ public class DocumentEngine } } - public List loadSkills(File file) - { - if (file == null) - { - LOGGER.warning("Skill file not found."); - return null; - } - return Collections.emptyList(); - } - - public void loadAllSkills(Map allSkills) - { - int count = 0; - for (File file : _skillFiles) - { - final List s = loadSkills(file); - if (s == null) - { - continue; - } - for (Skill skill : s) - { - allSkills.put(SkillData.getSkillHashCode(skill), skill); - count++; - } - } - LOGGER.info("Loaded " + count + " Skill templates from XML files."); - } - /** * Return created items * @return List of {@link L2Item} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/NextActionType.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/NextActionType.java new file mode 100644 index 0000000000..684170a4c6 --- /dev/null +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/NextActionType.java @@ -0,0 +1,27 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.enums; + +/** + * @author Sdw + */ +public enum NextActionType +{ + NONE, + ATTACK, + CAST +} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/SkillEnchantType.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/SkillEnchantType.java new file mode 100644 index 0000000000..048cb4c63c --- /dev/null +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/enums/SkillEnchantType.java @@ -0,0 +1,29 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.enums; + +/** + * @author Sdw + */ +public enum SkillEnchantType +{ + NORMAL, + BLESSED, + UNTRAIN, + CHANGE, + IMMORTAL +} \ No newline at end of file diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/instancemanager/ClanEntryManager.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/instancemanager/ClanEntryManager.java index 4052e295bb..2532bac910 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/instancemanager/ClanEntryManager.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/instancemanager/ClanEntryManager.java @@ -60,8 +60,8 @@ public class ClanEntryManager private static final String INSERT_WAITING_LIST = "INSERT INTO pledge_waiting_list VALUES (?, ?)"; private static final String DELETE_WAITING_LIST = "DELETE FROM pledge_waiting_list WHERE char_id = ?"; - private static final String INSERT_CLAN_RECRUIT = "INSERT INTO pledge_recruit VALUES (?, ?, ?, ?)"; - private static final String UPDATE_CLAN_RECRUIT = "UPDATE pledge_recruit SET karma = ?, information = ?, detailed_information = ? WHERE clan_id = ?"; + private static final String INSERT_CLAN_RECRUIT = "INSERT INTO pledge_recruit VALUES (?, ?, ?, ?, ?, ?)"; + private static final String UPDATE_CLAN_RECRUIT = "UPDATE pledge_recruit SET karma = ?, information = ?, detailed_information = ?, application_type = ?, recruit_type = ? WHERE clan_id = ?"; private static final String DELETE_CLAN_RECRUIT = "DELETE FROM pledge_recruit WHERE clan_id = ?"; //@formatter:off @@ -97,7 +97,7 @@ public class ClanEntryManager { while (rs.next()) { - _clanList.put(rs.getInt("clan_id"), new PledgeRecruitInfo(rs.getInt("clan_id"), rs.getInt("karma"), rs.getString("information"), rs.getString("detailed_information"))); + _clanList.put(rs.getInt("clan_id"), new PledgeRecruitInfo(rs.getInt("clan_id"), rs.getInt("karma"), rs.getString("information"), rs.getString("detailed_information"), rs.getInt("application_type"), rs.getInt("recruit_type"))); } LOGGER.info(getClass().getSimpleName() + ": Loaded: " + _clanList.size() + " clan entry"); } @@ -265,6 +265,8 @@ public class ClanEntryManager statement.setInt(2, info.getKarma()); statement.setString(3, info.getInformation()); statement.setString(4, info.getDetailedInformation()); + statement.setInt(5, info.getApplicationType()); + statement.setInt(6, info.getRecruitType()); statement.executeUpdate(); } catch (Exception e) @@ -286,7 +288,9 @@ public class ClanEntryManager statement.setInt(1, info.getKarma()); statement.setString(2, info.getInformation()); statement.setString(3, info.getDetailedInformation()); - statement.setInt(4, info.getClanId()); + statement.setInt(4, info.getApplicationType()); + statement.setInt(5, info.getRecruitType()); + statement.setInt(6, info.getClanId()); statement.executeUpdate(); } catch (Exception e) diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/instancemanager/DBSpawnManager.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/instancemanager/DBSpawnManager.java index 536525d00a..ed96d6cd39 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/instancemanager/DBSpawnManager.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/instancemanager/DBSpawnManager.java @@ -101,7 +101,7 @@ public class DBSpawnManager spawn.setAmount(1); spawn.setHeading(rset.getInt("heading")); - final List spawns = SpawnsData.getInstance().getSpawns(npc -> (npc.getId() == template.getId()) && npc.hasDBSave()); + final List spawns = SpawnsData.getInstance().getNpcSpawns(npc -> (npc.getId() == template.getId()) && npc.hasDBSave()); if (spawns.isEmpty()) { LOGGER.warning(getClass().getSimpleName() + ": Couldn't find spawn declaration for npc: " + template.getId() + " - " + template.getName()); @@ -383,28 +383,15 @@ public class DBSpawnManager } final int npcId = spawn.getId(); - if (!_spawns.containsKey(npcId)) - { - return; - } - SpawnTable.getInstance().deleteSpawn(spawn, false); _spawns.remove(npcId); + _npcs.remove(npcId); + _storedInfo.remove(npcId); - if (_npcs.containsKey(npcId)) + final ScheduledFuture task = _schedules.remove(npcId); + if (task != null) { - _npcs.remove(npcId); - } - - if (_schedules.containsKey(npcId)) - { - final ScheduledFuture f = _schedules.remove(npcId); - f.cancel(true); - } - - if (_storedInfo.containsKey(npcId)) - { - _storedInfo.remove(npcId); + task.cancel(true); } if (updateDb) @@ -421,6 +408,8 @@ public class DBSpawnManager LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Could not remove npc #" + npcId + " from DB: ", e); } } + + SpawnTable.getInstance().deleteSpawn(spawn, false); } /** diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/CharEffectList.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/CharEffectList.java index adf29215f6..c0384e0b29 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/CharEffectList.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/CharEffectList.java @@ -432,7 +432,7 @@ public final class CharEffectList } else { - _owner.sendPacket(new ShortBuffStatusUpdate(info.getSkill().getId(), info.getSkill().getLevel(), info.getTime())); + _owner.sendPacket(new ShortBuffStatusUpdate(info.getSkill().getId(), info.getSkill().getLevel(), info.getSkill().getSubLevel(), info.getTime())); } } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/ItemInfo.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/ItemInfo.java index 28a9d6e852..e8e8b21cd0 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/ItemInfo.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/ItemInfo.java @@ -18,6 +18,7 @@ package com.l2jmobius.gameserver.model; import java.util.Collection; import java.util.Collections; +import java.util.Objects; import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.model.buylist.Product; @@ -89,10 +90,7 @@ public class ItemInfo */ public ItemInfo(L2ItemInstance item) { - if (item == null) - { - return; - } + Objects.requireNonNull(item); // Get the Identifier of the L2ItemInstance _objectId = item.getObjectId(); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2EnchantSkillGroup.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2EnchantSkillGroup.java deleted file mode 100644 index 15cbf7f3de..0000000000 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2EnchantSkillGroup.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model; - -import java.util.ArrayList; -import java.util.List; - -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; - -public final class L2EnchantSkillGroup -{ - private final int _id; - private final List _enchantDetails = new ArrayList<>(); - - public L2EnchantSkillGroup(int id) - { - _id = id; - } - - public void addEnchantDetail(EnchantSkillHolder detail) - { - _enchantDetails.add(detail); - } - - public int getId() - { - return _id; - } - - public List getEnchantGroupDetails() - { - return _enchantDetails; - } - - public static class EnchantSkillHolder - { - private final int _level; - private final int _adenaCost; - private final int _expCost; - private final int _spCost; - private final byte[] _rate; - - public EnchantSkillHolder(StatsSet set) - { - _level = set.getInt("level"); - _adenaCost = set.getInt("adena", 0); - _expCost = set.getInt("exp", 0); - _spCost = set.getInt("sp", 0); - _rate = new byte[24]; - for (int i = 0; i < 24; i++) - { - _rate[i] = set.getByte("chance" + (76 + i), (byte) 0); - } - } - - /** - * @return Returns the level. - */ - public int getLevel() - { - return _level; - } - - /** - * @return Returns the spCost. - */ - public int getSpCost() - { - return _spCost; - } - - public int getExpCost() - { - return _expCost; - } - - public int getAdenaCost() - { - return _adenaCost; - } - - public byte getRate(L2PcInstance ply) - { - if (ply.getLevel() < 76) - { - return 0; - } - return _rate[ply.getLevel() - 76]; - } - } -} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2EnchantSkillLearn.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2EnchantSkillLearn.java deleted file mode 100644 index a620748265..0000000000 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2EnchantSkillLearn.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model; - -import java.util.Set; -import java.util.TreeMap; - -import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; -import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder; - -public final class L2EnchantSkillLearn -{ - private final int _id; - private final int _baseLvl; - private final TreeMap _enchantRoutes = new TreeMap<>(); - - public L2EnchantSkillLearn(int id, int baseLvl) - { - _id = id; - _baseLvl = baseLvl; - } - - public void addNewEnchantRoute(int route, int group) - { - _enchantRoutes.put(route, group); - } - - /** - * @return Returns the id. - */ - public int getId() - { - return _id; - } - - /** - * @return Returns the minLevel. - */ - public int getBaseLevel() - { - return _baseLvl; - } - - public static int getEnchantRoute(int level) - { - return (int) Math.floor(level / 100); - } - - public static int getEnchantIndex(int level) - { - return (level % 100) - 1; - } - - public static int getEnchantType(int level) - { - return ((level - 1) / 100) - 1; - } - - public L2EnchantSkillGroup getFirstRouteGroup() - { - return EnchantSkillGroupsData.getInstance().getEnchantSkillGroupById(_enchantRoutes.firstEntry().getValue()); - } - - public Set getAllRoutes() - { - return _enchantRoutes.keySet(); - } - - public int getMinSkillLevel(int level) - { - if ((level % 100) == 1) - { - return _baseLvl; - } - return level - 1; - } - - public boolean isMaxEnchant(int level) - { - final int enchantType = getEnchantRoute(level); - if ((enchantType < 1) || !_enchantRoutes.containsKey(enchantType)) - { - return false; - } - final int index = getEnchantIndex(level); - - if ((index + 1) >= EnchantSkillGroupsData.getInstance().getEnchantSkillGroupById(_enchantRoutes.get(enchantType)).getEnchantGroupDetails().size()) - { - return true; - } - return false; - } - - public EnchantSkillHolder getEnchantSkillHolder(int level) - { - final int enchantType = getEnchantRoute(level); - if ((enchantType < 1) || !_enchantRoutes.containsKey(enchantType)) - { - return null; - } - final int index = getEnchantIndex(level); - final L2EnchantSkillGroup group = EnchantSkillGroupsData.getInstance().getEnchantSkillGroupById(_enchantRoutes.get(enchantType)); - - if (index < 0) - { - return group.getEnchantGroupDetails().get(0); - } - else if (index >= group.getEnchantGroupDetails().size()) - { - return group.getEnchantGroupDetails().get(EnchantSkillGroupsData.getInstance().getEnchantSkillGroupById(_enchantRoutes.get(enchantType)).getEnchantGroupDetails().size() - 1); - } - return group.getEnchantGroupDetails().get(index); - } -} \ No newline at end of file diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2PetData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2PetData.java index d606858585..6b3b63066e 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2PetData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2PetData.java @@ -184,7 +184,7 @@ public class L2PetData { continue; } - if (temp.getSkillLvl() == 0) + if (temp.getSkillLevel() == 0) { if (petLvl < 70) { @@ -209,9 +209,9 @@ public class L2PetData } else if (temp.getMinLevel() <= petLvl) { - if (temp.getSkillLvl() > lvl) + if (temp.getSkillLevel() > lvl) { - lvl = temp.getSkillLvl(); + lvl = temp.getSkillLevel(); } } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/ShortCuts.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/ShortCuts.java index 90385474db..4af1894e81 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/ShortCuts.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/ShortCuts.java @@ -90,7 +90,7 @@ public class ShortCuts implements IRestorable } try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement statement = con.prepareStatement("REPLACE INTO character_shortcuts (charId,slot,page,type,shortcut_id,level,class_index) values(?,?,?,?,?,?,?)")) + PreparedStatement statement = con.prepareStatement("REPLACE INTO character_shortcuts (charId,slot,page,type,shortcut_id,level,sub_level,class_index) values(?,?,?,?,?,?,?,?)")) { statement.setInt(1, _owner.getObjectId()); statement.setInt(2, shortcut.getSlot()); @@ -98,7 +98,8 @@ public class ShortCuts implements IRestorable statement.setInt(4, shortcut.getType().ordinal()); statement.setInt(5, shortcut.getId()); statement.setInt(6, shortcut.getLevel()); - statement.setInt(7, _owner.getClassIndex()); + statement.setInt(7, shortcut.getSubLevel()); + statement.setInt(8, _owner.getClassIndex()); statement.execute(); } catch (Exception e) @@ -191,8 +192,8 @@ public class ShortCuts implements IRestorable final int type = rset.getInt("type"); final int id = rset.getInt("shortcut_id"); final int level = rset.getInt("level"); - - _shortCuts.put(slot + (page * MAX_SHORTCUTS_PER_BAR), new Shortcut(slot, page, ShortcutType.values()[type], id, level, 1)); + final int subLevel = rset.getInt("sub_level"); + _shortCuts.put(slot + (page * MAX_SHORTCUTS_PER_BAR), new Shortcut(slot, page, ShortcutType.values()[type], id, level, subLevel, 1)); } } } @@ -226,15 +227,16 @@ public class ShortCuts implements IRestorable * Updates the shortcut bars with the new skill. * @param skillId the skill Id to search and update. * @param skillLevel the skill level to update. + * @param skillSubLevel the skill sub level to update. */ - public synchronized void updateShortCuts(int skillId, int skillLevel) + public synchronized void updateShortCuts(int skillId, int skillLevel, int skillSubLevel) { // Update all the shortcuts for this skill for (Shortcut sc : _shortCuts.values()) { if ((sc.getId() == skillId) && (sc.getType() == ShortcutType.SKILL)) { - final Shortcut newsc = new Shortcut(sc.getSlot(), sc.getPage(), sc.getType(), sc.getId(), skillLevel, 1); + final Shortcut newsc = new Shortcut(sc.getSlot(), sc.getPage(), sc.getType(), sc.getId(), skillLevel, skillSubLevel, 1); _owner.sendPacket(new ShortCutRegister(newsc)); _owner.registerShortCut(newsc); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/Shortcut.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/Shortcut.java index 99e6c6b7ac..94a54bf85f 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/Shortcut.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/Shortcut.java @@ -34,18 +34,21 @@ public class Shortcut private final int _id; /** Shortcut level (skills). */ private final int _level; + /** Shortcut level (skills). */ + private final int _subLevel; /** Character type: 1 player, 2 summon. */ private final int _characterType; /** Shared reuse group. */ private int _sharedReuseGroup = -1; - public Shortcut(int slot, int page, ShortcutType type, int id, int level, int characterType) + public Shortcut(int slot, int page, ShortcutType type, int id, int level, int subLevel, int characterType) { _slot = slot; _page = page; _type = type; _id = id; _level = level; + _subLevel = subLevel; _characterType = characterType; } @@ -67,6 +70,15 @@ public class Shortcut return _level; } + /** + * Gets the shortcut level. + * @return the level + */ + public int getSubLevel() + { + return _subLevel; + } + /** * Gets the shortcut page. * @return the page diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/TimeStamp.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/TimeStamp.java index 4aa134f954..fc1a05147c 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/TimeStamp.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/TimeStamp.java @@ -31,6 +31,8 @@ public class TimeStamp private final int _id1; /** Item object ID or skill level. */ private final int _id2; + /** Skill level. */ + private final int _id3; /** Item or skill reuse time. */ private final long _reuse; /** Time stamp. */ @@ -48,6 +50,7 @@ public class TimeStamp { _id1 = skill.getId(); _id2 = skill.getLevel(); + _id3 = skill.getSubLevel(); _reuse = reuse; _stamp = systime > 0 ? systime : System.currentTimeMillis() + reuse; _group = -1; @@ -63,6 +66,7 @@ public class TimeStamp { _id1 = item.getId(); _id2 = item.getObjectId(); + _id3 = 0; _reuse = reuse; _stamp = systime > 0 ? systime : System.currentTimeMillis() + reuse; _group = item.getSharedReuseGroup(); @@ -113,6 +117,15 @@ public class TimeStamp return _id2; } + /** + * Gets the skill sub level. + * @return the skill level + */ + public int getSkillSubLvl() + { + return _id3; + } + /** * Gets the reuse. * @return the reuse diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/TradeItem.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/TradeItem.java index 19ce37c1c0..b37de23dd2 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/TradeItem.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/TradeItem.java @@ -18,6 +18,7 @@ package com.l2jmobius.gameserver.model; import java.util.Collection; import java.util.Collections; +import java.util.Objects; import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; @@ -54,6 +55,7 @@ public class TradeItem public TradeItem(L2ItemInstance item, long count, long price) { + Objects.requireNonNull(item); _objectId = item.getObjectId(); _item = item.getItem(); _location = item.getLocationSlot(); @@ -77,6 +79,7 @@ public class TradeItem public TradeItem(L2Item item, long count, long price) { + Objects.requireNonNull(item); _objectId = 0; _item = item; _location = 0; @@ -95,6 +98,7 @@ public class TradeItem public TradeItem(TradeItem item, long count, long price) { + Objects.requireNonNull(item); _objectId = item.getObjectId(); _item = item.getItem(); _location = item.getLocationSlot(); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 2bca8a71f1..e5ca8dc38f 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -212,11 +212,11 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe /** Map containing all skills of this character. */ private final Map _skills = new ConcurrentSkipListMap<>(); /** Map containing the skill reuse time stamps. */ - private volatile Map _reuseTimeStampsSkills = null; + private volatile Map _reuseTimeStampsSkills = null; /** Map containing the item reuse time stamps. */ private volatile Map _reuseTimeStampsItems = null; /** Map containing all the disabled skills. */ - private volatile Map _disabledSkills = null; + private volatile Map _disabledSkills = null; private boolean _allSkillsDisabled; private final byte[] _zones = new byte[ZoneId.getZoneCount()]; @@ -1665,7 +1665,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe * Gets the skill reuse time stamps map. * @return the skill reuse time stamps map */ - public final Map getSkillReuseTimeStamps() + public final Map getSkillReuseTimeStamps() { return _reuseTimeStampsSkills; } @@ -1730,7 +1730,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe * @param hashCode the skill hash code * @return if the skill has a reuse time stamp, the remaining time, otherwise -1 */ - public synchronized final long getSkillRemainingReuseTime(int hashCode) + public synchronized final long getSkillRemainingReuseTime(long hashCode) { final TimeStamp reuseStamp = (_reuseTimeStampsSkills != null) ? _reuseTimeStampsSkills.get(hashCode) : null; return reuseStamp != null ? reuseStamp.getRemaining() : -1; @@ -1741,7 +1741,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe * @param hashCode the skill hash code * @return {@code true} if the skill is under reuse time, {@code false} otherwise */ - public synchronized final boolean hasSkillReuse(int hashCode) + public synchronized final boolean hasSkillReuse(long hashCode) { final TimeStamp reuseStamp = (_reuseTimeStampsSkills != null) ? _reuseTimeStampsSkills.get(hashCode) : null; return (reuseStamp != null) && reuseStamp.hasNotPassed(); @@ -1752,7 +1752,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe * @param hashCode the skill hash code * @return if the skill has a reuse time stamp, the skill reuse time stamp, otherwise {@code null} */ - public synchronized final TimeStamp getSkillReuseTimeStamp(int hashCode) + public synchronized final TimeStamp getSkillReuseTimeStamp(long hashCode) { return _reuseTimeStampsSkills != null ? _reuseTimeStampsSkills.get(hashCode) : null; } @@ -1761,7 +1761,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe * Gets the disabled skills map. * @return the disabled skills map */ - public Map getDisabledSkills() + public Map getDisabledSkills() { return _disabledSkills; } @@ -1847,7 +1847,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe * @param hashCode the skill hash code * @return {@code true} if the skill is disabled, {@code false} otherwise */ - public boolean isSkillDisabledByReuse(int hashCode) + public boolean isSkillDisabledByReuse(long hashCode) { if (_disabledSkills == null) { @@ -1900,12 +1900,6 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe */ public boolean doDie(L2Character killer) { - final TerminateReturn returnBack = EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this, TerminateReturn.class); - if ((returnBack != null) && returnBack.terminate()) - { - return false; - } - // killing is only possible one time synchronized (this) { @@ -1918,7 +1912,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe setCurrentHp(0); setIsDead(true); } - + EventDispatcher.getInstance().notifyEvent(new OnCreatureDeath(killer, this), this); EventDispatcher.getInstance().notifyEvent(new OnCreatureKilled(killer, this), killer); abortAttack(); @@ -2400,7 +2394,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe public boolean isUndying() { - return _isUndying || isInvul() || isAffected(EffectFlag.IGNORE_DEATH); + return _isUndying || isInvul() || isAffected(EffectFlag.IGNORE_DEATH) || isInsideZone(ZoneId.UNDYING); } public boolean isHpBlocked() @@ -5423,7 +5417,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe if (_ignoreSkillEffects != null) { final SkillHolder holder = getIgnoreSkillEffects().get(skillId); - return ((holder != null) && ((holder.getSkillLvl() < 1) || (holder.getSkillLvl() == skillLvl))); + return ((holder != null) && ((holder.getSkillLevel() < 1) || (holder.getSkillLevel() == skillLvl))); } return false; } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2NpcInstance.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2NpcInstance.java index 5efe0cca48..2ca1b939b2 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2NpcInstance.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2NpcInstance.java @@ -138,7 +138,7 @@ public class L2NpcInstance extends L2Npc if (skills.isEmpty()) { - final Map skillTree = SkillTreesData.getInstance().getCompleteClassSkillTree(classId); + final Map skillTree = SkillTreesData.getInstance().getCompleteClassSkillTree(classId); final int minLevel = SkillTreesData.getInstance().getMinLevelForNewSkill(player, skillTree); if (minLevel > 0) { diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java index c9534d5d9e..d6d4885a14 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java @@ -65,7 +65,6 @@ import com.l2jmobius.gameserver.data.sql.impl.CharSummonTable; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.xml.impl.AdminData; import com.l2jmobius.gameserver.data.xml.impl.ClassListData; -import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.data.xml.impl.HennaData; import com.l2jmobius.gameserver.data.xml.impl.NpcData; @@ -85,6 +84,7 @@ import com.l2jmobius.gameserver.enums.HtmlActionScope; import com.l2jmobius.gameserver.enums.IllegalActionPunishmentType; import com.l2jmobius.gameserver.enums.InstanceType; import com.l2jmobius.gameserver.enums.MountType; +import com.l2jmobius.gameserver.enums.NextActionType; import com.l2jmobius.gameserver.enums.PartyDistributionType; import com.l2jmobius.gameserver.enums.PartySmallWindowUpdateType; import com.l2jmobius.gameserver.enums.PlayerAction; @@ -127,7 +127,6 @@ import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2CommandChannel; import com.l2jmobius.gameserver.model.L2ContactList; -import com.l2jmobius.gameserver.model.L2EnchantSkillLearn; import com.l2jmobius.gameserver.model.L2ManufactureItem; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Party; @@ -262,6 +261,7 @@ import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.client.L2GameClient; import com.l2jmobius.gameserver.network.serverpackets.AbstractHtmlPacket; +import com.l2jmobius.gameserver.network.serverpackets.AcquireSkillList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.ChangeWaitType; import com.l2jmobius.gameserver.network.serverpackets.CharInfo; @@ -346,15 +346,15 @@ import com.l2jmobius.gameserver.util.Util; public final class L2PcInstance extends L2Playable { // Character Skill SQL String Definitions: - private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE charId=? AND class_index=?"; - private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=? WHERE skill_id=? AND charId=? AND class_index=?"; - private static final String ADD_NEW_SKILLS = "REPLACE INTO character_skills (charId,skill_id,skill_level,class_index) VALUES (?,?,?,?)"; + private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level,skill_sub_level FROM character_skills WHERE charId=? AND class_index=?"; + private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=?, skill_sub_level=? WHERE skill_id=? AND charId=? AND class_index=?"; + private static final String ADD_NEW_SKILLS = "REPLACE INTO character_skills (charId,skill_id,skill_level,skill_sub_level,class_index) VALUES (?,?,?,?,?)"; private static final String DELETE_SKILL_FROM_CHAR = "DELETE FROM character_skills WHERE skill_id=? AND charId=? AND class_index=?"; private static final String DELETE_CHAR_SKILLS = "DELETE FROM character_skills WHERE charId=? AND class_index=?"; // Character Skill Save SQL String Definitions: - private static final String ADD_SKILL_SAVE = "INSERT INTO character_skills_save (charId,skill_id,skill_level,remaining_time,reuse_delay,systime,restore_type,class_index,buff_index) VALUES (?,?,?,?,?,?,?,?,?)"; - private static final String RESTORE_SKILL_SAVE = "SELECT skill_id,skill_level,remaining_time, reuse_delay, systime, restore_type FROM character_skills_save WHERE charId=? AND class_index=? ORDER BY buff_index ASC"; + private static final String ADD_SKILL_SAVE = "INSERT INTO character_skills_save (charId,skill_id,skill_level,skill_sub_level,remaining_time,reuse_delay,systime,restore_type,class_index,buff_index) VALUES (?,?,?,?,?,?,?,?,?,?)"; + private static final String RESTORE_SKILL_SAVE = "SELECT skill_id,skill_level,skill_sub_level,remaining_time, reuse_delay, systime, restore_type FROM character_skills_save WHERE charId=? AND class_index=? ORDER BY buff_index ASC"; private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE charId=? AND class_index=?"; // Character Item Reuse Time String Definition: @@ -1546,10 +1546,11 @@ public final class L2PcInstance extends L2Playable * Updates the shortcut bars with the new skill. * @param skillId the skill Id to search and update. * @param skillLevel the skill level to update. + * @param skillSubLevel the skill sub level to update. */ - public void updateShortCuts(int skillId, int skillLevel) + public void updateShortCuts(int skillId, int skillLevel, int skillSubLevel) { - _shortCuts.updateShortCuts(skillId, skillLevel); + _shortCuts.updateShortCuts(skillId, skillLevel, skillSubLevel); } /** @@ -2047,7 +2048,7 @@ public final class L2PcInstance extends L2Playable _curWeightPenalty = newWeightPenalty; if ((newWeightPenalty > 0) && !_dietMode) { - addSkill(SkillData.getInstance().getSkill(4270, newWeightPenalty)); + addSkill(SkillData.getInstance().getSkill(CommonSkill.WEIGHT_PENALTY.getId(), newWeightPenalty)); setIsOverloaded(getCurrentLoad() > maxLoad); } else @@ -3053,7 +3054,7 @@ public final class L2PcInstance extends L2Playable if (count > 0) { - final L2ItemInstance beautyTickets = _inventory.getAdenaInstance(); + final L2ItemInstance beautyTickets = _inventory.getBeautyTicketsInstance(); if (!_inventory.reduceBeautyTickets(process, count, this, reference)) { return false; @@ -6699,6 +6700,12 @@ public final class L2PcInstance extends L2Playable return null; } + if (player.isGM()) + { + final long masks = player.getVariables().getLong(COND_OVERRIDE_KEY, PcCondOverride.getAllExceptionsMask()); + player.setOverrideCond(masks); + } + // Retrieve from the database all items of this L2PcInstance and add them to _inventory player.getInventory().restore(); player.getFreight().restore(); @@ -6765,12 +6772,6 @@ public final class L2PcInstance extends L2Playable player.restoreUISettings(); } - if (player.isGM()) - { - final long masks = player.getVariables().getLong(COND_OVERRIDE_KEY, PcCondOverride.getAllExceptionsMask()); - player.setOverrideCond(masks); - } - player.loadRecommendations(); player.startRecoGiveTask(); player.startOnlineTimeUpdateTask(); @@ -7204,7 +7205,7 @@ public final class L2PcInstance extends L2Playable delete.execute(); int buff_index = 0; - final List storedSkills = new ArrayList<>(); + final List storedSkills = new ArrayList<>(); // Store all effect data along with calulated remaining // reuse delays for matching skills. 'restore_type'= 0. @@ -7258,26 +7259,27 @@ public final class L2PcInstance extends L2Playable statement.setInt(1, getObjectId()); statement.setInt(2, skill.getId()); statement.setInt(3, skill.getLevel()); - statement.setInt(4, info.getTime()); + statement.setInt(4, skill.getSubLevel()); + statement.setInt(5, info.getTime()); final TimeStamp t = getSkillReuseTimeStamp(skill.getReuseHashCode()); - statement.setLong(5, (t != null) && t.hasNotPassed() ? t.getReuse() : 0); - statement.setDouble(6, (t != null) && t.hasNotPassed() ? t.getStamp() : 0); + statement.setLong(6, (t != null) && t.hasNotPassed() ? t.getReuse() : 0); + statement.setDouble(7, (t != null) && t.hasNotPassed() ? t.getStamp() : 0); - statement.setInt(7, 0); // Store type 0, active buffs/debuffs. - statement.setInt(8, getClassIndex()); - statement.setInt(9, ++buff_index); + statement.setInt(8, 0); // Store type 0, active buffs/debuffs. + statement.setInt(9, getClassIndex()); + statement.setInt(10, ++buff_index); statement.execute(); } } // Skills under reuse. - final Map reuseTimeStamps = getSkillReuseTimeStamps(); + final Map reuseTimeStamps = getSkillReuseTimeStamps(); if (reuseTimeStamps != null) { - for (Entry ts : reuseTimeStamps.entrySet()) + for (Entry ts : reuseTimeStamps.entrySet()) { - final int hash = ts.getKey(); + final long hash = ts.getKey(); if (storedSkills.contains(hash)) { continue; @@ -7291,12 +7293,13 @@ public final class L2PcInstance extends L2Playable statement.setInt(1, getObjectId()); statement.setInt(2, t.getSkillId()); statement.setInt(3, t.getSkillLvl()); - statement.setInt(4, -1); - statement.setLong(5, t.getReuse()); - statement.setDouble(6, t.getStamp()); - statement.setInt(7, 1); // Restore type 1, skill reuse. - statement.setInt(8, getClassIndex()); - statement.setInt(9, ++buff_index); + statement.setInt(4, t.getSkillSubLvl()); + statement.setInt(5, -1); + statement.setLong(6, t.getReuse()); + statement.setDouble(7, t.getStamp()); + statement.setInt(8, 1); // Restore type 1, skill reuse. + statement.setInt(9, getClassIndex()); + statement.setInt(10, ++buff_index); statement.execute(); } } @@ -7464,9 +7467,10 @@ public final class L2PcInstance extends L2Playable try (PreparedStatement ps = con.prepareStatement(UPDATE_CHARACTER_SKILL_LEVEL)) { ps.setInt(1, newSkill.getLevel()); - ps.setInt(2, oldSkill.getId()); - ps.setInt(3, getObjectId()); - ps.setInt(4, classIndex); + ps.setInt(2, newSkill.getSubLevel()); + ps.setInt(3, oldSkill.getId()); + ps.setInt(4, getObjectId()); + ps.setInt(5, classIndex); ps.execute(); } } @@ -7477,7 +7481,8 @@ public final class L2PcInstance extends L2Playable ps.setInt(1, getObjectId()); ps.setInt(2, newSkill.getId()); ps.setInt(3, newSkill.getLevel()); - ps.setInt(4, classIndex); + ps.setInt(4, newSkill.getSubLevel()); + ps.setInt(5, classIndex); ps.execute(); } } @@ -7514,7 +7519,8 @@ public final class L2PcInstance extends L2Playable ps.setInt(1, getObjectId()); ps.setInt(2, addSkill.getId()); ps.setInt(3, addSkill.getLevel()); - ps.setInt(4, classIndex); + ps.setInt(4, addSkill.getSubLevel()); + ps.setInt(5, classIndex); ps.addBatch(); } ps.executeBatch(); @@ -7543,9 +7549,10 @@ public final class L2PcInstance extends L2Playable { final int id = rset.getInt("skill_id"); final int level = rset.getInt("skill_level"); + final int subLevel = rset.getInt("skill_sub_level"); // Create a L2Skill object for each record - final Skill skill = SkillData.getInstance().getSkill(id, level); + final Skill skill = SkillData.getInstance().getSkill(id, level, subLevel); if (skill == null) { @@ -7596,7 +7603,7 @@ public final class L2PcInstance extends L2Playable final long systime = rset.getLong("systime"); final int restoreType = rset.getInt("restore_type"); - final Skill skill = SkillData.getInstance().getSkill(rset.getInt("skill_id"), rset.getInt("skill_level")); + final Skill skill = SkillData.getInstance().getSkill(rset.getInt("skill_id"), rset.getInt("skill_level"), rset.getInt("skill_sub_level")); if (skill == null) { continue; @@ -8305,11 +8312,18 @@ public final class L2PcInstance extends L2Playable sendPacket(ActionFailed.STATIC_PACKET); // Upon failed conditions, next action is called. - if ((skill.nextActionIsAttack()) && (target != this) && target.isAutoAttackable(this)) + if ((skill.getNextAction() != NextActionType.NONE) && (target != this) && target.isAutoAttackable(this)) { if ((getAI().getNextIntention() == null) || (getAI().getNextIntention().getCtrlIntention() != CtrlIntention.AI_INTENTION_MOVE_TO)) { - getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target); + if (skill.getNextAction() == NextActionType.ATTACK) + { + getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target); + } + else if (skill.getNextAction() == NextActionType.CAST) + { + getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, skill, target, item, false, false); + } } } @@ -8453,8 +8467,6 @@ public final class L2PcInstance extends L2Playable { _cubics.values().forEach(CubicInstance::deactivate); _cubics.clear(); - sendPacket(new ExUserInfoCubic(this)); - broadcastCharInfo(); } } @@ -9276,7 +9288,7 @@ public final class L2PcInstance extends L2Playable public void sendSkillList(int lastLearnedSkillId) { boolean isDisabled = false; - final SkillList sl = new SkillList(); + SkillList sl = new SkillList(); for (Skill s : getSkillList()) { @@ -9285,32 +9297,15 @@ public final class L2PcInstance extends L2Playable isDisabled = s.isClanSkill() && (getClan().getReputationScore() < 0); } - boolean isEnchantable = SkillData.getInstance().isEnchantable(s.getId()); - if (isEnchantable) - { - final L2EnchantSkillLearn esl = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(s.getId()); - if (esl != null) - { - // if player dont have min level to enchant - if (s.getLevel() < esl.getBaseLevel()) - { - isEnchantable = false; - } - } - // if no enchant data - else - { - isEnchantable = false; - } - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.isPassive(), isDisabled, isEnchantable); + sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); } if (lastLearnedSkillId > 0) { sl.setLastLearnedSkillId(lastLearnedSkillId); } sendPacket(sl); + + sendPacket(new AcquireSkillList(this)); } /** @@ -9377,7 +9372,7 @@ public final class L2PcInstance extends L2Playable getSubClasses().put(newClass.getClassIndex(), newClass); final ClassId subTemplate = ClassId.getClassId(classId); - final Map skillTree = SkillTreesData.getInstance().getCompleteClassSkillTree(subTemplate); + final Map skillTree = SkillTreesData.getInstance().getCompleteClassSkillTree(subTemplate); final Map prevSkillList = new HashMap<>(); for (L2SkillLearn skillInfo : skillTree.values()) { @@ -9457,6 +9452,18 @@ public final class L2PcInstance extends L2Playable { getVariables().remove(PlayerVariables.ABILITY_POINTS_DUAL_CLASS); getVariables().remove(PlayerVariables.ABILITY_POINTS_USED_DUAL_CLASS); + int revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS, 0); + if (revelationSkill != 0) + { + removeSkill(revelationSkill); + } + revelationSkill = getVariables().getInt(PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS, 0); + if (revelationSkill != 0) + { + removeSkill(revelationSkill); + } + getVariables().remove(PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS); + getVariables().remove(PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS); } } catch (Exception e) @@ -10611,7 +10618,7 @@ public final class L2PcInstance extends L2Playable { if (isFlying()) { - removeSkill(SkillData.getInstance().getSkill(4289, 1)); + removeSkill(SkillData.getInstance().getSkill(CommonSkill.WYVERN_BREATH.getId(), 1)); } } catch (Exception e) @@ -10807,6 +10814,15 @@ public final class L2PcInstance extends L2Playable } } + try + { + stopCubics(); + } + catch (Exception e) + { + _log.log(Level.SEVERE, "deleteMe()", e); + } + // Update database with items in its inventory and remove them from the world try { @@ -12404,7 +12420,7 @@ public final class L2PcInstance extends L2Playable final int damage = (int) Formulas.calcFallDam(this, deltaZ); if (damage > 0) { - reduceCurrentHp(Math.min(damage, getCurrentHp() - 1), null, null, false, true, false, false); + reduceCurrentHp(Math.min(damage, getCurrentHp() - 1), this, null, false, true, false, false); final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_RECEIVED_S1_FALLING_DAMAGE); sm.addInt(damage); sendPacket(sm); @@ -12566,7 +12582,7 @@ public final class L2PcInstance extends L2Playable private void deacreaseSkillLevel(Skill skill, int lvlDiff) { int nextLevel = -1; - final Map skillTree = SkillTreesData.getInstance().getCompleteClassSkillTree(getClassId()); + final Map skillTree = SkillTreesData.getInstance().getCompleteClassSkillTree(getClassId()); for (L2SkillLearn sl : skillTree.values()) { if ((sl.getSkillId() == skill.getId()) && (nextLevel < sl.getSkillLevel()) && (getLevel() >= (sl.getGetLevel() - lvlDiff))) diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PetInstance.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PetInstance.java index 3ab931ab3d..8cff1c2830 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PetInstance.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PetInstance.java @@ -78,8 +78,8 @@ public class L2PetInstance extends L2Summon { protected static final Logger _logPet = Logger.getLogger(L2PetInstance.class.getName()); - private static final String ADD_SKILL_SAVE = "INSERT INTO character_pet_skills_save (petObjItemId,skill_id,skill_level,remaining_time,buff_index) VALUES (?,?,?,?,?)"; - private static final String RESTORE_SKILL_SAVE = "SELECT petObjItemId,skill_id,skill_level,remaining_time,buff_index FROM character_pet_skills_save WHERE petObjItemId=? ORDER BY buff_index ASC"; + private static final String ADD_SKILL_SAVE = "INSERT INTO character_pet_skills_save (petObjItemId,skill_id,skill_level,skill_sub_level,remaining_time,buff_index) VALUES (?,?,?,?,?,?)"; + private static final String RESTORE_SKILL_SAVE = "SELECT petObjItemId,skill_id,skill_level,skill_sub_level,remaining_time,buff_index FROM character_pet_skills_save WHERE petObjItemId=? ORDER BY buff_index ASC"; private static final String DELETE_SKILL_SAVE = "DELETE FROM character_pet_skills_save WHERE petObjItemId=?"; private int _curFed; @@ -998,7 +998,7 @@ public class L2PetInstance extends L2Summon int buff_index = 0; - final Set storedSkills = new HashSet<>(); + final Set storedSkills = new HashSet<>(); // Store all effect data along with calculated remaining if (storeEffects) @@ -1044,8 +1044,9 @@ public class L2PetInstance extends L2Summon ps2.setInt(1, getControlObjectId()); ps2.setInt(2, skill.getId()); ps2.setInt(3, skill.getLevel()); - ps2.setInt(4, info.getTime()); - ps2.setInt(5, ++buff_index); + ps2.setInt(4, skill.getSubLevel()); + ps2.setInt(5, info.getTime()); + ps2.setInt(6, ++buff_index); ps2.execute(); SummonEffectsTable.getInstance().getPetEffects().computeIfAbsent(getControlObjectId(), k -> new CopyOnWriteArrayList<>()).add(new SummonEffect(skill, info.getTime())); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2ServitorInstance.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2ServitorInstance.java index 9b8d8509f4..0a240610de 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2ServitorInstance.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2ServitorInstance.java @@ -299,7 +299,7 @@ public class L2ServitorInstance extends L2Summon implements Runnable int buff_index = 0; - final List storedSkills = new CopyOnWriteArrayList<>(); + final List storedSkills = new CopyOnWriteArrayList<>(); // Store all effect data along with calculated remaining if (storeEffects) diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/stat/CharStat.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/stat/CharStat.java index 7c6937dcd4..61a92bf527 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/stat/CharStat.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/stat/CharStat.java @@ -401,7 +401,7 @@ public class CharStat */ public final int getShldDef() { - return (int) getValue(Stats.SHIELD_DEFENCE, 0); + return (int) getValue(Stats.SHIELD_DEFENCE); } public long getSp() diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/tasks/player/WaterTask.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/tasks/player/WaterTask.java index de858abdff..7ec8538762 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/tasks/player/WaterTask.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/tasks/player/WaterTask.java @@ -45,7 +45,7 @@ public class WaterTask implements Runnable reduceHp = 1; } - _player.reduceCurrentHp(reduceHp, null, null, false, true, false, false); + _player.reduceCurrentHp(reduceHp, _player, null, false, true, false, false); // reduced hp, becouse not rest final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_TAKEN_S1_DAMAGE_BECAUSE_YOU_WERE_UNABLE_TO_BREATHE); sm.addInt((int) reduceHp); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/transform/Transform.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/transform/Transform.java index 0bb0f3a4fe..0f5eb7387b 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/transform/Transform.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/transform/Transform.java @@ -429,7 +429,7 @@ public final class Transform implements IIdentifiable { if (player.getLevel() >= holder.getMinLevel()) { - if (player.getSkillLevel(holder.getSkillId()) < holder.getSkillLvl()) + if (player.getSkillLevel(holder.getSkillId()) < holder.getSkillLevel()) { player.addTransformSkill(holder.getSkill()); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/buylist/Product.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/buylist/Product.java index 0ceca9c0ac..e5f383ff32 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/buylist/Product.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/buylist/Product.java @@ -18,6 +18,7 @@ package com.l2jmobius.gameserver.model.buylist; import java.sql.Connection; import java.sql.PreparedStatement; +import java.util.Objects; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; @@ -45,6 +46,7 @@ public final class Product public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount) { + Objects.requireNonNull(item); _buyListId = buyListId; _item = item; _price = price; diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/clan/entry/PledgeRecruitInfo.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/clan/entry/PledgeRecruitInfo.java index cbb64cff78..06952aaf5b 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/clan/entry/PledgeRecruitInfo.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/clan/entry/PledgeRecruitInfo.java @@ -29,14 +29,18 @@ public class PledgeRecruitInfo private String _information; private String _detailedInformation; private final L2Clan _clan; + private final int _applicationType; + private final int _recruitType; - public PledgeRecruitInfo(int clanId, int karma, String information, String detailedInformation) + public PledgeRecruitInfo(int clanId, int karma, String information, String detailedInformation, int applicationType, int recruitType) { _clanId = clanId; _karma = karma; _information = information; _detailedInformation = detailedInformation; _clan = ClanTable.getInstance().getClan(clanId); + _applicationType = applicationType; + _recruitType = recruitType; } public int getClanId() @@ -94,6 +98,16 @@ public class PledgeRecruitInfo _detailedInformation = detailedInformation; } + public int getApplicationType() + { + return _applicationType; + } + + public int getRecruitType() + { + return _recruitType; + } + public L2Clan getClan() { return _clan; diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/CubicSkill.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/CubicSkill.java index c9c6a8aee6..e580f56621 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/CubicSkill.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/CubicSkill.java @@ -87,6 +87,6 @@ public class CubicSkill extends SkillHolder implements ICubicConditionHolder @Override public String toString() { - return "Cubic skill id: " + getSkillId() + " level: " + getSkillLvl() + " triggerRate: " + _triggerRate + " successRate: " + _successRate + " canUseOnStaticObjects: " + _canUseOnStaticObjects + " targetType: " + _targetType + " isTargetingDebuff: " + _targetDebuff + Config.EOL; + return "Cubic skill id: " + getSkillId() + " level: " + getSkillLevel() + " triggerRate: " + _triggerRate + " successRate: " + _successRate + " canUseOnStaticObjects: " + _canUseOnStaticObjects + " targetType: " + _targetType + " isTargetingDebuff: " + _targetDebuff + Config.EOL; } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/conditions/GeneralCondition.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/conditions/HpCondition.java similarity index 68% rename from L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/conditions/GeneralCondition.java rename to L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/conditions/HpCondition.java index 921886691a..73916319c3 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/conditions/GeneralCondition.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/conditions/HpCondition.java @@ -22,17 +22,15 @@ import com.l2jmobius.gameserver.model.cubic.CubicInstance; /** * @author UnAfraid */ -public class GeneralCondition implements ICubicCondition +public class HpCondition implements ICubicCondition { - private final GeneralConditionType _type; + private final HpConditionType _type; private final int _hpPer; - private final int _hp; - public GeneralCondition(GeneralConditionType type, int hpPer, int hp) + public HpCondition(HpConditionType type, int hpPer) { _type = type; _hpPer = hpPer; - _hp = hp; } @Override @@ -43,27 +41,11 @@ public class GeneralCondition implements ICubicCondition { case GREATER: { - if (hpPer < _hpPer) - { - return false; - } - if (target.getCurrentHp() < _hp) - { - return false; - } - break; + return hpPer > _hpPer; } case LESSER: { - if (hpPer > _hpPer) - { - return false; - } - if (target.getCurrentHp() > _hp) - { - return false; - } - break; + return hpPer < _hpPer; } } return true; @@ -72,10 +54,10 @@ public class GeneralCondition implements ICubicCondition @Override public String toString() { - return getClass().getSimpleName() + " chance: " + _hpPer + " range: " + _hp; + return getClass().getSimpleName() + " chance: " + _hpPer; } - public static enum GeneralConditionType + public static enum HpConditionType { GREATER, LESSER; diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/conditions/RangeCondition.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/conditions/RangeCondition.java new file mode 100644 index 0000000000..e92f8fbacf --- /dev/null +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/cubic/conditions/RangeCondition.java @@ -0,0 +1,39 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.cubic.conditions; + +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.cubic.CubicInstance; + +/** + * @author Sdw + */ +public class RangeCondition implements ICubicCondition +{ + private final int _range; + + public RangeCondition(int range) + { + _range = range; + } + + @Override + public boolean test(CubicInstance cubic, L2Character owner, L2Character target) + { + return owner.distFromMe(target) <= _range; + } +} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/events/EventType.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/events/EventType.java index 75642db50f..faee438c9f 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/events/EventType.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/events/EventType.java @@ -160,7 +160,7 @@ public enum EventType ON_CREATURE_DAMAGE_RECEIVED(OnCreatureDamageReceived.class, void.class, DamageReturn.class), ON_CREATURE_DAMAGE_DEALT(OnCreatureDamageDealt.class, void.class), ON_CREATURE_HP_CHANGE(OnCreatureHpChange.class, void.class), - ON_CREATURE_DEATH(OnCreatureDeath.class, void.class, TerminateReturn.class), + ON_CREATURE_DEATH(OnCreatureDeath.class, void.class), ON_CREATURE_KILLED(OnCreatureKilled.class, void.class, TerminateReturn.class), ON_CREATURE_SEE(OnCreatureSee.class, void.class), ON_CREATURE_SKILL_USE(OnCreatureSkillUse.class, void.class, TerminateReturn.class), diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java index 23db1474cc..d502474429 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/ArmorsetSkillHolder.java @@ -75,7 +75,7 @@ public class ArmorsetSkillHolder extends SkillHolder } // Player already knows that skill - if (player.getSkillLevel(getSkillId()) == getSkillLvl()) + if (player.getSkillLevel(getSkillId()) == getSkillLevel()) { return false; } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/EnchantSkillHolder.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/EnchantSkillHolder.java new file mode 100644 index 0000000000..d25dcc5ca3 --- /dev/null +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/EnchantSkillHolder.java @@ -0,0 +1,84 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.EnumMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import com.l2jmobius.gameserver.enums.SkillEnchantType; +import com.l2jmobius.gameserver.model.StatsSet; + +/** + * @author Sdw + */ +public class EnchantSkillHolder +{ + private final int _level; + private final int _enchantFailLevel; + private final Map _sp = new EnumMap<>(SkillEnchantType.class); + private final Map _chance = new EnumMap<>(SkillEnchantType.class); + private final Map> _requiredItems = new EnumMap<>(SkillEnchantType.class); + + public EnchantSkillHolder(StatsSet set) + { + _level = set.getInt("level"); + _enchantFailLevel = set.getInt("enchantFailLevel"); + } + + public int getLevel() + { + return _level; + } + + public int getEnchantFailLevel() + { + return _enchantFailLevel; + } + + public void addSp(SkillEnchantType type, long sp) + { + _sp.put(type, sp); + } + + public long getSp(SkillEnchantType type) + { + return _sp.getOrDefault(type, 0L); + } + + public void addChance(SkillEnchantType type, int chance) + { + _chance.put(type, chance); + } + + public int getChance(SkillEnchantType type) + { + return _chance.getOrDefault(type, 100); + } + + public void addRequiredItem(SkillEnchantType type, ItemHolder item) + { + _requiredItems.computeIfAbsent(type, k -> new HashSet<>()).add(item); + } + + public Set getRequiredItems(SkillEnchantType type) + { + return _requiredItems.getOrDefault(type, Collections.emptySet()); + } +} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/ItemHolder.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/ItemHolder.java index eb077392ed..7e2a3d0206 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/ItemHolder.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/ItemHolder.java @@ -16,6 +16,7 @@ */ package com.l2jmobius.gameserver.model.holders; +import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.interfaces.IIdentifiable; /** @@ -28,6 +29,12 @@ public class ItemHolder implements IIdentifiable private final int _id; private final long _count; + public ItemHolder(StatsSet set) + { + _id = set.getInt("id"); + _count = set.getLong("count"); + } + public ItemHolder(int id, long count) { _id = id; diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/SkillHolder.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/SkillHolder.java index d114800d1c..6d15ab44e6 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/SkillHolder.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/holders/SkillHolder.java @@ -26,18 +26,28 @@ import com.l2jmobius.gameserver.model.skills.Skill; public class SkillHolder { private final int _skillId; - private final int _skillLvl; + private final int _skillLevel; + private final int _skillSubLevel; - public SkillHolder(int skillId, int skillLvl) + public SkillHolder(int skillId, int skillLevel) { _skillId = skillId; - _skillLvl = skillLvl; + _skillLevel = skillLevel; + _skillSubLevel = 0; + } + + public SkillHolder(int skillId, int skillLevel, int skillSubLevel) + { + _skillId = skillId; + _skillLevel = skillLevel; + _skillSubLevel = skillSubLevel; } public SkillHolder(Skill skill) { _skillId = skill.getId(); - _skillLvl = skill.getLevel(); + _skillLevel = skill.getLevel(); + _skillSubLevel = skill.getSubLevel(); } public final int getSkillId() @@ -45,19 +55,52 @@ public class SkillHolder return _skillId; } - public final int getSkillLvl() + public final int getSkillLevel() { - return _skillLvl; + return _skillLevel; + } + + public final int getSkillSubLevel() + { + return _skillSubLevel; } public final Skill getSkill() { - return SkillData.getInstance().getSkill(_skillId, Math.max(_skillLvl, 1)); + return SkillData.getInstance().getSkill(_skillId, Math.max(_skillLevel, 1), _skillSubLevel); + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + + if (!(obj instanceof SkillHolder)) + { + return false; + } + + final SkillHolder holder = (SkillHolder) obj; + return (holder.getSkillId() == _skillId) && (holder.getSkillLevel() == _skillLevel) && (holder.getSkillSubLevel() == _skillSubLevel); + } + + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = (prime * result) + _skillId; + result = (prime * result) + _skillLevel; + result = (prime * result) + _skillSubLevel; + return result; } @Override public String toString() { - return "[SkillId: " + _skillId + " Level: " + _skillLvl + "]"; + return "[SkillId: " + _skillId + " Level: " + _skillLevel + "]"; } } \ No newline at end of file diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/instancezone/Instance.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/instancezone/Instance.java index a564b9c48e..d30670daab 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/instancezone/Instance.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/instancezone/Instance.java @@ -30,9 +30,11 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; +import java.util.stream.Stream; import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; @@ -432,6 +434,56 @@ public final class Instance implements IIdentifiable, INamable return spawns; } + /** + * @param name + * @return {@code List} of NPCs that are part of specified group + */ + public List getNpcsOfGroup(String name) + { + return getNpcsOfGroup(name, null); + } + + /** + * @param groupName + * @param filter + * @return {@code List} of NPCs that are part of specified group and matches filter specified + */ + public List getNpcsOfGroup(String groupName, Predicate filter) + { + return getStreamOfGroup(groupName, filter).collect(Collectors.toList()); + } + + /** + * @param groupName + * @param filter + * @return {@code Npc} instance of an NPC that is part of a group and matches filter specified + */ + public L2Npc getNpcOfGroup(String groupName, Predicate filter) + { + return getStreamOfGroup(groupName, filter).findFirst().orElse(null); + } + + /** + * @param groupName + * @param filter + * @return {@code Stream} of NPCs that is part of a group and matches filter specified + */ + public Stream getStreamOfGroup(String groupName, Predicate filter) + { + if (filter == null) + { + filter = Objects::nonNull; + } + + //@formatter:off + return _spawns.stream() + .flatMap(spawnTemplate -> spawnTemplate.getGroupsByName(groupName).stream()) + .flatMap(group -> group.getSpawns().stream()) + .flatMap(npcTemplate -> npcTemplate.getSpawnedNpcs().stream()) + .filter(filter); + //@formatter:on + } + /** * Spawn NPCs from group (defined in XML template) into instance world. * @param name name of group which should be spawned diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java index 601777a7a8..5e367ba77b 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java @@ -23,6 +23,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; import java.util.List; +import java.util.Objects; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -277,6 +278,7 @@ public class PcInventory extends Inventory return _items.values().stream() .filter(i -> i.isAvailable(getOwner(), false, false)) .map(tradeList::adjustAvailableItem) + .filter(Objects::nonNull) .collect(Collectors.toCollection(LinkedList::new)); //@formatter:on } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java index 6a43273a0b..49f470e282 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java @@ -17,6 +17,7 @@ package com.l2jmobius.gameserver.model.items; import java.util.Collection; +import java.util.Objects; import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; @@ -70,6 +71,7 @@ public class L2WarehouseItem public L2WarehouseItem(L2ItemInstance item) { + Objects.requireNonNull(item); _item = item.getItem(); _object = item.getObjectId(); _count = item.getCount(); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java index 8c665fad74..f9a9b9e7b0 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java @@ -2132,6 +2132,11 @@ public final class L2ItemInstance extends L2Object public void applySpecialAbilities() { + if (!isEquipped()) + { + return; + } + _ensoulOptions.values().forEach(this::applySpecialAbility); _ensoulSpecialOptions.values().forEach(this::applySpecialAbility); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/AbnormalType.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/AbnormalType.java index 22c517e796..2a668a6a19 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/AbnormalType.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/AbnormalType.java @@ -220,6 +220,8 @@ public enum AbnormalType CLAN_TEAMWORK(-1), SONG_OF_ARCHERY(-1), DANCE_OF_SAGE(-1), + SONG_WEAPON(-1), // TODO: need find proper name + HEAL_RESISTANCE(-1), // TODO: need find proper name AB_HAWK_EYE(0), ALL_ATTACK_DOWN(1), ALL_ATTACK_UP(2), diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/CommonSkill.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/CommonSkill.java index 1797581063..cc2846bd84 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/CommonSkill.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/CommonSkill.java @@ -24,7 +24,6 @@ import com.l2jmobius.gameserver.model.holders.SkillHolder; */ public enum CommonSkill { - SWEEPER(42, 1), RAID_CURSE(4215, 1), RAID_CURSE2(4515, 1), SEAL_OF_RULER(246, 1), @@ -58,7 +57,8 @@ public enum CommonSkill HAIR_ACCESSORY_SET(17192, 1), ALCHEMY_CUBE(17943, 1), ALCHEMY_CUBE_RANDOM_SUCCESS(17966, 1), - PET_SWITCH_STANCE(6054, 1); + PET_SWITCH_STANCE(6054, 1), + WEIGHT_PENALTY(4270, 1); private final SkillHolder _holder; @@ -74,7 +74,7 @@ public enum CommonSkill public int getLevel() { - return _holder.getSkillLvl(); + return _holder.getSkillLevel(); } public Skill getSkill() diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java index 18c19ffce7..30d70a1b7a 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java @@ -32,11 +32,13 @@ import java.util.stream.Collectors; import com.l2jmobius.Config; import com.l2jmobius.commons.util.Rnd; +import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; import com.l2jmobius.gameserver.data.xml.impl.SkillData; import com.l2jmobius.gameserver.data.xml.impl.SkillTreesData; import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.BasicProperty; import com.l2jmobius.gameserver.enums.MountType; +import com.l2jmobius.gameserver.enums.NextActionType; import com.l2jmobius.gameserver.enums.ShotType; import com.l2jmobius.gameserver.handler.AffectScopeHandler; import com.l2jmobius.gameserver.handler.IAffectScopeHandler; @@ -62,7 +64,6 @@ import com.l2jmobius.gameserver.model.stats.BasicPropertyResist; import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.stats.TraitType; import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; public final class Skill implements IIdentifiable @@ -73,6 +74,8 @@ public final class Skill implements IIdentifiable private final int _id; /** Skill level. */ private final int _level; + /** Skill sub level. */ + private final int _subLevel; /** Custom skill ID displayed by the client. */ private final int _displayId; /** Custom skill level displayed by the client. */ @@ -120,7 +123,7 @@ public final class Skill implements IIdentifiable private final int _hitTime; // private final int _skillInterruptTime; private final int _coolTime; - private final int _reuseHashCode; + private final long _reuseHashCode; private final int _reuseDelay; private final int _reuseDelayGroup; @@ -141,7 +144,7 @@ public final class Skill implements IIdentifiable private final int[] _affectLimit = new int[3]; // TODO: Third value is unknown... find it out! private final int[] _affectHeight = new int[2]; - private final boolean _nextActionIsAttack; + private final NextActionType _nextAction; private final boolean _removedOnAnyActionExceptMove; private final boolean _removedOnDamage; @@ -163,10 +166,6 @@ public final class Skill implements IIdentifiable private final Map> _conditionLists = new EnumMap<>(SkillConditionScope.class); private final Map> _effectLists = new EnumMap<>(EffectScope.class); - // Flying support - private final FlyType _flyType; - private final int _flyRadius; - private final boolean _isDebuff; private final boolean _isSuicideAttack; @@ -210,6 +209,7 @@ public final class Skill implements IIdentifiable { _id = set.getInt(".id"); _level = set.getInt(".level"); + _subLevel = set.getInt(".subLevel", 0); _refId = set.getInt(".referenceId", 0); _displayId = set.getInt(".displayId", _id); _displayLevel = set.getInt(".displayLevel", _level); @@ -268,7 +268,7 @@ public final class Skill implements IIdentifiable } _reuseDelayGroup = set.getInt("reuseDelayGroup", -1); - _reuseHashCode = SkillData.getSkillHashCode(_reuseDelayGroup > 0 ? _reuseDelayGroup : _id, _level); + _reuseHashCode = SkillData.getSkillHashCode(_reuseDelayGroup > 0 ? _reuseDelayGroup : _id, _level, _subLevel); _targetType = set.getEnum("targetType", TargetType.class, TargetType.SELF); _affectScope = set.getEnum("affectScope", AffectScope.class, AffectScope.SINGLE); @@ -357,7 +357,7 @@ public final class Skill implements IIdentifiable _minChance = set.getInt("minChance", Config.MIN_ABNORMAL_STATE_SUCCESS_RATE); _maxChance = set.getInt("maxChance", Config.MAX_ABNORMAL_STATE_SUCCESS_RATE); - _nextActionIsAttack = set.getBoolean("nextActionAttack", false); + _nextAction = set.getEnum("nextAction", NextActionType.class, NextActionType.NONE); _removedOnAnyActionExceptMove = set.getBoolean("removedOnAnyActionExceptMove", false); _removedOnDamage = set.getBoolean("removedOnDamage", false); @@ -378,9 +378,6 @@ public final class Skill implements IIdentifiable _isTriggeredSkill = set.getBoolean("isTriggeredSkill", false); _effectPoint = set.getInt("effectPoint", 0); - _flyType = set.getEnum("flyType", FlyType.class, null); - _flyRadius = set.getInt("flyRadius", 0); - _canBeDispelled = set.getBoolean("canBeDispelled", true); _excludedFromCheck = set.getBoolean("excludedFromCheck", false); @@ -618,12 +615,12 @@ public final class Skill implements IIdentifiable } /** - * Return true if character should attack target after skill + * Return character action after cast * @return */ - public boolean nextActionIsAttack() + public NextActionType getNextAction() { - return _nextActionIsAttack; + return _nextAction; } /** @@ -721,6 +718,14 @@ public final class Skill implements IIdentifiable return _level; } + /** + * @return Returns the sub level. + */ + public int getSubLevel() + { + return _subLevel; + } + /** * @return isMagic integer value from the XML. */ @@ -817,7 +822,7 @@ public final class Skill implements IIdentifiable return _reuseDelayGroup; } - public int getReuseHashCode() + public long getReuseHashCode() { return _reuseHashCode; } @@ -933,6 +938,11 @@ public final class Skill implements IIdentifiable return _operateType.isContinuous() || isSelfContinuous(); } + public boolean isFlyType() + { + return _operateType.isFlyType(); + } + public boolean isSelfContinuous() { return _operateType.isSelfContinuous(); @@ -953,6 +963,11 @@ public final class Skill implements IIdentifiable return _operateType.isSynergy(); } + public SkillOperateType getOperateType() + { + return _operateType; + } + /** * Verify if the skill is a transformation skill. * @return {@code true} if the skill is a transformation, {@code false} otherwise @@ -1016,16 +1031,6 @@ public final class Skill implements IIdentifiable return _soulMaxConsume; } - public FlyType getFlyType() - { - return _flyType; - } - - public int getFlyRadius() - { - return _flyRadius; - } - public boolean isStayAfterDeath() { return _stayAfterDeath || isIrreplacableBuff() || isNecessaryToggle(); @@ -1051,7 +1056,7 @@ public final class Skill implements IIdentifiable return false; } - return checkConditions(SkillConditionScope.GENERAL, activeChar, object); + return checkConditions(SkillConditionScope.GENERAL, activeChar, object) && checkConditions(SkillConditionScope.TARGET, activeChar, object); } /** @@ -1482,7 +1487,7 @@ public final class Skill implements IIdentifiable @Override public String toString() { - return "Skill " + _name + "(" + _id + "," + _level + ")"; + return "Skill " + _name + "(" + _id + "," + _level + "," + _subLevel + ")"; } /** @@ -1669,7 +1674,7 @@ public final class Skill implements IIdentifiable // If character is double casting, return double cast skill. if ((getDoubleCastSkill() > 0) && activeChar.isAffected(EffectFlag.DOUBLE_CAST)) { - return SkillData.getInstance().getSkill(getDoubleCastSkill(), getLevel()); + return SkillData.getInstance().getSkill(getDoubleCastSkill(), getLevel(), getSubLevel()); } // Default toggle group ID, assume nothing attached. @@ -1699,7 +1704,7 @@ public final class Skill implements IIdentifiable return null; } - return SkillData.getInstance().getSkill(attachedSkill.getSkillId(), getLevel()); + return SkillData.getInstance().getSkill(attachedSkill.getSkillId(), getLevel(), getSubLevel()); } public boolean canDoubleCast() @@ -1774,4 +1779,9 @@ public final class Skill implements IIdentifiable { return _magicCriticalRate; } + + public boolean isEnchantable() + { + return EnchantSkillGroupsData.getInstance().isEnchantable(this); + } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java index 7a82817cb2..28b84da7e4 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -29,15 +29,18 @@ import java.util.logging.Logger; import com.l2jmobius.Config; import com.l2jmobius.commons.util.Rnd; +import com.l2jmobius.gameserver.GeoData; import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.ai.CtrlEvent; import com.l2jmobius.gameserver.ai.CtrlIntention; import com.l2jmobius.gameserver.data.xml.impl.ActionData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.ItemSkillType; +import com.l2jmobius.gameserver.enums.NextActionType; import com.l2jmobius.gameserver.enums.StatusUpdateType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2World; +import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.PcCondOverride; import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Character; @@ -65,6 +68,7 @@ import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.ExRotation; import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation; +import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType; import com.l2jmobius.gameserver.network.serverpackets.MagicSkillCanceld; import com.l2jmobius.gameserver.network.serverpackets.MagicSkillLaunched; import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse; @@ -352,10 +356,9 @@ public class SkillCaster implements Runnable _targets = _skill.getTargetsAffected(caster, target); // Finish flying by setting the target location after picking targets. Packet is sent before MagicSkillLaunched. - if (_skill.getFlyType() != null) + if (_skill.isFlyType()) { - caster.broadcastPacket(new FlyToLocation(caster, target, _skill.getFlyType())); - caster.setXYZ(target.getX(), target.getY(), target.getZ()); + handleSkillFly(caster, target); } // Display animation of launching skill upon targets. @@ -546,7 +549,7 @@ public class SkillCaster implements Runnable ((L2Character) obj).getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, caster); } } - else if (obj.isMonster() || (obj.isPlayable() && ((obj.getActingPlayer().getPvpFlag() > 0) || (obj.getActingPlayer().getReputation() < 0)))) + else if (((skill.getEffectPoint() > 0) && obj.isMonster()) || (obj.isPlayable() && ((obj.getActingPlayer().getPvpFlag() > 0) || (obj.getActingPlayer().getReputation() < 0)))) { // Supporting players or monsters result in pvpflag. player.updatePvPStatus(); @@ -645,11 +648,18 @@ public class SkillCaster implements Runnable // Attack target after skill use // TODO: This shouldnt be here. If skill condition fail, you still go autoattack. This doesn't happen if skill is in cooldown though. - if ((_skill.nextActionIsAttack()) && (target != null) && (target != caster) && target.canBeAttacked()) + if ((_skill.getNextAction() != NextActionType.NONE) && (target != null) && (target != caster) && target.canBeAttacked()) { - if ((caster.getAI().getNextIntention() == null) || (caster.getAI().getNextIntention().getCtrlIntention() != CtrlIntention.AI_INTENTION_MOVE_TO)) + if ((caster.getAI().getIntention() == null) || (caster.getAI().getIntention() != CtrlIntention.AI_INTENTION_MOVE_TO)) { - caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target); + if (_skill.getNextAction() == NextActionType.ATTACK) + { + caster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target); + } + else if (_skill.getNextAction() == NextActionType.CAST) + { + caster.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, _skill, target, _item, false, false); + } } } } @@ -800,7 +810,7 @@ public class SkillCaster implements Runnable return false; } - if ((skill == null) || caster.isSkillDisabled(skill) || (((skill.getFlyRadius() > 0) || (skill.getFlyType() != null)) && caster.isMovementDisabled())) + if ((skill == null) || caster.isSkillDisabled(skill) || ((skill.isFlyType() && caster.isMovementDisabled()))) { caster.sendPacket(ActionFailed.STATIC_PACKET); return false; @@ -923,4 +933,73 @@ public class SkillCaster implements Runnable return true; } + + private void handleSkillFly(L2Character creature, L2Object target) + { + int x = 0; + int y = 0; + int z = 0; + FlyType flyType = FlyType.CHARGE; + switch (_skill.getOperateType()) + { + case DA4: + case DA5: + { + final double course = _skill.getOperateType() == SkillOperateType.DA4 ? Math.toRadians(270) : Math.toRadians(90); + final double radian = Math.toRadians(Util.convertHeadingToDegree(target.getHeading())); + double nRadius = creature.getCollisionRadius(); + if (target.isCharacter()) + { + nRadius += ((L2Character) target).getCollisionRadius(); + } + x = target.getX() + (int) (Math.cos(Math.PI + radian + course) * nRadius); + y = target.getY() + (int) (Math.sin(Math.PI + radian + course) * nRadius); + z = target.getZ(); + break; + } + case DA3: + { + flyType = FlyType.WARP_BACK; + final double radian = Math.toRadians(Util.convertHeadingToDegree(creature.getHeading())); + x = creature.getX() + (int) (Math.cos(Math.PI + radian) * _skill.getCastRange()); + y = creature.getY() + (int) (Math.sin(Math.PI + radian) * _skill.getCastRange()); + z = creature.getZ(); + break; + } + case DA2: + case DA1: + { + if (creature == target) + { + final double course = Math.toRadians(180); + final double radian = Math.toRadians(Util.convertHeadingToDegree(creature.getHeading())); + x = creature.getX() + (int) (Math.cos(Math.PI + radian + course) * _skill.getCastRange()); + y = creature.getY() + (int) (Math.sin(Math.PI + radian + course) * _skill.getCastRange()); + z = creature.getZ(); + } + else + { + final int dx = target.getX() - creature.getX(); + final int dy = target.getY() - creature.getY(); + final double distance = Math.sqrt((dx * dx) + (dy * dy)); + double nRadius = creature.getCollisionRadius(); + if (target.isCharacter()) + { + nRadius += ((L2Character) target).getCollisionRadius(); + } + x = (int) (target.getX() - (nRadius * (dx / distance))); + y = (int) (target.getY() - (nRadius * (dy / distance))); + z = target.getZ(); + } + break; + } + } + + final Location destination = GeoData.getInstance().moveCheck(creature.getX(), creature.getY(), creature.getZ(), x, y, z, creature.getInstanceWorld()); + + creature.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); + creature.broadcastPacket(new FlyToLocation(creature, destination, flyType, 0, 0, 333)); + creature.setXYZ(destination); + creature.revalidateZone(true); + } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/SkillOperateType.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/SkillOperateType.java index eb57da17aa..3f4a80a0fa 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/SkillOperateType.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/skills/SkillOperateType.java @@ -45,7 +45,7 @@ public enum SkillOperateType A2, /** - * Active Skill with "Instant effect + Continuous effect" + * Active Skill with "Instant effect for target + Continuous effect for self" */ A3, @@ -94,6 +94,16 @@ public enum SkillOperateType */ DA3, + /** + * Directional Active Skill with "Left Continuous effect". + */ + DA4, + + /** + * Directional Active Skill with "Right Continuous effect". + */ + DA5, + /** * Passive Skill. */ @@ -132,6 +142,8 @@ public enum SkillOperateType case CA5: case DA1: case DA2: + case DA4: + case DA5: return true; default: return false; @@ -151,6 +163,8 @@ public enum SkillOperateType case A5: case A6: case DA2: + case DA4: + case DA5: return true; default: return false; @@ -234,4 +248,19 @@ public enum SkillOperateType { return (this == A6); } + + public boolean isFlyType() + { + switch (this) + { + case DA1: + case DA2: + case DA3: + case DA4: + case DA5: + return true; + default: + return false; + } + } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java index d73fa8ec77..9018f8548b 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/NpcSpawnTemplate.java @@ -274,6 +274,11 @@ public class NpcSpawnTemplate implements Cloneable, IParameterized return null; } + public void spawn() + { + spawn(null); + } + public void spawn(Instance instance) { try diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/SpawnGroup.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/SpawnGroup.java index af01dfc303..f3974f0cbd 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/SpawnGroup.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/SpawnGroup.java @@ -106,6 +106,11 @@ public class SpawnGroup implements Cloneable, ITerritorized return _spawns.stream().filter(spawn -> spawn.getId() == id).collect(Collectors.toList()); } + public void spawnAll() + { + spawnAll(null); + } + public void spawnAll(Instance instance) { _spawns.forEach(template -> template.spawn(instance)); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/SpawnTemplate.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/SpawnTemplate.java index 26bf2c2b8f..7e98de4033 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/SpawnTemplate.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/spawns/SpawnTemplate.java @@ -156,6 +156,11 @@ public class SpawnTemplate implements Cloneable, ITerritorized, IParameterized group.spawnAll(instance)); } + public void spawnAll() + { + spawnAll(null); + } + public void spawnAll(Instance instance) { spawn(SpawnGroup::isSpawningByDefault, instance); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/Formulas.java index 22cc98afbc..92ef9496f8 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/Formulas.java @@ -112,7 +112,7 @@ public final class Formulas final double pvpPveMod = calculatePvpPveBonus(attacker, target, skill, true); // Initial damage - final double ssmod = ss ? attacker.getStat().getValue(Stats.SHOTS_BONUS, 2) : 1; // 2.04 for dual weapon? + final double ssmod = ss ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1; // 2.04 for dual weapon? final double cdMult = criticalMod * (((criticalPositionMod - 1) / 2) + 1) * (((criticalVulnMod - 1) / 2) + 1); final double cdPatk = criticalAddMod + criticalAddVuln; final Position position = Position.getPosition(attacker, target); @@ -156,7 +156,7 @@ public final class Formulas } // Bonus Spirit shot - final double shotsBonus = (sps || bss) ? attacker.getStat().getValue(Stats.SHOTS_BONUS, bss ? 4 : 2) : 1; + final double shotsBonus = bss ? (4 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : sps ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1; final double critMod = mcrit ? (2 * calcCritDamage(attacker, target, skill)) : 1; // TODO not really a proper way... find how it works then implement. // damage += attacker.getStat().getValue(Stats.MAGIC_CRIT_DMG_ADD, 0); // Trait, elements diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/Stats.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/Stats.java index c804095d35..b09b3e01f8 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/Stats.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/Stats.java @@ -46,6 +46,8 @@ import com.l2jmobius.gameserver.model.stats.finalizers.RandomDamageFinalizer; import com.l2jmobius.gameserver.model.stats.finalizers.RegenCPFinalizer; import com.l2jmobius.gameserver.model.stats.finalizers.RegenHPFinalizer; import com.l2jmobius.gameserver.model.stats.finalizers.RegenMPFinalizer; +import com.l2jmobius.gameserver.model.stats.finalizers.ShieldDefenceFinalizer; +import com.l2jmobius.gameserver.model.stats.finalizers.ShieldDefenceRateFinalizer; import com.l2jmobius.gameserver.model.stats.finalizers.ShotsBonusFinalizer; import com.l2jmobius.gameserver.model.stats.finalizers.SpeedFinalizer; import com.l2jmobius.gameserver.model.stats.finalizers.VampiricChanceFinalizer; @@ -77,7 +79,7 @@ public enum Stats PHYSICAL_ATTACK_SPEED("pAtkSpd", new PAttackSpeedFinalizer()), MAGIC_ATTACK_SPEED("mAtkSpd", new MAttackSpeedFinalizer()), // Magic Skill Casting Time Rate ATK_REUSE("atkReuse"), // Bows Hits Reuse Rate - SHIELD_DEFENCE("sDef"), + SHIELD_DEFENCE("sDef", new ShieldDefenceFinalizer()), CRITICAL_DAMAGE("cAtk"), CRITICAL_DAMAGE_ADD("cAtkAdd"), // this is another type for special critical damage mods - vicious stance, critical power and critical damage SA HATE_ATTACK("attackHate"), @@ -108,7 +110,7 @@ public enum Stats CRITICAL_DAMAGE_SKILL("cAtkSkill"), CRITICAL_DAMAGE_SKILL_ADD("cAtkSkillAdd"), MAGIC_CRITICAL_DAMAGE_ADD("mCritPowerAdd"), - SHIELD_DEFENCE_RATE("rShld"), + SHIELD_DEFENCE_RATE("rShld", new ShieldDefenceRateFinalizer()), CRITICAL_RATE("rCrit", new PCriticalRateFinalizer(), MathUtil::add, MathUtil::add, null, 1d), CRITICAL_RATE_SKILL("rCritSkill", Stats::defaultValue, MathUtil::add, MathUtil::add, null, 1d), MAGIC_CRITICAL_RATE("mCritRate", new MCritRateFinalizer()), diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/PEvasionRateFinalizer.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/PEvasionRateFinalizer.java index d7b887257a..210537fb90 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/PEvasionRateFinalizer.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/PEvasionRateFinalizer.java @@ -20,9 +20,7 @@ import java.util.Optional; import com.l2jmobius.Config; import com.l2jmobius.gameserver.model.actor.L2Character; -import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.items.L2Item; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.stats.IStatsFunction; import com.l2jmobius.gameserver.model.stats.Stats; @@ -37,14 +35,6 @@ public class PEvasionRateFinalizer implements IStatsFunction throwIfPresent(base); double baseValue = calcWeaponPlusBaseValue(creature, stat); - final Inventory inv = creature.getInventory(); - if (inv != null) - { - for (L2ItemInstance item : inv.getPaperdollItems(L2ItemInstance::isEquipped)) - { - baseValue += item.getItem().getStats(stat, 0); - } - } final int level = creature.getLevel(); if (creature.isPlayer()) diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/ShieldDefenceFinalizer.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/ShieldDefenceFinalizer.java new file mode 100644 index 0000000000..9f2b3dd191 --- /dev/null +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/ShieldDefenceFinalizer.java @@ -0,0 +1,38 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.stats.finalizers; + +import java.util.Optional; + +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.stats.IStatsFunction; +import com.l2jmobius.gameserver.model.stats.Stats; + +/** + * @author Sdw + */ +public class ShieldDefenceFinalizer implements IStatsFunction +{ + @Override + public double calc(L2Character creature, Optional base, Stats stat) + { + throwIfPresent(base); + + double baseValue = calcWeaponPlusBaseValue(creature, stat); + return Stats.defaultValue(creature, stat, baseValue); + } +} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/ShieldDefenceRateFinalizer.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/ShieldDefenceRateFinalizer.java new file mode 100644 index 0000000000..c97237a913 --- /dev/null +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/stats/finalizers/ShieldDefenceRateFinalizer.java @@ -0,0 +1,38 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.stats.finalizers; + +import java.util.Optional; + +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.stats.IStatsFunction; +import com.l2jmobius.gameserver.model.stats.Stats; + +/** + * @author Sdw + */ +public class ShieldDefenceRateFinalizer implements IStatsFunction +{ + @Override + public double calc(L2Character creature, Optional base, Stats stat) + { + throwIfPresent(base); + + double baseValue = calcWeaponPlusBaseValue(creature, stat); + return Stats.defaultValue(creature, stat, baseValue); + } +} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java index ce180d0687..24ec72a2b9 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -54,6 +54,8 @@ public class PlayerVariables extends AbstractVariables public static final String ABILITY_POINTS_DUAL_CLASS = "ABILITY_POINTS_DUAL_CLASS"; public static final String ABILITY_POINTS_USED_MAIN_CLASS = "ABILITY_POINTS_USED"; public static final String ABILITY_POINTS_USED_DUAL_CLASS = "ABILITY_POINTS_DUAL_CLASS_USED"; + public static final String REVELATION_SKILL_1_DUAL_CLASS = "DualclassRevelationSkill1"; + public static final String REVELATION_SKILL_2_DUAL_CLASS = "DualclassRevelationSkill2"; public static final String EXTEND_DROP = "EXTEND_DROP"; private final int _objectId; diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/zone/ZoneId.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/zone/ZoneId.java index 51203ca48a..d3e223d4e3 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/zone/ZoneId.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/zone/ZoneId.java @@ -46,7 +46,8 @@ public enum ZoneId NO_ITEM_DROP, NO_RESTART, SAYUNE, - FISHING; + FISHING, + UNDYING; public static int getZoneCount() { diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2UndyingZone.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2UndyingZone.java new file mode 100644 index 0000000000..0d2804bb65 --- /dev/null +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2UndyingZone.java @@ -0,0 +1,45 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.zone.type; + +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.zone.L2ZoneType; +import com.l2jmobius.gameserver.model.zone.ZoneId; + +/** + * An Undying Zone + * @author UnAfraid + */ +public class L2UndyingZone extends L2ZoneType +{ + public L2UndyingZone(int id) + { + super(id); + } + + @Override + protected void onEnter(L2Character character) + { + character.setInsideZone(ZoneId.UNDYING, true); + } + + @Override + protected void onExit(L2Character character) + { + character.setInsideZone(ZoneId.UNDYING, false); + } +} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/client/ExIncomingPackets.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/client/ExIncomingPackets.java index a5434ae139..6c3f5c7dee 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/client/ExIncomingPackets.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/client/ExIncomingPackets.java @@ -325,6 +325,7 @@ public enum ExIncomingPackets implements IIncomingPackets REQUEST_ABILITY_WND_OPEN(0xEE, RequestAbilityWndOpen::new, ConnectionState.IN_GAME), REQUEST_ABILITY_WND_CLOSE(0xEF, RequestAbilityWndClose::new, ConnectionState.IN_GAME), EX_PC_CAFE_REQUEST_OPEN_WINDOW_WITHOUT_NPC(0xF0, ExPCCafeRequestOpenWindowWithoutNPC::new, ConnectionState.IN_GAME), + REQUEST_LUCKY_GAME_START_INFO(0xF1, null, ConnectionState.IN_GAME), REQUEST_LUCKY_GAME_PLAY(0xF2, null, ConnectionState.IN_GAME), NOTIFY_TRAINING_ROOM_END(0xF3, null, ConnectionState.IN_GAME), REQUEST_NEW_ENCHANT_PUSH_ONE(0xF4, RequestNewEnchantPushOne::new, ConnectionState.IN_GAME), diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index 2c14fb289c..9b3683a71d 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -341,11 +341,6 @@ public final class CharacterCreate implements IClientIncomingPacket } } - for (L2SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(newChar.getRace())) - { - newChar.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true); - } - for (L2SkillLearn skill : SkillTreesData.getInstance().getAvailableSkills(newChar, newChar.getClassId(), false, true)) { if (Config.DEBUG) diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 09330345d5..e35d319691 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -59,7 +59,6 @@ import com.l2jmobius.gameserver.model.variables.PlayerVariables; import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.client.L2GameClient; -import com.l2jmobius.gameserver.network.serverpackets.AcquireSkillList; import com.l2jmobius.gameserver.network.serverpackets.CreatureSay; import com.l2jmobius.gameserver.network.serverpackets.Die; import com.l2jmobius.gameserver.network.serverpackets.EtcStatusUpdate; @@ -336,9 +335,6 @@ public class EnterWorld implements IClientIncomingPacket // Send Skill list activeChar.sendSkillList(); - // Send acquirable skill list - activeChar.sendPacket(new AcquireSkillList(activeChar)); - // Send EtcStatusUpdate activeChar.sendPacket(new EtcStatusUpdate(activeChar)); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestAcquireSkill.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestAcquireSkill.java index bbe1cc9460..9fce0be749 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestAcquireSkill.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestAcquireSkill.java @@ -47,7 +47,6 @@ import com.l2jmobius.gameserver.model.variables.PlayerVariables; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.client.L2GameClient; import com.l2jmobius.gameserver.network.serverpackets.AcquireSkillDone; -import com.l2jmobius.gameserver.network.serverpackets.AcquireSkillList; import com.l2jmobius.gameserver.network.serverpackets.ExAcquirableSkillListByClass; import com.l2jmobius.gameserver.network.serverpackets.ExAlchemySkillList; import com.l2jmobius.gameserver.network.serverpackets.ExBasicActionList; @@ -72,8 +71,8 @@ public final class RequestAcquireSkill implements IClientIncomingPacket private static final String[] DUALCLASS_REVELATION_VAR_NAMES = { - "DualclassRevelationSkill1", - "DualclassRevelationSkill2" + PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS, + PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS }; private int _id; @@ -594,7 +593,7 @@ public final class RequestAcquireSkill implements IClientIncomingPacket { for (SkillHolder skill : skillLearn.getPreReqSkills()) { - if (player.getSkillLevel(skill.getSkillId()) != skill.getSkillLvl()) + if (player.getSkillLevel(skill.getSkillId()) != skill.getSkillLevel()) { if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId()) { @@ -697,7 +696,7 @@ public final class RequestAcquireSkill implements IClientIncomingPacket player.sendPacket(new ExBasicActionList(ExBasicActionList.DEFAULT_ACTION_LIST)); player.sendSkillList(skill.getId()); - player.updateShortCuts(_id, _level); + player.updateShortCuts(_id, _level, 0); showSkillList(trainer, player); // If skill is expand type then sends packet: @@ -724,12 +723,6 @@ public final class RequestAcquireSkill implements IClientIncomingPacket */ private void showSkillList(L2Npc trainer, L2PcInstance player) { - if ((_skillType == AcquireSkillType.TRANSFORM) || (_skillType == AcquireSkillType.TRANSFER)) - { - // Managed in Datapack. - return; - } - if (_skillType == AcquireSkillType.SUBCLASS) { showSubSkillList(player); @@ -742,10 +735,6 @@ public final class RequestAcquireSkill implements IClientIncomingPacket { L2FishermanInstance.showFishSkillList(player); } - else - { - player.sendPacket(new AcquireSkillList(player)); - } } /** diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestDispel.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestDispel.java index d357b7e1a6..fbaa6090f5 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestDispel.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestDispel.java @@ -33,13 +33,15 @@ public class RequestDispel implements IClientIncomingPacket private int _objectId; private int _skillId; private int _skillLevel; + private int _skillSubLevel; @Override public boolean read(L2GameClient client, PacketReader packet) { _objectId = packet.readD(); _skillId = packet.readD(); - _skillLevel = packet.readD(); + _skillLevel = packet.readH(); + _skillSubLevel = packet.readH(); return true; } @@ -55,7 +57,7 @@ public class RequestDispel implements IClientIncomingPacket { return; } - final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLevel); + final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLevel, _skillSubLevel); if (skill == null) { return; @@ -84,9 +86,10 @@ public class RequestDispel implements IClientIncomingPacket pet.stopSkillEffects(true, _skillId); } - if (activeChar.hasServitor(_objectId)) + final L2Summon servitor = activeChar.getServitor(_objectId); + if (servitor != null) { - activeChar.removeServitor(_objectId); + servitor.stopSkillEffects(true, _skillId); } } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkill.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkill.java index 5af437d9c7..71c571b77f 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkill.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkill.java @@ -17,7 +17,6 @@ package com.l2jmobius.gameserver.network.clientpackets; import java.util.logging.Level; -import java.util.logging.LogRecord; import java.util.logging.Logger; import com.l2jmobius.Config; @@ -25,11 +24,12 @@ import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; import com.l2jmobius.gameserver.data.xml.impl.SkillData; -import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder; -import com.l2jmobius.gameserver.model.L2EnchantSkillLearn; +import com.l2jmobius.gameserver.enums.CategoryType; +import com.l2jmobius.gameserver.enums.PrivateStoreType; +import com.l2jmobius.gameserver.enums.SkillEnchantType; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.itemcontainer.Inventory; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; +import com.l2jmobius.gameserver.model.holders.EnchantSkillHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.client.L2GameClient; @@ -37,43 +37,41 @@ import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillInfo; import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillInfoDetail; import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillResult; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import com.l2jmobius.gameserver.network.serverpackets.UserInfo; /** - * Format (ch) dd c: (id) 0xD0 h: (subid) 0x06 d: skill id d: skill lvl * @author -Wooden- */ public final class RequestExEnchantSkill implements IClientIncomingPacket { - private static final Logger _logEnchant = Logger.getLogger("enchant.skills"); - - private int _type; // enchant type: 0 - normal, 1 - safe, 2 - untrain, 3 - change route, 4 - 100% + private static final Logger LOGGER = Logger.getLogger(RequestExEnchantSkill.class.getName()); + private static final Logger LOGGER_ENCHANT = Logger.getLogger("enchant.skills"); + private SkillEnchantType _type; private int _skillId; private int _skillLvl; - private int _fullLvl; + private int _skillSubLvl; @Override public boolean read(L2GameClient client, PacketReader packet) { - _type = packet.readD(); + final int type = packet.readD(); + if ((type < 0) || (type >= SkillEnchantType.values().length)) + { + LOGGER.log(Level.WARNING, "Client: " + client + " send incorrect type " + type + " on packet: " + getClass().getSimpleName()); + return false; + } + + _type = SkillEnchantType.values()[type]; _skillId = packet.readD(); - _fullLvl = packet.readD(); - if (_fullLvl < 100) - { - _skillLvl = _fullLvl; - } - else - { - _skillLvl = _fullLvl >> 16; - } + _skillLvl = packet.readH(); + _skillSubLvl = packet.readH(); return true; } @Override public void run(L2GameClient client) { - if ((_skillId <= 0) || (_skillLvl <= 0)) + if ((_skillId <= 0) || (_skillLvl <= 0) || (_skillSubLvl < 0)) { return; } @@ -84,487 +82,177 @@ public final class RequestExEnchantSkill implements IClientIncomingPacket return; } - if (player.getClassId().level() < 3) // requires to have 3rd class quest completed + if (!player.isInCategory(CategoryType.AWAKEN_GROUP)) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_IN_THIS_CLASS_YOU_CAN_USE_CORRESPONDING_FUNCTION_WHEN_COMPLETING_THE_THIRD_CLASS_CHANGE); - return; - } - - if (player.getLevel() < 76) - { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_ON_THIS_LEVEL_YOU_CAN_USE_THE_CORRESPONDING_FUNCTION_ON_LEVELS_HIGHER_THAN_LV_76); return; } if (!player.isAllowedToEnchantSkills()) { - player.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_IN_THIS_STATE_YOU_CAN_ENHANCE_SKILLS_WHEN_NOT_IN_BATTLE_AND_CANNOT_USE_THE_FUNCTION_WHILE_TRANSFORMED_IN_BATTLE_ON_A_MOUNT_OR_WHILE_THE_SKILL_IS_ON_COOLDOWN); return; } if (player.isSellingBuffs()) { - player.sendMessage("You cannot use the skill enhancing function while you selling buffs."); return; } - final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl); + if (player.isInOlympiadMode()) + { + return; + } + + if (player.getPrivateStoreType() != PrivateStoreType.NONE) + { + return; + } + + Skill skill = player.getKnownSkill(_skillId); if (skill == null) { return; } - final L2EnchantSkillLearn s = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_skillId); - if (s == null) + if (!skill.isEnchantable()) { return; } - final int _elvl = ((_skillLvl % 100) - 1) / 10; - if (_type == 0) // enchant - { - final EnchantSkillHolder esd = s.getEnchantSkillHolder(_skillLvl); - final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId); - if (beforeEnchantSkillLevel != s.getMinSkillLevel(_skillLvl)) - { - return; - } - - final int costMultiplier = EnchantSkillGroupsData.NORMAL_ENCHANT_COST_MULTIPLIER; - final int requiredSp = esd.getSpCost() * costMultiplier; - if (player.getSp() >= requiredSp) - { - final boolean usesBook = true; - final int reqItemId; - if (player.getClassId().level() == 3) - { - reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_OLD; - } - else if (_elvl == 0) - { - reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK; - } - else if (_elvl == 1) - { - reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V2; - } - else - { - reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V3; - } - final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId); - - if (Config.ES_SP_BOOK_NEEDED && usesBook && (spb == null)) - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - final int requiredAdena = esd.getAdenaCost() * costMultiplier; - if (player.getInventory().getAdena() < requiredAdena) - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - boolean check = player.getStat().removeExpAndSp(0, requiredSp, false); - if (Config.ES_SP_BOOK_NEEDED && usesBook) - { - check &= player.destroyItem("Consume", spb.getObjectId(), 1, player, true); - } - - check &= player.destroyItemByItemId("Consume", Inventory.ADENA_ID, requiredAdena, player, true); - if (!check) - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - // ok. Destroy ONE copy of the book - final int rate = esd.getRate(player); - if (Rnd.get(100) <= rate) - { - if (Config.LOG_SKILL_ENCHANTS) - { - final LogRecord record = new LogRecord(Level.INFO, "Success"); - record.setParameters(new Object[] - { - player, - skill, - spb, - rate - }); - record.setLoggerName("skill"); - _logEnchant.log(record); - } - - player.addSkill(skill, true); - player.sendPacket(ExEnchantSkillResult.valueOf(true)); - - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SKILL_ENCHANT_WAS_SUCCESSFUL_S1_HAS_BEEN_ENCHANTED); - sm.addSkillName(_skillId); - player.sendPacket(sm); - - if (Config.DEBUG) - { - _log.fine("Learned skill ID: " + _skillId + " Level: " + _skillLvl + " for " + requiredSp + " SP, " + requiredAdena + " Adena."); - } - } - else - { - if (player.getClassId().level() == 3) - { - player.addSkill(SkillData.getInstance().getSkill(_skillId, s.getBaseLevel()), true); - } - else - { - final int _clvl = ((((_skillLvl % 100) - 1) / 10) * 10) + ((_skillLvl / 1000) * 1000); - player.addSkill(SkillData.getInstance().getSkill(_skillId, _clvl), true); - } - player.sendPacket(SystemMessageId.SKILL_ENCHANT_FAILED_THE_SKILL_WILL_BE_INITIALIZED); - player.sendPacket(ExEnchantSkillResult.valueOf(false)); - - if (Config.LOG_SKILL_ENCHANTS) - { - final LogRecord record = new LogRecord(Level.INFO, "Fail"); - record.setParameters(new Object[] - { - player, - skill, - spb, - rate - }); - record.setLoggerName("skill"); - _logEnchant.log(record); - } - } - - player.sendPacket(new UserInfo(player)); - player.sendSkillList(); - final int afterEnchantSkillLevel = player.getSkillLevel(_skillId); - player.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel)); - player.sendPacket(new ExEnchantSkillInfoDetail(0, _skillId, afterEnchantSkillLevel + 1, player)); - player.updateShortCuts(_skillId, afterEnchantSkillLevel); - } - else - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_ENCHANT_THAT_SKILL); - } - } - else if (_type == 1) // safe enchant - { - final int costMultiplier = EnchantSkillGroupsData.SAFE_ENCHANT_COST_MULTIPLIER; - final int reqItemId; - if (player.getClassId().level() == 3) - { - reqItemId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_OLD; - } - else if (_elvl == 0) - { - reqItemId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK; - } - else if (_elvl == 1) - { - reqItemId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V2; - } - else - { - reqItemId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V3; - } - final EnchantSkillHolder esd = s.getEnchantSkillHolder(_skillLvl); - final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId); - if (beforeEnchantSkillLevel != s.getMinSkillLevel(_skillLvl)) - { - return; - } - - final int requiredSp = esd.getSpCost() * costMultiplier; - final int requireditems = esd.getAdenaCost() * costMultiplier; - final int rate = esd.getRate(player); - - if (player.getSp() >= requiredSp) - { - final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId); - if (spb == null) - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - if (player.getInventory().getAdena() < requireditems) - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - boolean check = player.getStat().removeExpAndSp(0, requiredSp, false); - check &= player.destroyItem("Consume", spb.getObjectId(), 1, player, true); - - check &= player.destroyItemByItemId("Consume", Inventory.ADENA_ID, requireditems, player, true); - - if (!check) - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - if (Rnd.get(100) <= rate) - { - if (Config.LOG_SKILL_ENCHANTS) - { - final LogRecord record = new LogRecord(Level.INFO, "Safe Success"); - record.setParameters(new Object[] - { - player, - skill, - spb, - rate - }); - record.setLoggerName("skill"); - _logEnchant.log(record); - } - - player.addSkill(skill, true); - - if (Config.DEBUG) - { - _log.fine("Learned skill ID: " + _skillId + " Level: " + _skillLvl + " for " + requiredSp + " SP, " + requireditems + " Adena."); - } - - player.sendPacket(ExEnchantSkillResult.valueOf(true)); - - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SKILL_ENCHANT_WAS_SUCCESSFUL_S1_HAS_BEEN_ENCHANTED); - sm.addSkillName(_skillId); - player.sendPacket(sm); - } - else - { - if (Config.LOG_SKILL_ENCHANTS) - { - final LogRecord record = new LogRecord(Level.INFO, "Safe Fail"); - record.setParameters(new Object[] - { - player, - skill, - spb, - rate - }); - record.setLoggerName("skill"); - _logEnchant.log(record); - } - - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SKILL_ENCHANT_FAILED_THE_SKILL_WILL_BE_INITIALIZED); - player.sendPacket(sm); - player.sendPacket(ExEnchantSkillResult.valueOf(false)); - } - - player.sendPacket(new UserInfo(player)); - player.sendSkillList(); - final int afterEnchantSkillLevel = player.getSkillLevel(_skillId); - player.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel)); - player.sendPacket(new ExEnchantSkillInfoDetail(1, _skillId, afterEnchantSkillLevel + 1, player)); - player.updateShortCuts(_skillId, afterEnchantSkillLevel); - } - else - { - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_ENCHANT_THAT_SKILL)); - } - } - else if (_type == 2) // untrain + + if (skill.getLevel() != _skillLvl) { return; } - else if (_type == 3) // change route + + if (skill.getSubLevel() > 0) { - final int reqItemId; - if (player.getClassId().level() == 3) + if (_type == SkillEnchantType.CHANGE) { - reqItemId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_OLD; + final int group1 = (_skillSubLvl % 1000); + final int group2 = (skill.getSubLevel() % 1000); + if (group1 != group2) + { + LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Client: " + client + " send incorrect sub level group: " + group1 + " expected: " + group2); + return; + } } - else if (_elvl == 0) - { - reqItemId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK; - } - else if (_elvl == 1) - { - reqItemId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V2; - } - else - { - reqItemId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V3; - } - - final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId); - if (beforeEnchantSkillLevel <= 1000) + else if ((skill.getSubLevel() + 1) != _skillSubLvl) { + LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Client: " + client + " send incorrect sub level: " + _skillSubLvl + " expected: " + skill.getSubLevel() + 1); return; } - - final int currentEnchantLevel = beforeEnchantSkillLevel % 1000; - if (currentEnchantLevel != (_skillLvl % 1000)) - { - return; - } - final EnchantSkillHolder esd = s.getEnchantSkillHolder(_skillLvl); - - final int requiredSp = esd.getSpCost(); - final int requireditems = esd.getAdenaCost(); - - if (player.getSp() >= requiredSp) - { - final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId); - if (Config.ES_SP_BOOK_NEEDED && (spb == null)) - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_SKILL_ROUTE_CHANGE); - return; - } - - if (player.getInventory().getAdena() < requireditems) - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - boolean check = player.getStat().removeExpAndSp(0, requiredSp, false); - if (Config.ES_SP_BOOK_NEEDED) - { - check &= player.destroyItem("Consume", spb.getObjectId(), 1, player, true); - } - - check &= player.destroyItemByItemId("Consume", Inventory.ADENA_ID, requireditems, player, true); - - if (!check) - { - player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - final int levelPenalty = Rnd.get(Math.min(4, currentEnchantLevel)); - _skillLvl -= levelPenalty; - if ((_skillLvl % 1000) == 0) - { - _skillLvl = s.getBaseLevel(); - } - - if (Config.LOG_SKILL_ENCHANTS) - { - final LogRecord record = new LogRecord(Level.INFO, "Route Change"); - record.setParameters(new Object[] - { - player, - skill, - spb - }); - record.setLoggerName("skill"); - _logEnchant.log(record); - } - - player.addSkill(SkillData.getInstance().getSkill(_skillId, _skillLvl), true); - player.sendPacket(ExEnchantSkillResult.valueOf(true)); - - if (Config.DEBUG) - { - _log.fine("Learned skill ID: " + _skillId + " Level: " + _skillLvl + " for " + requiredSp + " SP, " + requireditems + " Adena."); - } - - player.sendPacket(new UserInfo(player)); - - final SystemMessage sm; - if (levelPenalty == 0) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.ENCHANT_SKILL_ROUTE_CHANGE_WAS_SUCCESSFUL_LV_OF_ENCHANT_SKILL_S1_WILL_REMAIN); - sm.addSkillName(_skillId); - } - else - { - sm = SystemMessage.getSystemMessage(SystemMessageId.ENCHANT_SKILL_ROUTE_CHANGE_WAS_SUCCESSFUL_LV_OF_ENCHANT_SKILL_S1_HAS_BEEN_DECREASED_BY_S2); - sm.addSkillName(_skillId); - - if (_skillLvl > 1000) - { - sm.addInt(_skillLvl % 1000); - } - else - { - sm.addInt(0); - } - } - player.sendPacket(sm); - player.sendSkillList(); - final int afterEnchantSkillLevel = player.getSkillLevel(_skillId); - player.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel)); - player.sendPacket(new ExEnchantSkillInfoDetail(3, _skillId, afterEnchantSkillLevel, player)); - player.updateShortCuts(_skillId, afterEnchantSkillLevel); - } - else - { - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_ENCHANT_THAT_SKILL)); - } } - else if (_type == 4) // 100% enchant + + final EnchantSkillHolder enchantSkillHolder = EnchantSkillGroupsData.getInstance().getEnchantSkillHolder(_skillSubLvl % 1000); + + // Verify if player has all the ingredients + for (ItemHolder holder : enchantSkillHolder.getRequiredItems(_type)) { - final int reqItemId; - if (player.getClassId().level() == 3) - { - reqItemId = EnchantSkillGroupsData.IMMORTAL_SCROLL; - } - else if (_elvl == 0) - { - reqItemId = EnchantSkillGroupsData.IMMORTAL_SCROLL; - } - else if (_elvl == 1) - { - reqItemId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V2; - } - else - { - reqItemId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V3; - } - final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId); - if (beforeEnchantSkillLevel != s.getMinSkillLevel(_skillLvl)) - { - return; - } - - final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId); - if (spb == null) + if (player.getInventory().getInventoryItemCount(holder.getId(), 0) < holder.getCount()) { player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); return; } - - player.destroyItem("Consume", spb.getObjectId(), 1, player, true); - - if (Config.LOG_SKILL_ENCHANTS) - { - final LogRecord record = new LogRecord(Level.INFO, "100% Success"); - record.setParameters(new Object[] - { - player, - skill, - spb, - 100 - }); - record.setLoggerName("skill"); - _logEnchant.log(record); - } - - player.addSkill(skill, true); - - if (Config.DEBUG) - { - _log.fine("Learned skill ID: " + _skillId + " Level: " + _skillLvl + "."); - } - - player.sendPacket(ExEnchantSkillResult.valueOf(true)); - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SKILL_ENCHANT_WAS_SUCCESSFUL_S1_HAS_BEEN_ENCHANTED); - sm.addSkillName(_skillId); - player.sendPacket(sm); - player.sendPacket(new UserInfo(player)); - player.sendSkillList(); - final int afterEnchantSkillLevel = player.getSkillLevel(_skillId); - player.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel)); - player.sendPacket(new ExEnchantSkillInfoDetail(1, _skillId, afterEnchantSkillLevel + 1, player)); - player.updateShortCuts(_skillId, afterEnchantSkillLevel); } + + // Consume all ingredients + for (ItemHolder holder : enchantSkillHolder.getRequiredItems(_type)) + { + if (!player.destroyItemByItemId("Skill enchanting", holder.getId(), holder.getCount(), player, true)) + { + return; + } + } + + if (player.getSp() < enchantSkillHolder.getSp(_type)) + { + player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_ENCHANT_THAT_SKILL); + return; + } + + player.getStat().removeExpAndSp(0, enchantSkillHolder.getSp(_type), false); + + switch (_type) + { + case BLESSED: + case NORMAL: + case IMMORTAL: + { + if (Rnd.get(100) <= enchantSkillHolder.getChance(_type)) + { + final Skill enchantedSkill = SkillData.getInstance().getSkill(_skillId, _skillLvl, _skillSubLvl); + if (Config.LOG_SKILL_ENCHANTS) + { + LOGGER_ENCHANT.log(Level.INFO, "Success, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + enchantedSkill.getLevel() + " " + enchantedSkill.getSubLevel() + " - " + enchantedSkill.getName() + " (" + enchantedSkill.getId() + "), " + enchantSkillHolder.getChance(_type)); + } + player.addSkill(enchantedSkill, true); + + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SKILL_ENCHANT_WAS_SUCCESSFUL_S1_HAS_BEEN_ENCHANTED); + sm.addSkillName(_skillId); + player.sendPacket(sm); + + player.sendPacket(ExEnchantSkillResult.STATIC_PACKET_TRUE); + } + else + { + final int newSubLevel = skill.getSubLevel() > 0 ? ((skill.getSubLevel() - (skill.getSubLevel() % 1000)) + enchantSkillHolder.getEnchantFailLevel()) : 0; + final Skill enchantedSkill = SkillData.getInstance().getSkill(_skillId, _skillLvl, _type == SkillEnchantType.NORMAL ? newSubLevel : skill.getSubLevel()); + if (_type == SkillEnchantType.NORMAL) + { + player.addSkill(enchantedSkill, true); + player.sendPacket(SystemMessageId.SKILL_ENCHANT_FAILED_THE_SKILL_WILL_BE_INITIALIZED); + } + else if (_type == SkillEnchantType.BLESSED) + { + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SKILL_ENCHANT_FAILED_CURRENT_LEVEL_OF_ENCHANT_SKILL_S1_WILL_REMAIN_UNCHANGED).addSkillName(skill)); + } + player.sendPacket(ExEnchantSkillResult.STATIC_PACKET_FALSE); + + if (Config.LOG_SKILL_ENCHANTS) + { + LOGGER_ENCHANT.log(Level.INFO, "Failed, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + enchantedSkill.getLevel() + " " + enchantedSkill.getSubLevel() + " - " + enchantedSkill.getName() + " (" + enchantedSkill.getId() + "), " + enchantSkillHolder.getChance(_type)); + } + } + break; + } + case CHANGE: + { + if (Rnd.get(100) <= enchantSkillHolder.getChance(_type)) + { + final Skill enchantedSkill = SkillData.getInstance().getSkill(_skillId, _skillLvl, _skillSubLvl); + if (Config.LOG_SKILL_ENCHANTS) + { + LOGGER_ENCHANT.info("Success, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + enchantedSkill.getLevel() + " " + enchantedSkill.getSubLevel() + " - " + enchantedSkill.getName() + " (" + enchantedSkill.getId() + "), " + enchantSkillHolder.getChance(_type)); + } + player.addSkill(enchantedSkill, true); + + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ENCHANT_SKILL_ROUTE_CHANGE_WAS_SUCCESSFUL_LV_OF_ENCHANT_SKILL_S1_WILL_REMAIN); + sm.addSkillName(_skillId); + player.sendPacket(sm); + + player.sendPacket(ExEnchantSkillResult.STATIC_PACKET_TRUE); + } + else + { + final Skill enchantedSkill = SkillData.getInstance().getSkill(_skillId, _skillLvl, enchantSkillHolder.getEnchantFailLevel()); + player.addSkill(enchantedSkill, true); + player.sendPacket(SystemMessageId.SKILL_ENCHANT_FAILED_THE_SKILL_WILL_BE_INITIALIZED); + player.sendPacket(ExEnchantSkillResult.STATIC_PACKET_FALSE); + + if (Config.LOG_SKILL_ENCHANTS) + { + LOGGER_ENCHANT.log(Level.INFO, "Failed, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + enchantedSkill.getLevel() + " " + enchantedSkill.getSubLevel() + " - " + enchantedSkill.getName() + " (" + enchantedSkill.getId() + "), " + enchantSkillHolder.getChance(_type)); + } + } + break; + } + } + + player.broadcastUserInfo(); + player.sendSkillList(); + + skill = player.getKnownSkill(_skillId); + player.sendPacket(new ExEnchantSkillInfo(skill.getId(), skill.getLevel(), skill.getSubLevel(), skill.getSubLevel())); + player.sendPacket(new ExEnchantSkillInfoDetail(_type, skill.getId(), skill.getLevel(), Math.min(skill.getSubLevel() + 1, EnchantSkillGroupsData.MAX_ENCHANT_LEVEL), player)); + player.updateShortCuts(skill.getLevel(), skill.getSubLevel(), skill.getSubLevel()); } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillInfo.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillInfo.java index e307558bca..bcee11d95f 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillInfo.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillInfo.java @@ -16,9 +16,12 @@ */ package com.l2jmobius.gameserver.network.clientpackets; +import java.util.Set; + import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; import com.l2jmobius.gameserver.data.xml.impl.SkillData; +import com.l2jmobius.gameserver.enums.CategoryType; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.network.client.L2GameClient; @@ -32,28 +35,21 @@ public final class RequestExEnchantSkillInfo implements IClientIncomingPacket { private int _skillId; private int _skillLvl; - private int _fullLvl; + private int _skillSubLvl; @Override public boolean read(L2GameClient client, PacketReader packet) { _skillId = packet.readD(); - _fullLvl = packet.readD(); - if (_fullLvl < 100) - { - _skillLvl = _fullLvl; - } - else - { - _skillLvl = _fullLvl >> 16; - } + _skillLvl = packet.readH(); + _skillSubLvl = packet.readH(); return true; } @Override public void run(L2GameClient client) { - if ((_skillId <= 0) || (_skillLvl <= 0)) + if ((_skillId <= 0) || (_skillLvl <= 0) || (_skillSubLvl < 0)) { return; } @@ -65,28 +61,30 @@ public final class RequestExEnchantSkillInfo implements IClientIncomingPacket return; } - if (activeChar.getLevel() < 76) + if (!activeChar.isInCategory(CategoryType.AWAKEN_GROUP)) { return; } - final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl); + final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl, _skillSubLvl); if ((skill == null) || (skill.getId() != _skillId)) { return; } - - if (EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_skillId) == null) + final Set route = EnchantSkillGroupsData.getInstance().getRouteForSkill(_skillId, _skillLvl); + if (route.isEmpty()) { return; } - final int playerSkillLvl = activeChar.getSkillLevel(_skillId); - if ((playerSkillLvl == -1) || (playerSkillLvl != _skillLvl)) + final Skill playerSkill = activeChar.getKnownSkill(_skillId); + if ((playerSkill.getLevel() != _skillLvl) || (playerSkill.getSubLevel() != _skillSubLvl)) { return; } - activeChar.sendPacket(new ExEnchantSkillInfo(_skillId, _skillLvl)); + client.sendPacket(new ExEnchantSkillInfo(_skillId, _skillLvl, _skillSubLvl, playerSkill.getSubLevel())); + // ExEnchantSkillInfoDetail - not really necessary I think + // client.sendPacket(new ExEnchantSkillInfoDetail(SkillEnchantType.NORMAL, _skillId, _skillLvl, _skillSubLvl, activeChar)); } } \ No newline at end of file diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillInfoDetail.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillInfoDetail.java index d235f42da8..a56dcf922f 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillInfoDetail.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillInfoDetail.java @@ -17,107 +17,44 @@ package com.l2jmobius.gameserver.network.clientpackets; import com.l2jmobius.commons.network.PacketReader; -import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; -import com.l2jmobius.gameserver.model.L2EnchantSkillLearn; +import com.l2jmobius.gameserver.enums.SkillEnchantType; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.network.client.L2GameClient; import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillInfoDetail; /** - * Format (ch) ddd c: (id) 0xD0 h: (subid) 0x31 d: type d: skill id d: skill lvl * @author -Wooden- */ public final class RequestExEnchantSkillInfoDetail implements IClientIncomingPacket { - private int _type; + private SkillEnchantType _type; private int _skillId; private int _skillLvl; - private int _fullLvl; + private int _skillSubLvl; @Override public boolean read(L2GameClient client, PacketReader packet) { - _type = packet.readD(); + _type = SkillEnchantType.values()[packet.readD()]; _skillId = packet.readD(); - _fullLvl = packet.readD(); - if (_fullLvl < 100) - { - _skillLvl = _fullLvl; - } - else - { - _skillLvl = _fullLvl >> 16; - } + _skillLvl = packet.readH(); + _skillSubLvl = packet.readH(); return true; } @Override public void run(L2GameClient client) { - if ((_skillId <= 0) || (_skillLvl <= 0)) + if ((_skillId <= 0) || (_skillLvl <= 0) || (_skillSubLvl < 0)) { return; } final L2PcInstance activeChar = client.getActiveChar(); - if (activeChar == null) { return; } - - int reqSkillLvl = -2; - - if ((_type == 0) || (_type == 1)) - { - reqSkillLvl = _skillLvl - 1; // enchant - } - else if (_type == 2) - { - return; - } - else if (_type == 3) - { - reqSkillLvl = _skillLvl; // change route - } - - final int playerSkillLvl = activeChar.getSkillLevel(_skillId); - - // dont have such skill - if (playerSkillLvl == -1) - { - return; - } - - // if reqlvl is 100,200,.. check base skill lvl enchant - if ((reqSkillLvl % 1000) == 0) - { - final L2EnchantSkillLearn esl = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_skillId); - if (esl != null) - { - // if player dont have min level to enchant - if (playerSkillLvl != esl.getBaseLevel()) - { - return; - } - } - // enchant data dont exist? - else - { - return; - } - } - else if (playerSkillLvl != reqSkillLvl) - { - // change route is different skill lvl but same enchant - if ((_type == 3) && ((playerSkillLvl % 1000) != (_skillLvl % 1000))) - { - return; - } - } - - // send skill enchantment detail - final ExEnchantSkillInfoDetail esd = new ExEnchantSkillInfoDetail(_type, _skillId, _skillLvl, activeChar); - activeChar.sendPacket(esd); + activeChar.sendPacket(new ExEnchantSkillInfoDetail(_type, _skillId, _skillLvl, _skillSubLvl, activeChar)); } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillRouteChange.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillRouteChange.java deleted file mode 100644 index 8065ed48fe..0000000000 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillRouteChange.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.network.clientpackets; - -import java.util.logging.Logger; - -import com.l2jmobius.Config; -import com.l2jmobius.commons.network.PacketReader; -import com.l2jmobius.commons.util.Rnd; -import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; -import com.l2jmobius.gameserver.data.xml.impl.SkillData; -import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder; -import com.l2jmobius.gameserver.model.L2EnchantSkillLearn; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.itemcontainer.Inventory; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.skills.Skill; -import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.client.L2GameClient; -import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillInfo; -import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillInfoDetail; -import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillResult; -import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import com.l2jmobius.gameserver.network.serverpackets.UserInfo; - -/** - * Format (ch) dd c: (id) 0xD0 h: (subid) 0x34 d: skill id d: skill lvl - * @author -Wooden- - */ -public final class RequestExEnchantSkillRouteChange implements IClientIncomingPacket -{ - private static final Logger _logEnchant = Logger.getLogger("enchant.skills"); - - private int _skillId; - private int _skillLvl; - - @Override - public boolean read(L2GameClient client, PacketReader packet) - { - _skillId = packet.readD(); - _skillLvl = packet.readD(); - return true; - } - - @Override - public void run(L2GameClient client) - { - if ((_skillId <= 0) || (_skillLvl <= 0)) - { - return; - } - - final L2PcInstance player = client.getActiveChar(); - if (player == null) - { - return; - } - - if (player.getClassId().level() < 3) // requires to have 3rd class quest completed - { - client.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_IN_THIS_CLASS_YOU_CAN_USE_CORRESPONDING_FUNCTION_WHEN_COMPLETING_THE_THIRD_CLASS_CHANGE); - return; - } - - if (player.getLevel() < 76) - { - client.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_ON_THIS_LEVEL_YOU_CAN_USE_THE_CORRESPONDING_FUNCTION_ON_LEVELS_HIGHER_THAN_LV_76); - return; - } - - if (!player.isAllowedToEnchantSkills()) - { - client.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_IN_THIS_STATE_YOU_CAN_ENHANCE_SKILLS_WHEN_NOT_IN_BATTLE_AND_CANNOT_USE_THE_FUNCTION_WHILE_TRANSFORMED_IN_BATTLE_ON_A_MOUNT_OR_WHILE_THE_SKILL_IS_ON_COOLDOWN); - return; - } - - Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl); - if (skill == null) - { - return; - } - - final int reqItemId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK; - - final L2EnchantSkillLearn s = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_skillId); - if (s == null) - { - return; - } - - final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId); - // do u have this skill enchanted? - if (beforeEnchantSkillLevel <= 100) - { - return; - } - - final int currentEnchantLevel = beforeEnchantSkillLevel % 100; - // is the requested level valid? - if (currentEnchantLevel != (_skillLvl % 100)) - { - return; - } - final EnchantSkillHolder esd = s.getEnchantSkillHolder(_skillLvl); - - final int requiredSp = esd.getSpCost(); - final int requireditems = esd.getAdenaCost(); - - if (player.getSp() >= requiredSp) - { - // only first lvl requires book - final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId); - if (Config.ES_SP_BOOK_NEEDED) - { - if (spb == null)// Haven't spellbook - { - client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_SKILL_ROUTE_CHANGE); - return; - } - } - - if (player.getInventory().getAdena() < requireditems) - { - client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - boolean check; - check = player.getStat().removeExpAndSp(0, requiredSp, false); - if (Config.ES_SP_BOOK_NEEDED) - { - check &= player.destroyItem("Consume", spb.getObjectId(), 1, player, true); - } - - check &= player.destroyItemByItemId("Consume", Inventory.ADENA_ID, requireditems, player, true); - - if (!check) - { - client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - final int levelPenalty = Rnd.get(Math.min(4, currentEnchantLevel)); - _skillLvl -= levelPenalty; - if ((_skillLvl % 100) == 0) - { - _skillLvl = s.getBaseLevel(); - } - - skill = SkillData.getInstance().getSkill(_skillId, _skillLvl); - if (skill != null) - { - if (Config.LOG_SKILL_ENCHANTS) - { - if (skill.getLevel() > 100) - { - if (spb != null) - { - _logEnchant.info("Route Change, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + (skill.getLevel() % 100) + " " + skill.getName() + "(" + skill.getId() + "), " + spb.getName() + "(" + spb.getCount() + ") [" + spb.getObjectId() + "]"); - } - else - { - _logEnchant.info("Route Change, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + (skill.getLevel() % 100) + " " + skill.getName() + "(" + skill.getId() + ")"); - } - } - else - { - if (spb != null) - { - _logEnchant.info("Route Change, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", " + skill.getName() + "(" + skill.getId() + "), " + spb.getName() + "(" + spb.getCount() + ") [" + spb.getObjectId() + "]"); - } - else - { - _logEnchant.info("Route Change, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", " + skill.getName() + "(" + skill.getId() + ")"); - } - } - } - - player.addSkill(skill, true); - client.sendPacket(ExEnchantSkillResult.valueOf(true)); - } - - if (Config.DEBUG) - { - _log.finer("Learned skill ID: " + _skillId + " Level: " + _skillLvl + " for " + requiredSp + " SP, " + requireditems + " Adena."); - } - - client.sendPacket(new UserInfo(player)); - - if (levelPenalty == 0) - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ENCHANT_SKILL_ROUTE_CHANGE_WAS_SUCCESSFUL_LV_OF_ENCHANT_SKILL_S1_WILL_REMAIN); - sm.addSkillName(_skillId); - client.sendPacket(sm); - } - else - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ENCHANT_SKILL_ROUTE_CHANGE_WAS_SUCCESSFUL_LV_OF_ENCHANT_SKILL_S1_HAS_BEEN_DECREASED_BY_S2); - sm.addSkillName(_skillId); - sm.addInt(levelPenalty); - client.sendPacket(sm); - } - player.sendSkillList(); - final int afterEnchantSkillLevel = player.getSkillLevel(_skillId); - client.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel)); - client.sendPacket(new ExEnchantSkillInfoDetail(3, _skillId, afterEnchantSkillLevel, player)); - player.updateShortCuts(_skillId, afterEnchantSkillLevel); - } - else - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_ENCHANT_THAT_SKILL); - client.sendPacket(sm); - } - } -} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillSafe.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillSafe.java deleted file mode 100644 index 032e9a431a..0000000000 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillSafe.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.network.clientpackets; - -import java.util.logging.Logger; - -import com.l2jmobius.Config; -import com.l2jmobius.commons.network.PacketReader; -import com.l2jmobius.commons.util.Rnd; -import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; -import com.l2jmobius.gameserver.data.xml.impl.SkillData; -import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder; -import com.l2jmobius.gameserver.model.L2EnchantSkillLearn; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.itemcontainer.Inventory; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.skills.Skill; -import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.client.L2GameClient; -import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillInfo; -import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillInfoDetail; -import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillResult; -import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import com.l2jmobius.gameserver.network.serverpackets.UserInfo; - -/** - * Format (ch) dd c: (id) 0xD0 h: (subid) 0x32 d: skill id d: skill lvl - * @author -Wooden- - */ -public final class RequestExEnchantSkillSafe implements IClientIncomingPacket -{ - private static final Logger _logEnchant = Logger.getLogger("enchant.skills"); - - private int _skillId; - private int _skillLvl; - - @Override - public boolean read(L2GameClient client, PacketReader packet) - { - _skillId = packet.readD(); - _skillLvl = packet.readD(); - return true; - } - - @Override - public void run(L2GameClient client) - { - if ((_skillId <= 0) || (_skillLvl <= 0)) - { - return; - } - - final L2PcInstance player = client.getActiveChar(); - if (player == null) - { - return; - } - - if (player.getClassId().level() < 3) // requires to have 3rd class quest completed - { - client.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_IN_THIS_CLASS_YOU_CAN_USE_CORRESPONDING_FUNCTION_WHEN_COMPLETING_THE_THIRD_CLASS_CHANGE); - return; - } - - if (player.getLevel() < 76) - { - client.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_ON_THIS_LEVEL_YOU_CAN_USE_THE_CORRESPONDING_FUNCTION_ON_LEVELS_HIGHER_THAN_LV_76); - return; - } - - if (!player.isAllowedToEnchantSkills()) - { - client.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_IN_THIS_STATE_YOU_CAN_ENHANCE_SKILLS_WHEN_NOT_IN_BATTLE_AND_CANNOT_USE_THE_FUNCTION_WHILE_TRANSFORMED_IN_BATTLE_ON_A_MOUNT_OR_WHILE_THE_SKILL_IS_ON_COOLDOWN); - return; - } - - if (player.isSellingBuffs()) - { - player.sendMessage("You cannot use the skill enchanting function while you selling buffs."); - return; - } - - final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl); - if (skill == null) - { - return; - } - - final int costMultiplier = Config.SAFE_ENCHANT_COST_MULTIPLIER; - final int reqItemId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK; - - final L2EnchantSkillLearn s = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_skillId); - if (s == null) - { - return; - } - final EnchantSkillHolder esd = s.getEnchantSkillHolder(_skillLvl); - final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId); - if (beforeEnchantSkillLevel != s.getMinSkillLevel(_skillLvl)) - { - return; - } - - final int requiredSp = esd.getSpCost() * costMultiplier; - final int requireditems = esd.getAdenaCost() * costMultiplier; - final int rate = esd.getRate(player); - - if (player.getSp() >= requiredSp) - { - // No config option for safe enchant book consume - final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId); - if (spb == null) // Haven't spellbook - { - client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - if (player.getInventory().getAdena() < requireditems) - { - client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - boolean check = player.getStat().removeExpAndSp(0, requiredSp, false); - check &= player.destroyItem("Consume", spb.getObjectId(), 1, player, true); - - check &= player.destroyItemByItemId("Consume", Inventory.ADENA_ID, requireditems, player, true); - - if (!check) - { - client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - // ok. Destroy ONE copy of the book - if (Rnd.get(100) <= rate) - { - if (Config.LOG_SKILL_ENCHANTS) - { - if (skill.getLevel() > 100) - { - _logEnchant.info("Safe Success, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + (skill.getLevel() % 100) + " " + skill.getName() + "(" + skill.getId() + "), " + spb.getName() + "(" + spb.getCount() + ") [" + spb.getObjectId() + "], " + rate); - } - else - { - _logEnchant.info("Safe Success, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", " + skill.getName() + "(" + skill.getId() + "), " + spb.getName() + "(" + spb.getCount() + ") [" + spb.getObjectId() + "], " + rate); - } - } - - player.addSkill(skill, true); - - client.sendPacket(ExEnchantSkillResult.valueOf(true)); - - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SKILL_ENCHANT_WAS_SUCCESSFUL_S1_HAS_BEEN_ENCHANTED); - sm.addSkillName(_skillId); - client.sendPacket(sm); - } - else - { - if (Config.LOG_SKILL_ENCHANTS) - { - if (skill.getLevel() > 100) - { - _logEnchant.info("Safe Fail, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + (skill.getLevel() % 100) + " " + skill.getName() + "(" + skill.getId() + "), " + spb.getName() + "(" + spb.getCount() + ") [" + spb.getObjectId() + "], " + rate); - } - else - { - _logEnchant.info("Safe Fail, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", " + skill.getName() + "(" + skill.getId() + "), " + spb.getName() + "(" + spb.getCount() + ") [" + spb.getObjectId() + "], " + rate); - } - } - - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SKILL_ENCHANT_FAILED_CURRENT_LEVEL_OF_ENCHANT_SKILL_S1_WILL_REMAIN_UNCHANGED); - sm.addSkillName(_skillId); - client.sendPacket(sm); - client.sendPacket(ExEnchantSkillResult.valueOf(false)); - } - - client.sendPacket(new UserInfo(player)); - player.sendSkillList(); - final int afterEnchantSkillLevel = player.getSkillLevel(_skillId); - client.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel)); - client.sendPacket(new ExEnchantSkillInfoDetail(1, _skillId, afterEnchantSkillLevel + 1, player)); - player.updateShortCuts(_skillId, afterEnchantSkillLevel); - } - else - { - client.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_ENCHANT_THAT_SKILL)); - } - } -} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillUntrain.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillUntrain.java deleted file mode 100644 index b9bffe5eaf..0000000000 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantSkillUntrain.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.network.clientpackets; - -import java.util.logging.Logger; - -import com.l2jmobius.Config; -import com.l2jmobius.commons.network.PacketReader; -import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; -import com.l2jmobius.gameserver.data.xml.impl.SkillData; -import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder; -import com.l2jmobius.gameserver.model.L2EnchantSkillLearn; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.itemcontainer.Inventory; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.skills.Skill; -import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.client.L2GameClient; -import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillInfo; -import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillInfoDetail; -import com.l2jmobius.gameserver.network.serverpackets.ExEnchantSkillResult; -import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import com.l2jmobius.gameserver.network.serverpackets.UserInfo; - -/** - * Format (ch) dd c: (id) 0xD0 h: (subid) 0x33 d: skill id d: skill lvl - * @author -Wooden- - */ -public final class RequestExEnchantSkillUntrain implements IClientIncomingPacket -{ - private static final Logger _logEnchant = Logger.getLogger("enchant.skills"); - - private int _skillId; - private int _skillLvl; - - @Override - public boolean read(L2GameClient client, PacketReader packet) - { - _skillId = packet.readD(); - _skillLvl = packet.readD(); - return true; - } - - @Override - public void run(L2GameClient client) - { - if ((_skillId <= 0) || (_skillLvl <= 0)) - { - return; - } - - final L2PcInstance player = client.getActiveChar(); - if (player == null) - { - return; - } - - if (player.getClassId().level() < 3) // requires to have 3rd class quest completed - { - client.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_IN_THIS_CLASS_YOU_CAN_USE_CORRESPONDING_FUNCTION_WHEN_COMPLETING_THE_THIRD_CLASS_CHANGE); - return; - } - - if (player.getLevel() < 76) - { - client.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_ON_THIS_LEVEL_YOU_CAN_USE_THE_CORRESPONDING_FUNCTION_ON_LEVELS_HIGHER_THAN_LV_76); - return; - } - - if (!player.isAllowedToEnchantSkills()) - { - client.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_SKILL_ENHANCING_FUNCTION_IN_THIS_STATE_YOU_CAN_ENHANCE_SKILLS_WHEN_NOT_IN_BATTLE_AND_CANNOT_USE_THE_FUNCTION_WHILE_TRANSFORMED_IN_BATTLE_ON_A_MOUNT_OR_WHILE_THE_SKILL_IS_ON_COOLDOWN); - return; - } - - final L2EnchantSkillLearn s = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_skillId); - if (s == null) - { - return; - } - - if ((_skillLvl % 100) == 0) - { - _skillLvl = s.getBaseLevel(); - } - - final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl); - if (skill == null) - { - return; - } - - final int reqItemId = EnchantSkillGroupsData.UNTRAIN_ENCHANT_BOOK; - - final int beforeUntrainSkillLevel = player.getSkillLevel(_skillId); - if (((beforeUntrainSkillLevel - 1) != _skillLvl) && (((beforeUntrainSkillLevel % 100) != 1) || (_skillLvl != s.getBaseLevel()))) - { - return; - } - - final EnchantSkillHolder esd = s.getEnchantSkillHolder(beforeUntrainSkillLevel); - - final int requiredSp = esd.getSpCost(); - final int requireditems = esd.getAdenaCost(); - - final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId); - if (Config.ES_SP_BOOK_NEEDED) - { - if (spb == null) // Haven't spellbook - { - client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - } - - if (player.getInventory().getAdena() < requireditems) - { - client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - boolean check = true; - if (Config.ES_SP_BOOK_NEEDED) - { - check &= player.destroyItem("Consume", spb.getObjectId(), 1, player, true); - } - - check &= player.destroyItemByItemId("Consume", Inventory.ADENA_ID, requireditems, player, true); - - if (!check) - { - client.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); - return; - } - - player.getStat().addSp((int) (requiredSp * 0.8)); - - if (Config.LOG_SKILL_ENCHANTS) - { - if (skill.getLevel() > 100) - { - if (spb != null) - { - _logEnchant.info("Untrain, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + (skill.getLevel() % 100) + " " + skill.getName() + "(" + skill.getId() + "), " + spb.getName() + "(" + spb.getCount() + ") [" + spb.getObjectId() + "]"); - } - else - { - _logEnchant.info("Untrain, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + (skill.getLevel() % 100) + " " + skill.getName() + "(" + skill.getId() + ")"); - } - } - else - { - if (spb != null) - { - _logEnchant.info("Untrain, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", " + skill.getName() + "(" + skill.getId() + "), " + spb.getName() + "(" + spb.getCount() + ") [" + spb.getObjectId() + "]"); - } - else - { - _logEnchant.info("Untrain, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", " + skill.getName() + "(" + skill.getId() + ")"); - } - } - } - - player.addSkill(skill, true); - client.sendPacket(ExEnchantSkillResult.valueOf(true)); - - if (Config.DEBUG) - { - _log.finer("Learned skill ID: " + _skillId + " Level: " + _skillLvl + " for " + requiredSp + " SP, " + requireditems + " Adena."); - } - - client.sendPacket(new UserInfo(player)); - - if (_skillLvl > 100) - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.UNTRAIN_OF_ENCHANT_SKILL_WAS_SUCCESSFUL_CURRENT_LEVEL_OF_ENCHANT_SKILL_S1_HAS_BEEN_DECREASED_BY_1); - sm.addSkillName(_skillId); - client.sendPacket(sm); - } - else - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.UNTRAIN_OF_ENCHANT_SKILL_WAS_SUCCESSFUL_CURRENT_LEVEL_OF_ENCHANT_SKILL_S1_BECAME_0_AND_ENCHANT_SKILL_WILL_BE_INITIALIZED); - sm.addSkillName(_skillId); - client.sendPacket(sm); - } - player.sendSkillList(); - final int afterUntrainSkillLevel = player.getSkillLevel(_skillId); - client.sendPacket(new ExEnchantSkillInfo(_skillId, afterUntrainSkillLevel)); - client.sendPacket(new ExEnchantSkillInfoDetail(2, _skillId, afterUntrainSkillLevel - 1, player)); - player.updateShortCuts(_skillId, afterUntrainSkillLevel); - } -} diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestPledgeRecruitBoardAccess.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestPledgeRecruitBoardAccess.java index 7b99c6235d..e4d762f3df 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestPledgeRecruitBoardAccess.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestPledgeRecruitBoardAccess.java @@ -35,6 +35,8 @@ public class RequestPledgeRecruitBoardAccess implements IClientIncomingPacket private int _karma; private String _information; private String _datailedInformation; + private int _applicationType; + private int _recruitingType; @Override public boolean read(L2GameClient client, PacketReader packet) @@ -43,6 +45,8 @@ public class RequestPledgeRecruitBoardAccess implements IClientIncomingPacket _karma = packet.readD(); _information = packet.readS(); _datailedInformation = packet.readS(); + _applicationType = packet.readD(); // 0 - Allow, 1 - Public + _recruitingType = packet.readD(); // 0 - Main clan return true; } @@ -70,7 +74,7 @@ public class RequestPledgeRecruitBoardAccess implements IClientIncomingPacket return; } - final PledgeRecruitInfo pledgeRecruitInfo = new PledgeRecruitInfo(clan.getId(), _karma, _information, _datailedInformation); + final PledgeRecruitInfo pledgeRecruitInfo = new PledgeRecruitInfo(clan.getId(), _karma, _information, _datailedInformation, _applicationType, _recruitingType); switch (_applyType) { diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestShortCutReg.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestShortCutReg.java index 34b0831c7d..4a8d8d0f25 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestShortCutReg.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestShortCutReg.java @@ -29,6 +29,7 @@ public final class RequestShortCutReg implements IClientIncomingPacket private int _slot; private int _page; private int _lvl; + private int _subLvl; private int _characterType; // 1 - player, 2 - pet @Override @@ -41,7 +42,7 @@ public final class RequestShortCutReg implements IClientIncomingPacket _page = slot / 12; _id = packet.readD(); _lvl = packet.readH(); - packet.readH(); // Sublevel + _subLvl = packet.readH(); // Sublevel _characterType = packet.readD(); return true; } @@ -54,7 +55,7 @@ public final class RequestShortCutReg implements IClientIncomingPacket return; } - final Shortcut sc = new Shortcut(_slot, _page, _type, _id, _lvl, _characterType); + final Shortcut sc = new Shortcut(_slot, _page, _type, _id, _lvl, _subLvl, _characterType); client.getActiveChar().registerShortCut(sc); client.sendPacket(new ShortCutRegister(sc)); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/UseItem.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/UseItem.java index 244fd4bd59..b9371e4034 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/UseItem.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/UseItem.java @@ -26,21 +26,17 @@ import com.l2jmobius.gameserver.ai.CtrlIntention; import com.l2jmobius.gameserver.ai.NextAction; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.enums.PrivateStoreType; -import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.handler.IItemHandler; import com.l2jmobius.gameserver.handler.ItemHandler; import com.l2jmobius.gameserver.instancemanager.FortSiegeManager; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2World; -import com.l2jmobius.gameserver.model.PcCondOverride; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.effects.L2EffectType; import com.l2jmobius.gameserver.model.holders.ItemSkillHolder; import com.l2jmobius.gameserver.model.items.L2EtcItem; import com.l2jmobius.gameserver.model.items.L2Item; -import com.l2jmobius.gameserver.model.items.L2Weapon; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.items.type.ArmorType; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.client.L2GameClient; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; @@ -53,32 +49,6 @@ public final class UseItem implements IClientIncomingPacket private boolean _ctrlPressed; private int _itemId; - /** Weapon Equip Task */ - private static class WeaponEquipTask implements Runnable - { - L2ItemInstance item; - L2PcInstance activeChar; - - protected WeaponEquipTask(L2ItemInstance it, L2PcInstance character) - { - item = it; - activeChar = character; - } - - @Override - public void run() - { - // If character is still engaged in strike we should not change weapon - if (activeChar.isAttackingNow()) - { - return; - } - - // Equip or unEquip - activeChar.useEquippableItem(item, false); - } - } - @Override public boolean read(L2GameClient client, PacketReader packet) { @@ -233,12 +203,7 @@ public final class UseItem implements IClientIncomingPacket return; } - if (activeChar.isMounted()) - { - activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM); - return; - } - if (activeChar.isDisarmed()) + if (activeChar.isMounted() || activeChar.isDisarmed()) { activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM); return; @@ -249,82 +214,6 @@ public final class UseItem implements IClientIncomingPacket { return; } - - // Don't allow other Race to Wear Kamael exclusive Weapons. - if (!item.isEquipped() && item.isWeapon() && !activeChar.canOverrideCond(PcCondOverride.ITEM_CONDITIONS)) - { - final L2Weapon wpn = (L2Weapon) item.getItem(); - - switch (activeChar.getRace()) - { - case KAMAEL: - { - switch (wpn.getItemType()) - { - case NONE: - { - activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM); - return; - } - } - break; - } - case HUMAN: - case DWARF: - case ELF: - case DARK_ELF: - case ORC: - { - switch (wpn.getItemType()) - { - case RAPIER: - case CROSSBOW: - case ANCIENTSWORD: - { - activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM); - return; - } - } - break; - } - case ERTHEIA: - { - switch (wpn.getItemType()) - { - case SWORD: - case DAGGER: - case BOW: - case POLE: - case NONE: - case DUAL: - case RAPIER: - case ANCIENTSWORD: - case CROSSBOW: - case DUALDAGGER: - { - activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM); - return; - } - } - break; - } - } - } - break; - } - case L2Item.SLOT_CHEST: - case L2Item.SLOT_FULL_ARMOR: - case L2Item.SLOT_BACK: - case L2Item.SLOT_GLOVES: - case L2Item.SLOT_FEET: - case L2Item.SLOT_HEAD: - case L2Item.SLOT_LEGS: - { - if ((activeChar.getRace() == Race.ERTHEIA) && activeChar.isMageClass() && ((item.getItem().getItemType() == ArmorType.SHIELD) || (item.getItem().getItemType() == ArmorType.SIGIL))) - { - activeChar.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM); - return; - } break; } case L2Item.SLOT_DECO: @@ -356,7 +245,17 @@ public final class UseItem implements IClientIncomingPacket } else if (activeChar.isAttackingNow()) { - ThreadPoolManager.getInstance().scheduleGeneral(new WeaponEquipTask(item, activeChar), activeChar.getAttackEndTime() - System.currentTimeMillis()); + ThreadPoolManager.getInstance().scheduleGeneral(() -> + { + // If character is still engaged in strike we should not change weapon + if (activeChar.isAttackingNow()) + { + return; + } + + // Equip or unEquip + activeChar.useEquippableItem(item, false); + }, activeChar.getAttackEndTime() - System.currentTimeMillis()); } else { diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/ability/RequestAcquireAbilityList.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/ability/RequestAcquireAbilityList.java index bd9b46547f..46a5c4e7bb 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/ability/RequestAcquireAbilityList.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/clientpackets/ability/RequestAcquireAbilityList.java @@ -101,10 +101,10 @@ public class RequestAcquireAbilityList implements IClientIncomingPacket final List skillsToLearn = new ArrayList<>(_skills.size()); for (SkillHolder holder : _skills.values()) { - final L2SkillLearn learn = SkillTreesData.getInstance().getAbilitySkill(holder.getSkillId(), holder.getSkillLvl()); + final L2SkillLearn learn = SkillTreesData.getInstance().getAbilitySkill(holder.getSkillId(), holder.getSkillLevel()); if (learn == null) { - _log.warning("SkillLearn " + holder.getSkillId() + " (" + holder.getSkillLvl() + ") not found!"); + _log.warning("SkillLearn " + holder.getSkillId() + " (" + holder.getSkillLevel() + ") not found!"); client.sendPacket(ActionFailed.STATIC_PACKET); break; } @@ -112,7 +112,7 @@ public class RequestAcquireAbilityList implements IClientIncomingPacket final Skill skill = holder.getSkill(); if (skill == null) { - _log.warning("Skill " + holder.getSkillId() + " (" + holder.getSkillLvl() + ") not found!"); + _log.warning("Skill " + holder.getSkillId() + " (" + holder.getSkillLevel() + ") not found!"); client.sendPacket(ActionFailed.STATIC_PACKET); break; } @@ -153,7 +153,7 @@ public class RequestAcquireAbilityList implements IClientIncomingPacket // Case 2: Learning skill without having its parent for (SkillHolder required : learn.getPreReqSkills()) { - if (activeChar.getSkillLevel(required.getSkillId()) < required.getSkillLvl()) + if (activeChar.getSkillLevel(required.getSkillId()) < required.getSkillLevel()) { _log.warning("Player " + activeChar + " is trying to learn " + skill + " without having prerequsite skill: " + required.getSkill() + "!"); client.sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/AbnormalStatusUpdate.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/AbnormalStatusUpdate.java index 2da550314a..126d5a9a3a 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/AbnormalStatusUpdate.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/AbnormalStatusUpdate.java @@ -57,7 +57,7 @@ public class AbnormalStatusUpdate implements IClientOutgoingPacket { packet.writeD(info.getSkill().getDisplayId()); packet.writeH(info.getSkill().getDisplayLevel()); - packet.writeH(0x00); // Sub level + packet.writeH(info.getSkill().getSubLevel()); packet.writeD(info.getSkill().getAbnormalType().getClientId()); writeOptionalD(packet, info.getSkill().isAura() ? -1 : info.getTime()); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExAbnormalStatusUpdateFromTarget.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExAbnormalStatusUpdateFromTarget.java index ab6750f7cb..41404799d9 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExAbnormalStatusUpdateFromTarget.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExAbnormalStatusUpdateFromTarget.java @@ -51,6 +51,7 @@ public class ExAbnormalStatusUpdateFromTarget implements IClientOutgoingPacket _skillId = skill.getDisplayId(); _level = skill.getDisplayLevel(); + _subLevel = skill.getSubLevel(); _abnormalType = skill.getAbnormalType().getClientId(); _duration = skill.isAura() ? -1 : info.getTime(); _caster = casterId; diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillInfo.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillInfo.java index 96223bb70e..971be8090b 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillInfo.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillInfo.java @@ -16,95 +16,48 @@ */ package com.l2jmobius.gameserver.network.serverpackets; -import java.util.LinkedList; -import java.util.List; +import java.util.Set; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; -import com.l2jmobius.gameserver.data.xml.impl.SkillData; -import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder; -import com.l2jmobius.gameserver.model.L2EnchantSkillLearn; import com.l2jmobius.gameserver.network.client.OutgoingPackets; public final class ExEnchantSkillInfo implements IClientOutgoingPacket { - private final List _routes = new LinkedList<>(); // skill lvls for each route + private final Set _routes; - private final int _id; - private final int _lvl; - private final int _maxlvl; - private boolean _maxEnchanted = false; + private final int _skillId; + private final int _skillLevel; + private final int _skillSubLevel; + private final int _currentSubLevel; - public ExEnchantSkillInfo(int id, int lvl) + public ExEnchantSkillInfo(int skillId, int skillLevel, int skillSubLevel, int currentSubLevel) { - _id = id; - _lvl = lvl; - _maxlvl = SkillData.getInstance().getMaxLevel(_id); - - final L2EnchantSkillLearn enchantLearn = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_id); - // do we have this skill? - if (enchantLearn != null) - { - // skill already enchanted? - if (_lvl > 1000) - { - _maxEnchanted = enchantLearn.isMaxEnchant(_lvl); - - // get detail for next level - final EnchantSkillHolder esd = enchantLearn.getEnchantSkillHolder(_lvl); - - // if it exists add it - if ((esd != null) && !_maxEnchanted) - { - _routes.add(_lvl + 1); // current enchant add firts - } - - for (int route : enchantLearn.getAllRoutes()) - { - if (((route * 1000) + (_lvl % 1000)) == _lvl) - { - continue; - } - _routes.add((route * 1000) + (_lvl % 1000)); - } - } - else - // not already enchanted - { - for (int route : enchantLearn.getAllRoutes()) - { - // add first level (+1) of all routes - _routes.add((route * 1000) + 1); - } - } - } + _skillId = skillId; + _skillLevel = skillLevel; + _skillSubLevel = skillSubLevel; + _currentSubLevel = currentSubLevel; + _routes = EnchantSkillGroupsData.getInstance().getRouteForSkill(_skillId, _skillLevel); } @Override public boolean write(PacketWriter packet) { OutgoingPackets.EX_ENCHANT_SKILL_INFO.writeId(packet); - - packet.writeD(_id); - if (_lvl < 100) - { - packet.writeD(_lvl); - } - else - { - packet.writeH(_maxlvl); - packet.writeH(_lvl); - } - packet.writeD(_maxEnchanted ? 0 : 1); - packet.writeD(_lvl > 1000 ? 1 : 0); // enchanted? + packet.writeD(_skillId); + packet.writeH(_skillLevel); + packet.writeH(_skillSubLevel); + packet.writeD((_skillSubLevel % 1000) == EnchantSkillGroupsData.MAX_ENCHANT_LEVEL ? 0 : 1); + packet.writeD(_skillSubLevel > 1000 ? 1 : 0); packet.writeD(_routes.size()); - - for (int level : _routes) + _routes.forEach(route -> { - packet.writeH(_maxlvl); - packet.writeH(level); - } - + final int routeId = route / 1000; + final int currentRouteId = _skillSubLevel / 1000; + final int subLevel = _currentSubLevel > 0 ? (route + (_currentSubLevel % 1000)) - 1 : route; + packet.writeH(_skillLevel); + packet.writeH(currentRouteId != routeId ? subLevel : subLevel + 1); + }); return true; } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillInfoDetail.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillInfoDetail.java index 55f94efa55..2dff1f3b06 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillInfoDetail.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillInfoDetail.java @@ -16,14 +16,14 @@ */ package com.l2jmobius.gameserver.network.serverpackets; -import com.l2jmobius.Config; +import java.util.Set; + import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData; -import com.l2jmobius.gameserver.data.xml.impl.SkillData; -import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder; -import com.l2jmobius.gameserver.model.L2EnchantSkillLearn; +import com.l2jmobius.gameserver.enums.SkillEnchantType; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.itemcontainer.Inventory; +import com.l2jmobius.gameserver.model.holders.EnchantSkillHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.network.client.OutgoingPackets; /** @@ -31,172 +31,20 @@ import com.l2jmobius.gameserver.network.client.OutgoingPackets; */ public class ExEnchantSkillInfoDetail implements IClientOutgoingPacket { - private static final int TYPE_NORMAL_ENCHANT = 0; - private static final int TYPE_SAFE_ENCHANT = 1; - private static final int TYPE_UNTRAIN_ENCHANT = 2; - private static final int TYPE_CHANGE_ENCHANT = 3; - private static final int TYPE_IMMORTAL_ENCHANT = 4; + private final SkillEnchantType _type; + private final int _skillId; + private final int _skillLvl; + private final int _skillSubLvl; + private final EnchantSkillHolder _enchantSkillHolder; - private int bookId = 0; - private int reqCount = 0; - private int multi = 1; - private final int _type; - private final int _skillid; - private final int _skilllvl; - private final int _maxlvl; - private final int _chance; - private int _sp; - private final int _adenacount; - - public ExEnchantSkillInfoDetail(int type, int skillid, int skilllvl, L2PcInstance ply) + public ExEnchantSkillInfoDetail(SkillEnchantType type, int skillId, int skillLvl, int skillSubLvl, L2PcInstance player) { _type = type; - _skillid = skillid; - _skilllvl = skilllvl; - _maxlvl = SkillData.getInstance().getMaxLevel(_skillid); + _skillId = skillId; + _skillLvl = skillLvl; + _skillSubLvl = skillSubLvl; - final L2EnchantSkillLearn enchantLearn = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(skillid); - EnchantSkillHolder esd = null; - // do we have this skill? - if (enchantLearn != null) - { - if (_skilllvl > 1000) - { - esd = enchantLearn.getEnchantSkillHolder(_skilllvl); - } - else - { - esd = enchantLearn.getFirstRouteGroup().getEnchantGroupDetails().get(0); - } - } - - if (esd == null) - { - throw new IllegalArgumentException("Skill " + skillid + " dont have enchant data for level " + _skilllvl); - } - - if (type == 0) - { - multi = EnchantSkillGroupsData.NORMAL_ENCHANT_COST_MULTIPLIER; - } - else if (type == 1) - { - multi = EnchantSkillGroupsData.SAFE_ENCHANT_COST_MULTIPLIER; - } - if (type != TYPE_IMMORTAL_ENCHANT) - { - _chance = esd.getRate(ply); - _sp = esd.getSpCost(); - if (type == TYPE_UNTRAIN_ENCHANT) - { - _sp = (int) (0.8 * _sp); - } - _adenacount = esd.getAdenaCost() * multi; - } - else - { - _chance = 100; - _sp = 0; - _adenacount = 0; - } - - final int _elvl = ((_skilllvl % 100) - 1) / 10; - switch (type) - { - case TYPE_NORMAL_ENCHANT: - { - if (ply.getClassId().level() < 4) - { - bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_OLD; - } - else if (_elvl == 0) - { - bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK; - } - else if (_elvl == 1) - { - bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V2; - } - else - { - bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V3; - } - reqCount = 1; - break; - } - case TYPE_SAFE_ENCHANT: - { - if (ply.getClassId().level() < 4) - { - bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_OLD; - } - else if (_elvl == 0) - { - bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK; - } - else if (_elvl == 1) - { - bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V2; - } - else - { - bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V3; - } - reqCount = 1; - break; - } - case TYPE_CHANGE_ENCHANT: - { - if (ply.getClassId().level() < 4) - { - bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_OLD; - } - else if (_elvl == 0) - { - bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK; - } - else if (_elvl == 1) - { - bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V2; - } - else - { - bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V3; - } - reqCount = 1; - break; - } - case TYPE_IMMORTAL_ENCHANT: - { - if (ply.getClassId().level() < 4) - { - bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL; - } - else if (_elvl == 0) - { - bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL; - } - else if (_elvl == 1) - { - bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V2; - } - else - { - bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V3; - } - reqCount = 1; - break; - } - default: - { - return; - } - } - - if ((type != TYPE_SAFE_ENCHANT) && !Config.ES_SP_BOOK_NEEDED) - { - reqCount = 0; - } + _enchantSkillHolder = EnchantSkillGroupsData.getInstance().getEnchantSkillHolder(skillSubLvl % 1000); } @Override @@ -204,17 +52,22 @@ public class ExEnchantSkillInfoDetail implements IClientOutgoingPacket { OutgoingPackets.EX_ENCHANT_SKILL_INFO_DETAIL.writeId(packet); - packet.writeD(_type); - packet.writeD(_skillid); - packet.writeH(_maxlvl); - packet.writeH(_skilllvl); - packet.writeQ(_sp * multi); // sp - packet.writeD(_chance); // exp - packet.writeD(0x02); // items count? - packet.writeD(Inventory.ADENA_ID); // Adena - packet.writeD(_adenacount); // Adena count - packet.writeD(bookId); // ItemId Required - packet.writeD(reqCount); - return true; + packet.writeD(_type.ordinal()); + packet.writeD(_skillId); + packet.writeH(_skillLvl); + packet.writeH(_skillSubLvl); + if (_enchantSkillHolder != null) + { + packet.writeQ(_enchantSkillHolder.getSp(_type)); + packet.writeD(_enchantSkillHolder.getChance(_type)); + final Set holders = _enchantSkillHolder.getRequiredItems(_type); + packet.writeD(holders.size()); + holders.forEach(holder -> + { + packet.writeD(holder.getId()); + packet.writeD((int) holder.getCount()); + }); + } + return _enchantSkillHolder != null; } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillList.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillList.java index 92fa6c02d9..8f94a26995 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillList.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillList.java @@ -16,46 +16,27 @@ */ package com.l2jmobius.gameserver.network.serverpackets; -import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.enums.SkillEnchantType; +import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.network.client.OutgoingPackets; public class ExEnchantSkillList implements IClientOutgoingPacket { - public enum EnchantSkillType - { - NORMAL, - SAFE, - UNTRAIN, - CHANGE_ROUTE, - } + private final SkillEnchantType _type; + private final List _skills = new LinkedList<>(); - private final EnchantSkillType _type; - private final List _skills; - - static class Skill - { - public int id; - public int nextLevel; - - Skill(int pId, int pNextLevel) - { - id = pId; - nextLevel = pNextLevel; - } - } - - public void addSkill(int id, int level) - { - _skills.add(new Skill(id, level)); - } - - public ExEnchantSkillList(EnchantSkillType type) + public ExEnchantSkillList(SkillEnchantType type) { _type = type; - _skills = new ArrayList<>(); + } + + public void addSkill(Skill skill) + { + _skills.add(skill); } @Override @@ -65,10 +46,11 @@ public class ExEnchantSkillList implements IClientOutgoingPacket packet.writeD(_type.ordinal()); packet.writeD(_skills.size()); - for (Skill sk : _skills) + for (Skill skill : _skills) { - packet.writeD(sk.id); - packet.writeD(sk.nextLevel); + packet.writeD(skill.getId()); + packet.writeH(skill.getLevel()); + packet.writeH(skill.getSubLevel()); } return true; } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillResult.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillResult.java index a2e6ef89ac..0be0470780 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillResult.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExEnchantSkillResult.java @@ -24,13 +24,8 @@ import com.l2jmobius.gameserver.network.client.OutgoingPackets; */ public class ExEnchantSkillResult implements IClientOutgoingPacket { - private static final ExEnchantSkillResult STATIC_PACKET_TRUE = new ExEnchantSkillResult(true); - private static final ExEnchantSkillResult STATIC_PACKET_FALSE = new ExEnchantSkillResult(false); - - public static ExEnchantSkillResult valueOf(boolean result) - { - return result ? STATIC_PACKET_TRUE : STATIC_PACKET_FALSE; - } + public static final ExEnchantSkillResult STATIC_PACKET_TRUE = new ExEnchantSkillResult(true); + public static final ExEnchantSkillResult STATIC_PACKET_FALSE = new ExEnchantSkillResult(false); private final boolean _enchanted; diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPledgeRecruitBoardDetail.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPledgeRecruitBoardDetail.java index 24537d35bb..625cc8bfa2 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPledgeRecruitBoardDetail.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPledgeRecruitBoardDetail.java @@ -41,6 +41,8 @@ public class ExPledgeRecruitBoardDetail implements IClientOutgoingPacket packet.writeD(_pledgeRecruitInfo.getKarma()); packet.writeS(_pledgeRecruitInfo.getInformation()); packet.writeS(_pledgeRecruitInfo.getDetailedInformation()); + packet.writeD(_pledgeRecruitInfo.getApplicationType()); + packet.writeD(_pledgeRecruitInfo.getRecruitType()); return true; } } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPledgeRecruitBoardSearch.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPledgeRecruitBoardSearch.java index 8123f509bb..999c0347f6 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPledgeRecruitBoardSearch.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPledgeRecruitBoardSearch.java @@ -72,6 +72,8 @@ public class ExPledgeRecruitBoardSearch implements IClientOutgoingPacket packet.writeD(clan.getMembersCount()); packet.writeD(_clanList.get(i).getKarma()); packet.writeS(_clanList.get(i).getInformation()); + packet.writeD(_clanList.get(i).getApplicationType()); + packet.writeD(_clanList.get(i).getRecruitType()); } return true; } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java index 0bbdf11afe..b7cfbb7a7d 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java @@ -19,7 +19,6 @@ package com.l2jmobius.gameserver.network.serverpackets; import java.util.Collection; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.data.xml.impl.SkillData; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.network.client.OutgoingPackets; @@ -53,7 +52,7 @@ public class GMViewSkillInfo implements IClientOutgoingPacket packet.writeD(skill.getDisplayId()); packet.writeD(0x00); packet.writeC(isDisabled && skill.isClanSkill() ? 1 : 0); - packet.writeC(SkillData.getInstance().isEnchantable(skill.getDisplayId()) ? 1 : 0); + packet.writeC(skill.isEnchantable() ? 1 : 0); } return true; } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortBuffStatusUpdate.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortBuffStatusUpdate.java index 2dbdf22bc4..0308c35462 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortBuffStatusUpdate.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortBuffStatusUpdate.java @@ -21,16 +21,18 @@ import com.l2jmobius.gameserver.network.client.OutgoingPackets; public class ShortBuffStatusUpdate implements IClientOutgoingPacket { - public static final ShortBuffStatusUpdate RESET_SHORT_BUFF = new ShortBuffStatusUpdate(0, 0, 0); + public static final ShortBuffStatusUpdate RESET_SHORT_BUFF = new ShortBuffStatusUpdate(0, 0, 0, 0); private final int _skillId; private final int _skillLvl; + private final int _skillSubLvl; private final int _duration; - public ShortBuffStatusUpdate(int skillId, int skillLvl, int duration) + public ShortBuffStatusUpdate(int skillId, int skillLvl, int skillSubLvl, int duration) { _skillId = skillId; _skillLvl = skillLvl; + _skillSubLvl = skillSubLvl; _duration = duration; } @@ -40,7 +42,8 @@ public class ShortBuffStatusUpdate implements IClientOutgoingPacket OutgoingPackets.SHORT_BUFF_STATUS_UPDATE.writeId(packet); packet.writeD(_skillId); - packet.writeD(_skillLvl); + packet.writeH(_skillLvl); + packet.writeH(_skillSubLvl); packet.writeD(_duration); return true; } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortCutInit.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortCutInit.java index a26a0df88e..0717c71445 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortCutInit.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortCutInit.java @@ -62,7 +62,8 @@ public final class ShortCutInit implements IClientOutgoingPacket case SKILL: { packet.writeD(sc.getId()); - packet.writeD(sc.getLevel()); + packet.writeH(sc.getLevel()); + packet.writeH(sc.getSubLevel()); packet.writeD(sc.getSharedReuseGroup()); packet.writeC(0x00); // C5 packet.writeD(0x01); // C6 diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortCutRegister.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortCutRegister.java index 4deddec070..670dc87d94 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortCutRegister.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShortCutRegister.java @@ -57,7 +57,7 @@ public final class ShortCutRegister implements IClientOutgoingPacket { packet.writeD(_shortcut.getId()); packet.writeH(_shortcut.getLevel()); - packet.writeH(0x00); // Sub level + packet.writeH(_shortcut.getSubLevel()); packet.writeD(_shortcut.getSharedReuseGroup()); packet.writeC(0x00); // C5 packet.writeD(_shortcut.getCharacterType()); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SkillCoolTime.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SkillCoolTime.java index 5ac8bac375..3122a542ea 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SkillCoolTime.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SkillCoolTime.java @@ -37,12 +37,12 @@ public class SkillCoolTime implements IClientOutgoingPacket public SkillCoolTime(L2PcInstance player) { - final Map skillReuseTimeStamps = player.getSkillReuseTimeStamps(); + final Map skillReuseTimeStamps = player.getSkillReuseTimeStamps(); if (skillReuseTimeStamps != null) { for (TimeStamp ts : skillReuseTimeStamps.values()) { - final Skill skill = SkillData.getInstance().getSkill(ts.getSkillId(), ts.getSkillLvl()); + final Skill skill = SkillData.getInstance().getSkill(ts.getSkillId(), ts.getSkillLvl(), ts.getSkillSubLvl()); if (ts.hasNotPassed() && !skill.isNotBroadcastable()) { _skillReuseTimeStamps.add(ts); diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SkillList.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SkillList.java index b5249ee787..8c4707591f 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SkillList.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SkillList.java @@ -34,24 +34,26 @@ public final class SkillList implements IClientOutgoingPacket public int id; public int reuseDelayGroup; public int level; + public int subLevel; public boolean passive; public boolean disabled; public boolean enchanted; - Skill(int pId, int pReuseDelayGroup, int pLevel, boolean pPassive, boolean pDisabled, boolean pEnchanted) + Skill(int pId, int pReuseDelayGroup, int pLevel, int pSubLevel, boolean pPassive, boolean pDisabled, boolean pEnchanted) { id = pId; reuseDelayGroup = pReuseDelayGroup; level = pLevel; + subLevel = pSubLevel; passive = pPassive; disabled = pDisabled; enchanted = pEnchanted; } } - public void addSkill(int id, int reuseDelayGroup, int level, boolean passive, boolean disabled, boolean enchanted) + public void addSkill(int id, int reuseDelayGroup, int level, int subLevel, boolean passive, boolean disabled, boolean enchanted) { - _skills.add(new Skill(id, reuseDelayGroup, level, passive, disabled, enchanted)); + _skills.add(new Skill(id, reuseDelayGroup, level, subLevel, passive, disabled, enchanted)); } public void setLastLearnedSkillId(int lastLearnedSkillId) @@ -63,12 +65,13 @@ public final class SkillList implements IClientOutgoingPacket public boolean write(PacketWriter packet) { OutgoingPackets.SKILL_LIST.writeId(packet); - _skills.sort(Comparator.comparing(s -> SkillData.getInstance().getSkill(s.id, s.level).isToggle() ? 1 : 0)); + _skills.sort(Comparator.comparing(s -> SkillData.getInstance().getSkill(s.id, s.level, s.subLevel).isToggle() ? 1 : 0)); packet.writeD(_skills.size()); for (Skill temp : _skills) { packet.writeD(temp.passive ? 1 : 0); - packet.writeD(temp.level); + packet.writeH(temp.level); + packet.writeH(temp.subLevel); packet.writeD(temp.id); packet.writeD(temp.reuseDelayGroup); // GOD ReuseDelayShareGroupID packet.writeC(temp.disabled ? 1 : 0); // iSkillDisabled diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyInfo.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyInfo.java index 741a584de9..77c73624ab 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyInfo.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyInfo.java @@ -46,7 +46,7 @@ public class ExResponseCommissionBuyInfo extends AbstractItemPacket packet.writeQ(_commissionItem.getPricePerUnit()); packet.writeQ(_commissionItem.getCommissionId()); packet.writeD(0); // CommissionItemType seems client does not really need it. - writeCommissionItem(packet, _commissionItem.getItemInfo()); + writeItem(packet, _commissionItem.getItemInfo()); } return true; } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionList.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionList.java index be5ab464e3..b64b08a297 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionList.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionList.java @@ -90,7 +90,7 @@ public class ExResponseCommissionList extends AbstractItemPacket packet.writeD((commissionItem.getDurationInDays() - 1) / 2); packet.writeD((int) commissionItem.getEndTime().getEpochSecond()); packet.writeS(null); // Seller Name its not displayed somewhere so i am not sending it to decrease traffic. - writeCommissionItem(packet, commissionItem.getItemInfo()); + writeItem(packet, commissionItem.getItemInfo()); } break; } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/taskmanager/AttackStanceTaskManager.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/taskmanager/AttackStanceTaskManager.java index cc8da7fa89..6e059c1112 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/taskmanager/AttackStanceTaskManager.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/taskmanager/AttackStanceTaskManager.java @@ -54,17 +54,6 @@ public class AttackStanceTaskManager { if (actor != null) { - // if (actor.isPlayable()) - // { - // final PlayerInstance player = actor.getActingPlayer(); - // for (L2CubicInstance cubic : player.getCubics().values()) - // { - // if (cubic.getId() != L2CubicInstance.LIFE_CUBIC) - // { - // cubic.doAction(); - // } - // } - // } _attackStanceTasks.put(actor, System.currentTimeMillis()); } }