hondacrx
2023-03-23 08:03:41 -04:00
parent c00e66442d
commit 460a7c0ca9
29 changed files with 541 additions and 431 deletions
+7
View File
@@ -93,4 +93,11 @@ namespace Framework.Constants
// 0x40 // 0x40
// 0x80 // 0x80
} }
public enum ChatWhisperTargetStatus
{
CanWhisper = 0,
Offline = 1,
WrongFaction = 2
}
} }
+15 -1
View File
@@ -58,7 +58,14 @@ namespace Framework.Constants
SocketColor.RelicWater, SocketColor.RelicWater,
SocketColor.RelicLife, SocketColor.RelicLife,
SocketColor.RelicWind, SocketColor.RelicWind,
SocketColor.RelicHoly SocketColor.RelicHoly,
SocketColor.PunchcardRed,
SocketColor.PunchcardYellow,
SocketColor.PunchcardBlue,
SocketColor.Domination,
SocketColor.Cypher,
SocketColor.Tinker,
SocketColor.Primordial
}; };
public static ItemModifier[] AppearanceModifierSlotBySpec = public static ItemModifier[] AppearanceModifierSlotBySpec =
@@ -194,6 +201,13 @@ namespace Framework.Constants
RelicLife = 0x04000, RelicLife = 0x04000,
RelicWind = 0x08000, RelicWind = 0x08000,
RelicHoly = 0x10000, RelicHoly = 0x10000,
PunchcardRed = 0x20000,
PunchcardYellow = 0x40000,
PunchcardBlue = 0x80000,
Domination = 0x100000,
Cypher = 0x200000,
Tinker = 0x400000,
Primordial = 0x800000,
Standard = (Red | Yellow | Blue) Standard = (Red | Yellow | Blue)
} }
File diff suppressed because it is too large Load Diff
+37 -35
View File
@@ -3006,41 +3006,43 @@ namespace Framework.Constants
SocketingCypherGemOnlyInCypherslot = 1077, SocketingCypherGemOnlyInCypherslot = 1077,
SocketingRequiresTinkerGem = 1078, SocketingRequiresTinkerGem = 1078,
SocketingTinkerGemOnlyInTinkerslot = 1079, SocketingTinkerGemOnlyInTinkerslot = 1079,
LevelLinkingResultLinked = 1080, SocketingRequiresPrimordialGem = 1080,
LevelLinkingResultUnlinked = 1081, SocketingPrimordialGemOnlyInPrimordialslot = 1081,
ClubFinderErrorPostClub = 1082, LevelLinkingResultLinked = 1082,
ClubFinderErrorApplyClub = 1083, LevelLinkingResultUnlinked = 1083,
ClubFinderErrorRespondApplicant = 1084, ClubFinderErrorPostClub = 1084,
ClubFinderErrorCancelApplication = 1085, ClubFinderErrorApplyClub = 1085,
ClubFinderErrorTypeAcceptApplication = 1086, ClubFinderErrorRespondApplicant = 1086,
ClubFinderErrorTypeNoInvitePermissions = 1087, ClubFinderErrorCancelApplication = 1087,
ClubFinderErrorTypeNoPostingPermissions = 1088, ClubFinderErrorTypeAcceptApplication = 1088,
ClubFinderErrorTypeApplicantList = 1089, ClubFinderErrorTypeNoInvitePermissions = 1089,
ClubFinderErrorTypeApplicantListNoPerm = 1090, ClubFinderErrorTypeNoPostingPermissions = 1090,
ClubFinderErrorTypeFinderNotAvailable = 1091, ClubFinderErrorTypeApplicantList = 1091,
ClubFinderErrorTypeGetPostingIds = 1092, ClubFinderErrorTypeApplicantListNoPerm = 1092,
ClubFinderErrorTypeJoinApplication = 1093, ClubFinderErrorTypeFinderNotAvailable = 1093,
ClubFinderErrorTypeRealmNotEligible = 1094, ClubFinderErrorTypeGetPostingIds = 1094,
ClubFinderErrorTypeFlaggedRename = 1095, ClubFinderErrorTypeJoinApplication = 1095,
ClubFinderErrorTypeFlaggedDescriptionChange = 1096, ClubFinderErrorTypeRealmNotEligible = 1096,
ItemInteractionNotEnoughGold = 1097, ClubFinderErrorTypeFlaggedRename = 1097,
ItemInteractionNotEnoughCurrency = 1098, ClubFinderErrorTypeFlaggedDescriptionChange = 1098,
PlayerChoiceErrorPendingChoice = 1099, ItemInteractionNotEnoughGold = 1099,
SoulbindInvalidConduit = 1100, ItemInteractionNotEnoughCurrency = 1100,
SoulbindInvalidConduitItem = 1101, PlayerChoiceErrorPendingChoice = 1101,
SoulbindInvalidTalent = 1102, SoulbindInvalidConduit = 1102,
SoulbindDuplicateConduit = 1103, SoulbindInvalidConduitItem = 1103,
ActivateSoulbindS = 1104, SoulbindInvalidTalent = 1104,
ActivateSoulbindFailedRestArea = 1105, SoulbindDuplicateConduit = 1105,
CantUseProfanity = 1106, ActivateSoulbindS = 1106,
NotInPetBattle = 1107, ActivateSoulbindFailedRestArea = 1107,
NotInNpe = 1108, CantUseProfanity = 1108,
NoSpec = 1109, NotInPetBattle = 1109,
NoDominationshardOverwrite = 1110, NotInNpe = 1110,
UseWeeklyRewardsDisabled = 1111, NoSpec = 1111,
CrossFactionGroupJoined = 1112, NoDominationshardOverwrite = 1112,
CantTargetUnfriendlyInOverworld = 1113, UseWeeklyRewardsDisabled = 1113,
EquipablespellsSlotsFull = 1114 CrossFactionGroupJoined = 1114,
CantTargetUnfriendlyInOverworld = 1115,
EquipablespellsSlotsFull = 1116
} }
public enum SceneFlags public enum SceneFlags
@@ -2481,6 +2481,9 @@ namespace Framework.Constants
Gathering = 302, Gathering = 302,
CreateTraitTreeConfig = 303, // Miscvalue[0] = Traittreeid CreateTraitTreeConfig = 303, // Miscvalue[0] = Traittreeid
ChangeActiveCombatTraitConfig = 304, ChangeActiveCombatTraitConfig = 304,
Unk305 = 305,
Unk306 = 306,
TotalSpellEffects TotalSpellEffects
} }
@@ -828,7 +828,7 @@ namespace Framework.Database
PrepareStatement(HotfixStatements.SEL_LANGUAGE_WORDS, "SELECT ID, Word, LanguageID FROM language_words WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_LANGUAGE_WORDS, "SELECT ID, Word, LanguageID FROM language_words WHERE (`VerifiedBuild` > 0) = ?");
// Languages.db2 // Languages.db2
PrepareStatement(HotfixStatements.SEL_LANGUAGES, "SELECT ID, Name, Flags, UiTextureKitID, UiTextureKitElementCount FROM languages" + PrepareStatement(HotfixStatements.SEL_LANGUAGES, "SELECT Name, ID, Flags, UiTextureKitID, UiTextureKitElementCount, LearningCurveID FROM languages" +
" WHERE (`VerifiedBuild` > 0) = ?"); " WHERE (`VerifiedBuild` > 0) = ?");
PrepareStatement(HotfixStatements.SEL_LANGUAGES_LOCALE, "SELECT ID, Name_lang FROM languages_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); PrepareStatement(HotfixStatements.SEL_LANGUAGES_LOCALE, "SELECT ID, Name_lang FROM languages_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
+7 -7
View File
@@ -419,13 +419,13 @@ namespace Game.DataStorage
} }
// Check loaded DB2 files proper version // Check loaded DB2 files proper version
if (!AreaTableStorage.ContainsKey(14618) || // last area added in 10.0.5 (47660) if (!AreaTableStorage.ContainsKey(14720) || // last area added in 10.0.7 (48520)
!CharTitlesStorage.ContainsKey(753) || // last char title added in 10.0.5 (47660) !CharTitlesStorage.ContainsKey(762) || // last char title added in 10.0.7 (48520)
!GemPropertiesStorage.ContainsKey(4028) || // last gem property added in 10.0.5 (47660) !GemPropertiesStorage.ContainsKey(4059) || // last gem property added in 10.0.7 (48520)
!ItemStorage.ContainsKey(203716) || // last item added in 10.0.5 (47660) !ItemStorage.ContainsKey(205244) || // last item added in 10.0.7 (48520)
!ItemExtendedCostStorage.ContainsKey(7882) || // last item extended cost added in 10.0.5 (47660) !ItemExtendedCostStorage.ContainsKey(8043) || // last item extended cost added in 10.0.7 (48520)
!MapStorage.ContainsKey(2582) || // last map added in 10.0.5 (47660) !MapStorage.ContainsKey(2616) || // last map added in 10.0.7 (48520)
!SpellNameStorage.ContainsKey(401848)) // last spell added in 10.0.5 (47660) !SpellNameStorage.ContainsKey(409033)) // last spell added in 10.0.7 (48520)
{ {
Log.outFatal(LogFilter.ServerLoading, "You have _outdated_ DB2 files. Please extract correct versions from current using client."); Log.outFatal(LogFilter.ServerLoading, "You have _outdated_ DB2 files. Please extract correct versions from current using client.");
Environment.Exit(1); Environment.Exit(1);
+1 -1
View File
@@ -167,7 +167,7 @@ namespace Game.DataStorage
public float BoxYaw; public float BoxYaw;
public sbyte ShapeType; public sbyte ShapeType;
public short ShapeID; public short ShapeID;
public short AreaTriggerActionSetID; public int AreaTriggerActionSetID;
public sbyte Flags; public sbyte Flags;
} }
+1 -1
View File
@@ -513,7 +513,7 @@ namespace Game.DataStorage
public int MinAmount; public int MinAmount;
public int MaxAmount; public int MaxAmount;
public int ContainerIconID; public int ContainerIconID;
public int ContainerQuality; public sbyte ContainerQuality;
public int OnLootSpellVisualKitID; public int OnLootSpellVisualKitID;
public uint CurrencyTypesID; public uint CurrencyTypesID;
} }
+3 -3
View File
@@ -45,9 +45,9 @@ namespace Game.DataStorage
public DifficultyFlags Flags; public DifficultyFlags Flags;
public byte ItemContext; public byte ItemContext;
public byte ToggleDifficultyID; public byte ToggleDifficultyID;
public ushort GroupSizeHealthCurveID; public uint GroupSizeHealthCurveID;
public ushort GroupSizeDmgCurveID; public uint GroupSizeDmgCurveID;
public ushort GroupSizeSpellPointsCurveID; public uint GroupSizeSpellPointsCurveID;
} }
public sealed class DungeonEncounterRecord public sealed class DungeonEncounterRecord
+4 -4
View File
@@ -69,7 +69,7 @@ namespace Game.DataStorage
public string AllianceName; public string AllianceName;
public string Description; public string Description;
public string Tooltip; public string Tooltip;
public byte GarrTypeID; public sbyte GarrTypeID;
public sbyte BuildingType; public sbyte BuildingType;
public uint HordeGameObjectID; public uint HordeGameObjectID;
public uint AllianceGameObjectID; public uint AllianceGameObjectID;
@@ -118,7 +118,7 @@ namespace Game.DataStorage
public string HordeSourceText; public string HordeSourceText;
public string AllianceSourceText; public string AllianceSourceText;
public string TitleName; public string TitleName;
public byte GarrTypeID; public sbyte GarrTypeID;
public sbyte GarrFollowerTypeID; public sbyte GarrFollowerTypeID;
public int HordeCreatureID; public int HordeCreatureID;
public int AllianceCreatureID; public int AllianceCreatureID;
@@ -167,7 +167,7 @@ namespace Game.DataStorage
public LocalizedString Description; public LocalizedString Description;
public Vector2 MapPos; public Vector2 MapPos;
public Vector2 WorldPos; public Vector2 WorldPos;
public byte GarrTypeID; public sbyte GarrTypeID;
public byte GarrMissionTypeID; public byte GarrMissionTypeID;
public sbyte GarrFollowerTypeID; public sbyte GarrFollowerTypeID;
public byte MaxFollowers; public byte MaxFollowers;
@@ -248,7 +248,7 @@ namespace Game.DataStorage
{ {
public uint Id; public uint Id;
public string Name; public string Name;
public byte GarrTypeID; public sbyte GarrTypeID;
public int ClassID; public int ClassID;
public sbyte MaxTiers; public sbyte MaxTiers;
public sbyte UiOrder; public sbyte UiOrder;
+2 -1
View File
@@ -15,11 +15,12 @@ namespace Game.DataStorage
public sealed class LanguagesRecord public sealed class LanguagesRecord
{ {
public uint Id;
public LocalizedString Name; public LocalizedString Name;
public uint Id;
public int Flags; public int Flags;
public int UiTextureKitID; public int UiTextureKitID;
public int UiTextureKitElementCount; public int UiTextureKitElementCount;
public int LearningCurveID;
} }
public sealed class LFGDungeonsRecord public sealed class LFGDungeonsRecord
+1 -1
View File
@@ -17,7 +17,7 @@ namespace Game.DataStorage
public LocalizedString InfoName; public LocalizedString InfoName;
public sbyte Type; public sbyte Type;
public int Modifiers; public int Modifiers;
public int Profession; public ushort Profession;
} }
public sealed class QuestLineXQuestRecord public sealed class QuestLineXQuestRecord
+1 -1
View File
@@ -249,7 +249,7 @@ namespace Game.DataStorage
public sealed class TraitNodeXTraitCostRecord public sealed class TraitNodeXTraitCostRecord
{ {
public uint Id; public uint Id;
public uint TraitNodeID; public int TraitNodeID;
public int TraitCostID; public int TraitCostID;
} }
@@ -2596,11 +2596,11 @@ namespace Game.Entities
public UpdateField<int> CovenantID = new(32, 34); public UpdateField<int> CovenantID = new(32, 34);
public UpdateField<int> SoulbindID = new(32, 35); public UpdateField<int> SoulbindID = new(32, 35);
public UpdateField<DungeonScoreSummary> DungeonScore = new(32, 36); public UpdateField<DungeonScoreSummary> DungeonScore = new(32, 36);
public UpdateFieldArray<QuestLog> QuestLog = new(125, 37, 38); public UpdateFieldArray<QuestLog> QuestLog = new(175, 37, 38);
public UpdateFieldArray<VisibleItem> VisibleItems = new(19, 163, 164); public UpdateFieldArray<VisibleItem> VisibleItems = new(19, 213, 214);
public UpdateFieldArray<float> AvgItemLevel = new(6, 183, 184); public UpdateFieldArray<float> AvgItemLevel = new(6, 233, 234);
public PlayerData() : base(0, TypeId.Player, 190) { } public PlayerData() : base(0, TypeId.Player, 240) { }
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
{ {
@@ -2622,10 +2622,9 @@ namespace Game.Entities
data.WriteInt32(GuildTimeStamp); data.WriteInt32(GuildTimeStamp);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember))
{ {
for (int i = 0; i < 125; ++i) for (int i = 0; i < 175; ++i)
{
QuestLog[i].WriteCreate(data, owner, receiver); QuestLog[i].WriteCreate(data, owner, receiver);
}
data.WriteInt32(QuestSessionQuestLog.Size()); data.WriteInt32(QuestSessionQuestLog.Size());
} }
for (int i = 0; i < 19; ++i) for (int i = 0; i < 19; ++i)
@@ -2681,7 +2680,7 @@ namespace Game.Entities
public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
{ {
UpdateMask allowedMaskForTarget = new(188, new[] { 0xFFFFFFEDu, 0x0000001Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x3FFFFFF8u }); UpdateMask allowedMaskForTarget = new(188, new[] { 0xFFFFFFEDu, 0x0000001Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFE00000u, 0x0000FFFFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
} }
@@ -2689,20 +2688,20 @@ namespace Game.Entities
public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags)
{ {
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember))
allowedMaskForTarget.OR(new UpdateMask(188, new[] { 0x00000012u, 0xFFFFFFE0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000007u })); allowedMaskForTarget.OR(new UpdateMask(188, new[] { 0x00000012u, 0xFFFFFFE0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x001FFFFFu, 0x00000000u }));
} }
public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags)
{ {
UpdateMask allowedMaskForTarget = new(188, new[] { 0xFFFFFFEDu, 0x0000001Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x3FFFFFF8u }); UpdateMask allowedMaskForTarget = new(188, new[] { 0xFFFFFFEDu, 0x0000001Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFE00000u, 0x0000FFFFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask.AND(allowedMaskForTarget); changesMask.AND(allowedMaskForTarget);
} }
public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver) public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver)
{ {
data.WriteBits(changesMask.GetBlocksMask(0), 6); data.WriteBits(changesMask.GetBlocksMask(0), 8);
for (uint i = 0; i < 6; ++i) for (uint i = 0; i < 8; ++i)
if (changesMask.GetBlock(i) != 0) if (changesMask.GetBlock(i) != 0)
data.WriteBits(changesMask.GetBlock(i), 32); data.WriteBits(changesMask.GetBlock(i), 32);
@@ -2914,7 +2913,7 @@ namespace Game.Entities
} }
if (changesMask[37]) if (changesMask[37])
{ {
for (int i = 0; i < 125; ++i) for (int i = 0; i < 175; ++i)
{ {
if (changesMask[38 + i]) if (changesMask[38 + i])
{ {
@@ -2925,7 +2924,7 @@ namespace Game.Entities
} }
} }
} }
if (changesMask[163]) if (changesMask[214])
{ {
for (int i = 0; i < 19; ++i) for (int i = 0; i < 19; ++i)
{ {
@@ -2935,11 +2934,11 @@ namespace Game.Entities
} }
} }
} }
if (changesMask[183]) if (changesMask[233])
{ {
for (int i = 0; i < 6; ++i) for (int i = 0; i < 6; ++i)
{ {
if (changesMask[184 + i]) if (changesMask[234 + i])
{ {
data.WriteFloat(AvgItemLevel[i]); data.WriteFloat(AvgItemLevel[i]);
} }
-2
View File
@@ -1113,8 +1113,6 @@ namespace Game
// START OF DUMMY VALUES // START OF DUMMY VALUES
features.ComplaintStatus = (byte)ComplaintStatus.EnabledWithAutoIgnore; features.ComplaintStatus = (byte)ComplaintStatus.EnabledWithAutoIgnore;
features.TwitterPostThrottleLimit = 60;
features.TwitterPostThrottleCooldown = 20;
features.CfgRealmID = 2; features.CfgRealmID = 2;
features.CfgRealmRecID = 0; features.CfgRealmRecID = 0;
features.TokenPollTimeSeconds = 300; features.TokenPollTimeSeconds = 300;
+21 -1
View File
@@ -2,7 +2,6 @@
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information. // Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
using Framework.Constants; using Framework.Constants;
using Framework.Dynamic;
using Game.Chat; using Game.Chat;
using Game.DataStorage; using Game.DataStorage;
using Game.Entities; using Game.Entities;
@@ -625,5 +624,26 @@ namespace Game
SendPacket(new ChatRestricted(restriction)); SendPacket(new ChatRestricted(restriction));
} }
[WorldPacketHandler(ClientOpcodes.ChatCanLocalWhisperTargetRequest)]
void HandleChatCanLocalWhisperTargetRequest(CanLocalWhisperTargetRequest canLocalWhisperTargetRequest)
{
ChatWhisperTargetStatus status = ChatWhisperTargetStatus.CanWhisper;
Player sender = GetPlayer();
Player receiver = Global.ObjAccessor.FindConnectedPlayer(canLocalWhisperTargetRequest.WhisperTarget);
if (!receiver || (!receiver.IsAcceptWhispers() && receiver.GetSession().HasPermission(RBACPermissions.CanFilterWhispers) && !receiver.IsInWhisperWhiteList(sender.GetGUID())))
status = ChatWhisperTargetStatus.Offline;
else
{
if (!receiver.IsInWhisperWhiteList(sender.GetGUID()) && !receiver.IsGameMasterAcceptingWhispers())
if (GetPlayer().GetEffectiveTeam() != receiver.GetEffectiveTeam() && !HasPermission(RBACPermissions.TwoSideInteractionChat))
status = ChatWhisperTargetStatus.WrongFaction;
}
CanLocalWhisperTargetResponse canLocalWhisperTargetResponse = new();
canLocalWhisperTargetResponse.WhisperTarget = canLocalWhisperTargetRequest.WhisperTarget;
canLocalWhisperTargetResponse.Status = status;
SendPacket(canLocalWhisperTargetResponse);
}
} }
} }
@@ -14,6 +14,8 @@ namespace Game.Networking.Packets
public uint Offset; public uint Offset;
public byte MinLevel = 1; public byte MinLevel = 1;
public byte MaxLevel = SharedConst.MaxLevel; public byte MaxLevel = SharedConst.MaxLevel;
public byte Unused1007_1;
public byte Unused1007_2;
public AuctionHouseFilterMask Filters; public AuctionHouseFilterMask Filters;
public byte[] KnownPets; public byte[] KnownPets;
public sbyte MaxPetLevel; public sbyte MaxPetLevel;
@@ -30,6 +32,8 @@ namespace Game.Networking.Packets
Offset = _worldPacket.ReadUInt32(); Offset = _worldPacket.ReadUInt32();
MinLevel = _worldPacket.ReadUInt8(); MinLevel = _worldPacket.ReadUInt8();
MaxLevel = _worldPacket.ReadUInt8(); MaxLevel = _worldPacket.ReadUInt8();
Unused1007_1 = _worldPacket.ReadUInt8();
Unused1007_2= _worldPacket.ReadUInt8();
Filters = (AuctionHouseFilterMask)_worldPacket.ReadUInt32(); Filters = (AuctionHouseFilterMask)_worldPacket.ReadUInt32();
uint knownPetSize = _worldPacket.ReadUInt32(); uint knownPetSize = _worldPacket.ReadUInt32();
MaxPetLevel = _worldPacket.ReadInt8(); MaxPetLevel = _worldPacket.ReadInt8();
@@ -460,6 +460,32 @@ namespace Game.Networking.Packets
public byte Reason; public byte Reason;
} }
class CanLocalWhisperTargetRequest : ClientPacket
{
public ObjectGuid WhisperTarget;
public CanLocalWhisperTargetRequest(WorldPacket packet) : base(packet) { }
public override void Read()
{
WhisperTarget = _worldPacket.ReadPackedGuid();
}
}
class CanLocalWhisperTargetResponse : ServerPacket
{
public ObjectGuid WhisperTarget;
public ChatWhisperTargetStatus Status;
public CanLocalWhisperTargetResponse() : base(ServerOpcodes.ChatCanLocalWhisperTargetResponse) { }
public override void Write()
{
_worldPacket.WritePackedGuid(WhisperTarget);
_worldPacket.WriteInt32((int)Status);
}
}
public class ChatAddonMessageParams public class ChatAddonMessageParams
{ {
public void Read(WorldPacket data) public void Read(WorldPacket data)
@@ -13,11 +13,9 @@ namespace Game.Networking.Packets
public override void Read() public override void Read()
{ {
Guid = _worldPacket.ReadPackedGuid(); Guid = _worldPacket.ReadPackedGuid();
IsSoftInteract = _worldPacket.HasBit();
} }
public ObjectGuid Guid; public ObjectGuid Guid;
public bool IsSoftInteract;
} }
public class GameObjReportUse : ClientPacket public class GameObjReportUse : ClientPacket
@@ -27,11 +25,9 @@ namespace Game.Networking.Packets
public override void Read() public override void Read()
{ {
Guid = _worldPacket.ReadPackedGuid(); Guid = _worldPacket.ReadPackedGuid();
IsSoftInteract = _worldPacket.HasBit();
} }
public ObjectGuid Guid; public ObjectGuid Guid;
public bool IsSoftInteract;
} }
class GameObjectDespawn : ServerPacket class GameObjectDespawn : ServerPacket
+11 -5
View File
@@ -15,11 +15,9 @@ namespace Game.Networking.Packets
public override void Read() public override void Read()
{ {
Unit = _worldPacket.ReadPackedGuid(); Unit = _worldPacket.ReadPackedGuid();
IsSoftInteract = _worldPacket.HasBit();
} }
public ObjectGuid Unit; public ObjectGuid Unit;
public bool IsSoftInteract;
} }
public class LootResponse : ServerPacket public class LootResponse : ServerPacket
@@ -69,6 +67,9 @@ namespace Game.Networking.Packets
class LootItemPkt : ClientPacket class LootItemPkt : ClientPacket
{ {
public List<LootRequest> Loot = new();
public bool IsSoftInteract;
public LootItemPkt(WorldPacket packet) : base(packet) { } public LootItemPkt(WorldPacket packet) : base(packet) { }
public override void Read() public override void Read()
@@ -85,9 +86,9 @@ namespace Game.Networking.Packets
Loot.Add(loot); Loot.Add(loot);
} }
}
public List<LootRequest> Loot = new(); IsSoftInteract = _worldPacket.HasBit();
}
} }
class MasterLootItem : ClientPacket class MasterLootItem : ClientPacket
@@ -142,9 +143,14 @@ namespace Game.Networking.Packets
class LootMoney : ClientPacket class LootMoney : ClientPacket
{ {
public bool IsSoftInteract;
public LootMoney(WorldPacket packet) : base(packet) { } public LootMoney(WorldPacket packet) : base(packet) { }
public override void Read() { } public override void Read()
{
IsSoftInteract = _worldPacket.HasBit();
}
} }
class LootMoneyNotify : ServerPacket class LootMoneyNotify : ServerPacket
+1 -1
View File
@@ -199,11 +199,11 @@ namespace Game.Networking.Packets
public override void Write() public override void Write()
{ {
_worldPacket.WriteUInt32(Id); _worldPacket.WriteUInt32(Id);
_worldPacket.WriteUInt32(Flags);
_worldPacket.WriteVector3(Pos); _worldPacket.WriteVector3(Pos);
_worldPacket.WriteUInt32(Icon); _worldPacket.WriteUInt32(Icon);
_worldPacket.WriteUInt32(Importance); _worldPacket.WriteUInt32(Importance);
_worldPacket.WriteUInt32(WMOGroupID); _worldPacket.WriteUInt32(WMOGroupID);
_worldPacket.WriteBits(Flags, 14);
_worldPacket.WriteBits(Name.GetByteCount(), 6); _worldPacket.WriteBits(Name.GetByteCount(), 6);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
_worldPacket.WriteString(Name); _worldPacket.WriteString(Name);
@@ -966,12 +966,10 @@ namespace Game.Networking.Packets
{ {
SpellClickUnitGuid = _worldPacket.ReadPackedGuid(); SpellClickUnitGuid = _worldPacket.ReadPackedGuid();
TryAutoDismount = _worldPacket.HasBit(); TryAutoDismount = _worldPacket.HasBit();
IsSoftInteract = _worldPacket.HasBit();
} }
public ObjectGuid SpellClickUnitGuid; public ObjectGuid SpellClickUnitGuid;
public bool TryAutoDismount; public bool TryAutoDismount;
public bool IsSoftInteract;
} }
class ResyncRunes : ServerPacket class ResyncRunes : ServerPacket
@@ -24,9 +24,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(RAFSystem.MaxRecruitMonths); _worldPacket.WriteUInt32(RAFSystem.MaxRecruitMonths);
_worldPacket.WriteUInt32(RAFSystem.MaxRecruitmentUses); _worldPacket.WriteUInt32(RAFSystem.MaxRecruitmentUses);
_worldPacket.WriteUInt32(RAFSystem.DaysInCycle); _worldPacket.WriteUInt32(RAFSystem.DaysInCycle);
_worldPacket.WriteUInt32(RAFSystem.Unknown1007);
_worldPacket.WriteUInt32(TwitterPostThrottleLimit);
_worldPacket.WriteUInt32(TwitterPostThrottleCooldown);
_worldPacket.WriteUInt32(TokenPollTimeSeconds); _worldPacket.WriteUInt32(TokenPollTimeSeconds);
_worldPacket.WriteUInt32(KioskSessionMinutes); _worldPacket.WriteUInt32(KioskSessionMinutes);
@@ -61,7 +59,6 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(RestrictedAccount); _worldPacket.WriteBit(RestrictedAccount);
_worldPacket.WriteBit(CommerceSystemEnabled); _worldPacket.WriteBit(CommerceSystemEnabled);
_worldPacket.WriteBit(TutorialsEnabled); _worldPacket.WriteBit(TutorialsEnabled);
_worldPacket.WriteBit(TwitterEnabled);
_worldPacket.WriteBit(Unk67); _worldPacket.WriteBit(Unk67);
_worldPacket.WriteBit(WillKickFromWorld); _worldPacket.WriteBit(WillKickFromWorld);
@@ -140,8 +137,6 @@ namespace Game.Networking.Packets
public uint CfgRealmID; public uint CfgRealmID;
public byte ComplaintStatus; public byte ComplaintStatus;
public int CfgRealmRecID; public int CfgRealmRecID;
public uint TwitterPostThrottleLimit;
public uint TwitterPostThrottleCooldown;
public uint TokenPollTimeSeconds; public uint TokenPollTimeSeconds;
public long TokenBalanceAmount; public long TokenBalanceAmount;
public uint BpayStoreProductDeliveryDelay; public uint BpayStoreProductDeliveryDelay;
@@ -155,7 +150,6 @@ namespace Game.Networking.Packets
public bool ItemRestorationButtonEnabled; public bool ItemRestorationButtonEnabled;
public bool CharUndeleteEnabled; // Implemented public bool CharUndeleteEnabled; // Implemented
public bool BpayStoreDisabledByParentalControls; public bool BpayStoreDisabledByParentalControls;
public bool TwitterEnabled;
public bool CommerceSystemEnabled; public bool CommerceSystemEnabled;
public bool Unk67; public bool Unk67;
public bool WillKickFromWorld; public bool WillKickFromWorld;
@@ -237,6 +231,7 @@ namespace Game.Networking.Packets
public uint MaxRecruitMonths; public uint MaxRecruitMonths;
public uint MaxRecruitmentUses; public uint MaxRecruitmentUses;
public uint DaysInCycle; public uint DaysInCycle;
public uint Unknown1007;
} }
} }
@@ -272,6 +267,10 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(LaunchETA.HasValue); _worldPacket.WriteBit(LaunchETA.HasValue);
_worldPacket.WriteBit(AddonsDisabled); _worldPacket.WriteBit(AddonsDisabled);
_worldPacket.WriteBit(Unused1000); _worldPacket.WriteBit(Unused1000);
_worldPacket.WriteBit(AccountSaveDataExportEnabled);
_worldPacket.WriteBit(AccountLockedByExport);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
if (EuropaTicketSystemStatus.HasValue) if (EuropaTicketSystemStatus.HasValue)
@@ -292,6 +291,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket); _worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket);
_worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval); _worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval);
_worldPacket.WriteUInt32((uint)PlayerNameQueryInterval.TotalSeconds); _worldPacket.WriteUInt32((uint)PlayerNameQueryInterval.TotalSeconds);
_worldPacket.WriteInt32(DebugTimeEvents.Count);
_worldPacket.WriteInt32(Unused1007);
if (LaunchETA.HasValue) if (LaunchETA.HasValue)
_worldPacket.WriteInt32(LaunchETA.Value); _worldPacket.WriteInt32(LaunchETA.Value);
@@ -301,6 +302,9 @@ namespace Game.Networking.Packets
foreach (GameRuleValuePair gameRuleValue in GameRuleValues) foreach (GameRuleValuePair gameRuleValue in GameRuleValues)
gameRuleValue.Write(_worldPacket); gameRuleValue.Write(_worldPacket);
foreach (DebugTimeEventInfo debugTimeEventInfo in DebugTimeEvents)
debugTimeEventInfo.Write(_worldPacket);
} }
public bool BpayStoreAvailable; // NYI public bool BpayStoreAvailable; // NYI
@@ -322,6 +326,8 @@ namespace Game.Networking.Packets
public bool Unknown901CheckoutRelated; // NYI public bool Unknown901CheckoutRelated; // NYI
public bool AddonsDisabled; public bool AddonsDisabled;
public bool Unused1000; public bool Unused1000;
public bool AccountSaveDataExportEnabled;
public bool AccountLockedByExport;
public EuropaTicketConfig? EuropaTicketSystemStatus; public EuropaTicketConfig? EuropaTicketSystemStatus;
public List<int> LiveRegionCharacterCopySourceRegions = new(); public List<int> LiveRegionCharacterCopySourceRegions = new();
public uint TokenPollTimeSeconds; // NYI public uint TokenPollTimeSeconds; // NYI
@@ -339,6 +345,8 @@ namespace Game.Networking.Packets
public short PlayerNameQueryTelemetryInterval = 600; public short PlayerNameQueryTelemetryInterval = 600;
public TimeSpan PlayerNameQueryInterval = TimeSpan.FromSeconds(10); public TimeSpan PlayerNameQueryInterval = TimeSpan.FromSeconds(10);
public int? LaunchETA; public int? LaunchETA;
public List<DebugTimeEventInfo> DebugTimeEvents = new();
public int Unused1007;
} }
public class MOTD : ServerPacket public class MOTD : ServerPacket
@@ -429,4 +437,19 @@ namespace Game.Networking.Packets
data.WriteInt32(Value); data.WriteInt32(Value);
} }
} }
public struct DebugTimeEventInfo
{
public uint TimeEvent;
public string Text;
public void Write(WorldPacket data)
{
data.WriteUInt32(TimeEvent);
data.WriteBits(Text.GetByteCount(), 7);
data.FlushBits();
data.WriteString(Text);
}
}
} }
@@ -391,6 +391,7 @@ namespace Game.Networking.Packets
RideTicket.Read(data); RideTicket.Read(data);
GroupFinderActivityID = data.ReadUInt32(); GroupFinderActivityID = data.ReadUInt32();
Unknown1007 = data.ReadUInt8();
LastTitleAuthorGuid = data.ReadPackedGuid(); LastTitleAuthorGuid = data.ReadPackedGuid();
LastDescriptionAuthorGuid = data.ReadPackedGuid(); LastDescriptionAuthorGuid = data.ReadPackedGuid();
LastVoiceChatAuthorGuid = data.ReadPackedGuid(); LastVoiceChatAuthorGuid = data.ReadPackedGuid();
@@ -408,6 +409,7 @@ namespace Game.Networking.Packets
public RideTicket RideTicket; public RideTicket RideTicket;
public uint GroupFinderActivityID; public uint GroupFinderActivityID;
public byte Unknown1007;
public ObjectGuid LastTitleAuthorGuid; public ObjectGuid LastTitleAuthorGuid;
public ObjectGuid LastDescriptionAuthorGuid; public ObjectGuid LastDescriptionAuthorGuid;
public ObjectGuid LastVoiceChatAuthorGuid; public ObjectGuid LastVoiceChatAuthorGuid;
+2
View File
@@ -4824,6 +4824,8 @@ namespace Game.Spells
new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.None), // 302 SPELL_EFFECT_GATHERING new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.None), // 302 SPELL_EFFECT_GATHERING
new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.Unit), // 303 SPELL_EFFECT_CREATE_TRAIT_TREE_CONFIG new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.Unit), // 303 SPELL_EFFECT_CREATE_TRAIT_TREE_CONFIG
new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.Unit), // 304 SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG new StaticData(SpellEffectImplicitTargetTypes.Explicit, SpellTargetObjectTypes.Unit), // 304 SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG
new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 305 SPELL_EFFECT_305
new StaticData(SpellEffectImplicitTargetTypes.None, SpellTargetObjectTypes.None), // 306 SPELL_EFFECT_306
}; };
#region Fields #region Fields
+1 -1
View File
@@ -77,7 +77,7 @@ namespace Game
{ {
TraitCostRecord traitCostEntry = CliDB.TraitCostStorage.LookupByKey(traitNodeXTraitCostEntry.TraitCostID); TraitCostRecord traitCostEntry = CliDB.TraitCostStorage.LookupByKey(traitNodeXTraitCostEntry.TraitCostID);
if (traitCostEntry != null) if (traitCostEntry != null)
nodeCosts.Add(traitNodeXTraitCostEntry.TraitNodeID, traitCostEntry); nodeCosts.Add((uint)traitNodeXTraitCostEntry.TraitNodeID, traitCostEntry);
} }
MultiMap<int, TraitNodeEntryRecord> nodeEntries = new(); MultiMap<int, TraitNodeEntryRecord> nodeEntries = new();
+6 -4
View File
@@ -698,7 +698,8 @@ INSERT INTO `build_info` VALUES
(48069,10,0,5,NULL,NULL,'558CDF958FA082E95849779C7C6945E5',NULL,NULL,NULL), (48069,10,0,5,NULL,NULL,'558CDF958FA082E95849779C7C6945E5',NULL,NULL,NULL),
(48317,10,0,5,NULL,NULL,'C096E37B45B43244E9C79916604DD4AF',NULL,NULL,NULL), (48317,10,0,5,NULL,NULL,'C096E37B45B43244E9C79916604DD4AF',NULL,NULL,NULL),
(48397,10,0,5,NULL,NULL,'64BA8779EAA97E6C57982B6B1A5B32E7',NULL,NULL,NULL), (48397,10,0,5,NULL,NULL,'64BA8779EAA97E6C57982B6B1A5B32E7',NULL,NULL,NULL),
(48526,10,0,5,NULL,NULL,'D5B7D3303A2A741E6913EE1AEB0BCB65',NULL,NULL,NULL); (48526,10,0,5,NULL,NULL,'D5B7D3303A2A741E6913EE1AEB0BCB65',NULL,NULL,NULL),
(48676,10,0,7,NULL,NULL,'E059FB74DFF6438CC20C7F28900F64CA',NULL,NULL,NULL);
/*!40000 ALTER TABLE `build_info` ENABLE KEYS */; /*!40000 ALTER TABLE `build_info` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;
@@ -2306,7 +2307,7 @@ CREATE TABLE `realmlist` (
`timezone` tinyint unsigned NOT NULL DEFAULT '0', `timezone` tinyint unsigned NOT NULL DEFAULT '0',
`allowedSecurityLevel` tinyint unsigned NOT NULL DEFAULT '0', `allowedSecurityLevel` tinyint unsigned NOT NULL DEFAULT '0',
`population` float unsigned NOT NULL DEFAULT '0', `population` float unsigned NOT NULL DEFAULT '0',
`gamebuild` int unsigned NOT NULL DEFAULT '48526', `gamebuild` int unsigned NOT NULL DEFAULT '48676',
`Region` tinyint unsigned NOT NULL DEFAULT '1', `Region` tinyint unsigned NOT NULL DEFAULT '1',
`Battlegroup` tinyint unsigned NOT NULL DEFAULT '1', `Battlegroup` tinyint unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
@@ -2321,7 +2322,7 @@ CREATE TABLE `realmlist` (
LOCK TABLES `realmlist` WRITE; LOCK TABLES `realmlist` WRITE;
/*!40000 ALTER TABLE `realmlist` DISABLE KEYS */; /*!40000 ALTER TABLE `realmlist` DISABLE KEYS */;
INSERT INTO `realmlist` VALUES INSERT INTO `realmlist` VALUES
(1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,48526,1,1); (1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,48676,1,1);
/*!40000 ALTER TABLE `realmlist` ENABLE KEYS */; /*!40000 ALTER TABLE `realmlist` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;
@@ -2667,7 +2668,8 @@ INSERT INTO `updates` VALUES
('2023_02_14_00_auth.sql','033F4460715121A8B6E9DD0F7456AE930DD18A7A','RELEASED','2023-02-14 10:02:49',0), ('2023_02_14_00_auth.sql','033F4460715121A8B6E9DD0F7456AE930DD18A7A','RELEASED','2023-02-14 10:02:49',0),
('2023_02_28_00_auth.sql','F57F70D6E1BBB1CB799E338C3358C265FD7F8689','RELEASED','2023-02-28 21:32:14',0), ('2023_02_28_00_auth.sql','F57F70D6E1BBB1CB799E338C3358C265FD7F8689','RELEASED','2023-02-28 21:32:14',0),
('2023_03_08_00_auth.sql','2490CEA2EBDB0ECD3590F1D9328DD88266E179F3','RELEASED','2023-03-08 21:58:27',0), ('2023_03_08_00_auth.sql','2490CEA2EBDB0ECD3590F1D9328DD88266E179F3','RELEASED','2023-03-08 21:58:27',0),
('2023_03_11_00_auth.sql','6532C5E043692E7361689090DA19E6350705B591','RELEASED','2023-03-11 00:10:17',0); ('2023_03_11_00_auth.sql','6532C5E043692E7361689090DA19E6350705B591','RELEASED','2023-03-11 00:10:17',0),
('2023_03_22_00_auth.sql','C589D68CF88A62E03F2E797E03CF2F237371BD34','RELEASED','2023-03-21 18:12:28',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */; /*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;
@@ -0,0 +1,7 @@
DELETE FROM `build_info` WHERE `build`=48676;
INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`,`winAuthSeed`,`win64AuthSeed`,`mac64AuthSeed`,`winChecksumSeed`,`macChecksumSeed`) VALUES
(48676,10,0,7,NULL,NULL,'E059FB74DFF6438CC20C7F28900F64CA',NULL,NULL,NULL);
UPDATE `realmlist` SET `gamebuild`=48676 WHERE `gamebuild`=48526;
ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '48676';