From b995d4fcab87ade64b2cb8740ad4580bd4a7da12 Mon Sep 17 00:00:00 2001
From: Adry85 <adrya85@hotmail.it>
Date: Fri, 23 Feb 2018 15:27:15 +0100
Subject: [PATCH] Reworked instant MP effect.

---
 .../scripts/handlers/EffectMasterHandler.java |   2 +-
 .../scripts/handlers/effecthandlers/Hp.java   |   2 +-
 .../handlers/effecthandlers/ManaHeal.java     |  86 ------------
 .../effecthandlers/ManaHealByLevel.java       |   2 +-
 .../effecthandlers/ManaHealPercent.java       |   2 +-
 .../scripts/handlers/effecthandlers/Mp.java   | 126 ++++++++++++++++++
 dist/game/data/stats/skills/00400-00499.xml   |  10 +-
 dist/game/data/stats/skills/00700-00799.xml   |   5 +
 dist/game/data/stats/skills/01100-01199.xml   |  15 ++-
 dist/game/data/stats/skills/01500-01599.xml   |  10 +-
 dist/game/data/stats/skills/02200-02299.xml   |  10 +-
 dist/game/data/stats/skills/02400-02499.xml   |   5 +-
 dist/game/data/stats/skills/02800-02899.xml   |   5 +-
 dist/game/data/stats/skills/02900-02999.xml   |   5 +-
 dist/game/data/stats/skills/04000-04099.xml   |   9 +-
 dist/game/data/stats/skills/04100-04199.xml   |   9 +-
 dist/game/data/stats/skills/04200-04299.xml   |   7 +-
 dist/game/data/stats/skills/05600-05699.xml   |  20 +--
 dist/game/data/stats/skills/22100-22199.xml   |   5 +-
 dist/game/data/stats/skills/22200-22299.xml   |   5 +-
 dist/game/data/stats/skills/23200-23299.xml   |   5 +-
 dist/game/data/stats/skills/26000-26099.xml   |   5 +-
 .../data/stats/skills/custom/10000-10099.xml  |   5 +-
 23 files changed, 212 insertions(+), 143 deletions(-)
 delete mode 100644 dist/game/data/scripts/handlers/effecthandlers/ManaHeal.java
 create mode 100644 dist/game/data/scripts/handlers/effecthandlers/Mp.java

diff --git a/dist/game/data/scripts/handlers/EffectMasterHandler.java b/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 3bbd46cb87..f960541c39 100644
--- a/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -115,12 +115,12 @@ public final class EffectMasterHandler
 		MagicalAttackMp.class,
 		MagicalSoulAttack.class,
 		ManaDamOverTime.class,
-		ManaHeal.class,
 		ManaHealByLevel.class,
 		ManaHealOverTime.class,
 		ManaHealPercent.class,
 		MaxCp.class,
 		MaxHp.class,
+		Mp.class,
 		MpConsumePerLevel.class,
 		Mute.class,
 		NoblesseBless.class,
