Core: Updated to 11.0.2

Port From (https://github.com/TrinityCore/TrinityCore/commit/df1ec76d54db3a91759fc93f4d6b6828d4ec0f59)
This commit is contained in:
Hondacrx
2024-09-08 15:09:30 -04:00
parent ad461858ca
commit 6bdb8a6c70
28 changed files with 1761 additions and 1712 deletions
+2
View File
@@ -564,6 +564,7 @@ namespace Game.Misc
offer.QuestID = quest.Id;
offer.AutoLaunched = autoLaunched;
offer.ResetByScheduler = quest.IsResetByScheduler();
offer.SuggestedPartyMembers = quest.SuggestedPlayers;
offer.QuestInfoID = (int)quest.QuestInfoID;
@@ -670,6 +671,7 @@ namespace Game.Misc
}
packet.AutoLaunched = autoLaunched;
packet.ResetByScheduler = quest.IsResetByScheduler();
_session.SendPacket(packet);
}
@@ -195,6 +195,16 @@ namespace Game.Entities
public int GetSize() { return _values.Length; }
public T First(Func<T, bool> predicate)
{
return _values.First(predicate);
}
public int IndexOf(T value)
{
return Array.IndexOf(_values, value);
}
public IEnumerator<T> GetEnumerator()
{
foreach (var obj in _values)
@@ -2657,6 +2657,49 @@ namespace Game.Entities
}
}
public class ZonePlayerForcedReaction : HasChangesMask
{
public UpdateField<int> FactionID = new(0, 1);
public UpdateField<int> Reaction = new(0, 2);
public ZonePlayerForcedReaction() : base(3) { }
public void WriteCreate(WorldPacket data, Player owner, Player receiver)
{
data.WriteInt32(FactionID);
data.WriteInt32(Reaction);
}
public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver)
{
UpdateMask changesMask = _changesMask;
if (ignoreChangesMask)
changesMask.SetAll();
data.WriteBits(changesMask.GetBlock(0), 3);
data.FlushBits();
if (changesMask[0])
{
if (changesMask[1])
{
data.WriteInt32(FactionID);
}
if (changesMask[2])
{
data.WriteInt32(Reaction);
}
}
}
public override void ClearChangesMask()
{
ClearChangesMask(FactionID);
ClearChangesMask(Reaction);
_changesMask.ResetAll();
}
}
public class PetCreatureName : HasChangesMask
{
public UpdateField<uint> CreatureID = new(0, 1);
@@ -2901,10 +2944,11 @@ namespace Game.Entities
public UpdateFieldArray<QuestLog> QuestLog = new(175, 49, 50);
public UpdateFieldArray<VisibleItem> VisibleItems = new(19, 225, 226);
public UpdateFieldArray<float> AvgItemLevel = new(6, 245, 246);
public UpdateFieldArray<ItemInstance> VisibleEquipableSpells = new(16, 252, 253);
public UpdateFieldArray<uint> Field_3120 = new(19, 269, 270);
public UpdateFieldArray<ZonePlayerForcedReaction> ForcedReactions = new(32, 252, 253);
public UpdateFieldArray<ItemInstance> VisibleEquipableSpells = new(16, 285, 286);
public UpdateFieldArray<uint> Field_3120 = new(19, 302, 303);
public PlayerData() : base(0, TypeId.Player, 289) { }
public PlayerData() : base(0, TypeId.Player, 322) { }
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
{
@@ -2954,6 +2998,10 @@ namespace Game.Entities
data.WriteUInt32(HonorLevel);
data.WriteInt64(LogoutTime);
data.WriteInt32(ArenaCooldowns.Size());
for (int i = 0; i < 32; ++i)
{
ForcedReactions[i].WriteCreate(data, owner, receiver);
}
data.WriteInt32(Field_1AC);
data.WriteInt32(Field_1B0);
data.WriteInt32(CurrentBattlePetSpeciesID);
@@ -3019,7 +3067,7 @@ namespace Game.Entities
public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
{
UpdateMask allowedMaskForTarget = new(289, [0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0x00000001u]);
UpdateMask allowedMaskForTarget = new(322, [0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000003u]);
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -3027,20 +3075,20 @@ namespace Game.Entities
public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember))
allowedMaskForTarget.OR(new UpdateMask(289, [0x00000022u, 0xFFFE0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u, 0x00000000u, 0x00000000u]));
allowedMaskForTarget.OR(new UpdateMask(322, [0x00000022u, 0xFFFE0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u]));
}
public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags)
{
UpdateMask allowedMaskForTarget = new(289, [0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0x00000001u]);
UpdateMask allowedMaskForTarget = new(322, [0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000003u]);
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask.AND(allowedMaskForTarget);
}
public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver)
{
data.WriteBits(changesMask.GetBlocksMask(0), 10);
for (uint i = 0; i < 10; ++i)
data.WriteBits(changesMask.GetBlocksMask(0), 11);
for (uint i = 0; i < 11; ++i)
if (changesMask.GetBlock(i) != 0)
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -3364,21 +3412,31 @@ namespace Game.Entities
}
}
}
if (changesMask[269])
if (changesMask[252])
{
for (int i = 0; i < 32; ++i)
{
if (changesMask[253 + i])
{
ForcedReactions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
if (changesMask[302])
{
for (int i = 0; i < 19; ++i)
{
if (changesMask[270 + i])
if (changesMask[303 + i])
{
data.WriteUInt32(Field_3120[i]);
}
}
}
if (changesMask[252])
if (changesMask[285])
{
for (int i = 0; i < 16; ++i)
{
if (changesMask[253 + i])
if (changesMask[286 + i])
{
VisibleEquipableSpells[i].Write(data);
}
@@ -3437,6 +3495,7 @@ namespace Game.Entities
ClearChangesMask(QuestLog);
ClearChangesMask(VisibleItems);
ClearChangesMask(AvgItemLevel);
ClearChangesMask(ForcedReactions);
ClearChangesMask(VisibleEquipableSpells);
ClearChangesMask(Field_3120);
_changesMask.ResetAll();
@@ -5010,19 +5069,19 @@ namespace Game.Entities
public class NPCCraftingOrderInfo : HasChangesMask
{
public UpdateField<ulong> Field_0 = new(-1, 0);
public UpdateField<int> Field_8 = new(-1, 1);
public UpdateField<int> Field_C = new(-1, 2);
public UpdateField<int> Field_10 = new(-1, 3);
public UpdateField<ulong> OrderID = new(-1, 0);
public UpdateField<int> NpcCraftingOrderSetID = new(-1, 1);
public UpdateField<int> NpcTreasureID = new(-1, 2);
public UpdateField<int> NpcCraftingOrderCustomerID = new(-1, 3);
public NPCCraftingOrderInfo() : base(4) { }
public void WriteCreate(WorldPacket data, Player owner, Player receiver)
{
data.WriteUInt64(Field_0);
data.WriteInt32(Field_8);
data.WriteInt32(Field_C);
data.WriteInt32(Field_10);
data.WriteUInt64(OrderID);
data.WriteInt32(NpcCraftingOrderSetID);
data.WriteInt32(NpcTreasureID);
data.WriteInt32(NpcCraftingOrderCustomerID);
}
public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver)
@@ -5036,28 +5095,28 @@ namespace Game.Entities
data.FlushBits();
if (changesMask[0])
{
data.WriteUInt64(Field_0);
data.WriteUInt64(OrderID);
}
if (changesMask[1])
{
data.WriteInt32(Field_8);
data.WriteInt32(NpcCraftingOrderSetID);
}
if (changesMask[2])
{
data.WriteInt32(Field_C);
data.WriteInt32(NpcTreasureID);
}
if (changesMask[3])
{
data.WriteInt32(Field_10);
data.WriteInt32(NpcCraftingOrderCustomerID);
}
}
public override void ClearChangesMask()
{
ClearChangesMask(Field_0);
ClearChangesMask(Field_8);
ClearChangesMask(Field_C);
ClearChangesMask(Field_10);
ClearChangesMask(OrderID);
ClearChangesMask(NpcCraftingOrderSetID);
ClearChangesMask(NpcTreasureID);
ClearChangesMask(NpcCraftingOrderCustomerID);
_changesMask.ResetAll();
}
}
@@ -47,7 +47,7 @@ namespace Game.Entities
{
get
{
return (_blocks[index / 32] & (1 << (index % 32))) != 0;
return (_blocks[GetBlockIndex(index)] & GetBlockFlag(index)) != 0;
}
}
+1 -6
View File
@@ -3257,15 +3257,10 @@ namespace Game.Entities
}
public void SendQuestGiverStatusMultiple()
{
SendQuestGiverStatusMultiple(m_clientGUIDs);
}
public void SendQuestGiverStatusMultiple(List<ObjectGuid> guids)
{
QuestGiverStatusMultiple response = new();
foreach (var itr in guids)
foreach (var itr in m_clientGUIDs)
{
if (itr.IsAnyTypeCreature())
{
+29 -1
View File
@@ -1844,6 +1844,34 @@ namespace Game.Entities
return MathFunctions.CalculatePct(rep, percent);
}
public void SetVisibleForcedReaction(uint factionId, ReputationRank rank)
{
var zonePlayerForcedReaction = m_playerData.ForcedReactions.First(p => p.FactionID == factionId);
if (zonePlayerForcedReaction == null)
zonePlayerForcedReaction = m_playerData.ForcedReactions.First(p => p.FactionID == 0);
if (zonePlayerForcedReaction == null)
return; // no more free slots
var setter = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.ForcedReactions, m_playerData.ForcedReactions.IndexOf(zonePlayerForcedReaction));
SetUpdateFieldValue(setter.ModifyValue(setter.FactionID), (int)factionId);
SetUpdateFieldValue(setter.ModifyValue(setter.Reaction), (int)rank);
}
public void RemoveVisibleForcedReaction(uint factionId)
{
var zonePlayerForcedReaction = m_playerData.ForcedReactions.First(p => p.FactionID == factionId);
if (zonePlayerForcedReaction == null)
return;
var setter = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.ForcedReactions, m_playerData.ForcedReactions.IndexOf(zonePlayerForcedReaction));
SetUpdateFieldValue(setter.ModifyValue(setter.FactionID), 0);
SetUpdateFieldValue(setter.ModifyValue(setter.Reaction), 0);
}
// Calculates how many reputation points player gains in victim's enemy factions
public void RewardReputation(Unit victim, float rate)
{
@@ -2952,7 +2980,7 @@ namespace Game.Entities
PlayerInteractionType.Renown, PlayerInteractionType.BlackMarketAuctioneer, PlayerInteractionType.PerksProgramVendor,
PlayerInteractionType.ProfessionsCraftingOrder, PlayerInteractionType.Professions, PlayerInteractionType.ProfessionsCustomerOrder,
PlayerInteractionType.TraitSystem, PlayerInteractionType.BarbersChoice, PlayerInteractionType.MajorFactionRenown,
PlayerInteractionType.PersonalTabardVendor, PlayerInteractionType.ForgeMaster, PlayerInteractionType.CharacterBanker,
PlayerInteractionType.PersonalTabardVendor, PlayerInteractionType.ForgeMaster, PlayerInteractionType.CharacterBanker,
PlayerInteractionType.AccountBanker
};