feat: Adds SerializableFieldChanged option (#2324)

This commit is contained in:
Kamron Batman 2026-02-01 21:28:26 -08:00 committed by GitHub
parent 06bb2f552e
commit fd2f90cba9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 62 additions and 122 deletions

View file

@ -1,6 +1,6 @@
/*************************************************************************
* ModernUO *
* Copyright 2019-2023 - ModernUO Development Team *
* Copyright 2019-2026 - ModernUO Development Team *
* Email: hi@modernuo.com *
* File: ResistanceMod.cs *
* *
@ -13,6 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
using System.Runtime.CompilerServices;
using ModernUO.Serialization;
namespace Server;
@ -20,6 +21,20 @@ namespace Server;
[SerializationGenerator(0)]
public partial class ResistanceMod : MobileMod
{
[SerializableField(0)]
private ResistanceType _type;
[SerializableFieldChanged(0)]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void OnTypeChanged(ResistanceType oldValue, ResistanceType newValue) => Owner?.UpdateResistances();
[SerializableField(1)]
private int _offset;
[SerializableFieldChanged(1)]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void OnOffsetChanged(int oldValue, int newValue) => Owner?.UpdateResistances();
public ResistanceMod(Mobile owner) : base(owner)
{
}
@ -29,36 +44,4 @@ public partial class ResistanceMod : MobileMod
_type = type;
_offset = offset;
}
[SerializableProperty(0)]
public ResistanceType Type
{
get => _type;
set
{
if (_type != value)
{
_type = value;
Owner?.UpdateResistances();
MarkDirty();
}
}
}
[SerializableProperty(1)]
public int Offset
{
get => _offset;
set
{
if (_offset != value)
{
_offset = value;
Owner?.UpdateResistances();
MarkDirty();
}
}
}
}

View file

@ -1,6 +1,6 @@
/*************************************************************************
* ModernUO *
* Copyright 2019-2023 - ModernUO Development Team *
* Copyright 2019-2026 - ModernUO Development Team *
* Email: hi@modernuo.com *
* File: SkillMod.cs *
* *
@ -21,6 +21,35 @@ namespace Server;
[SerializationGenerator(0)]
public abstract partial class SkillMod : MobileMod
{
[SerializableField(0)]
private bool _obeyCap;
[SerializableFieldChanged(0)]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void OnObeCapChanged(bool oldValue, bool newValue) => Owner?.Skills[_skill]?.Update();
[SerializableField(1)]
private SkillName _skill;
[SerializableFieldChanged(1)]
private void OnSkillChanged(SkillName oldValue, SkillName newValue)
{
Owner?.Skills[newValue]?.Update();
Owner?.Skills[oldValue]?.Update();
}
[SerializableField(2)]
private bool _relative;
[SerializableFieldChanged(2)]
private void OnRelativeChanged(bool oldValue, bool newValue) => Owner?.Skills[_skill]?.Update();
[SerializableField(3)]
private double _value;
[SerializableFieldChanged(3)]
private void OnValueChanged(double oldValue, double newValue) => Owner?.Skills[_skill]?.Update();
public SkillMod(Mobile owner) : base(owner)
{
}
@ -32,80 +61,12 @@ public abstract partial class SkillMod : MobileMod
_value = value;
}
[SerializableProperty(0)]
public bool ObeyCap
{
get => _obeyCap;
set
{
_obeyCap = value;
var sk = Owner?.Skills[_skill];
sk?.Update();
MarkDirty();
}
}
[SerializableProperty(1)]
public SkillName Skill
{
get => _skill;
set
{
if (_skill != value)
{
var oldUpdate = Owner?.Skills[_skill];
_skill = value;
var sk = Owner?.Skills[_skill];
sk?.Update();
oldUpdate?.Update();
MarkDirty();
}
}
}
[SerializableProperty(2)]
public bool Relative
{
get => _relative;
set
{
if (_relative != value)
{
_relative = value;
var sk = Owner?.Skills[_skill];
sk?.Update();
MarkDirty();
}
}
}
public bool Absolute
{
get => !Relative;
set => Relative = !value;
}
[SerializableProperty(3)]
public double Value
{
get => _value;
set
{
if (_value != value)
{
_value = value;
var sk = Owner?.Skills[_skill];
sk?.Update();
MarkDirty();
}
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Remove() => Owner?.RemoveSkillMod(this);

View file

@ -39,8 +39,8 @@
<PackageReference Include="LibDeflate.Bindings" Version="1.0.2.120" />
<PackageReference Include="System.IO.Hashing" Version="10.0.2" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.14.0" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.14.1" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.14.2" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.14.2" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Migrations/*.v*.json" />

View file

@ -1,3 +1,4 @@
using System.Runtime.CompilerServices;
using ModernUO.Serialization;
namespace Server.Items
@ -51,6 +52,16 @@ namespace Server.Items
[SerializationGenerator(2, false)]
public partial class ThighBoots : BaseShoes, IArcaneEquip
{
[EncodedInt]
[InvalidateProperties]
[SerializableField(0)]
[SerializedCommandProperty(AccessLevel.GameMaster)]
private int _curArcaneCharges;
[SerializableFieldChanged(0)]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void OnCurArcaneChargesChanged(int oldValue, int newValue) => Update();
[Constructible]
public ThighBoots(int hue = 0) : base(0x1711, hue)
{
@ -60,21 +71,6 @@ namespace Server.Items
public override CraftResource DefaultResource => CraftResource.RegularLeather;
[EncodedInt]
[SerializableProperty(0)]
[CommandProperty(AccessLevel.GameMaster)]
public int CurArcaneCharges
{
get => _curArcaneCharges;
set
{
_curArcaneCharges = value;
InvalidateProperties();
Update();
this.MarkDirty();
}
}
[EncodedInt]
[SerializableProperty(1)]
[CommandProperty(AccessLevel.GameMaster)]

View file

@ -47,8 +47,8 @@
<PackageReference Include="ModernUO.CodeGeneratedEvents.Generator" Version="1.0.3.2" PrivateAssets="all" />
<PackageReference Include="Zstd.Binaries" Version="1.6.0" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.14.0" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.14.1" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.14.2" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.14.2" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Migrations/*.v*.json" />