Hondacrx
2024-08-24 00:13:35 -04:00
parent ce99a1f7f6
commit 1ca497b79f
27 changed files with 3020 additions and 2701 deletions
@@ -751,7 +751,13 @@ namespace Framework.Constants
CompleteTrackingQuest = 250, /*NYI*/ CompleteTrackingQuest = 250, /*NYI*/
GainLevels = 253, // Gain levels GainLevels = 253, // Gain levels
Count = 257
CompleteQuestsCountOnAccount = 257, /*NYI*/
WarbandBankTabPurchased = 260, /*NYI*/
LearnTaxiNode = 262,
Count = 263
} }
public enum CriteriaDataType public enum CriteriaDataType
@@ -73,55 +73,56 @@ namespace Framework.Constants
CharCreateClassTrialThrottleWeek = 60, CharCreateClassTrialThrottleWeek = 60,
CharCreateClassTrialThrottleAccount = 61, CharCreateClassTrialThrottleAccount = 61,
CharCreateFactionBalance = 62, CharCreateFactionBalance = 62,
CharCreateTimerunning = 63,
CharDeleteInProgress = 63, CharDeleteInProgress = 64,
CharDeleteSuccess = 64, CharDeleteSuccess = 65,
CharDeleteFailed = 65, CharDeleteFailed = 66,
CharDeleteFailedCharacterServicePending = 66, CharDeleteFailedCharacterServicePending = 67,
CharDeleteFailedGuildLeader = 67, CharDeleteFailedGuildLeader = 68,
CharDeleteFailedArenaCaptain = 68, CharDeleteFailedArenaCaptain = 69,
CharDeleteFailedHasHeirloomOrMail = 69, CharDeleteFailedHasHeirloomOrMail = 70,
CharDeleteFailedDeprecated1 = 70, CharDeleteFailedDeprecated1 = 71,
CharDeleteFailedHasWowToken = 71, CharDeleteFailedHasWowToken = 72,
CharDeleteFailedDeprecated2 = 72, CharDeleteFailedDeprecated2 = 73,
CharDeleteFailedCommunityOwner = 73, CharDeleteFailedCommunityOwner = 74,
CharLoginInProgress = 74, CharLoginInProgress = 75,
CharLoginSuccess = 75, CharLoginSuccess = 76,
CharLoginNoWorld = 76, CharLoginNoWorld = 77,
CharLoginDuplicateCharacter = 77, CharLoginDuplicateCharacter = 78,
CharLoginNoInstances = 78, CharLoginNoInstances = 79,
CharLoginFailed = 79, CharLoginFailed = 80,
CharLoginDisabled = 80, CharLoginDisabled = 81,
CharLoginNoCharacter = 81, CharLoginNoCharacter = 82,
CharLoginLockedForTransfer = 82, CharLoginLockedForTransfer = 83,
CharLoginLockedByBilling = 83, CharLoginLockedByBilling = 84,
CharLoginLockedByMobileAh = 84, CharLoginLockedByMobileAh = 85,
CharLoginTemporaryGmLock = 85, CharLoginTemporaryGmLock = 86,
CharLoginLockedByCharacterUpgrade = 86, CharLoginLockedByCharacterUpgrade = 87,
CharLoginLockedByRevokedCharacterUpgrade = 87, CharLoginLockedByRevokedCharacterUpgrade = 88,
CharLoginLockedByRevokedVasTransaction = 88, CharLoginLockedByRevokedVasTransaction = 89,
CharLoginLockedByRestriction = 89, CharLoginLockedByRestriction = 90,
CharLoginLockedForRealmPlaytype = 90, CharLoginLockedForRealmPlaytype = 91,
CharNameSuccess = 91, CharNameSuccess = 92,
CharNameFailure = 92, CharNameFailure = 93,
CharNameNoName = 93, CharNameNoName = 94,
CharNameTooShort = 94, CharNameTooShort = 95,
CharNameTooLong = 95, CharNameTooLong = 96,
CharNameInvalidCharacter = 96, CharNameInvalidCharacter = 97,
CharNameMixedLanguages = 97, CharNameMixedLanguages = 98,
CharNameProfane = 98, CharNameProfane = 99,
CharNameReserved = 99, CharNameReserved = 100,
CharNameInvalidApostrophe = 100, CharNameInvalidApostrophe = 101,
CharNameMultipleApostrophes = 101, CharNameMultipleApostrophes = 102,
CharNameThreeConsecutive = 102, CharNameThreeConsecutive = 103,
CharNameInvalidSpace = 103, CharNameInvalidSpace = 104,
CharNameConsecutiveSpaces = 104, CharNameConsecutiveSpaces = 105,
CharNameRussianConsecutiveSilentCharacters = 105, CharNameRussianConsecutiveSilentCharacters = 106,
CharNameRussianSilentCharacterAtBeginningOrEnd = 106, CharNameRussianSilentCharacterAtBeginningOrEnd = 107,
CharNameDeclensionDoesntMatchBaseName = 107, CharNameDeclensionDoesntMatchBaseName = 108,
CharNameSpacesDisallowed = 108, CharNameSpacesDisallowed = 109,
} }
public enum CharacterUndeleteResult public enum CharacterUndeleteResult
+6 -1
View File
@@ -415,7 +415,7 @@ namespace Framework.Constants
CraftingReagentSlot12 = 55, CraftingReagentSlot12 = 55,
CraftingReagentSlot13 = 56, CraftingReagentSlot13 = 56,
CraftingReagentSlot14 = 57, CraftingReagentSlot14 = 57,
Reforge = 58,
Max Max
} }
@@ -558,6 +558,11 @@ namespace Framework.Constants
TemplateCharacter2 = 98, TemplateCharacter2 = 98,
TemplateCharacter3 = 99, TemplateCharacter3 = 99,
TemplateCharacter4 = 100, TemplateCharacter4 = 100,
DungeonNormalJackpot = 101,
DungeonHeroicJackpot = 102,
DungeonMythicJackpot = 103,
Delves = 104,
Timerunning = 105,
Max Max
} }
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -35,7 +35,8 @@ namespace Framework.Constants
public enum PetStableFlags public enum PetStableFlags
{ {
Active = 0x1, Active = 0x1,
Inactive = 0x2 Inactive = 0x2,
Favorite = 0x8
} }
public enum PetSpellState public enum PetSpellState
+2 -1
View File
@@ -148,7 +148,8 @@ namespace Framework.Constants
Mobile = 0x40, Mobile = 0x40,
Guide = 0x1000, Guide = 0x1000,
Newcomer = 0x2000, Newcomer = 0x2000,
Censored = 0x4000 Censored = 0x4000,
Timerunning = 0x8000
} }
public enum DrunkenState public enum DrunkenState
File diff suppressed because it is too large Load Diff
@@ -349,8 +349,9 @@ namespace Framework.Database
" FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?"); " FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?");
// ContentTuning.db2 // ContentTuning.db2
PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, MinLevel, MaxLevel, MinLevelType, MaxLevelType, TargetLevelDelta, " + PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, HealthItemLevelCurveID, DamageItemLevelCurveID, MinLevel, MaxLevel, " +
"TargetLevelMaxDelta, TargetLevelMin, TargetLevelMax, MinItemLevel, QuestXpMultiplier FROM content_tuning WHERE (`VerifiedBuild` > 0) = ?"); "MinLevelType, MaxLevelType, TargetLevelDelta, TargetLevelMaxDelta, TargetLevelMin, TargetLevelMax, MinItemLevel, QuestXpMultiplier" +
" FROM content_tuning WHERE (`VerifiedBuild` > 0) = ?");
// ContentTuningXExpected.db2 // ContentTuningXExpected.db2
PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING_X_EXPECTED, "SELECT ID, ExpectedStatModID, MinMythicPlusSeasonID, MaxMythicPlusSeasonID, " + PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING_X_EXPECTED, "SELECT ID, ExpectedStatModID, MinMythicPlusSeasonID, MaxMythicPlusSeasonID, " +
@@ -767,7 +768,7 @@ namespace Framework.Database
// ItemModifiedAppearance.db2 // ItemModifiedAppearance.db2
PrepareStatement(HotfixStatements.SEL_ITEM_MODIFIED_APPEARANCE, "SELECT ID, ItemID, ItemAppearanceModifierID, ItemAppearanceID, OrderIndex, " + PrepareStatement(HotfixStatements.SEL_ITEM_MODIFIED_APPEARANCE, "SELECT ID, ItemID, ItemAppearanceModifierID, ItemAppearanceID, OrderIndex, " +
"TransmogSourceTypeEnum FROM item_modified_appearance WHERE (`VerifiedBuild` > 0) = ?"); "TransmogSourceTypeEnum Flags, FROM item_modified_appearance WHERE (`VerifiedBuild` > 0) = ?");
// ItemModifiedAppearanceExtra.db2 // ItemModifiedAppearanceExtra.db2
PrepareStatement(HotfixStatements.SEL_ITEM_MODIFIED_APPEARANCE_EXTRA, "SELECT ID, IconFileDataID, UnequippedIconFileDataID, SheatheType, " + PrepareStatement(HotfixStatements.SEL_ITEM_MODIFIED_APPEARANCE_EXTRA, "SELECT ID, IconFileDataID, UnequippedIconFileDataID, SheatheType, " +
+1 -1
View File
@@ -15,7 +15,7 @@ namespace Game.DataStorage
public uint Id; public uint Id;
public short InstanceID; public short InstanceID;
public AchievementFaction Faction; public AchievementFaction Faction;
public ushort Supercedes; public int Supercedes;
public ushort Category; public ushort Category;
public byte MinimumCriteria; public byte MinimumCriteria;
public byte Points; public byte Points;
@@ -386,6 +386,8 @@ namespace Game.DataStorage
public uint Id; public uint Id;
public int Flags; public int Flags;
public int ExpansionID; public int ExpansionID;
public int HealthItemLevelCurveID;
public int DamageItemLevelCurveID;
public int MinLevel; public int MinLevel;
public int MaxLevel; public int MaxLevel;
public int MinLevelType; public int MinLevelType;
@@ -286,6 +286,7 @@ namespace Game.DataStorage
public int ItemAppearanceID; public int ItemAppearanceID;
public int OrderIndex; public int OrderIndex;
public byte TransmogSourceTypeEnum; public byte TransmogSourceTypeEnum;
public int Flags;
} }
public sealed class ItemModifiedAppearanceExtraRecord public sealed class ItemModifiedAppearanceExtraRecord
File diff suppressed because it is too large Load Diff
+74
View File
@@ -957,16 +957,46 @@ namespace Game.Entities
if (srcPetIndex >= 0) if (srcPetIndex >= 0)
{ {
PetStableFlags flagToAdd, flagToRemove;
if (SharedConst.IsActivePetSlot(dstPetSlot))
{
flagToAdd = PetStableFlags.Active;
flagToRemove = PetStableFlags.Inactive;
}
else
{
flagToAdd = PetStableFlags.Inactive;
flagToRemove = PetStableFlags.Active;
}
StableInfo stableInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.PetStable); StableInfo stableInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.PetStable);
StablePetInfo stablePetInfo = stableInfo.ModifyValue(stableInfo.Pets, srcPetIndex); StablePetInfo stablePetInfo = stableInfo.ModifyValue(stableInfo.Pets, srcPetIndex);
SetUpdateFieldValue(stablePetInfo.ModifyValue(stablePetInfo.PetSlot), (uint)dstPetSlot); SetUpdateFieldValue(stablePetInfo.ModifyValue(stablePetInfo.PetSlot), (uint)dstPetSlot);
SetUpdateFieldFlagValue(stablePetInfo.ModifyValue(stablePetInfo.PetFlags), (byte)flagToAdd);
RemoveUpdateFieldFlagValue(stablePetInfo.ModifyValue(stablePetInfo.PetFlags), (byte)flagToRemove);
} }
if (dstPetIndex >= 0) if (dstPetIndex >= 0)
{ {
PetStableFlags flagToAdd, flagToRemove;
if (SharedConst.IsActivePetSlot(srcPetSlot))
{
flagToAdd = PetStableFlags.Active;
flagToRemove = PetStableFlags.Inactive;
}
else
{
flagToAdd = PetStableFlags.Inactive;
flagToRemove = PetStableFlags.Active;
}
StableInfo stableInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.PetStable); StableInfo stableInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.PetStable);
StablePetInfo stablePetInfo = stableInfo.ModifyValue(stableInfo.Pets, dstPetIndex); StablePetInfo stablePetInfo = stableInfo.ModifyValue(stableInfo.Pets, dstPetIndex);
SetUpdateFieldValue(stablePetInfo.ModifyValue(stablePetInfo.PetSlot), (uint)srcPetSlot); SetUpdateFieldValue(stablePetInfo.ModifyValue(stablePetInfo.PetSlot), (uint)srcPetSlot);
SetUpdateFieldFlagValue(stablePetInfo.ModifyValue(stablePetInfo.PetFlags), (byte)flagToAdd);
RemoveUpdateFieldFlagValue(stablePetInfo.ModifyValue(stablePetInfo.PetFlags), (byte)flagToRemove);
} }
sess.SendPetStableResult(StableResult.StableSuccess); sess.SendPetStableResult(StableResult.StableSuccess);
@@ -4745,6 +4775,48 @@ namespace Game.Entities
} }
} }
public void DeletePetFromDB(uint petNumber)
{
if (m_activePlayerData.PetStable.HasValue())
{
int ufIndex = m_activePlayerData.PetStable.GetValue().Pets.FindIndexIf(p => p.PetNumber == petNumber);
if (ufIndex >= 0)
{
StableInfo stableInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.PetStable);
RemoveDynamicUpdateFieldValue(stableInfo.ModifyValue(stableInfo.Pets), ufIndex);
}
}
if (m_petStable == null)
return;
var petIndex = m_petStable.GetCurrentActivePetIndex();
if (petIndex.HasValue)
if (m_petStable.ActivePets[petIndex.Value] != null && m_petStable.ActivePets[petIndex.Value].PetNumber == petNumber)
m_petStable.CurrentPetIndex = null;
bool foundPet = false;
void FindAndRemovePet(PetStable.PetInfo[] pets)
{
for (var i = 0; i < pets.Length; ++i)
{
var pet = pets[i];
if (pet != null && pet.PetNumber == petNumber && pet.Type == PetType.Hunter)
{
pets[i] = null;
foundPet = true;
}
}
};
FindAndRemovePet(m_petStable.ActivePets);
FindAndRemovePet(m_petStable.StabledPets);
if (foundPet)
Pet.DeleteFromDB(petNumber);
}
public void SendTameFailure(PetTameResult result) public void SendTameFailure(PetTameResult result)
{ {
PetTameFailure petTameFailure = new(); PetTameFailure petTameFailure = new();
@@ -5368,6 +5440,8 @@ namespace Game.Entities
tag |= ChatFlags.AFK; tag |= ChatFlags.AFK;
if (IsDeveloper()) if (IsDeveloper())
tag |= ChatFlags.Dev; tag |= ChatFlags.Dev;
if (m_activePlayerData.TimerunningSeasonID != 0)
tag |= ChatFlags.Timerunning;
return tag; return tag;
} }
+6
View File
@@ -417,6 +417,12 @@ namespace Game
return; return;
} }
if (charCreate.CreateInfo.TimerunningSeasonID != 0)
{
SendCharCreate(ResponseCodes.CharCreateTimerunning);
return;
}
CharacterCreateInfo createInfo = charCreate.CreateInfo; CharacterCreateInfo createInfo = charCreate.CreateInfo;
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.SEL_CHECK_NAME); PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.SEL_CHECK_NAME);
stmt.AddValue(0, charCreate.CreateInfo.Name); stmt.AddValue(0, charCreate.CreateInfo.Name);
+44 -17
View File
@@ -63,9 +63,9 @@ namespace Game
} }
[WorldPacketHandler(ClientOpcodes.ChatMessageWhisper)] [WorldPacketHandler(ClientOpcodes.ChatMessageWhisper)]
void HandleChatMessageWhisper(ChatMessageWhisper packet) void HandleChatMessageWhisper(ChatMessageWhisper chatMessageWhisper)
{ {
HandleChat(ChatMsg.Whisper, packet.Language, packet.Text, packet.Target); HandleChat(ChatMsg.Whisper, chatMessageWhisper.Language, chatMessageWhisper.Text, chatMessageWhisper.Target, chatMessageWhisper.TargetGUID);
} }
[WorldPacketHandler(ClientOpcodes.ChatMessageChannel)] [WorldPacketHandler(ClientOpcodes.ChatMessageChannel)]
@@ -80,7 +80,7 @@ namespace Game
HandleChat(ChatMsg.Emote, Language.Universal, packet.Text); HandleChat(ChatMsg.Emote, Language.Universal, packet.Text);
} }
void HandleChat(ChatMsg type, Language lang, string msg, string target = "", ObjectGuid channelGuid = default) void HandleChat(ChatMsg type, Language lang, string msg, string target = "", ObjectGuid targetGuid = default)
{ {
Player sender = GetPlayer(); Player sender = GetPlayer();
@@ -204,15 +204,22 @@ namespace Game
break; break;
case ChatMsg.Whisper: case ChatMsg.Whisper:
// @todo implement cross realm whispers (someday) // @todo implement cross realm whispers (someday)
ExtendedPlayerName extName = ObjectManager.ExtractExtendedPlayerName(target); Player receiver = null;
if (!targetGuid.IsEmpty())
if (!ObjectManager.NormalizePlayerName(ref extName.Name)) receiver = Global.ObjAccessor.FindConnectedPlayer(targetGuid);
else
{ {
SendChatPlayerNotfoundNotice(target); ExtendedPlayerName extName = ObjectManager.ExtractExtendedPlayerName(target);
break;
if (!ObjectManager.NormalizePlayerName(ref extName.Name))
{
SendChatPlayerNotfoundNotice(target);
break;
}
receiver = Global.ObjAccessor.FindPlayerByName(extName.Name);
} }
Player receiver = Global.ObjAccessor.FindPlayerByName(extName.Name);
if (receiver == null || (lang != Language.Addon && !receiver.IsAcceptWhispers() && receiver.GetSession().HasPermission(RBACPermissions.CanFilterWhispers) && !receiver.IsInWhisperWhiteList(sender.GetGUID()))) if (receiver == null || (lang != Language.Addon && !receiver.IsAcceptWhispers() && receiver.GetSession().HasPermission(RBACPermissions.CanFilterWhispers) && !receiver.IsInWhisperWhiteList(sender.GetGUID())))
{ {
SendChatPlayerNotfoundNotice(target); SendChatPlayerNotfoundNotice(target);
@@ -331,7 +338,7 @@ namespace Game
return; return;
} }
} }
Channel chn = !channelGuid.IsEmpty() ? ChannelManager.GetChannelForPlayerByGuid(channelGuid, sender) : ChannelManager.GetChannelForPlayerByNamePart(target, sender); Channel chn = !targetGuid.IsEmpty() ? ChannelManager.GetChannelForPlayerByGuid(targetGuid, sender) : ChannelManager.GetChannelForPlayerByNamePart(target, sender);
if (chn != null) if (chn != null)
{ {
var chatChannel = CliDB.ChatChannelsStorage.LookupByKey(chn.GetChannelId()); var chatChannel = CliDB.ChatChannelsStorage.LookupByKey(chn.GetChannelId());
@@ -373,10 +380,23 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.ChatAddonMessageTargeted)] [WorldPacketHandler(ClientOpcodes.ChatAddonMessageTargeted)]
void HandleChatAddonMessageTargeted(ChatAddonMessageTargeted chatAddonMessageTargeted) void HandleChatAddonMessageTargeted(ChatAddonMessageTargeted chatAddonMessageTargeted)
{ {
HandleChatAddon(chatAddonMessageTargeted.Params.Type, chatAddonMessageTargeted.Params.Prefix, chatAddonMessageTargeted.Params.Text, chatAddonMessageTargeted.Params.IsLogged, chatAddonMessageTargeted.Target, chatAddonMessageTargeted.ChannelGUID); switch (chatAddonMessageTargeted.Params.Type)
{
case ChatMsg.Whisper:
HandleChatAddon(chatAddonMessageTargeted.Params.Type, chatAddonMessageTargeted.Params.Prefix, chatAddonMessageTargeted.Params.Text,
chatAddonMessageTargeted.Params.IsLogged, chatAddonMessageTargeted.PlayerName, chatAddonMessageTargeted.PlayerGUID);
break;
case ChatMsg.Channel:
HandleChatAddon(chatAddonMessageTargeted.Params.Type, chatAddonMessageTargeted.Params.Prefix, chatAddonMessageTargeted.Params.Text,
chatAddonMessageTargeted.Params.IsLogged, chatAddonMessageTargeted.ChannelName, chatAddonMessageTargeted.ChannelGUID);
break;
default:
Log.outError(LogFilter.Misc, $"HandleChatAddonMessageTargetedOpcode: unknown addon message type {chatAddonMessageTargeted.Params.Type}");
break;
}
} }
void HandleChatAddon(ChatMsg type, string prefix, string text, bool isLogged, string target = "", ObjectGuid? channelGuid = null) void HandleChatAddon(ChatMsg type, string prefix, string text, bool isLogged, string target = "", ObjectGuid? targetGuid = null)
{ {
Player sender = GetPlayer(); Player sender = GetPlayer();
@@ -403,12 +423,19 @@ namespace Game
break; break;
case ChatMsg.Whisper: case ChatMsg.Whisper:
// @todo implement cross realm whispers (someday) // @todo implement cross realm whispers (someday)
ExtendedPlayerName extName = ObjectManager.ExtractExtendedPlayerName(target); Player receiver = null;
if (targetGuid.HasValue && !targetGuid.Value.IsEmpty())
receiver = Global.ObjAccessor.FindConnectedPlayer(targetGuid.Value);
else
{
ExtendedPlayerName extName = ObjectManager.ExtractExtendedPlayerName(target);
if (!ObjectManager.NormalizePlayerName(ref extName.Name)) if (!ObjectManager.NormalizePlayerName(ref extName.Name))
break; break;
receiver = Global.ObjAccessor.FindPlayerByName(extName.Name);
}
Player receiver = Global.ObjAccessor.FindPlayerByName(extName.Name);
if (receiver == null) if (receiver == null)
break; break;
@@ -440,7 +467,7 @@ namespace Game
break; break;
} }
case ChatMsg.Channel: case ChatMsg.Channel:
Channel chn = channelGuid.HasValue ? ChannelManager.GetChannelForPlayerByGuid(channelGuid.Value, sender) : ChannelManager.GetChannelForPlayerByNamePart(target, sender); Channel chn = targetGuid.HasValue ? ChannelManager.GetChannelForPlayerByGuid(targetGuid.Value, sender) : ChannelManager.GetChannelForPlayerByNamePart(target, sender);
if (chn != null) if (chn != null)
chn.AddonSay(sender.GetGUID(), prefix, text, isLogged); chn.AddonSay(sender.GetGUID(), prefix, text, isLogged);
break; break;
+14
View File
@@ -593,6 +593,20 @@ namespace Game
} }
} }
void HandlePetAbandonByNumber(PetAbandonByNumber petAbandonByNumber)
{
Pet pet = _player.GetPet();
if (pet != null)
{
if (pet.IsHunterPet() && pet.m_unitData.PetNumber == petAbandonByNumber.PetNumber)
_player.RemovePet(pet, PetSaveMode.AsDeleted);
}
else
{
_player.DeletePetFromDB(petAbandonByNumber.PetNumber);
}
}
[WorldPacketHandler(ClientOpcodes.PetSpellAutocast, Processing = PacketProcessing.Inplace)] [WorldPacketHandler(ClientOpcodes.PetSpellAutocast, Processing = PacketProcessing.Inplace)]
void HandlePetSpellAutocast(PetSpellAutocast packet) void HandlePetSpellAutocast(PetSpellAutocast packet)
{ {
+1
View File
@@ -129,6 +129,7 @@ namespace Game
data.Status = TaxiNodeStatus.Learned; data.Status = TaxiNodeStatus.Learned;
SendPacket(data); SendPacket(data);
GetPlayer().UpdateCriteria(CriteriaType.LearnTaxiNode, curloc);
return true; return true;
} }
else else
@@ -22,7 +22,10 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(PreviousArenaSeason); _worldPacket.WriteInt32(PreviousArenaSeason);
_worldPacket.WriteInt32(ConquestWeeklyProgressCurrencyID); _worldPacket.WriteInt32(ConquestWeeklyProgressCurrencyID);
_worldPacket.WriteInt32(PvpSeasonID); _worldPacket.WriteInt32(PvpSeasonID);
_worldPacket.WriteInt32(Unknown1027_1);
_worldPacket.WriteBit(WeeklyRewardChestsEnabled); _worldPacket.WriteBit(WeeklyRewardChestsEnabled);
_worldPacket.WriteBit(Unknown1027_2);
_worldPacket.WriteBit(Unknown1027_3);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
} }
@@ -32,7 +35,10 @@ namespace Game.Networking.Packets
public int CurrentArenaSeason; public int CurrentArenaSeason;
public int PvpSeasonID; public int PvpSeasonID;
public int ConquestWeeklyProgressCurrencyID; public int ConquestWeeklyProgressCurrencyID;
public int Unknown1027_1;
public bool WeeklyRewardChestsEnabled; public bool WeeklyRewardChestsEnabled;
public bool Unknown1027_2;
public bool Unknown1027_3;
} }
public class AreaSpiritHealerQuery : ClientPacket public class AreaSpiritHealerQuery : ClientPacket
@@ -202,6 +202,7 @@ namespace Game.Networking.Packets
data.WriteInt32(MailSenderTypes.Count); data.WriteInt32(MailSenderTypes.Count);
data.WriteUInt32(OverrideSelectScreenFileDataID); data.WriteUInt32(OverrideSelectScreenFileDataID);
PersonalTabard.Write(data); PersonalTabard.Write(data);
data.WriteInt32(TimerunningSeasonID);
foreach (ChrCustomizationChoice customization in Customizations) foreach (ChrCustomizationChoice customization in Customizations)
{ {
@@ -255,6 +256,7 @@ namespace Game.Networking.Packets
public int Unknown703; public int Unknown703;
public int LastLoginVersion; public int LastLoginVersion;
public uint OverrideSelectScreenFileDataID; public uint OverrideSelectScreenFileDataID;
public int TimerunningSeasonID;
public uint PetCreatureDisplayId; public uint PetCreatureDisplayId;
public uint PetExperienceLevel; public uint PetExperienceLevel;
public uint PetCreatureFamilyId; public uint PetCreatureFamilyId;
@@ -386,7 +388,7 @@ namespace Game.Networking.Packets
CreateInfo.ClassId = (Class)_worldPacket.ReadUInt8(); CreateInfo.ClassId = (Class)_worldPacket.ReadUInt8();
CreateInfo.Sex = (Gender)_worldPacket.ReadUInt8(); CreateInfo.Sex = (Gender)_worldPacket.ReadUInt8();
var customizationCount = _worldPacket.ReadUInt32(); var customizationCount = _worldPacket.ReadUInt32();
CreateInfo.TimerunningSeasonID = _worldPacket.ReadInt32();
CreateInfo.Name = _worldPacket.ReadString(nameLength); CreateInfo.Name = _worldPacket.ReadString(nameLength);
if (CreateInfo.TemplateSet.HasValue) if (CreateInfo.TemplateSet.HasValue)
CreateInfo.TemplateSet = _worldPacket.ReadUInt32(); CreateInfo.TemplateSet = _worldPacket.ReadUInt32();
@@ -1137,6 +1139,7 @@ namespace Game.Networking.Packets
public Gender Sex = Gender.None; public Gender Sex = Gender.None;
public Array<ChrCustomizationChoice> Customizations = new(250); public Array<ChrCustomizationChoice> Customizations = new(250);
public uint? TemplateSet; public uint? TemplateSet;
public int TimerunningSeasonID;
public bool IsTrialBoost; public bool IsTrialBoost;
public bool UseNPE; public bool UseNPE;
public bool Unused1026; public bool Unused1026;
+42 -9
View File
@@ -45,15 +45,30 @@ namespace Game.Networking.Packets
public override void Read() public override void Read()
{ {
Language = (Language)_worldPacket.ReadInt32(); Language = (Language)_worldPacket.ReadInt32();
uint targetLen = _worldPacket.ReadBits<uint>(9); TargetGUID = _worldPacket.ReadPackedGuid();
TargetVirtualRealmAddress = _worldPacket.ReadUInt32();
uint targetLen = _worldPacket.ReadBits<uint>(6);
uint textLen = _worldPacket.ReadBits<uint>(11); uint textLen = _worldPacket.ReadBits<uint>(11);
Target = _worldPacket.ReadString(targetLen);
Text = _worldPacket.ReadString(textLen); if (targetLen > 1)
{
Target = _worldPacket.ReadString(targetLen - 1);
_worldPacket.Skip(1); // null terminator
}
if (textLen > 1)
{
Text = _worldPacket.ReadString(textLen - 1);
_worldPacket.Skip(1); // null terminator
}
} }
public Language Language = Language.Universal; public Language Language = Language.Universal;
public string Text; public ObjectGuid TargetGUID;
public uint TargetVirtualRealmAddress = 0;
public string Target; public string Target;
public string Text;
} }
public class ChatMessageChannel : ClientPacket public class ChatMessageChannel : ClientPacket
@@ -98,15 +113,33 @@ namespace Game.Networking.Packets
public override void Read() public override void Read()
{ {
uint targetLen = _worldPacket.ReadBits<uint>(9);
Params.Read(_worldPacket); Params.Read(_worldPacket);
ChannelGUID = _worldPacket.ReadPackedGuid(); ChannelGUID = _worldPacket.ReadPackedGuid();
Target = _worldPacket.ReadString(targetLen); PlayerGUID = _worldPacket.ReadPackedGuid();
PlayerVirtualRealmAddress = _worldPacket.ReadUInt32();
uint playerNameLength = _worldPacket.ReadBits<uint>(6);
uint channelNameLength = _worldPacket.ReadBits<uint>(6);
if (playerNameLength > 1)
{
PlayerName = _worldPacket.ReadString(playerNameLength - 1);
_worldPacket.Skip(1); // null terminator
}
if (channelNameLength > 1)
{
ChannelName = _worldPacket.ReadString(channelNameLength - 1);
_worldPacket.Skip(1); // null terminator
}
} }
public string Target;
public ChatAddonMessageParams Params = new(); public ChatAddonMessageParams Params = new();
public ObjectGuid? ChannelGUID; // not optional in the packet. Optional for api reasons public string PlayerName;
public ObjectGuid PlayerGUID;
public uint PlayerVirtualRealmAddress = 0;
public string ChannelName;
public ObjectGuid ChannelGUID;
} }
public class ChatMessageDND : ClientPacket public class ChatMessageDND : ClientPacket
@@ -220,6 +253,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(TargetVirtualAddress); _worldPacket.WriteUInt32(TargetVirtualAddress);
_worldPacket.WriteUInt32(SenderVirtualAddress); _worldPacket.WriteUInt32(SenderVirtualAddress);
_worldPacket.WriteUInt32(AchievementID); _worldPacket.WriteUInt32(AchievementID);
_worldPacket.WriteUInt16((ushort)_ChatFlags);
_worldPacket.WriteFloat(DisplayTime); _worldPacket.WriteFloat(DisplayTime);
_worldPacket.WriteUInt32(SpellID); _worldPacket.WriteUInt32(SpellID);
_worldPacket.WriteBits(SenderName.GetByteCount(), 11); _worldPacket.WriteBits(SenderName.GetByteCount(), 11);
@@ -227,7 +261,6 @@ namespace Game.Networking.Packets
_worldPacket.WriteBits(Prefix.GetByteCount(), 5); _worldPacket.WriteBits(Prefix.GetByteCount(), 5);
_worldPacket.WriteBits(Channel.GetByteCount(), 7); _worldPacket.WriteBits(Channel.GetByteCount(), 7);
_worldPacket.WriteBits(ChatText.GetByteCount(), 12); _worldPacket.WriteBits(ChatText.GetByteCount(), 12);
_worldPacket.WriteBits((ushort)_ChatFlags, 15);
_worldPacket.WriteBit(HideChatLog); _worldPacket.WriteBit(HideChatLog);
_worldPacket.WriteBit(FakeSenderName); _worldPacket.WriteBit(FakeSenderName);
_worldPacket.WriteBit(Unused_801.HasValue); _worldPacket.WriteBit(Unused_801.HasValue);
@@ -1286,13 +1286,19 @@ namespace Game.Networking.Packets
public override void Write() public override void Write()
{ {
_worldPacket.WriteInt64(TotalTime); _worldPacket.WriteInt64(TotalTime);
_worldPacket.WriteInt64(TimeLeft);
_worldPacket.WriteInt32((int)Type); _worldPacket.WriteInt32((int)Type);
_worldPacket.WriteInt64(TimeLeft);
_worldPacket.WriteBit(PlayerGuid.HasValue);
_worldPacket.FlushBits();
if (PlayerGuid.HasValue)
_worldPacket.WritePackedGuid(PlayerGuid.Value);
} }
public long TotalTime; public long TotalTime;
public long TimeLeft; public long TimeLeft;
public CountdownTimerType Type; public CountdownTimerType Type;
public ObjectGuid? PlayerGuid;
} }
class QueryCountdownTimer : ClientPacket class QueryCountdownTimer : ClientPacket
@@ -40,6 +40,18 @@ namespace Game.Networking.Packets
public ObjectGuid Pet; public ObjectGuid Pet;
} }
class PetAbandonByNumber : ClientPacket
{
public uint PetNumber;
public PetAbandonByNumber(WorldPacket packet) : base(packet) { }
public override void Read()
{
PetNumber = _worldPacket.ReadUInt32();
}
}
class PetStopAttack : ClientPacket class PetStopAttack : ClientPacket
{ {
public PetStopAttack(WorldPacket packet) : base(packet) { } public PetStopAttack(WorldPacket packet) : base(packet) { }
+3 -19
View File
@@ -565,25 +565,6 @@ namespace Game.Networking.Packets
} }
//Structs //Structs
public class PlayerGuidLookupHint
{
public void Write(WorldPacket data)
{
data.WriteBit(VirtualRealmAddress.HasValue);
data.WriteBit(NativeRealmAddress.HasValue);
data.FlushBits();
if (VirtualRealmAddress.HasValue)
data.WriteUInt32(VirtualRealmAddress.Value);
if (NativeRealmAddress.HasValue)
data.WriteUInt32(NativeRealmAddress.Value);
}
public uint? VirtualRealmAddress = new(); // current realm (?) (identifier made from the Index, BattleGroup and Region)
public uint? NativeRealmAddress = new(); // original realm (?) (identifier made from the Index, BattleGroup and Region)
}
public class PlayerGuidLookupData public class PlayerGuidLookupData
{ {
public bool Initialize(ObjectGuid guid, Player player = null) public bool Initialize(ObjectGuid guid, Player player = null)
@@ -603,6 +584,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();
TimerunningSeasonID = player.m_activePlayerData.TimerunningSeasonID;
DeclinedNames names = player.GetDeclinedNames(); DeclinedNames names = player.GetDeclinedNames();
if (names != null) if (names != null)
@@ -651,6 +633,7 @@ namespace Game.Networking.Packets
data.WriteUInt8((byte)ClassID); data.WriteUInt8((byte)ClassID);
data.WriteUInt8(Level); data.WriteUInt8(Level);
data.WriteUInt8(Unused915); data.WriteUInt8(Unused915);
data.WriteInt32(TimerunningSeasonID);
data.WriteString(Name); data.WriteString(Name);
} }
@@ -666,6 +649,7 @@ namespace Game.Networking.Packets
public Class ClassID = Class.None; public Class ClassID = Class.None;
public byte Level; public byte Level;
public byte Unused915; public byte Unused915;
public int TimerunningSeasonID;
public DeclinedName DeclinedNames = new(); public DeclinedName DeclinedNames = new();
} }
@@ -492,6 +492,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBits(PortraitTurnInText.GetByteCount(), 10); _worldPacket.WriteBits(PortraitTurnInText.GetByteCount(), 10);
_worldPacket.WriteBits(PortraitTurnInName.GetByteCount(), 8); _worldPacket.WriteBits(PortraitTurnInName.GetByteCount(), 8);
_worldPacket.WriteBit(AutoLaunched); _worldPacket.WriteBit(AutoLaunched);
_worldPacket.WriteBit(FromContentPush);
_worldPacket.WriteBit(false); // unused in client _worldPacket.WriteBit(false); // unused in client
_worldPacket.WriteBit(StartCheat); _worldPacket.WriteBit(StartCheat);
_worldPacket.WriteBit(DisplayPopup); _worldPacket.WriteBit(DisplayPopup);
@@ -539,6 +540,7 @@ namespace Game.Networking.Packets
public bool DisplayPopup; public bool DisplayPopup;
public bool StartCheat; public bool StartCheat;
public bool AutoLaunched; public bool AutoLaunched;
public bool FromContentPush;
} }
public class QuestGiverRequestItems : ServerPacket public class QuestGiverRequestItems : ServerPacket
+13 -4
View File
@@ -2,6 +2,7 @@
// 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 Game.DataStorage;
using Game.Entities; using Game.Entities;
using Game.Spells; using Game.Spells;
using System; using System;
@@ -1378,11 +1379,15 @@ namespace Game.Networking.Packets
TuningType = ContentTuningType.CreatureToPlayerDamage; TuningType = ContentTuningType.CreatureToPlayerDamage;
PlayerLevelDelta = (short)target.m_activePlayerData.ScalingPlayerLevelDelta; PlayerLevelDelta = (short)target.m_activePlayerData.ScalingPlayerLevelDelta;
PlayerItemLevel = (ushort)target.GetAverageItemLevel(); PlayerItemLevel = (ushort)target.GetAverageItemLevel();
ScalingHealthItemLevelCurveID = (ushort)target.m_unitData.ScalingHealthItemLevelCurveID; var contentTuning = CliDB.ContentTuningStorage.LookupByKey(creatureDifficulty.ContentTuningID);
if (contentTuning != null)
{
ScalingHealthItemLevelCurveID = (uint)contentTuning.HealthItemLevelCurveID;
TargetContentTuningID = contentTuning.Id;
}
TargetLevel = (byte)target.GetLevel(); TargetLevel = (byte)target.GetLevel();
Expansion = (byte)creatureDifficulty.HealthScalingExpansion; Expansion = (byte)creatureDifficulty.HealthScalingExpansion;
TargetScalingLevelDelta = (sbyte)attacker.m_unitData.ScalingLevelDelta; TargetScalingLevelDelta = (sbyte)attacker.m_unitData.ScalingLevelDelta;
TargetContentTuningID = creatureDifficulty.ContentTuningID;
return true; return true;
} }
@@ -1394,11 +1399,15 @@ namespace Game.Networking.Packets
TuningType = ContentTuningType.PlayerToCreatureDamage; TuningType = ContentTuningType.PlayerToCreatureDamage;
PlayerLevelDelta = (short)attacker.m_activePlayerData.ScalingPlayerLevelDelta; PlayerLevelDelta = (short)attacker.m_activePlayerData.ScalingPlayerLevelDelta;
PlayerItemLevel = (ushort)attacker.GetAverageItemLevel(); PlayerItemLevel = (ushort)attacker.GetAverageItemLevel();
ScalingHealthItemLevelCurveID = (ushort)target.m_unitData.ScalingHealthItemLevelCurveID; var contentTuning = CliDB.ContentTuningStorage.LookupByKey(creatureDifficulty.ContentTuningID);
if (contentTuning != null)
{
ScalingHealthItemLevelCurveID = (uint)contentTuning.HealthItemLevelCurveID;
TargetContentTuningID = contentTuning.Id;
}
TargetLevel = (byte)target.GetLevel(); TargetLevel = (byte)target.GetLevel();
Expansion = (byte)creatureDifficulty.HealthScalingExpansion; Expansion = (byte)creatureDifficulty.HealthScalingExpansion;
TargetScalingLevelDelta = (sbyte)target.m_unitData.ScalingLevelDelta; TargetScalingLevelDelta = (sbyte)target.m_unitData.ScalingLevelDelta;
TargetContentTuningID = creatureDifficulty.ContentTuningID;
return true; return true;
} }
@@ -2,10 +2,9 @@
// 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 System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Game.Entities;
namespace Game.Networking.Packets namespace Game.Networking.Packets
{ {
@@ -41,6 +40,10 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval); _worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval);
_worldPacket.WriteUInt32((uint)PlayerNameQueryInterval.TotalSeconds); _worldPacket.WriteUInt32((uint)PlayerNameQueryInterval.TotalSeconds);
_worldPacket.WriteInt32(AddonChatThrottle.MaxTries);
_worldPacket.WriteInt32(AddonChatThrottle.TriesRestoredPerSecond);
_worldPacket.WriteInt32(AddonChatThrottle.UsedTriesPerMessage);
foreach (GameRuleValuePair gameRuleValue in GameRuleValues) foreach (GameRuleValuePair gameRuleValue in GameRuleValues)
gameRuleValue.Write(_worldPacket); gameRuleValue.Write(_worldPacket);
@@ -76,9 +79,10 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(QuestSessionEnabled); _worldPacket.WriteBit(QuestSessionEnabled);
_worldPacket.WriteBit(IsMuted); _worldPacket.WriteBit(IsMuted);
_worldPacket.WriteBit(ClubFinderEnabled); _worldPacket.WriteBit(ClubFinderEnabled);
_worldPacket.WriteBit(CommunityFinderEnabled);
_worldPacket.WriteBit(Unknown901CheckoutRelated); _worldPacket.WriteBit(Unknown901CheckoutRelated);
_worldPacket.WriteBit(TextToSpeechFeatureEnabled); _worldPacket.WriteBit(TextToSpeechFeatureEnabled);
_worldPacket.WriteBit(ChatDisabledByDefault); _worldPacket.WriteBit(ChatDisabledByDefault);
_worldPacket.WriteBit(ChatDisabledByPlayer); _worldPacket.WriteBit(ChatDisabledByPlayer);
_worldPacket.WriteBit(LFGListCustomRequiresAuthenticator); _worldPacket.WriteBit(LFGListCustomRequiresAuthenticator);
@@ -87,9 +91,15 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(ContentTrackingEnabled); _worldPacket.WriteBit(ContentTrackingEnabled);
_worldPacket.WriteBit(IsSellAllJunkEnabled); _worldPacket.WriteBit(IsSellAllJunkEnabled);
_worldPacket.WriteBit(IsGroupFinderEnabled); _worldPacket.WriteBit(IsGroupFinderEnabled);
_worldPacket.WriteBit(IsLFDEnabled); _worldPacket.WriteBit(IsLFDEnabled);
_worldPacket.WriteBit(IsLFREnabled); _worldPacket.WriteBit(IsLFREnabled);
_worldPacket.WriteBit(IsPremadeGroupEnabled); _worldPacket.WriteBit(IsPremadeGroupEnabled);
_worldPacket.WriteBit(CanShowSetRoleButton);
_worldPacket.WriteBit(false); // unused 10.2.7
_worldPacket.WriteBit(false); // unused 10.2.7
_worldPacket.WriteBits(Unknown1027.GetByteCount(), 7);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
@@ -126,6 +136,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(SessionAlert.Value.DisplayTime); _worldPacket.WriteInt32(SessionAlert.Value.DisplayTime);
} }
_worldPacket.WriteString(Unknown1027);
_worldPacket.WriteBit(Squelch.IsSquelched); _worldPacket.WriteBit(Squelch.IsSquelched);
_worldPacket.WritePackedGuid(Squelch.BnetAccountGuid); _worldPacket.WritePackedGuid(Squelch.BnetAccountGuid);
_worldPacket.WritePackedGuid(Squelch.GuildGuid); _worldPacket.WritePackedGuid(Squelch.GuildGuid);
@@ -175,6 +187,7 @@ namespace Game.Networking.Packets
public bool QuestSessionEnabled; public bool QuestSessionEnabled;
public bool IsMuted; public bool IsMuted;
public bool ClubFinderEnabled; public bool ClubFinderEnabled;
public bool CommunityFinderEnabled;
public bool Unknown901CheckoutRelated; public bool Unknown901CheckoutRelated;
public bool TextToSpeechFeatureEnabled; public bool TextToSpeechFeatureEnabled;
public bool ChatDisabledByDefault; public bool ChatDisabledByDefault;
@@ -188,11 +201,14 @@ namespace Game.Networking.Packets
public bool IsLFDEnabled = true; // classic only public bool IsLFDEnabled = true; // classic only
public bool IsLFREnabled = true; // classic only public bool IsLFREnabled = true; // classic only
public bool IsPremadeGroupEnabled = true; // classic only public bool IsPremadeGroupEnabled = true; // classic only
public bool CanShowSetRoleButton = true;
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> GameRuleValues = new();
public string Unknown1027; // related to movement lua functions used by keybinds
public AddonChatThrottleParams AddonChatThrottle;
public struct SessionAlertConfig public struct SessionAlertConfig
{ {
@@ -245,6 +261,13 @@ namespace Game.Networking.Packets
public uint DaysInCycle; public uint DaysInCycle;
public uint Unknown1007; public uint Unknown1007;
} }
public struct AddonChatThrottleParams
{
public int MaxTries;
public int TriesRestoredPerSecond;
public int UsedTriesPerMessage;
}
} }
public class FeatureSystemStatusGlueScreen : ServerPacket public class FeatureSystemStatusGlueScreen : ServerPacket
@@ -277,9 +300,10 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(EuropaTicketSystemStatus.HasValue); _worldPacket.WriteBit(EuropaTicketSystemStatus.HasValue);
_worldPacket.WriteBit(IsNameReservationEnabled); _worldPacket.WriteBit(IsNameReservationEnabled);
_worldPacket.WriteBit(LaunchETA.HasValue); _worldPacket.WriteBit(LaunchETA.HasValue);
_worldPacket.WriteBit(TimerunningEnabled);
_worldPacket.WriteBit(AddonsDisabled); _worldPacket.WriteBit(AddonsDisabled);
_worldPacket.WriteBit(Unused1000);
_worldPacket.WriteBit(Unused1000);
_worldPacket.WriteBit(AccountSaveDataExportEnabled); _worldPacket.WriteBit(AccountSaveDataExportEnabled);
_worldPacket.WriteBit(AccountLockedByExport); _worldPacket.WriteBit(AccountLockedByExport);
_worldPacket.WriteBit(!RealmHiddenAlert.IsEmpty()); _worldPacket.WriteBit(!RealmHiddenAlert.IsEmpty());
@@ -304,6 +328,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(MaximumExpansionLevel); _worldPacket.WriteInt32(MaximumExpansionLevel);
_worldPacket.WriteInt32(ActiveSeason); _worldPacket.WriteInt32(ActiveSeason);
_worldPacket.WriteInt32(GameRuleValues.Count); _worldPacket.WriteInt32(GameRuleValues.Count);
_worldPacket.WriteInt32(ActiveTimerunningSeasonID);
_worldPacket.WriteInt32(RemainingTimerunningSeasonSeconds);
_worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket); _worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket);
_worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval); _worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval);
_worldPacket.WriteUInt32((uint)PlayerNameQueryInterval.TotalSeconds); _worldPacket.WriteUInt32((uint)PlayerNameQueryInterval.TotalSeconds);
@@ -346,6 +372,7 @@ namespace Game.Networking.Packets
public bool LiveRegionKeyBindingsCopyEnabled; public bool LiveRegionKeyBindingsCopyEnabled;
public bool Unknown901CheckoutRelated; // NYI public bool Unknown901CheckoutRelated; // NYI
public bool IsNameReservationEnabled; // classic only public bool IsNameReservationEnabled; // classic only
public bool TimerunningEnabled; // NYI
public bool AddonsDisabled; public bool AddonsDisabled;
public bool Unused1000; public bool Unused1000;
public bool AccountSaveDataExportEnabled; public bool AccountSaveDataExportEnabled;
@@ -363,6 +390,8 @@ namespace Game.Networking.Packets
public uint KioskSessionMinutes; public uint KioskSessionMinutes;
public int ActiveSeason; // Currently active Classic season public int ActiveSeason; // Currently active Classic season
public List<GameRuleValuePair> GameRuleValues = new(); public List<GameRuleValuePair> GameRuleValues = new();
public int ActiveTimerunningSeasonID;
public int RemainingTimerunningSeasonSeconds;
public short MaxPlayerNameQueriesPerPacket = 50; public short MaxPlayerNameQueriesPerPacket = 50;
public short PlayerNameQueryTelemetryInterval = 600; public short PlayerNameQueryTelemetryInterval = 600;
public TimeSpan PlayerNameQueryInterval = TimeSpan.FromSeconds(10); public TimeSpan PlayerNameQueryInterval = TimeSpan.FromSeconds(10);
+1 -1
View File
@@ -4729,7 +4729,7 @@ namespace Game.Spells
continue; continue;
} }
unitCaster->ModifyPower(cost.Power, -cost.Amount); unitCaster.ModifyPower(cost.Power, -cost.Amount);
} }
} }