diff --git a/dist/game/data/scripts/handlers/effecthandlers/Hp.java b/dist/game/data/scripts/handlers/effecthandlers/Hp.java
index beeddf0084..4483636604 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/Hp.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/Hp.java
@@ -63,7 +63,7 @@ public final class Hp extends AbstractEffect
 	{
 		final L2Character target = info.getEffected();
 		final L2Character activeChar = info.getEffector();
-		if ((target == null) || target.isDead() || target.isDoor() || target.isInvul())
+		if ((target == null) || target.isDead() || target.isDoor() || target.isInvul() || target.isHpBlocked())
 		{
 			return;
 		}
diff --git a/dist/game/data/scripts/handlers/effecthandlers/ManaHeal.java b/dist/game/data/scripts/handlers/effecthandlers/ManaHeal.java
deleted file mode 100644
index 62edd0db0c..0000000000
--- a/dist/game/data/scripts/handlers/effecthandlers/ManaHeal.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2004-2018 L2J DataPack
- * 
- * This file is part of L2J DataPack.
- * 
- * L2J DataPack is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * L2J DataPack is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package handlers.effecthandlers;
-
-import com.l2jserver.gameserver.model.StatsSet;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.conditions.Condition;
-import com.l2jserver.gameserver.model.effects.AbstractEffect;
-import com.l2jserver.gameserver.model.skills.BuffInfo;
-import com.l2jserver.gameserver.model.stats.Stats;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
-
-/**
- * Mana Heal effect implementation.
- * @author UnAfraid
- */
-public final class ManaHeal extends AbstractEffect
-{
-	private final double _power;
-	
-	public ManaHeal(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params)
-	{
-		super(attachCond, applyCond, set, params);
-		
-		_power = params.getDouble("power", 0);
-	}
-	
-	@Override
-	public boolean isInstant()
-	{
-		return true;
-	}
-	
-	@Override
-	public void onStart(BuffInfo info)
-	{
-		L2Character target = info.getEffected();
-		if ((target == null) || target.isDead() || target.isDoor() || target.isInvul() || target.isMpBlocked())
-		{
-			return;
-		}
-		
-		double amount = _power;
-		
-		if (!info.getSkill().isStatic())
-		{
-			amount = target.calcStat(Stats.MANA_CHARGE, amount, null, null);
-		}
-		
-		// Prevents overheal and negative amount
-		amount = Math.max(Math.min(amount, target.getMaxRecoverableMp() - target.getCurrentMp()), 0);
-		if (amount != 0)
-		{
-			target.setCurrentMp(amount + target.getCurrentMp());
-		}
-		SystemMessage sm;
-		if (info.getEffector().getObjectId() != target.getObjectId())
-		{
-			sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MP_HAS_BEEN_RESTORED_BY_C1);
-			sm.addCharName(info.getEffector());
-		}
-		else
-		{
-			sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MP_HAS_BEEN_RESTORED);
-		}
-		sm.addInt((int) amount);
-		target.sendPacket(sm);
-	}
-}
diff --git a/dist/game/data/scripts/handlers/effecthandlers/ManaHealByLevel.java b/dist/game/data/scripts/handlers/effecthandlers/ManaHealByLevel.java
index e04a9153bf..6b9bc5e079 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/ManaHealByLevel.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/ManaHealByLevel.java
@@ -122,7 +122,7 @@ public final class ManaHealByLevel extends AbstractEffect
 			target.setCurrentMp(amount + target.getCurrentMp());
 		}
 		
-		final SystemMessage sm = SystemMessage.getSystemMessage(info.getEffector().getObjectId() != target.getObjectId() ? SystemMessageId.S2_HP_HAS_BEEN_RESTORED_BY_C1 : SystemMessageId.S1_MP_HAS_BEEN_RESTORED);
+		final SystemMessage sm = SystemMessage.getSystemMessage(info.getEffector().getObjectId() != target.getObjectId() ? SystemMessageId.S2_MP_HAS_BEEN_RESTORED_BY_C1 : SystemMessageId.S1_MP_HAS_BEEN_RESTORED);
 		if (info.getEffector().getObjectId() != target.getObjectId())
 		{
 			sm.addCharName(info.getEffector());
diff --git a/dist/game/data/scripts/handlers/effecthandlers/ManaHealPercent.java b/dist/game/data/scripts/handlers/effecthandlers/ManaHealPercent.java
index f686c1c546..bdd0f0b022 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/ManaHealPercent.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/ManaHealPercent.java
@@ -77,7 +77,7 @@ public final class ManaHealPercent extends AbstractEffect
 		SystemMessage sm;
 		if (info.getEffector().getObjectId() != target.getObjectId())
 		{
-			sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HP_HAS_BEEN_RESTORED_BY_C1);
+			sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MP_HAS_BEEN_RESTORED_BY_C1);
 			sm.addCharName(info.getEffector());
 		}
 		else
