Convert movement, actions (lift/use), combat, and spells to use Core.TickCount and avoid DateTime caveats (performance, system time dependency, etc) Refactor DateTime.Now to DateTime.UtcNow Add LOS check for Iron Maiden addon
88 lines
No EOL
1.9 KiB
C#
88 lines
No EOL
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Server;
|
|
using Server.Accounting;
|
|
using Server.Items;
|
|
|
|
namespace Server.Misc
|
|
{
|
|
public enum GiftResult
|
|
{
|
|
Backpack,
|
|
BankBox
|
|
}
|
|
|
|
public class GiftGiving
|
|
{
|
|
private static List<GiftGiver> m_Givers = new List<GiftGiver>();
|
|
|
|
public static void Register( GiftGiver giver )
|
|
{
|
|
m_Givers.Add( giver );
|
|
}
|
|
|
|
public static void Initialize()
|
|
{
|
|
EventSink.Login += new LoginEventHandler( EventSink_Login );
|
|
}
|
|
|
|
private static void EventSink_Login( LoginEventArgs e )
|
|
{
|
|
Account acct = e.Mobile.Account as Account;
|
|
|
|
if ( acct == null )
|
|
return;
|
|
|
|
DateTime now = DateTime.UtcNow;
|
|
|
|
for ( int i = 0; i < m_Givers.Count; ++i )
|
|
{
|
|
GiftGiver giver = m_Givers[i];
|
|
|
|
if ( now < giver.Start || now >= giver.Finish )
|
|
continue; // not in the correct timefream
|
|
|
|
if ( acct.Created > (giver.Start - giver.MinimumAge) )
|
|
continue; // newly created account
|
|
|
|
if ( acct.LastLogin >= giver.Start )
|
|
continue; // already got one
|
|
|
|
giver.DelayGiveGift( TimeSpan.FromSeconds( 5.0 ), e.Mobile );
|
|
}
|
|
|
|
acct.LastLogin = now;
|
|
}
|
|
}
|
|
|
|
public abstract class GiftGiver
|
|
{
|
|
public virtual TimeSpan MinimumAge{ get{ return TimeSpan.FromDays( 30.0 ); } }
|
|
|
|
public abstract DateTime Start{ get; }
|
|
public abstract DateTime Finish{ get; }
|
|
public abstract void GiveGift( Mobile mob );
|
|
|
|
public virtual void DelayGiveGift( TimeSpan delay, Mobile mob )
|
|
{
|
|
Timer.DelayCall( delay, new TimerStateCallback( DelayGiveGift_Callback ), mob );
|
|
}
|
|
|
|
protected virtual void DelayGiveGift_Callback( object state )
|
|
{
|
|
GiveGift( (Mobile) state );
|
|
}
|
|
|
|
public virtual GiftResult GiveGift( Mobile mob, Item item )
|
|
{
|
|
if ( mob.PlaceInBackpack( item ) )
|
|
{
|
|
if ( !WeightOverloading.IsOverloaded( mob ) )
|
|
return GiftResult.Backpack;
|
|
}
|
|
|
|
mob.BankBox.DropItem( item );
|
|
return GiftResult.BankBox;
|
|
}
|
|
}
|
|
} |