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 @@
-
-
- -820
@@ -468,9 +465,6 @@
-
-
- -820
@@ -488,9 +482,6 @@
-
-
- -820
@@ -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 @@
-
-
- -820
@@ -87,9 +84,6 @@
-
-
- -820
@@ -110,9 +104,6 @@
-
-
- -820
@@ -133,9 +124,6 @@
-
-
- -820
@@ -156,9 +144,6 @@
-
-
- -820
@@ -179,9 +164,6 @@
-
-
- -820
@@ -202,9 +184,6 @@
-
-
- -820
@@ -225,9 +204,6 @@
-
-
- -820
@@ -248,9 +224,6 @@
-
-
- -820
@@ -271,9 +244,6 @@
-
-
- -820
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 @@
-
-
- 1719
@@ -518,9 +515,6 @@
-
-
- 1824
@@ -556,9 +550,6 @@
-
-
- 2138
@@ -576,9 +567,6 @@
-
-
- 2552
@@ -635,9 +623,6 @@
-
-
- 39106
@@ -658,9 +643,6 @@
-
-
- 43126
@@ -681,9 +663,6 @@
-
-
- 43126
@@ -704,9 +683,6 @@
-
-
- 43126
@@ -727,9 +703,6 @@
-
-
- 49147
@@ -750,9 +723,6 @@
-
-
- 52169
@@ -774,9 +744,6 @@
-
-
- 90320
@@ -797,9 +764,6 @@
-
-
- 60225
@@ -821,9 +785,6 @@
-
-
- 105413
@@ -844,9 +805,6 @@
-
-
- 69284
@@ -867,9 +825,6 @@
-
-
- 74314
@@ -890,9 +845,6 @@
-
-
- 87377
@@ -914,9 +866,6 @@
-
-
- 150665
@@ -937,9 +886,6 @@
-
-
- 87377
@@ -960,9 +906,6 @@
-
-
- 92409
@@ -983,9 +926,6 @@
-
-
- 87377
@@ -1007,9 +947,6 @@
-
-
- 150665
@@ -1030,9 +967,6 @@
-
-
- 87377
@@ -1054,9 +988,6 @@
-
-
- 150665
@@ -1077,9 +1008,6 @@
-
-
- 87377
@@ -1100,9 +1028,6 @@
-
-
- 92409
@@ -1123,9 +1048,6 @@
-
-
- 87377
@@ -1147,9 +1069,6 @@
-
-
- 150665
@@ -1170,9 +1089,6 @@
-
-
- 87377
@@ -1193,9 +1109,6 @@
-
-
- 92409
@@ -1216,9 +1129,6 @@
-
-
- 87377
@@ -1240,9 +1150,6 @@
-
-
- 150665
@@ -1264,9 +1171,6 @@
-
-
- 158718
@@ -1294,9 +1198,6 @@
-
-
- 158773
@@ -1320,9 +1221,6 @@
-
-
- 1010
@@ -1340,9 +1238,6 @@
-
-
- 1115
@@ -1360,9 +1255,6 @@
-
-
- 1323
@@ -1380,9 +1272,6 @@
-
-
- 1633
@@ -1403,9 +1292,6 @@
-
-
- 2466
@@ -1426,9 +1312,6 @@
-
-
- 2779
@@ -1449,9 +1332,6 @@
-
-
- 2779
@@ -1472,9 +1352,6 @@
-
-
- 2779
@@ -1495,9 +1372,6 @@
-
-
- 3092
@@ -1518,9 +1392,6 @@
-
-
- 32105
@@ -1541,9 +1412,6 @@
-
-
- 37141
@@ -1564,9 +1432,6 @@
-
-
- 43177
@@ -1587,9 +1452,6 @@
-
-
- 46196
@@ -1610,9 +1472,6 @@
-
-
- 55236
@@ -1633,9 +1492,6 @@
-
-
- 55236
@@ -1656,9 +1512,6 @@
-
-
- 58256
@@ -1679,9 +1532,6 @@
-
-
- 55236
@@ -1702,9 +1552,6 @@
-
-
- 55236
@@ -1725,9 +1572,6 @@
-
-
- 55236
@@ -1748,9 +1592,6 @@
-
-
- 58256
@@ -1771,9 +1612,6 @@
-
-
- 55236
@@ -1794,9 +1632,6 @@
-
-
- 55236
@@ -1817,9 +1652,6 @@
-
-
- 58256
@@ -1840,9 +1672,6 @@
-
-
- 55236
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 @@
-
-
- -820
@@ -471,9 +468,6 @@
-
-
- -820
@@ -494,9 +488,6 @@
-
-
- -820
@@ -517,9 +508,6 @@
-
-
- -820
@@ -540,9 +528,6 @@
-
-
- -820
@@ -563,9 +548,6 @@
-
-
- -820
@@ -586,9 +568,6 @@
-
-
- -820
@@ -609,9 +588,6 @@
-
-
- -820
@@ -632,9 +608,6 @@
-
-
- -820
@@ -656,9 +629,6 @@
-
-
- -820
@@ -679,9 +649,6 @@
-
-
- -820
@@ -702,9 +669,6 @@
-
-
- -820
@@ -725,9 +689,6 @@
-
-
- -820
@@ -748,9 +709,6 @@
-
-
- -820
@@ -771,9 +729,6 @@
-
-
- -820
@@ -794,9 +749,6 @@
-
-
- -820
@@ -817,9 +769,6 @@
-
-
- -820
@@ -840,9 +789,6 @@
-
-
- -820
@@ -863,9 +809,6 @@
-
-
- -820
@@ -886,9 +829,6 @@
-
-
- -820
@@ -909,9 +849,6 @@
-
-
- -820
@@ -932,9 +869,6 @@
-
-
- -820
@@ -955,9 +889,6 @@
-
-
- -820
@@ -978,9 +909,6 @@
-
-
- -820
@@ -1001,9 +929,6 @@
-
-
- -820
@@ -1024,9 +949,6 @@
-
-
- -820
@@ -1047,9 +969,6 @@
-
-
- -820
@@ -1070,9 +989,6 @@
-
-
- -820
@@ -1093,9 +1009,6 @@
-
-
- -820
@@ -1116,9 +1029,6 @@
-
-
- -820
@@ -1139,9 +1049,6 @@
-
-
- -820
@@ -1162,9 +1069,6 @@
-
-
- -820
@@ -1185,9 +1089,6 @@
-
-
- -820
@@ -1208,9 +1109,6 @@
-
-
- -820
@@ -1231,9 +1129,6 @@
-
-
- -820
@@ -1254,9 +1149,6 @@
-
-
- -820
@@ -1277,9 +1169,6 @@
-
-
- -820
@@ -1300,9 +1189,6 @@
-
-
- -820
@@ -1323,9 +1209,6 @@
-
-
- -820
@@ -1346,9 +1229,6 @@
-
-
- -820
@@ -1369,9 +1249,6 @@
-
-
- -820
@@ -1392,9 +1269,6 @@
-
-
- -820
@@ -1415,9 +1289,6 @@
-
-
- -820
@@ -1438,9 +1309,6 @@
-
-
- -820
@@ -1461,9 +1329,6 @@
-
-
- -820
@@ -1484,9 +1349,6 @@
-
-
- -820
@@ -1507,9 +1369,6 @@
-
-
- -820
@@ -1530,9 +1389,6 @@
-
-
- -820
@@ -1553,9 +1409,6 @@
-
-
- -820
@@ -1576,9 +1429,6 @@
-
-
- -820
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 @@
-
-
- -820
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 @@
-
-
- 2138
@@ -33,9 +30,6 @@
-
-
- 3067
@@ -54,9 +48,6 @@
-
-
- 3486
@@ -75,9 +66,6 @@
-
-
- 1323
@@ -96,9 +84,6 @@
-
-
- 1942
@@ -117,9 +102,6 @@
-
-
- 2154
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 @@
-
-
- 5196
@@ -372,9 +363,6 @@
-
-
- 51142
@@ -398,9 +386,6 @@
-
-
- 32
@@ -423,9 +408,6 @@
-
-
- 32
@@ -448,9 +430,6 @@
-
-
- 3260
@@ -496,9 +475,6 @@
-
-
- 3279
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 @@
-
-
- 54169
@@ -1680,9 +1653,6 @@
-
-
- 78345
@@ -1703,9 +1673,6 @@
-
-
- 83377
@@ -1726,9 +1693,6 @@
-
-
- 83377
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 @@
-
-
- 86409
@@ -38,9 +35,6 @@
-
-
- 34105
@@ -61,9 +55,6 @@
-
-
- 49216
@@ -84,9 +75,6 @@
-
-
- 52236
@@ -107,9 +95,6 @@
-
-
- 52236
@@ -130,9 +115,6 @@
-
-
- 53256
@@ -154,9 +136,6 @@
-
-
- 127561
@@ -178,9 +157,6 @@
-
-
- 139665
@@ -202,9 +178,6 @@
-
-
- 147718
@@ -226,9 +199,6 @@
-
-
- 147718
@@ -1723,9 +1693,6 @@
-
-
- -820
@@ -1746,9 +1713,6 @@
-
-
- -820
@@ -1769,9 +1733,6 @@
-
-
- -820
@@ -1792,9 +1753,6 @@
-
-
- -820
@@ -1815,9 +1773,6 @@
-
-
- -820
@@ -1838,9 +1793,6 @@
-
-
- -820
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 @@
-
-
- -820
@@ -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 @@
-
-
- 86409
@@ -117,9 +114,6 @@
-
-
- 53256
@@ -179,9 +173,6 @@
-
-
- 139665
@@ -241,9 +232,6 @@
-
-
- 293
@@ -319,9 +307,6 @@
-
-
- -820
@@ -344,9 +329,6 @@
-
-
- 293
@@ -539,9 +521,6 @@
-
-
- 147718
@@ -601,9 +580,6 @@
-
-
- 147718
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 @@
-
-
- -820
@@ -1613,9 +1598,6 @@
-
-
- 83
@@ -1714,9 +1696,6 @@
-
-
- 166866
@@ -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 @@
-
-
- -820
@@ -1769,9 +1754,6 @@
-
-
- 83
@@ -1873,9 +1855,6 @@
-
-
- 157866
@@ -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 @@
-
-
- 3486
@@ -1109,9 +1100,6 @@
-
-
- 2154
@@ -1134,9 +1122,6 @@
-
-
- -820
@@ -1225,9 +1210,6 @@
-
-
- 95
@@ -1251,9 +1233,6 @@
-
-
- 61
@@ -1320,9 +1299,6 @@
-
-
- -820
@@ -1438,9 +1414,6 @@
-
-
- 49147
@@ -1465,9 +1438,6 @@
-
-
- 3092
@@ -1558,9 +1528,6 @@
-
-
- 224
@@ -1605,9 +1572,6 @@
-
-
- -820
@@ -1745,9 +1709,6 @@
-
-
- 69284
@@ -1772,9 +1733,6 @@
-
-
- 43177
@@ -1865,9 +1823,6 @@
-
-
- 157
@@ -1891,9 +1846,6 @@
-
-
- 98
@@ -1938,9 +1890,6 @@
-
-
- -820
@@ -1965,9 +1914,6 @@
-
-
- 41
@@ -1990,9 +1936,6 @@
-
-
- 41
@@ -2106,9 +2049,6 @@
-
-
- 78345
@@ -2133,9 +2073,6 @@
-
-
- 49216
@@ -2159,9 +2096,6 @@
-
-
- 41
@@ -2184,9 +2118,6 @@
-
-
- 41
@@ -2210,9 +2141,6 @@
-
-
- 171
@@ -2236,9 +2164,6 @@
-
-
- 107
@@ -2283,9 +2208,6 @@
-
-
- -820
@@ -2310,9 +2232,6 @@
-
-
- 46
@@ -2335,9 +2254,6 @@
-
-
- 46
@@ -2451,9 +2367,6 @@
-
-
- 139665
@@ -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 @@
-
-
- 147718
@@ -67,9 +64,6 @@
-
-
- 49
@@ -92,9 +86,6 @@
-
-
- 49
@@ -643,9 +634,6 @@
-
-
- -820
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 @@
-
-
- 113592
@@ -811,9 +793,6 @@
-
-
- 71370
@@ -833,9 +812,6 @@
-
-
- 92
@@ -855,9 +831,6 @@
-
-
- 61
@@ -877,9 +850,6 @@
-
-
- 61
@@ -899,9 +869,6 @@
-
-
- -820
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 @@
-
-
- 107592
@@ -441,9 +423,6 @@
-
-
- 67370
@@ -464,9 +443,6 @@
-
-
- 92
@@ -487,9 +463,6 @@
-
-
- 61
@@ -510,9 +483,6 @@
-
-
- 61
@@ -533,9 +503,6 @@
-
-
- -820
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 @@
-
-
- 39106
@@ -626,9 +617,6 @@
-
-
- 2466
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 @@
-
-
- -820
@@ -243,9 +240,6 @@
-
-