diff --git a/dist/game/data/scripts/handlers/effecthandlers/Mp.java b/dist/game/data/scripts/handlers/effecthandlers/Mp.java
new file mode 100644
index 0000000000..eeee8be881
--- /dev/null
+++ b/dist/game/data/scripts/handlers/effecthandlers/Mp.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2004-2018 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package handlers.effecthandlers;
+
+import com.l2jserver.gameserver.enums.EffectCalculationType;
+import com.l2jserver.gameserver.model.StatsSet;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.conditions.Condition;
+import com.l2jserver.gameserver.model.effects.AbstractEffect;
+import com.l2jserver.gameserver.model.skills.BuffInfo;
+import com.l2jserver.gameserver.model.skills.Skill;
+import com.l2jserver.gameserver.model.stats.Stats;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+
+/**
+ * Mp effect implementation.
+ * @author Adry_85
+ * @since 2.6.0.0
+ */
+public final class Mp extends AbstractEffect
+{
+	private final double _amount;
+	private final EffectCalculationType _mode;
+	
+	public Mp(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params)
+	{
+		super(attachCond, applyCond, set, params);
+		
+		_amount = params.getDouble("amount", 0);
+		_mode = params.getEnum("mode", EffectCalculationType.class, EffectCalculationType.DIFF);
+	}
+	
+	@Override
+	public boolean isInstant()
+	{
+		return true;
+	}
+	
+	@Override
+	public void onStart(BuffInfo info)
+	{
+		final L2Character target = info.getEffected();
+		final L2Character activeChar = info.getEffector();
+		if ((target == null) || target.isDead() || target.isDoor() || target.isInvul() || target.isMpBlocked())
+		{
+			return;
+		}
+		
+		double amount = 0;
+		switch (_mode)
+		{
+			case DIFF:
+			{
+				if (_amount < 0)
+				{
+					amount = _amount;
+				}
+				else
+				{
+					final Skill skill = info.getSkill();
+					if (!skill.isStatic())
+					{
+						amount = target.calcStat(Stats.MANA_CHARGE, _amount, null, null);
+					}
+					
+					amount = Math.min(skill.isStatic() ? _amount : amount, target.getMaxRecoverableMp() - target.getCurrentMp());
+				}
+				break;
+			}
+			case PER:
+			{
+				if (_amount < 0)
+				{
+					amount = (target.getCurrentMp() * _amount) / 100;
+				}
+				else
+				{
+					amount = Math.min((target.getMaxMp() * _amount) / 100.0, target.getMaxRecoverableMp() - target.getCurrentMp());
+				}
+				break;
+			}
+		}
+		
+		if (amount >= 0)
+		{
+			if (amount != 0)
+			{
+				target.setCurrentMp(amount + target.getCurrentMp());
+			}
+			
+			SystemMessage sm;
+			if ((activeChar != null) && (activeChar != target))
+			{
+				sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MP_HAS_BEEN_RESTORED_BY_C1);
+				sm.addCharName(info.getEffector());
+				sm.addInt((int) amount);
+				target.sendPacket(sm);
+			}
+			else
+			{
+				target.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_MP_HAS_BEEN_RESTORED).addInt((int) amount));
+			}
+		}
+		else
+		{
+			target.reduceCurrentMp(Math.abs(amount));
+		}
+	}
+}
diff --git a/dist/game/data/stats/skills/00400-00499.xml b/dist/game/data/stats/skills/00400-00499.xml
index 17ac3d4e73..8ee3054460 100644
--- a/dist/game/data/stats/skills/00400-00499.xml
+++ b/dist/game/data/stats/skills/00400-00499.xml
@@ -954,13 +954,15 @@
 		<set name="rideState" val="NONE" />
 		<set name="targetType" val="SELF" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="#amount" />
+			<effect name="Mp">
+				<param amount="#amount" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 		<enchant1Effects>
-			<effect name="ManaHeal">
-				<param power="#ench1amount" />
+			<effect name="Mp">
+				<param amount="#ench1amount" />
+				<param mode="DIFF" />
 			</effect>
 		</enchant1Effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/00700-00799.xml b/dist/game/data/stats/skills/00700-00799.xml
index c7d63baa2b..455eb6e902 100644
--- a/dist/game/data/stats/skills/00700-00799.xml
+++ b/dist/game/data/stats/skills/00700-00799.xml
@@ -434,6 +434,7 @@
 	</skill>
 	<skill id="715" levels="4" name="Zaken Energy Drain">
 		<!-- Confirmed CT2.5 -->
