Core/PacketIO: 9.1.0 opcodes and packet structures

Port From (https://github.com/TrinityCore/TrinityCore/commit/cd5357dc185f95c6ef78089c5ab8bd2b885dd89f)
This commit is contained in:
hondacrx
2021-08-08 13:10:49 -04:00
parent 5dd83ff0cd
commit 491ec3333c
39 changed files with 1720 additions and 1342 deletions
@@ -928,6 +928,7 @@ namespace Game.Networking.Packets
public Optional<ulong> BidAmount;
public List<ItemGemData> Gems = new();
public Optional<AuctionBucketKey> AuctionBucketKey;
public Optional<ObjectGuid> Creator;
public void Write(WorldPacket data)
{
@@ -941,6 +942,7 @@ namespace Game.Networking.Packets
data.WriteBit(CensorServerSideInfo);
data.WriteBit(CensorBidInfo);
data.WriteBit(AuctionBucketKey.HasValue);
data.WriteBit(Creator.HasValue);
if (!CensorBidInfo)
{
data.WriteBit(Bidder.HasValue);
@@ -982,6 +984,9 @@ namespace Game.Networking.Packets
data.WriteUInt32(EndTime);
}
if (Creator.HasValue)
data.WritePackedGuid(Creator.Value);
if (!CensorBidInfo)
{
if (Bidder.HasValue)
@@ -530,6 +530,7 @@ namespace Game.Networking.Packets
public int BestSeasonRating;
public int PvpTierID;
public int Unused3;
public int WeeklyBestWinPvpTierID;
public bool Disqualified;
public void Write(WorldPacket data)
@@ -547,6 +548,7 @@ namespace Game.Networking.Packets
data.WriteInt32(BestSeasonRating);
data.WriteInt32(PvpTierID);
data.WriteInt32(Unused3);
data.WriteInt32(WeeklyBestWinPvpTierID);
data.WriteBit(Disqualified);
data.FlushBits();
}
@@ -32,7 +32,6 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt16(Trap);
_worldPacket.WriteInt32(Slots.Count);
_worldPacket.WriteInt32(Pets.Count);
_worldPacket.WriteInt32(MaxPets);
_worldPacket.WriteBit(HasJournalLock);
_worldPacket.FlushBits();
@@ -47,7 +46,6 @@ namespace Game.Networking.Packets
bool HasJournalLock = true;
public List<BattlePetSlot> Slots = new();
public List<BattlePetStruct> Pets = new();
int MaxPets = 1000;
}
class BattlePetJournalLockAcquired : ServerPacket
+14 -5
View File
@@ -64,6 +64,7 @@ namespace Game.Networking.Packets
public override void Read()
{
Language = (Language)_worldPacket.ReadInt32();
ChannelGUID = _worldPacket.ReadPackedGuid();
uint targetLen = _worldPacket.ReadBits<uint>(9);
uint textLen = _worldPacket.ReadBits<uint>(9);
Target = _worldPacket.ReadString(targetLen);
@@ -71,6 +72,7 @@ namespace Game.Networking.Packets
}
public Language Language = Language.Universal;
public ObjectGuid ChannelGUID;
public string Text;
public string Target;
}
@@ -95,11 +97,13 @@ namespace Game.Networking.Packets
{
uint targetLen = _worldPacket.ReadBits<uint>(9);
Params.Read(_worldPacket);
ChannelGUID.Set(_worldPacket.ReadPackedGuid());
Target = _worldPacket.ReadString(targetLen);
}
public string Target;
public ChatAddonMessageParams Params = new();
public Optional<ObjectGuid> ChannelGUID; // not optional in the packet. Optional for api reasons
}
public class ChatMessageDND : ClientPacket
@@ -229,6 +233,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(HideChatLog);
_worldPacket.WriteBit(FakeSenderName);
_worldPacket.WriteBit(Unused_801.HasValue);
_worldPacket.WriteBit(ChannelGUID.HasValue);
_worldPacket.FlushBits();
_worldPacket.WriteString(SenderName);
@@ -239,9 +244,12 @@ namespace Game.Networking.Packets
if (Unused_801.HasValue)
_worldPacket.WriteUInt32(Unused_801.Value);
if (ChannelGUID.HasValue)
_worldPacket.WritePackedGuid(ChannelGUID.Value);
}
public ChatMsg SlashCmd = 0;
public ChatMsg SlashCmd;
public Language _Language = Language.Universal;
public ObjectGuid SenderGUID;
public ObjectGuid SenderGuildGUID;
@@ -256,11 +264,12 @@ namespace Game.Networking.Packets
public string Channel = "";
public string ChatText = "";
public uint AchievementID;
public ChatFlags _ChatFlags = 0;
public float DisplayTime = 0.0f;
public ChatFlags _ChatFlags;
public float DisplayTime;
public Optional<uint> Unused_801;
public bool HideChatLog = false;
public bool FakeSenderName = false;
public bool HideChatLog;
public bool FakeSenderName;
public Optional<ObjectGuid> ChannelGUID;
}
public class EmoteMessage : ServerPacket
@@ -575,14 +575,14 @@ namespace Game.Networking.Packets
attackRoundInfo.WriteUInt8((byte)ContentTuning.TuningType);
attackRoundInfo.WriteUInt8(ContentTuning.TargetLevel);
attackRoundInfo.WriteUInt8(ContentTuning.Expansion);
attackRoundInfo.WriteUInt8(ContentTuning.TargetMinScalingLevel);
attackRoundInfo.WriteUInt8(ContentTuning.TargetMaxScalingLevel);
attackRoundInfo.WriteInt16(ContentTuning.PlayerLevelDelta);
attackRoundInfo.WriteInt8(ContentTuning.TargetScalingLevelDelta);
attackRoundInfo.WriteFloat(ContentTuning.PlayerItemLevel);
attackRoundInfo.WriteFloat(ContentTuning.TargetItemLevel);
attackRoundInfo.WriteUInt16(ContentTuning.ScalingHealthItemLevelCurveID);
attackRoundInfo.WriteUInt32((uint)ContentTuning.Flags);
attackRoundInfo.WriteUInt32(ContentTuning.PlayerContentTuningID);
attackRoundInfo.WriteUInt32(ContentTuning.TargetContentTuningID);
WriteLogDataBit();
FlushBits();
@@ -62,8 +62,10 @@ namespace Game.Networking.Packets
foreach (var id in equipSet.Enchants)
_worldPacket.WriteInt32(id);
_worldPacket.WriteInt32(equipSet.Unknown901_1);
_worldPacket.WriteInt32(equipSet.Unknown901_2);
_worldPacket.WriteInt32(equipSet.SecondaryShoulderApparanceID);
_worldPacket.WriteInt32(equipSet.SecondaryShoulderSlot);
_worldPacket.WriteInt32(equipSet.SecondaryWeaponAppearanceID);
_worldPacket.WriteInt32(equipSet.SecondaryWeaponSlot);
_worldPacket.WriteBit(equipSet.AssignedSpecIndex != -1);
_worldPacket.WriteBits(equipSet.SetName.GetByteCount(), 8);
@@ -103,8 +105,10 @@ namespace Game.Networking.Packets
Set.Enchants[0] = _worldPacket.ReadInt32();
Set.Enchants[1] = _worldPacket.ReadInt32();
Set.Unknown901_1 = _worldPacket.ReadInt32();
Set.Unknown901_2 = _worldPacket.ReadInt32();
Set.SecondaryShoulderApparanceID = _worldPacket.ReadInt32();
Set.SecondaryShoulderSlot = _worldPacket.ReadInt32();
Set.SecondaryWeaponAppearanceID = _worldPacket.ReadInt32();
Set.SecondaryWeaponSlot = _worldPacket.ReadInt32();
bool hasSpecIndex = _worldPacket.HasBit();
@@ -556,6 +556,18 @@ namespace Game.Networking.Packets
}
}
struct GarrisonSpecGroup
{
public int ChrSpecializationID;
public int SoulbindID;
public void Write(WorldPacket data)
{
data.WriteInt32(ChrSpecializationID);
data.WriteInt32(SoulbindID);
}
}
class GarrisonInfo
{
public void Write(WorldPacket data)
@@ -574,6 +586,7 @@ namespace Game.Networking.Packets
data.WriteInt32(Talents.Count);
data.WriteInt32(Collections.Count);
data.WriteInt32(EventLists.Count);
data.WriteInt32(SpecGroups.Count);
data.WriteInt32(CanStartMission.Count);
data.WriteInt32(ArchivedMissions.Count);
data.WriteUInt32(NumFollowerActivationsRemaining);
@@ -601,6 +614,9 @@ namespace Game.Networking.Packets
foreach (GarrisonEventList eventList in EventLists)
eventList.Write(data);
foreach (var specGroup in SpecGroups)
specGroup.Write(data);
foreach (var id in ArchivedMissions)
data.WriteInt32(id);
@@ -647,6 +663,7 @@ namespace Game.Networking.Packets
public List<GarrisonTalent> Talents = new();
public List<GarrisonCollection> Collections = new();
public List<GarrisonEventList> EventLists = new();
public List<GarrisonSpecGroup> SpecGroups = new();
public List<bool> CanStartMission = new();
public List<int> ArchivedMissions = new();
}
@@ -229,10 +229,16 @@ namespace Game.Networking.Packets
public override void Read()
{
uint nameLen = _worldPacket.ReadBits<uint>(9);
bool hasUnused910 = _worldPacket.HasBit();
Name = _worldPacket.ReadString(nameLen);
if (hasUnused910)
Unused910.Set(_worldPacket.ReadInt32());
}
public string Name;
public Optional<int> Unused910;
}
public class GuildInvite : ServerPacket
@@ -1640,6 +1646,9 @@ namespace Game.Networking.Packets
data.WriteBits(OfficerNote.GetByteCount(), 8);
data.WriteBit(Authenticated);
data.WriteBit(SorEligible);
data.FlushBits();
DungeonScore.Write(data);
data.WriteString(Name);
data.WriteString(Note);
@@ -1666,6 +1675,7 @@ namespace Game.Networking.Packets
public bool Authenticated;
public bool SorEligible;
public GuildRosterProfessionData[] Profession = new GuildRosterProfessionData[2];
public DungeonScoreSummary DungeonScore = new();
}
public class GuildEventEntry
@@ -299,6 +299,7 @@ namespace Game.Networking.Packets
data.WriteInt32(WeeklyBestRating);
data.WriteInt32(SeasonBestRating);
data.WriteInt32(PvpTierID);
data.WriteInt32(WeeklyBestWinPvpTierID);
data.WriteBit(Disqualified);
data.FlushBits();
}
@@ -312,6 +313,7 @@ namespace Game.Networking.Packets
public int WeeklyBestRating;
public int SeasonBestRating;
public int PvpTierID;
public int WeeklyBestWinPvpTierID;
public byte Bracket;
public bool Disqualified;
}
@@ -167,12 +167,10 @@ namespace Game.Networking.Packets
{
Mailbox = _worldPacket.ReadPackedGuid();
MailID = _worldPacket.ReadUInt32();
BiReceipt = _worldPacket.HasBit();
}
public ObjectGuid Mailbox;
public uint MailID;
public bool BiReceipt;
}
public class MailDelete : ClientPacket
@@ -323,7 +323,11 @@ namespace Game.Networking.Packets
data.WriteUInt32(movementForce.TransportID);
data.WriteFloat(movementForce.Magnitude);
data.WriteBits(movementForce.Type, 2);
data.WriteBit(movementForce.Unused910 != 0);
data.FlushBits();
if (movementForce.Unused910 != 0)
data.WriteInt32(movementForce.Unused910);
}
}
@@ -0,0 +1,179 @@
/*
* Copyright (C) 2012-2020 CypherCore <http://github.com/CypherCore>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using Game.Entities;
using System.Collections.Generic;
namespace Game.Networking.Packets
{
public struct DungeonScoreMapSummary
{
public int ChallengeModeID;
public int MapScore;
public int BestRunLevel;
public int BestRunDurationMS;
public bool FinishedSuccess;
public void Write(WorldPacket data)
{
data.WriteInt32(ChallengeModeID);
data.WriteInt32(MapScore);
data.WriteInt32(BestRunLevel);
data.WriteInt32(BestRunDurationMS);
data.WriteBit(FinishedSuccess);
data.FlushBits();
}
}
public class DungeonScoreSummary
{
public int CurrentSeasonScore;
public List<DungeonScoreMapSummary> Runs = new();
public void Write(WorldPacket data)
{
data.WriteInt32(CurrentSeasonScore);
data.WriteInt32(Runs.Count);
foreach (var dungeonScoreMapSummary in Runs)
dungeonScoreMapSummary.Write(data);
}
}
public struct MythicPlusMember
{
public ObjectGuid BnetAccountGUID;
public ulong GuildClubMemberID;
public ObjectGuid GUID;
public ObjectGuid GuildGUID;
public uint NativeRealmAddress;
public uint VirtualRealmAddress;
public short ChrSpecializationID;
public short RaceID;
public int ItemLevel;
public int CovenantID;
public int SoulbindID;
public void Write(WorldPacket data)
{
data.WritePackedGuid(BnetAccountGUID);
data.WriteUInt64(GuildClubMemberID);
data.WritePackedGuid(GUID);
data.WritePackedGuid(GuildGUID);
data.WriteUInt32(NativeRealmAddress);
data.WriteUInt32(VirtualRealmAddress);
data.WriteInt16(ChrSpecializationID);
data.WriteInt16(RaceID);
data.WriteInt32(ItemLevel);
data.WriteInt32(CovenantID);
data.WriteInt32(SoulbindID);
}
}
public class MythicPlusRun
{
public int MapChallengeModeID;
public bool Completed;
public uint Level;
public int DurationMs;
public long StartDate;
public long CompletionDate;
public int Season;
public List<MythicPlusMember> Members = new();
public int RunScore;
public int[] KeystoneAffixIDs = new int[4];
public void Write(WorldPacket data)
{
data.WriteInt32(MapChallengeModeID);
data.WriteUInt32(Level);
data.WriteInt32(DurationMs);
data.WriteInt64(StartDate);
data.WriteInt64(CompletionDate);
data.WriteInt32(Season);
foreach (var id in KeystoneAffixIDs)
data.WriteInt32(id);
data.WriteInt32(Members.Count);
data.WriteInt32(RunScore);
foreach (var member in Members)
member.Write(data);
data.WriteBit(Completed);
data.FlushBits();
}
}
public class DungeonScoreBestRunForAffix
{
public int KeystoneAffixID;
public MythicPlusRun Run = new();
public int Score;
public void Write(WorldPacket data)
{
data.WriteInt32(KeystoneAffixID);
data.WriteInt32(Score);
Run.Write(data);
}
}
public class DungeonScoreMapData
{
public int MapChallengeModeID;
public List<DungeonScoreBestRunForAffix> BestRuns = new();
public int OverAllScore;
public void Write(WorldPacket data)
{
data.WriteInt32(MapChallengeModeID);
data.WriteInt32(BestRuns.Count);
data.WriteInt32(OverAllScore);
foreach (var bestRun in BestRuns)
bestRun.Write(data);
}
}
public class DungeonScoreSeasonData
{
public int Season;
public List<DungeonScoreMapData> Maps = new();
public int SeasonScore;
public void Write(WorldPacket data)
{
data.WriteInt32(Season);
data.WriteInt32(Maps.Count);
data.WriteInt32(SeasonScore);
foreach (var map in Maps)
map.Write(data);
}
}
public class DungeonScoreData
{
public List<DungeonScoreSeasonData> Seasons = new();
public int TotalRuns;
public void Write(WorldPacket data)
{
data.WriteInt32(Seasons.Count);
data.WriteInt32(TotalRuns);
foreach (var season in Seasons)
season.Write(data);
}
}
}
+2 -3
View File
@@ -205,8 +205,7 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WriteUInt32(Id);
_worldPacket.WriteFloat(Pos.X);
_worldPacket.WriteFloat(Pos.Y);
_worldPacket.WriteVector3(Pos);
_worldPacket.WriteUInt32(Icon);
_worldPacket.WriteUInt32(Importance);
_worldPacket.WriteUInt32(Unknown905);
@@ -218,7 +217,7 @@ namespace Game.Networking.Packets
public uint Id;
public uint Flags;
public Vector2 Pos;
public Vector3 Pos;
public uint Icon;
public uint Importance;
public uint Unknown905;
@@ -1001,6 +1001,8 @@ namespace Game.Networking.Packets
data.WriteBit(PetStats.HasValue);
data.FlushBits();
DungeonScore.Write(data);
if (PetStats.HasValue)
PetStats.Value.Write(data);
}
@@ -1032,6 +1034,7 @@ namespace Game.Networking.Packets
public uint WmoDoodadPlacementID;
public sbyte[] PartyType = new sbyte[2];
public CTROptions ChromieTime;
public DungeonScoreSummary DungeonScore = new();
}
struct PartyPlayerInfo
@@ -91,11 +91,13 @@ namespace Game.Networking.Packets
uint titleLen = _worldPacket.ReadBits<uint>(7);
Unit = _worldPacket.ReadPackedGuid();
Unused910 = _worldPacket.ReadUInt32();
Title = _worldPacket.ReadString(titleLen);
}
public ObjectGuid Unit;
public string Title;
public uint Unused910;
}
public class PetitionShowSignatures : ClientPacket
@@ -132,6 +132,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(Stats.RequiredExpansion);
_worldPacket.WriteUInt32(Stats.VignetteID);
_worldPacket.WriteInt32(Stats.Class);
_worldPacket.WriteInt32(Stats.CreatureDifficultyID);
_worldPacket.WriteInt32(Stats.WidgetSetID);
_worldPacket.WriteInt32(Stats.WidgetSetUnitConditionID);
@@ -720,6 +721,7 @@ namespace Game.Networking.Packets
public uint RequiredExpansion;
public uint VignetteID;
public int Class;
public int CreatureDifficultyID;
public int WidgetSetID;
public int WidgetSetUnitConditionID;
public uint[] Flags = new uint[2];
@@ -166,6 +166,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(Info.PortraitGiver);
_worldPacket.WriteUInt32(Info.PortraitGiverMount);
_worldPacket.WriteInt32(Info.PortraitGiverModelSceneID);
_worldPacket.WriteUInt32(Info.PortraitTurnIn);
for (uint i = 0; i < SharedConst.QuestRewardReputationsCount; ++i)
@@ -312,6 +313,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(QuestPackageID);
_worldPacket.WriteUInt32(PortraitGiver);
_worldPacket.WriteUInt32(PortraitGiverMount);
_worldPacket.WriteInt32(PortraitGiverModelSceneID);
_worldPacket.WriteUInt32(PortraitTurnIn);
_worldPacket.WriteBits(QuestTitle.GetByteCount(), 9);
@@ -332,6 +334,7 @@ namespace Game.Networking.Packets
public uint PortraitTurnIn;
public uint PortraitGiver;
public uint PortraitGiverMount;
public int PortraitGiverModelSceneID;
public string QuestTitle = "";
public string RewardText = "";
public string PortraitGiverText = "";
@@ -430,6 +433,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(QuestPackageID);
_worldPacket.WriteUInt32(PortraitGiver);
_worldPacket.WriteUInt32(PortraitGiverMount);
_worldPacket.WriteInt32(PortraitGiverModelSceneID);
_worldPacket.WriteUInt32(PortraitTurnIn);
_worldPacket.WriteUInt32(QuestFlags[0]); // Flags
_worldPacket.WriteUInt32(QuestFlags[1]); // FlagsEx
@@ -494,6 +498,7 @@ namespace Game.Networking.Packets
public uint PortraitTurnIn;
public uint PortraitGiver;
public uint PortraitGiverMount;
public int PortraitGiverModelSceneID;
public int QuestStartItemID;
public int QuestSessionBonus;
public string PortraitGiverText = "";
@@ -839,6 +844,7 @@ namespace Game.Networking.Packets
_worldPacket.WritePackedGuid(SenderGUID);
_worldPacket.WriteInt32(UiTextureKitID);
_worldPacket.WriteUInt32(SoundKitID);
_worldPacket.WriteUInt8(NumRerolls);
_worldPacket.WriteBits(Question.GetByteCount(), 8);
_worldPacket.WriteBit(CloseChoiceFrame);
_worldPacket.WriteBit(HideWarboardHeader);
@@ -855,6 +861,7 @@ namespace Game.Networking.Packets
public int ChoiceID;
public int UiTextureKitID;
public uint SoundKitID;
public byte NumRerolls;
public string Question;
public List<PlayerChoiceResponse> Responses = new();
public bool CloseChoiceFrame;
@@ -870,10 +877,12 @@ namespace Game.Networking.Packets
{
ChoiceID = _worldPacket.ReadInt32();
ResponseID = _worldPacket.ReadInt32();
IsReroll = _worldPacket.HasBit();
}
public int ChoiceID;
public int ResponseID;
public bool IsReroll;
}
//Structs
@@ -970,6 +979,7 @@ namespace Game.Networking.Packets
public uint RewardNumSkillUps; // reward skill points
public uint PortraitGiver; // quest giver entry ?
public uint PortraitGiverMount;
public int PortraitGiverModelSceneID;
public uint PortraitTurnIn; // quest turn in entry ?
public string PortraitGiverText;
public string PortraitGiverName;
+8 -13
View File
@@ -1240,9 +1240,8 @@ namespace Game.Networking.Packets
ScalingHealthItemLevelCurveID = (ushort)target.m_unitData.ScalingHealthItemLevelCurveID;
TargetLevel = (byte)target.GetLevel();
Expansion = (byte)creatureTemplate.HealthScalingExpansion;
TargetMinScalingLevel = (byte)creatureScaling.MinLevel;
TargetMaxScalingLevel = (byte)creatureScaling.MaxLevel;
TargetScalingLevelDelta = (sbyte)attacker.m_unitData.ScalingLevelDelta;
TargetContentTuningID = creatureScaling.ContentTuningID;
return true;
}
@@ -1257,9 +1256,8 @@ namespace Game.Networking.Packets
ScalingHealthItemLevelCurveID = (ushort)target.m_unitData.ScalingHealthItemLevelCurveID;
TargetLevel = (byte)target.GetLevel();
Expansion = (byte)creatureTemplate.HealthScalingExpansion;
TargetMinScalingLevel = (byte)creatureScaling.MinLevel;
TargetMaxScalingLevel = (byte)creatureScaling.MaxLevel;
TargetScalingLevelDelta = (sbyte)target.m_unitData.ScalingLevelDelta;
TargetContentTuningID = creatureScaling.ContentTuningID;
return true;
}
@@ -1274,9 +1272,8 @@ namespace Game.Networking.Packets
PlayerItemLevel = 0;
TargetLevel = (byte)target.GetLevel();
Expansion = (byte)creatureTemplate.HealthScalingExpansion;
TargetMinScalingLevel = (byte)creatureScaling.MinLevel;
TargetMaxScalingLevel = (byte)creatureScaling.MaxLevel;
TargetScalingLevelDelta = (sbyte)accessor.m_unitData.ScalingLevelDelta;
TargetContentTuningID = creatureScaling.ContentTuningID;
return true;
}
@@ -1323,10 +1320,10 @@ namespace Game.Networking.Packets
data.WriteUInt16(ScalingHealthItemLevelCurveID);
data.WriteUInt8(TargetLevel);
data.WriteUInt8(Expansion);
data.WriteUInt8(TargetMinScalingLevel);
data.WriteUInt8(TargetMaxScalingLevel);
data.WriteInt8(TargetScalingLevelDelta);
data.WriteUInt32((uint)Flags);
data.WriteUInt32(PlayerContentTuningID);
data.WriteUInt32(TargetContentTuningID);
data.WriteBits(TuningType, 4);
data.FlushBits();
}
@@ -1338,10 +1335,10 @@ namespace Game.Networking.Packets
public ushort ScalingHealthItemLevelCurveID;
public byte TargetLevel;
public byte Expansion;
public byte TargetMinScalingLevel;
public byte TargetMaxScalingLevel;
public sbyte TargetScalingLevelDelta;
public ContentTuningFlags Flags = ContentTuningFlags.NoLevelScaling | ContentTuningFlags.NoItemLevelScaling;
public ContentTuningFlags Flags = ContentTuningFlags.NoLevelScaling | ContentTuningFlags.NoItemLevelScaling;
public uint PlayerContentTuningID;
public uint TargetContentTuningID;
public enum ContentTuningType
{
@@ -1581,13 +1578,11 @@ namespace Game.Networking.Packets
{
public int ItemID;
public int Slot;
public int Count;
public void Read(WorldPacket data)
{
ItemID = data.ReadInt32();
Slot = data.ReadInt32();
Count = data.ReadInt32();
}
}
@@ -233,6 +233,19 @@ namespace Game.Networking.Packets
}
}
public class FeatureSystemStatus2 : ServerPacket
{
public FeatureSystemStatus2() : base(ServerOpcodes.FeatureSystemStatus2) { }
public override void Write()
{
_worldPacket.WriteBit(TextToSpeechFeatureEnabled);
_worldPacket.FlushBits();
}
public bool TextToSpeechFeatureEnabled;
}
public class FeatureSystemStatusGlueScreen : ServerPacket
{
public FeatureSystemStatusGlueScreen() : base(ServerOpcodes.FeatureSystemStatusGlueScreen) { }
@@ -141,6 +141,7 @@ namespace Game.Networking.Packets
bool hasLFGListApplicant = _worldPacket.HasBit();
bool hasClubMessage = _worldPacket.HasBit();
bool hasClubFinderResult = _worldPacket.HasBit();
bool hasUnk910 = _worldPacket.HasBit();
_worldPacket.ResetBitPos();
@@ -196,6 +197,12 @@ namespace Game.Networking.Packets
ClubFinderResult.HasValue = true;
ClubFinderResult.Value.Read(_worldPacket);
}
if (hasUnk910)
{
Unused910.HasValue = true;
Unused910.Value.Read(_worldPacket);
}
}
public SupportTicketHeader Header;
@@ -212,6 +219,7 @@ namespace Game.Networking.Packets
public Optional<SupportTicketLFGListApplicant> LFGListApplicant;
public Optional<SupportTicketCommunityMessage> CommunityMessage;
public Optional<SupportTicketClubFinderResult> ClubFinderResult;
public Optional<SupportTicketUnused910> Unused910;
public struct SupportTicketChatLine
{
@@ -460,6 +468,19 @@ namespace Game.Networking.Packets
ClubName = data.ReadString(data.ReadBits<uint>(12));
}
}
public struct SupportTicketUnused910
{
public string field_0;
public ObjectGuid field_104;
public void Read(WorldPacket data)
{
uint field_0Length = data.ReadBits<uint>(7);
field_104 = data.ReadPackedGuid();
field_0 = data.ReadString(field_0Length);
}
}
}
class Complaint : ClientPacket