Core/PacketIO: Named a bunch of unknown/unused fields

Port From (https://github.com/TrinityCore/TrinityCore/commit/806611075659ddde60f3003763e442a46d70f993)
This commit is contained in:
Hondacrx
2024-11-17 13:07:52 -05:00
parent ba80dede79
commit 447c222665
41 changed files with 525 additions and 516 deletions
@@ -36,10 +36,10 @@ namespace Framework.Constants
HasAttached = 0x04, HasAttached = 0x04,
HasFaceMovementDir = 0x08, HasFaceMovementDir = 0x08,
HasFollowsTerrain = 0x10, // NYI HasFollowsTerrain = 0x10, // NYI
Unk1 = 0x20, AlwaysExterior = 0x20,
HasTargetRollPitchYaw = 0x40, // NYI HasTargetRollPitchYaw = 0x40, // NYI
HasAnimId = 0x80, // DEPRECATED HasAnimId = 0x80, // DEPRECATED
Unk3 = 0x100, VisualAnimIsDecay = 0x100,
HasAnimKitId = 0x200, // DEPRECATED HasAnimKitId = 0x200, // DEPRECATED
HasCircularMovement = 0x400, // DEPRECATED HasCircularMovement = 0x400, // DEPRECATED
Unk5 = 0x800, Unk5 = 0x800,
+1 -1
View File
@@ -3381,7 +3381,7 @@ namespace Game.Achievements
return (referencePlayer.m_activePlayerData.RuneforgePowers[block] & (1u << (int)bit)) != 0; return (referencePlayer.m_activePlayerData.RuneforgePowers[block] & (1u << (int)bit)) != 0;
} }
case ModifierTreeType.PlayerInChromieTimeForScaling: // 304 case ModifierTreeType.PlayerInChromieTimeForScaling: // 304
if ((referencePlayer.m_playerData.CtrOptions._value.ContentTuningConditionMask & 1) == 0) if ((referencePlayer.m_playerData.CtrOptions._value.ConditionalFlags & 1) == 0)
return false; return false;
break; break;
case ModifierTreeType.IsRaFRecruit: // 305 case ModifierTreeType.IsRaFRecruit: // 305
+6 -2
View File
@@ -1831,6 +1831,10 @@ namespace Game
bucketInfo.MaxBattlePetQuality = bucketInfo.MaxBattlePetQuality.HasValue ? Math.Max(bucketInfo.MaxBattlePetQuality.Value, quality) : quality; bucketInfo.MaxBattlePetQuality = bucketInfo.MaxBattlePetQuality.HasValue ? Math.Max(bucketInfo.MaxBattlePetQuality.Value, quality) : quality;
bucketInfo.MaxBattlePetLevel = bucketInfo.MaxBattlePetLevel.HasValue ? Math.Max(bucketInfo.MaxBattlePetLevel.Value, level) : level; bucketInfo.MaxBattlePetLevel = bucketInfo.MaxBattlePetLevel.HasValue ? Math.Max(bucketInfo.MaxBattlePetLevel.Value, level) : level;
bucketInfo.BattlePetBreedID = (byte)breedId; bucketInfo.BattlePetBreedID = (byte)breedId;
if (bucketInfo.BattlePetLevelMask.HasValue)
bucketInfo.BattlePetLevelMask = 0;
bucketInfo.BattlePetLevelMask = bucketInfo.BattlePetLevelMask | 1u << (level - 1);
} }
} }
@@ -1933,8 +1937,8 @@ namespace Game
{ {
ItemId = key.ItemID; ItemId = key.ItemID;
ItemLevel = key.ItemLevel; ItemLevel = key.ItemLevel;
BattlePetSpeciesId = (ushort)(key.BattlePetSpeciesID.HasValue ? key.BattlePetSpeciesID.Value : 0); BattlePetSpeciesId = key.BattlePetSpeciesID.GetValueOrDefault(0);
SuffixItemNameDescriptionId = (ushort)(key.SuffixItemNameDescriptionID.HasValue ? key.SuffixItemNameDescriptionID.Value : 0); SuffixItemNameDescriptionId = key.ItemSuffix.GetValueOrDefault(0);
} }
public int CompareTo(AuctionsBucketKey other) public int CompareTo(AuctionsBucketKey other)
+3 -3
View File
@@ -1025,7 +1025,7 @@ namespace Game.Chat
if (handler.GetSession() != null) if (handler.GetSession() != null)
{ {
int maxLevel = 0; int maxLevel = 0;
var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (questLevels.HasValue) if (questLevels.HasValue)
maxLevel = questLevels.Value.MaxLevel; maxLevel = questLevels.Value.MaxLevel;
@@ -1088,7 +1088,7 @@ namespace Game.Chat
if (handler.GetSession() != null) if (handler.GetSession() != null)
{ {
int maxLevel = 0; int maxLevel = 0;
var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (questLevels.HasValue) if (questLevels.HasValue)
maxLevel = questLevels.Value.MaxLevel; maxLevel = questLevels.Value.MaxLevel;
@@ -1156,7 +1156,7 @@ namespace Game.Chat
if (handler.GetSession() != null) if (handler.GetSession() != null)
{ {
int maxLevel = 0; int maxLevel = 0;
var questLevels = Global.DB2Mgr.GetContentTuningData(quest.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var questLevels = Global.DB2Mgr.GetContentTuningData(quest.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (questLevels.HasValue) if (questLevels.HasValue)
maxLevel = questLevels.Value.MaxLevel; maxLevel = questLevels.Value.MaxLevel;
+1 -1
View File
@@ -1859,7 +1859,7 @@ namespace Game
public static bool IsPlayerMeetingCondition(Player player, PlayerConditionRecord condition) public static bool IsPlayerMeetingCondition(Player player, PlayerConditionRecord condition)
{ {
ContentTuningLevels? levels = Global.DB2Mgr.GetContentTuningData(condition.ContentTuningID, player.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); ContentTuningLevels? levels = Global.DB2Mgr.GetContentTuningData(condition.ContentTuningID, player.m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (levels.HasValue) if (levels.HasValue)
{ {
byte minLevel = (byte)(condition.Flags.HasAnyFlag(0x800) ? levels.Value.MinLevelWithDelta : levels.Value.MinLevel); byte minLevel = (byte)(condition.Flags.HasAnyFlag(0x800) ? levels.Value.MinLevelWithDelta : levels.Value.MinLevel);
+1 -1
View File
@@ -1663,7 +1663,7 @@ namespace Game.DungeonFinding
} }
else else
{ {
var levels = Global.DB2Mgr.GetContentTuningData(dungeon.contentTuningId, player.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var levels = Global.DB2Mgr.GetContentTuningData(dungeon.contentTuningId, player.m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (levels.HasValue) if (levels.HasValue)
{ {
if (levels.Value.MinLevel > level) if (levels.Value.MinLevel > level)
@@ -176,8 +176,8 @@ namespace Game.Entities
VisualAnim visualAnim = areaTriggerData.ModifyValue(m_areaTriggerData.VisualAnim); VisualAnim visualAnim = areaTriggerData.ModifyValue(m_areaTriggerData.VisualAnim);
SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.AnimationDataID), GetCreateProperties().AnimId); SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.AnimationDataID), GetCreateProperties().AnimId);
SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.AnimKitID), GetCreateProperties().AnimKitId); SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.AnimKitID), GetCreateProperties().AnimKitId);
if (GetCreateProperties() != null && GetCreateProperties().Flags.HasFlag(AreaTriggerCreatePropertiesFlag.Unk3)) if (GetCreateProperties() != null && GetCreateProperties().Flags.HasFlag(AreaTriggerCreatePropertiesFlag.VisualAnimIsDecay))
SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.Field_C), true); SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.IsDecay), true);
if (caster != null) if (caster != null)
PhasingHandler.InheritPhaseShift(this, caster); PhasingHandler.InheritPhaseShift(this, caster);
@@ -2267,12 +2267,12 @@ namespace Game.Entities
return; return;
//required lvl checks! //required lvl checks!
var userLevels = Global.DB2Mgr.GetContentTuningData(info.ContentTuningId, player.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var userLevels = Global.DB2Mgr.GetContentTuningData(info.ContentTuningId, player.m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (userLevels.HasValue) if (userLevels.HasValue)
if (player.GetLevel() < userLevels.Value.MaxLevel) if (player.GetLevel() < userLevels.Value.MaxLevel)
return; return;
var targetLevels = Global.DB2Mgr.GetContentTuningData(info.ContentTuningId, targetPlayer.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var targetLevels = Global.DB2Mgr.GetContentTuningData(info.ContentTuningId, targetPlayer.m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (targetLevels.HasValue) if (targetLevels.HasValue)
if (targetPlayer.GetLevel() < targetLevels.Value.MaxLevel) if (targetPlayer.GetLevel() < targetLevels.Value.MaxLevel)
return; return;
@@ -3826,7 +3826,7 @@ namespace Game.Entities
Player player = target.ToPlayer(); Player player = target.ToPlayer();
if (player != null) if (player != null)
{ {
var userLevels = Global.DB2Mgr.GetContentTuningData(GetGoInfo().ContentTuningId, player.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var userLevels = Global.DB2Mgr.GetContentTuningData(GetGoInfo().ContentTuningId, player.m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (userLevels.HasValue) if (userLevels.HasValue)
return (byte)Math.Clamp(player.GetLevel(), userLevels.Value.MinLevel, userLevels.Value.MaxLevel); return (byte)Math.Clamp(player.GetLevel(), userLevels.Value.MinLevel, userLevels.Value.MaxLevel);
} }
+1 -1
View File
@@ -2436,7 +2436,7 @@ namespace Game.Entities
{ {
uint maxLevel = (uint)Global.DB2Mgr.GetCurveXAxisRange(item.GetBonus().PlayerLevelToItemLevelCurveId).Item2; uint maxLevel = (uint)Global.DB2Mgr.GetCurveXAxisRange(item.GetBonus().PlayerLevelToItemLevelCurveId).Item2;
var contentTuning = Global.DB2Mgr.GetContentTuningData(item.GetBonus().ContentTuningId, player.m_playerData.CtrOptions._value.ContentTuningConditionMask, true); var contentTuning = Global.DB2Mgr.GetContentTuningData(item.GetBonus().ContentTuningId, player.m_playerData.CtrOptions._value.ConditionalFlags, true);
if (contentTuning.HasValue) if (contentTuning.HasValue)
maxLevel = Math.Min(maxLevel, (uint)contentTuning.Value.MaxLevel); maxLevel = Math.Min(maxLevel, (uint)contentTuning.Value.MaxLevel);
@@ -71,7 +71,7 @@ namespace Game.Entities
if (mapDifficulty.ItemContextPickerID != 0) if (mapDifficulty.ItemContextPickerID != 0)
{ {
uint contentTuningId = Global.DB2Mgr.GetRedirectedContentTuningId((uint)mapDifficulty.ContentTuningID, player.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); uint contentTuningId = Global.DB2Mgr.GetRedirectedContentTuningId((uint)mapDifficulty.ContentTuningID, player.m_playerData.CtrOptions.GetValue().ConditionalFlags);
ItemContextPickerEntryRecord selectedPickerEntry = null; ItemContextPickerEntryRecord selectedPickerEntry = null;
foreach (var itemContextPickerEntry in CliDB.ItemContextPickerEntryStorage.Values) foreach (var itemContextPickerEntry in CliDB.ItemContextPickerEntryStorage.Values)
@@ -2748,22 +2748,22 @@ namespace Game.Entities
public class CTROptions public class CTROptions
{ {
public uint ContentTuningConditionMask; public uint ConditionalFlags;
public uint Field_4; public uint FactionGroup;
public uint ExpansionLevelMask; public uint ChromieTimeExpansionMask;
public void WriteCreate(WorldPacket data, Player owner, Player receiver) public void WriteCreate(WorldPacket data, Player owner, Player receiver)
{ {
data.WriteUInt32(ContentTuningConditionMask); data.WriteUInt32(ConditionalFlags);
data.WriteUInt32(Field_4); data.WriteUInt32(FactionGroup);
data.WriteUInt32(ExpansionLevelMask); data.WriteUInt32(ChromieTimeExpansionMask);
} }
public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver)
{ {
data.WriteUInt32(ContentTuningConditionMask); data.WriteUInt32(ConditionalFlags);
data.WriteUInt32(Field_4); data.WriteUInt32(FactionGroup);
data.WriteUInt32(ExpansionLevelMask); data.WriteUInt32(ChromieTimeExpansionMask);
} }
} }
@@ -8050,7 +8050,7 @@ namespace Game.Entities
public class VisualAnim : HasChangesMask public class VisualAnim : HasChangesMask
{ {
public UpdateField<bool> Field_C = new(0, 1); public UpdateField<bool> IsDecay = new(0, 1);
public UpdateField<int> AnimationDataID = new(0, 2); public UpdateField<int> AnimationDataID = new(0, 2);
public UpdateField<uint> AnimKitID = new(0, 3); public UpdateField<uint> AnimKitID = new(0, 3);
public UpdateField<uint> AnimProgress = new(0, 4); public UpdateField<uint> AnimProgress = new(0, 4);
@@ -8062,7 +8062,7 @@ namespace Game.Entities
data.WriteInt32(AnimationDataID); data.WriteInt32(AnimationDataID);
data.WriteUInt32(AnimKitID); data.WriteUInt32(AnimKitID);
data.WriteUInt32(AnimProgress); data.WriteUInt32(AnimProgress);
data.WriteBit(Field_C); data.WriteBit(IsDecay);
data.FlushBits(); data.FlushBits();
} }
@@ -8078,7 +8078,7 @@ namespace Game.Entities
{ {
if (changesMask[1]) if (changesMask[1])
{ {
data.WriteBit(Field_C); data.WriteBit(IsDecay);
} }
} }
data.FlushBits(); data.FlushBits();
@@ -8102,7 +8102,7 @@ namespace Game.Entities
public override void ClearChangesMask() public override void ClearChangesMask()
{ {
ClearChangesMask(Field_C); ClearChangesMask(IsDecay);
ClearChangesMask(AnimationDataID); ClearChangesMask(AnimationDataID);
ClearChangesMask(AnimKitID); ClearChangesMask(AnimKitID);
ClearChangesMask(AnimProgress); ClearChangesMask(AnimProgress);
+4 -4
View File
@@ -552,7 +552,7 @@ namespace Game.Entities
bool hasAttached = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasAttached); bool hasAttached = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasAttached);
bool hasFaceMovementDir = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasFaceMovementDir); bool hasFaceMovementDir = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasFaceMovementDir);
bool hasFollowsTerrain = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasFollowsTerrain); bool hasFollowsTerrain = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasFollowsTerrain);
bool hasUnk1 = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.Unk1); bool hasAlwaysExterior = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.AlwaysExterior);
bool hasUnknown1025 = false; bool hasUnknown1025 = false;
bool hasTargetRollPitchYaw = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasTargetRollPitchYaw); bool hasTargetRollPitchYaw = createProperties != null && createProperties.Flags.HasFlag(AreaTriggerCreatePropertiesFlag.HasTargetRollPitchYaw);
bool hasScaleCurveID = createProperties != null && createProperties.ScaleCurveId != 0; bool hasScaleCurveID = createProperties != null && createProperties.ScaleCurveId != 0;
@@ -569,7 +569,7 @@ namespace Game.Entities
data.WriteBit(hasAttached); data.WriteBit(hasAttached);
data.WriteBit(hasFaceMovementDir); data.WriteBit(hasFaceMovementDir);
data.WriteBit(hasFollowsTerrain); data.WriteBit(hasFollowsTerrain);
data.WriteBit(hasUnk1); data.WriteBit(hasAlwaysExterior);
data.WriteBit(hasUnknown1025); data.WriteBit(hasUnknown1025);
data.WriteBit(hasTargetRollPitchYaw); data.WriteBit(hasTargetRollPitchYaw);
data.WriteBit(hasScaleCurveID); data.WriteBit(hasScaleCurveID);
@@ -4052,7 +4052,7 @@ namespace Game.Entities
public uint TransportID; public uint TransportID;
public float Magnitude; public float Magnitude;
public MovementForceType Type; public MovementForceType Type;
public int Unused910; public int MovementForceID;
public void Read(WorldPacket data) public void Read(WorldPacket data)
{ {
@@ -4061,7 +4061,7 @@ namespace Game.Entities
Direction = data.ReadVector3(); Direction = data.ReadVector3();
TransportID = data.ReadUInt32(); TransportID = data.ReadUInt32();
Magnitude = data.ReadFloat(); Magnitude = data.ReadFloat();
Unused910 = data.ReadInt32(); MovementForceID = data.ReadInt32();
Type = (MovementForceType)data.ReadBits<byte>(2); Type = (MovementForceType)data.ReadBits<byte>(2);
} }
+5 -5
View File
@@ -2444,7 +2444,7 @@ namespace Game.Entities
packet.Item = new ItemInstance(item); packet.Item = new ItemInstance(item);
packet.QuestLogItemID = item.GetTemplate().QuestLogItemId; packet.ProxyItemID = item.GetTemplate().QuestLogItemId;
packet.Quantity = quantity; packet.Quantity = quantity;
packet.QuantityInInventory = GetItemCount(item.GetEntry()); packet.QuantityInInventory = GetItemCount(item.GetEntry());
@@ -2460,15 +2460,15 @@ namespace Game.Entities
packet.ItemGUID = item.GetGUID(); packet.ItemGUID = item.GetGUID();
packet.Pushed = pushed; packet.Pushed = pushed;
packet.DisplayText = ItemPushResult.DisplayType.Normal; packet.ChatNotifyType = ItemPushResult.DisplayType.Normal;
packet.Created = created; packet.Created = created;
//packet.IsBonusRoll; //packet.IsBonusRoll;
if (dungeonEncounterId != 0) if (dungeonEncounterId != 0)
{ {
packet.DisplayText = ItemPushResult.DisplayType.EncounterLoot; packet.ChatNotifyType = ItemPushResult.DisplayType.EncounterLoot;
packet.DungeonEncounterID = (int)dungeonEncounterId; packet.EncounterID = (int)dungeonEncounterId;
packet.IsEncounterLoot = true; packet.IsPersonalLoot = true;
} }
if (broadcast && GetGroup() != null && !item.GetTemplate().HasFlag(ItemFlags3.DontReportLootLogToParty)) if (broadcast && GetGroup() != null && !item.GetTemplate().HasFlag(ItemFlags3.DontReportLootLogToParty))
+5 -5
View File
@@ -41,7 +41,7 @@ namespace Game.Entities
int GetQuestMinLevel(uint contentTuningId) int GetQuestMinLevel(uint contentTuningId)
{ {
var questLevels = Global.DB2Mgr.GetContentTuningData(contentTuningId, m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var questLevels = Global.DB2Mgr.GetContentTuningData(contentTuningId, m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (questLevels.HasValue) if (questLevels.HasValue)
{ {
ChrRacesRecord race = CliDB.ChrRacesStorage.LookupByKey(GetRace()); ChrRacesRecord race = CliDB.ChrRacesStorage.LookupByKey(GetRace());
@@ -65,7 +65,7 @@ namespace Game.Entities
public int GetQuestLevel(uint contentTuningId) public int GetQuestLevel(uint contentTuningId)
{ {
var questLevels = Global.DB2Mgr.GetContentTuningData(contentTuningId, m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var questLevels = Global.DB2Mgr.GetContentTuningData(contentTuningId, m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (questLevels.HasValue) if (questLevels.HasValue)
{ {
int minLevel = GetQuestMinLevel(contentTuningId); int minLevel = GetQuestMinLevel(contentTuningId);
@@ -3269,11 +3269,11 @@ namespace Game.Entities
packet.Slot = InventorySlots.Bag0; packet.Slot = InventorySlots.Bag0;
packet.SlotInBag = 0; packet.SlotInBag = 0;
packet.Item.ItemID = itemTemplate.GetId(); packet.Item.ItemID = itemTemplate.GetId();
packet.QuestLogItemID = itemTemplate.QuestLogItemId; packet.ProxyItemID = itemTemplate.QuestLogItemId;
packet.Quantity = count; packet.Quantity = count;
packet.QuantityInInventory = (uint)GetQuestObjectiveData(obj); packet.QuantityInInventory = (uint)GetQuestObjectiveData(obj);
packet.DisplayText = ItemPushResult.DisplayType.EncounterLoot; packet.ChatNotifyType = ItemPushResult.DisplayType.EncounterLoot;
packet.Unused_1017 = true; packet.FakeQuestItem = true;
if (GetGroup() != null && !itemTemplate.HasFlag(ItemFlags3.DontReportLootLogToParty)) if (GetGroup() != null && !itemTemplate.HasFlag(ItemFlags3.DontReportLootLogToParty))
GetGroup().BroadcastPacket(packet, true); GetGroup().BroadcastPacket(packet, true);
+2 -2
View File
@@ -1871,7 +1871,7 @@ namespace Game.Entities
LFGDungeonsRecord dungeon = DB2Mgr.GetLfgDungeon(map.GetId(), map.GetDifficultyID()); LFGDungeonsRecord dungeon = DB2Mgr.GetLfgDungeon(map.GetId(), map.GetDifficultyID());
if (dungeon != null) if (dungeon != null)
{ {
var dungeonLevels = DB2Mgr.GetContentTuningData(dungeon.ContentTuningID, m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var dungeonLevels = DB2Mgr.GetContentTuningData(dungeon.ContentTuningID, m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (dungeonLevels.HasValue) if (dungeonLevels.HasValue)
if (dungeonLevels.Value.TargetLevelMax == ObjectMgr.GetMaxLevelForExpansion(Expansion.WrathOfTheLichKing)) if (dungeonLevels.Value.TargetLevelMax == ObjectMgr.GetMaxLevelForExpansion(Expansion.WrathOfTheLichKing))
ChampioningFaction = GetChampioningFaction(); ChampioningFaction = GetChampioningFaction();
@@ -6492,7 +6492,7 @@ namespace Game.Entities
UpdateCriteria(CriteriaType.RevealWorldMapOverlay, GetAreaId()); UpdateCriteria(CriteriaType.RevealWorldMapOverlay, GetAreaId());
var areaLevels = DB2Mgr.GetContentTuningData(areaEntry.ContentTuningID, m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); var areaLevels = DB2Mgr.GetContentTuningData(areaEntry.ContentTuningID, m_playerData.CtrOptions.GetValue().ConditionalFlags);
if (areaLevels.HasValue) if (areaLevels.HasValue)
{ {
if (IsMaxLevel()) if (IsMaxLevel())
@@ -79,7 +79,7 @@ namespace Game
SetTimeZoneInformation packet = new(); SetTimeZoneInformation packet = new();
packet.ServerTimeTZ = clientSupportedTZ; packet.ServerTimeTZ = clientSupportedTZ;
packet.GameTimeTZ = clientSupportedTZ; packet.GameTimeTZ = clientSupportedTZ;
packet.ServerRegionalTZ = clientSupportedTZ; packet.ServerRegionalTimeTZ = clientSupportedTZ;
SendPacket(packet);//enabled it SendPacket(packet);//enabled it
} }
@@ -91,7 +91,7 @@ namespace Game
features.BpayStoreDisabledByParentalControls = false; features.BpayStoreDisabledByParentalControls = false;
features.CharUndeleteEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemCharacterUndeleteEnabled); features.CharUndeleteEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemCharacterUndeleteEnabled);
features.BpayStoreEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemBpayStoreEnabled); features.BpayStoreEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemBpayStoreEnabled);
features.MaxCharactersPerRealm = WorldConfig.GetIntValue(WorldCfg.CharactersPerRealm); features.MaxCharactersOnThisRealm = WorldConfig.GetIntValue(WorldCfg.CharactersPerRealm);
features.MinimumExpansionLevel = (int)Expansion.Classic; features.MinimumExpansionLevel = (int)Expansion.Classic;
features.MaximumExpansionLevel = WorldConfig.GetIntValue(WorldCfg.Expansion); features.MaximumExpansionLevel = WorldConfig.GetIntValue(WorldCfg.Expansion);
+9 -10
View File
@@ -46,7 +46,7 @@ namespace Game
EnumCharactersResult charResult = new(); EnumCharactersResult charResult = new();
charResult.Success = true; charResult.Success = true;
charResult.IsDeletedCharacters = holder.IsDeletedCharacters(); charResult.IsDeletedCharacters = holder.IsDeletedCharacters();
charResult.DisabledClassesMask = WorldConfig.GetUIntValue(WorldCfg.CharacterCreatingDisabledClassmask); charResult.ClassDisableMask = WorldConfig.GetUIntValue(WorldCfg.CharacterCreatingDisabledClassmask);
if (!charResult.IsDeletedCharacters) if (!charResult.IsDeletedCharacters)
_legitCharacters.Clear(); _legitCharacters.Clear();
@@ -116,8 +116,8 @@ namespace Game
{ {
EnumCharactersResult.RaceUnlock raceUnlock = new(); EnumCharactersResult.RaceUnlock raceUnlock = new();
raceUnlock.RaceID = requirement.Key; raceUnlock.RaceID = requirement.Key;
raceUnlock.HasExpansion = (byte)GetAccountExpansion() >= requirement.Value.Expansion; raceUnlock.HasUnlockedLicense = (byte)GetAccountExpansion() >= requirement.Value.Expansion;
raceUnlock.HasAchievement = requirement.Value.AchievementId != 0 && (WorldConfig.GetBoolValue(WorldCfg.CharacterCreatingDisableAlliedRaceAchievementRequirement) raceUnlock.HasUnlockedAchievement = requirement.Value.AchievementId != 0 && (WorldConfig.GetBoolValue(WorldCfg.CharacterCreatingDisableAlliedRaceAchievementRequirement)
/* || HasAccountAchievement(requirement.second.AchievementId)*/); /* || HasAccountAchievement(requirement.second.AchievementId)*/);
charResult.RaceUnlockData.Add(raceUnlock); charResult.RaceUnlockData.Add(raceUnlock);
} }
@@ -144,7 +144,7 @@ namespace Game
EnumCharactersResult charEnum = new(); EnumCharactersResult charEnum = new();
charEnum.Success = true; charEnum.Success = true;
charEnum.IsDeletedCharacters = true; charEnum.IsDeletedCharacters = true;
charEnum.DisabledClassesMask = WorldConfig.GetUIntValue(WorldCfg.CharacterCreatingDisabledClassmask); charEnum.ClassDisableMask = WorldConfig.GetUIntValue(WorldCfg.CharacterCreatingDisabledClassmask);
if (!result.IsEmpty()) if (!result.IsEmpty())
{ {
@@ -1126,7 +1126,7 @@ namespace Game
features.ComplaintStatus = (byte)ComplaintStatus.EnabledWithAutoIgnore; features.ComplaintStatus = (byte)ComplaintStatus.EnabledWithAutoIgnore;
features.CfgRealmID = 2; features.CfgRealmID = 2;
features.CfgRealmRecID = 0; features.CfgRealmRecID = 0;
features.TokenPollTimeSeconds = 300; features.CommercePricePollTimeSeconds = 300;
features.VoiceEnabled = false; features.VoiceEnabled = false;
features.BrowserEnabled = false; // Has to be false, otherwise client will crash if "Customer Support" is opened features.BrowserEnabled = false; // Has to be false, otherwise client will crash if "Customer Support" is opened
@@ -1135,7 +1135,7 @@ namespace Game
europaTicketSystemStatus.ThrottleState.PerMilliseconds = 60000; europaTicketSystemStatus.ThrottleState.PerMilliseconds = 60000;
europaTicketSystemStatus.ThrottleState.TryCount = 1; europaTicketSystemStatus.ThrottleState.TryCount = 1;
europaTicketSystemStatus.ThrottleState.LastResetTimeBeforeNow = 111111; europaTicketSystemStatus.ThrottleState.LastResetTimeBeforeNow = 111111;
features.TutorialsEnabled = true; features.TutorialEnabled = true;
features.NPETutorialsEnabled = true; features.NPETutorialsEnabled = true;
// END OF DUMMY VALUES // END OF DUMMY VALUES
@@ -1148,11 +1148,10 @@ namespace Game
features.CharUndeleteEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemCharacterUndeleteEnabled); features.CharUndeleteEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemCharacterUndeleteEnabled);
features.BpayStoreEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemBpayStoreEnabled); features.BpayStoreEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemBpayStoreEnabled);
features.WarModeFeatureEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemWarModeEnabled); features.WarModeEnabled = WorldConfig.GetBoolValue(WorldCfg.FeatureSystemWarModeEnabled);
features.IsMuted = !CanSpeak(); features.IsChatMuted = !CanSpeak();
features.SpeakForMeAllowed = false;
features.TextToSpeechFeatureEnabled = false;
SendPacket(features); SendPacket(features);
} }
+2 -2
View File
@@ -130,7 +130,7 @@ namespace Game
{ {
// Get Random dungeons that can be done at a certain level and expansion // Get Random dungeons that can be done at a certain level and expansion
uint level = GetPlayer().GetLevel(); uint level = GetPlayer().GetLevel();
uint contentTuningReplacementConditionMask = GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask; uint contentTuningReplacementConditionMask = GetPlayer().m_playerData.CtrOptions.GetValue().ConditionalFlags;
var randomDungeons = Global.LFGMgr.GetRandomAndSeasonalDungeons(level, (uint)GetExpansion(), contentTuningReplacementConditionMask); var randomDungeons = Global.LFGMgr.GetRandomAndSeasonalDungeons(level, (uint)GetExpansion(), contentTuningReplacementConditionMask);
LfgPlayerInfo lfgPlayerInfo = new(); LfgPlayerInfo lfgPlayerInfo = new();
@@ -475,7 +475,7 @@ namespace Game
lfgProposalUpdate.CompletedMask = proposal.encounters; lfgProposalUpdate.CompletedMask = proposal.encounters;
lfgProposalUpdate.ValidCompletedMask = true; lfgProposalUpdate.ValidCompletedMask = true;
lfgProposalUpdate.ProposalSilent = silent; lfgProposalUpdate.ProposalSilent = silent;
lfgProposalUpdate.IsRequeue = !proposal.isNew; lfgProposalUpdate.FailedByMyParty = !proposal.isNew;
foreach (var pair in proposal.players) foreach (var pair in proposal.players)
{ {
+4 -4
View File
@@ -15,7 +15,7 @@ namespace Game
CommerceTokenGetLogResponse response = new(); CommerceTokenGetLogResponse response = new();
// @todo: fix 6.x implementation // @todo: fix 6.x implementation
response.UnkInt = commerceTokenGetLog.UnkInt; response.ClientToken = commerceTokenGetLog.ClientToken;
response.Result = TokenResult.Success; response.Result = TokenResult.Success;
SendPacket(response); SendPacket(response);
@@ -27,9 +27,9 @@ namespace Game
CommerceTokenGetMarketPriceResponse response = new(); CommerceTokenGetMarketPriceResponse response = new();
// @todo: 6.x fix implementation // @todo: 6.x fix implementation
response.CurrentMarketPrice = 300000000; response.PriceGuarantee = 300000000;
response.UnkInt = commerceTokenGetMarketPrice.UnkInt; response.ClientToken = commerceTokenGetMarketPrice.ClientToken;
response.Result = TokenResult.Success; response.ServerToken = TokenResult.Success;
//packet.ReadUInt32("UnkInt32"); //packet.ReadUInt32("UnkInt32");
SendPacket(response); SendPacket(response);
+1 -1
View File
@@ -184,7 +184,7 @@ namespace Game.Movement
MonsterMove packet = new(); MonsterMove packet = new();
packet.MoverGUID = unit.GetGUID(); packet.MoverGUID = unit.GetGUID();
packet.Pos = new Vector3(loc.X, loc.Y, loc.Z); packet.Pos = new Vector3(loc.X, loc.Y, loc.Z);
packet.SplineData.StopDistanceTolerance = 2; packet.SplineData.StopSplineStyle = 2;
packet.SplineData.Id = move_spline.GetId(); packet.SplineData.Id = move_spline.GetId();
if (transport) if (transport)
@@ -58,27 +58,27 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(CriteriaID); _worldPacket.WriteUInt32(CriteriaID);
_worldPacket.WriteUInt64(Quantity); _worldPacket.WriteUInt64(Quantity);
_worldPacket.WritePackedGuid(PlayerGUID); _worldPacket.WritePackedGuid(PlayerGUID);
_worldPacket.WriteUInt32(Unused_10_1_5);
_worldPacket.WriteUInt32(Flags); _worldPacket.WriteUInt32(Flags);
_worldPacket.WriteUInt32(StateFlags);
CurrentTime.Write(_worldPacket); CurrentTime.Write(_worldPacket);
_worldPacket.WriteInt64(ElapsedTime); _worldPacket.WriteInt64(ElapsedTime);
_worldPacket.WriteInt64(CreationTime); _worldPacket.WriteInt64(CreationTime);
_worldPacket.WriteBit(RafAcceptanceID.HasValue); _worldPacket.WriteBit(DynamicID.HasValue);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
if (RafAcceptanceID.HasValue) if (DynamicID.HasValue)
_worldPacket.WriteUInt64(RafAcceptanceID.Value); _worldPacket.WriteUInt64(DynamicID.Value);
} }
public uint CriteriaID; public uint CriteriaID;
public ulong Quantity; public ulong Quantity;
public ObjectGuid PlayerGUID; public ObjectGuid PlayerGUID;
public uint Unused_10_1_5; public uint StateFlags;
public uint Flags; public uint Flags;
public WowTime CurrentTime; public WowTime CurrentTime;
public long ElapsedTime; public long ElapsedTime;
public long CreationTime; public long CreationTime;
public ulong? RafAcceptanceID; public ulong? DynamicID;
} }
class AccountCriteriaUpdate : ServerPacket class AccountCriteriaUpdate : ServerPacket
@@ -180,8 +180,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(0); // this is a hack. this is a packed time written as int64 (progress.DateUpdated) _worldPacket.WriteUInt32(0); // this is a hack. this is a packed time written as int64 (progress.DateUpdated)
_worldPacket.WriteUInt64(progress.Quantity); _worldPacket.WriteUInt64(progress.Quantity);
_worldPacket.WritePackedGuid(progress.PlayerGUID); _worldPacket.WritePackedGuid(progress.PlayerGUID);
_worldPacket.WriteInt32(progress.Unused_10_1_5);
_worldPacket.WriteInt32(progress.Flags); _worldPacket.WriteInt32(progress.Flags);
_worldPacket.WriteInt32(progress.StateFlags);
} }
} }
@@ -321,27 +321,27 @@ namespace Game.Networking.Packets
data.WriteUInt32(Id); data.WriteUInt32(Id);
data.WriteUInt64(Quantity); data.WriteUInt64(Quantity);
data.WritePackedGuid(Player); data.WritePackedGuid(Player);
data.WriteUInt32(Unused_10_1_5);
data.WriteUInt32(Flags); data.WriteUInt32(Flags);
data.WriteUInt32(StateFlags);
Date.Write(data); Date.Write(data);
data.WriteInt64(TimeFromStart); data.WriteInt64(TimeFromStart);
data.WriteInt64(TimeFromCreate); data.WriteInt64(TimeFromCreate);
data.WriteBit(RafAcceptanceID.HasValue); data.WriteBit(DynamicID.HasValue);
data.FlushBits(); data.FlushBits();
if (RafAcceptanceID.HasValue) if (DynamicID.HasValue)
data.WriteUInt64(RafAcceptanceID.Value); data.WriteUInt64(DynamicID.Value);
} }
public uint Id; public uint Id;
public ulong Quantity; public ulong Quantity;
public ObjectGuid Player; public ObjectGuid Player;
public uint Unused_10_1_5; public uint StateFlags;
public uint Flags; public uint Flags;
public WowTime Date; public WowTime Date;
public long TimeFromStart; public long TimeFromStart;
public long TimeFromCreate; public long TimeFromCreate;
public ulong? RafAcceptanceID; public ulong? DynamicID;
} }
public struct GuildCriteriaProgress public struct GuildCriteriaProgress
@@ -352,8 +352,8 @@ namespace Game.Networking.Packets
public WowTime DateUpdated; public WowTime DateUpdated;
public ulong Quantity; public ulong Quantity;
public ObjectGuid PlayerGUID; public ObjectGuid PlayerGUID;
public int Unused_10_1_5;
public int Flags; public int Flags;
public int StateFlags;
} }
public class AllAchievements public class AllAchievements
@@ -722,7 +722,7 @@ namespace Game.Networking.Packets
public uint ItemID; public uint ItemID;
public ushort ItemLevel; public ushort ItemLevel;
public ushort? BattlePetSpeciesID; public ushort? BattlePetSpeciesID;
public ushort? SuffixItemNameDescriptionID; public ushort? ItemSuffix;
public AuctionBucketKey() { } public AuctionBucketKey() { }
@@ -735,7 +735,7 @@ namespace Game.Networking.Packets
BattlePetSpeciesID = key.BattlePetSpeciesId; BattlePetSpeciesID = key.BattlePetSpeciesId;
if (key.SuffixItemNameDescriptionId != 0) if (key.SuffixItemNameDescriptionId != 0)
SuffixItemNameDescriptionID = key.SuffixItemNameDescriptionId; ItemSuffix = key.SuffixItemNameDescriptionId;
} }
public AuctionBucketKey(WorldPacket data) public AuctionBucketKey(WorldPacket data)
@@ -750,7 +750,7 @@ namespace Game.Networking.Packets
BattlePetSpeciesID = data.ReadUInt16(); BattlePetSpeciesID = data.ReadUInt16();
if (hasSuffixItemNameDescriptionId) if (hasSuffixItemNameDescriptionId)
SuffixItemNameDescriptionID = data.ReadUInt16(); ItemSuffix = data.ReadUInt16();
} }
public void Write(WorldPacket data) public void Write(WorldPacket data)
@@ -758,14 +758,14 @@ namespace Game.Networking.Packets
data.WriteBits(ItemID, 20); data.WriteBits(ItemID, 20);
data.WriteBit(BattlePetSpeciesID.HasValue); data.WriteBit(BattlePetSpeciesID.HasValue);
data.WriteBits(ItemLevel, 11); data.WriteBits(ItemLevel, 11);
data.WriteBit(SuffixItemNameDescriptionID.HasValue); data.WriteBit(ItemSuffix.HasValue);
data.FlushBits(); data.FlushBits();
if (BattlePetSpeciesID.HasValue) if (BattlePetSpeciesID.HasValue)
data.WriteUInt16(BattlePetSpeciesID.Value); data.WriteUInt16(BattlePetSpeciesID.Value);
if (SuffixItemNameDescriptionID.HasValue) if (ItemSuffix.HasValue)
data.WriteUInt16(SuffixItemNameDescriptionID.Value); data.WriteUInt16(ItemSuffix.Value);
} }
} }
@@ -885,7 +885,7 @@ namespace Game.Networking.Packets
public byte? MaxBattlePetQuality; public byte? MaxBattlePetQuality;
public byte? MaxBattlePetLevel; public byte? MaxBattlePetLevel;
public byte? BattlePetBreedID; public byte? BattlePetBreedID;
public uint? Unk901_1; public uint? BattlePetLevelMask;
public bool ContainsOwnerItem; public bool ContainsOwnerItem;
public bool ContainsOnlyCollectedAppearances; public bool ContainsOnlyCollectedAppearances;
@@ -905,7 +905,7 @@ namespace Game.Networking.Packets
data.WriteBit(MaxBattlePetQuality.HasValue); data.WriteBit(MaxBattlePetQuality.HasValue);
data.WriteBit(MaxBattlePetLevel.HasValue); data.WriteBit(MaxBattlePetLevel.HasValue);
data.WriteBit(BattlePetBreedID.HasValue); data.WriteBit(BattlePetBreedID.HasValue);
data.WriteBit(Unk901_1.HasValue); data.WriteBit(BattlePetLevelMask.HasValue);
data.WriteBit(ContainsOwnerItem); data.WriteBit(ContainsOwnerItem);
data.WriteBit(ContainsOnlyCollectedAppearances); data.WriteBit(ContainsOnlyCollectedAppearances);
data.FlushBits(); data.FlushBits();
@@ -919,8 +919,8 @@ namespace Game.Networking.Packets
if (BattlePetBreedID.HasValue) if (BattlePetBreedID.HasValue)
data.WriteUInt8(BattlePetBreedID.Value); data.WriteUInt8(BattlePetBreedID.Value);
if (Unk901_1.HasValue) if (BattlePetLevelMask.HasValue)
data.WriteUInt32(Unk901_1.Value); data.WriteUInt32(BattlePetLevelMask.Value);
} }
} }
@@ -137,13 +137,12 @@ namespace Game.Networking.Packets
_worldPacket.FlushBits(); _worldPacket.FlushBits();
{ {
_worldPacket.WriteUInt32(SuccessInfo.GameTimeInfo.BillingPlan); _worldPacket.WriteUInt32(SuccessInfo.GameTimeInfo.BillingType);
_worldPacket.WriteUInt32(SuccessInfo.GameTimeInfo.TimeRemain); _worldPacket.WriteUInt32(SuccessInfo.GameTimeInfo.MinutesRemaining);
_worldPacket.WriteUInt32(SuccessInfo.GameTimeInfo.Unknown735); _worldPacket.WriteUInt32(SuccessInfo.GameTimeInfo.RealBillingType);
// 3x same bit is not a mistake - preserves legacy client behavior of BillingPlanFlags::SESSION_IGR _worldPacket.WriteBit(SuccessInfo.GameTimeInfo.IsInIGR); // inGameRoom check in function checking which lua event to fire when remaining time is near end - BILLING_NAG_DIALOG vs IGR_BILLING_NAG_DIALOG
_worldPacket.WriteBit(SuccessInfo.GameTimeInfo.InGameRoom); // inGameRoom check in function checking which lua event to fire when remaining time is near end - BILLING_NAG_DIALOG vs IGR_BILLING_NAG_DIALOG _worldPacket.WriteBit(SuccessInfo.GameTimeInfo.IsPaidForByIGR); // inGameRoom lua return from Script_GetBillingPlan
_worldPacket.WriteBit(SuccessInfo.GameTimeInfo.InGameRoom); // inGameRoom lua return from Script_GetBillingPlan _worldPacket.WriteBit(SuccessInfo.GameTimeInfo.IsCAISEnabled); // not used anywhere in the client
_worldPacket.WriteBit(SuccessInfo.GameTimeInfo.InGameRoom); // not used anywhere in the client
_worldPacket.FlushBits(); _worldPacket.FlushBits();
} }
@@ -222,10 +221,12 @@ namespace Game.Networking.Packets
public struct GameTime public struct GameTime
{ {
public uint BillingPlan; public uint BillingType;
public uint TimeRemain; public uint MinutesRemaining;
public uint Unknown735; public uint RealBillingType;
public bool InGameRoom; public bool IsInIGR;
public bool IsPaidForByIGR;
public bool IsCAISEnabled;
} }
public class NewBuild public class NewBuild
@@ -24,8 +24,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(PvpSeasonID); _worldPacket.WriteInt32(PvpSeasonID);
_worldPacket.WriteInt32(Unknown1027_1); _worldPacket.WriteInt32(Unknown1027_1);
_worldPacket.WriteBit(WeeklyRewardChestsEnabled); _worldPacket.WriteBit(WeeklyRewardChestsEnabled);
_worldPacket.WriteBit(Unknown1027_2); _worldPacket.WriteBit(CurrentArenaSeasonUsesTeams);
_worldPacket.WriteBit(Unknown1027_3); _worldPacket.WriteBit(PreviousArenaSeasonUsesTeams);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
} }
@@ -37,8 +37,8 @@ namespace Game.Networking.Packets
public int ConquestWeeklyProgressCurrencyID; public int ConquestWeeklyProgressCurrencyID;
public int Unknown1027_1; public int Unknown1027_1;
public bool WeeklyRewardChestsEnabled; public bool WeeklyRewardChestsEnabled;
public bool Unknown1027_2; public bool CurrentArenaSeasonUsesTeams;
public bool Unknown1027_3; public bool PreviousArenaSeasonUsesTeams;
} }
public class AreaSpiritHealerQuery : ClientPacket public class AreaSpiritHealerQuery : ClientPacket
@@ -167,7 +167,7 @@ namespace Game.Networking.Packets
Hdr.Write(_worldPacket); Hdr.Write(_worldPacket);
_worldPacket.WriteUInt32(AverageWaitTime); _worldPacket.WriteUInt32(AverageWaitTime);
_worldPacket.WriteUInt32(WaitTime); _worldPacket.WriteUInt32(WaitTime);
_worldPacket.WriteInt32(Unused920); _worldPacket.WriteInt32(SpecSelected);
_worldPacket.WriteBit(AsGroup); _worldPacket.WriteBit(AsGroup);
_worldPacket.WriteBit(EligibleForMatchmaking); _worldPacket.WriteBit(EligibleForMatchmaking);
_worldPacket.WriteBit(SuspendedQueue); _worldPacket.WriteBit(SuspendedQueue);
@@ -180,7 +180,7 @@ namespace Game.Networking.Packets
public bool SuspendedQueue; public bool SuspendedQueue;
public bool EligibleForMatchmaking; public bool EligibleForMatchmaking;
public uint WaitTime; public uint WaitTime;
public int Unused920; public int SpecSelected;
} }
public class BattlefieldStatusFailed : ServerPacket public class BattlefieldStatusFailed : ServerPacket
@@ -582,8 +582,8 @@ namespace Game.Networking.Packets
public int Ranking; public int Ranking;
public int SeasonPlayed; public int SeasonPlayed;
public int SeasonWon; public int SeasonWon;
public int Unused1; public int SeasonFactionPlayed;
public int Unused2; public int SeasonFactionWon;
public int WeeklyPlayed; public int WeeklyPlayed;
public int WeeklyWon; public int WeeklyWon;
public int RoundsSeasonPlayed; public int RoundsSeasonPlayed;
@@ -594,9 +594,9 @@ namespace Game.Networking.Packets
public int LastWeeksBestRating; public int LastWeeksBestRating;
public int BestSeasonRating; public int BestSeasonRating;
public int PvpTierID; public int PvpTierID;
public int Unused3; public int SeasonPvpTier;
public int Unused4; public int BestWeeklyPvpTier;
public int Rank; public int BestSeasonPvpTierEnum;
public bool Disqualified; public bool Disqualified;
public void Write(WorldPacket data) public void Write(WorldPacket data)
@@ -605,8 +605,8 @@ namespace Game.Networking.Packets
data.WriteInt32(Ranking); data.WriteInt32(Ranking);
data.WriteInt32(SeasonPlayed); data.WriteInt32(SeasonPlayed);
data.WriteInt32(SeasonWon); data.WriteInt32(SeasonWon);
data.WriteInt32(Unused1); data.WriteInt32(SeasonFactionPlayed);
data.WriteInt32(Unused2); data.WriteInt32(SeasonFactionWon);
data.WriteInt32(WeeklyPlayed); data.WriteInt32(WeeklyPlayed);
data.WriteInt32(WeeklyWon); data.WriteInt32(WeeklyWon);
data.WriteInt32(RoundsSeasonPlayed); data.WriteInt32(RoundsSeasonPlayed);
@@ -617,9 +617,9 @@ namespace Game.Networking.Packets
data.WriteInt32(LastWeeksBestRating); data.WriteInt32(LastWeeksBestRating);
data.WriteInt32(BestSeasonRating); data.WriteInt32(BestSeasonRating);
data.WriteInt32(PvpTierID); data.WriteInt32(PvpTierID);
data.WriteInt32(Unused3); data.WriteInt32(SeasonPvpTier);
data.WriteInt32(Unused4); data.WriteInt32(BestWeeklyPvpTier);
data.WriteInt32(Rank); data.WriteInt32(BestSeasonPvpTierEnum);
data.WriteBit(Disqualified); data.WriteBit(Disqualified);
data.FlushBits(); data.FlushBits();
} }
@@ -724,6 +724,13 @@ namespace Game.Networking.Packets
//Structs //Structs
struct CalendarAddEventInviteInfo struct CalendarAddEventInviteInfo
{ {
public ObjectGuid Guid;
public byte Status;
public byte Moderator;
public ObjectGuid? BnetAccountID;
public ulong? RealmAddress;
public ulong? CommunityID;
public void Read(WorldPacket data) public void Read(WorldPacket data)
{ {
Guid = data.ReadPackedGuid(); Guid = data.ReadPackedGuid();
@@ -735,19 +742,12 @@ namespace Game.Networking.Packets
bool hasUnused801_3 = data.HasBit(); bool hasUnused801_3 = data.HasBit();
if (hasUnused801_1) if (hasUnused801_1)
Unused801_1 = data.ReadPackedGuid(); BnetAccountID = data.ReadPackedGuid();
if (hasUnused801_2) if (hasUnused801_2)
Unused801_2 = data.ReadUInt64(); RealmAddress = data.ReadUInt64();
if (hasUnused801_3) if (hasUnused801_3)
Unused801_3 = data.ReadUInt64(); CommunityID = data.ReadUInt64();
} }
public ObjectGuid Guid;
public byte Status;
public byte Moderator;
public ObjectGuid? Unused801_1;
public ulong? Unused801_2;
public ulong? Unused801_3;
} }
class CalendarAddEventInfo class CalendarAddEventInfo
@@ -29,11 +29,11 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(Success); _worldPacket.WriteBit(Success);
_worldPacket.WriteBit(Realmless); _worldPacket.WriteBit(Realmless);
_worldPacket.WriteBit(IsDeletedCharacters); _worldPacket.WriteBit(IsDeletedCharacters);
_worldPacket.WriteBit(IsNewPlayerRestrictionSkipped); _worldPacket.WriteBit(IgnoreNewPlayerRestrictions);
_worldPacket.WriteBit(IsNewPlayerRestricted); _worldPacket.WriteBit(IsRestrictedNewPlayer);
_worldPacket.WriteBit(IsNewPlayer); _worldPacket.WriteBit(IsNewcomerChatCompleted);
_worldPacket.WriteBit(IsTrialAccountRestricted); _worldPacket.WriteBit(IsRestrictedTrial);
_worldPacket.WriteBit(DisabledClassesMask.HasValue); _worldPacket.WriteBit(ClassDisableMask.HasValue);
_worldPacket.WriteBit(DontCreateCharacterDisplays); _worldPacket.WriteBit(DontCreateCharacterDisplays);
_worldPacket.WriteInt32(Characters.Count); _worldPacket.WriteInt32(Characters.Count);
_worldPacket.WriteInt32(RegionwideCharacters.Count); _worldPacket.WriteInt32(RegionwideCharacters.Count);
@@ -43,8 +43,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(RaceLimitDisables.Count); _worldPacket.WriteInt32(RaceLimitDisables.Count);
_worldPacket.WriteInt32(WarbandGroups.Count); _worldPacket.WriteInt32(WarbandGroups.Count);
if (DisabledClassesMask.HasValue) if (ClassDisableMask.HasValue)
_worldPacket.WriteUInt32(DisabledClassesMask.Value); _worldPacket.WriteUInt32(ClassDisableMask.Value);
foreach (UnlockedConditionalAppearance unlockedConditionalAppearance in UnlockedConditionalAppearances) foreach (UnlockedConditionalAppearance unlockedConditionalAppearance in UnlockedConditionalAppearances)
unlockedConditionalAppearance.Write(_worldPacket); unlockedConditionalAppearance.Write(_worldPacket);
@@ -68,14 +68,14 @@ namespace Game.Networking.Packets
public bool Success; public bool Success;
public bool Realmless; public bool Realmless;
public bool IsDeletedCharacters; // used for character undelete list public bool IsDeletedCharacters; // used for character undelete list
public bool IsNewPlayerRestrictionSkipped; // allows client to skip new player restrictions public bool IgnoreNewPlayerRestrictions; // allows client to skip new player restrictions
public bool IsNewPlayerRestricted; // forbids using level boost and class trials public bool IsRestrictedNewPlayer; // forbids using level boost and class trials
public bool IsNewPlayer; // forbids hero classes and allied races public bool IsNewcomerChatCompleted; // forbids hero classes and allied races
public bool IsTrialAccountRestricted; public bool IsRestrictedTrial;
public bool DontCreateCharacterDisplays; public bool DontCreateCharacterDisplays;
public int MaxCharacterLevel = 1; public int MaxCharacterLevel = 1;
public uint? DisabledClassesMask = new(); public uint? ClassDisableMask = new();
public List<CharacterInfo> Characters = new(); // all characters on the list public List<CharacterInfo> Characters = new(); // all characters on the list
public List<RegionwideCharacterListEntry> RegionwideCharacters = new(); public List<RegionwideCharacterListEntry> RegionwideCharacters = new();
@@ -150,7 +150,7 @@ namespace Game.Networking.Packets
StringArray equipment = new(fields.Read<string>(17), ' '); StringArray equipment = new(fields.Read<string>(17), ' ');
ListPosition = fields.Read<byte>(19); ListPosition = fields.Read<byte>(19);
LastPlayedTime = fields.Read<long>(20); LastActiveTime = fields.Read<long>(20);
var spec = Global.DB2Mgr.GetChrSpecializationByIndex(ClassId, fields.Read<byte>(21)); var spec = Global.DB2Mgr.GetChrSpecializationByIndex(ClassId, fields.Read<byte>(21));
if (spec != null) if (spec != null)
@@ -197,7 +197,7 @@ namespace Game.Networking.Packets
data.WriteUInt32((uint)Flags); data.WriteUInt32((uint)Flags);
data.WriteUInt32((uint)Flags2); data.WriteUInt32((uint)Flags2);
data.WriteUInt32(Flags3); data.WriteUInt32(Flags3);
data.WriteUInt8(unkWod61x); data.WriteUInt8(CantLoginReason);
data.WriteUInt32(PetCreatureDisplayId); data.WriteUInt32(PetCreatureDisplayId);
data.WriteUInt32(PetExperienceLevel); data.WriteUInt32(PetExperienceLevel);
@@ -206,8 +206,8 @@ namespace Game.Networking.Packets
foreach (var visualItem in VisualItems) foreach (var visualItem in VisualItems)
visualItem.Write(data); visualItem.Write(data);
data.WriteInt32(Unknown703); data.WriteInt32(SaveVersion);
data.WriteInt64(LastPlayedTime); data.WriteInt64(LastActiveTime);
data.WriteInt32(LastLoginVersion); data.WriteInt32(LastLoginVersion);
PersonalTabard.Write(data); PersonalTabard.Write(data);
@@ -248,10 +248,10 @@ namespace Game.Networking.Packets
public CharacterCustomizeFlags Flags2; // Character customization flags @see enum CharacterCustomizeFlags public CharacterCustomizeFlags Flags2; // Character customization flags @see enum CharacterCustomizeFlags
public uint Flags3; // Character flags 3 @todo research public uint Flags3; // Character flags 3 @todo research
public bool FirstLogin; public bool FirstLogin;
public byte unkWod61x; public byte CantLoginReason;
public long LastPlayedTime; public long LastActiveTime;
public short SpecID; public short SpecID;
public int Unknown703; public int SaveVersion;
public int LastLoginVersion; public int LastLoginVersion;
public uint OverrideSelectScreenFileDataID; public uint OverrideSelectScreenFileDataID;
public int TimerunningSeasonID; public int TimerunningSeasonID;
@@ -295,7 +295,7 @@ namespace Game.Networking.Packets
public class CharacterRestrictionAndMailData public class CharacterRestrictionAndMailData
{ {
public bool BoostInProgress; ///< @todo public bool BoostInProgress; ///< @todo
public uint Flags4; public uint RestrictionFlags;
public List<string> MailSenders = new(); public List<string> MailSenders = new();
public List<uint> MailSenderTypes = new(); public List<uint> MailSenderTypes = new();
public bool RpeResetAvailable; public bool RpeResetAvailable;
@@ -310,7 +310,7 @@ namespace Game.Networking.Packets
data.WriteBit(RpeResetQuestClearAvailable); data.WriteBit(RpeResetQuestClearAvailable);
data.FlushBits(); data.FlushBits();
data.WriteUInt32(Flags4); data.WriteUInt32(RestrictionFlags);
data.WriteInt32(MailSenders.Count); data.WriteInt32(MailSenders.Count);
data.WriteInt32(MailSenderTypes.Count); data.WriteInt32(MailSenderTypes.Count);
@@ -373,46 +373,46 @@ namespace Game.Networking.Packets
public struct RaceUnlock public struct RaceUnlock
{ {
public int RaceID;
public bool HasUnlockedLicense;
public bool HasUnlockedAchievement;
public bool HasHeritageArmorUnlockAchievement;
public bool HideRaceOnClient;
public bool Unused1027;
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WriteInt32(RaceID); data.WriteInt32(RaceID);
data.WriteBit(HasExpansion); data.WriteBit(HasUnlockedLicense);
data.WriteBit(HasAchievement); data.WriteBit(HasUnlockedAchievement);
data.WriteBit(HasHeritageArmor); data.WriteBit(HasHeritageArmorUnlockAchievement);
data.WriteBit(IsLocked); data.WriteBit(HideRaceOnClient);
data.WriteBit(Unused1027); data.WriteBit(Unused1027);
data.FlushBits(); data.FlushBits();
} }
public int RaceID;
public bool HasExpansion;
public bool HasAchievement;
public bool HasHeritageArmor;
public bool IsLocked;
public bool Unused1027;
} }
public struct UnlockedConditionalAppearance public struct UnlockedConditionalAppearance
{ {
public int AchievementID;
public int ConditionalType;
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WriteInt32(AchievementID); data.WriteInt32(AchievementID);
data.WriteInt32(Unused); data.WriteInt32(ConditionalType);
} }
public int AchievementID;
public int Unused;
} }
public struct RaceLimitDisableInfo public struct RaceLimitDisableInfo
{ {
public int RaceID; public int RaceID;
public int BlockReason; public int Reason;
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WriteInt32(RaceID); data.WriteInt32(RaceID);
data.WriteInt32(BlockReason); data.WriteInt32(Reason);
} }
} }
} }
@@ -191,7 +191,7 @@ namespace Game.Networking.Packets
Clear(); Clear();
SenderGUID.Clear(); SenderGUID.Clear();
SenderAccountGUID.Clear(); SenderWowAccount.Clear();
SenderGuildGUID.Clear(); SenderGuildGUID.Clear();
TargetGUID.Clear(); TargetGUID.Clear();
SenderName = ""; SenderName = "";
@@ -226,7 +226,7 @@ namespace Game.Networking.Packets
Player playerSender = sender.ToPlayer(); Player playerSender = sender.ToPlayer();
if (playerSender != null) if (playerSender != null)
{ {
SenderAccountGUID = playerSender.GetSession().GetAccountGUID(); SenderWowAccount = playerSender.GetSession().GetAccountGUID();
_ChatFlags = playerSender.GetChatFlags(); _ChatFlags = playerSender.GetChatFlags();
SenderGuildGUID = ObjectGuid.Create(HighGuid.Guild, playerSender.GetGuildId()); SenderGuildGUID = ObjectGuid.Create(HighGuid.Guild, playerSender.GetGuildId());
@@ -248,7 +248,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32((uint)_Language); _worldPacket.WriteUInt32((uint)_Language);
_worldPacket.WritePackedGuid(SenderGUID); _worldPacket.WritePackedGuid(SenderGUID);
_worldPacket.WritePackedGuid(SenderGuildGUID); _worldPacket.WritePackedGuid(SenderGuildGUID);
_worldPacket.WritePackedGuid(SenderAccountGUID); _worldPacket.WritePackedGuid(SenderWowAccount);
_worldPacket.WritePackedGuid(TargetGUID); _worldPacket.WritePackedGuid(TargetGUID);
_worldPacket.WriteUInt32(TargetVirtualAddress); _worldPacket.WriteUInt32(TargetVirtualAddress);
_worldPacket.WriteUInt32(SenderVirtualAddress); _worldPacket.WriteUInt32(SenderVirtualAddress);
@@ -263,7 +263,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBits(ChatText.GetByteCount(), 12); _worldPacket.WriteBits(ChatText.GetByteCount(), 12);
_worldPacket.WriteBit(HideChatLog); _worldPacket.WriteBit(HideChatLog);
_worldPacket.WriteBit(FakeSenderName); _worldPacket.WriteBit(FakeSenderName);
_worldPacket.WriteBit(Unused_801.HasValue); _worldPacket.WriteBit(BroadcastTextID.HasValue);
_worldPacket.WriteBit(ChannelGUID.HasValue); _worldPacket.WriteBit(ChannelGUID.HasValue);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
@@ -273,8 +273,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteString(Channel); _worldPacket.WriteString(Channel);
_worldPacket.WriteString(ChatText); _worldPacket.WriteString(ChatText);
if (Unused_801.HasValue) if (BroadcastTextID.HasValue)
_worldPacket.WriteUInt32(Unused_801.Value); _worldPacket.WriteUInt32(BroadcastTextID.Value);
if (ChannelGUID.HasValue) if (ChannelGUID.HasValue)
_worldPacket.WritePackedGuid(ChannelGUID.Value); _worldPacket.WritePackedGuid(ChannelGUID.Value);
@@ -284,7 +284,7 @@ namespace Game.Networking.Packets
public Language _Language = Language.Universal; public Language _Language = Language.Universal;
public ObjectGuid SenderGUID; public ObjectGuid SenderGUID;
public ObjectGuid SenderGuildGUID; public ObjectGuid SenderGuildGUID;
public ObjectGuid SenderAccountGUID; public ObjectGuid SenderWowAccount;
public ObjectGuid TargetGUID; public ObjectGuid TargetGUID;
public uint SenderVirtualAddress; public uint SenderVirtualAddress;
public uint TargetVirtualAddress; public uint TargetVirtualAddress;
@@ -297,7 +297,7 @@ namespace Game.Networking.Packets
public ChatFlags _ChatFlags; public ChatFlags _ChatFlags;
public float DisplayTime; public float DisplayTime;
public uint SpellID; public uint SpellID;
public uint? Unused_801; public uint? BroadcastTextID;
public bool HideChatLog; public bool HideChatLog;
public bool FakeSenderName; public bool FakeSenderName;
public ObjectGuid? ChannelGUID; public ObjectGuid? ChannelGUID;
@@ -209,16 +209,16 @@ namespace Game.Networking.Packets
public override void Read() public override void Read()
{ {
uint nameLen = _worldPacket.ReadBits<uint>(9); uint nameLen = _worldPacket.ReadBits<uint>(9);
bool hasUnused910 = _worldPacket.HasBit(); bool hasArenaTeam = _worldPacket.HasBit();
Name = _worldPacket.ReadString(nameLen); Name = _worldPacket.ReadString(nameLen);
if (hasUnused910) if (hasArenaTeam)
Unused910 = _worldPacket.ReadInt32(); ArenaTeam = _worldPacket.ReadInt32();
} }
public string Name; public string Name;
public int? Unused910; public int? ArenaTeam;
} }
public class GuildInvite : ServerPacket public class GuildInvite : ServerPacket
@@ -1700,7 +1700,7 @@ namespace Game.Networking.Packets
public class GuildRewardItem public class GuildRewardItem
{ {
public uint ItemID; public uint ItemID;
public uint Unk4; public uint AchievementLogic;
public List<uint> AchievementsRequired = new(); public List<uint> AchievementsRequired = new();
public RaceMask<ulong> RaceMask; public RaceMask<ulong> RaceMask;
public int MinGuildLevel; public int MinGuildLevel;
@@ -1710,7 +1710,7 @@ namespace Game.Networking.Packets
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WriteUInt32(ItemID); data.WriteUInt32(ItemID);
data.WriteUInt32(Unk4); data.WriteUInt32(AchievementLogic);
data.WriteInt32(AchievementsRequired.Count); data.WriteInt32(AchievementsRequired.Count);
data.WriteUInt64(RaceMask.RawValue); data.WriteUInt64(RaceMask.RawValue);
data.WriteInt32(MinGuildLevel); data.WriteInt32(MinGuildLevel);
@@ -276,10 +276,30 @@ namespace Game.Networking.Packets
public struct PVPBracketData public struct PVPBracketData
{ {
public int Rating;
public int RatingID;
public int Rank;
public int WeeklyPlayed;
public int WeeklyWon;
public int SeasonPlayed;
public int SeasonWon;
public int WeeklyBestRating;
public int LastWeeksBestRating;
public int Tier;
public int WeeklyBestTier;
public int SeasonBestRating;
public int SeasonBestTierEnum;
public int RoundsSeasonPlayed;
public int RoundsSeasonWon;
public int RoundsWeeklyPlayed;
public int RoundsWeeklyWon;
public byte Bracket;
public bool Disqualified;
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WriteUInt8(Bracket); data.WriteUInt8(Bracket);
data.WriteInt32(Unused3); data.WriteInt32(RatingID);
data.WriteInt32(Rating); data.WriteInt32(Rating);
data.WriteInt32(Rank); data.WriteInt32(Rank);
data.WriteInt32(WeeklyPlayed); data.WriteInt32(WeeklyPlayed);
@@ -287,11 +307,11 @@ namespace Game.Networking.Packets
data.WriteInt32(SeasonPlayed); data.WriteInt32(SeasonPlayed);
data.WriteInt32(SeasonWon); data.WriteInt32(SeasonWon);
data.WriteInt32(WeeklyBestRating); data.WriteInt32(WeeklyBestRating);
data.WriteInt32(LastWeeksBestRating);
data.WriteInt32(Tier);
data.WriteInt32(WeeklyBestTier);
data.WriteInt32(SeasonBestRating); data.WriteInt32(SeasonBestRating);
data.WriteInt32(PvpTierID); data.WriteInt32(SeasonBestTierEnum);
data.WriteInt32(WeeklyBestWinPvpTierID);
data.WriteInt32(Unused1);
data.WriteInt32(Unused2);
data.WriteInt32(RoundsSeasonPlayed); data.WriteInt32(RoundsSeasonPlayed);
data.WriteInt32(RoundsSeasonWon); data.WriteInt32(RoundsSeasonWon);
data.WriteInt32(RoundsWeeklyPlayed); data.WriteInt32(RoundsWeeklyPlayed);
@@ -299,26 +319,6 @@ namespace Game.Networking.Packets
data.WriteBit(Disqualified); data.WriteBit(Disqualified);
data.FlushBits(); data.FlushBits();
} }
public int Rating;
public int Rank;
public int WeeklyPlayed;
public int WeeklyWon;
public int SeasonPlayed;
public int SeasonWon;
public int WeeklyBestRating;
public int SeasonBestRating;
public int PvpTierID;
public int WeeklyBestWinPvpTierID;
public int Unused1;
public int Unused2;
public int Unused3;
public int RoundsSeasonPlayed;
public int RoundsSeasonWon;
public int RoundsWeeklyPlayed;
public int RoundsWeeklyWon;
public byte Bracket;
public bool Disqualified;
} }
public class TraitInspectInfo public class TraitInspectInfo
+10 -10
View File
@@ -408,11 +408,11 @@ namespace Game.Networking.Packets
_worldPacket.WritePackedGuid(PlayerGUID); _worldPacket.WritePackedGuid(PlayerGUID);
_worldPacket.WriteUInt8(Slot); _worldPacket.WriteUInt8(Slot);
_worldPacket.WriteInt32(SlotInBag); _worldPacket.WriteInt32(SlotInBag);
_worldPacket.WriteInt32(QuestLogItemID); _worldPacket.WriteInt32(ProxyItemID);
_worldPacket.WriteUInt32(Quantity); _worldPacket.WriteUInt32(Quantity);
_worldPacket.WriteUInt32(QuantityInInventory); _worldPacket.WriteUInt32(QuantityInInventory);
_worldPacket.WriteInt32(QuantityInQuestLog); _worldPacket.WriteInt32(QuantityInQuestLog);
_worldPacket.WriteInt32(DungeonEncounterID); _worldPacket.WriteInt32(EncounterID);
_worldPacket.WriteInt32(BattlePetSpeciesID); _worldPacket.WriteInt32(BattlePetSpeciesID);
_worldPacket.WriteInt32(BattlePetBreedID); _worldPacket.WriteInt32(BattlePetBreedID);
_worldPacket.WriteUInt8(BattlePetBreedQuality); _worldPacket.WriteUInt8(BattlePetBreedQuality);
@@ -424,10 +424,10 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(Pushed); _worldPacket.WriteBit(Pushed);
_worldPacket.WriteBit(Created); _worldPacket.WriteBit(Created);
_worldPacket.WriteBit(Unused_1017); _worldPacket.WriteBit(FakeQuestItem);
_worldPacket.WriteBits((uint)DisplayText, 3); _worldPacket.WriteBits((uint)ChatNotifyType, 3);
_worldPacket.WriteBit(IsBonusRoll); _worldPacket.WriteBit(IsBonusRoll);
_worldPacket.WriteBit(IsEncounterLoot); _worldPacket.WriteBit(IsPersonalLoot);
_worldPacket.WriteBit(CraftingData != null); _worldPacket.WriteBit(CraftingData != null);
_worldPacket.WriteBit(FirstCraftOperationID.HasValue); _worldPacket.WriteBit(FirstCraftOperationID.HasValue);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
@@ -445,12 +445,12 @@ namespace Game.Networking.Packets
public byte Slot; public byte Slot;
public int SlotInBag; public int SlotInBag;
public ItemInstance Item = new(); public ItemInstance Item = new();
public int QuestLogItemID;// Item ID used for updating quest progress public int ProxyItemID;// Item ID used for updating quest progress
// only set if different than real ID (similar to CreatureTemplate.KillCredit) // only set if different than real ID (similar to CreatureTemplate.KillCredit)
public uint Quantity; public uint Quantity;
public uint QuantityInInventory; public uint QuantityInInventory;
public int QuantityInQuestLog; public int QuantityInQuestLog;
public int DungeonEncounterID; public int EncounterID;
public int BattlePetSpeciesID; public int BattlePetSpeciesID;
public int BattlePetBreedID; public int BattlePetBreedID;
public byte BattlePetBreedQuality; public byte BattlePetBreedQuality;
@@ -460,11 +460,11 @@ namespace Game.Networking.Packets
public CraftingData CraftingData; public CraftingData CraftingData;
public uint? FirstCraftOperationID; public uint? FirstCraftOperationID;
public bool Pushed; public bool Pushed;
public DisplayType DisplayText; public DisplayType ChatNotifyType;
public bool Created; public bool Created;
public bool Unused_1017; public bool FakeQuestItem;
public bool IsBonusRoll; public bool IsBonusRoll;
public bool IsEncounterLoot; public bool IsPersonalLoot;
public enum DisplayType public enum DisplayType
{ {
+19 -19
View File
@@ -17,7 +17,7 @@ namespace Game.Networking.Packets
{ {
QueueAsGroup = _worldPacket.HasBit(); QueueAsGroup = _worldPacket.HasBit();
bool hasPartyIndex = _worldPacket.HasBit(); bool hasPartyIndex = _worldPacket.HasBit();
Unknown = _worldPacket.HasBit(); Mercenary = _worldPacket.HasBit();
Roles = (LfgRoles)_worldPacket.ReadUInt32(); Roles = (LfgRoles)_worldPacket.ReadUInt32();
var slotsCount = _worldPacket.ReadInt32(); var slotsCount = _worldPacket.ReadInt32();
@@ -29,7 +29,7 @@ namespace Game.Networking.Packets
} }
public bool QueueAsGroup; public bool QueueAsGroup;
public bool Unknown; // Always false in 7.2.5 public bool Mercenary;
public byte? PartyIndex; public byte? PartyIndex;
public LfgRoles Roles; public LfgRoles Roles;
public List<uint> Slots = new(); public List<uint> Slots = new();
@@ -184,7 +184,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(Joined); _worldPacket.WriteBit(Joined);
_worldPacket.WriteBit(LfgJoined); _worldPacket.WriteBit(LfgJoined);
_worldPacket.WriteBit(Queued); _worldPacket.WriteBit(Queued);
_worldPacket.WriteBit(Unused); _worldPacket.WriteBit(Brawl);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
} }
@@ -200,7 +200,7 @@ namespace Game.Networking.Packets
public bool Joined; public bool Joined;
public bool LfgJoined; public bool LfgJoined;
public bool Queued; public bool Queued;
public bool Unused; public bool Brawl;
} }
class RoleChosen : ServerPacket class RoleChosen : ServerPacket
@@ -368,10 +368,10 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(CompletedMask); _worldPacket.WriteUInt32(CompletedMask);
_worldPacket.WriteUInt32(EncounterMask); _worldPacket.WriteUInt32(EncounterMask);
_worldPacket.WriteInt32(Players.Count); _worldPacket.WriteInt32(Players.Count);
_worldPacket.WriteUInt8(Unused); _worldPacket.WriteUInt8(PromisedShortageRolePriority);
_worldPacket.WriteBit(ValidCompletedMask); _worldPacket.WriteBit(ValidCompletedMask);
_worldPacket.WriteBit(ProposalSilent); _worldPacket.WriteBit(ProposalSilent);
_worldPacket.WriteBit(IsRequeue); _worldPacket.WriteBit(FailedByMyParty);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
foreach (var player in Players) foreach (var player in Players)
@@ -385,10 +385,10 @@ namespace Game.Networking.Packets
public byte State; public byte State;
public uint CompletedMask; public uint CompletedMask;
public uint EncounterMask; public uint EncounterMask;
public byte Unused; public byte PromisedShortageRolePriority;
public bool ValidCompletedMask; public bool ValidCompletedMask;
public bool ProposalSilent; public bool ProposalSilent;
public bool IsRequeue; public bool FailedByMyParty;
public List<LFGProposalUpdatePlayer> Players = new(); public List<LFGProposalUpdatePlayer> Players = new();
} }
@@ -532,19 +532,19 @@ namespace Game.Networking.Packets
} }
data.WriteBit(RewardSpellID.HasValue); data.WriteBit(RewardSpellID.HasValue);
data.WriteBit(Unused1.HasValue); data.WriteBit(ArtifactXPCategory.HasValue);
data.WriteBit(Unused2.HasValue); data.WriteBit(ArtifactXP.HasValue);
data.WriteBit(Honor.HasValue); data.WriteBit(Honor.HasValue);
data.FlushBits(); data.FlushBits();
if (RewardSpellID.HasValue) if (RewardSpellID.HasValue)
data.WriteInt32(RewardSpellID.Value); data.WriteInt32(RewardSpellID.Value);
if (Unused1.HasValue) if (ArtifactXPCategory.HasValue)
data.WriteInt32(Unused1.Value); data.WriteInt32(ArtifactXPCategory.Value);
if (Unused2.HasValue) if (ArtifactXP.HasValue)
data.WriteUInt64(Unused2.Value); data.WriteUInt64(ArtifactXP.Value);
if (Honor.HasValue) if (Honor.HasValue)
data.WriteInt32(Honor.Value); data.WriteInt32(Honor.Value);
@@ -557,8 +557,8 @@ namespace Game.Networking.Packets
public List<LfgPlayerQuestRewardCurrency> Currency = new(); public List<LfgPlayerQuestRewardCurrency> Currency = new();
public List<LfgPlayerQuestRewardCurrency> BonusCurrency = new(); public List<LfgPlayerQuestRewardCurrency> BonusCurrency = new();
public int? RewardSpellID; // Only used by SMSG_LFG_PLAYER_INFO public int? RewardSpellID; // Only used by SMSG_LFG_PLAYER_INFO
public int? Unused1; public int? ArtifactXPCategory;
public ulong? Unused2; public ulong? ArtifactXP;
public int? Honor; // Only used by SMSG_REQUEST_PVP_REWARDS_RESPONSE public int? Honor; // Only used by SMSG_REQUEST_PVP_REWARDS_RESPONSE
} }
@@ -754,7 +754,7 @@ namespace Game.Networking.Packets
Id = data.ReadUInt32(); Id = data.ReadUInt32();
Type = (RideType)data.ReadUInt32(); Type = (RideType)data.ReadUInt32();
Time = data.ReadInt64(); Time = data.ReadInt64();
Unknown925 = data.HasBit(); IsCrossFaction = data.HasBit();
data.ResetBitPos(); data.ResetBitPos();
} }
@@ -764,7 +764,7 @@ namespace Game.Networking.Packets
data.WriteUInt32(Id); data.WriteUInt32(Id);
data.WriteUInt32((uint)Type); data.WriteUInt32((uint)Type);
data.WriteInt64(Time); data.WriteInt64(Time);
data.WriteBit(Unknown925); data.WriteBit(IsCrossFaction);
data.FlushBits(); data.FlushBits();
} }
@@ -772,7 +772,7 @@ namespace Game.Networking.Packets
public uint Id; public uint Id;
public RideType Type; public RideType Type;
public long Time; public long Time;
public bool Unknown925; public bool IsCrossFaction;
} }
public enum RideType public enum RideType
@@ -1192,7 +1192,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(IsFullUpdate); _worldPacket.WriteBit(IsFullUpdate);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
_worldPacket.WriteInt32(Unk); _worldPacket.WriteInt32(ItemCollectionType);
// both lists have to have the same size // both lists have to have the same size
_worldPacket.WriteInt32(Heirlooms.Count); _worldPacket.WriteInt32(Heirlooms.Count);
@@ -1207,7 +1207,7 @@ namespace Game.Networking.Packets
public bool IsFullUpdate; public bool IsFullUpdate;
public Dictionary<uint, HeirloomData> Heirlooms = new(); public Dictionary<uint, HeirloomData> Heirlooms = new();
public int Unk; public int ItemCollectionType;
} }
class MountSpecial : ClientPacket class MountSpecial : ClientPacket
@@ -359,7 +359,7 @@ namespace Game.Networking.Packets
data.WriteUInt32(movementForce.TransportID); data.WriteUInt32(movementForce.TransportID);
data.WriteFloat(movementForce.Magnitude); data.WriteFloat(movementForce.Magnitude);
data.WriteInt32(movementForce.Unused910); data.WriteInt32(movementForce.MovementForceID);
data.WriteBits((byte)movementForce.Type, 2); data.WriteBits((byte)movementForce.Type, 2);
data.FlushBits(); data.FlushBits();
} }
@@ -1467,7 +1467,7 @@ namespace Game.Networking.Packets
data.WriteBits((byte)Face, 2); data.WriteBits((byte)Face, 2);
data.WriteBits(Points.Count, 16); data.WriteBits(Points.Count, 16);
data.WriteBit(VehicleExitVoluntary); data.WriteBit(VehicleExitVoluntary);
data.WriteBit(Interpolate); data.WriteBit(TaxiSmoothing);
data.WriteBits(PackedDeltas.Count, 16); data.WriteBits(PackedDeltas.Count, 16);
data.WriteBit(SplineFilter != null); data.WriteBit(SplineFilter != null);
data.WriteBit(SpellEffectExtraData.HasValue); data.WriteBit(SpellEffectExtraData.HasValue);
@@ -1520,7 +1520,7 @@ namespace Game.Networking.Packets
public List<Vector3> Points = new(); // Spline path public List<Vector3> Points = new(); // Spline path
public byte Mode; // Spline mode - actually always 0 in this packet - Catmullrom mode appears only in SMSG_UPDATE_OBJECT. In this packet it is determined by flags public byte Mode; // Spline mode - actually always 0 in this packet - Catmullrom mode appears only in SMSG_UPDATE_OBJECT. In this packet it is determined by flags
public bool VehicleExitVoluntary; public bool VehicleExitVoluntary;
public bool Interpolate; public bool TaxiSmoothing;
public ObjectGuid TransportGUID; public ObjectGuid TransportGUID;
public sbyte VehicleSeat = -1; public sbyte VehicleSeat = -1;
public List<Vector3> PackedDeltas = new(); public List<Vector3> PackedDeltas = new();
@@ -1545,14 +1545,14 @@ namespace Game.Networking.Packets
{ {
data.WriteUInt32(Id); data.WriteUInt32(Id);
data.WriteBit(CrzTeleport); data.WriteBit(CrzTeleport);
data.WriteBits(StopDistanceTolerance, 3); data.WriteBits(StopSplineStyle, 3);
Move.Write(data); Move.Write(data);
} }
public uint Id; public uint Id;
public bool CrzTeleport; public bool CrzTeleport;
public byte StopDistanceTolerance; // Determines how far from spline destination the mover is allowed to stop in place 0, 0, 3.0, 2.76, numeric_limits<float>::max, 1.1, float(INT_MAX); default before this field existed was distance 3.0 (index 2) public byte StopSplineStyle; // Determines how far from spline destination the mover is allowed to stop in place 0, 0, 3.0, 2.76, numeric_limits<float>::max, 1.1, float(INT_MAX); default before this field existed was distance 3.0 (index 2)
public MovementSpline Move; public MovementSpline Move;
} }
+18 -15
View File
@@ -84,19 +84,19 @@ namespace Game.Networking.Packets
public override void Write() public override void Write()
{ {
_worldPacket.WriteBit(CanAccept); _worldPacket.WriteBit(CanAccept);
_worldPacket.WriteBit(MightCRZYou);
_worldPacket.WriteBit(IsXRealm); _worldPacket.WriteBit(IsXRealm);
_worldPacket.WriteBit(MustBeBNetFriend); _worldPacket.WriteBit(IsXNativeRealm);
_worldPacket.WriteBit(ShouldSquelch);
_worldPacket.WriteBit(AllowMultipleRoles); _worldPacket.WriteBit(AllowMultipleRoles);
_worldPacket.WriteBit(QuestSessionActive); _worldPacket.WriteBit(QuestSessionActive);
_worldPacket.WriteBits(InviterName.GetByteCount(), 6); _worldPacket.WriteBits(InviterName.GetByteCount(), 6);
_worldPacket.WriteBit(Unused1102); _worldPacket.WriteBit(IsCrossFaction);
InviterRealm.Write(_worldPacket); InviterRealm.Write(_worldPacket);
_worldPacket.WritePackedGuid(InviterGUID); _worldPacket.WritePackedGuid(InviterGUID);
_worldPacket.WritePackedGuid(InviterBNetAccountId); _worldPacket.WritePackedGuid(InviterBNetAccountId);
_worldPacket.WriteUInt16(Unk1); _worldPacket.WriteUInt16(InviterCfgRealmID);
_worldPacket.WriteUInt8(ProposedRoles); _worldPacket.WriteUInt8(ProposedRoles);
_worldPacket.WriteInt32(LfgSlots.Count); _worldPacket.WriteInt32(LfgSlots.Count);
_worldPacket.WriteInt32(LfgCompletedMask); _worldPacket.WriteInt32(LfgCompletedMask);
@@ -107,12 +107,11 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(LfgSlot); _worldPacket.WriteInt32(LfgSlot);
} }
public bool MightCRZYou; public bool ShouldSquelch;
public bool MustBeBNetFriend;
public bool AllowMultipleRoles; public bool AllowMultipleRoles;
public bool QuestSessionActive; public bool QuestSessionActive;
public bool Unused1102; public bool IsCrossFaction;
public ushort Unk1; public ushort InviterCfgRealmID;
public bool CanAccept; public bool CanAccept;
@@ -124,6 +123,7 @@ namespace Game.Networking.Packets
// Realm // Realm
public bool IsXRealm; public bool IsXRealm;
public bool IsXNativeRealm;
// Lfg // Lfg
public byte ProposedRoles; public byte ProposedRoles;
@@ -362,8 +362,11 @@ namespace Game.Networking.Packets
MemberStats.PetStats.Auras.Add(aura); MemberStats.PetStats.Auras.Add(aura);
} }
} }
MemberStats.ChromieTime.ConditionalFlags = player.m_playerData.CtrOptions.GetValue().ConditionalFlags;
MemberStats.ChromieTime.FactionGroup = (int)player.m_playerData.CtrOptions.GetValue().FactionGroup;
MemberStats.ChromieTime.ChromieTimeExpansionMask = player.m_playerData.CtrOptions.GetValue().ChromieTimeExpansionMask;
} }
public bool ForEnemy; public bool ForEnemy;
@@ -1163,15 +1166,15 @@ namespace Game.Networking.Packets
public struct CTROptions public struct CTROptions
{ {
public uint ContentTuningConditionMask; public uint ConditionalFlags;
public int Unused901; public int FactionGroup;
public uint ExpansionLevelMask; public uint ChromieTimeExpansionMask;
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WriteUInt32(ContentTuningConditionMask); data.WriteUInt32(ConditionalFlags);
data.WriteInt32(Unused901); data.WriteInt32(FactionGroup);
data.WriteUInt32(ExpansionLevelMask); data.WriteUInt32(ChromieTimeExpansionMask);
} }
} }
@@ -77,13 +77,13 @@ namespace Game.Networking.Packets
uint titleLen = _worldPacket.ReadBits<uint>(7); uint titleLen = _worldPacket.ReadBits<uint>(7);
Unit = _worldPacket.ReadPackedGuid(); Unit = _worldPacket.ReadPackedGuid();
Unused910 = _worldPacket.ReadUInt32(); Muid = _worldPacket.ReadUInt32();
Title = _worldPacket.ReadString(titleLen); Title = _worldPacket.ReadString(titleLen);
} }
public ObjectGuid Unit; public ObjectGuid Unit;
public string Title; public string Title;
public uint Unused910; public uint Muid;
} }
public class PetitionShowSignatures : ClientPacket public class PetitionShowSignatures : ClientPacket
+18 -16
View File
@@ -614,6 +614,7 @@ namespace Game.Networking.Packets
Sex = player.GetNativeGender(); Sex = player.GetNativeGender();
ClassID = player.GetClass(); ClassID = player.GetClass();
Level = (byte)player.GetLevel(); Level = (byte)player.GetLevel();
PvpFaction = (byte)(player.GetTeamId() == BattleGroundTeamId.Alliance ? 1 : 0);
TimerunningSeasonID = player.m_activePlayerData.TimerunningSeasonID; TimerunningSeasonID = player.m_activePlayerData.TimerunningSeasonID;
DeclinedNames names = player.GetDeclinedNames(); DeclinedNames names = player.GetDeclinedNames();
@@ -632,6 +633,7 @@ namespace Game.Networking.Packets
Sex = characterInfo.Sex; Sex = characterInfo.Sex;
ClassID = characterInfo.ClassId; ClassID = characterInfo.ClassId;
Level = characterInfo.Level; Level = characterInfo.Level;
PvpFaction = (byte)(Player.TeamIdForRace(characterInfo.RaceId) == BattleGroundTeamId.Alliance ? 1 : 0);
} }
IsDeleted = characterInfo.IsDeleted; IsDeleted = characterInfo.IsDeleted;
@@ -662,7 +664,7 @@ namespace Game.Networking.Packets
data.WriteUInt8((byte)Sex); data.WriteUInt8((byte)Sex);
data.WriteUInt8((byte)ClassID); data.WriteUInt8((byte)ClassID);
data.WriteUInt8(Level); data.WriteUInt8(Level);
data.WriteUInt8(Unused915); data.WriteUInt8(PvpFaction);
data.WriteInt32(TimerunningSeasonID); data.WriteInt32(TimerunningSeasonID);
data.WriteString(Name); data.WriteString(Name);
} }
@@ -678,25 +680,25 @@ namespace Game.Networking.Packets
public Gender Sex = Gender.None; public Gender Sex = Gender.None;
public Class ClassID = Class.None; public Class ClassID = Class.None;
public byte Level; public byte Level;
public byte Unused915; public byte PvpFaction;
public int TimerunningSeasonID; public int TimerunningSeasonID;
public DeclinedName DeclinedNames = new(); public DeclinedName DeclinedNames = new();
} }
public class NameCacheUnused920 public class GuildGuidLookupData
{ {
public uint Unused1; public uint VirtualRealmAddress;
public ObjectGuid Unused2; public ObjectGuid Guid;
public string Unused3 = ""; public string Name = "";
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WriteUInt32(Unused1); data.WriteUInt32(VirtualRealmAddress);
data.WritePackedGuid(Unused2); data.WritePackedGuid(Guid);
data.WriteBits(Unused3.GetByteCount(), 7); data.WriteBits(Name.GetByteCount(), 7);
data.FlushBits(); data.FlushBits();
data.WriteString(Unused3); data.WriteString(Name);
} }
} }
@@ -705,21 +707,21 @@ namespace Game.Networking.Packets
public ObjectGuid Player; public ObjectGuid Player;
public byte Result; // 0 - full packet, != 0 - only guid public byte Result; // 0 - full packet, != 0 - only guid
public PlayerGuidLookupData Data; public PlayerGuidLookupData Data;
public NameCacheUnused920 Unused920; public GuildGuidLookupData GuildData;
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WriteUInt8(Result); data.WriteUInt8(Result);
data.WritePackedGuid(Player); data.WritePackedGuid(Player);
data.WriteBit(Data != null); data.WriteBit(Data != null);
data.WriteBit(Unused920 != null); data.WriteBit(GuildData != null);
data.FlushBits(); data.FlushBits();
if (Data != null) if (Data != null)
Data.Write(data); Data.Write(data);
if (Unused920 != null) if (GuildData != null)
Unused920.Write(data); GuildData.Write(data);
} }
} }
@@ -837,14 +839,14 @@ namespace Game.Networking.Packets
public List<TreasurePickItem> Items = new(); public List<TreasurePickItem> Items = new();
public List<TreasurePickCurrency> Currencies = new(); public List<TreasurePickCurrency> Currencies = new();
public ulong Money; public ulong Money;
public bool Unknown; public bool Context;
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WriteInt32(Items.Count); data.WriteInt32(Items.Count);
data.WriteInt32(Currencies.Count); data.WriteInt32(Currencies.Count);
data.WriteUInt64(Money); data.WriteUInt64(Money);
data.WriteBit(Unknown); data.WriteBit(Context);
data.FlushBits(); data.FlushBits();
foreach (TreasurePickItem treasurePickerItem in Items) foreach (TreasurePickItem treasurePickerItem in Items)
@@ -89,8 +89,8 @@ namespace Game.Networking.Packets
{ {
public ObjectGuid ScenarioGUID; public ObjectGuid ScenarioGUID;
public int ScenarioID; public int ScenarioID;
public int Unk1; public int TimeRemain;
public byte Unk2; public byte Reason;
public ScenarioVacate() : base(ServerOpcodes.ScenarioVacate, ConnectionType.Instance) { } public ScenarioVacate() : base(ServerOpcodes.ScenarioVacate, ConnectionType.Instance) { }
@@ -98,8 +98,8 @@ namespace Game.Networking.Packets
{ {
_worldPacket.WritePackedGuid(ScenarioGUID); _worldPacket.WritePackedGuid(ScenarioGUID);
_worldPacket.WriteInt32(ScenarioID); _worldPacket.WriteInt32(ScenarioID);
_worldPacket.WriteInt32(Unk1); _worldPacket.WriteInt32(TimeRemain);
_worldPacket.WriteBits(Unk2, 2); _worldPacket.WriteBits(Reason, 2);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
} }
} }
+10 -10
View File
@@ -1537,17 +1537,17 @@ namespace Game.Networking.Packets
public struct SpellSupportInfo public struct SpellSupportInfo
{ {
public ObjectGuid CasterGUID; public ObjectGuid Supporter;
public int SpellID; public int SupportSpellID;
public int Amount; public int AmountRaw;
public float Percentage; public float AmountPortion;
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
data.WritePackedGuid(CasterGUID); data.WritePackedGuid(Supporter);
data.WriteInt32(SpellID); data.WriteInt32(SupportSpellID);
data.WriteInt32(Amount); data.WriteInt32(AmountRaw);
data.WriteFloat(Percentage); data.WriteFloat(AmountPortion);
} }
} }
@@ -1780,7 +1780,7 @@ namespace Game.Networking.Packets
public int ItemID; public int ItemID;
public int DataSlotIndex; public int DataSlotIndex;
public int Quantity; public int Quantity;
public byte? Unknown_1000; public byte? Source;
public void Read(WorldPacket data) public void Read(WorldPacket data)
{ {
@@ -1788,7 +1788,7 @@ namespace Game.Networking.Packets
DataSlotIndex = data.ReadInt32(); DataSlotIndex = data.ReadInt32();
Quantity = data.ReadInt32(); Quantity = data.ReadInt32();
if (data.HasBit()) if (data.HasBit())
Unknown_1000 = data.ReadUInt8(); Source = data.ReadUInt8();
} }
} }
+135 -134
View File
@@ -23,30 +23,30 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(RAFSystem.MaxRecruitMonths); _worldPacket.WriteUInt32(RAFSystem.MaxRecruitMonths);
_worldPacket.WriteUInt32(RAFSystem.MaxRecruitmentUses); _worldPacket.WriteUInt32(RAFSystem.MaxRecruitmentUses);
_worldPacket.WriteUInt32(RAFSystem.DaysInCycle); _worldPacket.WriteUInt32(RAFSystem.DaysInCycle);
_worldPacket.WriteUInt32(RAFSystem.Unknown1007); _worldPacket.WriteUInt32(RAFSystem.RewardsVersion);
_worldPacket.WriteUInt32(TokenPollTimeSeconds); _worldPacket.WriteUInt32(CommercePricePollTimeSeconds);
_worldPacket.WriteUInt32(KioskSessionMinutes); _worldPacket.WriteUInt32(KioskSessionDurationMinutes);
_worldPacket.WriteInt64(TokenBalanceAmount); _worldPacket.WriteInt64(RedeemForBalanceAmount);
_worldPacket.WriteUInt32(BpayStoreProductDeliveryDelay); _worldPacket.WriteUInt32(BpayStorePurchaseTimeout);
_worldPacket.WriteUInt32(ClubsPresenceUpdateTimer); _worldPacket.WriteUInt32(ClubsPresenceDelay);
_worldPacket.WriteUInt32(HiddenUIClubsPresenceUpdateTimer); _worldPacket.WriteUInt32(ClubPresenceUnsubscribeDelay);
_worldPacket.WriteInt32(ActiveSeason); _worldPacket.WriteInt32(ContentSetID);
_worldPacket.WriteInt32(GameRuleValues.Count); _worldPacket.WriteInt32(GameRules.Count);
_worldPacket.WriteInt32(ActiveTimerunningSeasonID); _worldPacket.WriteInt32(ActiveTimerunningSeasonID);
_worldPacket.WriteInt32(RemainingTimerunningSeasonSeconds); _worldPacket.WriteInt32(RemainingTimerunningSeasonSeconds);
_worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket); _worldPacket.WriteInt16(MaxPlayerGuidLookupsPerRequest);
_worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval); _worldPacket.WriteInt16(NameLookupTelemetryInterval);
_worldPacket.WriteUInt32((uint)PlayerNameQueryInterval.TotalSeconds); _worldPacket.WriteUInt32((uint)NotFoundCacheTimeSeconds.TotalSeconds);
_worldPacket.WriteInt32(AddonChatThrottle.MaxTries); _worldPacket.WriteInt32(AddonChatThrottle.MaxTries);
_worldPacket.WriteInt32(AddonChatThrottle.TriesRestoredPerSecond); _worldPacket.WriteInt32(AddonChatThrottle.TriesRestoredPerSecond);
_worldPacket.WriteInt32(AddonChatThrottle.UsedTriesPerMessage); _worldPacket.WriteInt32(AddonChatThrottle.UsedTriesPerMessage);
foreach (GameRuleValuePair gameRuleValue in GameRuleValues) foreach (GameRuleValuePair gameRuleValue in GameRules)
gameRuleValue.Write(_worldPacket); gameRuleValue.Write(_worldPacket);
_worldPacket.WriteBit(VoiceEnabled); _worldPacket.WriteBit(VoiceEnabled);
@@ -62,43 +62,43 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(RAFSystem.RecruitingEnabled); _worldPacket.WriteBit(RAFSystem.RecruitingEnabled);
_worldPacket.WriteBit(CharUndeleteEnabled); _worldPacket.WriteBit(CharUndeleteEnabled);
_worldPacket.WriteBit(RestrictedAccount); _worldPacket.WriteBit(RestrictedAccount);
_worldPacket.WriteBit(CommerceSystemEnabled); _worldPacket.WriteBit(CommerceServerEnabled);
_worldPacket.WriteBit(TutorialsEnabled); _worldPacket.WriteBit(TutorialEnabled);
_worldPacket.WriteBit(Unk67); _worldPacket.WriteBit(VeteranTokenRedeemWillKick);
_worldPacket.WriteBit(WillKickFromWorld); _worldPacket.WriteBit(WorldTokenRedeemWillKick);
_worldPacket.WriteBit(KioskModeEnabled); _worldPacket.WriteBit(KioskModeEnabled);
_worldPacket.WriteBit(CompetitiveModeEnabled); _worldPacket.WriteBit(CompetitiveModeEnabled);
_worldPacket.WriteBit(TokenBalanceEnabled); _worldPacket.WriteBit(RedeemForBalanceAvailable);
_worldPacket.WriteBit(WarModeFeatureEnabled); _worldPacket.WriteBit(WarModeEnabled);
_worldPacket.WriteBit(ClubsEnabled); _worldPacket.WriteBit(CommunitiesEnabled);
_worldPacket.WriteBit(ClubsBattleNetClubTypeAllowed); _worldPacket.WriteBit(BnetGroupsEnabled);
_worldPacket.WriteBit(ClubsCharacterClubTypeAllowed); _worldPacket.WriteBit(CharacterCommunitiesEnabled);
_worldPacket.WriteBit(ClubsPresenceUpdateEnabled); _worldPacket.WriteBit(ClubPresenceAllowSubscribeAll);
_worldPacket.WriteBit(VoiceChatDisabledByParentalControl); _worldPacket.WriteBit(VoiceChatParentalDisabled);
_worldPacket.WriteBit(VoiceChatMutedByParentalControl); _worldPacket.WriteBit(VoiceChatParentalMuted);
_worldPacket.WriteBit(QuestSessionEnabled); _worldPacket.WriteBit(QuestSessionEnabled);
_worldPacket.WriteBit(IsMuted); _worldPacket.WriteBit(IsChatMuted);
_worldPacket.WriteBit(ClubFinderEnabled); _worldPacket.WriteBit(ClubFinderEnabled);
_worldPacket.WriteBit(CommunityFinderEnabled); _worldPacket.WriteBit(CommunityFinderEnabled);
_worldPacket.WriteBit(Unknown901CheckoutRelated); _worldPacket.WriteBit(BrowserCrashReporterEnabled);
_worldPacket.WriteBit(TextToSpeechFeatureEnabled); _worldPacket.WriteBit(SpeakForMeAllowed);
_worldPacket.WriteBit(ChatDisabledByDefault); _worldPacket.WriteBit(DoesAccountNeedAADCPrompt);
_worldPacket.WriteBit(ChatDisabledByPlayer); _worldPacket.WriteBit(IsAccountOptedInToAADC);
_worldPacket.WriteBit(LFGListCustomRequiresAuthenticator); _worldPacket.WriteBit(LfgRequireAuthenticatorEnabled);
_worldPacket.WriteBit(AddonsDisabled); _worldPacket.WriteBit(ScriptsDisallowedForBeta);
_worldPacket.WriteBit(TimerunningEnabled); _worldPacket.WriteBit(TimerunningEnabled);
_worldPacket.WriteBit(WarGamesEnabled); _worldPacket.WriteBit(WarGamesEnabled);
_worldPacket.WriteBit(ContentTrackingEnabled); _worldPacket.WriteBit(IsPlayerContentTrackingEnabled);
_worldPacket.WriteBit(IsSellAllJunkEnabled); _worldPacket.WriteBit(SellAllJunkEnabled);
_worldPacket.WriteBit(IsGroupFinderEnabled); _worldPacket.WriteBit(GroupFinderEnabled);
_worldPacket.WriteBit(IsLFDEnabled); _worldPacket.WriteBit(LfdEnabled);
_worldPacket.WriteBit(IsLFREnabled); _worldPacket.WriteBit(LfrEnabled);
_worldPacket.WriteBit(IsPremadeGroupEnabled); _worldPacket.WriteBit(IsPremadeGroupEnabled);
_worldPacket.WriteBit(CanShowSetRoleButton); _worldPacket.WriteBit(PremadeGroupsEnabled);
_worldPacket.WriteBit(false); // unused 10.2.7 _worldPacket.WriteBit(false); // unused 10.2.7
_worldPacket.WriteBit(GuildEventsEditsEnabled); _worldPacket.WriteBit(GuildEventsEditsEnabled);
_worldPacket.WriteBit(GuildTradeSkillsEnabled); _worldPacket.WriteBit(GuildTradeSkillsEnabled);
@@ -163,54 +163,54 @@ namespace Game.Networking.Packets
public uint CfgRealmID; public uint CfgRealmID;
public byte ComplaintStatus; public byte ComplaintStatus;
public int CfgRealmRecID; public int CfgRealmRecID;
public uint TokenPollTimeSeconds; public uint CommercePricePollTimeSeconds;
public long TokenBalanceAmount; public long RedeemForBalanceAmount;
public uint BpayStoreProductDeliveryDelay; public uint BpayStorePurchaseTimeout;
public uint ClubsPresenceUpdateTimer; public uint ClubsPresenceDelay;
public uint HiddenUIClubsPresenceUpdateTimer; // Timer for updating club presence when communities ui frame is hidden public uint ClubPresenceUnsubscribeDelay; // Timer for updating club presence when communities ui frame is hidden
public uint KioskSessionMinutes; public uint KioskSessionDurationMinutes;
public int ActiveSeason; // Currently active Classic season public int ContentSetID; // Currently active Classic season
public short MaxPlayerNameQueriesPerPacket = 50; public short MaxPlayerGuidLookupsPerRequest = 50;
public short PlayerNameQueryTelemetryInterval = 600; public short NameLookupTelemetryInterval = 600;
public TimeSpan PlayerNameQueryInterval = TimeSpan.FromSeconds(10); public TimeSpan NotFoundCacheTimeSeconds = TimeSpan.FromSeconds(10);
public bool ItemRestorationButtonEnabled; public bool ItemRestorationButtonEnabled;
public bool CharUndeleteEnabled; // Implemented public bool CharUndeleteEnabled; // Implemented
public bool BpayStoreDisabledByParentalControls; public bool BpayStoreDisabledByParentalControls;
public bool CommerceSystemEnabled; public bool CommerceServerEnabled;
public bool Unk67; public bool VeteranTokenRedeemWillKick;
public bool WillKickFromWorld; public bool WorldTokenRedeemWillKick;
public bool RestrictedAccount; public bool RestrictedAccount;
public bool TutorialsEnabled; public bool TutorialEnabled;
public bool NPETutorialsEnabled; public bool NPETutorialsEnabled;
public bool KioskModeEnabled; public bool KioskModeEnabled;
public bool CompetitiveModeEnabled; public bool CompetitiveModeEnabled;
public bool TokenBalanceEnabled; public bool RedeemForBalanceAvailable;
public bool WarModeFeatureEnabled; public bool WarModeEnabled;
public bool ClubsEnabled; public bool CommunitiesEnabled;
public bool ClubsBattleNetClubTypeAllowed; public bool BnetGroupsEnabled;
public bool ClubsCharacterClubTypeAllowed; public bool CharacterCommunitiesEnabled;
public bool ClubsPresenceUpdateEnabled; public bool ClubPresenceAllowSubscribeAll;
public bool VoiceChatDisabledByParentalControl; public bool VoiceChatParentalDisabled;
public bool VoiceChatMutedByParentalControl; public bool VoiceChatParentalMuted;
public bool QuestSessionEnabled; public bool QuestSessionEnabled;
public bool IsMuted; public bool IsChatMuted;
public bool ClubFinderEnabled; public bool ClubFinderEnabled;
public bool CommunityFinderEnabled; public bool CommunityFinderEnabled;
public bool Unknown901CheckoutRelated; public bool BrowserCrashReporterEnabled;
public bool TextToSpeechFeatureEnabled; public bool SpeakForMeAllowed;
public bool ChatDisabledByDefault; public bool DoesAccountNeedAADCPrompt;
public bool ChatDisabledByPlayer; public bool IsAccountOptedInToAADC;
public bool LFGListCustomRequiresAuthenticator; public bool LfgRequireAuthenticatorEnabled;
public bool AddonsDisabled; public bool ScriptsDisallowedForBeta;
public bool TimerunningEnabled; public bool TimerunningEnabled;
public bool WarGamesEnabled; // classic only public bool WarGamesEnabled; // classic only
public bool ContentTrackingEnabled; public bool IsPlayerContentTrackingEnabled;
public bool IsSellAllJunkEnabled; public bool SellAllJunkEnabled;
public bool IsGroupFinderEnabled = true; // classic only public bool GroupFinderEnabled = true; // classic only
public bool IsLFDEnabled = true; // classic only public bool LfdEnabled = true; // classic only
public bool IsLFREnabled = true; // classic only public bool LfrEnabled = true; // classic only
public bool IsPremadeGroupEnabled = true; // classic only public bool IsPremadeGroupEnabled = true; // classic only
public bool CanShowSetRoleButton = true; public bool PremadeGroupsEnabled = true;
public bool GuildEventsEditsEnabled = true; public bool GuildEventsEditsEnabled = true;
public bool GuildTradeSkillsEnabled = true; public bool GuildTradeSkillsEnabled = true;
public bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService public bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService
@@ -220,7 +220,7 @@ namespace Game.Networking.Packets
public SocialQueueConfig QuickJoinConfig; public SocialQueueConfig QuickJoinConfig;
public SquelchInfo Squelch; public SquelchInfo Squelch;
public RafSystemFeatureInfo RAFSystem; public RafSystemFeatureInfo RAFSystem;
public List<GameRuleValuePair> GameRuleValues = new(); public List<GameRuleValuePair> GameRules = new();
public int ActiveTimerunningSeasonID; public int ActiveTimerunningSeasonID;
public int RemainingTimerunningSeasonSeconds; public int RemainingTimerunningSeasonSeconds;
public string Unknown1027; // related to movement lua functions used by keybinds public string Unknown1027; // related to movement lua functions used by keybinds
@@ -275,7 +275,7 @@ namespace Game.Networking.Packets
public uint MaxRecruitMonths; public uint MaxRecruitMonths;
public uint MaxRecruitmentUses; public uint MaxRecruitmentUses;
public uint DaysInCycle; public uint DaysInCycle;
public uint Unknown1007; public uint RewardsVersion;
} }
public struct AddonChatThrottleParams public struct AddonChatThrottleParams
@@ -296,33 +296,33 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(BpayStoreAvailable); _worldPacket.WriteBit(BpayStoreAvailable);
_worldPacket.WriteBit(BpayStoreDisabledByParentalControls); _worldPacket.WriteBit(BpayStoreDisabledByParentalControls);
_worldPacket.WriteBit(CharUndeleteEnabled); _worldPacket.WriteBit(CharUndeleteEnabled);
_worldPacket.WriteBit(CommerceSystemEnabled); _worldPacket.WriteBit(CommerceServerEnabled);
_worldPacket.WriteBit(Unk14); _worldPacket.WriteBit(VeteranTokenRedeemWillKick);
_worldPacket.WriteBit(WillKickFromWorld); _worldPacket.WriteBit(WorldTokenRedeemWillKick);
_worldPacket.WriteBit(IsExpansionPreorderInStore); _worldPacket.WriteBit(ExpansionPreorderInStore);
_worldPacket.WriteBit(KioskModeEnabled); _worldPacket.WriteBit(KioskModeEnabled);
_worldPacket.WriteBit(CompetitiveModeEnabled); _worldPacket.WriteBit(CompetitiveModeEnabled);
_worldPacket.WriteBit(IsBoostEnabled); _worldPacket.WriteBit(BoostEnabled);
_worldPacket.WriteBit(TrialBoostEnabled); _worldPacket.WriteBit(TrialBoostEnabled);
_worldPacket.WriteBit(TokenBalanceEnabled); _worldPacket.WriteBit(RedeemForBalanceAvailable);
_worldPacket.WriteBit(PaidCharacterTransfersBetweenBnetAccountsEnabled); _worldPacket.WriteBit(PaidCharacterTransfersBetweenBnetAccountsEnabled);
_worldPacket.WriteBit(LiveRegionCharacterListEnabled); _worldPacket.WriteBit(LiveRegionCharacterListEnabled);
_worldPacket.WriteBit(LiveRegionCharacterCopyEnabled); _worldPacket.WriteBit(LiveRegionCharacterCopyEnabled);
_worldPacket.WriteBit(LiveRegionAccountCopyEnabled); _worldPacket.WriteBit(LiveRegionAccountCopyEnabled);
_worldPacket.WriteBit(LiveRegionKeyBindingsCopyEnabled); _worldPacket.WriteBit(LiveRegionKeyBindingsCopyEnabled);
_worldPacket.WriteBit(Unknown901CheckoutRelated); _worldPacket.WriteBit(BrowserCrashReporterEnabled);
_worldPacket.WriteBit(false); // unused, 10.0.2 _worldPacket.WriteBit(IsEmployeeAccount);
_worldPacket.WriteBit(EuropaTicketSystemStatus.HasValue); _worldPacket.WriteBit(EuropaTicketSystemStatus.HasValue);
_worldPacket.WriteBit(IsNameReservationEnabled); _worldPacket.WriteBit(NameReservationOnly);
_worldPacket.WriteBit(LaunchETA.HasValue); _worldPacket.WriteBit(LaunchDurationETA.HasValue);
_worldPacket.WriteBit(TimerunningEnabled); _worldPacket.WriteBit(TimerunningEnabled);
_worldPacket.WriteBit(AddonsDisabled); _worldPacket.WriteBit(ScriptsDisallowedForBeta);
_worldPacket.WriteBit(Unused1000); _worldPacket.WriteBit(PlayerIdentityOptionsEnabled);
_worldPacket.WriteBit(AccountSaveDataExportEnabled); _worldPacket.WriteBit(AccountExportEnabled);
_worldPacket.WriteBit(AccountLockedByExport); _worldPacket.WriteBit(AccountLockedPostExport);
_worldPacket.WriteBits(RealmHiddenAlert.GetByteCount() + 1, 11); _worldPacket.WriteBits(RealmHiddenAlert.GetByteCount() + 1, 11);
_worldPacket.WriteBit(BNSendWhisperUseV2Services); _worldPacket.WriteBit(BNSendWhisperUseV2Services);
@@ -335,29 +335,29 @@ namespace Game.Networking.Packets
if (EuropaTicketSystemStatus.HasValue) if (EuropaTicketSystemStatus.HasValue)
EuropaTicketSystemStatus.Value.Write(_worldPacket); EuropaTicketSystemStatus.Value.Write(_worldPacket);
_worldPacket.WriteUInt32(TokenPollTimeSeconds); _worldPacket.WriteUInt32(CommercePricePollTimeSeconds);
_worldPacket.WriteUInt32(KioskSessionMinutes); _worldPacket.WriteUInt32(KioskSessionDurationMinutes);
_worldPacket.WriteInt64(TokenBalanceAmount); _worldPacket.WriteInt64(RedeemForBalanceAmount);
_worldPacket.WriteInt32(MaxCharactersPerRealm); _worldPacket.WriteInt32(MaxCharactersOnThisRealm);
_worldPacket.WriteInt32(LiveRegionCharacterCopySourceRegions.Count); _worldPacket.WriteInt32(LiveRegionCharacterCopySourceRegions.Count);
_worldPacket.WriteUInt32(BpayStoreProductDeliveryDelay); _worldPacket.WriteUInt32(BpayStorePurchaseTimeout);
_worldPacket.WriteInt32(ActiveCharacterUpgradeBoostType); _worldPacket.WriteInt32(ActiveBoostType);
_worldPacket.WriteInt32(ActiveClassTrialBoostType); _worldPacket.WriteInt32(TrialBoostType);
_worldPacket.WriteInt32(MinimumExpansionLevel); _worldPacket.WriteInt32(MinimumExpansionLevel);
_worldPacket.WriteInt32(MaximumExpansionLevel); _worldPacket.WriteInt32(MaximumExpansionLevel);
_worldPacket.WriteInt32(ActiveSeason); _worldPacket.WriteInt32(ContentSetID);
_worldPacket.WriteInt32(GameRuleValues.Count); _worldPacket.WriteInt32(GameRules.Count);
_worldPacket.WriteInt32(ActiveTimerunningSeasonID); _worldPacket.WriteInt32(ActiveTimerunningSeasonID);
_worldPacket.WriteInt32(RemainingTimerunningSeasonSeconds); _worldPacket.WriteInt32(RemainingTimerunningSeasonSeconds);
_worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket); _worldPacket.WriteInt16(MaxPlayerGuidLookupsPerRequest);
_worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval); _worldPacket.WriteInt16(NameLookupTelemetryInterval);
_worldPacket.WriteUInt32((uint)PlayerNameQueryInterval.TotalSeconds); _worldPacket.WriteUInt32((uint)NotFoundCacheTimeSeconds.TotalSeconds);
_worldPacket.WriteInt32(DebugTimeEvents.Count); _worldPacket.WriteInt32(DebugTimeEvents.Count);
_worldPacket.WriteInt32(Unused1007); _worldPacket.WriteInt32(MostRecentTimeEventID);
_worldPacket.WriteUInt32(EventRealmQueues); _worldPacket.WriteUInt32(EventRealmQueues);
if (LaunchETA.HasValue) if (LaunchDurationETA.HasValue)
_worldPacket.WriteInt32(LaunchETA.Value); _worldPacket.WriteInt32(LaunchDurationETA.Value);
if (!RealmHiddenAlert.IsEmpty()) if (!RealmHiddenAlert.IsEmpty())
_worldPacket.WriteString(RealmHiddenAlert); _worldPacket.WriteString(RealmHiddenAlert);
@@ -365,7 +365,7 @@ namespace Game.Networking.Packets
foreach (var sourceRegion in LiveRegionCharacterCopySourceRegions) foreach (var sourceRegion in LiveRegionCharacterCopySourceRegions)
_worldPacket.WriteInt32(sourceRegion); _worldPacket.WriteInt32(sourceRegion);
foreach (GameRuleValuePair gameRuleValue in GameRuleValues) foreach (GameRuleValuePair gameRuleValue in GameRules)
gameRuleValue.Write(_worldPacket); gameRuleValue.Write(_worldPacket);
foreach (DebugTimeEventInfo debugTimeEventInfo in DebugTimeEvents) foreach (DebugTimeEventInfo debugTimeEventInfo in DebugTimeEvents)
@@ -376,51 +376,52 @@ namespace Game.Networking.Packets
public bool BpayStoreDisabledByParentalControls; // NYI public bool BpayStoreDisabledByParentalControls; // NYI
public bool CharUndeleteEnabled; public bool CharUndeleteEnabled;
public bool BpayStoreEnabled; // NYI public bool BpayStoreEnabled; // NYI
public bool CommerceSystemEnabled; // NYI public bool CommerceServerEnabled; // NYI
public bool Unk14; // NYI public bool VeteranTokenRedeemWillKick; // NYI
public bool WillKickFromWorld; // NYI public bool WorldTokenRedeemWillKick; // NYI
public bool IsExpansionPreorderInStore; // NYI public bool ExpansionPreorderInStore; // NYI
public bool KioskModeEnabled; // NYI public bool KioskModeEnabled; // NYI
public bool CompetitiveModeEnabled; // NYI public bool CompetitiveModeEnabled; // NYI
public bool IsBoostEnabled; // classic only public bool BoostEnabled; // classic only
public bool TrialBoostEnabled; // NYI public bool TrialBoostEnabled; // NYI
public bool TokenBalanceEnabled; // NYI public bool RedeemForBalanceAvailable; // NYI
public bool PaidCharacterTransfersBetweenBnetAccountsEnabled; public bool PaidCharacterTransfersBetweenBnetAccountsEnabled;
public bool LiveRegionCharacterListEnabled; // NYI public bool LiveRegionCharacterListEnabled; // NYI
public bool LiveRegionCharacterCopyEnabled; // NYI public bool LiveRegionCharacterCopyEnabled; // NYI
public bool LiveRegionAccountCopyEnabled; // NYI public bool LiveRegionAccountCopyEnabled; // NYI
public bool LiveRegionKeyBindingsCopyEnabled; public bool LiveRegionKeyBindingsCopyEnabled;
public bool Unknown901CheckoutRelated; // NYI public bool BrowserCrashReporterEnabled; // NYI
public bool IsNameReservationEnabled; // classic only public bool IsEmployeeAccount; // NYI
public bool NameReservationOnly; // classic only
public bool TimerunningEnabled; // NYI public bool TimerunningEnabled; // NYI
public bool AddonsDisabled; public bool ScriptsDisallowedForBeta;
public bool Unused1000; public bool PlayerIdentityOptionsEnabled;
public bool AccountSaveDataExportEnabled; public bool AccountExportEnabled;
public bool AccountLockedByExport; public bool AccountLockedPostExport;
public bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService public bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService
public bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService public bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService
public bool CharacterSelectListModeRealmless; public bool CharacterSelectListModeRealmless;
public EuropaTicketConfig? EuropaTicketSystemStatus; public EuropaTicketConfig? EuropaTicketSystemStatus;
public List<int> LiveRegionCharacterCopySourceRegions = new(); public List<int> LiveRegionCharacterCopySourceRegions = new();
public uint TokenPollTimeSeconds; // NYI public uint CommercePricePollTimeSeconds; // NYI
public long TokenBalanceAmount; // NYI public long RedeemForBalanceAmount; // NYI
public int MaxCharactersPerRealm; public int MaxCharactersOnThisRealm;
public uint BpayStoreProductDeliveryDelay; // NYI public uint BpayStorePurchaseTimeout; // NYI
public int ActiveCharacterUpgradeBoostType; // NYI public int ActiveBoostType; // NYI
public int ActiveClassTrialBoostType; // NYI public int TrialBoostType; // NYI
public int MinimumExpansionLevel; public int MinimumExpansionLevel;
public int MaximumExpansionLevel; public int MaximumExpansionLevel;
public uint KioskSessionMinutes; public uint KioskSessionDurationMinutes;
public int ActiveSeason; // Currently active Classic season public int ContentSetID; // Currently active Classic season
public List<GameRuleValuePair> GameRuleValues = new(); public List<GameRuleValuePair> GameRules = new();
public int ActiveTimerunningSeasonID; public int ActiveTimerunningSeasonID;
public int RemainingTimerunningSeasonSeconds; public int RemainingTimerunningSeasonSeconds;
public short MaxPlayerNameQueriesPerPacket = 50; public short MaxPlayerGuidLookupsPerRequest = 50;
public short PlayerNameQueryTelemetryInterval = 600; public short NameLookupTelemetryInterval = 600;
public TimeSpan PlayerNameQueryInterval = TimeSpan.FromSeconds(10); public TimeSpan NotFoundCacheTimeSeconds = TimeSpan.FromSeconds(10);
public int? LaunchETA; public int? LaunchDurationETA;
public List<DebugTimeEventInfo> DebugTimeEvents = new(); public List<DebugTimeEventInfo> DebugTimeEvents = new();
public int Unused1007; public int MostRecentTimeEventID;
public uint EventRealmQueues; public uint EventRealmQueues;
public string RealmHiddenAlert; public string RealmHiddenAlert;
} }
@@ -433,17 +434,17 @@ namespace Game.Networking.Packets
{ {
_worldPacket.WriteBits(ServerTimeTZ.GetByteCount(), 7); _worldPacket.WriteBits(ServerTimeTZ.GetByteCount(), 7);
_worldPacket.WriteBits(GameTimeTZ.GetByteCount(), 7); _worldPacket.WriteBits(GameTimeTZ.GetByteCount(), 7);
_worldPacket.WriteBits(ServerRegionalTZ.GetByteCount(), 7); _worldPacket.WriteBits(ServerRegionalTimeTZ.GetByteCount(), 7);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
_worldPacket.WriteString(ServerTimeTZ); _worldPacket.WriteString(ServerTimeTZ);
_worldPacket.WriteString(GameTimeTZ); _worldPacket.WriteString(GameTimeTZ);
_worldPacket.WriteString(ServerRegionalTZ); _worldPacket.WriteString(ServerRegionalTimeTZ);
} }
public string ServerTimeTZ; public string ServerTimeTZ;
public string GameTimeTZ; public string GameTimeTZ;
public string ServerRegionalTZ; public string ServerRegionalTimeTZ;
} }
public struct SavedThrottleObjectState public struct SavedThrottleObjectState
+70 -71
View File
@@ -2,7 +2,6 @@
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information. // Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
using Framework.Constants; using Framework.Constants;
using Framework.Dynamic;
using Game.Entities; using Game.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -125,19 +124,19 @@ namespace Game.Networking.Packets
bool hasCalendarInfo = _worldPacket.HasBit(); bool hasCalendarInfo = _worldPacket.HasBit();
bool hasPetInfo = _worldPacket.HasBit(); bool hasPetInfo = _worldPacket.HasBit();
bool hasGuildInfo = _worldPacket.HasBit(); bool hasGuildInfo = _worldPacket.HasBit();
bool hasLFGListSearchResult = _worldPacket.HasBit(); bool hasLfgListEntryInfo = _worldPacket.HasBit();
bool hasLFGListApplicant = _worldPacket.HasBit(); bool hasLfgListAppInfo = _worldPacket.HasBit();
bool hasClubMessage = _worldPacket.HasBit(); bool hasVoiceChatInfo = _worldPacket.HasBit();
bool hasClubFinderResult = _worldPacket.HasBit(); bool hasClubFinderResult = _worldPacket.HasBit();
bool hasUnk910 = _worldPacket.HasBit(); bool hasArenaTeamInfo = _worldPacket.HasBit();
_worldPacket.ResetBitPos(); _worldPacket.ResetBitPos();
if (hasClubMessage) if (hasVoiceChatInfo)
{ {
SupportTicketCommunityMessage communityMessage = new(); SupportTicketVoiceChatInfo voiceChatInfo = new();
communityMessage.IsPlayerUsingVoice = _worldPacket.HasBit(); voiceChatInfo.TargetIsCurrentlyInVoiceChatWithPlayer = _worldPacket.HasBit();
CommunityMessage = communityMessage; VoiceChatInfo = voiceChatInfo;
_worldPacket.ResetBitPos(); _worldPacket.ResetBitPos();
} }
@@ -169,28 +168,28 @@ namespace Game.Networking.Packets
GuildInfo.Value.Read(_worldPacket); GuildInfo.Value.Read(_worldPacket);
} }
if (hasLFGListSearchResult) if (hasLfgListEntryInfo)
{ {
LFGListSearchResult = new(); LfgListEntryInfo = new();
LFGListSearchResult.Value.Read(_worldPacket); LfgListEntryInfo.Value.Read(_worldPacket);
} }
if (hasLFGListApplicant) if (hasLfgListAppInfo)
{ {
LFGListApplicant = new(); LfgListAppInfo = new();
LFGListApplicant.Value.Read(_worldPacket); LfgListAppInfo.Value.Read(_worldPacket);
} }
if (hasClubFinderResult) if (hasClubFinderResult)
{ {
ClubFinderResult = new(); ClubFinderInfo = new();
ClubFinderResult.Value.Read(_worldPacket); ClubFinderInfo.Value.Read(_worldPacket);
} }
if (hasUnk910) if (hasArenaTeamInfo)
{ {
Unused910 = new(); ArenaTeamInfo = new();
Unused910.Value.Read(_worldPacket); ArenaTeamInfo.Value.Read(_worldPacket);
} }
} }
@@ -206,11 +205,11 @@ namespace Game.Networking.Packets
public SupportTicketCalendarEventInfo? CalenderInfo; public SupportTicketCalendarEventInfo? CalenderInfo;
public SupportTicketPetInfo? PetInfo; public SupportTicketPetInfo? PetInfo;
public SupportTicketGuildInfo? GuildInfo; public SupportTicketGuildInfo? GuildInfo;
public SupportTicketLFGListSearchResult? LFGListSearchResult; public SupportTicketLFGListEntryInfo? LfgListEntryInfo;
public SupportTicketLFGListApplicant? LFGListApplicant; public SupportTicketLFGListApplicant? LfgListAppInfo;
public SupportTicketCommunityMessage? CommunityMessage; public SupportTicketVoiceChatInfo? VoiceChatInfo;
public SupportTicketClubFinderResult? ClubFinderResult; public SupportTicketClubFinderInfo? ClubFinderInfo;
public SupportTicketUnused910? Unused910; public SupportTicketArenaTeamInfo? ArenaTeamInfo;
public struct SupportTicketChatLine public struct SupportTicketChatLine
{ {
@@ -383,88 +382,88 @@ namespace Game.Networking.Packets
public string GuildName; public string GuildName;
} }
public struct SupportTicketLFGListSearchResult public struct SupportTicketLFGListEntryInfo
{ {
public RideTicket Ticket;
public uint ActivityID;
public byte FactionID;
public ObjectGuid LastTouchedName;
public ObjectGuid LastTouchedComment;
public ObjectGuid LastTouchedVoiceChat;
public ObjectGuid LastTouchedAny;
public ObjectGuid PartyGuid;
public string Name;
public string Comment;
public string VoiceChat;
public void Read(WorldPacket data) public void Read(WorldPacket data)
{ {
RideTicket = new RideTicket(); Ticket = new RideTicket();
RideTicket.Read(data); Ticket.Read(data);
GroupFinderActivityID = data.ReadUInt32(); ActivityID = data.ReadUInt32();
Unknown1007 = data.ReadUInt8(); FactionID = data.ReadUInt8();
LastTitleAuthorGuid = data.ReadPackedGuid(); LastTouchedName = data.ReadPackedGuid();
LastDescriptionAuthorGuid = data.ReadPackedGuid(); LastTouchedComment = data.ReadPackedGuid();
LastVoiceChatAuthorGuid = data.ReadPackedGuid(); LastTouchedVoiceChat = data.ReadPackedGuid();
ListingCreatorGuid = data.ReadPackedGuid(); LastTouchedAny = data.ReadPackedGuid();
Unknown735 = data.ReadPackedGuid(); PartyGuid = data.ReadPackedGuid();
byte titleLength = data.ReadBits<byte>(10); byte nameLength = data.ReadBits<byte>(10);
byte descriptionLength = data.ReadBits<byte>(11); byte commentLength = data.ReadBits<byte>(11);
byte voiceChatLength = data.ReadBits<byte>(8); byte voiceChatLength = data.ReadBits<byte>(8);
Title = data.ReadString(titleLength); Name = data.ReadString(nameLength);
Description = data.ReadString(descriptionLength); Comment = data.ReadString(commentLength);
VoiceChat = data.ReadString(voiceChatLength); VoiceChat = data.ReadString(voiceChatLength);
} }
public RideTicket RideTicket;
public uint GroupFinderActivityID;
public byte Unknown1007;
public ObjectGuid LastTitleAuthorGuid;
public ObjectGuid LastDescriptionAuthorGuid;
public ObjectGuid LastVoiceChatAuthorGuid;
public ObjectGuid ListingCreatorGuid;
public ObjectGuid Unknown735;
public string Title;
public string Description;
public string VoiceChat;
} }
public struct SupportTicketLFGListApplicant public struct SupportTicketLFGListApplicant
{ {
public RideTicket Ticket;
public string Comment;
public void Read(WorldPacket data) public void Read(WorldPacket data)
{ {
RideTicket = new RideTicket(); Ticket = new RideTicket();
RideTicket.Read(data); Ticket.Read(data);
Comment = data.ReadString(data.ReadBits<uint>(9)); Comment = data.ReadString(data.ReadBits<uint>(9));
} }
public RideTicket RideTicket;
public string Comment;
} }
public struct SupportTicketCommunityMessage public struct SupportTicketVoiceChatInfo
{ {
public bool IsPlayerUsingVoice; public bool TargetIsCurrentlyInVoiceChatWithPlayer;
} }
public struct SupportTicketClubFinderResult public struct SupportTicketClubFinderInfo
{ {
public ulong ClubFinderPostingID; public ulong PostingID;
public ulong ClubID; public ulong ClubID;
public ObjectGuid ClubFinderGUID; public ObjectGuid GuildID;
public string ClubName; public string PostingDescription;
public void Read(WorldPacket data) public void Read(WorldPacket data)
{ {
ClubFinderPostingID = data.ReadUInt64(); PostingID = data.ReadUInt64();
ClubID = data.ReadUInt64(); ClubID = data.ReadUInt64();
ClubFinderGUID = data.ReadPackedGuid(); GuildID = data.ReadPackedGuid();
ClubName = data.ReadString(data.ReadBits<uint>(12)); PostingDescription = data.ReadString(data.ReadBits<uint>(12));
} }
} }
public struct SupportTicketUnused910 public struct SupportTicketArenaTeamInfo
{ {
public string field_0; public string ArenaTeamName;
public ObjectGuid field_104; public ObjectGuid ArenaTeamID;
public void Read(WorldPacket data) public void Read(WorldPacket data)
{ {
uint field_0Length = data.ReadBits<uint>(7); uint arenaTeamNameLength = data.ReadBits<uint>(7);
field_104 = data.ReadPackedGuid(); ArenaTeamID = data.ReadPackedGuid();
field_0 = data.ReadString(field_0Length); ArenaTeamName = data.ReadString(arenaTeamNameLength);
} }
} }
} }
+25 -25
View File
@@ -12,10 +12,10 @@ namespace Game.Networking.Packets
public override void Read() public override void Read()
{ {
UnkInt = _worldPacket.ReadUInt32(); ClientToken = _worldPacket.ReadUInt32();
} }
public uint UnkInt; public uint ClientToken;
} }
class CommerceTokenGetLogResponse : ServerPacket class CommerceTokenGetLogResponse : ServerPacket
@@ -24,30 +24,30 @@ namespace Game.Networking.Packets
public override void Write() public override void Write()
{ {
_worldPacket.WriteUInt32(UnkInt); _worldPacket.WriteUInt32(ClientToken);
_worldPacket.WriteUInt32((uint)Result); _worldPacket.WriteUInt32((uint)Result);
_worldPacket.WriteInt32(AuctionableTokenAuctionableList.Count); _worldPacket.WriteInt32(AuctionableTokens.Count);
foreach (AuctionableTokenInfo auctionableTokenAuctionable in AuctionableTokenAuctionableList) foreach (AuctionableTokenInfo auctionableTokenAuctionable in AuctionableTokens)
{ {
_worldPacket.WriteUInt64(auctionableTokenAuctionable.UnkInt1); _worldPacket.WriteUInt64(auctionableTokenAuctionable.Id);
_worldPacket.WriteInt64(auctionableTokenAuctionable.UnkInt2); _worldPacket.WriteInt64(auctionableTokenAuctionable.LastUpdate);
_worldPacket.WriteUInt64(auctionableTokenAuctionable.BuyoutPrice); _worldPacket.WriteUInt64(auctionableTokenAuctionable.Price);
_worldPacket.WriteUInt32(auctionableTokenAuctionable.Owner); _worldPacket.WriteUInt32(auctionableTokenAuctionable.Status);
_worldPacket.WriteUInt32(auctionableTokenAuctionable.DurationLeft); _worldPacket.WriteUInt32(auctionableTokenAuctionable.DurationLeft);
} }
} }
public uint UnkInt; // send CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST public uint ClientToken;
public TokenResult Result; public TokenResult Result;
List<AuctionableTokenInfo> AuctionableTokenAuctionableList = new(); List<AuctionableTokenInfo> AuctionableTokens = new();
struct AuctionableTokenInfo struct AuctionableTokenInfo
{ {
public ulong UnkInt1; public ulong Id;
public long UnkInt2; public long LastUpdate;
public uint Owner; public uint Status;
public ulong BuyoutPrice; public ulong Price;
public uint DurationLeft; public uint DurationLeft;
} }
} }
@@ -58,10 +58,10 @@ namespace Game.Networking.Packets
public override void Read() public override void Read()
{ {
UnkInt = _worldPacket.ReadUInt32(); ClientToken = _worldPacket.ReadUInt32();
} }
public uint UnkInt; public uint ClientToken;
} }
class CommerceTokenGetMarketPriceResponse : ServerPacket class CommerceTokenGetMarketPriceResponse : ServerPacket
@@ -70,15 +70,15 @@ namespace Game.Networking.Packets
public override void Write() public override void Write()
{ {
_worldPacket.WriteUInt64(CurrentMarketPrice); _worldPacket.WriteUInt64(PriceGuarantee);
_worldPacket.WriteUInt32(UnkInt); _worldPacket.WriteUInt32(ClientToken);
_worldPacket.WriteUInt32((uint)Result); _worldPacket.WriteUInt32((uint)ServerToken);
_worldPacket.WriteUInt32(AuctionDuration); _worldPacket.WriteUInt32(PriceLockDurationSeconds);
} }
public ulong CurrentMarketPrice; public ulong PriceGuarantee;
public uint UnkInt; // send CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE public uint ClientToken;
public TokenResult Result; public TokenResult ServerToken;
public uint AuctionDuration; // preset auction duration enum public uint PriceLockDurationSeconds;
} }
} }