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