* Fixes boats only moving once. * Removes event sink for weapon ability * Moves weapon ability packets out of the core.
68 lines
2 KiB
C#
68 lines
2 KiB
C#
using System;
|
|
|
|
namespace Server.Items
|
|
{
|
|
/// <summary>
|
|
/// This devastating strike is most effective against those who are in good health and whose reserves
|
|
/// of mana are low, or vice versa.
|
|
/// </summary>
|
|
public class ConcussionBlow : WeaponAbility
|
|
{
|
|
public override int BaseMana => 25;
|
|
|
|
public override bool OnBeforeDamage(Mobile attacker, Mobile defender)
|
|
{
|
|
if (!Validate(attacker) || !CheckMana(attacker, true))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
ClearCurrentAbility(attacker);
|
|
|
|
attacker.SendLocalizedMessage(1060165); // You have delivered a concussion!
|
|
defender.SendLocalizedMessage(1060166); // You feel disoriented!
|
|
|
|
defender.PlaySound(0x213);
|
|
defender.FixedParticles(0x377A, 1, 32, 9949, 1153, 0, EffectLayer.Head);
|
|
|
|
Effects.SendMovingParticles(
|
|
new Entity(Serial.Zero, new Point3D(defender.X, defender.Y, defender.Z + 10), defender.Map),
|
|
new Entity(Serial.Zero, new Point3D(defender.X, defender.Y, defender.Z + 20), defender.Map),
|
|
0x36FE,
|
|
1,
|
|
0,
|
|
false,
|
|
false,
|
|
1133,
|
|
3,
|
|
9501,
|
|
1,
|
|
0,
|
|
EffectLayer.Waist,
|
|
0x100
|
|
);
|
|
|
|
var damage = 10; // Base damage is 10.
|
|
|
|
if (defender.HitsMax > 0)
|
|
{
|
|
var hitsPercent = defender.Hits / (double)defender.HitsMax * 100.0;
|
|
|
|
double manaPercent = 0;
|
|
|
|
if (defender.ManaMax > 0)
|
|
{
|
|
manaPercent = defender.Mana / (double)defender.ManaMax * 100.0;
|
|
}
|
|
|
|
damage += Math.Min((int)(Math.Abs(hitsPercent - manaPercent) / 4), 20);
|
|
}
|
|
|
|
// Total damage is 10 + (0~20) = 10~30, physical, non-resistable.
|
|
|
|
defender.Damage(damage, attacker);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|