mirror of
https://github.com/ServUO/ServUO
synced 2026-08-11 20:23:04 -04:00
267 lines
No EOL
7.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |