servuo/Scripts/Custom Systems/VIP System/Core/VIPModule.cs
2013-10-28 07:09:42 +00:00

267 lines
No EOL
7.4 KiB
C#

using System;
using Server;
using Server.Gumps;
namespace CustomsFramework.Systems.VIPSystem
{
public enum VIPTier
{
None,
Bronze,
Silver,
Gold
}
public class VIPModule : BaseModule
{
private bool _Canceled;
private DateTime _TimeStarted;
private TimeSpan _ServicePeriod;
private VIPTier _Tier;
private Bonuses _Bonuses;
public VIPModule(Mobile from, BaseVIPDeed deed)
: base()
{
this._Canceled = false;
this._TimeStarted = DateTime.MinValue;
this._ServicePeriod = TimeSpan.Zero;
if (deed != null)
{
this._Tier = deed.Tier;
this._Bonuses = deed.Bonuses;
}
this.LinkMobile(from);
}
public VIPModule(CustomSerial serial)
: base(serial)
{
}
public override string Name
{
get
{
if (this.LinkedMobile != null)
return String.Format(@"VIP Module - {0}", this.LinkedMobile.Name);
else
return @"Unlinked VIP Module";
}
}
public override string Description
{
get
{
if (this.LinkedMobile != null)
return String.Format(@"VIP Module that is linked to {0}, was linked on {1}, and expires on {2}", this.LinkedMobile.Name, 0, 0);
else
return @"Unlinked VIP Module";
}
}
public override string Version
{
get
{
return VIPCore.SystemVersion;
}
}
public override AccessLevel EditLevel
{
get
{
return AccessLevel.Developer;
}
}
public override Gump SettingsGump
{
get
{
return base.SettingsGump; // TODO: Create a settings gump.
}
}
[CommandProperty(AccessLevel.Developer)]
public bool Canceled
{
get
{
return this._Canceled;
}
set
{
this._Canceled = value;
}
}
[CommandProperty(AccessLevel.Developer)]
public DateTime TimeStarted
{
get
{
return this._TimeStarted;
}
set
{
this._TimeStarted = value;
}
}
[CommandProperty(AccessLevel.Developer)]
public TimeSpan ServicePeriod
{
get
{
return this._ServicePeriod;
}
set
{
this._ServicePeriod = value;
}
}
[CommandProperty(AccessLevel.Developer)]
public VIPTier Tier
{
get
{
return this._Tier;
}
set
{
this._Tier = value;
this.SetTier(value);
}
}
[CommandProperty(AccessLevel.Developer)]
public Bonuses Bonuses
{
get
{
return this._Bonuses;
}
set
{
this._Bonuses = value;
}
}
public void SetTier(VIPTier tier)
{
if (tier == VIPTier.None)
{
foreach (Bonus bonus in this._Bonuses)
{
bonus.Enabled = false;
}
}
else if (tier == VIPTier.Bronze)
{
this._Bonuses[0].Enabled = true;
this._Bonuses[1].Enabled = true;
this._Bonuses[2].Enabled = true;
this._Bonuses[3].Enabled = true;
this._Bonuses[4].Enabled = true;
}
else if (tier == VIPTier.Silver)
{
this._Bonuses[5].Enabled = true;
this._Bonuses[6].Enabled = true;
this._Bonuses[7].Enabled = true;
this._Bonuses[8].Enabled = true;
this._Bonuses[9].Enabled = true;
}
else if (tier == VIPTier.Gold)
{
this._Bonuses[10].Enabled = true;
this._Bonuses[11].Enabled = true;
this._Bonuses[12].Enabled = true;
this._Bonuses[13].Enabled = true;
this._Bonuses[14].Enabled = true;
}
}
public override void Prep()
{
base.Prep();
this.Check();
}
public void Check()
{
if (!this.LinkedMobile.Deleted || this.LinkedMobile != null)
{
switch (this._Tier)
{
case VIPTier.None:
{
foreach (Bonus bonus in this._Bonuses)
{
if (bonus.TimeStarted + bonus.ServicePeriod >= DateTime.UtcNow)
{
bonus.Enabled = false;
bonus.ServicePeriod = TimeSpan.Zero;
bonus.TimeStarted = DateTime.MinValue;
}
}
break;
}
case VIPTier.Bronze:
{
if (this._TimeStarted + this._ServicePeriod >= DateTime.UtcNow)
{
this._TimeStarted = DateTime.MinValue;
this._ServicePeriod = TimeSpan.Zero;
}
this._Canceled = true;
this.LinkedMobile.AccessLevel = AccessLevel.Player;
goto case VIPTier.None;
}
case VIPTier.Silver:
{
goto case VIPTier.Bronze;
}
case VIPTier.Gold:
{
goto case VIPTier.Bronze;
}
}
}
else
{
this._Canceled = true;
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
Utilities.WriteVersion(writer, 0);
// Version 0
writer.Write(this._Canceled);
writer.Write(this._TimeStarted);
writer.Write(this._ServicePeriod);
this._Bonuses.Serialize(writer);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
this._Canceled = reader.ReadBool();
this._TimeStarted = reader.ReadDateTime();
this._ServicePeriod = reader.ReadTimeSpan();
this._Bonuses = new Bonuses(reader);
break;
}
}
}
}
}