+		<table name="#amount"> -274 -348 -422 -496 </table>
 		<table name="#effectPoints"> -307 -323 -335 -342 </table>
 		<table name="#magicLvl"> 65 70 75 80 </table>
 		<table name="#mpConsume2"> 60 65 69 72 </table>
@@ -459,6 +460,10 @@
 				<param power="#power" />
 				<param drain="0.4" />
 			</effect>
+			<effect name="Mp">
+				<param amount="#amount" />
+				<param mode="DIFF" />
+ 			</effect>
 		</effects>
 	</skill>
 	<skill id="716" levels="4" name="Zaken Hold">
diff --git a/dist/game/data/stats/skills/01100-01199.xml b/dist/game/data/stats/skills/01100-01199.xml
index b55f86aa00..3927947868 100644
--- a/dist/game/data/stats/skills/01100-01199.xml
+++ b/dist/game/data/stats/skills/01100-01199.xml
@@ -913,13 +913,15 @@
 		<set name="targetType" val="SELF" />
 		<enchant2 name="hpConsume" val="#ench2hpConsume" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="#amount" />
+			<effect name="Mp">
+				<param amount="#amount" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 		<enchant1Effects>
-			<effect name="ManaHeal">
-				<param power="#ench1amount" />
+			<effect name="Mp">
+				<param amount="#ench1amount" />
+				<param mode="DIFF" />
 			</effect>
 		</enchant1Effects>
 		<enchant3Effects>
@@ -927,8 +929,9 @@
 				<param amount="#ench3Bravery" />
 				<param mode="DIFF" />
 			</effect>
-			<effect name="ManaHeal">
-				<param power="61" />
+			<effect name="Mp">
+				<param amount="61" />
+				<param mode="DIFF" />
 			</effect>
 		</enchant3Effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/01500-01599.xml b/dist/game/data/stats/skills/01500-01599.xml
index 4e7b976b47..4922b9ab5d 100644
--- a/dist/game/data/stats/skills/01500-01599.xml
+++ b/dist/game/data/stats/skills/01500-01599.xml
@@ -1846,8 +1846,9 @@
 			</effect>
 		</pveEffects>
 		<selfEffects>
-			<effect name="ManaHeal">
-				<param power="29" />
+			<effect name="Mp">
+				<param amount="29" />
+				<param mode="DIFF" />
 			</effect>
 		</selfEffects>
 	</skill>
@@ -1877,8 +1878,9 @@
 			</effect>
 		</pveEffects>
 		<selfEffects>
-			<effect name="ManaHeal">
-				<param power="25" />
+			<effect name="Mp">
+				<param amount="25" />
+				<param mode="DIFF" />
 			</effect>
 		</selfEffects>
 	</skill>
diff --git a/dist/game/data/stats/skills/02200-02299.xml b/dist/game/data/stats/skills/02200-02299.xml
index de1586187b..2f6a35fd16 100644
--- a/dist/game/data/stats/skills/02200-02299.xml
+++ b/dist/game/data/stats/skills/02200-02299.xml
@@ -1019,8 +1019,9 @@
 			<player flyMounted="false" />
 		</cond>
 		<effects>
-			<effect name="ManaHeal">
-				<param power="20" />
+			<effect name="Mp">
+				<param amount="20" />
+				<param mode="DIFF" />
 			</effect>
 			<effect name="ManaHealPercent">
 				<param power="4" />
@@ -1948,8 +1949,9 @@
 			<player levelRange="#levelRange" />
 		</cond>
 		<effects>
-			<effect name="ManaHeal">
-				<param power="#amount" />
+			<effect name="Mp">
+				<param amount="#amount" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/02400-02499.xml b/dist/game/data/stats/skills/02400-02499.xml
index 992ed42cf7..93f15a2895 100644
--- a/dist/game/data/stats/skills/02400-02499.xml
+++ b/dist/game/data/stats/skills/02400-02499.xml
@@ -34,8 +34,9 @@
 			<player level="52" />
 		</cond>
 		<effects>
