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
|
// 0x40
|
||||||
// 0x80
|
// 0x80
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum ChatWhisperTargetStatus
|
||||||
|
{
|
||||||
|
CanWhisper = 0,
|
||||||
|
Offline = 1,
|
||||||
|
WrongFaction = 2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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 = ?");
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -249,26 +248,26 @@ namespace Game
|
|||||||
GetPlayer().Whisper(msg, lang, receiver);
|
GetPlayer().Whisper(msg, lang, receiver);
|
||||||
break;
|
break;
|
||||||
case ChatMsg.Party:
|
case ChatMsg.Party:
|
||||||
|
{
|
||||||
|
// if player is in Battleground, he cannot say to Battlegroundmembers by /p
|
||||||
|
Group group = GetPlayer().GetOriginalGroup();
|
||||||
|
if (!group)
|
||||||
{
|
{
|
||||||
// if player is in Battleground, he cannot say to Battlegroundmembers by /p
|
group = GetPlayer().GetGroup();
|
||||||
Group group = GetPlayer().GetOriginalGroup();
|
if (!group || group.IsBGGroup())
|
||||||
if (!group)
|
return;
|
||||||
{
|
|
||||||
group = GetPlayer().GetGroup();
|
|
||||||
if (!group || group.IsBGGroup())
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (group.IsLeader(GetPlayer().GetGUID()))
|
|
||||||
type = ChatMsg.PartyLeader;
|
|
||||||
|
|
||||||
Global.ScriptMgr.OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
|
||||||
|
|
||||||
ChatPkt data = new();
|
|
||||||
data.Initialize(type, lang, sender, null, msg);
|
|
||||||
group.BroadcastPacket(data, false, group.GetMemberGroup(GetPlayer().GetGUID()));
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
if (group.IsLeader(GetPlayer().GetGUID()))
|
||||||
|
type = ChatMsg.PartyLeader;
|
||||||
|
|
||||||
|
Global.ScriptMgr.OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
||||||
|
|
||||||
|
ChatPkt data = new();
|
||||||
|
data.Initialize(type, lang, sender, null, msg);
|
||||||
|
group.BroadcastPacket(data, false, group.GetMemberGroup(GetPlayer().GetGUID()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ChatMsg.Guild:
|
case ChatMsg.Guild:
|
||||||
if (GetPlayer().GetGuildId() != 0)
|
if (GetPlayer().GetGuildId() != 0)
|
||||||
{
|
{
|
||||||
@@ -294,35 +293,35 @@ namespace Game
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ChatMsg.Raid:
|
case ChatMsg.Raid:
|
||||||
{
|
{
|
||||||
Group group = GetPlayer().GetGroup();
|
Group group = GetPlayer().GetGroup();
|
||||||
if (!group || !group.IsRaidGroup() || group.IsBGGroup())
|
if (!group || !group.IsRaidGroup() || group.IsBGGroup())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (group.IsLeader(GetPlayer().GetGUID()))
|
if (group.IsLeader(GetPlayer().GetGUID()))
|
||||||
type = ChatMsg.RaidLeader;
|
type = ChatMsg.RaidLeader;
|
||||||
|
|
||||||
Global.ScriptMgr.OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
Global.ScriptMgr.OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
||||||
|
|
||||||
ChatPkt data = new();
|
ChatPkt data = new();
|
||||||
data.Initialize(type, lang, sender, null, msg);
|
data.Initialize(type, lang, sender, null, msg);
|
||||||
group.BroadcastPacket(data, false);
|
group.BroadcastPacket(data, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ChatMsg.RaidWarning:
|
case ChatMsg.RaidWarning:
|
||||||
{
|
{
|
||||||
Group group = GetPlayer().GetGroup();
|
Group group = GetPlayer().GetGroup();
|
||||||
if (!group || !(group.IsRaidGroup() || WorldConfig.GetBoolValue(WorldCfg.ChatPartyRaidWarnings)) || !(group.IsLeader(GetPlayer().GetGUID()) || group.IsAssistant(GetPlayer().GetGUID())) || group.IsBGGroup())
|
if (!group || !(group.IsRaidGroup() || WorldConfig.GetBoolValue(WorldCfg.ChatPartyRaidWarnings)) || !(group.IsLeader(GetPlayer().GetGUID()) || group.IsAssistant(GetPlayer().GetGUID())) || group.IsBGGroup())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Global.ScriptMgr.OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
Global.ScriptMgr.OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
||||||
|
|
||||||
ChatPkt data = new();
|
ChatPkt data = new();
|
||||||
//in Battleground, raid warning is sent only to players in Battleground - code is ok
|
//in Battleground, raid warning is sent only to players in Battleground - code is ok
|
||||||
data.Initialize(ChatMsg.RaidWarning, lang, sender, null, msg);
|
data.Initialize(ChatMsg.RaidWarning, lang, sender, null, msg);
|
||||||
group.BroadcastPacket(data, false);
|
group.BroadcastPacket(data, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ChatMsg.Channel:
|
case ChatMsg.Channel:
|
||||||
if (!HasPermission(RBACPermissions.SkipCheckChatChannelReq))
|
if (!HasPermission(RBACPermissions.SkipCheckChatChannelReq))
|
||||||
{
|
{
|
||||||
@@ -340,21 +339,21 @@ namespace Game
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ChatMsg.InstanceChat:
|
case ChatMsg.InstanceChat:
|
||||||
{
|
{
|
||||||
Group group = GetPlayer().GetGroup();
|
Group group = GetPlayer().GetGroup();
|
||||||
if (!group)
|
if (!group)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (group.IsLeader(GetPlayer().GetGUID()))
|
if (group.IsLeader(GetPlayer().GetGUID()))
|
||||||
type = ChatMsg.InstanceChatLeader;
|
type = ChatMsg.InstanceChatLeader;
|
||||||
|
|
||||||
Global.ScriptMgr.OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
Global.ScriptMgr.OnPlayerChat(GetPlayer(), type, lang, msg, group);
|
||||||
|
|
||||||
ChatPkt packet = new();
|
ChatPkt packet = new();
|
||||||
packet.Initialize(type, lang, sender, null, msg);
|
packet.Initialize(type, lang, sender, null, msg);
|
||||||
group.BroadcastPacket(packet, false);
|
group.BroadcastPacket(packet, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
Log.outError(LogFilter.ChatSystem, "CHAT: unknown message type {0}, lang: {1}", type, lang);
|
Log.outError(LogFilter.ChatSystem, "CHAT: unknown message type {0}, lang: {1}", type, lang);
|
||||||
break;
|
break;
|
||||||
@@ -415,27 +414,27 @@ namespace Game
|
|||||||
case ChatMsg.Party:
|
case ChatMsg.Party:
|
||||||
case ChatMsg.Raid:
|
case ChatMsg.Raid:
|
||||||
case ChatMsg.InstanceChat:
|
case ChatMsg.InstanceChat:
|
||||||
|
{
|
||||||
|
Group group = null;
|
||||||
|
int subGroup = -1;
|
||||||
|
if (type != ChatMsg.InstanceChat)
|
||||||
|
group = sender.GetOriginalGroup();
|
||||||
|
|
||||||
|
if (!group)
|
||||||
{
|
{
|
||||||
Group group = null;
|
group = sender.GetGroup();
|
||||||
int subGroup = -1;
|
|
||||||
if (type != ChatMsg.InstanceChat)
|
|
||||||
group = sender.GetOriginalGroup();
|
|
||||||
|
|
||||||
if (!group)
|
if (!group)
|
||||||
{
|
break;
|
||||||
group = sender.GetGroup();
|
|
||||||
if (!group)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (type == ChatMsg.Party)
|
if (type == ChatMsg.Party)
|
||||||
subGroup = sender.GetSubGroup();
|
subGroup = sender.GetSubGroup();
|
||||||
}
|
|
||||||
|
|
||||||
ChatPkt data = new();
|
|
||||||
data.Initialize(type, isLogged ? Language.AddonLogged : Language.Addon, sender, null, text, 0, "", Locale.enUS, prefix);
|
|
||||||
group.BroadcastAddonMessagePacket(data, prefix, true, subGroup, sender.GetGUID());
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ChatPkt data = new();
|
||||||
|
data.Initialize(type, isLogged ? Language.AddonLogged : Language.Addon, sender, null, text, 0, "", Locale.enUS, prefix);
|
||||||
|
group.BroadcastAddonMessagePacket(data, prefix, true, subGroup, sender.GetGUID());
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ChatMsg.Channel:
|
case ChatMsg.Channel:
|
||||||
Channel chn = channelGuid.HasValue ? ChannelManager.GetChannelForPlayerByGuid(channelGuid.Value, sender) : ChannelManager.GetChannelForPlayerByNamePart(target, sender);
|
Channel chn = channelGuid.HasValue ? ChannelManager.GetChannelForPlayerByGuid(channelGuid.Value, sender) : ChannelManager.GetChannelForPlayerByNamePart(target, sender);
|
||||||
if (chn != null)
|
if (chn != null)
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,9 +231,10 @@ 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class FeatureSystemStatusGlueScreen : ServerPacket
|
public class FeatureSystemStatusGlueScreen : ServerPacket
|
||||||
{
|
{
|
||||||
public FeatureSystemStatusGlueScreen() : base(ServerOpcodes.FeatureSystemStatusGlueScreen) { }
|
public FeatureSystemStatusGlueScreen() : base(ServerOpcodes.FeatureSystemStatusGlueScreen) { }
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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';
|
||||||
Reference in New Issue
Block a user