From 2e940916c94befd54d40ab09dfb742a8b4bff076 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 30 Jan 2021 13:27:27 +0000 Subject: [PATCH] Fixed typo with elemental spirits crit damage and added missing message. Contributed by Sahar. --- .../handlers/effecthandlers/HealPercent.java | 2 +- .../scripts/handlers/effecthandlers/Hp.java | 2 +- .../handlers/effecthandlers/RealDamage.java | 2 +- .../gameserver/model/ElementalSpirit.java | 2 +- .../gameserver/model/actor/Creature.java | 9 +++++--- .../gameserver/model/actor/Summon.java | 2 +- .../actor/instance/DoppelgangerInstance.java | 4 ++-- .../model/actor/instance/PlayerInstance.java | 9 +++++++- .../model/actor/instance/TrapInstance.java | 4 ++-- .../gameserver/model/stats/Formulas.java | 22 ++++++++++++++++--- .../handlers/effecthandlers/HealPercent.java | 2 +- .../scripts/handlers/effecthandlers/Hp.java | 2 +- .../handlers/effecthandlers/RealDamage.java | 2 +- .../gameserver/model/ElementalSpirit.java | 2 +- .../gameserver/model/actor/Creature.java | 9 +++++--- .../gameserver/model/actor/Summon.java | 2 +- .../actor/instance/DoppelgangerInstance.java | 4 ++-- .../model/actor/instance/PlayerInstance.java | 9 +++++++- .../model/actor/instance/TrapInstance.java | 4 ++-- .../gameserver/model/stats/Formulas.java | 22 ++++++++++++++++--- .../handlers/effecthandlers/HealPercent.java | 2 +- .../scripts/handlers/effecthandlers/Hp.java | 2 +- .../handlers/effecthandlers/RealDamage.java | 2 +- .../gameserver/model/ElementalSpirit.java | 2 +- .../gameserver/model/actor/Creature.java | 9 +++++--- .../gameserver/model/actor/Summon.java | 2 +- .../actor/instance/DoppelgangerInstance.java | 4 ++-- .../model/actor/instance/PlayerInstance.java | 9 +++++++- .../model/actor/instance/TrapInstance.java | 4 ++-- .../gameserver/model/stats/Formulas.java | 22 ++++++++++++++++--- .../handlers/effecthandlers/HealPercent.java | 2 +- .../scripts/handlers/effecthandlers/Hp.java | 2 +- .../handlers/effecthandlers/RealDamage.java | 2 +- .../gameserver/model/ElementalSpirit.java | 2 +- .../gameserver/model/actor/Creature.java | 9 +++++--- .../gameserver/model/actor/Summon.java | 2 +- .../actor/instance/DoppelgangerInstance.java | 4 ++-- .../model/actor/instance/PlayerInstance.java | 9 +++++++- .../model/actor/instance/TrapInstance.java | 4 ++-- .../gameserver/model/stats/Formulas.java | 22 ++++++++++++++++--- 40 files changed, 168 insertions(+), 64 deletions(-) diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java index b92b18065d..dc9e07e284 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java @@ -97,7 +97,7 @@ public class HealPercent extends AbstractEffect { final double damage = -amount; effected.reduceCurrentHp(damage, effector, skill, false, false, false, false); - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Hp.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Hp.java index c9a9771ac9..ea9fa21fc4 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Hp.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Hp.java @@ -102,7 +102,7 @@ public class Hp extends AbstractEffect { final double damage = -amount; effected.reduceCurrentHp(damage, effector, skill, false, false, false, false); - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java index d52b2f38bc..6d9b2cfc09 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java @@ -79,7 +79,7 @@ public class RealDamage extends AbstractEffect // Send message. if (effector.isPlayer()) { - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/ElementalSpirit.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/ElementalSpirit.java index 6618f7d350..925f0ab816 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/ElementalSpirit.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/ElementalSpirit.java @@ -285,7 +285,7 @@ public class ElementalSpirit public int getCriticalDamage() { - return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalRatePoints(); + return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalDamagePoints(); } public void setInUse(boolean value) diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java index 11d3f045d5..8879f37ec9 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4552,6 +4552,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } double elementalDamage = 0; + boolean elementalCrit = false; // Calculate PvP/PvE damage received. It is a post-attack stat. if (attacker != null) @@ -4576,7 +4577,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (!reflect) { - elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount); + elementalCrit = Formulas.calcSpiritElementalCrit(attacker, this); + elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount, elementalCrit); amount += elementalDamage; } } @@ -4602,7 +4604,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (attacker != null) { - attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false); + attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false, elementalCrit); } } @@ -4736,8 +4738,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe * @param elementalDamage * @param crit * @param miss + * @param elementalCrit */ - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Summon.java index dca1304877..03d1af23ea 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -731,7 +731,7 @@ public abstract class Summon extends Playable } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (_owner == null)) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java index 97d71d4230..29010fe512 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java @@ -124,11 +124,11 @@ public class DoppelgangerInstance extends Npc public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect) { super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect); - sendDamageMessage(target, skill, (int) damage, 0, critical, false); + sendDamageMessage(target, skill, (int) damage, 0, critical, false, false); } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (getSummoner() == null) || !getSummoner().isPlayer()) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 2922e267f4..0bf72177a0 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -11386,7 +11386,7 @@ public class PlayerInstance extends Playable } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { // Check if hit is missed if (miss) @@ -11431,6 +11431,13 @@ public class PlayerInstance extends Playable } } + if (elementalCrit) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.S1_ATTACK_CRITICAL_IS_ACTIVATED); + sm.addElementalSpirit(getActiveElementalSpiritType()); + sendPacket(sm); + } + if (isInOlympiadMode() && target.isPlayer() && target.getActingPlayer().isInOlympiadMode() && (target.getActingPlayer().getOlympiadGameId() == getOlympiadGameId())) { OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java index 9ffe593e15..359761ff43 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java @@ -253,11 +253,11 @@ public class TrapInstance extends Npc public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect) { super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect); - sendDamageMessage(target, skill, (int) damage, 0, critical, false); + sendDamageMessage(target, skill, (int) damage, 0, critical, false, false); } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (_owner == null)) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/stats/Formulas.java index d654575e0a..c7099d00a0 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/stats/Formulas.java @@ -1667,7 +1667,25 @@ public class Formulas return 1; } - public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage) + public static boolean calcSpiritElementalCrit(Creature attacker, Creature target) + { + if (attacker.isPlayer()) + { + final PlayerInstance attackerPlayer = attacker.getActingPlayer(); + final ElementalType type = ElementalType.of(attackerPlayer.getActiveElementalSpiritType()); + if (ElementalType.NONE == type) + { + return false; + } + + final double critRate = attackerPlayer.getElementalSpiritCritRate(); + return Math.min(critRate * 10, 380) > Rnd.get(1000); + } + + return false; + } + + public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage, boolean isCrit) { if (attacker.isPlayer()) { @@ -1678,8 +1696,6 @@ public class Formulas return 0; } - final double critRate = attackerPlayer.getElementalSpiritCritRate(); - final boolean isCrit = Math.min(critRate * 10, 380) > Rnd.get(1000); final double critDamage = attackerPlayer.getElementalSpiritCritDamage(); final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6); if (target.isPlayer()) diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java index b92b18065d..dc9e07e284 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java @@ -97,7 +97,7 @@ public class HealPercent extends AbstractEffect { final double damage = -amount; effected.reduceCurrentHp(damage, effector, skill, false, false, false, false); - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Hp.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Hp.java index c9a9771ac9..ea9fa21fc4 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Hp.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Hp.java @@ -102,7 +102,7 @@ public class Hp extends AbstractEffect { final double damage = -amount; effected.reduceCurrentHp(damage, effector, skill, false, false, false, false); - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java index d52b2f38bc..6d9b2cfc09 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java @@ -79,7 +79,7 @@ public class RealDamage extends AbstractEffect // Send message. if (effector.isPlayer()) { - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/ElementalSpirit.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/ElementalSpirit.java index 6618f7d350..925f0ab816 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/ElementalSpirit.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/ElementalSpirit.java @@ -285,7 +285,7 @@ public class ElementalSpirit public int getCriticalDamage() { - return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalRatePoints(); + return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalDamagePoints(); } public void setInUse(boolean value) diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java index 11d3f045d5..8879f37ec9 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4552,6 +4552,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } double elementalDamage = 0; + boolean elementalCrit = false; // Calculate PvP/PvE damage received. It is a post-attack stat. if (attacker != null) @@ -4576,7 +4577,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (!reflect) { - elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount); + elementalCrit = Formulas.calcSpiritElementalCrit(attacker, this); + elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount, elementalCrit); amount += elementalDamage; } } @@ -4602,7 +4604,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (attacker != null) { - attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false); + attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false, elementalCrit); } } @@ -4736,8 +4738,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe * @param elementalDamage * @param crit * @param miss + * @param elementalCrit */ - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Summon.java index dca1304877..03d1af23ea 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -731,7 +731,7 @@ public abstract class Summon extends Playable } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (_owner == null)) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java index 97d71d4230..29010fe512 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java @@ -124,11 +124,11 @@ public class DoppelgangerInstance extends Npc public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect) { super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect); - sendDamageMessage(target, skill, (int) damage, 0, critical, false); + sendDamageMessage(target, skill, (int) damage, 0, critical, false, false); } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (getSummoner() == null) || !getSummoner().isPlayer()) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 6be7648208..7d613787b7 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -11386,7 +11386,7 @@ public class PlayerInstance extends Playable } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { // Check if hit is missed if (miss) @@ -11431,6 +11431,13 @@ public class PlayerInstance extends Playable } } + if (elementalCrit) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.S1_ATTACK_CRITICAL_IS_ACTIVATED); + sm.addElementalSpirit(getActiveElementalSpiritType()); + sendPacket(sm); + } + if (isInOlympiadMode() && target.isPlayer() && target.getActingPlayer().isInOlympiadMode() && (target.getActingPlayer().getOlympiadGameId() == getOlympiadGameId())) { OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java index 9ffe593e15..359761ff43 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java @@ -253,11 +253,11 @@ public class TrapInstance extends Npc public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect) { super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect); - sendDamageMessage(target, skill, (int) damage, 0, critical, false); + sendDamageMessage(target, skill, (int) damage, 0, critical, false, false); } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (_owner == null)) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/stats/Formulas.java index d654575e0a..c7099d00a0 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/stats/Formulas.java @@ -1667,7 +1667,25 @@ public class Formulas return 1; } - public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage) + public static boolean calcSpiritElementalCrit(Creature attacker, Creature target) + { + if (attacker.isPlayer()) + { + final PlayerInstance attackerPlayer = attacker.getActingPlayer(); + final ElementalType type = ElementalType.of(attackerPlayer.getActiveElementalSpiritType()); + if (ElementalType.NONE == type) + { + return false; + } + + final double critRate = attackerPlayer.getElementalSpiritCritRate(); + return Math.min(critRate * 10, 380) > Rnd.get(1000); + } + + return false; + } + + public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage, boolean isCrit) { if (attacker.isPlayer()) { @@ -1678,8 +1696,6 @@ public class Formulas return 0; } - final double critRate = attackerPlayer.getElementalSpiritCritRate(); - final boolean isCrit = Math.min(critRate * 10, 380) > Rnd.get(1000); final double critDamage = attackerPlayer.getElementalSpiritCritDamage(); final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6); if (target.isPlayer()) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java index 2d248a42d5..aedc79fb01 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java @@ -102,7 +102,7 @@ public class HealPercent extends AbstractEffect { final double damage = -amount; effected.reduceCurrentHp(damage, effector, skill, false, false, false, false); - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Hp.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Hp.java index 4a6d2342fe..444814752e 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Hp.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Hp.java @@ -107,7 +107,7 @@ public class Hp extends AbstractEffect { final double damage = -amount; effected.reduceCurrentHp(damage, effector, skill, false, false, false, false); - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java index d52b2f38bc..6d9b2cfc09 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java @@ -79,7 +79,7 @@ public class RealDamage extends AbstractEffect // Send message. if (effector.isPlayer()) { - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/ElementalSpirit.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/ElementalSpirit.java index 6618f7d350..925f0ab816 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/ElementalSpirit.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/ElementalSpirit.java @@ -285,7 +285,7 @@ public class ElementalSpirit public int getCriticalDamage() { - return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalRatePoints(); + return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalDamagePoints(); } public void setInUse(boolean value) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java index f8d0cff7c5..ad28349dc5 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4551,6 +4551,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } double elementalDamage = 0; + boolean elementalCrit = false; // Calculate PvP/PvE damage received. It is a post-attack stat. if (attacker != null) @@ -4575,7 +4576,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (!reflect) { - elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount); + elementalCrit = Formulas.calcSpiritElementalCrit(attacker, this); + elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount, elementalCrit); amount += elementalDamage; } } @@ -4601,7 +4603,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (attacker != null) { - attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false); + attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false, elementalCrit); } } @@ -4735,8 +4737,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe * @param elementalDamage * @param crit * @param miss + * @param elementalCrit */ - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Summon.java index 6a75032c63..13103f203b 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -731,7 +731,7 @@ public abstract class Summon extends Playable } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (_owner == null)) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java index 97d71d4230..29010fe512 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java @@ -124,11 +124,11 @@ public class DoppelgangerInstance extends Npc public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect) { super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect); - sendDamageMessage(target, skill, (int) damage, 0, critical, false); + sendDamageMessage(target, skill, (int) damage, 0, critical, false, false); } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (getSummoner() == null) || !getSummoner().isPlayer()) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index dfed9c409f..8071c8b21d 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -11357,7 +11357,7 @@ public class PlayerInstance extends Playable } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { // Check if hit is missed if (miss) @@ -11402,6 +11402,13 @@ public class PlayerInstance extends Playable } } + if (elementalCrit) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.S1_ATTACK_CRITICAL_IS_ACTIVATED); + sm.addElementalSpirit(getActiveElementalSpiritType()); + sendPacket(sm); + } + if (isInOlympiadMode() && target.isPlayer() && target.getActingPlayer().isInOlympiadMode() && (target.getActingPlayer().getOlympiadGameId() == getOlympiadGameId())) { OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java index 9ffe593e15..359761ff43 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java @@ -253,11 +253,11 @@ public class TrapInstance extends Npc public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect) { super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect); - sendDamageMessage(target, skill, (int) damage, 0, critical, false); + sendDamageMessage(target, skill, (int) damage, 0, critical, false, false); } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (_owner == null)) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/stats/Formulas.java index d654575e0a..c7099d00a0 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/stats/Formulas.java @@ -1667,7 +1667,25 @@ public class Formulas return 1; } - public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage) + public static boolean calcSpiritElementalCrit(Creature attacker, Creature target) + { + if (attacker.isPlayer()) + { + final PlayerInstance attackerPlayer = attacker.getActingPlayer(); + final ElementalType type = ElementalType.of(attackerPlayer.getActiveElementalSpiritType()); + if (ElementalType.NONE == type) + { + return false; + } + + final double critRate = attackerPlayer.getElementalSpiritCritRate(); + return Math.min(critRate * 10, 380) > Rnd.get(1000); + } + + return false; + } + + public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage, boolean isCrit) { if (attacker.isPlayer()) { @@ -1678,8 +1696,6 @@ public class Formulas return 0; } - final double critRate = attackerPlayer.getElementalSpiritCritRate(); - final boolean isCrit = Math.min(critRate * 10, 380) > Rnd.get(1000); final double critDamage = attackerPlayer.getElementalSpiritCritDamage(); final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6); if (target.isPlayer()) diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java index 2d248a42d5..aedc79fb01 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/HealPercent.java @@ -102,7 +102,7 @@ public class HealPercent extends AbstractEffect { final double damage = -amount; effected.reduceCurrentHp(damage, effector, skill, false, false, false, false); - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Hp.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Hp.java index 4a6d2342fe..444814752e 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Hp.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Hp.java @@ -107,7 +107,7 @@ public class Hp extends AbstractEffect { final double damage = -amount; effected.reduceCurrentHp(damage, effector, skill, false, false, false, false); - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java index d52b2f38bc..6d9b2cfc09 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java @@ -79,7 +79,7 @@ public class RealDamage extends AbstractEffect // Send message. if (effector.isPlayer()) { - effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false); + effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false); } } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ElementalSpirit.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ElementalSpirit.java index 07f8e52d7a..8e21b45a30 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ElementalSpirit.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/ElementalSpirit.java @@ -285,7 +285,7 @@ public class ElementalSpirit public int getCriticalDamage() { - return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalRatePoints(); + return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalDamagePoints(); } public void setInUse(boolean value) diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java index eebc4d05b2..36d2cdd61b 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4561,6 +4561,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } double elementalDamage = 0; + boolean elementalCrit = false; // Calculate PvP/PvE damage received. It is a post-attack stat. if (attacker != null) @@ -4585,7 +4586,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (!reflect) { - elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount); + elementalCrit = Formulas.calcSpiritElementalCrit(attacker, this); + elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount, elementalCrit); amount += elementalDamage; } } @@ -4611,7 +4613,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if (attacker != null) { - attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false); + attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false, elementalCrit); } } @@ -4745,8 +4747,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe * @param elementalDamage * @param crit * @param miss + * @param elementalCrit */ - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Summon.java index b0d31b8e90..e305cdc381 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -731,7 +731,7 @@ public abstract class Summon extends Playable } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (_owner == null)) { diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java index b26a34519d..cbad484ed0 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/DoppelgangerInstance.java @@ -124,11 +124,11 @@ public class DoppelgangerInstance extends Npc public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect) { super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect); - sendDamageMessage(target, skill, (int) damage, 0, critical, false); + sendDamageMessage(target, skill, (int) damage, 0, critical, false, false); } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (getSummoner() == null) || !getSummoner().isPlayer()) { diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index ba42c68d63..549b275499 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -11514,7 +11514,7 @@ public class PlayerInstance extends Playable } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { // Check if hit is missed if (miss) @@ -11559,6 +11559,13 @@ public class PlayerInstance extends Playable } } + if (elementalCrit) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.S1_ATTACK_CRITICAL_IS_ACTIVATED); + sm.addElementalSpirit(getActiveElementalSpiritType()); + sendPacket(sm); + } + if (isInOlympiadMode() && target.isPlayer() && target.getActingPlayer().isInOlympiadMode() && (target.getActingPlayer().getOlympiadGameId() == getOlympiadGameId())) { OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage); diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java index 9ffe593e15..359761ff43 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/TrapInstance.java @@ -253,11 +253,11 @@ public class TrapInstance extends Npc public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect) { super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect); - sendDamageMessage(target, skill, (int) damage, 0, critical, false); + sendDamageMessage(target, skill, (int) damage, 0, critical, false, false); } @Override - public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss) + public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit) { if (miss || (_owner == null)) { diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/stats/Formulas.java index d654575e0a..c7099d00a0 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/stats/Formulas.java @@ -1667,7 +1667,25 @@ public class Formulas return 1; } - public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage) + public static boolean calcSpiritElementalCrit(Creature attacker, Creature target) + { + if (attacker.isPlayer()) + { + final PlayerInstance attackerPlayer = attacker.getActingPlayer(); + final ElementalType type = ElementalType.of(attackerPlayer.getActiveElementalSpiritType()); + if (ElementalType.NONE == type) + { + return false; + } + + final double critRate = attackerPlayer.getElementalSpiritCritRate(); + return Math.min(critRate * 10, 380) > Rnd.get(1000); + } + + return false; + } + + public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage, boolean isCrit) { if (attacker.isPlayer()) { @@ -1678,8 +1696,6 @@ public class Formulas return 0; } - final double critRate = attackerPlayer.getElementalSpiritCritRate(); - final boolean isCrit = Math.min(critRate * 10, 380) > Rnd.get(1000); final double critDamage = attackerPlayer.getElementalSpiritCritDamage(); final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6); if (target.isPlayer())