Files
abysmal-isle/Scripts/Services/Monster Stealing/Items/GemOfSalvation.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

112 lines
3.6 KiB
C#

using System;
using Server.Gumps;
using Server.Mobiles;
using Server.Network;
namespace Server.Items
{
[TypeAlias("drNO.ThieveItems.GemOfSalvation")]
public class GemOfSalvation : Item
{
public override int LabelNumber { get { return 1094939; } } // Gem of Salvation
[Constructable]
public GemOfSalvation()
: base(0x1F13)
{
Hue = 286;
LootType = LootType.Blessed;
}
public static void Initialize()
{
EventSink.PlayerDeath += new PlayerDeathEventHandler(PlayerDeath);
}
public static void PlayerDeath(PlayerDeathEventArgs args)
{
PlayerMobile pm = (PlayerMobile)args.Mobile;
if (pm != null && pm.Backpack != null)
{
GemOfSalvation gem = pm.Backpack.FindItemByType<GemOfSalvation>();
if (gem != null)
{
Timer.DelayCall(TimeSpan.FromSeconds(2), () =>
{
if (DateTime.UtcNow < pm.NextGemOfSalvationUse)
{
TimeSpan left = pm.NextGemOfSalvationUse - DateTime.UtcNow;
if (left >= TimeSpan.FromMinutes(1.0))
pm.SendLocalizedMessage(1095131, ((left.Hours * 60) + left.Minutes).ToString()); // Your spirit lacks cohesion. You must wait ~1_minutes~ minutes before invoking the power of a Gem of Salvation.
else
pm.SendLocalizedMessage(1095130, left.Seconds.ToString()); // Your spirit lacks cohesion. You must wait ~1_seconds~ seconds before invoking the power of a Gem of Salvation.
}
else
{
pm.CloseGump(typeof(ResurrectGump));
pm.SendGump(new GemResurrectGump(pm, gem));
}
});
}
}
}
public GemOfSalvation(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 class GemResurrectGump : ResurrectGump
{
private GemOfSalvation m_Gem;
private PlayerMobile m_Mobile;
public GemResurrectGump(PlayerMobile pm, GemOfSalvation gem)
: base(pm, ResurrectMessage.GemOfSalvation)
{
m_Gem = gem;
m_Mobile = pm;
}
public override void OnResponse(NetState state, RelayInfo info)
{
m_Mobile.CloseGump(typeof(ResurrectGump));
if (info.ButtonID == 1 && !m_Gem.Deleted && m_Gem.IsChildOf(m_Mobile.Backpack))
{
if (m_Mobile.Map == null || !m_Mobile.Map.CanFit(m_Mobile.Location, 16, false, false))
{
m_Mobile.SendLocalizedMessage(502391); // Thou can not be resurrected there!
return;
}
m_Mobile.PlaySound(0x214);
m_Mobile.Resurrect();
m_Mobile.SendLocalizedMessage(1095132); // The gem infuses you with its power and is destroyed in the process.
m_Gem.Delete();
m_Mobile.NextGemOfSalvationUse = DateTime.UtcNow + TimeSpan.FromHours(6);
}
}
}
}