Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Stages faction code for serialization conversion #1835

Merged
merged 1 commit into from
Jun 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
761 changes: 380 additions & 381 deletions Projects/UOContent/Engines/Factions/Core/Election.cs

Large diffs are not rendered by default.

2,150 changes: 1,062 additions & 1,088 deletions Projects/UOContent/Engines/Factions/Core/Faction.cs

Large diffs are not rendered by default.

209 changes: 104 additions & 105 deletions Projects/UOContent/Engines/Factions/Core/FactionItem.cs
Original file line number Diff line number Diff line change
@@ -1,154 +1,153 @@
using System;

namespace Server.Factions
namespace Server.Factions;

public interface IFactionItem
{
public interface IFactionItem
FactionItem FactionItemState { get; set; }
}

public class FactionItem
{
public static readonly TimeSpan ExpirationPeriod = TimeSpan.FromDays(21.0);

public FactionItem(Item item, Faction faction)
{
FactionItem FactionItemState { get; set; }
Item = item;
Faction = faction;
}

public class FactionItem
public FactionItem(IGenericReader reader, Faction faction)
{
public static readonly TimeSpan ExpirationPeriod = TimeSpan.FromDays(21.0);
var version = reader.ReadEncodedInt();

public FactionItem(Item item, Faction faction)
switch (version)
{
Item = item;
Faction = faction;
case 0:
{
Item = reader.ReadEntity<Item>();
Expiration = reader.ReadDateTime();
break;
}
}

public FactionItem(IGenericReader reader, Faction faction)
{
var version = reader.ReadEncodedInt();

switch (version)
{
case 0:
{
Item = reader.ReadEntity<Item>();
Expiration = reader.ReadDateTime();
break;
}
}

Faction = faction;
}
Faction = faction;
}

public Item Item { get; }
public Item Item { get; }

public Faction Faction { get; }
public Faction Faction { get; }

public DateTime Expiration { get; private set; }
public DateTime Expiration { get; private set; }

public bool HasExpired
public bool HasExpired
{
get
{
get
if (Item?.Deleted != false)
{
if (Item?.Deleted != false)
{
return true;
}

return Expiration != DateTime.MinValue && Core.Now >= Expiration;
return true;
}
}

public void StartExpiration()
{
Expiration = Core.Now + ExpirationPeriod;
return Expiration != DateTime.MinValue && Core.Now >= Expiration;
}
}

public void StartExpiration()
{
Expiration = Core.Now + ExpirationPeriod;
}

public void CheckAttach()
public void CheckAttach()
{
if (!HasExpired)
{
if (!HasExpired)
{
Attach();
}
else
{
Detach();
}
Attach();
}

public void Attach()
else
{
if (Item is IFactionItem item)
{
item.FactionItemState = this;
}

Faction?.State.FactionItems.Add(this);
Detach();
}
}

public void Detach()
public void Attach()
{
if (Item is IFactionItem item)
{
if (Item is IFactionItem item)
{
item.FactionItemState = null;
}

if (Faction?.State.FactionItems.Contains(this) == true)
{
Faction.State.FactionItems.Remove(this);
}
item.FactionItemState = this;
}

public void Serialize(IGenericWriter writer)
{
writer.WriteEncodedInt(0);
Faction?.State.FactionItems.Add(this);
}

writer.Write(Item);
writer.Write(Expiration);
public void Detach()
{
if (Item is IFactionItem item)
{
item.FactionItemState = null;
}

public static int GetMaxWearables(Mobile mob)
if (Faction?.State.FactionItems.Contains(this) == true)
{
var pl = PlayerState.Find(mob);

return pl == null ? 0 :
pl.Faction.IsCommander(mob) ? 9 : pl.Rank.MaxWearables;
Faction.State.FactionItems.Remove(this);
}
}

public static FactionItem Find(Item item)
{
if (item is IFactionItem factionItem)
{
var state = factionItem.FactionItemState;
public void Serialize(IGenericWriter writer)
{
writer.WriteEncodedInt(0);

if (state?.HasExpired == true)
{
state.Detach();
state = null;
}
writer.Write(Item);
writer.Write(Expiration);
}

return state;
}
public static int GetMaxWearables(Mobile mob)
{
var pl = PlayerState.Find(mob);

return null;
}
return pl == null ? 0 :
pl.Faction.IsCommander(mob) ? 9 : pl.Rank.MaxWearables;
}

public static Item Imbue(Item item, Faction faction, bool expire, int hue)
public static FactionItem Find(Item item)
{
if (item is IFactionItem factionItem)
{
if (item is not IFactionItem)
{
return item;
}

var state = Find(item);
var state = factionItem.FactionItemState;

if (state == null)
if (state?.HasExpired == true)
{
state = new FactionItem(item, faction);
state.Attach();
state.Detach();
state = null;
}

if (expire)
{
state.StartExpiration();
}
return state;
}

return null;
}

item.Hue = hue;
public static Item Imbue(Item item, Faction faction, bool expire, int hue)
{
if (item is not IFactionItem)
{
return item;
}

var state = Find(item);

if (state == null)
{
state = new FactionItem(item, faction);
state.Attach();
}

if (expire)
{
state.StartExpiration();
}

item.Hue = hue;
return item;
}
}
Loading
Loading