Core/Objects: Added helper structures to allow using customized updatefield sending packet functions with Trinity::MessageDistDeliverer

Port From (https://github.com/TrinityCore/TrinityCore/commit/ee835671b4f572f92f79c9b302764ee591c6de11)
This commit is contained in:
hondacrx
2022-05-10 14:35:41 -04:00
parent c9a045e3c8
commit 867f528ac0
12 changed files with 302 additions and 20 deletions
@@ -996,7 +996,7 @@ namespace Game.Entities
data.WriteBytes(buffer); data.WriteBytes(buffer);
} }
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedAreaTriggerMask, Player target) public void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedAreaTriggerMask, Player target)
{ {
UpdateMask valuesMask = new((int)TypeId.Max); UpdateMask valuesMask = new((int)TypeId.Max);
if (requestedObjectMask.IsAnySet()) if (requestedObjectMask.IsAnySet())
@@ -1112,5 +1112,27 @@ namespace Game.Entities
List<ObjectGuid> _insideUnits = new(); List<ObjectGuid> _insideUnits = new();
AreaTriggerAI _ai; AreaTriggerAI _ai;
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
AreaTrigger Owner;
ObjectFieldData ObjectMask = new();
AreaTriggerFieldData AreaTriggerMask = new();
public ValuesUpdateForPlayerWithMaskSender(AreaTrigger owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), AreaTriggerMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject updateObject);
player.SendPacket(updateObject);
}
}
} }
} }
+23
View File
@@ -19,6 +19,7 @@ using Framework.Constants;
using Game.DataStorage; using Game.DataStorage;
using Game.Maps; using Game.Maps;
using Game.Networking; using Game.Networking;
using Game.Networking.Packets;
using Game.Spells; using Game.Spells;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -326,5 +327,27 @@ namespace Game.Entities
Dictionary<(Locale locale, uint lineId), TimeSpan> _lineStartTimes = new(); Dictionary<(Locale locale, uint lineId), TimeSpan> _lineStartTimes = new();
TimeSpan[] _lastLineEndTimes = new TimeSpan[(int)Locale.Total]; TimeSpan[] _lastLineEndTimes = new TimeSpan[(int)Locale.Total];
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
Conversation Owner;
ObjectFieldData ObjectMask = new();
ConversationData ConversationMask = new();
public ValuesUpdateForPlayerWithMaskSender(Conversation owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), ConversationMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
} }
+25 -2
View File
@@ -15,15 +15,16 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
using Framework.Collections;
using Framework.Constants; using Framework.Constants;
using Framework.Database; using Framework.Database;
using Game.DataStorage; using Game.DataStorage;
using Game.Loots; using Game.Loots;
using Game.Maps; using Game.Maps;
using Game.Networking;
using Game.Networking.Packets;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Framework.Collections;
using Game.Networking;
namespace Game.Entities namespace Game.Entities
{ {
@@ -328,5 +329,27 @@ namespace Game.Entities
CorpseType m_type; CorpseType m_type;
long m_time; long m_time;
CellCoord _cellCoord; // gride for corpse position for fast search CellCoord _cellCoord; // gride for corpse position for fast search
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
Corpse Owner;
ObjectFieldData ObjectMask = new();
CorpseData CorpseMask = new();
public ValuesUpdateForPlayerWithMaskSender(Corpse owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), CorpseMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
} }
+25 -1
View File
@@ -16,8 +16,10 @@
*/ */
using Framework.Constants; using Framework.Constants;
using Game.Spells;
using Game.Networking; using Game.Networking;
using Game.Networking.Packets;
using Game.Spells;
using System.Collections.Generic;
namespace Game.Entities namespace Game.Entities
{ {
@@ -323,6 +325,28 @@ namespace Game.Entities
Unit _caster; Unit _caster;
int _duration; // for non-aura dynobjects int _duration; // for non-aura dynobjects
bool _isViewpoint; bool _isViewpoint;
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
DynamicObject Owner;
ObjectFieldData ObjectMask = new();
DynamicObjectData DynamicObjectMask = new();
public ValuesUpdateForPlayerWithMaskSender(DynamicObject owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), DynamicObjectMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
public enum DynamicObjectType public enum DynamicObjectType
@@ -3110,6 +3110,28 @@ namespace Game.Entities
ObjectGuid m_linkedTrap; ObjectGuid m_linkedTrap;
#endregion #endregion
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
GameObject Owner;
ObjectFieldData ObjectMask = new();
GameObjectFieldData GameObjectMask = new();
public ValuesUpdateForPlayerWithMaskSender(GameObject owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), GameObjectMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
class GameObjectModelOwnerImpl : GameObjectModelOwnerBase class GameObjectModelOwnerImpl : GameObjectModelOwnerBase
@@ -15,11 +15,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
using System.Collections.Generic;
using Game.Networking;
using Framework.Constants; using Framework.Constants;
using Framework.Database; using Framework.Database;
using Game.DataStorage; using Game.DataStorage;
using Game.Networking;
using Game.Networking.Packets;
using System.Collections.Generic;
using System.Linq; using System.Linq;
namespace Game.Entities namespace Game.Entities
@@ -241,9 +242,33 @@ namespace Game.Entities
} }
public int GetMaxAzeritePowerTier() { return m_maxTier; } public int GetMaxAzeritePowerTier() { return m_maxTier; }
public uint GetSelectedAzeritePower(int tier) public uint GetSelectedAzeritePower(int tier)
{ {
return (uint)m_azeriteEmpoweredItemData.Selections[tier]; return (uint)m_azeriteEmpoweredItemData.Selections[tier];
} }
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
AzeriteEmpoweredItem Owner;
ObjectFieldData ObjectMask = new();
ItemData ItemMask = new();
AzeriteEmpoweredItemData AzeriteEmpoweredItemMask = new();
public ValuesUpdateForPlayerWithMaskSender(AzeriteEmpoweredItem owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), ItemMask.GetUpdateMask(), AzeriteEmpoweredItemMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
} }
+23
View File
@@ -541,6 +541,29 @@ namespace Game.Entities
hasPreviousMilestone = false; hasPreviousMilestone = false;
} }
} }
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
AzeriteItem Owner;
ObjectFieldData ObjectMask = new();
ItemData ItemMask = new();
AzeriteItemData AzeriteItemMask = new();
public ValuesUpdateForPlayerWithMaskSender(AzeriteItem owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), ItemMask.GetUpdateMask(), AzeriteItemMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
public class AzeriteItemSelectedEssencesData public class AzeriteItemSelectedEssencesData
+25
View File
@@ -18,6 +18,8 @@
using Framework.Constants; using Framework.Constants;
using Framework.Database; using Framework.Database;
using Game.Networking; using Game.Networking;
using Game.Networking.Packets;
using System.Collections.Generic;
namespace Game.Entities namespace Game.Entities
{ {
@@ -280,5 +282,28 @@ namespace Game.Entities
ContainerData m_containerData; ContainerData m_containerData;
Item[] m_bagslot = new Item[36]; Item[] m_bagslot = new Item[36];
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
Bag Owner;
ObjectFieldData ObjectMask = new();
ItemData ItemMask = new();
ContainerData ContainerMask = new();
public ValuesUpdateForPlayerWithMaskSender(Bag owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), ItemMask.GetUpdateMask(), ContainerMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
} }
+22
View File
@@ -2737,6 +2737,28 @@ namespace Game.Entities
Dictionary<uint, ushort> m_artifactPowerIdToIndex = new(); Dictionary<uint, ushort> m_artifactPowerIdToIndex = new();
Array<uint> m_gemScalingLevels = new(ItemConst.MaxGemSockets); Array<uint> m_gemScalingLevels = new(ItemConst.MaxGemSockets);
#endregion #endregion
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
Item Owner;
ObjectFieldData ObjectMask = new();
ItemData ItemMask = new();
public ValuesUpdateForPlayerWithMaskSender(Item owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), ItemMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
public class ItemPosCount public class ItemPosCount
+25 -1
View File
@@ -16,7 +16,6 @@
*/ */
using Framework.Constants; using Framework.Constants;
using Framework.Dynamic;
using Game.Achievements; using Game.Achievements;
using Game.BattleGrounds; using Game.BattleGrounds;
using Game.Chat; using Game.Chat;
@@ -26,6 +25,7 @@ using Game.Groups;
using Game.Mails; using Game.Mails;
using Game.Maps; using Game.Maps;
using Game.Misc; using Game.Misc;
using Game.Networking.Packets;
using Game.Spells; using Game.Spells;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
@@ -259,6 +259,30 @@ namespace Game.Entities
uint m_ingametime; uint m_ingametime;
PlayerCommandStates _activeCheats; PlayerCommandStates _activeCheats;
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
Player Owner;
ObjectFieldData ObjectMask = new();
UnitData UnitMask = new();
PlayerData PlayerMask = new();
ActivePlayerData ActivePlayerMask = new();
public ValuesUpdateForPlayerWithMaskSender(Player owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), UnitMask.GetUpdateMask(), PlayerMask.GetUpdateMask(), ActivePlayerMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
public class PlayerInfo public class PlayerInfo
+28 -1
View File
@@ -18,7 +18,9 @@
using Framework.Constants; using Framework.Constants;
using Game.Maps; using Game.Maps;
using Game.Networking; using Game.Networking;
using Game.Networking.Packets;
using Game.Spells; using Game.Spells;
using System.Collections.Generic;
namespace Game.Entities namespace Game.Entities
{ {
@@ -26,7 +28,7 @@ namespace Game.Entities
{ {
SceneObjectData m_sceneObjectData; SceneObjectData m_sceneObjectData;
Position _stationaryPosition; Position _stationaryPosition = new();
ObjectGuid _createdBySpellCast; ObjectGuid _createdBySpellCast;
public SceneObject() : base(false) public SceneObject() : base(false)
@@ -36,6 +38,9 @@ namespace Game.Entities
m_updateFlag.Stationary = true; m_updateFlag.Stationary = true;
m_updateFlag.SceneObject = true; m_updateFlag.SceneObject = true;
m_sceneObjectData = new();
_stationaryPosition = new();
} }
public override void AddToWorld() public override void AddToWorld()
@@ -204,5 +209,27 @@ namespace Game.Entities
void RelocateStationaryPosition(Position pos) { _stationaryPosition.Relocate(pos); } void RelocateStationaryPosition(Position pos) { _stationaryPosition.Relocate(pos); }
public void SetCreatedBySpellCast(ObjectGuid castId) { _createdBySpellCast = castId; } public void SetCreatedBySpellCast(ObjectGuid castId) { _createdBySpellCast = castId; }
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
SceneObject Owner;
ObjectFieldData ObjectMask = new();
SceneObjectData SceneObjectMask = new();
public ValuesUpdateForPlayerWithMaskSender(SceneObject owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), SceneObjectMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
} }
+22
View File
@@ -137,6 +137,28 @@ namespace Game.Entities
ushort _aiAnimKitId; ushort _aiAnimKitId;
ushort _movementAnimKitId; ushort _movementAnimKitId;
ushort _meleeAnimKitId; ushort _meleeAnimKitId;
class ValuesUpdateForPlayerWithMaskSender : IDoWork<Player>
{
Unit Owner;
ObjectFieldData ObjectMask = new();
UnitData UnitMask = new();
public ValuesUpdateForPlayerWithMaskSender(Unit owner)
{
Owner = owner;
}
public void Invoke(Player player)
{
UpdateData udata = new(Owner.GetMapId());
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), UnitMask.GetUpdateMask(), player);
udata.BuildPacket(out UpdateObject packet);
player.SendPacket(packet);
}
}
} }
public struct DiminishingReturn public struct DiminishingReturn