Piotr
Member
Hi,
I created this custom potion, which is basically a drug for the players. It gives a high str+dex bonus and I would like it to also give a penalty once the bonus wears off (-30 on both str and dex, for example). The penalty would have to last for a few minutes.
I was thinking on using a Timer.DelayCall, but cannot figure out how to do it.
As always, any help will be much appreciated.
I created this custom potion, which is basically a drug for the players. It gives a high str+dex bonus and I would like it to also give a penalty once the bonus wears off (-30 on both str and dex, for example). The penalty would have to last for a few minutes.
I was thinking on using a Timer.DelayCall, but cannot figure out how to do it.
As always, any help will be much appreciated.
C#:
using System;
namespace Server.Items
{
public abstract class BaseDrugPotion: BasePotion
{
public BaseDrugPotion(PotionEffect effect)
: base(0xF09, effect)
{
Hue = 1459;
}
public BaseDrugPotion(Serial serial)
: base(serial)
{
}
public abstract int StrOffset { get; }
public abstract int DexOffset { get; }
public abstract TimeSpan Duration { get; }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public bool DoStrength(Mobile from)
{
// TODO: Verify scaled; is it offset, duration, or both?
int scale = Scale(from, this.StrOffset);
int scale2 = Scale(from, this.DexOffset);
if (Spells.SpellHelper.AddStatOffset(from, StatType.Str, scale, this.Duration) && Spells.SpellHelper.AddStatOffset(from, StatType.Dex, scale2, this.Duration))
{
from.FixedEffect(0x375A, 10, 15);
from.PlaySound(0x1E7);
BuffInfo.AddBuff(from, new BuffInfo(BuffIcon.Strength, 1075845, this.Duration, from, scale.ToString()));
BuffInfo.AddBuff(from, new BuffInfo(BuffIcon.Agility, 1075841, this.Duration, from, scale.ToString()));
return true;
}
from.SendLocalizedMessage(502173); // You are already under a similar effect.
return false;
}
public override void Drink(Mobile from)
{
if (this.DoStrength(from))
{
BasePotion.PlayDrinkEffect(from);
if (!Engines.ConPVP.DuelContext.IsFreeConsume(from))
this.Consume();
}
}
}
}