-			<effect name="ManaHeal">
-				<param power="360" />
+			<effect name="Mp">
+				<param amount="360" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/02800-02899.xml b/dist/game/data/stats/skills/02800-02899.xml
index 894657d2ca..ce7b76d6ed 100644
--- a/dist/game/data/stats/skills/02800-02899.xml
+++ b/dist/game/data/stats/skills/02800-02899.xml
@@ -1440,8 +1440,9 @@
 			<player levelRange="#levelRange" />
 		</cond>
 		<effects>
-			<effect name="ManaHeal">
-				<param power="#amount" />
+			<effect name="Mp">
+				<param amount="#amount" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/02900-02999.xml b/dist/game/data/stats/skills/02900-02999.xml
index fc3e38f843..47642a0e6e 100644
--- a/dist/game/data/stats/skills/02900-02999.xml
+++ b/dist/game/data/stats/skills/02900-02999.xml
@@ -159,8 +159,9 @@
 			<player levelRange="61;75" />
 		</cond>
 		<effects>
-			<effect name="ManaHeal">
-				<param power="360" />
+			<effect name="Mp">
+				<param amount="360" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/04000-04099.xml b/dist/game/data/stats/skills/04000-04099.xml
index 8a039f6b7b..1fd3097da4 100644
--- a/dist/game/data/stats/skills/04000-04099.xml
+++ b/dist/game/data/stats/skills/04000-04099.xml
@@ -688,9 +688,9 @@
 	</skill>
 	<skill id="4039" levels="12" name="NPC MP Drain">
 		<!-- Freya retail confirmed -->
+		<table name="#amount"> -34 -57 -78 -105 -134 -165 -194 -206 -216 -224 -229 -232 </table>
 		<table name="#magicLvl"> 10 20 30 40 50 60 70 75 80 85 90 95 </table>
 		<table name="#mpConsume2"> 13 20 27 35 45 55 65 69 73 75 77 78 </table>
-		<table name="#power"> 34 57 78 105 134 165 194 206 216 224 229 232 </table>
 		<set name="affectScope" val="SINGLE" />
 		<set name="castRange" val="600" />
 		<set name="effectPoint" val="-100" />
@@ -704,9 +704,10 @@
 		<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
 		<set name="targetType" val="ENEMY_ONLY" />
 		<effects>
-			<effect name="MagicalAttackMp">
-				<param power="#power" />
-			</effect>
+			<effect name="Mp">
+				<param amount="#amount" />
+				<param mode="DIFF" />
+ 			</effect>
 		</effects>
 	</skill>
 	<skill id="4040" levels="12" name="NPC Bow Attack">
diff --git a/dist/game/data/stats/skills/04100-04199.xml b/dist/game/data/stats/skills/04100-04199.xml
index 73bdad53a8..3d5f6c4e70 100644
--- a/dist/game/data/stats/skills/04100-04199.xml
+++ b/dist/game/data/stats/skills/04100-04199.xml
@@ -1250,9 +1250,9 @@
 	</skill>
 	<skill id="4154" levels="12" name="NPC MP Drain - Magic">
 		<!-- Freya retail confirmed -->
+		<table name="#amount"> -34 -57 -78 -105 -134 -165 -194 -206 -216 -224 -229 -232 </table>
 		<table name="#magicLvl"> 10 20 30 40 50 60 70 75 80 85 90 95 </table>
 		<table name="#mpConsume2"> 7 10 14 18 23 28 33 35 37 38 39 39 </table>
-		<table name="#power"> 34 57 78 105 134 165 194 206 216 224 229 232 </table>
 		<set name="affectScope" val="SINGLE" />
 		<set name="castRange" val="600" />
 		<set name="effectPoint" val="-100" />
@@ -1265,9 +1265,10 @@
 		<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
 		<set name="targetType" val="ENEMY_ONLY" />
 		<effects>
-			<effect name="MagicalAttackMp">
-				<param power="#power" />
-			</effect>
+			<effect name="Mp">
+				<param amount="#amount" />
+				<param mode="DIFF" />
+ 			</effect>
 		</effects>
 	</skill>
 	<skill id="4155" levels="12" name="NPC Twister - Magic">
diff --git a/dist/game/data/stats/skills/04200-04299.xml b/dist/game/data/stats/skills/04200-04299.xml
index 8a88b20c1e..c50f784984 100644
--- a/dist/game/data/stats/skills/04200-04299.xml
+++ b/dist/game/data/stats/skills/04200-04299.xml
@@ -455,9 +455,10 @@
 				<param power="57" />
 				<param drain="0.4" />
 			</effect>
