Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
120
Scripts/Spells/Mysticism/SpellDefinitions/BombardSpell.cs
Normal file
120
Scripts/Spells/Mysticism/SpellDefinitions/BombardSpell.cs
Normal file
@@ -0,0 +1,120 @@
|
||||
using System;
|
||||
using Server.Mobiles;
|
||||
using Server.Targeting;
|
||||
|
||||
namespace Server.Spells.Mysticism
|
||||
{
|
||||
public class BombardSpell : MysticSpell
|
||||
{
|
||||
public override SpellCircle Circle { get { return SpellCircle.Sixth; } }
|
||||
public override bool DelayedDamage { get { return true; } }
|
||||
public override bool DelayedDamageStacking { get { return false; } }
|
||||
|
||||
private static SpellInfo m_Info = new SpellInfo(
|
||||
"Bombard", "Corp Por Ylem",
|
||||
230,
|
||||
9022,
|
||||
Reagent.Bloodmoss,
|
||||
Reagent.Garlic,
|
||||
Reagent.SulfurousAsh,
|
||||
Reagent.DragonBlood
|
||||
);
|
||||
|
||||
public BombardSpell(Mobile caster, Item scroll) : base(caster, scroll, m_Info)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnCast()
|
||||
{
|
||||
Caster.Target = new InternalTarget(this);
|
||||
}
|
||||
|
||||
public void OnTarget(IDamageable d)
|
||||
{
|
||||
if (d == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if (CheckHSequence(d))
|
||||
{
|
||||
IDamageable target = d;
|
||||
IDamageable source = Caster;
|
||||
|
||||
SpellHelper.Turn(Caster, target);
|
||||
|
||||
if (Core.SA && HasDelayContext(target))
|
||||
{
|
||||
DoHurtFizzle();
|
||||
return;
|
||||
}
|
||||
|
||||
if (SpellHelper.CheckReflect((int)Circle, ref source, ref target))
|
||||
{
|
||||
Server.Timer.DelayCall(TimeSpan.FromSeconds(.5), () =>
|
||||
{
|
||||
source.MovingEffect(target, 0x1363, 12, 1, false, true, 0, 0);
|
||||
source.PlaySound(0x64B);
|
||||
});
|
||||
}
|
||||
|
||||
Caster.MovingEffect(d, 0x1363, 12, 1, false, true, 0, 0);
|
||||
Caster.PlaySound(0x64B);
|
||||
|
||||
SpellHelper.Damage(this, target, (int)GetNewAosDamage(40, 1, 5, target), 100, 0, 0, 0, 0);
|
||||
|
||||
if (target is Mobile)
|
||||
{
|
||||
Timer.DelayCall(TimeSpan.FromMilliseconds(1200), () =>
|
||||
{
|
||||
if (!CheckResisted((Mobile)target))
|
||||
{
|
||||
int secs = (int)((GetDamageSkill(this.Caster) / 10) - (GetResistSkill((Mobile)target) / 10));
|
||||
|
||||
if (secs < 0)
|
||||
secs = 0;
|
||||
|
||||
((Mobile)target).Paralyze(TimeSpan.FromSeconds(secs));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
FinishSequence();
|
||||
}
|
||||
|
||||
public class InternalTarget : Target
|
||||
{
|
||||
public BombardSpell Owner { get; set; }
|
||||
|
||||
public InternalTarget(BombardSpell owner)
|
||||
: this(owner, false)
|
||||
{
|
||||
}
|
||||
|
||||
public InternalTarget(BombardSpell owner, bool allowland)
|
||||
: base(12, allowland, TargetFlags.Harmful)
|
||||
{
|
||||
Owner = owner;
|
||||
}
|
||||
|
||||
protected override void OnTarget(Mobile from, object o)
|
||||
{
|
||||
if (o == null)
|
||||
return;
|
||||
|
||||
if (!from.CanSee(o))
|
||||
from.SendLocalizedMessage(500237); // Target can not be seen.
|
||||
else if (o is IDamageable)
|
||||
{
|
||||
SpellHelper.Turn(from, o);
|
||||
Owner.OnTarget((IDamageable)o);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnTargetFinish(Mobile from)
|
||||
{
|
||||
Owner.FinishSequence();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user