Files
abysmal-isle/Scripts/Items/Containers/BaseTreasureChestMod.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
2.8 KiB
C#

// Treasure Chest Pack - Version 0.99H
// By Nerun
using Server;
using Server.Items;
using Server.Network;
using System;
namespace Server.Items
{
public abstract class BaseTreasureChestMod : LockableContainer
{
private ChestTimer m_DeleteTimer;
//public override bool Decays { get{ return true; } }
//public override TimeSpan DecayTime{ get{ return TimeSpan.FromMinutes( Utility.Random( 10, 15 ) ); } }
public override int DefaultGumpID{ get{ return 0x42; } }
public override int DefaultDropSound{ get{ return 0x42; } }
public override Rectangle2D Bounds{ get{ return new Rectangle2D( 20, 105, 150, 180 ); } }
public override bool IsDecoContainer{get{ return false; }}
public BaseTreasureChestMod( int itemID ) : base ( itemID )
{
Locked = true;
Movable = false;
Key key = (Key)FindItemByType( typeof(Key) );
if( key != null )
key.Delete();
if(Core.SA)
RefinementComponent.Roll(this, 1, 0.08);
}
public BaseTreasureChestMod( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
if( !Locked )
StartDeleteTimer();
}
public override void OnTelekinesis( Mobile from )
{
if ( CheckLocked( from ) )
{
Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 );
Effects.PlaySound( Location, Map, 0x1F5 );
return;
}
base.OnTelekinesis( from );
Name = "a treasure chest";
StartDeleteTimer();
}
public override void OnDoubleClick( Mobile from )
{
if ( CheckLocked( from ) )
return;
base.OnDoubleClick( from );
Name = "a treasure chest";
StartDeleteTimer();
}
protected void AddLoot(Item item)
{
if (item == null)
return;
if (Core.SA && RandomItemGenerator.Enabled)
{
int min, max;
TreasureMapChest.GetRandomItemStat(out min, out max);
RunicReforging.GenerateRandomItem(item, 0, min, max);
}
DropItem(item);
}
private void StartDeleteTimer()
{
if( m_DeleteTimer == null )
m_DeleteTimer = new ChestTimer( this );
else
m_DeleteTimer.Delay = TimeSpan.FromSeconds( Utility.Random( 1, 2 ));
m_DeleteTimer.Start();
}
private class ChestTimer : Timer
{
private BaseTreasureChestMod m_Chest;
public ChestTimer( BaseTreasureChestMod chest ) : base ( TimeSpan.FromMinutes( Utility.Random( 2, 5 ) ) )
{
m_Chest = chest;
Priority = TimerPriority.OneMinute;
}
protected override void OnTick()
{
m_Chest.Delete();
}
}
}
}