-			<effect name="ManaDamOverTime">
-				<param power="274" />
-			</effect>
+			<effect name="Mp">
+				<param amount="-274" />
+				<param mode="DIFF" />
+ 			</effect>
 		</effects>
 	</skill>
 	<skill id="4219" levels="1" name="Hold">
diff --git a/dist/game/data/stats/skills/05600-05699.xml b/dist/game/data/stats/skills/05600-05699.xml
index ad19498c68..b2286d47b5 100644
--- a/dist/game/data/stats/skills/05600-05699.xml
+++ b/dist/game/data/stats/skills/05600-05699.xml
@@ -290,8 +290,9 @@
 		<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
 		<set name="targetType" val="ONE" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="#amount" />
+			<effect name="Mp">
+				<param amount="#amount" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
@@ -1443,8 +1444,9 @@
 		<set name="rideState" val="NONE" />
 		<set name="targetType" val="SELF" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="41" />
+			<effect name="Mp">
+				<param amount="41" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
@@ -1456,8 +1458,9 @@
 		<set name="rideState" val="NONE" />
 		<set name="targetType" val="SELF" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="51" />
+			<effect name="Mp">
+				<param amount="51" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
@@ -1469,8 +1472,9 @@
 		<set name="rideState" val="NONE" />
 		<set name="targetType" val="SELF" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="59" />
+			<effect name="Mp">
+				<param amount="59" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/22100-22199.xml b/dist/game/data/stats/skills/22100-22199.xml
index ad3c4bbac2..c6d073ef43 100644
--- a/dist/game/data/stats/skills/22100-22199.xml
+++ b/dist/game/data/stats/skills/22100-22199.xml
@@ -1546,8 +1546,9 @@
 				<param amount="500" />
 				<param mode="DIFF" />
 			</effect>
-			<effect name="ManaHeal">
-				<param power="200" />
+			<effect name="Mp">
+				<param amount="200" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/22200-22299.xml b/dist/game/data/stats/skills/22200-22299.xml
index c0ca49442e..fcb5972e7b 100644
--- a/dist/game/data/stats/skills/22200-22299.xml
+++ b/dist/game/data/stats/skills/22200-22299.xml
@@ -1093,8 +1093,9 @@
 		<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
 		<set name="targetType" val="PARTY" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="1000" /> <!-- TODO: Custom. -->
+			<effect name="Mp">
+				<param amount="360" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/23200-23299.xml b/dist/game/data/stats/skills/23200-23299.xml
index 90bbd67438..47461d3847 100644
--- a/dist/game/data/stats/skills/23200-23299.xml
+++ b/dist/game/data/stats/skills/23200-23299.xml
@@ -214,8 +214,9 @@
 		<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
 		<set name="targetType" val="SELF" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="500" />
+			<effect name="Mp">
+				<param amount="500" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/26000-26099.xml b/dist/game/data/stats/skills/26000-26099.xml
index 224ba604d0..8540714875 100644
--- a/dist/game/data/stats/skills/26000-26099.xml
+++ b/dist/game/data/stats/skills/26000-26099.xml
@@ -386,8 +386,9 @@
 		<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
 		<set name="targetType" val="SELF" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="60" />
+			<effect name="Mp">
+				<param amount="60" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
diff --git a/dist/game/data/stats/skills/custom/10000-10099.xml b/dist/game/data/stats/skills/custom/10000-10099.xml
index faba19e4cb..de89962d72 100644
--- a/dist/game/data/stats/skills/custom/10000-10099.xml
+++ b/dist/game/data/stats/skills/custom/10000-10099.xml
@@ -26,8 +26,9 @@
 		<set name="reuseDelay" val="500" />
 		<set name="targetType" val="SELF" />
 		<effects>
-			<effect name="ManaHeal">
-				<param power="100" />
+			<effect name="Mp">
+				<param amount="100" />
+				<param mode="DIFF" />
 			</effect>
 		</effects>
 	</skill>
-- 
GitLab