Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
179
Scripts/Services/Factions/Core/FactionItem.cs
Normal file
179
Scripts/Services/Factions/Core/FactionItem.cs
Normal file
@@ -0,0 +1,179 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Factions
|
||||
{
|
||||
public interface IFactionItem
|
||||
{
|
||||
FactionItem FactionItemState { get; set; }
|
||||
}
|
||||
|
||||
public class FactionItem
|
||||
{
|
||||
public static readonly TimeSpan ExpirationPeriod = TimeSpan.FromDays(21.0);
|
||||
private readonly Item m_Item;
|
||||
private readonly Faction m_Faction;
|
||||
private DateTime m_Expiration;
|
||||
private int m_MinRank;
|
||||
|
||||
public FactionItem(Item item, Faction faction, int level)
|
||||
{
|
||||
m_Item = item;
|
||||
m_Faction = faction;
|
||||
m_MinRank = level;
|
||||
}
|
||||
|
||||
public FactionItem(GenericReader reader, Faction faction)
|
||||
{
|
||||
int version = reader.ReadEncodedInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
m_MinRank = reader.ReadInt();
|
||||
goto case 0;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
m_Item = reader.ReadItem();
|
||||
m_Expiration = reader.ReadDateTime();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
m_Faction = faction;
|
||||
}
|
||||
|
||||
public Item Item
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Item;
|
||||
}
|
||||
}
|
||||
public Faction Faction
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Faction;
|
||||
}
|
||||
}
|
||||
public DateTime Expiration
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Expiration;
|
||||
}
|
||||
}
|
||||
public int MinRank
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_MinRank;
|
||||
}
|
||||
}
|
||||
public bool HasExpired
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Item == null || m_Item.Deleted)
|
||||
return true;
|
||||
|
||||
return (m_Expiration != DateTime.MinValue && DateTime.UtcNow >= m_Expiration);
|
||||
}
|
||||
}
|
||||
public static int GetMaxWearables(Mobile mob)
|
||||
{
|
||||
PlayerState pl = PlayerState.Find(mob);
|
||||
|
||||
if (pl == null)
|
||||
return 0;
|
||||
|
||||
if (pl.Faction.IsCommander(mob))
|
||||
return 9;
|
||||
|
||||
return pl.Rank.MaxWearables;
|
||||
}
|
||||
|
||||
public static FactionItem Find(Item item)
|
||||
{
|
||||
if (item is IFactionItem)
|
||||
{
|
||||
FactionItem state = ((IFactionItem)item).FactionItemState;
|
||||
|
||||
if (state != null && state.HasExpired)
|
||||
{
|
||||
state.Detach();
|
||||
state = null;
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Item Imbue(Item item, Faction faction, bool expire, int hue, int MinRank = 0)
|
||||
{
|
||||
if (!(item is IFactionItem))
|
||||
return item;
|
||||
|
||||
FactionItem state = Find(item);
|
||||
|
||||
if (state == null)
|
||||
{
|
||||
state = new FactionItem(item, faction, MinRank);
|
||||
state.Attach();
|
||||
}
|
||||
|
||||
if (expire)
|
||||
state.StartExpiration();
|
||||
|
||||
if (hue >= 0)
|
||||
item.Hue = hue;
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
public void StartExpiration()
|
||||
{
|
||||
m_Expiration = DateTime.UtcNow + ExpirationPeriod;
|
||||
}
|
||||
|
||||
public void CheckAttach()
|
||||
{
|
||||
if (!HasExpired)
|
||||
Attach();
|
||||
else
|
||||
Detach();
|
||||
}
|
||||
|
||||
public void Attach()
|
||||
{
|
||||
if (m_Item is IFactionItem)
|
||||
((IFactionItem)m_Item).FactionItemState = this;
|
||||
|
||||
if (m_Faction != null)
|
||||
m_Faction.State.FactionItems.Add(this);
|
||||
}
|
||||
|
||||
public void Detach()
|
||||
{
|
||||
if (m_Item is IFactionItem)
|
||||
((IFactionItem)m_Item).FactionItemState = null;
|
||||
|
||||
if (m_Faction != null && m_Faction.State.FactionItems.Contains(this))
|
||||
m_Faction.State.FactionItems.Remove(this);
|
||||
}
|
||||
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.WriteEncodedInt((int)1);
|
||||
|
||||
writer.Write(m_MinRank);
|
||||
|
||||
writer.Write((Item)m_Item);
|
||||
writer.Write((DateTime)m_Expiration);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user