Core: Update to 10.0.7
Port From (https://github.com/TrinityCore/TrinityCore/commit/922f60fa25569db05a7717b6b55568f321a02f64)
This commit is contained in:
@@ -93,4 +93,11 @@ namespace Framework.Constants
|
||||
// 0x40
|
||||
// 0x80
|
||||
}
|
||||
|
||||
public enum ChatWhisperTargetStatus
|
||||
{
|
||||
CanWhisper = 0,
|
||||
Offline = 1,
|
||||
WrongFaction = 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,14 @@ namespace Framework.Constants
|
||||
SocketColor.RelicWater,
|
||||
SocketColor.RelicLife,
|
||||
SocketColor.RelicWind,
|
||||
SocketColor.RelicHoly
|
||||
SocketColor.RelicHoly,
|
||||
SocketColor.PunchcardRed,
|
||||
SocketColor.PunchcardYellow,
|
||||
SocketColor.PunchcardBlue,
|
||||
SocketColor.Domination,
|
||||
SocketColor.Cypher,
|
||||
SocketColor.Tinker,
|
||||
SocketColor.Primordial
|
||||
};
|
||||
|
||||
public static ItemModifier[] AppearanceModifierSlotBySpec =
|
||||
@@ -194,6 +201,13 @@ namespace Framework.Constants
|
||||
RelicLife = 0x04000,
|
||||
RelicWind = 0x08000,
|
||||
RelicHoly = 0x10000,
|
||||
PunchcardRed = 0x20000,
|
||||
PunchcardYellow = 0x40000,
|
||||
PunchcardBlue = 0x80000,
|
||||
Domination = 0x100000,
|
||||
Cypher = 0x200000,
|
||||
Tinker = 0x400000,
|
||||
Primordial = 0x800000,
|
||||
|
||||
Standard = (Red | Yellow | Blue)
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3006,41 +3006,43 @@ namespace Framework.Constants
|
||||
SocketingCypherGemOnlyInCypherslot = 1077,
|
||||
SocketingRequiresTinkerGem = 1078,
|
||||
SocketingTinkerGemOnlyInTinkerslot = 1079,
|
||||
LevelLinkingResultLinked = 1080,
|
||||
LevelLinkingResultUnlinked = 1081,
|
||||
ClubFinderErrorPostClub = 1082,
|
||||
ClubFinderErrorApplyClub = 1083,
|
||||
ClubFinderErrorRespondApplicant = 1084,
|
||||
ClubFinderErrorCancelApplication = 1085,
|
||||
ClubFinderErrorTypeAcceptApplication = 1086,
|
||||
ClubFinderErrorTypeNoInvitePermissions = 1087,
|
||||
ClubFinderErrorTypeNoPostingPermissions = 1088,
|
||||
ClubFinderErrorTypeApplicantList = 1089,
|
||||
ClubFinderErrorTypeApplicantListNoPerm = 1090,
|
||||
ClubFinderErrorTypeFinderNotAvailable = 1091,
|
||||
ClubFinderErrorTypeGetPostingIds = 1092,
|
||||
ClubFinderErrorTypeJoinApplication = 1093,
|
||||
ClubFinderErrorTypeRealmNotEligible = 1094,
|
||||
ClubFinderErrorTypeFlaggedRename = 1095,
|
||||
ClubFinderErrorTypeFlaggedDescriptionChange = 1096,
|
||||
ItemInteractionNotEnoughGold = 1097,
|
||||
ItemInteractionNotEnoughCurrency = 1098,
|
||||
PlayerChoiceErrorPendingChoice = 1099,
|
||||
SoulbindInvalidConduit = 1100,
|
||||
SoulbindInvalidConduitItem = 1101,
|
||||
SoulbindInvalidTalent = 1102,
|
||||
SoulbindDuplicateConduit = 1103,
|
||||
ActivateSoulbindS = 1104,
|
||||
ActivateSoulbindFailedRestArea = 1105,
|
||||
CantUseProfanity = 1106,
|
||||
NotInPetBattle = 1107,
|
||||
NotInNpe = 1108,
|
||||
NoSpec = 1109,
|
||||
NoDominationshardOverwrite = 1110,
|
||||
UseWeeklyRewardsDisabled = 1111,
|
||||
CrossFactionGroupJoined = 1112,
|
||||
CantTargetUnfriendlyInOverworld = 1113,
|
||||
EquipablespellsSlotsFull = 1114
|
||||
SocketingRequiresPrimordialGem = 1080,
|
||||
SocketingPrimordialGemOnlyInPrimordialslot = 1081,
|
||||
LevelLinkingResultLinked = 1082,
|
||||
LevelLinkingResultUnlinked = 1083,
|
||||
ClubFinderErrorPostClub = 1084,
|
||||
ClubFinderErrorApplyClub = 1085,
|
||||
ClubFinderErrorRespondApplicant = 1086,
|
||||
ClubFinderErrorCancelApplication = 1087,
|
||||
ClubFinderErrorTypeAcceptApplication = 1088,
|
||||
ClubFinderErrorTypeNoInvitePermissions = 1089,
|
||||
ClubFinderErrorTypeNoPostingPermissions = 1090,
|
||||
ClubFinderErrorTypeApplicantList = 1091,
|
||||
ClubFinderErrorTypeApplicantListNoPerm = 1092,
|
||||
ClubFinderErrorTypeFinderNotAvailable = 1093,
|
||||
ClubFinderErrorTypeGetPostingIds = 1094,
|
||||
ClubFinderErrorTypeJoinApplication = 1095,
|
||||
ClubFinderErrorTypeRealmNotEligible = 1096,
|
||||
ClubFinderErrorTypeFlaggedRename = 1097,
|
||||
ClubFinderErrorTypeFlaggedDescriptionChange = 1098,
|
||||
ItemInteractionNotEnoughGold = 1099,
|
||||
ItemInteractionNotEnoughCurrency = 1100,
|
||||
PlayerChoiceErrorPendingChoice = 1101,
|
||||
SoulbindInvalidConduit = 1102,
|
||||
SoulbindInvalidConduitItem = 1103,
|
||||
SoulbindInvalidTalent = 1104,
|
||||
SoulbindDuplicateConduit = 1105,
|
||||
ActivateSoulbindS = 1106,
|
||||
ActivateSoulbindFailedRestArea = 1107,
|
||||
CantUseProfanity = 1108,
|
||||
NotInPetBattle = 1109,
|
||||
NotInNpe = 1110,
|
||||
NoSpec = 1111,
|
||||
NoDominationshardOverwrite = 1112,
|
||||
UseWeeklyRewardsDisabled = 1113,
|
||||
CrossFactionGroupJoined = 1114,
|
||||
CantTargetUnfriendlyInOverworld = 1115,
|
||||
EquipablespellsSlotsFull = 1116
|
||||
}
|
||||
|
||||
public enum SceneFlags
|
||||
|
||||
@@ -2481,6 +2481,9 @@ namespace Framework.Constants
|
||||
Gathering = 302,
|
||||
CreateTraitTreeConfig = 303, // Miscvalue[0] = Traittreeid
|
||||
ChangeActiveCombatTraitConfig = 304,
|
||||
Unk305 = 305,
|
||||
Unk306 = 306,
|
||||
|
||||
TotalSpellEffects
|
||||
}
|
||||
|
||||
|
||||
@@ -828,7 +828,7 @@ namespace Framework.Database
|
||||
PrepareStatement(HotfixStatements.SEL_LANGUAGE_WORDS, "SELECT ID, Word, LanguageID FROM language_words WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// 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) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_LANGUAGES_LOCALE, "SELECT ID, Name_lang FROM languages_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
|
||||
@@ -419,13 +419,13 @@ namespace Game.DataStorage
|
||||
}
|
||||
|
||||
// Check loaded DB2 files proper version
|
||||
if (!AreaTableStorage.ContainsKey(14618) || // last area added in 10.0.5 (47660)
|
||||
!CharTitlesStorage.ContainsKey(753) || // last char title added in 10.0.5 (47660)
|
||||
!GemPropertiesStorage.ContainsKey(4028) || // last gem property added in 10.0.5 (47660)
|
||||
!ItemStorage.ContainsKey(203716) || // last item added in 10.0.5 (47660)
|
||||
!ItemExtendedCostStorage.ContainsKey(7882) || // last item extended cost added in 10.0.5 (47660)
|
||||
!MapStorage.ContainsKey(2582) || // last map added in 10.0.5 (47660)
|
||||
!SpellNameStorage.ContainsKey(401848)) // last spell added in 10.0.5 (47660)
|
||||
if (!AreaTableStorage.ContainsKey(14720) || // last area added in 10.0.7 (48520)
|
||||
!CharTitlesStorage.ContainsKey(762) || // last char title added in 10.0.7 (48520)
|
||||
!GemPropertiesStorage.ContainsKey(4059) || // last gem property added in 10.0.7 (48520)
|
||||
!ItemStorage.ContainsKey(205244) || // last item added in 10.0.7 (48520)
|
||||
!ItemExtendedCostStorage.ContainsKey(8043) || // last item extended cost added in 10.0.7 (48520)
|
||||
!MapStorage.ContainsKey(2616) || // last map added in 10.0.7 (48520)
|
||||
!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.");
|
||||
Environment.Exit(1);
|
||||
|
||||
@@ -167,7 +167,7 @@ namespace Game.DataStorage
|
||||
public float BoxYaw;
|
||||
public sbyte ShapeType;
|
||||
public short ShapeID;
|
||||
public short AreaTriggerActionSetID;
|
||||
public int AreaTriggerActionSetID;
|
||||
public sbyte Flags;
|
||||
}
|
||||
|
||||
|
||||
@@ -513,7 +513,7 @@ namespace Game.DataStorage
|
||||
public int MinAmount;
|
||||
public int MaxAmount;
|
||||
public int ContainerIconID;
|
||||
public int ContainerQuality;
|
||||
public sbyte ContainerQuality;
|
||||
public int OnLootSpellVisualKitID;
|
||||
public uint CurrencyTypesID;
|
||||
}
|
||||
|
||||
@@ -45,9 +45,9 @@ namespace Game.DataStorage
|
||||
public DifficultyFlags Flags;
|
||||
public byte ItemContext;
|
||||
public byte ToggleDifficultyID;
|
||||
public ushort GroupSizeHealthCurveID;
|
||||
public ushort GroupSizeDmgCurveID;
|
||||
public ushort GroupSizeSpellPointsCurveID;
|
||||
public uint GroupSizeHealthCurveID;
|
||||
public uint GroupSizeDmgCurveID;
|
||||
public uint GroupSizeSpellPointsCurveID;
|
||||
}
|
||||
|
||||
public sealed class DungeonEncounterRecord
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace Game.DataStorage
|
||||
public string AllianceName;
|
||||
public string Description;
|
||||
public string Tooltip;
|
||||
public byte GarrTypeID;
|
||||
public sbyte GarrTypeID;
|
||||
public sbyte BuildingType;
|
||||
public uint HordeGameObjectID;
|
||||
public uint AllianceGameObjectID;
|
||||
@@ -118,7 +118,7 @@ namespace Game.DataStorage
|
||||
public string HordeSourceText;
|
||||
public string AllianceSourceText;
|
||||
public string TitleName;
|
||||
public byte GarrTypeID;
|
||||
public sbyte GarrTypeID;
|
||||
public sbyte GarrFollowerTypeID;
|
||||
public int HordeCreatureID;
|
||||
public int AllianceCreatureID;
|
||||
@@ -167,7 +167,7 @@ namespace Game.DataStorage
|
||||
public LocalizedString Description;
|
||||
public Vector2 MapPos;
|
||||
public Vector2 WorldPos;
|
||||
public byte GarrTypeID;
|
||||
public sbyte GarrTypeID;
|
||||
public byte GarrMissionTypeID;
|
||||
public sbyte GarrFollowerTypeID;
|
||||
public byte MaxFollowers;
|
||||
@@ -248,7 +248,7 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public byte GarrTypeID;
|
||||
public sbyte GarrTypeID;
|
||||
public int ClassID;
|
||||
public sbyte MaxTiers;
|
||||
public sbyte UiOrder;
|
||||
|
||||
@@ -15,11 +15,12 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class LanguagesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Name;
|
||||
public uint Id;
|
||||
public int Flags;
|
||||
public int UiTextureKitID;
|
||||
public int UiTextureKitElementCount;
|
||||
public int LearningCurveID;
|
||||
}
|
||||
|
||||
public sealed class LFGDungeonsRecord
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace Game.DataStorage
|
||||
public LocalizedString InfoName;
|
||||
public sbyte Type;
|
||||
public int Modifiers;
|
||||
public int Profession;
|
||||
public ushort Profession;
|
||||
}
|
||||
|
||||
public sealed class QuestLineXQuestRecord
|
||||
|
||||
@@ -249,7 +249,7 @@ namespace Game.DataStorage
|
||||
public sealed class TraitNodeXTraitCostRecord
|
||||
{
|
||||
public uint Id;
|
||||
public uint TraitNodeID;
|
||||
public int TraitNodeID;
|
||||
public int TraitCostID;
|
||||
}
|
||||
|
||||
|
||||
@@ -2596,11 +2596,11 @@ namespace Game.Entities
|
||||
public UpdateField<int> CovenantID = new(32, 34);
|
||||
public UpdateField<int> SoulbindID = new(32, 35);
|
||||
public UpdateField<DungeonScoreSummary> DungeonScore = new(32, 36);
|
||||
public UpdateFieldArray<QuestLog> QuestLog = new(125, 37, 38);
|
||||
public UpdateFieldArray<VisibleItem> VisibleItems = new(19, 163, 164);
|
||||
public UpdateFieldArray<float> AvgItemLevel = new(6, 183, 184);
|
||||
public UpdateFieldArray<QuestLog> QuestLog = new(175, 37, 38);
|
||||
public UpdateFieldArray<VisibleItem> VisibleItems = new(19, 213, 214);
|
||||
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)
|
||||
{
|
||||
@@ -2622,10 +2622,9 @@ namespace Game.Entities
|
||||
data.WriteInt32(GuildTimeStamp);
|
||||
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);
|
||||
}
|
||||
|
||||
data.WriteInt32(QuestSessionQuestLog.Size());
|
||||
}
|
||||
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)
|
||||
{
|
||||
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);
|
||||
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
|
||||
}
|
||||
@@ -2689,20 +2688,20 @@ namespace Game.Entities
|
||||
public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
changesMask.AND(allowedMaskForTarget);
|
||||
}
|
||||
|
||||
public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver)
|
||||
{
|
||||
data.WriteBits(changesMask.GetBlocksMask(0), 6);
|
||||
for (uint i = 0; i < 6; ++i)
|
||||
data.WriteBits(changesMask.GetBlocksMask(0), 8);
|
||||
for (uint i = 0; i < 8; ++i)
|
||||
if (changesMask.GetBlock(i) != 0)
|
||||
data.WriteBits(changesMask.GetBlock(i), 32);
|
||||
|
||||
@@ -2914,7 +2913,7 @@ namespace Game.Entities
|
||||
}
|
||||
if (changesMask[37])
|
||||
{
|
||||
for (int i = 0; i < 125; ++i)
|
||||
for (int i = 0; i < 175; ++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)
|
||||
{
|
||||
@@ -2935,11 +2934,11 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[183])
|
||||
if (changesMask[233])
|
||||
{
|
||||
for (int i = 0; i < 6; ++i)
|
||||
{
|
||||
if (changesMask[184 + i])
|
||||
if (changesMask[234 + i])
|
||||
{
|
||||
data.WriteFloat(AvgItemLevel[i]);
|
||||
}
|
||||
|
||||
@@ -1113,8 +1113,6 @@ namespace Game
|
||||
|
||||
// START OF DUMMY VALUES
|
||||
features.ComplaintStatus = (byte)ComplaintStatus.EnabledWithAutoIgnore;
|
||||
features.TwitterPostThrottleLimit = 60;
|
||||
features.TwitterPostThrottleCooldown = 20;
|
||||
features.CfgRealmID = 2;
|
||||
features.CfgRealmRecID = 0;
|
||||
features.TokenPollTimeSeconds = 300;
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
|
||||
|
||||
using Framework.Constants;
|
||||
using Framework.Dynamic;
|
||||
using Game.Chat;
|
||||
using Game.DataStorage;
|
||||
using Game.Entities;
|
||||
@@ -625,5 +624,26 @@ namespace Game
|
||||
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 byte MinLevel = 1;
|
||||
public byte MaxLevel = SharedConst.MaxLevel;
|
||||
public byte Unused1007_1;
|
||||
public byte Unused1007_2;
|
||||
public AuctionHouseFilterMask Filters;
|
||||
public byte[] KnownPets;
|
||||
public sbyte MaxPetLevel;
|
||||
@@ -30,6 +32,8 @@ namespace Game.Networking.Packets
|
||||
Offset = _worldPacket.ReadUInt32();
|
||||
MinLevel = _worldPacket.ReadUInt8();
|
||||
MaxLevel = _worldPacket.ReadUInt8();
|
||||
Unused1007_1 = _worldPacket.ReadUInt8();
|
||||
Unused1007_2= _worldPacket.ReadUInt8();
|
||||
Filters = (AuctionHouseFilterMask)_worldPacket.ReadUInt32();
|
||||
uint knownPetSize = _worldPacket.ReadUInt32();
|
||||
MaxPetLevel = _worldPacket.ReadInt8();
|
||||
|
||||
@@ -460,6 +460,32 @@ namespace Game.Networking.Packets
|
||||
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 void Read(WorldPacket data)
|
||||
|
||||
@@ -13,11 +13,9 @@ namespace Game.Networking.Packets
|
||||
public override void Read()
|
||||
{
|
||||
Guid = _worldPacket.ReadPackedGuid();
|
||||
IsSoftInteract = _worldPacket.HasBit();
|
||||
}
|
||||
|
||||
public ObjectGuid Guid;
|
||||
public bool IsSoftInteract;
|
||||
}
|
||||
|
||||
public class GameObjReportUse : ClientPacket
|
||||
@@ -27,11 +25,9 @@ namespace Game.Networking.Packets
|
||||
public override void Read()
|
||||
{
|
||||
Guid = _worldPacket.ReadPackedGuid();
|
||||
IsSoftInteract = _worldPacket.HasBit();
|
||||
}
|
||||
|
||||
public ObjectGuid Guid;
|
||||
public bool IsSoftInteract;
|
||||
}
|
||||
|
||||
class GameObjectDespawn : ServerPacket
|
||||
|
||||
@@ -15,11 +15,9 @@ namespace Game.Networking.Packets
|
||||
public override void Read()
|
||||
{
|
||||
Unit = _worldPacket.ReadPackedGuid();
|
||||
IsSoftInteract = _worldPacket.HasBit();
|
||||
}
|
||||
|
||||
public ObjectGuid Unit;
|
||||
public bool IsSoftInteract;
|
||||
}
|
||||
|
||||
public class LootResponse : ServerPacket
|
||||
@@ -69,6 +67,9 @@ namespace Game.Networking.Packets
|
||||
|
||||
class LootItemPkt : ClientPacket
|
||||
{
|
||||
public List<LootRequest> Loot = new();
|
||||
public bool IsSoftInteract;
|
||||
|
||||
public LootItemPkt(WorldPacket packet) : base(packet) { }
|
||||
|
||||
public override void Read()
|
||||
@@ -85,9 +86,9 @@ namespace Game.Networking.Packets
|
||||
|
||||
Loot.Add(loot);
|
||||
}
|
||||
}
|
||||
|
||||
public List<LootRequest> Loot = new();
|
||||
IsSoftInteract = _worldPacket.HasBit();
|
||||
}
|
||||
}
|
||||
|
||||
class MasterLootItem : ClientPacket
|
||||
@@ -142,9 +143,14 @@ namespace Game.Networking.Packets
|
||||
|
||||
class LootMoney : ClientPacket
|
||||
{
|
||||
public bool IsSoftInteract;
|
||||
|
||||
public LootMoney(WorldPacket packet) : base(packet) { }
|
||||
|
||||
public override void Read() { }
|
||||
public override void Read()
|
||||
{
|
||||
IsSoftInteract = _worldPacket.HasBit();
|
||||
}
|
||||
}
|
||||
|
||||
class LootMoneyNotify : ServerPacket
|
||||
|
||||
@@ -199,11 +199,11 @@ namespace Game.Networking.Packets
|
||||
public override void Write()
|
||||
{
|
||||
_worldPacket.WriteUInt32(Id);
|
||||
_worldPacket.WriteUInt32(Flags);
|
||||
_worldPacket.WriteVector3(Pos);
|
||||
_worldPacket.WriteUInt32(Icon);
|
||||
_worldPacket.WriteUInt32(Importance);
|
||||
_worldPacket.WriteUInt32(WMOGroupID);
|
||||
_worldPacket.WriteBits(Flags, 14);
|
||||
_worldPacket.WriteBits(Name.GetByteCount(), 6);
|
||||
_worldPacket.FlushBits();
|
||||
_worldPacket.WriteString(Name);
|
||||
|
||||
@@ -966,12 +966,10 @@ namespace Game.Networking.Packets
|
||||
{
|
||||
SpellClickUnitGuid = _worldPacket.ReadPackedGuid();
|
||||
TryAutoDismount = _worldPacket.HasBit();
|
||||
IsSoftInteract = _worldPacket.HasBit();
|
||||
}
|
||||
|
||||
public ObjectGuid SpellClickUnitGuid;
|
||||
public bool TryAutoDismount;
|
||||
public bool IsSoftInteract;
|
||||
}
|
||||
|
||||
class ResyncRunes : ServerPacket
|
||||
|
||||
@@ -24,9 +24,7 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteUInt32(RAFSystem.MaxRecruitMonths);
|
||||
_worldPacket.WriteUInt32(RAFSystem.MaxRecruitmentUses);
|
||||
_worldPacket.WriteUInt32(RAFSystem.DaysInCycle);
|
||||
|
||||
_worldPacket.WriteUInt32(TwitterPostThrottleLimit);
|
||||
_worldPacket.WriteUInt32(TwitterPostThrottleCooldown);
|
||||
_worldPacket.WriteUInt32(RAFSystem.Unknown1007);
|
||||
|
||||
_worldPacket.WriteUInt32(TokenPollTimeSeconds);
|
||||
_worldPacket.WriteUInt32(KioskSessionMinutes);
|
||||
@@ -61,7 +59,6 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteBit(RestrictedAccount);
|
||||
_worldPacket.WriteBit(CommerceSystemEnabled);
|
||||
_worldPacket.WriteBit(TutorialsEnabled);
|
||||
_worldPacket.WriteBit(TwitterEnabled);
|
||||
|
||||
_worldPacket.WriteBit(Unk67);
|
||||
_worldPacket.WriteBit(WillKickFromWorld);
|
||||
@@ -140,8 +137,6 @@ namespace Game.Networking.Packets
|
||||
public uint CfgRealmID;
|
||||
public byte ComplaintStatus;
|
||||
public int CfgRealmRecID;
|
||||
public uint TwitterPostThrottleLimit;
|
||||
public uint TwitterPostThrottleCooldown;
|
||||
public uint TokenPollTimeSeconds;
|
||||
public long TokenBalanceAmount;
|
||||
public uint BpayStoreProductDeliveryDelay;
|
||||
@@ -155,7 +150,6 @@ namespace Game.Networking.Packets
|
||||
public bool ItemRestorationButtonEnabled;
|
||||
public bool CharUndeleteEnabled; // Implemented
|
||||
public bool BpayStoreDisabledByParentalControls;
|
||||
public bool TwitterEnabled;
|
||||
public bool CommerceSystemEnabled;
|
||||
public bool Unk67;
|
||||
public bool WillKickFromWorld;
|
||||
@@ -237,6 +231,7 @@ namespace Game.Networking.Packets
|
||||
public uint MaxRecruitMonths;
|
||||
public uint MaxRecruitmentUses;
|
||||
public uint DaysInCycle;
|
||||
public uint Unknown1007;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,6 +267,10 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteBit(LaunchETA.HasValue);
|
||||
_worldPacket.WriteBit(AddonsDisabled);
|
||||
_worldPacket.WriteBit(Unused1000);
|
||||
|
||||
_worldPacket.WriteBit(AccountSaveDataExportEnabled);
|
||||
_worldPacket.WriteBit(AccountLockedByExport);
|
||||
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
if (EuropaTicketSystemStatus.HasValue)
|
||||
@@ -292,6 +291,8 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket);
|
||||
_worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval);
|
||||
_worldPacket.WriteUInt32((uint)PlayerNameQueryInterval.TotalSeconds);
|
||||
_worldPacket.WriteInt32(DebugTimeEvents.Count);
|
||||
_worldPacket.WriteInt32(Unused1007);
|
||||
|
||||
if (LaunchETA.HasValue)
|
||||
_worldPacket.WriteInt32(LaunchETA.Value);
|
||||
@@ -301,6 +302,9 @@ namespace Game.Networking.Packets
|
||||
|
||||
foreach (GameRuleValuePair gameRuleValue in GameRuleValues)
|
||||
gameRuleValue.Write(_worldPacket);
|
||||
|
||||
foreach (DebugTimeEventInfo debugTimeEventInfo in DebugTimeEvents)
|
||||
debugTimeEventInfo.Write(_worldPacket);
|
||||
}
|
||||
|
||||
public bool BpayStoreAvailable; // NYI
|
||||
@@ -322,6 +326,8 @@ namespace Game.Networking.Packets
|
||||
public bool Unknown901CheckoutRelated; // NYI
|
||||
public bool AddonsDisabled;
|
||||
public bool Unused1000;
|
||||
public bool AccountSaveDataExportEnabled;
|
||||
public bool AccountLockedByExport;
|
||||
public EuropaTicketConfig? EuropaTicketSystemStatus;
|
||||
public List<int> LiveRegionCharacterCopySourceRegions = new();
|
||||
public uint TokenPollTimeSeconds; // NYI
|
||||
@@ -339,6 +345,8 @@ namespace Game.Networking.Packets
|
||||
public short PlayerNameQueryTelemetryInterval = 600;
|
||||
public TimeSpan PlayerNameQueryInterval = TimeSpan.FromSeconds(10);
|
||||
public int? LaunchETA;
|
||||
public List<DebugTimeEventInfo> DebugTimeEvents = new();
|
||||
public int Unused1007;
|
||||
}
|
||||
|
||||
public class MOTD : ServerPacket
|
||||
@@ -429,4 +437,19 @@ namespace Game.Networking.Packets
|
||||
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);
|
||||
|
||||
GroupFinderActivityID = data.ReadUInt32();
|
||||
Unknown1007 = data.ReadUInt8();
|
||||
LastTitleAuthorGuid = data.ReadPackedGuid();
|
||||
LastDescriptionAuthorGuid = data.ReadPackedGuid();
|
||||
LastVoiceChatAuthorGuid = data.ReadPackedGuid();
|
||||
@@ -408,6 +409,7 @@ namespace Game.Networking.Packets
|
||||
|
||||
public RideTicket RideTicket;
|
||||
public uint GroupFinderActivityID;
|
||||
public byte Unknown1007;
|
||||
public ObjectGuid LastTitleAuthorGuid;
|
||||
public ObjectGuid LastDescriptionAuthorGuid;
|
||||
public ObjectGuid LastVoiceChatAuthorGuid;
|
||||
|
||||
@@ -4824,6 +4824,8 @@ namespace Game.Spells
|
||||
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), // 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
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace Game
|
||||
{
|
||||
TraitCostRecord traitCostEntry = CliDB.TraitCostStorage.LookupByKey(traitNodeXTraitCostEntry.TraitCostID);
|
||||
if (traitCostEntry != null)
|
||||
nodeCosts.Add(traitNodeXTraitCostEntry.TraitNodeID, traitCostEntry);
|
||||
nodeCosts.Add((uint)traitNodeXTraitCostEntry.TraitNodeID, traitCostEntry);
|
||||
}
|
||||
|
||||
MultiMap<int, TraitNodeEntryRecord> nodeEntries = new();
|
||||
|
||||
@@ -698,7 +698,8 @@ INSERT INTO `build_info` VALUES
|
||||
(48069,10,0,5,NULL,NULL,'558CDF958FA082E95849779C7C6945E5',NULL,NULL,NULL),
|
||||
(48317,10,0,5,NULL,NULL,'C096E37B45B43244E9C79916604DD4AF',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 */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
@@ -2306,7 +2307,7 @@ CREATE TABLE `realmlist` (
|
||||
`timezone` tinyint unsigned NOT NULL DEFAULT '0',
|
||||
`allowedSecurityLevel` tinyint 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',
|
||||
`Battlegroup` tinyint unsigned NOT NULL DEFAULT '1',
|
||||
PRIMARY KEY (`id`),
|
||||
@@ -2321,7 +2322,7 @@ CREATE TABLE `realmlist` (
|
||||
LOCK TABLES `realmlist` WRITE;
|
||||
/*!40000 ALTER TABLE `realmlist` DISABLE KEYS */;
|
||||
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 */;
|
||||
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_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_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 */;
|
||||
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';
|
||||
Reference in New Issue
Block a user