Files
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

212 lines
5.2 KiB
C#

using System;
using System.Collections.Generic;
using Server.Mobiles;
namespace Server.Items
{
public class PotionOfGloriousFortune : Item
{
public override int LabelNumber { get { return 1158688; } } // Potion of Glorious Fortune
public static int Bonus = 400;
[Constructable]
public PotionOfGloriousFortune()
: base(0xA1E6)
{
Hue = 1195;
LootType = LootType.Blessed;
}
public override void OnDoubleClick(Mobile m)
{
if (IsChildOf(m.Backpack))
{
if (TryAddEffects(m))
{
Consume();
}
}
}
public PotionOfGloriousFortune(Serial serial)
: base(serial)
{
}
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 static Dictionary<Mobile, DateTime> Table { get; set; }
public static Timer Timer { get; set; }
public static void OnTick()
{
if (Table == null)
{
return;
}
var list = new List<Mobile>(Table.Keys);
foreach(var m in list)
{
UnderEffects(m);
}
ColUtility.Free(list);
}
public static int GetBonus(Mobile m)
{
if (UnderEffects(m))
{
return (int)(Bonus / 100);
}
return 1;
}
public static bool TryAddEffects(Mobile m)
{
if (Table == null)
{
Table = new Dictionary<Mobile, DateTime>();
}
if (!UnderEffects(m))
{
Table[m] = DateTime.UtcNow + TimeSpan.FromHours(1);
m.SendLocalizedMessage(1158719); // You are now under the effect of the Potion of Glorious Fortune.
BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.PotionGloriousFortune, 1158688, 1158720, TimeSpan.FromMinutes(60), m, Bonus.ToString(), true));
m.FixedEffect(0x375A, 10, 15);
m.PlaySound(0x1E7);
if (Timer == null)
{
Timer = Timer.DelayCall(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5), OnTick);
Timer.Start();
}
return true;
}
else
{
m.SendLocalizedMessage(1158718); // You are already under the effect of the Potion of Glorious Fortune.
}
return false;
}
public static bool UnderEffects(Mobile m)
{
if (Table != null && Table.ContainsKey(m))
{
if (Table[m] < DateTime.UtcNow)
{
ExpireBuff(m);
return false;
}
return true;
}
return false;
}
public static void ExpireBuff(Mobile m)
{
Table.Remove(m);
if (Table.Count == 0)
{
Table = null;
if (Timer != null)
{
Timer.Stop();
Timer = null;
}
}
}
public static void Save(GenericWriter writer)
{
writer.Write(0);
writer.Write(Table == null ? 0 : Table.Count);
if (Table != null)
{
foreach (var kpv in Table)
{
writer.Write(kpv.Key);
writer.Write(kpv.Value);
}
}
}
public static void Load(GenericReader reader)
{
reader.ReadInt(); // version
int count = reader.ReadInt();
for (int i = 0; i < count; i++)
{
var bc = reader.ReadMobile();
var dt = reader.ReadDateTime();
if (bc != null && dt > DateTime.UtcNow)
{
if (Table == null)
Table = new Dictionary<Mobile, DateTime>();
Table[bc] = dt;
if (Timer == null)
{
Timer = Timer.DelayCall(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5), OnTick);
Timer.Start();
}
}
}
}
public static void Initialize()
{
EventSink.Login += OnLogin;
}
public static void OnLogin(LoginEventArgs e)
{
var pm = e.Mobile as PlayerMobile;
if (pm != null)
{
if (Table != null && UnderEffects(pm))
{
BuffInfo.AddBuff(pm, new BuffInfo(BuffIcon.PotionGloriousFortune, 1158688, 1158720, Table[pm] - DateTime.UtcNow, pm, Bonus.ToString(), true));
}
}
}
}
}