diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/config/Character.ini b/L2J_Mobius_01.0_Ertheia/dist/game/config/Character.ini
index 8ff4dab335..c47e6b113b 100644
--- a/L2J_Mobius_01.0_Ertheia/dist/game/config/Character.ini
+++ b/L2J_Mobius_01.0_Ertheia/dist/game/config/Character.ini
@@ -347,6 +347,10 @@ MaxMAtkSpeed = 1999
# Default: 250
MaxEvasion = 250
+# Maximum character HP.
+# Default: 150000
+MaxHP = 150000
+
# Minimum and Maximum Abnormal State Success Rate.
# This affect all skills/effects chances, except in skills where minChance or maxChance parameters are defined.
# Default: H5 minimum of 10% and maximum of 90%.
diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/others/DragonWeaponListeners.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/others/DragonWeaponListeners.java
deleted file mode 100644
index c50af03d70..0000000000
--- a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/ai/others/DragonWeaponListeners.java
+++ /dev/null
@@ -1,455 +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 ai.others;
-
-import org.l2jmobius.commons.util.CommonUtil;
-import org.l2jmobius.gameserver.model.actor.Player;
-import org.l2jmobius.gameserver.model.events.EventType;
-import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
-import org.l2jmobius.gameserver.model.events.annotations.Id;
-import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
-import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
-import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemEquip;
-import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip;
-import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
-import org.l2jmobius.gameserver.model.item.Weapon;
-
-import ai.AbstractNpcAI;
-
-/**
- * @author Mobius
- */
-public class DragonWeaponListeners extends AbstractNpcAI
-{
- private static final int[] WEAPON_IDS =
- {
- 36417,
- 36418,
- 36419,
- 36420,
- 36421,
- 36422,
- 36423,
- 36424,
- 36425,
- 36426,
- 36441,
- 36442,
- 36443,
- 36444,
- 36445,
- 36446,
- 36447,
- 36448,
- 36449,
- 36450,
- 36465,
- 36466,
- 36467,
- 36468,
- 36469,
- 36470,
- 36471,
- 36472,
- 36473,
- 36474,
- 36489,
- 36490,
- 36491,
- 36492,
- 36493,
- 36494,
- 36495,
- 36496,
- 36497,
- 36498,
- 36427,
- 36428,
- 36429,
- 36430,
- 36431,
- 36432,
- 36433,
- 36451,
- 36452,
- 36453,
- 36454,
- 36455,
- 36456,
- 36457,
- 36475,
- 36476,
- 36477,
- 36478,
- 36479,
- 36480,
- 36481,
- 36499,
- 36500,
- 36501,
- 36502,
- 36503,
- 36504,
- 36505,
- 36434,
- 36435,
- 36436,
- 36437,
- 36438,
- 36439,
- 36440,
- 36458,
- 36459,
- 36460,
- 36461,
- 36462,
- 36463,
- 36464,
- 36482,
- 36483,
- 36484,
- 36485,
- 36486,
- 36487,
- 36488,
- 36506,
- 36507,
- 36508,
- 36509,
- 36510,
- 36511,
- 36512,
- 80066,
- 80067,
- 80068,
- 80069,
- 80070,
- 80071,
- 80072,
- 80073,
- 80074,
- 80075,
- 80076,
- 80077,
- 80078,
- 80079,
- 80080,
- 80081,
- 80082,
- 80083,
- 80084,
- 80085,
- 80086,
- 80087,
- 80088,
- 80089,
- 80315,
- 80316,
- 80317,
- 80318,
- };
-
- @RegisterEvent(EventType.ON_PLAYER_LOGIN)
- @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
- public void onPlayerLogin(OnPlayerLogin event)
- {
- final Player player = event.getPlayer();
- if (player != null)
- {
- final Weapon weapon = player.getActiveWeaponItem();
- if ((weapon != null) && CommonUtil.contains(WEAPON_IDS, weapon.getId()))
- {
- player.setDragonWeaponEquipped(true);
- }
- }
- }
-
- @RegisterEvent(EventType.ON_PLAYER_ITEM_EQUIP)
- @RegisterType(ListenerRegisterType.ITEM)
- @Id(36417)
- @Id(36418)
- @Id(36419)
- @Id(36420)
- @Id(36421)
- @Id(36422)
- @Id(36423)
- @Id(36424)
- @Id(36425)
- @Id(36426)
- @Id(36441)
- @Id(36442)
- @Id(36443)
- @Id(36444)
- @Id(36445)
- @Id(36446)
- @Id(36447)
- @Id(36448)
- @Id(36449)
- @Id(36450)
- @Id(36465)
- @Id(36466)
- @Id(36467)
- @Id(36468)
- @Id(36469)
- @Id(36470)
- @Id(36471)
- @Id(36472)
- @Id(36473)
- @Id(36474)
- @Id(36489)
- @Id(36490)
- @Id(36491)
- @Id(36492)
- @Id(36493)
- @Id(36494)
- @Id(36495)
- @Id(36496)
- @Id(36497)
- @Id(36498)
- @Id(36427)
- @Id(36428)
- @Id(36429)
- @Id(36430)
- @Id(36431)
- @Id(36432)
- @Id(36433)
- @Id(36451)
- @Id(36452)
- @Id(36453)
- @Id(36454)
- @Id(36455)
- @Id(36456)
- @Id(36457)
- @Id(36475)
- @Id(36476)
- @Id(36477)
- @Id(36478)
- @Id(36479)
- @Id(36480)
- @Id(36481)
- @Id(36499)
- @Id(36500)
- @Id(36501)
- @Id(36502)
- @Id(36503)
- @Id(36504)
- @Id(36505)
- @Id(36434)
- @Id(36435)
- @Id(36436)
- @Id(36437)
- @Id(36438)
- @Id(36439)
- @Id(36440)
- @Id(36458)
- @Id(36459)
- @Id(36460)
- @Id(36461)
- @Id(36462)
- @Id(36463)
- @Id(36464)
- @Id(36482)
- @Id(36483)
- @Id(36484)
- @Id(36485)
- @Id(36486)
- @Id(36487)
- @Id(36488)
- @Id(36506)
- @Id(36507)
- @Id(36508)
- @Id(36509)
- @Id(36510)
- @Id(36511)
- @Id(36512)
- @Id(80066)
- @Id(80067)
- @Id(80068)
- @Id(80069)
- @Id(80070)
- @Id(80071)
- @Id(80072)
- @Id(80073)
- @Id(80074)
- @Id(80075)
- @Id(80076)
- @Id(80077)
- @Id(80078)
- @Id(80079)
- @Id(80080)
- @Id(80081)
- @Id(80082)
- @Id(80083)
- @Id(80084)
- @Id(80085)
- @Id(80086)
- @Id(80087)
- @Id(80088)
- @Id(80089)
- @Id(80315)
- @Id(80316)
- @Id(80317)
- @Id(80318)
- public void onPlayerItemEquip(OnPlayerItemEquip event)
- {
- final Player player = event.getPlayer();
- if (player != null)
- {
- player.setDragonWeaponEquipped(true);
- }
- }
-
- @RegisterEvent(EventType.ON_PLAYER_ITEM_UNEQUIP)
- @RegisterType(ListenerRegisterType.ITEM)
- @Id(36417)
- @Id(36418)
- @Id(36419)
- @Id(36420)
- @Id(36421)
- @Id(36422)
- @Id(36423)
- @Id(36424)
- @Id(36425)
- @Id(36426)
- @Id(36441)
- @Id(36442)
- @Id(36443)
- @Id(36444)
- @Id(36445)
- @Id(36446)
- @Id(36447)
- @Id(36448)
- @Id(36449)
- @Id(36450)
- @Id(36465)
- @Id(36466)
- @Id(36467)
- @Id(36468)
- @Id(36469)
- @Id(36470)
- @Id(36471)
- @Id(36472)
- @Id(36473)
- @Id(36474)
- @Id(36489)
- @Id(36490)
- @Id(36491)
- @Id(36492)
- @Id(36493)
- @Id(36494)
- @Id(36495)
- @Id(36496)
- @Id(36497)
- @Id(36498)
- @Id(36427)
- @Id(36428)
- @Id(36429)
- @Id(36430)
- @Id(36431)
- @Id(36432)
- @Id(36433)
- @Id(36451)
- @Id(36452)
- @Id(36453)
- @Id(36454)
- @Id(36455)
- @Id(36456)
- @Id(36457)
- @Id(36475)
- @Id(36476)
- @Id(36477)
- @Id(36478)
- @Id(36479)
- @Id(36480)
- @Id(36481)
- @Id(36499)
- @Id(36500)
- @Id(36501)
- @Id(36502)
- @Id(36503)
- @Id(36504)
- @Id(36505)
- @Id(36434)
- @Id(36435)
- @Id(36436)
- @Id(36437)
- @Id(36438)
- @Id(36439)
- @Id(36440)
- @Id(36458)
- @Id(36459)
- @Id(36460)
- @Id(36461)
- @Id(36462)
- @Id(36463)
- @Id(36464)
- @Id(36482)
- @Id(36483)
- @Id(36484)
- @Id(36485)
- @Id(36486)
- @Id(36487)
- @Id(36488)
- @Id(36506)
- @Id(36507)
- @Id(36508)
- @Id(36509)
- @Id(36510)
- @Id(36511)
- @Id(36512)
- @Id(80066)
- @Id(80067)
- @Id(80068)
- @Id(80069)
- @Id(80070)
- @Id(80071)
- @Id(80072)
- @Id(80073)
- @Id(80074)
- @Id(80075)
- @Id(80076)
- @Id(80077)
- @Id(80078)
- @Id(80079)
- @Id(80080)
- @Id(80081)
- @Id(80082)
- @Id(80083)
- @Id(80084)
- @Id(80085)
- @Id(80086)
- @Id(80087)
- @Id(80088)
- @Id(80089)
- @Id(80315)
- @Id(80316)
- @Id(80317)
- @Id(80318)
- public void onPlayerItemUnequip(OnPlayerItemUnequip event)
- {
- final Player player = event.getPlayer();
- if (player != null)
- {
- player.setDragonWeaponEquipped(false);
- }
- }
-
- public static void main(String[] args)
- {
- new DragonWeaponListeners();
- }
-}
diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 4b4d6d3d18..711bc3edb6 100644
--- a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -182,6 +182,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("HpCpHeal", HpCpHeal::new);
EffectHandler.getInstance().registerHandler("HpCpHealCritical", HpCpHealCritical::new);
EffectHandler.getInstance().registerHandler("HpDrain", HpDrain::new);
+ EffectHandler.getInstance().registerHandler("HpLimit", HpLimit::new);
EffectHandler.getInstance().registerHandler("HpRegen", HpRegen::new);
EffectHandler.getInstance().registerHandler("HpToOwner", HpToOwner::new);
EffectHandler.getInstance().registerHandler("IgnoreDeath", IgnoreDeath::new);
diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/HpLimit.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/HpLimit.java
new file mode 100644
index 0000000000..3e254041ec
--- /dev/null
+++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/HpLimit.java
@@ -0,0 +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 org.l2jmobius.gameserver.model.StatSet;
+import org.l2jmobius.gameserver.model.stats.Stat;
+
+/**
+ * @author dontknowdontcare
+ */
+public class HpLimit extends AbstractStatEffect
+{
+ public HpLimit(StatSet params)
+ {
+ super(params, Stat.HP_LIMIT);
+ }
+}
diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/items/36400-36499.xml b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/items/36400-36499.xml
index 700f7342ca..098cfc5839 100644
--- a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/items/36400-36499.xml
+++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/items/36400-36499.xml
@@ -212,6 +212,7 @@
-
+
@@ -237,6 +238,7 @@
-
+
@@ -261,6 +263,7 @@
-
+
@@ -288,6 +291,7 @@
-
+
@@ -313,6 +317,7 @@
-
+
@@ -336,6 +341,7 @@
-
+
@@ -365,6 +371,7 @@
-
+
@@ -390,6 +397,7 @@
-
+
@@ -415,6 +423,7 @@
-
+
@@ -440,6 +449,7 @@
-
+
@@ -464,6 +474,7 @@
-
+
@@ -489,6 +500,7 @@
-
+
@@ -513,6 +525,7 @@
-
+
@@ -537,6 +550,7 @@
-
+
@@ -564,6 +578,7 @@
-
+
@@ -589,6 +604,7 @@
-
+
@@ -615,6 +631,7 @@
-
+
@@ -642,6 +659,7 @@
-
+
@@ -667,6 +685,7 @@
-
+
@@ -694,6 +713,7 @@
-
+
@@ -718,6 +738,7 @@
-
+
@@ -743,6 +764,7 @@
-
+
@@ -767,6 +789,7 @@
-
+
@@ -794,6 +817,7 @@
-
+
@@ -819,6 +843,7 @@
-
+
@@ -848,6 +873,7 @@
-
+
@@ -876,6 +902,7 @@
-
+
@@ -906,6 +933,7 @@
-
+
@@ -935,6 +963,7 @@
-
+
@@ -963,6 +992,7 @@
-
+
@@ -993,6 +1023,7 @@
-
+
@@ -1022,6 +1053,7 @@
-
+
@@ -1051,6 +1083,7 @@
-
+
@@ -1080,6 +1113,7 @@
-
+
@@ -1109,6 +1143,7 @@
-
+
@@ -1138,6 +1173,7 @@
-
+
@@ -1166,6 +1202,7 @@
-
+
@@ -1194,6 +1231,7 @@
-
+
@@ -1224,6 +1262,7 @@
-
+
@@ -1253,6 +1292,7 @@
-
+
@@ -1283,6 +1323,7 @@
-
+
@@ -1313,6 +1354,7 @@
-
+
@@ -1342,6 +1384,7 @@
-
+
@@ -1372,6 +1415,7 @@
-
+
@@ -1400,6 +1444,7 @@
-
+
@@ -1430,6 +1475,7 @@
-
+
@@ -1458,6 +1504,7 @@
-
+
@@ -1488,6 +1535,7 @@
-
+
@@ -1517,6 +1565,7 @@
-
+
@@ -1549,6 +1598,7 @@
-
+
@@ -1580,6 +1630,7 @@
-
+
@@ -1613,6 +1664,7 @@
-
+
@@ -1645,6 +1697,7 @@
-
+
@@ -1676,6 +1729,7 @@
-
+
@@ -1709,6 +1763,7 @@
-
+
@@ -1741,6 +1796,7 @@
-
+
@@ -1773,6 +1829,7 @@
-
+
@@ -1805,6 +1862,7 @@
-
+
@@ -1837,6 +1895,7 @@
-
+
@@ -1869,6 +1928,7 @@
-
+
@@ -1900,6 +1960,7 @@
-
+
@@ -1931,6 +1992,7 @@
-
+
@@ -1964,6 +2026,7 @@
-
+
@@ -1996,6 +2059,7 @@
-
+
@@ -2029,6 +2093,7 @@
-
+
@@ -2063,6 +2128,7 @@
-
+
@@ -2095,6 +2161,7 @@
-
+
@@ -2128,6 +2195,7 @@
-
+
@@ -2159,6 +2227,7 @@
-
+
@@ -2192,6 +2261,7 @@
-
+
@@ -2223,6 +2293,7 @@
-
+
@@ -2256,6 +2327,7 @@
-
+
@@ -2288,6 +2360,7 @@
-
+
@@ -2321,6 +2394,7 @@
-
+
@@ -2353,6 +2427,7 @@
-
+
@@ -2387,6 +2462,7 @@
-
+
@@ -2420,6 +2496,7 @@
-
+
@@ -2452,6 +2529,7 @@
-
+
@@ -2486,6 +2564,7 @@
-
+
@@ -2519,6 +2598,7 @@
-
+
@@ -2552,6 +2632,7 @@
-
+
@@ -2585,6 +2666,7 @@
-
+
@@ -2618,6 +2700,7 @@
-
+
diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/items/36500-36599.xml b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/items/36500-36599.xml
index 8c87a21761..cc5d244942 100644
--- a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/items/36500-36599.xml
+++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/items/36500-36599.xml
@@ -3,6 +3,7 @@
-
+
@@ -35,6 +36,7 @@
-
+
@@ -67,6 +69,7 @@
-
+
@@ -101,6 +104,7 @@
-
+
@@ -134,6 +138,7 @@
-
+
@@ -168,6 +173,7 @@
-
+
@@ -204,6 +210,7 @@
-
+
@@ -237,6 +244,7 @@
-
+
@@ -271,6 +279,7 @@
-
+
@@ -303,6 +312,7 @@
-
+
@@ -337,6 +347,7 @@
-
+
@@ -369,6 +380,7 @@
-
+
@@ -403,6 +415,7 @@
-
+
diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/documentation.txt
index 6550b5db2b..84a62b591c 100644
--- a/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/documentation.txt
+++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/stats/skills/documentation.txt
@@ -153,6 +153,7 @@ HpCpHealCritical: HpCp heal effects always trigger Magic Critical Hit.
HpCpHeal: Increases current HP by a given amount. If the given amount exceeds maximum HP, it increases current CP with the rest value as well.
HpDrain: Magical attack that absorbs given percentage of the damage inflicted as HP.
Hp: Increases current HP by a static value.
+HpLimit: Increase a character's max hp limit (l2jmobius)
HpRegen: HP Regeneration stat.
HpToOwner: DOT effect that absorbs HP over time.
IgnoreDeath: Become undying. Hp cannot decrease below 1.
diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/Config.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/Config.java
index 631dd42006..236afb3e6e 100644
--- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/Config.java
+++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/Config.java
@@ -209,6 +209,7 @@ public class Config
public static int MAX_PATK_SPEED;
public static int MAX_MATK_SPEED;
public static int MAX_EVASION;
+ public static int MAX_HP;
public static int MIN_ABNORMAL_STATE_SUCCESS_RATE;
public static int MAX_ABNORMAL_STATE_SUCCESS_RATE;
public static long MAX_SP;
@@ -1781,6 +1782,7 @@ public class Config
MAX_PATK_SPEED = characterConfig.getInt("MaxPAtkSpeed", 1500);
MAX_MATK_SPEED = characterConfig.getInt("MaxMAtkSpeed", 1999);
MAX_EVASION = characterConfig.getInt("MaxEvasion", 250);
+ MAX_HP = characterConfig.getInt("MaxHP", 150000);
MIN_ABNORMAL_STATE_SUCCESS_RATE = characterConfig.getInt("MinAbnormalStateSuccessRate", 10);
MAX_ABNORMAL_STATE_SUCCESS_RATE = characterConfig.getInt("MaxAbnormalStateSuccessRate", 90);
MAX_SP = characterConfig.getLong("MaxSp", 50000000000L) >= 0 ? characterConfig.getLong("MaxSp", 50000000000L) : Long.MAX_VALUE;
diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java
index e83c5ce781..ac9e996c2a 100644
--- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java
+++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java
@@ -756,8 +756,6 @@ public class Player extends Playable
private int _cursedWeaponEquippedId = 0;
private boolean _combatFlagEquippedId = false;
- private boolean _isDragonWeaponEquipped = false;
-
private boolean _canRevive = true;
private int _reviveRequested = 0;
private double _revivePower = 0;
@@ -11441,16 +11439,6 @@ public class Player extends Playable
return _cursedWeaponEquippedId;
}
- public void setDragonWeaponEquipped(boolean value)
- {
- _isDragonWeaponEquipped = value;
- }
-
- public boolean isDragonWeaponEquipped()
- {
- return _isDragonWeaponEquipped;
- }
-
public boolean isCombatFlagEquipped()
{
return _combatFlagEquippedId;
diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/item/Weapon.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/item/Weapon.java
index d24c63aaef..e3bb874b2b 100644
--- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/item/Weapon.java
+++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/item/Weapon.java
@@ -38,6 +38,7 @@ public class Weapon extends ItemTemplate
{
private WeaponType _type;
private boolean _isMagicWeapon;
+ private boolean _isDragonWeapon;
private int _soulShotCount;
private int _spiritShotCount;
private int _mpConsume;
@@ -73,6 +74,7 @@ public class Weapon extends ItemTemplate
_type1 = ItemTemplate.TYPE1_WEAPON_RING_EARRING_NECKLACE;
_type2 = ItemTemplate.TYPE2_WEAPON;
_isMagicWeapon = set.getBoolean("is_magic_weapon", false);
+ _isDragonWeapon = set.getBoolean("is_dragon_weapon", false);
_soulShotCount = set.getInt("soulshots", 0);
_spiritShotCount = set.getInt("spiritshots", 0);
_mpConsume = set.getInt("mp_consume", 0);
@@ -138,6 +140,14 @@ public class Weapon extends ItemTemplate
return _isMagicWeapon;
}
+ /**
+ * @return {@code true} if the weapon is a dragon weapon, {@code false} otherwise.
+ */
+ public boolean isDragonWeapon()
+ {
+ return _isDragonWeapon;
+ }
+
/**
* @return the quantity of SoulShot used.
*/
diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/Formulas.java
index 1a211e541f..cfab51ee8d 100644
--- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/Formulas.java
+++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/Formulas.java
@@ -1612,7 +1612,8 @@ public class Formulas
// Dragon weapon defence stat.
final double dragonDefense;
- if (attackerPlayer.isDragonWeaponEquipped())
+ final Weapon weapon = attacker.getActiveWeaponItem();
+ if ((weapon != null) && weapon.isDragonWeapon())
{
dragonDefense = target.getStat().getMul(Stat.DRAGON_WEAPON_DEFENCE, 1);
}
diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/Stat.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/Stat.java
index dedd0d6dfb..90488cb5b8 100644
--- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/Stat.java
+++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/Stat.java
@@ -58,6 +58,7 @@ import org.l2jmobius.gameserver.util.MathUtil;
public enum Stat
{
// HP, MP & CP
+ HP_LIMIT("hpLimit"),
MAX_HP("maxHp", new MaxHpFinalizer()),
MAX_MP("maxMp", new MaxMpFinalizer()),
MAX_CP("maxCp", new MaxCpFinalizer()),
diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxHpFinalizer.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxHpFinalizer.java
index 3450b57716..4f42655b47 100644
--- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxHpFinalizer.java
+++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxHpFinalizer.java
@@ -18,11 +18,13 @@ package org.l2jmobius.gameserver.model.stats.finalizers;
import java.util.OptionalDouble;
+import org.l2jmobius.Config;
import org.l2jmobius.gameserver.data.xml.EnchantItemHPBonusData;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.item.ItemTemplate;
+import org.l2jmobius.gameserver.model.item.Weapon;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.stats.BaseStat;
@@ -63,30 +65,64 @@ public class MaxHpFinalizer implements IStatFunction
private static double defaultValue(Creature creature, Stat stat, double baseValue)
{
- final double mul = creature.getStat().getMul(stat);
- final double add = creature.getStat().getAdd(stat);
- double addItem = 0;
+ double mul = creature.getStat().getMul(stat);
+ double add = creature.getStat().getAdd(stat);
+
+ double maxHp = (mul * baseValue) + add + creature.getStat().getMoveTypeValue(stat, creature.getMoveType());
+ final boolean isPlayer = creature.isPlayer();
final Inventory inv = creature.getInventory();
- if (inv != null)
+ if (inv == null)
{
- // Add maxHP bonus from items
- for (Item item : inv.getPaperdollItems())
+ if (isPlayer)
{
- addItem += item.getTemplate().getStats(stat, 0);
-
- // Apply enchanted item bonus HP
- if (item.isArmor() && item.isEnchanted())
+ if (creature.getActingPlayer().isCursedWeaponEquipped())
{
- final int bodyPart = item.getTemplate().getBodyPart();
- if ((bodyPart != ItemTemplate.SLOT_NECK) && (bodyPart != ItemTemplate.SLOT_LR_EAR) && (bodyPart != ItemTemplate.SLOT_LR_FINGER))
- {
- addItem += EnchantItemHPBonusData.getInstance().getHPBonus(item);
- }
+ return Double.MAX_VALUE;
}
+
+ mul = creature.getStat().getMul(Stat.HP_LIMIT);
+ add = creature.getStat().getAdd(Stat.HP_LIMIT);
+ return Math.min(maxHp, (Config.MAX_HP * mul) + add);
+ }
+ return maxHp;
+ }
+
+ boolean shouldLiftLimit = false;
+
+ // Add maxHP bonus from items
+ for (Item item : inv.getPaperdollItems())
+ {
+ maxHp += item.getTemplate().getStats(stat, 0);
+
+ // Apply enchanted item bonus HP
+ if (item.isArmor() && item.isEnchanted())
+ {
+ final int bodyPart = item.getTemplate().getBodyPart();
+ if ((bodyPart != ItemTemplate.SLOT_NECK) && (bodyPart != ItemTemplate.SLOT_LR_EAR) && (bodyPart != ItemTemplate.SLOT_LR_FINGER))
+ {
+ maxHp += EnchantItemHPBonusData.getInstance().getHPBonus(item);
+ }
+ }
+
+ if (item.isWeapon() && item.getWeaponItem().isDragonWeapon())
+ {
+ shouldLiftLimit = true;
}
}
- return (mul * baseValue) + add + addItem + creature.getStat().getMoveTypeValue(stat, creature.getMoveType());
+ final double hpLimit;
+ if (isPlayer && !shouldLiftLimit && !creature.getActingPlayer().isCursedWeaponEquipped())
+ {
+ mul = creature.getStat().getMul(Stat.HP_LIMIT);
+ add = creature.getStat().getAdd(Stat.HP_LIMIT);
+ hpLimit = (Config.MAX_HP * mul) + add;
+ }
+ else
+ {
+ hpLimit = Double.MAX_VALUE;
+ }
+
+ return Math.min(maxHp, hpLimit);
}
}
diff --git a/L2J_Mobius_02.5_Underground/dist/game/config/Character.ini b/L2J_Mobius_02.5_Underground/dist/game/config/Character.ini
index 5897b96dda..b8b456b61d 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/config/Character.ini
+++ b/L2J_Mobius_02.5_Underground/dist/game/config/Character.ini
@@ -347,6 +347,10 @@ MaxMAtkSpeed = 1999
# Default: 250
MaxEvasion = 250
+# Maximum character HP.
+# Default: 150000
+MaxHP = 150000
+
# Minimum and Maximum Abnormal State Success Rate.
# This affect all skills/effects chances, except in skills where minChance or maxChance parameters are defined.
# Default: H5 minimum of 10% and maximum of 90%.
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/others/DragonWeaponListeners.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/others/DragonWeaponListeners.java
deleted file mode 100644
index c50af03d70..0000000000
--- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/ai/others/DragonWeaponListeners.java
+++ /dev/null
@@ -1,455 +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 ai.others;
-
-import org.l2jmobius.commons.util.CommonUtil;
-import org.l2jmobius.gameserver.model.actor.Player;
-import org.l2jmobius.gameserver.model.events.EventType;
-import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
-import org.l2jmobius.gameserver.model.events.annotations.Id;
-import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
-import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
-import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemEquip;
-import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip;
-import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
-import org.l2jmobius.gameserver.model.item.Weapon;
-
-import ai.AbstractNpcAI;
-
-/**
- * @author Mobius
- */
-public class DragonWeaponListeners extends AbstractNpcAI
-{
- private static final int[] WEAPON_IDS =
- {
- 36417,
- 36418,
- 36419,
- 36420,
- 36421,
- 36422,
- 36423,
- 36424,
- 36425,
- 36426,
- 36441,
- 36442,
- 36443,
- 36444,
- 36445,
- 36446,
- 36447,
- 36448,
- 36449,
- 36450,
- 36465,
- 36466,
- 36467,
- 36468,
- 36469,
- 36470,
- 36471,
- 36472,
- 36473,
- 36474,
- 36489,
- 36490,
- 36491,
- 36492,
- 36493,
- 36494,
- 36495,
- 36496,
- 36497,
- 36498,
- 36427,
- 36428,
- 36429,
- 36430,
- 36431,
- 36432,
- 36433,
- 36451,
- 36452,
- 36453,
- 36454,
- 36455,
- 36456,
- 36457,
- 36475,
- 36476,
- 36477,
- 36478,
- 36479,
- 36480,
- 36481,
- 36499,
- 36500,
- 36501,
- 36502,
- 36503,
- 36504,
- 36505,
- 36434,
- 36435,
- 36436,
- 36437,
- 36438,
- 36439,
- 36440,
- 36458,
- 36459,
- 36460,
- 36461,
- 36462,
- 36463,
- 36464,
- 36482,
- 36483,
- 36484,
- 36485,
- 36486,
- 36487,
- 36488,
- 36506,
- 36507,
- 36508,
- 36509,
- 36510,
- 36511,
- 36512,
- 80066,
- 80067,
- 80068,
- 80069,
- 80070,
- 80071,
- 80072,
- 80073,
- 80074,
- 80075,
- 80076,
- 80077,
- 80078,
- 80079,
- 80080,
- 80081,
- 80082,
- 80083,
- 80084,
- 80085,
- 80086,
- 80087,
- 80088,
- 80089,
- 80315,
- 80316,
- 80317,
- 80318,
- };
-
- @RegisterEvent(EventType.ON_PLAYER_LOGIN)
- @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
- public void onPlayerLogin(OnPlayerLogin event)
- {
- final Player player = event.getPlayer();
- if (player != null)
- {
- final Weapon weapon = player.getActiveWeaponItem();
- if ((weapon != null) && CommonUtil.contains(WEAPON_IDS, weapon.getId()))
- {
- player.setDragonWeaponEquipped(true);
- }
- }
- }
-
- @RegisterEvent(EventType.ON_PLAYER_ITEM_EQUIP)
- @RegisterType(ListenerRegisterType.ITEM)
- @Id(36417)
- @Id(36418)
- @Id(36419)
- @Id(36420)
- @Id(36421)
- @Id(36422)
- @Id(36423)
- @Id(36424)
- @Id(36425)
- @Id(36426)
- @Id(36441)
- @Id(36442)
- @Id(36443)
- @Id(36444)
- @Id(36445)
- @Id(36446)
- @Id(36447)
- @Id(36448)
- @Id(36449)
- @Id(36450)
- @Id(36465)
- @Id(36466)
- @Id(36467)
- @Id(36468)
- @Id(36469)
- @Id(36470)
- @Id(36471)
- @Id(36472)
- @Id(36473)
- @Id(36474)
- @Id(36489)
- @Id(36490)
- @Id(36491)
- @Id(36492)
- @Id(36493)
- @Id(36494)
- @Id(36495)
- @Id(36496)
- @Id(36497)
- @Id(36498)
- @Id(36427)
- @Id(36428)
- @Id(36429)
- @Id(36430)
- @Id(36431)
- @Id(36432)
- @Id(36433)
- @Id(36451)
- @Id(36452)
- @Id(36453)
- @Id(36454)
- @Id(36455)
- @Id(36456)
- @Id(36457)
- @Id(36475)
- @Id(36476)
- @Id(36477)
- @Id(36478)
- @Id(36479)
- @Id(36480)
- @Id(36481)
- @Id(36499)
- @Id(36500)
- @Id(36501)
- @Id(36502)
- @Id(36503)
- @Id(36504)
- @Id(36505)
- @Id(36434)
- @Id(36435)
- @Id(36436)
- @Id(36437)
- @Id(36438)
- @Id(36439)
- @Id(36440)
- @Id(36458)
- @Id(36459)
- @Id(36460)
- @Id(36461)
- @Id(36462)
- @Id(36463)
- @Id(36464)
- @Id(36482)
- @Id(36483)
- @Id(36484)
- @Id(36485)
- @Id(36486)
- @Id(36487)
- @Id(36488)
- @Id(36506)
- @Id(36507)
- @Id(36508)
- @Id(36509)
- @Id(36510)
- @Id(36511)
- @Id(36512)
- @Id(80066)
- @Id(80067)
- @Id(80068)
- @Id(80069)
- @Id(80070)
- @Id(80071)
- @Id(80072)
- @Id(80073)
- @Id(80074)
- @Id(80075)
- @Id(80076)
- @Id(80077)
- @Id(80078)
- @Id(80079)
- @Id(80080)
- @Id(80081)
- @Id(80082)
- @Id(80083)
- @Id(80084)
- @Id(80085)
- @Id(80086)
- @Id(80087)
- @Id(80088)
- @Id(80089)
- @Id(80315)
- @Id(80316)
- @Id(80317)
- @Id(80318)
- public void onPlayerItemEquip(OnPlayerItemEquip event)
- {
- final Player player = event.getPlayer();
- if (player != null)
- {
- player.setDragonWeaponEquipped(true);
- }
- }
-
- @RegisterEvent(EventType.ON_PLAYER_ITEM_UNEQUIP)
- @RegisterType(ListenerRegisterType.ITEM)
- @Id(36417)
- @Id(36418)
- @Id(36419)
- @Id(36420)
- @Id(36421)
- @Id(36422)
- @Id(36423)
- @Id(36424)
- @Id(36425)
- @Id(36426)
- @Id(36441)
- @Id(36442)
- @Id(36443)
- @Id(36444)
- @Id(36445)
- @Id(36446)
- @Id(36447)
- @Id(36448)
- @Id(36449)
- @Id(36450)
- @Id(36465)
- @Id(36466)
- @Id(36467)
- @Id(36468)
- @Id(36469)
- @Id(36470)
- @Id(36471)
- @Id(36472)
- @Id(36473)
- @Id(36474)
- @Id(36489)
- @Id(36490)
- @Id(36491)
- @Id(36492)
- @Id(36493)
- @Id(36494)
- @Id(36495)
- @Id(36496)
- @Id(36497)
- @Id(36498)
- @Id(36427)
- @Id(36428)
- @Id(36429)
- @Id(36430)
- @Id(36431)
- @Id(36432)
- @Id(36433)
- @Id(36451)
- @Id(36452)
- @Id(36453)
- @Id(36454)
- @Id(36455)
- @Id(36456)
- @Id(36457)
- @Id(36475)
- @Id(36476)
- @Id(36477)
- @Id(36478)
- @Id(36479)
- @Id(36480)
- @Id(36481)
- @Id(36499)
- @Id(36500)
- @Id(36501)
- @Id(36502)
- @Id(36503)
- @Id(36504)
- @Id(36505)
- @Id(36434)
- @Id(36435)
- @Id(36436)
- @Id(36437)
- @Id(36438)
- @Id(36439)
- @Id(36440)
- @Id(36458)
- @Id(36459)
- @Id(36460)
- @Id(36461)
- @Id(36462)
- @Id(36463)
- @Id(36464)
- @Id(36482)
- @Id(36483)
- @Id(36484)
- @Id(36485)
- @Id(36486)
- @Id(36487)
- @Id(36488)
- @Id(36506)
- @Id(36507)
- @Id(36508)
- @Id(36509)
- @Id(36510)
- @Id(36511)
- @Id(36512)
- @Id(80066)
- @Id(80067)
- @Id(80068)
- @Id(80069)
- @Id(80070)
- @Id(80071)
- @Id(80072)
- @Id(80073)
- @Id(80074)
- @Id(80075)
- @Id(80076)
- @Id(80077)
- @Id(80078)
- @Id(80079)
- @Id(80080)
- @Id(80081)
- @Id(80082)
- @Id(80083)
- @Id(80084)
- @Id(80085)
- @Id(80086)
- @Id(80087)
- @Id(80088)
- @Id(80089)
- @Id(80315)
- @Id(80316)
- @Id(80317)
- @Id(80318)
- public void onPlayerItemUnequip(OnPlayerItemUnequip event)
- {
- final Player player = event.getPlayer();
- if (player != null)
- {
- player.setDragonWeaponEquipped(false);
- }
- }
-
- public static void main(String[] args)
- {
- new DragonWeaponListeners();
- }
-}
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 4b4d6d3d18..711bc3edb6 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -182,6 +182,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("HpCpHeal", HpCpHeal::new);
EffectHandler.getInstance().registerHandler("HpCpHealCritical", HpCpHealCritical::new);
EffectHandler.getInstance().registerHandler("HpDrain", HpDrain::new);
+ EffectHandler.getInstance().registerHandler("HpLimit", HpLimit::new);
EffectHandler.getInstance().registerHandler("HpRegen", HpRegen::new);
EffectHandler.getInstance().registerHandler("HpToOwner", HpToOwner::new);
EffectHandler.getInstance().registerHandler("IgnoreDeath", IgnoreDeath::new);
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/HpLimit.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/HpLimit.java
new file mode 100644
index 0000000000..3e254041ec
--- /dev/null
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/handlers/effecthandlers/HpLimit.java
@@ -0,0 +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 org.l2jmobius.gameserver.model.StatSet;
+import org.l2jmobius.gameserver.model.stats.Stat;
+
+/**
+ * @author dontknowdontcare
+ */
+public class HpLimit extends AbstractStatEffect
+{
+ public HpLimit(StatSet params)
+ {
+ super(params, Stat.HP_LIMIT);
+ }
+}
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/stats/items/36400-36499.xml b/L2J_Mobius_02.5_Underground/dist/game/data/stats/items/36400-36499.xml
index 795827fdee..418afca5d4 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/data/stats/items/36400-36499.xml
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/stats/items/36400-36499.xml
@@ -212,6 +212,7 @@
-
+
@@ -237,6 +238,7 @@
-
+
@@ -261,6 +263,7 @@
-
+
@@ -288,6 +291,7 @@
-
+
@@ -313,6 +317,7 @@
-
+
@@ -336,6 +341,7 @@
-
+
@@ -365,6 +371,7 @@
-
+
@@ -390,6 +397,7 @@
-
+
@@ -415,6 +423,7 @@
-
+
@@ -440,6 +449,7 @@
-
+
@@ -464,6 +474,7 @@
-
+
@@ -489,6 +500,7 @@
-
+
@@ -513,6 +525,7 @@
-
+
@@ -537,6 +550,7 @@
-
+
@@ -564,6 +578,7 @@
-
+
@@ -589,6 +604,7 @@
-
+
@@ -615,6 +631,7 @@
-
+
@@ -642,6 +659,7 @@
-
+
@@ -667,6 +685,7 @@
-
+
@@ -694,6 +713,7 @@
-
+
@@ -718,6 +738,7 @@
-
+
@@ -743,6 +764,7 @@
-
+
@@ -767,6 +789,7 @@
-
+
@@ -794,6 +817,7 @@
-
+
@@ -819,6 +843,7 @@
-
+
@@ -848,6 +873,7 @@
-
+
@@ -876,6 +902,7 @@
-
+
@@ -906,6 +933,7 @@
-
+
@@ -935,6 +963,7 @@
-
+
@@ -963,6 +992,7 @@
-
+
@@ -993,6 +1023,7 @@
-
+
@@ -1022,6 +1053,7 @@
-
+
@@ -1051,6 +1083,7 @@
-
+
@@ -1080,6 +1113,7 @@
-
+
@@ -1109,6 +1143,7 @@
-
+
@@ -1138,6 +1173,7 @@
-
+
@@ -1166,6 +1202,7 @@
-
+
@@ -1194,6 +1231,7 @@
-
+
@@ -1224,6 +1262,7 @@
-
+
@@ -1253,6 +1292,7 @@
-
+
@@ -1283,6 +1323,7 @@
-
+
@@ -1314,6 +1355,7 @@
-
+
@@ -1343,6 +1385,7 @@
-
+
@@ -1373,6 +1416,7 @@
-
+
@@ -1401,6 +1445,7 @@
-
+
@@ -1431,6 +1476,7 @@
-
+
@@ -1459,6 +1505,7 @@
-
+
@@ -1489,6 +1536,7 @@
-
+
@@ -1518,6 +1566,7 @@
-
+
@@ -1550,6 +1599,7 @@
-
+
@@ -1581,6 +1631,7 @@
-
+
@@ -1614,6 +1665,7 @@
-
+
@@ -1646,6 +1698,7 @@
-
+
@@ -1677,6 +1730,7 @@
-
+
@@ -1710,6 +1764,7 @@
-
+
@@ -1742,6 +1797,7 @@
-
+
@@ -1774,6 +1830,7 @@
-
+
@@ -1806,6 +1863,7 @@
-
+
@@ -1838,6 +1896,7 @@
-
+
@@ -1870,6 +1929,7 @@
-
+
@@ -1901,6 +1961,7 @@
-
+
@@ -1932,6 +1993,7 @@
-
+
@@ -1965,6 +2027,7 @@
-
+
@@ -1997,6 +2060,7 @@
-
+
@@ -2030,6 +2094,7 @@
-
+
@@ -2064,6 +2129,7 @@
-
+
@@ -2096,6 +2162,7 @@
-
+
@@ -2129,6 +2196,7 @@
-
+
@@ -2160,6 +2228,7 @@
-
+
@@ -2193,6 +2262,7 @@
-
+
@@ -2224,6 +2294,7 @@
-
+
@@ -2257,6 +2328,7 @@
-
+
@@ -2289,6 +2361,7 @@
-
+
@@ -2322,6 +2395,7 @@
-
+
@@ -2354,6 +2428,7 @@
-
+
@@ -2388,6 +2463,7 @@
-
+
@@ -2421,6 +2497,7 @@
-
+
@@ -2453,6 +2530,7 @@
-
+
@@ -2487,6 +2565,7 @@
-
+
@@ -2520,6 +2599,7 @@
-
+
@@ -2553,6 +2633,7 @@
-
+
@@ -2586,6 +2667,7 @@
-
+
@@ -2619,6 +2701,7 @@
-
+
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/stats/items/36500-36599.xml b/L2J_Mobius_02.5_Underground/dist/game/data/stats/items/36500-36599.xml
index a47fd9fb6a..0a3db6b602 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/data/stats/items/36500-36599.xml
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/stats/items/36500-36599.xml
@@ -3,6 +3,7 @@
-
+
@@ -35,6 +36,7 @@
-
+
@@ -67,6 +69,7 @@
-
+
@@ -101,6 +104,7 @@
-
+
@@ -134,6 +138,7 @@
-
+
@@ -168,6 +173,7 @@
-
+
@@ -204,6 +210,7 @@
-
+
@@ -237,6 +244,7 @@
-
+
@@ -271,6 +279,7 @@
-
+
@@ -303,6 +312,7 @@
-
+
@@ -337,6 +347,7 @@
-
+
@@ -369,6 +380,7 @@
-
+
@@ -403,6 +415,7 @@
-
+
diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/documentation.txt
index 6550b5db2b..84a62b591c 100644
--- a/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/documentation.txt
+++ b/L2J_Mobius_02.5_Underground/dist/game/data/stats/skills/documentation.txt
@@ -153,6 +153,7 @@ HpCpHealCritical: HpCp heal effects always trigger Magic Critical Hit.
HpCpHeal: Increases current HP by a given amount. If the given amount exceeds maximum HP, it increases current CP with the rest value as well.
HpDrain: Magical attack that absorbs given percentage of the damage inflicted as HP.
Hp: Increases current HP by a static value.
+HpLimit: Increase a character's max hp limit (l2jmobius)
HpRegen: HP Regeneration stat.
HpToOwner: DOT effect that absorbs HP over time.
IgnoreDeath: Become undying. Hp cannot decrease below 1.
diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/Config.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/Config.java
index 67e7af35ed..a85fe469ab 100644
--- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/Config.java
+++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/Config.java
@@ -216,6 +216,7 @@ public class Config
public static int MAX_PATK_SPEED;
public static int MAX_MATK_SPEED;
public static int MAX_EVASION;
+ public static int MAX_HP;
public static int MIN_ABNORMAL_STATE_SUCCESS_RATE;
public static int MAX_ABNORMAL_STATE_SUCCESS_RATE;
public static long MAX_SP;
@@ -1801,6 +1802,7 @@ public class Config
MAX_PATK_SPEED = characterConfig.getInt("MaxPAtkSpeed", 1500);
MAX_MATK_SPEED = characterConfig.getInt("MaxMAtkSpeed", 1999);
MAX_EVASION = characterConfig.getInt("MaxEvasion", 250);
+ MAX_HP = characterConfig.getInt("MaxHP", 150000);
MIN_ABNORMAL_STATE_SUCCESS_RATE = characterConfig.getInt("MinAbnormalStateSuccessRate", 10);
MAX_ABNORMAL_STATE_SUCCESS_RATE = characterConfig.getInt("MaxAbnormalStateSuccessRate", 90);
MAX_SP = characterConfig.getLong("MaxSp", 50000000000L) >= 0 ? characterConfig.getLong("MaxSp", 50000000000L) : Long.MAX_VALUE;
diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java
index 7eacb0343f..c120bac554 100644
--- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java
+++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java
@@ -758,8 +758,6 @@ public class Player extends Playable
private int _cursedWeaponEquippedId = 0;
private boolean _combatFlagEquippedId = false;
- private boolean _isDragonWeaponEquipped = false;
-
private boolean _canRevive = true;
private int _reviveRequested = 0;
private double _revivePower = 0;
@@ -11444,16 +11442,6 @@ public class Player extends Playable
return _cursedWeaponEquippedId;
}
- public void setDragonWeaponEquipped(boolean value)
- {
- _isDragonWeaponEquipped = value;
- }
-
- public boolean isDragonWeaponEquipped()
- {
- return _isDragonWeaponEquipped;
- }
-
public boolean isCombatFlagEquipped()
{
return _combatFlagEquippedId;
diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/item/Weapon.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/item/Weapon.java
index d24c63aaef..e3bb874b2b 100644
--- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/item/Weapon.java
+++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/item/Weapon.java
@@ -38,6 +38,7 @@ public class Weapon extends ItemTemplate
{
private WeaponType _type;
private boolean _isMagicWeapon;
+ private boolean _isDragonWeapon;
private int _soulShotCount;
private int _spiritShotCount;
private int _mpConsume;
@@ -73,6 +74,7 @@ public class Weapon extends ItemTemplate
_type1 = ItemTemplate.TYPE1_WEAPON_RING_EARRING_NECKLACE;
_type2 = ItemTemplate.TYPE2_WEAPON;
_isMagicWeapon = set.getBoolean("is_magic_weapon", false);
+ _isDragonWeapon = set.getBoolean("is_dragon_weapon", false);
_soulShotCount = set.getInt("soulshots", 0);
_spiritShotCount = set.getInt("spiritshots", 0);
_mpConsume = set.getInt("mp_consume", 0);
@@ -138,6 +140,14 @@ public class Weapon extends ItemTemplate
return _isMagicWeapon;
}
+ /**
+ * @return {@code true} if the weapon is a dragon weapon, {@code false} otherwise.
+ */
+ public boolean isDragonWeapon()
+ {
+ return _isDragonWeapon;
+ }
+
/**
* @return the quantity of SoulShot used.
*/
diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/Formulas.java
index 1a211e541f..cfab51ee8d 100644
--- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/Formulas.java
+++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/Formulas.java
@@ -1612,7 +1612,8 @@ public class Formulas
// Dragon weapon defence stat.
final double dragonDefense;
- if (attackerPlayer.isDragonWeaponEquipped())
+ final Weapon weapon = attacker.getActiveWeaponItem();
+ if ((weapon != null) && weapon.isDragonWeapon())
{
dragonDefense = target.getStat().getMul(Stat.DRAGON_WEAPON_DEFENCE, 1);
}
diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/Stat.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/Stat.java
index dedd0d6dfb..90488cb5b8 100644
--- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/Stat.java
+++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/Stat.java
@@ -58,6 +58,7 @@ import org.l2jmobius.gameserver.util.MathUtil;
public enum Stat
{
// HP, MP & CP
+ HP_LIMIT("hpLimit"),
MAX_HP("maxHp", new MaxHpFinalizer()),
MAX_MP("maxMp", new MaxMpFinalizer()),
MAX_CP("maxCp", new MaxCpFinalizer()),
diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxHpFinalizer.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxHpFinalizer.java
index 3450b57716..4f42655b47 100644
--- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxHpFinalizer.java
+++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/stats/finalizers/MaxHpFinalizer.java
@@ -18,11 +18,13 @@ package org.l2jmobius.gameserver.model.stats.finalizers;
import java.util.OptionalDouble;
+import org.l2jmobius.Config;
import org.l2jmobius.gameserver.data.xml.EnchantItemHPBonusData;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.item.ItemTemplate;
+import org.l2jmobius.gameserver.model.item.Weapon;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.stats.BaseStat;
@@ -63,30 +65,64 @@ public class MaxHpFinalizer implements IStatFunction
private static double defaultValue(Creature creature, Stat stat, double baseValue)
{
- final double mul = creature.getStat().getMul(stat);
- final double add = creature.getStat().getAdd(stat);
- double addItem = 0;
+ double mul = creature.getStat().getMul(stat);
+ double add = creature.getStat().getAdd(stat);
+
+ double maxHp = (mul * baseValue) + add + creature.getStat().getMoveTypeValue(stat, creature.getMoveType());
+ final boolean isPlayer = creature.isPlayer();
final Inventory inv = creature.getInventory();
- if (inv != null)
+ if (inv == null)
{
- // Add maxHP bonus from items
- for (Item item : inv.getPaperdollItems())
+ if (isPlayer)
{
- addItem += item.getTemplate().getStats(stat, 0);
-
- // Apply enchanted item bonus HP
- if (item.isArmor() && item.isEnchanted())
+ if (creature.getActingPlayer().isCursedWeaponEquipped())
{
- final int bodyPart = item.getTemplate().getBodyPart();
- if ((bodyPart != ItemTemplate.SLOT_NECK) && (bodyPart != ItemTemplate.SLOT_LR_EAR) && (bodyPart != ItemTemplate.SLOT_LR_FINGER))
- {
- addItem += EnchantItemHPBonusData.getInstance().getHPBonus(item);
- }
+ return Double.MAX_VALUE;
}
+
+ mul = creature.getStat().getMul(Stat.HP_LIMIT);
+ add = creature.getStat().getAdd(Stat.HP_LIMIT);
+ return Math.min(maxHp, (Config.MAX_HP * mul) + add);
+ }
+ return maxHp;
+ }
+
+ boolean shouldLiftLimit = false;
+
+ // Add maxHP bonus from items
+ for (Item item : inv.getPaperdollItems())
+ {
+ maxHp += item.getTemplate().getStats(stat, 0);
+
+ // Apply enchanted item bonus HP
+ if (item.isArmor() && item.isEnchanted())
+ {
+ final int bodyPart = item.getTemplate().getBodyPart();
+ if ((bodyPart != ItemTemplate.SLOT_NECK) && (bodyPart != ItemTemplate.SLOT_LR_EAR) && (bodyPart != ItemTemplate.SLOT_LR_FINGER))
+ {
+ maxHp += EnchantItemHPBonusData.getInstance().getHPBonus(item);
+ }
+ }
+
+ if (item.isWeapon() && item.getWeaponItem().isDragonWeapon())
+ {
+ shouldLiftLimit = true;
}
}
- return (mul * baseValue) + add + addItem + creature.getStat().getMoveTypeValue(stat, creature.getMoveType());
+ final double hpLimit;
+ if (isPlayer && !shouldLiftLimit && !creature.getActingPlayer().isCursedWeaponEquipped())
+ {
+ mul = creature.getStat().getMul(Stat.HP_LIMIT);
+ add = creature.getStat().getAdd(Stat.HP_LIMIT);
+ hpLimit = (Config.MAX_HP * mul) + add;
+ }
+ else
+ {
+ hpLimit = Double.MAX_VALUE;
+ }
+
+ return Math.min(maxHp, hpLimit);
}
}
diff --git a/L2J_Mobius_03.0_Helios/dist/game/config/Character.ini b/L2J_Mobius_03.0_Helios/dist/game/config/Character.ini
index 5897b96dda..b8b456b61d 100644
--- a/L2J_Mobius_03.0_Helios/dist/game/config/Character.ini
+++ b/L2J_Mobius_03.0_Helios/dist/game/config/Character.ini
@@ -347,6 +347,10 @@ MaxMAtkSpeed = 1999
# Default: 250
MaxEvasion = 250
+# Maximum character HP.
+# Default: 150000
+MaxHP = 150000
+
# Minimum and Maximum Abnormal State Success Rate.
# This affect all skills/effects chances, except in skills where minChance or maxChance parameters are defined.
# Default: H5 minimum of 10% and maximum of 90%.
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/others/DragonWeaponListeners.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/others/DragonWeaponListeners.java
deleted file mode 100644
index c50af03d70..0000000000
--- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/ai/others/DragonWeaponListeners.java
+++ /dev/null
@@ -1,455 +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 ai.others;
-
-import org.l2jmobius.commons.util.CommonUtil;
-import org.l2jmobius.gameserver.model.actor.Player;
-import org.l2jmobius.gameserver.model.events.EventType;
-import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
-import org.l2jmobius.gameserver.model.events.annotations.Id;
-import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
-import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
-import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemEquip;
-import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip;
-import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
-import org.l2jmobius.gameserver.model.item.Weapon;
-
-import ai.AbstractNpcAI;
-
-/**
- * @author Mobius
- */
-public class DragonWeaponListeners extends AbstractNpcAI
-{
- private static final int[] WEAPON_IDS =
- {
- 36417,
- 36418,
- 36419,
- 36420,
- 36421,
- 36422,
- 36423,
- 36424,
- 36425,
- 36426,
- 36441,
- 36442,
- 36443,
- 36444,
- 36445,
- 36446,
- 36447,
- 36448,
- 36449,
- 36450,
- 36465,
- 36466,
- 36467,
- 36468,
- 36469,
- 36470,
- 36471,
- 36472,
- 36473,
- 36474,
- 36489,
- 36490,
- 36491,
- 36492,
- 36493,
- 36494,
- 36495,
- 36496,
- 36497,
- 36498,
- 36427,
- 36428,
- 36429,
- 36430,
- 36431,
- 36432,
- 36433,
- 36451,
- 36452,
- 36453,
- 36454,
- 36455,
- 36456,
- 36457,
- 36475,
- 36476,
- 36477,
- 36478,
- 36479,
- 36480,
- 36481,
- 36499,
- 36500,
- 36501,
- 36502,
- 36503,
- 36504,
- 36505,
- 36434,
- 36435,
- 36436,
- 36437,
- 36438,
- 36439,
- 36440,
- 36458,
- 36459,
- 36460,
- 36461,
- 36462,
- 36463,
- 36464,
- 36482,
- 36483,
- 36484,
- 36485,
- 36486,
- 36487,
- 36488,
- 36506,
- 36507,
- 36508,
- 36509,
- 36510,
- 36511,
- 36512,
- 80066,
- 80067,
- 80068,
- 80069,
- 80070,
- 80071,
- 80072,
- 80073,
- 80074,
- 80075,
- 80076,
- 80077,
- 80078,
- 80079,
- 80080,
- 80081,
- 80082,
- 80083,
- 80084,
- 80085,
- 80086,
- 80087,
- 80088,
- 80089,
- 80315,
- 80316,
- 80317,
- 80318,
- };
-
- @RegisterEvent(EventType.ON_PLAYER_LOGIN)
- @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
- public void onPlayerLogin(OnPlayerLogin event)
- {
- final Player player = event.getPlayer();
- if (player != null)
- {
- final Weapon weapon = player.getActiveWeaponItem();
- if ((weapon != null) && CommonUtil.contains(WEAPON_IDS, weapon.getId()))
- {
- player.setDragonWeaponEquipped(true);
- }
- }
- }
-
- @RegisterEvent(EventType.ON_PLAYER_ITEM_EQUIP)
- @RegisterType(ListenerRegisterType.ITEM)
- @Id(36417)
- @Id(36418)
- @Id(36419)
- @Id(36420)
- @Id(36421)
- @Id(36422)
- @Id(36423)
- @Id(36424)
- @Id(36425)
- @Id(36426)
- @Id(36441)
- @Id(36442)
- @Id(36443)
- @Id(36444)
- @Id(36445)
- @Id(36446)
- @Id(36447)
- @Id(36448)
- @Id(36449)
- @Id(36450)
- @Id(36465)
- @Id(36466)
- @Id(36467)
- @Id(36468)
- @Id(36469)
- @Id(36470)
- @Id(36471)
- @Id(36472)
- @Id(36473)
- @Id(36474)
- @Id(36489)
- @Id(36490)
- @Id(36491)
- @Id(36492)
- @Id(36493)
- @Id(36494)
- @Id(36495)
- @Id(36496)
- @Id(36497)
- @Id(36498)
- @Id(36427)
- @Id(36428)
- @Id(36429)
- @Id(36430)
- @Id(36431)
- @Id(36432)
- @Id(36433)
- @Id(36451)
- @Id(36452)
- @Id(36453)
- @Id(36454)
- @Id(36455)
- @Id(36456)
- @Id(36457)
- @Id(36475)
- @Id(36476)
- @Id(36477)
- @Id(36478)
- @Id(36479)
- @Id(36480)
- @Id(36481)
- @Id(36499)
- @Id(36500)
- @Id(36501)
- @Id(36502)
- @Id(36503)
- @Id(36504)
- @Id(36505)
- @Id(36434)
- @Id(36435)
- @Id(36436)
- @Id(36437)
- @Id(36438)
- @Id(36439)
- @Id(36440)
- @Id(36458)
- @Id(36459)
- @Id(36460)
- @Id(36461)
- @Id(36462)
- @Id(36463)
- @Id(36464)
- @Id(36482)
- @Id(36483)
- @Id(36484)
- @Id(36485)
- @Id(36486)
- @Id(36487)
- @Id(36488)
- @Id(36506)
- @Id(36507)
- @Id(36508)
- @Id(36509)
- @Id(36510)
- @Id(36511)
- @Id(36512)
- @Id(80066)
- @Id(80067)
- @Id(80068)
- @Id(80069)
- @Id(80070)
- @Id(80071)
- @Id(80072)
- @Id(80073)
- @Id(80074)
- @Id(80075)
- @Id(80076)
- @Id(80077)
- @Id(80078)
- @Id(80079)
- @Id(80080)
- @Id(80081)
- @Id(80082)
- @Id(80083)
- @Id(80084)
- @Id(80085)
- @Id(80086)
- @Id(80087)
- @Id(80088)
- @Id(80089)
- @Id(80315)
- @Id(80316)
- @Id(80317)
- @Id(80318)
- public void onPlayerItemEquip(OnPlayerItemEquip event)
- {
- final Player player = event.getPlayer();
- if (player != null)
- {
- player.setDragonWeaponEquipped(true);
- }
- }
-
- @RegisterEvent(EventType.ON_PLAYER_ITEM_UNEQUIP)
- @RegisterType(ListenerRegisterType.ITEM)
- @Id(36417)
- @Id(36418)
- @Id(36419)
- @Id(36420)
- @Id(36421)
- @Id(36422)
- @Id(36423)
- @Id(36424)
- @Id(36425)
- @Id(36426)
- @Id(36441)
- @Id(36442)
- @Id(36443)
- @Id(36444)
- @Id(36445)
- @Id(36446)
- @Id(36447)
- @Id(36448)
- @Id(36449)
- @Id(36450)
- @Id(36465)
- @Id(36466)
- @Id(36467)
- @Id(36468)
- @Id(36469)
- @Id(36470)
- @Id(36471)
- @Id(36472)
- @Id(36473)
- @Id(36474)
- @Id(36489)
- @Id(36490)
- @Id(36491)
- @Id(36492)
- @Id(36493)
- @Id(36494)
- @Id(36495)
- @Id(36496)
- @Id(36497)
- @Id(36498)
- @Id(36427)
- @Id(36428)
- @Id(36429)
- @Id(36430)
- @Id(36431)
- @Id(36432)
- @Id(36433)
- @Id(36451)
- @Id(36452)
- @Id(36453)
- @Id(36454)
- @Id(36455)
- @Id(36456)
- @Id(36457)
- @Id(36475)
- @Id(36476)
- @Id(36477)
- @Id(36478)
- @Id(36479)
- @Id(36480)
- @Id(36481)
- @Id(36499)
- @Id(36500)
- @Id(36501)
- @Id(36502)
- @Id(36503)
- @Id(36504)
- @Id(36505)
- @Id(36434)
- @Id(36435)
- @Id(36436)
- @Id(36437)
- @Id(36438)
- @Id(36439)
- @Id(36440)
- @Id(36458)
- @Id(36459)
- @Id(36460)
- @Id(36461)
- @Id(36462)
- @Id(36463)
- @Id(36464)
- @Id(36482)
- @Id(36483)
- @Id(36484)
- @Id(36485)
- @Id(36486)
- @Id(36487)
- @Id(36488)
- @Id(36506)
- @Id(36507)
- @Id(36508)
- @Id(36509)
- @Id(36510)
- @Id(36511)
- @Id(36512)
- @Id(80066)
- @Id(80067)
- @Id(80068)
- @Id(80069)
- @Id(80070)
- @Id(80071)
- @Id(80072)
- @Id(80073)
- @Id(80074)
- @Id(80075)
- @Id(80076)
- @Id(80077)
- @Id(80078)
- @Id(80079)
- @Id(80080)
- @Id(80081)
- @Id(80082)
- @Id(80083)
- @Id(80084)
- @Id(80085)
- @Id(80086)
- @Id(80087)
- @Id(80088)
- @Id(80089)
- @Id(80315)
- @Id(80316)
- @Id(80317)
- @Id(80318)
- public void onPlayerItemUnequip(OnPlayerItemUnequip event)
- {
- final Player player = event.getPlayer();
- if (player != null)
- {
- player.setDragonWeaponEquipped(false);
- }
- }
-
- public static void main(String[] args)
- {
- new DragonWeaponListeners();
- }
-}
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 4b4d6d3d18..711bc3edb6 100644
--- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -182,6 +182,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("HpCpHeal", HpCpHeal::new);
EffectHandler.getInstance().registerHandler("HpCpHealCritical", HpCpHealCritical::new);
EffectHandler.getInstance().registerHandler("HpDrain", HpDrain::new);
+ EffectHandler.getInstance().registerHandler("HpLimit", HpLimit::new);
EffectHandler.getInstance().registerHandler("HpRegen", HpRegen::new);
EffectHandler.getInstance().registerHandler("HpToOwner", HpToOwner::new);
EffectHandler.getInstance().registerHandler("IgnoreDeath", IgnoreDeath::new);
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/HpLimit.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/HpLimit.java
new file mode 100644
index 0000000000..3e254041ec
--- /dev/null
+++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/handlers/effecthandlers/HpLimit.java
@@ -0,0 +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 org.l2jmobius.gameserver.model.StatSet;
+import org.l2jmobius.gameserver.model.stats.Stat;
+
+/**
+ * @author dontknowdontcare
+ */
+public class HpLimit extends AbstractStatEffect
+{
+ public HpLimit(StatSet params)
+ {
+ super(params, Stat.HP_LIMIT);
+ }
+}
diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/stats/items/36400-36499.xml b/L2J_Mobius_03.0_Helios/dist/game/data/stats/items/36400-36499.xml
index 795827fdee..418afca5d4 100644
--- a/L2J_Mobius_03.0_Helios/dist/game/data/stats/items/36400-36499.xml
+++ b/L2J_Mobius_03.0_Helios/dist/game/data/stats/items/36400-36499.xml
@@ -212,6 +212,7 @@
-
+
@@ -237,6 +238,7 @@
-
+
@@ -261,6 +263,7 @@
-
+
@@ -288,6 +291,7 @@
-
+
@@ -313,6 +317,7 @@
-
+
@@ -336,6 +341,7 @@
-
+
@@ -365,6 +371,7 @@
-
+
@@ -390,6 +397,7 @@
-
+
@@ -415,6 +423,7 @@
-
+
@@ -440,6 +449,7 @@
-
+
@@ -464,6 +474,7 @@
-
+
@@ -489,6 +500,7 @@
-
+
@@ -513,6 +525,7 @@
-
+
@@ -537,6 +550,7 @@
-
+
@@ -564,6 +578,7 @@
-
+
@@ -589,6 +604,7 @@
-
+
@@ -615,6 +631,7 @@
-
+
@@ -642,6 +659,7 @@
-
+
@@ -667,6 +685,7 @@
-
+
@@ -694,6 +713,7 @@
-
+
@@ -718,6 +738,7 @@
-
+
@@ -743,6 +764,7 @@
-
+
@@ -767,6 +789,7 @@
-
+
@@ -794,6 +817,7 @@
-
+
@@ -819,6 +843,7 @@
-
+
@@ -848,6 +873,7 @@
-
+
@@ -876,6 +902,7 @@
-
+
@@ -906,6 +933,7 @@
-
+
@@ -935,6 +963,7 @@
-
+
@@ -963,6 +992,7 @@
-
+
@@ -993,6 +1023,7 @@
-
+
@@ -1022,6 +1053,7 @@
-
+
@@ -1051,6 +1083,7 @@
-
+
@@ -1080,6 +1113,7 @@
-
+
@@ -1109,6 +1143,7 @@
-
+
@@ -1138,6 +1173,7 @@
-
+
@@ -1166,6 +1202,7 @@
-
+
@@ -1194,6 +1231,7 @@
-
+
@@ -1224,6 +1262,7 @@
-
+
@@ -1253,6 +1292,7 @@
-
+
@@ -1283,6 +1323,7 @@
-
+
@@ -1314,6 +1355,7 @@
-
+
@@ -1343,6 +1385,7 @@
-
+
@@ -1373,6 +1416,7 @@
-
+
@@ -1401,6 +1445,7 @@
-
+
@@ -1431,6 +1476,7 @@
-
+
@@ -1459,6 +1505,7 @@
-
+
@@ -1489,6 +1536,7 @@
-
+
@@ -1518,6 +1566,7 @@
-
+
@@ -1550,6 +1599,7 @@
-
+
@@ -1581,6 +1631,7 @@
-
+
@@ -1614,6 +1665,7 @@
-
+
@@ -1646,6 +1698,7 @@
-
+
@@ -1677,6 +1730,7 @@
-
+
@@ -1710,6 +1764,7 @@
-
+
@@ -1742,6 +1797,7 @@
-
+
@@ -1774,6 +1830,7 @@
-
+
@@ -1806,6 +1863,7 @@
-
+
@@ -1838,6 +1896,7 @@
-
+
@@ -1870,6 +1929,7 @@
-
+
@@ -1901,6 +1961,7 @@
-
+
@@ -1932,6 +1993,7 @@
-