Core/PacketIO: 9.1.0 opcodes and packet structures
Port From (https://github.com/TrinityCore/TrinityCore/commit/cd5357dc185f95c6ef78089c5ab8bd2b885dd89f)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user