L2JMobius
Public Development => Bug Reports => Topic started by: MoiKa on April 09, 2025, 06:33:46 PM
-
Hi,
I've noticed that blow-type skills are not playing the critical hit sound effect when they land successfully. This used to be a clear audio cue in retail that helped identify a successful critical blow.
Currently, even when the blow lands and deals damage, there's no sound feedback — it feels like a fail hit. Could this be a bug or a missing sound trigger in the skill handling?
Tested on H5 l2mobius.net
Thanks in advance for checking it out!
-
Known since 2010.
https://l2jserver.com/forum/viewtopic.php?t=16057
And 2017
https://maxcheaters.com/topic/215932-blow-skills-success-sound-effect/
Try this.
Index: dist/game/data/scripts/handlers/effecthandlers/Backstab.java
===================================================================
--- dist/game/data/scripts/handlers/effecthandlers/Backstab.java (revision 17550)
+++ dist/game/data/scripts/handlers/effecthandlers/Backstab.java (working copy)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.item.enums.ShotType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.stats.Formulas;
+import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* Backstab effect implementation.
@@ -71,6 +72,10 @@
if (Formulas.calcCrit(effector, effected, skill))
{
damage *= 2;
+ if (effector.isPlayer())
+ {
+ effector.sendPacket(new PlaySound("skillsound.critical_hit_02"));
+ }
}
effected.reduceCurrentHp(damage, effector, skill);
Index: dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java
===================================================================
--- dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java (revision 17550)
+++ dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java (working copy)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.item.enums.ShotType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.stats.Formulas;
+import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* Fatal Blow effect implementation.
@@ -71,6 +72,10 @@
if (crit)
{
damage *= 2;
+ if (effector.isPlayer())
+ {
+ effector.sendPacket(new PlaySound("skillsound.critical_hit_02"));
+ }
}
effected.reduceCurrentHp(damage, effector, skill);
-
Known since 2010.
https://l2jserver.com/forum/viewtopic.php?t=16057
And 2017
https://maxcheaters.com/topic/215932-blow-skills-success-sound-effect/
Try this.
Index: dist/game/data/scripts/handlers/effecthandlers/Backstab.java
===================================================================
--- dist/game/data/scripts/handlers/effecthandlers/Backstab.java (revision 17550)
+++ dist/game/data/scripts/handlers/effecthandlers/Backstab.java (working copy)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.item.enums.ShotType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.stats.Formulas;
+import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* Backstab effect implementation.
@@ -71,6 +72,10 @@
if (Formulas.calcCrit(effector, effected, skill))
{
damage *= 2;
+ if (effector.isPlayer())
+ {
+ effector.sendPacket(new PlaySound("skillsound.critical_hit_02"));
+ }
}
effected.reduceCurrentHp(damage, effector, skill);
Index: dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java
===================================================================
--- dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java (revision 17550)
+++ dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java (working copy)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.item.enums.ShotType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.stats.Formulas;
+import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* Fatal Blow effect implementation.
@@ -71,6 +72,10 @@
if (crit)
{
damage *= 2;
+ if (effector.isPlayer())
+ {
+ effector.sendPacket(new PlaySound("skillsound.critical_hit_02"));
+ }
}
effected.reduceCurrentHp(damage, effector, skill);
Is there a reason it wasn't included? Like a performance or something? Or did someone just forget to include it ;D?
I'll try it tonight.
Thank you so much.
-
I would guess it was just missed.
New patch.
Index: dist/game/data/scripts/handlers/effecthandlers/Backstab.java
===================================================================
--- dist/game/data/scripts/handlers/effecthandlers/Backstab.java (revision 17554)
+++ dist/game/data/scripts/handlers/effecthandlers/Backstab.java (working copy)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.item.enums.ShotType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.stats.Formulas;
+import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* Backstab effect implementation.
@@ -68,13 +69,18 @@
double damage = Formulas.calcBackstabDamage(effector, effected, skill, shld, ss);
// Crit rate base crit rate for skill, modified with STR bonus
- if (Formulas.calcCrit(effector, effected, skill))
+ final boolean crit = Formulas.calcCrit(effector, effected, skill);
+ if (crit)
{
damage *= 2;
+ if (effector.isPlayer())
+ {
+ effector.sendPacket(new PlaySound("skillsound.critical_hit_02"));
+ }
}
effected.reduceCurrentHp(damage, effector, skill);
- effected.notifyDamageReceived(damage, effector, skill, true, false);
+ effected.notifyDamageReceived(damage, effector, skill, crit, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
@@ -86,10 +92,10 @@
if (effector.isPlayer())
{
final Player activePlayer = effector.asPlayer();
- activePlayer.sendDamageMessage(effected, (int) damage, false, true, false);
+ activePlayer.sendDamageMessage(effected, (int) damage, false, crit, false);
}
// Check if damage should be reflected
- Formulas.calcDamageReflected(effector, effected, skill, true);
+ Formulas.calcDamageReflected(effector, effected, skill, crit);
}
}
\ No newline at end of file
Index: dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java
===================================================================
--- dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java (revision 17554)
+++ dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java (working copy)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.item.enums.ShotType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.stats.Formulas;
+import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* Fatal Blow effect implementation.
@@ -71,6 +72,10 @@
if (crit)
{
damage *= 2;
+ if (effector.isPlayer())
+ {
+ effector.sendPacket(new PlaySound("skillsound.critical_hit_02"));
+ }
}
effected.reduceCurrentHp(damage, effector, skill);
@@ -86,10 +91,10 @@
if (effector.isPlayer())
{
final Player activePlayer = effector.asPlayer();
- activePlayer.sendDamageMessage(effected, (int) damage, false, true, false);
+ activePlayer.sendDamageMessage(effected, (int) damage, false, crit, false);
}
// Check if damage should be reflected.
- Formulas.calcDamageReflected(effector, effected, skill, true);
+ Formulas.calcDamageReflected(effector, effected, skill, crit);
}
}
\ No newline at end of file
-
I would guess it was just missed.
New patch.
Index: dist/game/data/scripts/handlers/effecthandlers/Backstab.java
===================================================================
--- dist/game/data/scripts/handlers/effecthandlers/Backstab.java (revision 17554)
+++ dist/game/data/scripts/handlers/effecthandlers/Backstab.java (working copy)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.item.enums.ShotType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.stats.Formulas;
+import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* Backstab effect implementation.
@@ -68,13 +69,18 @@
double damage = Formulas.calcBackstabDamage(effector, effected, skill, shld, ss);
// Crit rate base crit rate for skill, modified with STR bonus
- if (Formulas.calcCrit(effector, effected, skill))
+ final boolean crit = Formulas.calcCrit(effector, effected, skill);
+ if (crit)
{
damage *= 2;
+ if (effector.isPlayer())
+ {
+ effector.sendPacket(new PlaySound("skillsound.critical_hit_02"));
+ }
}
effected.reduceCurrentHp(damage, effector, skill);
- effected.notifyDamageReceived(damage, effector, skill, true, false);
+ effected.notifyDamageReceived(damage, effector, skill, crit, false);
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!effected.isRaid() && Formulas.calcAtkBreak(effected, damage))
@@ -86,10 +92,10 @@
if (effector.isPlayer())
{
final Player activePlayer = effector.asPlayer();
- activePlayer.sendDamageMessage(effected, (int) damage, false, true, false);
+ activePlayer.sendDamageMessage(effected, (int) damage, false, crit, false);
}
// Check if damage should be reflected
- Formulas.calcDamageReflected(effector, effected, skill, true);
+ Formulas.calcDamageReflected(effector, effected, skill, crit);
}
}
\ No newline at end of file
Index: dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java
===================================================================
--- dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java (revision 17554)
+++ dist/game/data/scripts/handlers/effecthandlers/FatalBlow.java (working copy)
@@ -25,6 +25,7 @@
import org.l2jmobius.gameserver.model.item.enums.ShotType;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.stats.Formulas;
+import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* Fatal Blow effect implementation.
@@ -71,6 +72,10 @@
if (crit)
{
damage *= 2;
+ if (effector.isPlayer())
+ {
+ effector.sendPacket(new PlaySound("skillsound.critical_hit_02"));
+ }
}
effected.reduceCurrentHp(damage, effector, skill);
@@ -86,10 +91,10 @@
if (effector.isPlayer())
{
final Player activePlayer = effector.asPlayer();
- activePlayer.sendDamageMessage(effected, (int) damage, false, true, false);
+ activePlayer.sendDamageMessage(effected, (int) damage, false, crit, false);
}
// Check if damage should be reflected.
- Formulas.calcDamageReflected(effector, effected, skill, true);
+ Formulas.calcDamageReflected(effector, effected, skill, crit);
}
}
\ No newline at end of file
Thank you Mobius!.
For me backstab is fine, however, I think that for fatal blow, whenever it's successful, the critical sound applies, not just when it's a skill critical (influenced by STR). But these are already minor details.
-
Maybe commit only the Backstab part?
-
Maybe fatal blow cannot do critical?
As i understand backstab has this in client description --> https://prnt.sc/vbKYZIePkfQo
But Fatal blow does not have it --> https://prnt.sc/M_4X1pRvSzje / https://prnt.sc/Fqn3duM2xVcU
-
Maybe fatal blow cannot do critical?
As i understand backstab has this in client description --> https://prnt.sc/vbKYZIePkfQo
But Fatal blow does not have it --> https://prnt.sc/M_4X1pRvSzje / https://prnt.sc/Fqn3duM2xVcU
For Fatal blow skills... Only lethal blow has a chance from 20% to hit critical (21% in enchanted skills)
Lethal: effect={{i_fatal_blow;5773;300;20}
Mortal: effect={{i_fatal_blow;977;200;0}}
Deadly: effect={{i_fatal_blow;5479;300;0}
Blinding: effect={{i_fatal_blow;3653;250;0}
Critical blow: effect={{i_fatal_blow;3653;250;0}
Backstab has 15% to hit critical
effect={{i_backstab;5479;400;15}
The thing is, Fatal Blow skills, whenever they succeed, whether critical or non-critical, sound like a critical. At least that's how it was playing the off.
Thank you!