191 lines
6.5 KiB
C#
191 lines
6.5 KiB
C#
using System;
|
|
using System.Collections;
|
|
using Server.Targeting;
|
|
using Server.Network;
|
|
using Server.Mobiles;
|
|
using Server.Items;
|
|
using Server.Spells;
|
|
|
|
namespace Server.ACC.CSS.Systems.Ranger
|
|
{
|
|
public class RangerFireBowSpell : RangerSpell
|
|
{
|
|
private static SpellInfo m_Info = new SpellInfo(
|
|
"Bow of Fire", "Kurwa Naur Cu",
|
|
//SpellCircle.Fifth,
|
|
212,
|
|
9041,
|
|
CReagent.Kindling,
|
|
Reagent.SulfurousAsh
|
|
);
|
|
|
|
public override SpellCircle Circle
|
|
{
|
|
get { return SpellCircle.Fifth; }
|
|
}
|
|
|
|
public override double CastDelay { get { return 7.0; } }
|
|
public override double RequiredSkill { get { return 85.0; } }
|
|
public override int RequiredMana { get { return 30; } }
|
|
|
|
public RangerFireBowSpell(Mobile caster, Item scroll)
|
|
: base(caster, scroll, m_Info)
|
|
{
|
|
}
|
|
|
|
public override void OnCast()
|
|
{
|
|
if (CheckSequence())
|
|
{
|
|
if (this.Scroll != null)
|
|
Scroll.Consume();
|
|
|
|
Item weap = new RangerFireBow(Caster);
|
|
|
|
Caster.AddToBackpack(weap);
|
|
Caster.SendMessage("You create a magical bow and place it in your backpack.");
|
|
|
|
Caster.PlaySound(0x212);
|
|
Caster.PlaySound(0x206);
|
|
|
|
Effects.SendLocationParticles(EffectItem.Create(Caster.Location, Caster.Map, EffectItem.DefaultDuration), 0x376A, 1, 29, 0x47D, 2, 9962, 0);
|
|
Effects.SendLocationParticles(EffectItem.Create(new Point3D(Caster.X, Caster.Y, Caster.Z - 7), Caster.Map, EffectItem.DefaultDuration), 0x37C4, 1, 29, 0x47D, 2, 9502, 0);
|
|
}
|
|
}
|
|
|
|
[FlipableAttribute(0x13B2, 0x13B1)]
|
|
public class RangerFireBow : BaseRanged
|
|
{
|
|
private Mobile m_Owner;
|
|
private DateTime m_Expire;
|
|
private Timer m_Timer;
|
|
|
|
public override int EffectID { get { return 0xF42; } }
|
|
public override Type AmmoType { get { return typeof(Arrow); } }
|
|
public override Item Ammo { get { return new Arrow(); } }
|
|
|
|
public override WeaponAbility PrimaryAbility { get { return WeaponAbility.ParalyzingBlow; } }
|
|
public override WeaponAbility SecondaryAbility { get { return WeaponAbility.MortalStrike; } }
|
|
|
|
public override int AosStrengthReq { get { return 30; } }
|
|
public override int AosMinDamage { get { return 16; } }
|
|
public override int AosMaxDamage { get { return 18; } }
|
|
public override int AosSpeed { get { return 25; } }
|
|
|
|
public override int OldStrengthReq { get { return 20; } }
|
|
public override int OldMinDamage { get { return 9; } }
|
|
public override int OldMaxDamage { get { return 41; } }
|
|
public override int OldSpeed { get { return 20; } }
|
|
|
|
public override int DefMaxRange { get { return 10; } }
|
|
|
|
public override int InitMinHits { get { return 31; } }
|
|
public override int InitMaxHits { get { return 60; } }
|
|
|
|
public override WeaponAnimation DefAnimation { get { return WeaponAnimation.ShootBow; } }
|
|
|
|
[Constructable]
|
|
public RangerFireBow(Mobile owner)
|
|
: base(0x13B2)
|
|
{
|
|
WeaponAttributes.HitFireArea = 50;
|
|
WeaponAttributes.HitFireball = 50;
|
|
m_Owner = owner;
|
|
Weight = 6.0;
|
|
Layer = Layer.TwoHanded;
|
|
Hue = 1161;
|
|
BlessedFor = owner;
|
|
Name = "Bow of Fire";
|
|
|
|
double time = (owner.Skills[SkillName.Archery].Value / 20.0) * RangerHuntersAimSpell.GetScalar(owner);
|
|
m_Expire = DateTime.Now + TimeSpan.FromMinutes((int)time);
|
|
m_Timer = new InternalTimer(this, m_Expire);
|
|
|
|
m_Timer.Start();
|
|
}
|
|
|
|
public override void GetDamageTypes(Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct)
|
|
{
|
|
phys = cold = pois = nrgy = chaos = direct = 0;
|
|
fire = 100;
|
|
}
|
|
|
|
public override void OnDelete()
|
|
{
|
|
if (m_Timer != null)
|
|
m_Timer.Stop();
|
|
|
|
base.OnDelete();
|
|
}
|
|
|
|
public override bool CanEquip(Mobile m)
|
|
{
|
|
if (m != m_Owner)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public void Remove()
|
|
{
|
|
m_Owner.SendMessage("Your bow slowly dissipates.");
|
|
Delete();
|
|
}
|
|
|
|
public RangerFireBow(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
public override void AddNameProperties(ObjectPropertyList list)
|
|
{
|
|
base.AddNameProperties(list);
|
|
|
|
list.Add(1049644, "Temparary Spell Enchantment");
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.Write((int)0); // version
|
|
writer.Write(m_Owner);
|
|
writer.Write(m_Expire);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadInt();
|
|
m_Owner = reader.ReadMobile();
|
|
m_Expire = reader.ReadDeltaTime();
|
|
|
|
m_Timer = new InternalTimer(this, m_Expire);
|
|
m_Timer.Start();
|
|
}
|
|
}
|
|
|
|
private class InternalTimer : Timer
|
|
{
|
|
private RangerFireBow m_Bow;
|
|
private DateTime m_Expire;
|
|
|
|
public InternalTimer(RangerFireBow bow, DateTime expire)
|
|
: base(TimeSpan.Zero, TimeSpan.FromSeconds(0.1))
|
|
{
|
|
m_Bow = bow;
|
|
m_Expire = expire;
|
|
}
|
|
|
|
protected override void OnTick()
|
|
{
|
|
if (DateTime.Now >= m_Expire)
|
|
{
|
|
m_Bow.Remove();
|
|
Stop();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|