From 80640443f62effd07561a569597761e8e16d7be1 Mon Sep 17 00:00:00 2001
From: Adry_85 <Adrya85@hotmail.it>
Date: Wed, 5 Mar 2014 11:40:13 +0000
Subject: [PATCH] BETA: Adding new effect '''!MagicalAttackByAbnormal'''.

---
 .../scripts/handlers/EffectMasterHandler.java |   1 +
 .../MagicalAttackByAbnormal.java              | 103 ++++++++++++++++++
 .../effecthandlers/MagicalSoulAttack.java     |   6 -
 .../game/data/stats/skills/01400-01499.xml    |   3 +-
 .../game/data/stats/skills/05500-05599.xml    |   3 +-
 5 files changed, 106 insertions(+), 10 deletions(-)
 create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 2189c82a39..3e5e26f4df 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -113,6 +113,7 @@ public final class EffectMasterHandler
 		Lethal.class,
 		Lucky.class,
 		MagicalAttack.class,
+		MagicalAttackByAbnormal.class,
 		MagicalAttackMp.class,
 		MagicalSoulAttack.class,
 		ManaDamOverTime.class,
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java
new file mode 100644
index 0000000000..703c4aeb5e
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2004-2014 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.ShotType;
+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.effects.L2EffectType;
+import com.l2jserver.gameserver.model.skills.BuffInfo;
+import com.l2jserver.gameserver.model.stats.Formulas;
+import com.l2jserver.gameserver.model.stats.Stats;
+import com.l2jserver.util.Rnd;
+
+/**
+ * Magical Attack By Abnormal effect implementation.
+ * @author Adry_85
+ */
+public final class MagicalAttackByAbnormal extends AbstractEffect
+{
+	public MagicalAttackByAbnormal(Condition attachCond, Condition applyCond, StatsSet set, StatsSet params)
+	{
+		super(attachCond, applyCond, set, params);
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.MAGICAL_ATTACK;
+	}
+	
+	@Override
+	public boolean isInstant()
+	{
+		return true;
+	}
+	
+	@Override
+	public void onStart(BuffInfo info)
+	{
+		L2Character target = info.getEffected();
+		L2Character activeChar = info.getEffector();
+		
+		if (activeChar.isAlikeDead())
+		{
+			return;
+		}
+		
+		if (target.isPlayer() && target.getActingPlayer().isFakeDeath())
+		{
+			target.stopFakeDeath(true);
+		}
+		
+		boolean sps = info.getSkill().useSpiritShot() && activeChar.isChargedShot(ShotType.SPIRITSHOTS);
+		boolean bss = info.getSkill().useSpiritShot() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
+		final boolean mcrit = Formulas.calcMCrit(activeChar.getMCriticalHit(target, info.getSkill()));
+		final byte shld = Formulas.calcShldUse(activeChar, target, info.getSkill());
+		int damage = (int) Formulas.calcMagicDam(activeChar, target, info.getSkill(), shld, sps, bss, mcrit);
+		
+		// each buff increase +30%
+		damage *= (((target.getBuffCount() * 0.3) + 1.3) / 4);
+		
+		if (damage > 0)
+		{
+			// Manage attack or cast break of the target (calculating rate, sending message...)
+			if (!target.isRaid() && Formulas.calcAtkBreak(target, damage))
+			{
+				target.breakAttack();
+				target.breakCast();
+			}
+			
+			// Shield Deflect Magic: Reflect all damage on caster.
+			if (target.getStat().calcStat(Stats.VENGEANCE_SKILL_MAGIC_DAMAGE, 0, target, info.getSkill()) > Rnd.get(100))
+			{
+				activeChar.reduceCurrentHp(damage, target, info.getSkill());
+				activeChar.notifyDamageReceived(damage, target, info.getSkill(), mcrit, false);
+			}
+			else
+			{
+				target.reduceCurrentHp(damage, activeChar, info.getSkill());
+				target.notifyDamageReceived(damage, activeChar, info.getSkill(), mcrit, false);
+				activeChar.sendDamageMessage(target, damage, mcrit, false, false);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java
index 82461ecc90..2d7fe42975 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java
@@ -74,12 +74,6 @@ public final class MagicalSoulAttack extends AbstractEffect
 		final byte shld = Formulas.calcShldUse(activeChar, target, info.getSkill());
 		int damage = (int) Formulas.calcMagicDam(activeChar, target, info.getSkill(), shld, sps, bss, mcrit);
 		
-		// Curse of Divinity Formula (each buff increase +30%)
-		if (info.getSkill().getDependOnTargetBuff())
-		{
-			damage *= (((target.getBuffCount() * 0.3) + 1.3) / 4);
-		}
-		
 		if ((info.getSkill().getMaxSoulConsumeCount() > 0) && activeChar.isPlayer())
 		{
 			// Souls Formula (each soul increase +4%)
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml
index e01a92f08c..f57f2446fb 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/01400-01499.xml
@@ -1327,7 +1327,6 @@
 		<table name="#power"> 96 99 102 105 108 </table>
 		<set name="castRange" val="600" />
 		<set name="coolTime" val="200" />
-		<set name="dependOnTargetBuff" val="true" />
 		<set name="effectPoint" val="#effectPoints" />
 		<set name="effectRange" val="1100" />
 		<set name="hitTime" val="1200" />
@@ -1342,7 +1341,7 @@
 		<set name="reuseDelay" val="4000" />
 		<set name="targetType" val="ONE" />
 		<for>
-			<effect name="MagicalAttack" />
+			<effect name="MagicalAttackByAbnormal" />
 		</for>
 	</skill>
 	<skill id="1440" levels="5" name="Steal Divinity">
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/05500-05599.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/05500-05599.xml
index 47fe6a3fd6..723cad0a62 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/05500-05599.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/05500-05599.xml
@@ -394,7 +394,6 @@
 	<skill id="5522" levels="1" name="Chain Magic - Dark Explosion">
 		<set name="affectRange" val="600" />
 		<set name="castRange" val="500" />
-		<set name="dependOnTargetBuff" val="0.2" /> <!-- NOTE: Divine Inspiration/Dance/Song/Trigger slots are ignored, so using (20 Default Buff Slots / 100) -->
 		<set name="effectPoint" val="-1063" />
 		<set name="effectRange" val="900" />
 		<set name="element" val="5" /> <!-- Dark -->
@@ -406,7 +405,7 @@
 		<set name="power" val="85" />
 		<set name="targetType" val="AREA" />
 		<for>
-			<effect name="MagicalAttack" />
+			<effect name="MagicalAttackByAbnormal" />
 		</for>
 	</skill>
 	<skill id="5523" levels="1" name="Chain Magic - Unholy Castle">
-- 
GitLab