Core/Players: Implemented new talent system

Port From (https://github.com/TrinityCore/TrinityCore/commit/0cc5ab8372f19dad7412038d52dcd39db5e0e171)
This commit is contained in:
hondacrx
2023-01-04 02:50:40 -05:00
parent 0bfc448595
commit 55da7dc549
24 changed files with 3168 additions and 532 deletions
@@ -141,7 +141,7 @@ namespace Game.Entities
public bool HasValue() { return _hasValue; }
}
public class UpdateFieldArray<T> where T : new()
{
public T[] _values;
@@ -437,6 +437,12 @@ namespace Game.Entities
return updateField;
}
public UpdateFieldString ModifyValue(UpdateFieldString updateField)
{
MarkChanged(updateField);
return updateField;
}
public ref U ModifyValue<U>(UpdateFieldArray<U> updateField, int index) where U : new()
{
MarkChanged(updateField, index);
@@ -472,6 +478,12 @@ namespace Game.Entities
_changesMask.Set(updateField.Bit);
}
public void MarkChanged(UpdateFieldString updateField)
{
_changesMask.Set(updateField.BlockBit);
_changesMask.Set(updateField.Bit);
}
public void MarkChanged<U>(UpdateFieldArray<U> updateField, int index) where U : new()
{
_changesMask.Set(updateField.Bit);
+2 -2
View File
@@ -824,7 +824,7 @@ namespace Game.Entities
public abstract void BuildValuesCreate(WorldPacket data, Player target);
public abstract void BuildValuesUpdate(WorldPacket data, Player target);
public void SetUpdateFieldValue<T>(IUpdateField<T> updateField, T newValue) where T : new()
public void SetUpdateFieldValue<T>(IUpdateField<T> updateField, T newValue)
{
if (!newValue.Equals(updateField.GetValue()))
{
@@ -863,7 +863,7 @@ namespace Game.Entities
SetUpdateFieldValue(ref value, (T)(value | (dynamic)flag));
}
public void RemoveUpdateFieldFlagValue<T>(IUpdateField<T> updateField, T flag) where T : new()
public void RemoveUpdateFieldFlagValue<T>(IUpdateField<T> updateField, T flag)
{
//static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types");
SetUpdateFieldValue(updateField, (T)(updateField.GetValue() & ~(dynamic)flag));