Core: Updated to 11.0.7
Port From (https://github.com/TrinityCore/TrinityCore/commit/4f7079f471401d5cf7885351baabc027813f60f5)
This commit is contained in:
@@ -2576,10 +2576,10 @@ namespace Game.Entities
|
||||
public void SetItemFlag(ItemFieldFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.DynamicFlags), (uint)flags); }
|
||||
public void RemoveItemFlag(ItemFieldFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.DynamicFlags), (uint)flags); }
|
||||
public void ReplaceAllItemFlags(ItemFieldFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.DynamicFlags), (uint)flags); }
|
||||
public bool HasItemFlag2(ItemFieldFlags2 flag) { return (m_itemData.DynamicFlags2 & (uint)flag) != 0; }
|
||||
public void SetItemFlag2(ItemFieldFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.DynamicFlags2), (uint)flags); }
|
||||
public void RemoveItemFlag2(ItemFieldFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.DynamicFlags2), (uint)flags); }
|
||||
public void ReplaceAllItemFlags2(ItemFieldFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.DynamicFlags2), (uint)flags); }
|
||||
public bool HasItemZoneFlag(ItemZoneFlags flag) { return (m_itemData.ZoneFlags & (uint)flag) != 0; }
|
||||
public void SetItemZoneFlag(ItemZoneFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ZoneFlags), (uint)flags); }
|
||||
public void RemoveItemZoneFlag(ItemZoneFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ZoneFlags), (uint)flags); }
|
||||
public void ReplaceAllItemZoneFlags(ItemZoneFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ZoneFlags), (uint)flags); }
|
||||
|
||||
public Bag ToBag() { return IsBag() ? this as Bag : null; }
|
||||
public AzeriteItem ToAzeriteItem() { return IsAzeriteItem() ? this as AzeriteItem : null; }
|
||||
|
||||
@@ -396,7 +396,7 @@ namespace Game.Entities
|
||||
public UpdateField<ulong> ArtifactXP = new(0, 15);
|
||||
public UpdateField<byte> ItemAppearanceModID = new(0, 16);
|
||||
public UpdateField<ItemModList> Modifiers = new(0, 17);
|
||||
public UpdateField<uint> DynamicFlags2 = new(0, 18);
|
||||
public UpdateField<uint> ZoneFlags = new(0, 18);
|
||||
public UpdateField<ItemBonusKey> ItemBonusKey = new(0, 19);
|
||||
public UpdateField<ushort> DEBUGItemLevel = new(0, 20);
|
||||
public UpdateFieldArray<int> SpellCharges = new(5, 21, 22);
|
||||
@@ -441,7 +441,7 @@ namespace Game.Entities
|
||||
data.WriteInt32(Gems.Size());
|
||||
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner))
|
||||
{
|
||||
data.WriteUInt32(DynamicFlags2);
|
||||
data.WriteUInt32(ZoneFlags);
|
||||
}
|
||||
ItemBonusKey.GetValue().Write(data);
|
||||
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner))
|
||||
@@ -584,7 +584,7 @@ namespace Game.Entities
|
||||
}
|
||||
if (changesMask[18])
|
||||
{
|
||||
data.WriteUInt32(DynamicFlags2);
|
||||
data.WriteUInt32(ZoneFlags);
|
||||
}
|
||||
if (changesMask[19])
|
||||
{
|
||||
@@ -640,7 +640,7 @@ namespace Game.Entities
|
||||
ClearChangesMask(ArtifactXP);
|
||||
ClearChangesMask(ItemAppearanceModID);
|
||||
ClearChangesMask(Modifiers);
|
||||
ClearChangesMask(DynamicFlags2);
|
||||
ClearChangesMask(ZoneFlags);
|
||||
ClearChangesMask(ItemBonusKey);
|
||||
ClearChangesMask(DEBUGItemLevel);
|
||||
ClearChangesMask(SpellCharges);
|
||||
@@ -4208,17 +4208,14 @@ namespace Game.Entities
|
||||
public class QuestSession : HasChangesMask
|
||||
{
|
||||
public UpdateField<ObjectGuid> Owner = new(0, 1);
|
||||
public UpdateFieldArray<ulong> QuestCompleted = new(1000, 2, 3);
|
||||
public UpdateField<BitVector> QuestCompleted = new(0, 2);
|
||||
|
||||
public QuestSession() : base(1003) { }
|
||||
public QuestSession() : base(3) { }
|
||||
|
||||
public void WriteCreate(WorldPacket data, Player owner, Player receiver)
|
||||
{
|
||||
data.WritePackedGuid(Owner);
|
||||
for (int i = 0; i < 1000; ++i)
|
||||
{
|
||||
data.WriteUInt64(QuestCompleted[i]);
|
||||
}
|
||||
QuestCompleted.GetValue().WriteCreate(data, owner, receiver);
|
||||
}
|
||||
|
||||
public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver)
|
||||
@@ -4227,10 +4224,7 @@ namespace Game.Entities
|
||||
if (ignoreChangesMask)
|
||||
changesMask.SetAll();
|
||||
|
||||
data.WriteBits(changesMask.GetBlocksMask(0), 32);
|
||||
for (uint i = 0; i < 32; ++i)
|
||||
if (changesMask.GetBlock(i) != 0)
|
||||
data.WriteBits(changesMask.GetBlock(i), 32);
|
||||
data.WriteBits(changesMask.GetBlock(0), 3);
|
||||
|
||||
data.FlushBits();
|
||||
if (changesMask[0])
|
||||
@@ -4239,15 +4233,10 @@ namespace Game.Entities
|
||||
{
|
||||
data.WritePackedGuid(Owner);
|
||||
}
|
||||
}
|
||||
if (changesMask[2])
|
||||
{
|
||||
for (int i = 0; i < 1000; ++i)
|
||||
|
||||
if (changesMask[2])
|
||||
{
|
||||
if (changesMask[3 + i])
|
||||
{
|
||||
data.WriteUInt64(QuestCompleted[i]);
|
||||
}
|
||||
QuestCompleted.GetValue().WriteUpdate(data, ignoreChangesMask, owner, receiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1508,7 +1508,7 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
pItem.SetItemFlag2(ItemFieldFlags2.Equipped);
|
||||
pItem.SetItemZoneFlag(ItemZoneFlags.Equipped);
|
||||
|
||||
if (IsInWorld && update)
|
||||
{
|
||||
@@ -1681,7 +1681,7 @@ namespace Game.Entities
|
||||
byte slot = (byte)(pos & 255);
|
||||
VisualizeItem(slot, pItem);
|
||||
|
||||
pItem.SetItemFlag2(ItemFieldFlags2.Equipped);
|
||||
pItem.SetItemZoneFlag(ItemZoneFlags.Equipped);
|
||||
|
||||
if (IsInWorld)
|
||||
{
|
||||
@@ -1792,7 +1792,7 @@ namespace Game.Entities
|
||||
|
||||
_ApplyItemMods(pItem, slot, false, update);
|
||||
|
||||
pItem.RemoveItemFlag2(ItemFieldFlags2.Equipped);
|
||||
pItem.RemoveItemZoneFlag(ItemZoneFlags.Equipped);
|
||||
|
||||
// remove item dependent auras and casts (only weapon and armor slots)
|
||||
if (slot < ProfessionSlots.End)
|
||||
|
||||
@@ -2420,15 +2420,22 @@ namespace Game.Entities
|
||||
if (questBit == 0)
|
||||
return;
|
||||
|
||||
uint fieldOffset = (uint)((questBit - 1) / ActivePlayerData.QuestCompletedBitsPerBlock);
|
||||
if (fieldOffset >= ActivePlayerData.QuestCompletedBitsSize)
|
||||
return;
|
||||
|
||||
int fieldOffset = (int)((questBit - 1) / ActivePlayerData.QuestCompletedBitsPerBlock);
|
||||
ulong flag = 1ul << (((int)questBit - 1) % ActivePlayerData.QuestCompletedBitsPerBlock);
|
||||
if (fieldOffset < ActivePlayerData.QuestCompletedBitsSize)
|
||||
{
|
||||
if (completed)
|
||||
SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted,fieldOffset), flag);
|
||||
else
|
||||
RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted, fieldOffset), flag);
|
||||
}
|
||||
|
||||
BitVectors bitVectors = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.BitVectors);
|
||||
BitVector bitVector = bitVectors.ModifyValue(bitVectors.Values, (int)PlayerDataFlag.CharacterQuestCompletedIndex);
|
||||
if (completed)
|
||||
SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted, (int)fieldOffset), flag);
|
||||
SetUpdateFieldFlagValue(bitVector.ModifyValue(bitVector.Values, fieldOffset), flag);
|
||||
else
|
||||
RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted, (int)fieldOffset), flag);
|
||||
RemoveUpdateFieldFlagValue(bitVector.ModifyValue(bitVector.Values, fieldOffset), flag);
|
||||
}
|
||||
|
||||
public void AreaExploredOrEventHappens(uint questId)
|
||||
@@ -2857,7 +2864,8 @@ namespace Game.Entities
|
||||
return objective;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
}
|
||||
;
|
||||
|
||||
QuestObjective objective = findObjectiveForItem((int)itemId);
|
||||
if (objective != null)
|
||||
@@ -2892,7 +2900,8 @@ namespace Game.Entities
|
||||
return true;
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
;
|
||||
|
||||
bool hasObjectiveTypeForCurrency(QuestObjectiveType type) => m_questObjectiveStatus.LookupByKey((type, currencyId)).Any(isCompletableObjective);
|
||||
if (hasObjectiveTypeForCurrency(QuestObjectiveType.Currency))
|
||||
|
||||
@@ -21,6 +21,11 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdateHealth(VignetteData vignette, Unit owner)
|
||||
{
|
||||
vignette.HealthPercent = (float)(owner.GetHealth()) / (float)(owner.GetMaxHealth()); // converted to percentage in lua
|
||||
}
|
||||
|
||||
public static void SendVignetteUpdate(VignetteData vignette, WorldObject owner)
|
||||
{
|
||||
if (!owner.IsInWorld)
|
||||
@@ -72,6 +77,9 @@ namespace Game.Entities
|
||||
vignette.Data = vignetteData;
|
||||
vignette.ZoneID = owner.GetZoneId(); // not updateable
|
||||
UpdatePosition(vignette, owner);
|
||||
Unit unitOwner = owner.ToUnit();
|
||||
if (unitOwner != null)
|
||||
UpdateHealth(vignette, unitOwner);
|
||||
|
||||
if (vignetteData.IsInfiniteAOI())
|
||||
owner.GetMap().AddInfiniteAOIVignette(vignette);
|
||||
@@ -84,6 +92,9 @@ namespace Game.Entities
|
||||
public static void Update(VignetteData vignette, WorldObject owner)
|
||||
{
|
||||
UpdatePosition(vignette, owner);
|
||||
Unit unitOwner = owner.ToUnit();
|
||||
if (unitOwner != null)
|
||||
UpdateHealth(vignette, unitOwner);
|
||||
|
||||
if (vignette.Data.IsInfiniteAOI())
|
||||
vignette.NeedUpdate = true;
|
||||
@@ -129,6 +140,7 @@ namespace Game.Entities
|
||||
public uint ZoneID;
|
||||
public uint WMOGroupID;
|
||||
public uint WMODoodadPlacementID;
|
||||
public float HealthPercent = 1.0f;
|
||||
public bool NeedUpdate;
|
||||
|
||||
public void FillPacket(VignetteDataSet dataSet)
|
||||
@@ -142,6 +154,7 @@ namespace Game.Entities
|
||||
data.ZoneID = ZoneID;
|
||||
data.WMOGroupID = WMOGroupID;
|
||||
data.WMODoodadPlacementID = WMODoodadPlacementID;
|
||||
data.HealthPercent = HealthPercent;
|
||||
|
||||
dataSet.Data.Add(data);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user