ModernUO/Projects/UOContent/Mobiles/Abilities/RuneCorruption.cs

170 lines
5.2 KiB
C#

using System;
namespace Server.Mobiles;
public class RuneCorruption : MonsterAbilitySingleTargetDoT
{
public override MonsterAbilityType AbilityType => MonsterAbilityType.RuneCorruption;
public override MonsterAbilityTrigger AbilityTrigger => MonsterAbilityTrigger.GiveMeleeDamage;
public override double ChanceToTrigger => 0.05;
private const string Name = "RuneCorruption";
protected override void OnBeforeTarget(MonsterAbilityTrigger trigger, BaseCreature source, Mobile defender)
{
if (RemoveEffect(source, defender))
{
defender.SendLocalizedMessage(1070845); // The creature continues to corrupt your armor!
}
else
{
defender.SendLocalizedMessage(1070846); // The creature magically corrupts your armor!
}
}
protected override void OnTarget(MonsterAbilityTrigger trigger, BaseCreature source, Mobile defender)
{
base.OnTarget(trigger, source, defender);
/**
* Rune Corruption
* Start cliloc: 1070846 "The creature magically corrupts your armor!"
* Effect: All resistances -70 (lowest 0) for 5 seconds
* End ASCII: "The corruption of your armor has worn off"
*/
source.DoHarmful(defender);
if (Core.ML)
{
if (defender.PhysicalResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Physical,
Name,
-(defender.PhysicalResistance / 2)
)
);
}
if (defender.FireResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Fire,
Name,
-(defender.FireResistance / 2)
)
);
}
if (defender.ColdResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Cold,
Name,
-(defender.ColdResistance / 2)
)
);
}
if (defender.PoisonResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Poison,
Name,
-(defender.PoisonResistance / 2)
)
);
}
if (defender.EnergyResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Energy,
Name,
-(defender.EnergyResistance / 2)
)
);
}
}
else
{
if (defender.PhysicalResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Physical,
Name,
defender.PhysicalResistance > 70 ? -70 : -defender.PhysicalResistance
)
);
}
if (defender.FireResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Fire,
Name,
defender.FireResistance > 70 ? -70 : -defender.FireResistance
)
);
}
if (defender.ColdResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Cold,
Name,
defender.ColdResistance > 70 ? -70 : -defender.ColdResistance
)
);
}
if (defender.PoisonResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Poison,
Name,
defender.PoisonResistance > 70 ? -70 : -defender.PoisonResistance
)
);
}
if (defender.EnergyResistance > 0)
{
defender.AddResistanceMod(
new ResistanceMod(
ResistanceType.Energy,
Name,
defender.EnergyResistance > 70 ? -70 : -defender.EnergyResistance
)
);
}
}
defender.FixedEffect(0x37B9, 10, 5);
}
protected override void EffectTick(BaseCreature source, Mobile defender, ref TimeSpan nextDelay)
{
}
protected override void EndEffect(BaseCreature source, Mobile defender)
{
defender.RemoveResistanceMod(Name);
}
protected override void OnEffectExpired(BaseCreature source, Mobile defender)
{
defender.SendLocalizedMessage(1071967); // The corruption of your armor has worn off
}
}