122 lines
4.5 KiB
C#
122 lines
4.5 KiB
C#
// Created by Peoharen
|
|
using System;
|
|
using System.Collections;
|
|
|
|
namespace Server
|
|
{
|
|
public class EnhancementTimer : Timer
|
|
{
|
|
private readonly ArrayList AL = new ArrayList();
|
|
private readonly Mobile m_Mobile;
|
|
private readonly string m_Title;
|
|
private int m_Duration;
|
|
|
|
public EnhancementTimer(Mobile m, int duration, string title, params object[] args)
|
|
: base(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1))
|
|
{
|
|
if (args.Length < 1 || (args.Length % 2) != 0)
|
|
throw new Exception("EnhancementTimer: args.length must be an even number greater than 0");
|
|
|
|
Enhancement.AddMobile(m);
|
|
this.m_Mobile = m;
|
|
this.m_Title = title;
|
|
this.m_Duration = duration;
|
|
|
|
AosAttribute att;
|
|
AosWeaponAttribute weapon;
|
|
AosArmorAttribute armor;
|
|
SAAbsorptionAttribute absorb;
|
|
int number = 0;
|
|
|
|
for (int i = 0; i < args.Length - 1; i += 2)
|
|
{
|
|
if (!(args[i + 1] is int))
|
|
throw new Exception("EnhancementTimer: The second value must be an integer");
|
|
|
|
number = (int)args[i + 1];
|
|
|
|
if (args[i] is AosAttribute)
|
|
{
|
|
att = (AosAttribute)args[i];
|
|
Enhancement.SetValue(m, att, (Enhancement.GetValue(m, att) + number), this.m_Title);
|
|
this.AL.Add(att);
|
|
this.AL.Add(number);
|
|
}
|
|
else if (args[i] is AosWeaponAttribute)
|
|
{
|
|
weapon = (AosWeaponAttribute)args[i];
|
|
Enhancement.SetValue(m, weapon, (Enhancement.GetValue(m, weapon) + number), this.m_Title);
|
|
this.AL.Add(weapon);
|
|
this.AL.Add(number);
|
|
}
|
|
else if (args[i] is AosArmorAttribute)
|
|
{
|
|
armor = (AosArmorAttribute)args[i];
|
|
Enhancement.SetValue(m, armor, (Enhancement.GetValue(m, armor) + number), this.m_Title);
|
|
this.AL.Add(armor);
|
|
this.AL.Add(number);
|
|
}
|
|
else if (args[i] is SAAbsorptionAttribute)
|
|
{
|
|
absorb = (SAAbsorptionAttribute)args[i];
|
|
Enhancement.SetValue(m, absorb, (Enhancement.GetValue(m, absorb) + number), this.m_Title);
|
|
this.AL.Add(absorb);
|
|
this.AL.Add(number);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void End()
|
|
{
|
|
if (Enhancement.EnhancementList.ContainsKey(this.m_Mobile))
|
|
{
|
|
AosAttribute att;
|
|
AosWeaponAttribute weapon;
|
|
AosArmorAttribute armor;
|
|
SAAbsorptionAttribute absorb;
|
|
int number = 0;
|
|
|
|
for (int i = 0; i < this.AL.Count - 1; i += 2)
|
|
{
|
|
number = (int)this.AL[i + 1];
|
|
|
|
if (this.AL[i] is AosAttribute)
|
|
{
|
|
att = (AosAttribute)this.AL[i];
|
|
Enhancement.SetValue(this.m_Mobile, att, (Enhancement.GetValue(this.m_Mobile, att) - number), this.m_Title);
|
|
}
|
|
else if (this.AL[i] is AosWeaponAttribute)
|
|
{
|
|
weapon = (AosWeaponAttribute)this.AL[i];
|
|
Enhancement.SetValue(this.m_Mobile, weapon, (Enhancement.GetValue(this.m_Mobile, weapon) - number), this.m_Title);
|
|
}
|
|
else if (this.AL[i] is AosArmorAttribute)
|
|
{
|
|
armor = (AosArmorAttribute)this.AL[i];
|
|
Enhancement.SetValue(this.m_Mobile, armor, (Enhancement.GetValue(this.m_Mobile, armor) - number), this.m_Title);
|
|
}
|
|
else if (this.AL[i] is SAAbsorptionAttribute)
|
|
{
|
|
absorb = (SAAbsorptionAttribute)this.AL[i];
|
|
Enhancement.SetValue(this.m_Mobile, absorb, (Enhancement.GetValue(this.m_Mobile, absorb) - number), this.m_Title);
|
|
}
|
|
}
|
|
}
|
|
|
|
this.Stop();
|
|
}
|
|
|
|
protected override void OnTick()
|
|
{
|
|
this.m_Duration--;
|
|
|
|
if (this.m_Mobile == null)
|
|
this.Stop();
|
|
|
|
if (this.m_Duration < 0)
|
|
{
|
|
this.End();
|
|
}
|
|
}
|
|
}
|
|
} |