Files
abysmal-isle/Scripts/Abilities/EnhancementTimer.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

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();
}
}
}
}