Core: Updated to 11.1.5

Port From (https://github.com/TrinityCore/TrinityCore/commit/f9bf082be962d45de79f936d625f644253e9b810)
This commit is contained in:
Hondacrx
2025-08-11 21:28:27 -04:00
parent 2bded05e95
commit 0fe016c3dd
36 changed files with 587 additions and 537 deletions
@@ -465,6 +465,9 @@ namespace Framework.Constants
PlayerDataElementCharacterEqual = 390, /*NYI*/ // Player {PlayerDataElementCharacter} is greater than {#Amount} PlayerDataElementCharacterEqual = 390, /*NYI*/ // Player {PlayerDataElementCharacter} is greater than {#Amount}
PlayerDataElementAccountEqual = 391, /*NYI*/ // Player {PlayerDataElementAccount} is greater than {#Amount} PlayerDataElementAccountEqual = 391, /*NYI*/ // Player {PlayerDataElementAccount} is greater than {#Amount}
PlayerHasCompletedQuestOrIsReadyToTurnIn = 392, // Player has previously completed quest "{QuestV2}" or is ready to turn it in PlayerHasCompletedQuestOrIsReadyToTurnIn = 392, // Player has previously completed quest "{QuestV2}" or is ready to turn it in
PlayerTitle = 393, // Player is currently using "{ChrTitles}" title
PlayerIsInGuild = 404, // Player is in a guild
} }
public enum CriteriaFailEvent : byte public enum CriteriaFailEvent : byte
+18 -1
View File
@@ -1103,6 +1103,7 @@ namespace Framework.Constants
DontDisplayIfZero = 0x20, // NYI DontDisplayIfZero = 0x20, // NYI
ScaleMaxQuantityBySeasonWeeks = 0x40, // NYI ScaleMaxQuantityBySeasonWeeks = 0x40, // NYI
ScaleMaxQuantityByWeeksSinceStart = 0x80, // NYI ScaleMaxQuantityByWeeksSinceStart = 0x80, // NYI
ForceMaxQuantityOnConversion = 0x100, // NYI
} }
[Flags] [Flags]
@@ -1269,7 +1270,7 @@ namespace Framework.Constants
public enum ContentTuningFlag public enum ContentTuningFlag
{ {
DisabledForItem = 0x04, DisabledForItem = 0x04,
Horde = 0x8, Horde = 0x08,
Alliance = 0x10 Alliance = 0x10
} }
@@ -2034,6 +2035,14 @@ namespace Framework.Constants
CharacterBanker = 67, CharacterBanker = 67,
AccountBanker = 68, AccountBanker = 68,
ProfessionRespec = 69, ProfessionRespec = 69,
PlaceholderType71 = 70,
PlaceholderType72 = 71,
PlaceholderType73 = 72,
PlaceholderType74 = 73,
PlaceholderType75 = 74,
PlaceholderType76 = 75,
GuildRename = 76,
PlaceholderType77 = 77,
} }
[Flags] [Flags]
@@ -2885,6 +2894,14 @@ namespace Framework.Constants
ContentTuningPvpItemLevelHealthScaling = 13, ContentTuningPvpItemLevelHealthScaling = 13,
ContentTuningPvpLevelDamageScaling = 14, ContentTuningPvpLevelDamageScaling = 14,
ContentTuningPvpItemLevelDamageScaling = 15, ContentTuningPvpItemLevelDamageScaling = 15,
ArmorItemLevelDiminishing = 18,
ChallengeModeHealth = 21,
ChallengeModeDamage = 22,
MythicPlusEndOfRunGearSequenceLevel = 23,
SpellAreaEffectWarningRadius = 26, // ground spell effect warning circle radius (based on spell radius)
} }
public enum BattlePetSpeciesFlags : int public enum BattlePetSpeciesFlags : int
@@ -93,6 +93,12 @@ namespace Framework.Constants
CharacterBanker = 56, CharacterBanker = 56,
AccountBanker = 57, AccountBanker = 57,
ProfessionRespec = 58, ProfessionRespec = 58,
Placeholder1 = 59,
Placeholder2 = 60,
Placeholder3 = 61,
GuildRename = 62,
Placeholder4 = 63,
ItemUpgrade = 64,
Max Max
} }
+3
View File
@@ -788,6 +788,9 @@ namespace Framework.Constants
Bandage = 7, Bandage = 7,
ConsumableOther = 8, ConsumableOther = 8,
VantusRune = 9, VantusRune = 9,
UtilityCurio = 10,
CombatCurio = 11,
Max Max
} }
+2
View File
@@ -156,6 +156,8 @@ namespace Framework.Constants
AlreadyUsingLfgList = 0x3f, // You Can'T Do That While Using Premade Groups. AlreadyUsingLfgList = 0x3f, // You Can'T Do That While Using Premade Groups.
NotLeader = 0x45, // You Are Not The Party Leader. NotLeader = 0x45, // You Are Not The Party Leader.
Dead = 0x49, Dead = 0x49,
FarmLimit = 0x4D, // You or someone in your party has entered too many instances recently. Please wait awhile and try again.
NoCrossFactionParties = 0x4E, // Cross-faction groups can't queue for this instance
PartyNotMeetReqs = 6, // One Or More Party Members Do Not Meet The Requirements For The Chosen Dungeons (Fixme) PartyNotMeetReqs = 6, // One Or More Party Members Do Not Meet The Requirements For The Chosen Dungeons (Fixme)
} }
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -10,7 +10,7 @@ namespace Framework.Constants
public const Expansion CurrentExpansion = Expansion.TheWarWithin; public const Expansion CurrentExpansion = Expansion.TheWarWithin;
public const int MaxTalentTiers = 7; public const int MaxTalentTiers = 7;
public const int MaxTalentColumns = 3; public const int MaxTalentColumns = 4;
public const int MaxTalentRank = 5; public const int MaxTalentRank = 5;
public const int MaxPvpTalentSlots = 4; public const int MaxPvpTalentSlots = 4;
public const int MinSpecializationLevel = 10; public const int MinSpecializationLevel = 10;
+4
View File
@@ -63,6 +63,10 @@ namespace Framework.Constants
Spell = 5, Spell = 5,
Unlock = 6, Unlock = 6,
Companion = 7, Companion = 7,
QuestlineUnlock = 8,
QuestlineReward = 9,
QuestlineUnlockPart = 10,
Max Max
} }
@@ -46,6 +46,8 @@ namespace Framework.Constants
GuildName = 0x1000, GuildName = 0x1000,
Description = 0x2000, Description = 0x2000,
Name = 0x4000, Name = 0x4000,
ChinaHarmfulMinors = 0x8000,
Disruption = 0x10000,
} }
public enum GMTicketSystemStatus public enum GMTicketSystemStatus
@@ -454,7 +454,7 @@ namespace Framework.Database
// DungeonEncounter.db2 // DungeonEncounter.db2
PrepareStatement(HotfixStatements.SEL_DUNGEON_ENCOUNTER, "SELECT Name, ID, MapID, DifficultyID, OrderIndex, CompleteWorldStateID, Bit, Flags, " + PrepareStatement(HotfixStatements.SEL_DUNGEON_ENCOUNTER, "SELECT Name, ID, MapID, DifficultyID, OrderIndex, CompleteWorldStateID, Bit, Flags, " +
"SpellIconFileID, Faction FROM dungeon_encounter WHERE (`VerifiedBuild` > 0) = ?"); "SpellIconFileID, Faction, Unknown1115 FROM dungeon_encounter WHERE (`VerifiedBuild` > 0) = ?");
PrepareStatement(HotfixStatements.SEL_DUNGEON_ENCOUNTER_LOCALE, "SELECT ID, Name_lang FROM dungeon_encounter_locale WHERE (`VerifiedBuild` > 0) = ?" + PrepareStatement(HotfixStatements.SEL_DUNGEON_ENCOUNTER_LOCALE, "SELECT ID, Name_lang FROM dungeon_encounter_locale WHERE (`VerifiedBuild` > 0) = ?" +
" AND locale = ?"); " AND locale = ?");
@@ -1003,8 +1003,8 @@ namespace Framework.Database
PrepareStatement(HotfixStatements.SEL_NAMES_RESERVED_LOCALE, "SELECT ID, Name, LocaleMask FROM names_reserved_locale WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_NAMES_RESERVED_LOCALE, "SELECT ID, Name, LocaleMask FROM names_reserved_locale WHERE (`VerifiedBuild` > 0) = ?");
// NumTalentsAtLevel.db2 // NumTalentsAtLevel.db2
PrepareStatement(HotfixStatements.SEL_NUM_TALENTS_AT_LEVEL, "SELECT ID, NumTalents, NumTalentsDeathKnight, NumTalentsDemonHunter FROM num_talents_at_level" + PrepareStatement(HotfixStatements.SEL_NUM_TALENTS_AT_LEVEL, "SELECT ID, NumTalents, NumTalentsDeathKnight, NumTalentsDemonHunter, Unknown1115" +
" WHERE (`VerifiedBuild` > 0) = ?"); " FROM num_talents_at_level WHERE (`VerifiedBuild` > 0) = ?");
// OverrideSpellData.db2 // OverrideSpellData.db2
PrepareStatement(HotfixStatements.SEL_OVERRIDE_SPELL_DATA, "SELECT ID, Spells1, Spells2, Spells3, Spells4, Spells5, Spells6, Spells7, Spells8, Spells9, " + PrepareStatement(HotfixStatements.SEL_OVERRIDE_SPELL_DATA, "SELECT ID, Spells1, Spells2, Spells3, Spells4, Spells5, Spells6, Spells7, Spells8, Spells9, " +
@@ -1414,8 +1414,10 @@ namespace Framework.Database
"Key16 FROM tact_key WHERE (`VerifiedBuild` > 0) = ?"); "Key16 FROM tact_key WHERE (`VerifiedBuild` > 0) = ?");
// Talent.db2 // Talent.db2
PrepareStatement(HotfixStatements.SEL_TALENT, "SELECT ID, Description, TierID, Flags, ColumnIndex, ClassID, SpecID, SpellID, OverridesSpellID, " + PrepareStatement(HotfixStatements.SEL_TALENT, "SELECT ID, Description, TierID, Flags, ColumnIndex, TabID, ClassID, SpecID, SpellID, OverridesSpellID, " +
"CategoryMask1, CategoryMask2 FROM talent WHERE (`VerifiedBuild` > 0) = ?"); "RequiredSpellID, CategoryMask1, CategoryMask2, SpellRank1, SpellRank2, SpellRank3, SpellRank4, SpellRank5, SpellRank6, SpellRank7, " +
"SpellRank8, SpellRank9, PrereqTalent1, PrereqTalent2, PrereqTalent3, PrereqRank1, PrereqRank2, PrereqRank3 FROM talent" +
" WHERE (`VerifiedBuild` > 0) = ?");
PrepareStatement(HotfixStatements.SEL_TALENT_LOCALE, "SELECT ID, Description_lang FROM talent_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); PrepareStatement(HotfixStatements.SEL_TALENT_LOCALE, "SELECT ID, Description_lang FROM talent_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
// TaxiNodes.db2 // TaxiNodes.db2
@@ -3754,6 +3754,14 @@ namespace Game.Achievements
return false; return false;
break; break;
} }
case ModifierTreeType.PlayerTitle: // 393
if (referencePlayer.m_playerData.PlayerTitle != reqValue)
return false;
break;
case ModifierTreeType.PlayerIsInGuild: // 404
if (referencePlayer.GetGuildId() == 0)
return false;
break;
default: default:
return false; return false;
} }
+2 -2
View File
@@ -129,7 +129,7 @@ namespace Game.DataStorage
public ushort CinematicSequenceID; public ushort CinematicSequenceID;
public ushort DefaultSpec; public ushort DefaultSpec;
public uint Id; public uint Id;
public byte PrimaryStatPriority; public sbyte PrimaryStatPriority;
public PowerType DisplayPower; public PowerType DisplayPower;
public byte RangedAttackPowerPerAgility; public byte RangedAttackPowerPerAgility;
public byte AttackPowerPerAgility; public byte AttackPowerPerAgility;
@@ -532,7 +532,7 @@ namespace Game.DataStorage
public uint FootstepCameraEffectID; public uint FootstepCameraEffectID;
public uint DeathThudCameraEffectID; public uint DeathThudCameraEffectID;
public uint SoundID; public uint SoundID;
public uint SizeClass; public sbyte SizeClass;
public float CollisionWidth; public float CollisionWidth;
public float CollisionHeight; public float CollisionHeight;
public float WorldEffectScale; public float WorldEffectScale;
@@ -65,6 +65,7 @@ namespace Game.DataStorage
public int Flags; public int Flags;
public int SpellIconFileID; public int SpellIconFileID;
public int Faction; public int Faction;
public int Unknown1115;
} }
public sealed class DurabilityCostsRecord public sealed class DurabilityCostsRecord
+1 -1
View File
@@ -13,7 +13,7 @@ namespace Game.DataStorage
public int LegacyUpgradedItemID; public int LegacyUpgradedItemID;
public uint StaticUpgradedItemID; public uint StaticUpgradedItemID;
public sbyte SourceTypeEnum; public sbyte SourceTypeEnum;
public byte Flags; public int Flags;
public int LegacyItemID; public int LegacyItemID;
public int[] UpgradeItemID = new int[6]; public int[] UpgradeItemID = new int[6];
public ushort[] UpgradeItemBonusListID = new ushort[6]; public ushort[] UpgradeItemBonusListID = new ushort[6];
+2 -2
View File
@@ -158,7 +158,7 @@ namespace Game.DataStorage
public string ClassName; public string ClassName;
public sbyte ClassID; public sbyte ClassID;
public float PriceModifier; public float PriceModifier;
public byte Flags; public int Flags;
} }
public sealed class ItemContextPickerEntryRecord public sealed class ItemContextPickerEntryRecord
@@ -225,7 +225,7 @@ namespace Game.DataStorage
public uint Id; public uint Id;
public ushort RequiredArenaRating; public ushort RequiredArenaRating;
public byte ArenaBracket; // arena slot restrictions (min slot value) public byte ArenaBracket; // arena slot restrictions (min slot value)
public byte Flags; public int Flags;
public byte MinFactionID; public byte MinFactionID;
public int MinReputation; public int MinReputation;
public byte RequiredAchievement; // required personal arena rating public byte RequiredAchievement; // required personal arena rating
@@ -37,5 +37,6 @@ namespace Game.DataStorage
public uint NumTalents; public uint NumTalents;
public uint NumTalentsDeathKnight; public uint NumTalentsDeathKnight;
public uint NumTalentsDemonHunter; public uint NumTalentsDemonHunter;
public float Unknown1115;
} }
} }
+1 -1
View File
@@ -231,7 +231,7 @@ namespace Game.DataStorage
{ {
public uint Id; public uint Id;
public uint SpellID; public uint SpellID;
public byte FacingCasterFlags; public int FacingCasterFlags;
public ushort MinFactionID; public ushort MinFactionID;
public int MinReputation; public int MinReputation;
public ushort RequiredAreasID; public ushort RequiredAreasID;
+7 -2
View File
@@ -20,11 +20,16 @@ namespace Game.DataStorage
public byte TierID; public byte TierID;
public byte Flags; public byte Flags;
public byte ColumnIndex; public byte ColumnIndex;
public ushort TabID;
public sbyte ClassID; public sbyte ClassID;
public ushort SpecID; public ushort SpecID;
public uint SpellID; public uint SpellID;
public uint OverridesSpellID; public uint OverridesSpellID;
public byte[] CategoryMask = new byte[2]; public uint RequiredSpellID;
public int[] CategoryMask = new int[2];
public uint[] SpellRank = new uint[2];
public uint[] PrereqTalent = new uint[2];
public byte[] PrereqRank = new byte[2];
} }
public sealed class TaxiNodesRecord public sealed class TaxiNodesRecord
@@ -98,7 +103,7 @@ namespace Game.DataStorage
public string SourceText; public string SourceText;
public uint Id; public uint Id;
public uint ItemID; public uint ItemID;
public byte Flags; public int Flags;
public sbyte SourceTypeEnum; public sbyte SourceTypeEnum;
} }
+6 -6
View File
@@ -89,12 +89,12 @@ namespace Game.DataStorage
public float CameraEnteringZoom; public float CameraEnteringZoom;
public float CameraSeatZoomMin; public float CameraSeatZoomMin;
public float CameraSeatZoomMax; public float CameraSeatZoomMax;
public short EnterAnimKitID; public int EnterAnimKitID;
public short RideAnimKitID; public int RideAnimKitID;
public short ExitAnimKitID; public int ExitAnimKitID;
public short VehicleEnterAnimKitID; public int VehicleEnterAnimKitID;
public short VehicleRideAnimKitID; public int VehicleRideAnimKitID;
public short VehicleExitAnimKitID; public int VehicleExitAnimKitID;
public short CameraModeID; public short CameraModeID;
public bool HasFlag(VehicleSeatFlags flag) { return (Flags & (int)flag) != 0; } public bool HasFlag(VehicleSeatFlags flag) { return (Flags & (int)flag) != 0; }
+5
View File
@@ -287,6 +287,7 @@ namespace Game.Misc
gossipText.QuestFlags = (uint)quest.Flags; gossipText.QuestFlags = (uint)quest.Flags;
gossipText.QuestFlagsEx = (uint)quest.FlagsEx; gossipText.QuestFlagsEx = (uint)quest.FlagsEx;
gossipText.QuestFlagsEx2 = (uint)quest.FlagsEx2; gossipText.QuestFlagsEx2 = (uint)quest.FlagsEx2;
gossipText.QuestFlagsEx3 = quest.FlagsEx3;
gossipText.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly(); gossipText.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly();
gossipText.ResetByScheduler = quest.IsResetByScheduler(); gossipText.ResetByScheduler = quest.IsResetByScheduler();
gossipText.Important = quest.IsImportant(); gossipText.Important = quest.IsImportant();
@@ -383,6 +384,7 @@ namespace Game.Misc
text.QuestFlags = (uint)quest.Flags; text.QuestFlags = (uint)quest.Flags;
text.QuestFlagsEx = (uint)quest.FlagsEx; text.QuestFlagsEx = (uint)quest.FlagsEx;
text.QuestFlagsEx2 = (uint)quest.FlagsEx2; text.QuestFlagsEx2 = (uint)quest.FlagsEx2;
text.QuestFlagsEx3 = quest.FlagsEx3;
text.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly(); text.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly();
text.ResetByScheduler = quest.IsResetByScheduler(); text.ResetByScheduler = quest.IsResetByScheduler();
text.Important = quest.IsImportant(); text.Important = quest.IsImportant();
@@ -464,6 +466,7 @@ namespace Game.Misc
packet.QuestFlags[0] = (uint)(quest.Flags & (WorldConfig.GetBoolValue(WorldCfg.QuestIgnoreAutoAccept) ? ~QuestFlags.AutoAccept : ~QuestFlags.None)); packet.QuestFlags[0] = (uint)(quest.Flags & (WorldConfig.GetBoolValue(WorldCfg.QuestIgnoreAutoAccept) ? ~QuestFlags.AutoAccept : ~QuestFlags.None));
packet.QuestFlags[1] = (uint)quest.FlagsEx; packet.QuestFlags[1] = (uint)quest.FlagsEx;
packet.QuestFlags[2] = (uint)quest.FlagsEx2; packet.QuestFlags[2] = (uint)quest.FlagsEx2;
packet.QuestFlags[3] = quest.FlagsEx3;
packet.SuggestedPartyMembers = quest.SuggestedPlayers; packet.SuggestedPartyMembers = quest.SuggestedPlayers;
// Is there a better way? what about game objects? // Is there a better way? what about game objects?
@@ -576,6 +579,7 @@ namespace Game.Misc
offer.QuestFlags[0] = (uint)quest.Flags; offer.QuestFlags[0] = (uint)quest.Flags;
offer.QuestFlags[1] = (uint)quest.FlagsEx; offer.QuestFlags[1] = (uint)quest.FlagsEx;
offer.QuestFlags[2] = (uint)quest.FlagsEx2; offer.QuestFlags[2] = (uint)quest.FlagsEx2;
offer.QuestFlags[3] = quest.FlagsEx3;
packet.PortraitTurnIn = quest.QuestTurnInPortrait; packet.PortraitTurnIn = quest.QuestTurnInPortrait;
packet.PortraitGiver = quest.QuestGiverPortrait; packet.PortraitGiver = quest.QuestGiverPortrait;
@@ -646,6 +650,7 @@ namespace Game.Misc
packet.QuestFlags[0] = (uint)quest.Flags; packet.QuestFlags[0] = (uint)quest.Flags;
packet.QuestFlags[1] = (uint)quest.FlagsEx; packet.QuestFlags[1] = (uint)quest.FlagsEx;
packet.QuestFlags[2] = (uint)quest.FlagsEx2; packet.QuestFlags[2] = (uint)quest.FlagsEx2;
packet.QuestFlags[3] = quest.FlagsEx3;
packet.SuggestPartyMembers = quest.SuggestedPlayers; packet.SuggestPartyMembers = quest.SuggestedPlayers;
packet.QuestInfoID = (int)quest.QuestInfoID; packet.QuestInfoID = (int)quest.QuestInfoID;
@@ -3794,7 +3794,7 @@ namespace Game.Entities
public void WriteCreate(WorldPacket data, Player owner, Player receiver) public void WriteCreate(WorldPacket data, Player owner, Player receiver)
{ {
data.WriteBits(Type, 1); data.WriteUInt32(Type);
if (Type == 1) if (Type == 1)
{ {
data.WriteFloat(FloatValue); data.WriteFloat(FloatValue);
@@ -3803,11 +3803,10 @@ namespace Game.Entities
{ {
data.WriteInt64(Int64Value); data.WriteInt64(Int64Value);
} }
data.FlushBits();
} }
public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver)
{ {
data.WriteBits(Type, 1); data.WriteUInt32(Type);
if (Type == 1) if (Type == 1)
{ {
data.WriteFloat(FloatValue); data.WriteFloat(FloatValue);
@@ -3816,7 +3815,6 @@ namespace Game.Entities
{ {
data.WriteInt64(Int64Value); data.WriteInt64(Int64Value);
} }
data.FlushBits();
} }
} }
@@ -5637,10 +5635,9 @@ namespace Game.Entities
public class ActivePlayerData : HasChangesMask public class ActivePlayerData : HasChangesMask
{ {
public static int QuestCompletedBitsSize;
public static int QuestCompletedBitsPerBlock; public static int QuestCompletedBitsPerBlock;
static int changeMaskLength = 1517; static int changeMaskLength = 516;
public UpdateField<bool> BackpackAutoSortDisabled = new(0, 1); public UpdateField<bool> BackpackAutoSortDisabled = new(0, 1);
public UpdateField<bool> BackpackSellJunkDisabled = new(0, 2); public UpdateField<bool> BackpackSellJunkDisabled = new(0, 2);
@@ -5652,6 +5649,8 @@ namespace Game.Entities
public UpdateFieldArray<DynamicUpdateField<uint>> ResearchSiteProgress = new(1, 43, 44); public UpdateFieldArray<DynamicUpdateField<uint>> ResearchSiteProgress = new(1, 43, 44);
public UpdateFieldArray<DynamicUpdateField<Research>> Research = new(1, 45, 46); public UpdateFieldArray<DynamicUpdateField<Research>> Research = new(1, 45, 46);
public DynamicUpdateField<ulong> KnownTitles = new(0, 7); public DynamicUpdateField<ulong> KnownTitles = new(0, 7);
public DynamicUpdateField<PlayerDataElement> CharacterDataElements = new(0, 8);
public DynamicUpdateField<PlayerDataElement> AccountDataElements = new(0, 9);
public DynamicUpdateField<uint> DailyQuestsCompleted = new(0, 11); public DynamicUpdateField<uint> DailyQuestsCompleted = new(0, 11);
public DynamicUpdateField<int> AvailableQuestLineXQuestIDs = new(0, 12); public DynamicUpdateField<int> AvailableQuestLineXQuestIDs = new(0, 12);
public DynamicUpdateField<uint> Heirlooms = new(0, 13); public DynamicUpdateField<uint> Heirlooms = new(0, 13);
@@ -5677,8 +5676,6 @@ namespace Game.Entities
public DynamicUpdateField<CategoryCooldownMod> CategoryCooldownMods = new(32, 37); public DynamicUpdateField<CategoryCooldownMod> CategoryCooldownMods = new(32, 37);
public DynamicUpdateField<WeeklySpellUse> WeeklySpellUses = new(32, 38); public DynamicUpdateField<WeeklySpellUse> WeeklySpellUses = new(32, 38);
public DynamicUpdateField<CollectableSourceTrackedData> TrackedCollectableSources = new(32, 39); public DynamicUpdateField<CollectableSourceTrackedData> TrackedCollectableSources = new(32, 39);
public DynamicUpdateField<PlayerDataElement> CharacterDataElements = new(0, 8);
public DynamicUpdateField<PlayerDataElement> AccountDataElements = new(0, 9);
public DynamicUpdateField<PVPInfo> PvpInfo = new(0, 10); public DynamicUpdateField<PVPInfo> PvpInfo = new(0, 10);
public DynamicUpdateField<CharacterRestriction> CharacterRestrictions = new(0, 23); public DynamicUpdateField<CharacterRestriction> CharacterRestrictions = new(0, 23);
public DynamicUpdateField<TraitConfig> TraitConfigs = new(32, 33); public DynamicUpdateField<TraitConfig> TraitConfigs = new(32, 33);
@@ -5733,7 +5730,7 @@ namespace Game.Entities
public UpdateField<byte> MultiActionBars = new(70, 94); public UpdateField<byte> MultiActionBars = new(70, 94);
public UpdateField<byte> LifetimeMaxRank = new(70, 95); public UpdateField<byte> LifetimeMaxRank = new(70, 95);
public UpdateField<byte> NumRespecs = new(70, 96); public UpdateField<byte> NumRespecs = new(70, 96);
public UpdateField<byte> PvpMedals = new(70, 97); public UpdateField<uint> PvpMedals = new(70, 97);
public UpdateField<ushort> TodayHonorableKills = new(70, 98); public UpdateField<ushort> TodayHonorableKills = new(70, 98);
public UpdateField<ushort> YesterdayHonorableKills = new(70, 99); public UpdateField<ushort> YesterdayHonorableKills = new(70, 99);
public UpdateField<uint> LifetimeHonorableKills = new(70, 100); public UpdateField<uint> LifetimeHonorableKills = new(70, 100);
@@ -5795,12 +5792,10 @@ namespace Game.Entities
public UpdateFieldArray<uint> ProfessionSkillLine = new(2, 481, 482); public UpdateFieldArray<uint> ProfessionSkillLine = new(2, 481, 482);
public UpdateFieldArray<uint> BagSlotFlags = new(5, 484, 485); public UpdateFieldArray<uint> BagSlotFlags = new(5, 484, 485);
public UpdateFieldArray<uint> BankBagSlotFlags = new(7, 490, 491); public UpdateFieldArray<uint> BankBagSlotFlags = new(7, 490, 491);
public UpdateFieldArray<ulong> QuestCompleted = new(1000, 498, 499); public UpdateFieldArray<float> ItemUpgradeHighWatermark = new(17, 498, 499);
public UpdateFieldArray<float> ItemUpgradeHighWatermark = new(17, 1499, 1500);
public ActivePlayerData() : base((int)EntityFragment.CGObject, TypeId.ActivePlayer, changeMaskLength) public ActivePlayerData() : base((int)EntityFragment.CGObject, TypeId.ActivePlayer, changeMaskLength)
{ {
QuestCompletedBitsSize = QuestCompleted.GetSize();
QuestCompletedBitsPerBlock = sizeof(ulong) * 8; QuestCompletedBitsPerBlock = sizeof(ulong) * 8;
} }
@@ -5878,7 +5873,7 @@ namespace Game.Entities
data.WriteUInt8(MultiActionBars); data.WriteUInt8(MultiActionBars);
data.WriteUInt8(LifetimeMaxRank); data.WriteUInt8(LifetimeMaxRank);
data.WriteUInt8(NumRespecs); data.WriteUInt8(NumRespecs);
data.WriteUInt8(PvpMedals); data.WriteUInt32(PvpMedals);
for (int i = 0; i < 12; ++i) for (int i = 0; i < 12; ++i)
{ {
data.WriteUInt32(BuybackPrice[i]); data.WriteUInt32(BuybackPrice[i]);
@@ -5925,10 +5920,6 @@ namespace Game.Entities
{ {
data.WriteUInt32(BankBagSlotFlags[i]); data.WriteUInt32(BankBagSlotFlags[i]);
} }
for (int i = 0; i < 1000; ++i)
{
data.WriteUInt64(QuestCompleted[i]);
}
data.WriteUInt32(Honor); data.WriteUInt32(Honor);
data.WriteUInt32(HonorNextLevel); data.WriteUInt32(HonorNextLevel);
data.WriteInt32(PerksProgramCurrency); data.WriteInt32(PerksProgramCurrency);
@@ -6001,6 +5992,14 @@ namespace Game.Entities
{ {
data.WriteUInt64(KnownTitles[i]); data.WriteUInt64(KnownTitles[i]);
} }
for (int i = 0; i < CharacterDataElements.Size(); ++i)
{
CharacterDataElements[i].WriteCreate(data, owner, receiver);
}
for (int i = 0; i < AccountDataElements.Size(); ++i)
{
AccountDataElements[i].WriteCreate(data, owner, receiver);
}
for (int i = 0; i < DailyQuestsCompleted.Size(); ++i) for (int i = 0; i < DailyQuestsCompleted.Size(); ++i)
{ {
data.WriteUInt32(DailyQuestsCompleted[i]); data.WriteUInt32(DailyQuestsCompleted[i]);
@@ -6122,14 +6121,6 @@ namespace Game.Entities
FrozenPerksVendorItem.GetValue().Write(data); FrozenPerksVendorItem.GetValue().Write(data);
Field_1410.GetValue().WriteCreate(data, owner, receiver); Field_1410.GetValue().WriteCreate(data, owner, receiver);
DungeonScore.GetValue().Write(data); DungeonScore.GetValue().Write(data);
for (int i = 0; i < CharacterDataElements.Size(); ++i)
{
CharacterDataElements[i].WriteCreate(data, owner, receiver);
}
for (int i = 0; i < AccountDataElements.Size(); ++i)
{
AccountDataElements[i].WriteCreate(data, owner, receiver);
}
for (int i = 0; i < PvpInfo.Size(); ++i) for (int i = 0; i < PvpInfo.Size(); ++i)
{ {
PvpInfo[i].WriteCreate(data, owner, receiver); PvpInfo[i].WriteCreate(data, owner, receiver);
@@ -6172,10 +6163,8 @@ namespace Game.Entities
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)
{ {
for (uint i = 0; i < 1; ++i) data.WriteBits(changesMask.GetBlocksMask(0), 17);
data.WriteUInt32(changesMask.GetBlocksMask(i)); for (uint i = 0; i < 17; ++i)
data.WriteBits(changesMask.GetBlocksMask(1), 16);
for (uint i = 0; i < 48; ++i)
if (changesMask.GetBlock(i) != 0) if (changesMask.GetBlock(i) != 0)
data.WriteBits(changesMask.GetBlock(i), 32); data.WriteBits(changesMask.GetBlock(i), 32);
@@ -6537,6 +6526,26 @@ namespace Game.Entities
} }
} }
} }
if (changesMask[8])
{
for (int i = 0; i < CharacterDataElements.Size(); ++i)
{
if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask)
{
CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
if (changesMask[9])
{
for (int i = 0; i < AccountDataElements.Size(); ++i)
{
if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask)
{
AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
if (changesMask[11]) if (changesMask[11])
{ {
for (int i = 0; i < DailyQuestsCompleted.Size(); ++i) for (int i = 0; i < DailyQuestsCompleted.Size(); ++i)
@@ -6800,26 +6809,6 @@ namespace Game.Entities
} }
if (changesMask[0]) if (changesMask[0])
{ {
if (changesMask[8])
{
for (int i = 0; i < CharacterDataElements.Size(); ++i)
{
if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask)
{
CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
if (changesMask[9])
{
for (int i = 0; i < AccountDataElements.Size(); ++i)
{
if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask)
{
AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
if (changesMask[10]) if (changesMask[10])
{ {
for (int i = 0; i < PvpInfo.Size(); ++i) for (int i = 0; i < PvpInfo.Size(); ++i)
@@ -7074,7 +7063,7 @@ namespace Game.Entities
} }
if (changesMask[97]) if (changesMask[97])
{ {
data.WriteUInt8(PvpMedals); data.WriteUInt32(PvpMedals);
} }
if (changesMask[98]) if (changesMask[98])
{ {
@@ -7417,20 +7406,10 @@ namespace Game.Entities
} }
} }
if (changesMask[498]) if (changesMask[498])
{
for (int i = 0; i < 1000; ++i)
{
if (changesMask[499 + i])
{
data.WriteUInt64(QuestCompleted[i]);
}
}
}
if (changesMask[1499])
{ {
for (int i = 0; i < 17; ++i) for (int i = 0; i < 17; ++i)
{ {
if (changesMask[1500 + i]) if (changesMask[499 + i])
{ {
data.WriteFloat(ItemUpgradeHighWatermark[i]); data.WriteFloat(ItemUpgradeHighWatermark[i]);
} }
@@ -7451,6 +7430,8 @@ namespace Game.Entities
ClearChangesMask(ResearchSiteProgress); ClearChangesMask(ResearchSiteProgress);
ClearChangesMask(Research); ClearChangesMask(Research);
ClearChangesMask(KnownTitles); ClearChangesMask(KnownTitles);
ClearChangesMask(CharacterDataElements);
ClearChangesMask(AccountDataElements);
ClearChangesMask(DailyQuestsCompleted); ClearChangesMask(DailyQuestsCompleted);
ClearChangesMask(AvailableQuestLineXQuestIDs); ClearChangesMask(AvailableQuestLineXQuestIDs);
ClearChangesMask(Heirlooms); ClearChangesMask(Heirlooms);
@@ -7476,8 +7457,6 @@ namespace Game.Entities
ClearChangesMask(CategoryCooldownMods); ClearChangesMask(CategoryCooldownMods);
ClearChangesMask(WeeklySpellUses); ClearChangesMask(WeeklySpellUses);
ClearChangesMask(TrackedCollectableSources); ClearChangesMask(TrackedCollectableSources);
ClearChangesMask(CharacterDataElements);
ClearChangesMask(AccountDataElements);
ClearChangesMask(PvpInfo); ClearChangesMask(PvpInfo);
ClearChangesMask(CharacterRestrictions); ClearChangesMask(CharacterRestrictions);
ClearChangesMask(TraitConfigs); ClearChangesMask(TraitConfigs);
@@ -7594,7 +7573,6 @@ namespace Game.Entities
ClearChangesMask(ProfessionSkillLine); ClearChangesMask(ProfessionSkillLine);
ClearChangesMask(BagSlotFlags); ClearChangesMask(BagSlotFlags);
ClearChangesMask(BankBagSlotFlags); ClearChangesMask(BankBagSlotFlags);
ClearChangesMask(QuestCompleted);
ClearChangesMask(ItemUpgradeHighWatermark); ClearChangesMask(ItemUpgradeHighWatermark);
_changesMask.ResetAll(); _changesMask.ResetAll();
} }
@@ -2421,13 +2421,6 @@ namespace Game.Entities
int fieldOffset = (int)((questBit - 1) / ActivePlayerData.QuestCompletedBitsPerBlock); int fieldOffset = (int)((questBit - 1) / ActivePlayerData.QuestCompletedBitsPerBlock);
ulong flag = 1ul << (((int)questBit - 1) % ActivePlayerData.QuestCompletedBitsPerBlock); ulong flag = 1ul << (((int)questBit - 1) % ActivePlayerData.QuestCompletedBitsPerBlock);
if (fieldOffset < ActivePlayerData.QuestCompletedBitsSize)
{
if (completed)
SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted, fieldOffset), flag);
else
RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted, fieldOffset), flag);
}
BitVectors bitVectors = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.BitVectors); BitVectors bitVectors = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.BitVectors);
BitVector bitVector = bitVectors.ModifyValue(bitVectors.Values, (int)PlayerDataFlag.CharacterQuestCompletedIndex); BitVector bitVector = bitVectors.ModifyValue(bitVectors.Values, (int)PlayerDataFlag.CharacterQuestCompletedIndex);
+4 -3
View File
@@ -2965,7 +2965,9 @@ namespace Game.Entities
PlayerInteractionType.ProfessionsCraftingOrder, PlayerInteractionType.Professions, PlayerInteractionType.ProfessionsCustomerOrder, PlayerInteractionType.ProfessionsCraftingOrder, PlayerInteractionType.Professions, PlayerInteractionType.ProfessionsCustomerOrder,
PlayerInteractionType.TraitSystem, PlayerInteractionType.BarbersChoice, PlayerInteractionType.MajorFactionRenown, PlayerInteractionType.TraitSystem, PlayerInteractionType.BarbersChoice, PlayerInteractionType.MajorFactionRenown,
PlayerInteractionType.PersonalTabardVendor, PlayerInteractionType.ForgeMaster, PlayerInteractionType.CharacterBanker, PlayerInteractionType.PersonalTabardVendor, PlayerInteractionType.ForgeMaster, PlayerInteractionType.CharacterBanker,
PlayerInteractionType.AccountBanker, PlayerInteractionType.ProfessionRespec PlayerInteractionType.AccountBanker, PlayerInteractionType.ProfessionRespec,PlayerInteractionType.PlaceholderType72,
PlayerInteractionType.PlaceholderType75, PlayerInteractionType.PlaceholderType76, PlayerInteractionType.GuildRename,
PlayerInteractionType.PlaceholderType77, PlayerInteractionType.ItemUpgrade
}; };
PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[(int)gossipOptionNpc]; PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[(int)gossipOptionNpc];
@@ -4962,7 +4964,7 @@ namespace Game.Entities
if (playerChoiceLocale != null) if (playerChoiceLocale != null)
ObjectManager.GetLocaleString(playerChoiceLocale.Question, locale, ref displayPlayerChoice.Question); ObjectManager.GetLocaleString(playerChoiceLocale.Question, locale, ref displayPlayerChoice.Question);
displayPlayerChoice.CloseChoiceFrame = false; displayPlayerChoice.InfiniteRange = false;
displayPlayerChoice.HideWarboardHeader = playerChoice.HideWarboardHeader; displayPlayerChoice.HideWarboardHeader = playerChoice.HideWarboardHeader;
displayPlayerChoice.KeepOpenAfterChoice = playerChoice.KeepOpenAfterChoice; displayPlayerChoice.KeepOpenAfterChoice = playerChoice.KeepOpenAfterChoice;
@@ -5066,7 +5068,6 @@ namespace Game.Entities
var mawPower = new Networking.Packets.PlayerChoiceResponseMawPower(); var mawPower = new Networking.Packets.PlayerChoiceResponseMawPower();
mawPower.TypeArtFileID = playerChoiceResponse.MawPower.Value.TypeArtFileID; mawPower.TypeArtFileID = playerChoiceResponse.MawPower.Value.TypeArtFileID;
mawPower.Rarity = playerChoiceResponse.MawPower.Value.Rarity; mawPower.Rarity = playerChoiceResponse.MawPower.Value.Rarity;
mawPower.RarityColor = playerChoiceResponse.MawPower.Value.RarityColor;
mawPower.SpellID = playerChoiceResponse.MawPower.Value.SpellID; mawPower.SpellID = playerChoiceResponse.MawPower.Value.SpellID;
mawPower.MaxStacks = playerChoiceResponse.MawPower.Value.MaxStacks; mawPower.MaxStacks = playerChoiceResponse.MawPower.Value.MaxStacks;
+2 -2
View File
@@ -1999,10 +1999,10 @@ namespace Game.Entities
Stats GetPrimaryStat() Stats GetPrimaryStat()
{ {
byte primaryStatPriority; sbyte primaryStatPriority;
var specialization = GetPrimarySpecializationEntry(); var specialization = GetPrimarySpecializationEntry();
if (specialization != null) if (specialization != null)
primaryStatPriority = (byte)specialization.PrimaryStatPriority; primaryStatPriority = specialization.PrimaryStatPriority;
else else
primaryStatPriority = CliDB.ChrClassesStorage.LookupByKey(GetClass()).PrimaryStatPriority; primaryStatPriority = CliDB.ChrClassesStorage.LookupByKey(GetClass()).PrimaryStatPriority;
+19 -22
View File
@@ -7082,35 +7082,35 @@ namespace Game
"ID, QuestType, QuestPackageID, ContentTuningID, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, " + "ID, QuestType, QuestPackageID, ContentTuningID, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, " +
//10 11 12 13 14 15 16 //10 11 12 13 14 15 16
"RewardMoneyDifficulty, RewardMoneyMultiplier, RewardBonusMoney, RewardSpell, RewardHonor, RewardKillHonor, StartItem, " + "RewardMoneyDifficulty, RewardMoneyMultiplier, RewardBonusMoney, RewardSpell, RewardHonor, RewardKillHonor, StartItem, " +
//17 18 19 20 21 22 //17 18 19 20 21 22 23
"RewardArtifactXPDifficulty, RewardArtifactXPMultiplier, RewardArtifactCategoryID, Flags, FlagsEx, FlagsEx2, " + "RewardArtifactXPDifficulty, RewardArtifactXPMultiplier, RewardArtifactCategoryID, Flags, FlagsEx, FlagsEx2, FlagsEx3, " +
//23 24 25 26 27 28 29 30 //24 25 26 27 28 29 30 31
"RewardItem1, RewardAmount1, ItemDrop1, ItemDropQuantity1, RewardItem2, RewardAmount2, ItemDrop2, ItemDropQuantity2, " + "RewardItem1, RewardAmount1, ItemDrop1, ItemDropQuantity1, RewardItem2, RewardAmount2, ItemDrop2, ItemDropQuantity2, " +
//31 32 33 34 35 36 37 38 //32 33 34 35 36 37 38 39
"RewardItem3, RewardAmount3, ItemDrop3, ItemDropQuantity3, RewardItem4, RewardAmount4, ItemDrop4, ItemDropQuantity4, " + "RewardItem3, RewardAmount3, ItemDrop3, ItemDropQuantity3, RewardItem4, RewardAmount4, ItemDrop4, ItemDropQuantity4, " +
//39 40 41 42 43 44 //40 41 42 43 44 45
"RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemDisplayID1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemDisplayID2, " + "RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemDisplayID1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemDisplayID2, " +
//45 46 47 48 49 50 //46 47 48 49 50 51
"RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemDisplayID3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemDisplayID4, " + "RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemDisplayID3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemDisplayID4, " +
//51 52 53 54 55 56 //52 53 54 55 56 57
"RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemDisplayID5, RewardChoiceItemID6, RewardChoiceItemQuantity6, RewardChoiceItemDisplayID6, " + "RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemDisplayID5, RewardChoiceItemID6, RewardChoiceItemQuantity6, RewardChoiceItemDisplayID6, " +
//57 58 59 60 61 62 63 64 //58 59 60 61 62 63 64 65
"POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, " + "POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, " +
//65 66 67 68 //66 67 68 69
"PortraitGiver, PortraitGiverMount, PortraitGiverModelSceneID, PortraitTurnIn, " + "PortraitGiver, PortraitGiverMount, PortraitGiverModelSceneID, PortraitTurnIn, " +
//69 70 71 72 73 74 75 76 //70 71 72 73 74 75 76 77
"RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionCapIn1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionCapIn2, " + "RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionCapIn1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionCapIn2, " +
//77 78 79 80 81 82 83 84 //78 79 80 81 82 83 84 85
"RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionCapIn3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionCapIn4, " + "RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionCapIn3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionCapIn4, " +
//85 86 87 88 89 //86 87 88 89 90
"RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, " + "RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, " +
//90 91 92 93 94 95 96 97 //91 92 93 94 95 96 97 98
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " + "RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " +
//98 99 100 101 102 103 104 105 106 //99 100 101 102 103 104 105 106 107
"AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, ResetByScheduler, Expansion, ManagedWorldStateID, QuestSessionBonus, " + "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, ResetByScheduler, Expansion, ManagedWorldStateID, QuestSessionBonus, " +
//107 108 109 110 111 112 113 114 115 //108 109 110 111 112 113 114 115 116
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog " + "LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog " +
" FROM quest_template"); "FROM quest_template");
if (result.IsEmpty()) if (result.IsEmpty())
{ {
@@ -10468,7 +10468,7 @@ namespace Game
} while (rewards.NextRow()); } while (rewards.NextRow());
} }
SQLResult mawPowersResult = DB.World.Query("SELECT ChoiceId, ResponseId, TypeArtFileID, Rarity, RarityColor, SpellID, MaxStacks FROM playerchoice_response_maw_power"); SQLResult mawPowersResult = DB.World.Query("SELECT ChoiceId, ResponseId, TypeArtFileID, Rarity, SpellID, MaxStacks FROM playerchoice_response_maw_power");
if (!mawPowersResult.IsEmpty()) if (!mawPowersResult.IsEmpty())
{ {
do do
@@ -10494,10 +10494,8 @@ namespace Game
mawPower.TypeArtFileID = mawPowersResult.Read<int>(2); mawPower.TypeArtFileID = mawPowersResult.Read<int>(2);
if (!mawPowersResult.IsNull(3)) if (!mawPowersResult.IsNull(3))
mawPower.Rarity = mawPowersResult.Read<int>(3); mawPower.Rarity = mawPowersResult.Read<int>(3);
if (!mawPowersResult.IsNull(4)) mawPower.SpellID = mawPowersResult.Read<int>(4);
mawPower.RarityColor = mawPowersResult.Read<uint>(4); mawPower.MaxStacks = mawPowersResult.Read<int>(5);
mawPower.SpellID = mawPowersResult.Read<int>(5);
mawPower.MaxStacks = mawPowersResult.Read<int>(6);
response.MawPower = mawPower; response.MawPower = mawPower;
++mawPowersCount; ++mawPowersCount;
@@ -12691,7 +12689,6 @@ namespace Game
{ {
public int TypeArtFileID; public int TypeArtFileID;
public int? Rarity; public int? Rarity;
public uint? RarityColor;
public int SpellID; public int SpellID;
public int MaxStacks; public int MaxStacks;
} }
+3 -1
View File
@@ -492,7 +492,9 @@ namespace Game
{ {
MirrorImageComponentedData mirrorImageComponentedData = new(); MirrorImageComponentedData mirrorImageComponentedData = new();
mirrorImageComponentedData.UnitGUID = guid; mirrorImageComponentedData.UnitGUID = guid;
mirrorImageComponentedData.DisplayID = (int)creator.GetDisplayId(); var chrModel = Global.DB2Mgr.GetChrModel(creator.GetRace(), creator.GetGender());
if (chrModel != null)
mirrorImageComponentedData.ChrModelID = (int)chrModel.Id;
mirrorImageComponentedData.RaceID = (byte)creator.GetRace(); mirrorImageComponentedData.RaceID = (byte)creator.GetRace();
mirrorImageComponentedData.Gender = (byte)creator.GetGender(); mirrorImageComponentedData.Gender = (byte)creator.GetGender();
mirrorImageComponentedData.ClassID = (byte)creator.GetClass(); mirrorImageComponentedData.ClassID = (byte)creator.GetClass();
@@ -597,7 +597,7 @@ namespace Game.Networking.Packets
public int PvpTierID; public int PvpTierID;
public int SeasonPvpTier; public int SeasonPvpTier;
public int BestWeeklyPvpTier; public int BestWeeklyPvpTier;
public int BestSeasonPvpTierEnum; public byte BestSeasonPvpTierEnum;
public bool Disqualified; public bool Disqualified;
public void Write(WorldPacket data) public void Write(WorldPacket data)
@@ -620,7 +620,7 @@ namespace Game.Networking.Packets
data.WriteInt32(PvpTierID); data.WriteInt32(PvpTierID);
data.WriteInt32(SeasonPvpTier); data.WriteInt32(SeasonPvpTier);
data.WriteInt32(BestWeeklyPvpTier); data.WriteInt32(BestWeeklyPvpTier);
data.WriteInt32(BestSeasonPvpTierEnum); data.WriteUInt8(BestSeasonPvpTierEnum);
data.WriteBit(Disqualified); data.WriteBit(Disqualified);
data.FlushBits(); data.FlushBits();
} }
@@ -199,7 +199,7 @@ namespace Game.Networking.Packets
{ {
data.WritePackedGuid(Guid); data.WritePackedGuid(Guid);
data.WriteUInt32(VirtualRealmAddress); data.WriteUInt32(VirtualRealmAddress);
data.WriteUInt8(ListPosition); data.WriteUInt16(ListPosition);
data.WriteUInt8(RaceId); data.WriteUInt8(RaceId);
data.WriteUInt8(SexId); data.WriteUInt8(SexId);
data.WriteUInt8((byte)ClassId); data.WriteUInt8((byte)ClassId);
@@ -256,7 +256,7 @@ namespace Game.Networking.Packets
public uint VirtualRealmAddress; public uint VirtualRealmAddress;
public ulong GuildClubMemberID; // same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known) public ulong GuildClubMemberID; // same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known)
public string Name; public string Name;
public byte ListPosition; // Order of the characters in list public ushort ListPosition; // Order of the characters in list
public byte RaceId; public byte RaceId;
public Class ClassId; public Class ClassId;
public byte SexId; public byte SexId;
@@ -288,7 +288,7 @@ namespace Game.Networking.Packets
public int Tier; public int Tier;
public int WeeklyBestTier; public int WeeklyBestTier;
public int SeasonBestRating; public int SeasonBestRating;
public int SeasonBestTierEnum; public byte SeasonBestTierEnum;
public int RoundsSeasonPlayed; public int RoundsSeasonPlayed;
public int RoundsSeasonWon; public int RoundsSeasonWon;
public int RoundsWeeklyPlayed; public int RoundsWeeklyPlayed;
@@ -311,7 +311,7 @@ namespace Game.Networking.Packets
data.WriteInt32(Tier); data.WriteInt32(Tier);
data.WriteInt32(WeeklyBestTier); data.WriteInt32(WeeklyBestTier);
data.WriteInt32(SeasonBestRating); data.WriteInt32(SeasonBestRating);
data.WriteInt32(SeasonBestTierEnum); data.WriteUInt8(SeasonBestTierEnum);
data.WriteInt32(RoundsSeasonPlayed); data.WriteInt32(RoundsSeasonPlayed);
data.WriteInt32(RoundsSeasonWon); data.WriteInt32(RoundsSeasonWon);
data.WriteInt32(RoundsWeeklyPlayed); data.WriteInt32(RoundsWeeklyPlayed);
+2 -2
View File
@@ -265,7 +265,7 @@ namespace Game.Networking.Packets
{ {
Ticket.Write(_worldPacket); Ticket.Write(_worldPacket);
_worldPacket.WriteUInt8(Result); _worldPacket.WriteInt32(Result);
_worldPacket.WriteUInt8(ResultDetail); _worldPacket.WriteUInt8(ResultDetail);
_worldPacket.WriteInt32(BlackList.Count); _worldPacket.WriteInt32(BlackList.Count);
_worldPacket.WriteInt32(BlackListNames.Count); _worldPacket.WriteInt32(BlackListNames.Count);
@@ -282,7 +282,7 @@ namespace Game.Networking.Packets
} }
public RideTicket Ticket = new(); public RideTicket Ticket = new();
public byte Result; public int Result;
public byte ResultDetail; public byte ResultDetail;
public List<LFGBlackListPkt> BlackList = new(); public List<LFGBlackListPkt> BlackList = new();
public List<string> BlackListNames = new(); public List<string> BlackListNames = new();
@@ -399,6 +399,7 @@ namespace Game.Networking.Packets
public uint QuestFlags; public uint QuestFlags;
public uint QuestFlagsEx; public uint QuestFlagsEx;
public uint QuestFlagsEx2; public uint QuestFlagsEx2;
public uint QuestFlagsEx3;
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
@@ -409,6 +410,7 @@ namespace Game.Networking.Packets
data.WriteUInt32(QuestFlags); data.WriteUInt32(QuestFlags);
data.WriteUInt32(QuestFlagsEx); data.WriteUInt32(QuestFlagsEx);
data.WriteUInt32(QuestFlagsEx2); data.WriteUInt32(QuestFlagsEx2);
data.WriteUInt32(QuestFlagsEx3);
data.WriteBit(Repeatable); data.WriteBit(Repeatable);
data.WriteBit(ResetByScheduler); data.WriteBit(ResetByScheduler);
+15 -11
View File
@@ -125,6 +125,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(Info.Flags); _worldPacket.WriteUInt32(Info.Flags);
_worldPacket.WriteUInt32(Info.FlagsEx); _worldPacket.WriteUInt32(Info.FlagsEx);
_worldPacket.WriteUInt32(Info.FlagsEx2); _worldPacket.WriteUInt32(Info.FlagsEx2);
_worldPacket.WriteUInt32(Info.FlagsEx3);
for (uint i = 0; i < SharedConst.QuestRewardItemCount; ++i) for (uint i = 0; i < SharedConst.QuestRewardItemCount; ++i)
{ {
@@ -452,7 +453,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(PortraitTurnIn); _worldPacket.WriteUInt32(PortraitTurnIn);
_worldPacket.WriteUInt32(QuestFlags[0]); // Flags _worldPacket.WriteUInt32(QuestFlags[0]); // Flags
_worldPacket.WriteUInt32(QuestFlags[1]); // FlagsEx _worldPacket.WriteUInt32(QuestFlags[1]); // FlagsEx
_worldPacket.WriteUInt32(QuestFlags[2]); // FlagsEx _worldPacket.WriteUInt32(QuestFlags[2]); // FlagsEx2
_worldPacket.WriteUInt32(QuestFlags[3]); // FlagsEx3
_worldPacket.WriteUInt32(SuggestedPartyMembers); _worldPacket.WriteUInt32(SuggestedPartyMembers);
_worldPacket.WriteInt32(LearnSpells.Count); _worldPacket.WriteInt32(LearnSpells.Count);
_worldPacket.WriteInt32(DescEmotes.Count); _worldPacket.WriteInt32(DescEmotes.Count);
@@ -513,7 +515,7 @@ namespace Game.Networking.Packets
public ObjectGuid InformUnit; public ObjectGuid InformUnit;
public uint QuestID; public uint QuestID;
public int QuestPackageID; public int QuestPackageID;
public uint[] QuestFlags = new uint[3]; public uint[] QuestFlags = new uint[4];
public uint SuggestedPartyMembers; public uint SuggestedPartyMembers;
public QuestRewards Rewards = new(); public QuestRewards Rewards = new();
public List<QuestObjectiveSimple> Objectives = new(); public List<QuestObjectiveSimple> Objectives = new();
@@ -554,6 +556,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(QuestFlags[0]); _worldPacket.WriteUInt32(QuestFlags[0]);
_worldPacket.WriteUInt32(QuestFlags[1]); _worldPacket.WriteUInt32(QuestFlags[1]);
_worldPacket.WriteUInt32(QuestFlags[2]); _worldPacket.WriteUInt32(QuestFlags[2]);
_worldPacket.WriteUInt32(QuestFlags[3]);
_worldPacket.WriteInt32(StatusFlags); _worldPacket.WriteInt32(StatusFlags);
_worldPacket.WriteUInt32(QuestGiverCreatureID); _worldPacket.WriteUInt32(QuestGiverCreatureID);
_worldPacket.WriteUInt32(QuestID); _worldPacket.WriteUInt32(QuestID);
@@ -606,7 +609,7 @@ namespace Game.Networking.Packets
public List<QuestCurrency> Currency = new(); public List<QuestCurrency> Currency = new();
public int StatusFlags; public int StatusFlags;
public int QuestInfoID; public int QuestInfoID;
public uint[] QuestFlags = new uint[3]; public uint[] QuestFlags = new uint[4];
public string QuestTitle = ""; public string QuestTitle = "";
public string CompletionText = ""; public string CompletionText = "";
public List<ConditionalQuestText> ConditionalCompletionText = new(); public List<ConditionalQuestText> ConditionalCompletionText = new();
@@ -912,9 +915,11 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt64(Duration); _worldPacket.WriteInt64(Duration);
_worldPacket.WriteBits(Question.GetByteCount(), 8); _worldPacket.WriteBits(Question.GetByteCount(), 8);
_worldPacket.WriteBits(PendingChoiceText.GetByteCount(), 8); _worldPacket.WriteBits(PendingChoiceText.GetByteCount(), 8);
_worldPacket.WriteBit(CloseChoiceFrame); _worldPacket.WriteBit(InfiniteRange);
_worldPacket.WriteBit(HideWarboardHeader); _worldPacket.WriteBit(HideWarboardHeader);
_worldPacket.WriteBit(KeepOpenAfterChoice); _worldPacket.WriteBit(KeepOpenAfterChoice);
_worldPacket.WriteBit(Unknown_1115_1);
_worldPacket.WriteBit(Unknown_1115_2);
_worldPacket.FlushBits(); _worldPacket.FlushBits();
foreach (PlayerChoiceResponse response in Responses) foreach (PlayerChoiceResponse response in Responses)
@@ -934,9 +939,11 @@ namespace Game.Networking.Packets
public string Question; public string Question;
public string PendingChoiceText; public string PendingChoiceText;
public List<PlayerChoiceResponse> Responses = new(); public List<PlayerChoiceResponse> Responses = new();
public bool CloseChoiceFrame; public bool InfiniteRange;
public bool HideWarboardHeader; public bool HideWarboardHeader;
public bool KeepOpenAfterChoice; public bool KeepOpenAfterChoice;
public bool Unknown_1115_1;
public bool Unknown_1115_2;
} }
class ChoiceResponse : ClientPacket class ChoiceResponse : ClientPacket
@@ -1139,6 +1146,7 @@ namespace Game.Networking.Packets
public uint Flags; public uint Flags;
public uint FlagsEx; public uint FlagsEx;
public uint FlagsEx2; public uint FlagsEx2;
public uint FlagsEx3;
public uint POIContinent; public uint POIContinent;
public float POIx; public float POIx;
public float POIy; public float POIy;
@@ -1348,6 +1356,7 @@ namespace Game.Networking.Packets
data.WriteUInt32(QuestFlags[0]); // Flags data.WriteUInt32(QuestFlags[0]); // Flags
data.WriteUInt32(QuestFlags[1]); // FlagsEx data.WriteUInt32(QuestFlags[1]); // FlagsEx
data.WriteUInt32(QuestFlags[2]); // FlagsEx2 data.WriteUInt32(QuestFlags[2]); // FlagsEx2
data.WriteUInt32(QuestFlags[3]); // FlagsEx3
data.WriteUInt32(QuestGiverCreatureID); data.WriteUInt32(QuestGiverCreatureID);
data.WriteUInt32(QuestID); data.WriteUInt32(QuestID);
data.WriteUInt32(SuggestedPartyMembers); data.WriteUInt32(SuggestedPartyMembers);
@@ -1373,7 +1382,7 @@ namespace Game.Networking.Packets
public uint SuggestedPartyMembers; public uint SuggestedPartyMembers;
public QuestRewards Rewards = new(); public QuestRewards Rewards = new();
public List<QuestDescEmote> Emotes = new(); public List<QuestDescEmote> Emotes = new();
public uint[] QuestFlags = new uint[3]; // Flags and FlagsEx public uint[] QuestFlags = new uint[4]; // Flags and FlagsEx
public int QuestInfoID; public int QuestInfoID;
} }
@@ -1493,7 +1502,6 @@ namespace Game.Networking.Packets
public int Unused901_1; public int Unused901_1;
public int TypeArtFileID; public int TypeArtFileID;
public int? Rarity; public int? Rarity;
public uint? RarityColor;
public int Unused901_2; public int Unused901_2;
public int SpellID; public int SpellID;
public int MaxStacks; public int MaxStacks;
@@ -1506,14 +1514,10 @@ namespace Game.Networking.Packets
data.WriteInt32(SpellID); data.WriteInt32(SpellID);
data.WriteInt32(MaxStacks); data.WriteInt32(MaxStacks);
data.WriteBit(Rarity.HasValue); data.WriteBit(Rarity.HasValue);
data.WriteBit(RarityColor.HasValue);
data.FlushBits(); data.FlushBits();
if (Rarity.HasValue) if (Rarity.HasValue)
data.WriteInt32(Rarity.Value); data.WriteInt32(Rarity.Value);
if (RarityColor.HasValue)
data.WriteUInt32(RarityColor.Value);
} }
} }
@@ -1063,14 +1063,15 @@ namespace Game.Networking.Packets
public override void Write() public override void Write()
{ {
_worldPacket.WritePackedGuid(UnitGUID); _worldPacket.WritePackedGuid(UnitGUID);
_worldPacket.WriteInt32(DisplayID); _worldPacket.WriteInt32(ChrModelID);
_worldPacket.WriteInt32(SpellVisualKitID);
_worldPacket.WriteUInt8(RaceID); _worldPacket.WriteUInt8(RaceID);
_worldPacket.WriteUInt8(Gender); _worldPacket.WriteUInt8(Gender);
_worldPacket.WriteUInt8(ClassID); _worldPacket.WriteUInt8(ClassID);
_worldPacket.WriteInt32(Customizations.Count); _worldPacket.WriteInt32(Customizations.Count);
_worldPacket.WritePackedGuid(GuildGUID); _worldPacket.WritePackedGuid(GuildGUID);
_worldPacket.WriteInt32(ItemDisplayID.Count); _worldPacket.WriteInt32(ItemDisplayID.Count);
_worldPacket.WriteInt32(SpellVisualKitID);
_worldPacket.WriteInt32(Unused_1115);
foreach (ChrCustomizationChoice customization in Customizations) foreach (ChrCustomizationChoice customization in Customizations)
{ {
@@ -1083,8 +1084,9 @@ namespace Game.Networking.Packets
} }
public ObjectGuid UnitGUID; public ObjectGuid UnitGUID;
public int DisplayID; public int ChrModelID;
public int SpellVisualKitID; public int SpellVisualKitID;
public int Unused_1115;
public byte RaceID; public byte RaceID;
public byte Gender; public byte Gender;
public byte ClassID; public byte ClassID;
@@ -2036,6 +2038,7 @@ namespace Game.Networking.Packets
data.WriteUInt32((uint)CastFlags); data.WriteUInt32((uint)CastFlags);
data.WriteUInt32((uint)CastFlagsEx); data.WriteUInt32((uint)CastFlagsEx);
data.WriteUInt32(CastFlagsEx2);
data.WriteUInt32(CastTime); data.WriteUInt32(CastTime);
MissileTrajectory.Write(data); MissileTrajectory.Write(data);
@@ -2087,6 +2090,7 @@ namespace Game.Networking.Packets
public SpellCastVisual Visual; public SpellCastVisual Visual;
public SpellCastFlags CastFlags; public SpellCastFlags CastFlags;
public SpellCastFlagsEx CastFlagsEx; public SpellCastFlagsEx CastFlagsEx;
public uint CastFlagsEx2;
public uint CastTime; public uint CastTime;
public List<ObjectGuid> HitTargets = new(); public List<ObjectGuid> HitTargets = new();
public List<ObjectGuid> MissTargets = new(); public List<ObjectGuid> MissTargets = new();
@@ -102,7 +102,6 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(GroupFinderEnabled); _worldPacket.WriteBit(GroupFinderEnabled);
_worldPacket.WriteBit(IsPremadeGroupEnabled); _worldPacket.WriteBit(IsPremadeGroupEnabled);
_worldPacket.WriteBit(UseActivePlayerDataQuestCompleted);
_worldPacket.WriteBit(false); // unused 10.2.7 _worldPacket.WriteBit(false); // unused 10.2.7
_worldPacket.WriteBit(GuildEventsEditsEnabled); _worldPacket.WriteBit(GuildEventsEditsEnabled);
_worldPacket.WriteBit(GuildTradeSkillsEnabled); _worldPacket.WriteBit(GuildTradeSkillsEnabled);
@@ -110,8 +109,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(BNSendWhisperUseV2Services); _worldPacket.WriteBit(BNSendWhisperUseV2Services);
_worldPacket.WriteBit(BNSendGameDataUseV2Services); _worldPacket.WriteBit(BNSendGameDataUseV2Services);
_worldPacket.WriteBit(IsAccountCurrencyTransferEnabled); _worldPacket.WriteBit(IsAccountCurrencyTransferEnabled);
_worldPacket.WriteBit(false); // unused 11.0.7 _worldPacket.WriteBit(false); // unused 11.0.7
_worldPacket.WriteBit(LobbyMatchmakerQueueFromMainlineEnabled); _worldPacket.WriteBit(LobbyMatchmakerQueueFromMainlineEnabled);
_worldPacket.WriteBit(CanSendLobbyMatchmakerPartyCustomizations); _worldPacket.WriteBit(CanSendLobbyMatchmakerPartyCustomizations);
_worldPacket.WriteBit(AddonProfilerEnabled); _worldPacket.WriteBit(AddonProfilerEnabled);
@@ -215,7 +214,6 @@ namespace Game.Networking.Packets
public bool SellAllJunkEnabled; public bool SellAllJunkEnabled;
public bool GroupFinderEnabled = true; // classic only public bool GroupFinderEnabled = true; // classic only
public bool IsPremadeGroupEnabled = true; // classic only public bool IsPremadeGroupEnabled = true; // classic only
public bool UseActivePlayerDataQuestCompleted = false; ///< Uses ActivePlayerData::QuestCompleted (legacy) to store completed quest bits instead of ActivePlayerData::BitVectors[9]
public bool GuildEventsEditsEnabled = true; public bool GuildEventsEditsEnabled = true;
public bool GuildTradeSkillsEnabled = true; public bool GuildTradeSkillsEnabled = true;
public bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService public bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService
+47 -49
View File
@@ -42,13 +42,14 @@ namespace Game
Flags = (QuestFlags)fields.Read<uint>(20); Flags = (QuestFlags)fields.Read<uint>(20);
FlagsEx = (QuestFlagsEx)fields.Read<uint>(21); FlagsEx = (QuestFlagsEx)fields.Read<uint>(21);
FlagsEx2 = (QuestFlagsEx2)fields.Read<uint>(22); FlagsEx2 = (QuestFlagsEx2)fields.Read<uint>(22);
FlagsEx3 = fields.Read<uint>(23);
for (int i = 0; i < SharedConst.QuestItemDropCount; ++i) for (int i = 0; i < SharedConst.QuestItemDropCount; ++i)
{ {
RewardItemId[i] = fields.Read<uint>(23 + i * 4); RewardItemId[i] = fields.Read<uint>(24 + i * 4);
RewardItemCount[i] = fields.Read<uint>(24 + i * 4); RewardItemCount[i] = fields.Read<uint>(25 + i * 4);
ItemDrop[i] = fields.Read<uint>(25 + i * 4); ItemDrop[i] = fields.Read<uint>(26 + i * 4);
ItemDropQuantity[i] = fields.Read<uint>(26 + i * 4); ItemDropQuantity[i] = fields.Read<uint>(27 + i * 4);
if (RewardItemId[i] != 0) if (RewardItemId[i] != 0)
++_rewItemsCount; ++_rewItemsCount;
@@ -56,67 +57,64 @@ namespace Game
for (int i = 0; i < SharedConst.QuestRewardChoicesCount; ++i) for (int i = 0; i < SharedConst.QuestRewardChoicesCount; ++i)
{ {
RewardChoiceItemId[i] = fields.Read<uint>(39 + i * 3); RewardChoiceItemId[i] = fields.Read<uint>(40 + i * 3);
RewardChoiceItemCount[i] = fields.Read<uint>(40 + i * 3); RewardChoiceItemCount[i] = fields.Read<uint>(41 + i * 3);
RewardChoiceItemDisplayId[i] = fields.Read<uint>(41 + i * 3); RewardChoiceItemDisplayId[i] = fields.Read<uint>(42 + i * 3);
if (RewardChoiceItemId[i] != 0) if (RewardChoiceItemId[i] != 0)
++_rewChoiceItemsCount; ++_rewChoiceItemsCount;
} }
POIContinent = fields.Read<uint>(57); POIContinent = fields.Read<uint>(58);
POIx = fields.Read<float>(58); POIx = fields.Read<float>(59);
POIy = fields.Read<float>(59); POIy = fields.Read<float>(60);
POIPriority = fields.Read<uint>(60); POIPriority = fields.Read<uint>(61);
RewardTitleId = fields.Read<uint>(61); RewardTitleId = fields.Read<uint>(62);
RewardArenaPoints = fields.Read<int>(62); RewardArenaPoints = fields.Read<int>(63);
RewardSkillId = fields.Read<uint>(63); RewardSkillId = fields.Read<uint>(64);
RewardSkillPoints = fields.Read<uint>(64); RewardSkillPoints = fields.Read<uint>(65);
QuestGiverPortrait = fields.Read<uint>(65); QuestGiverPortrait = fields.Read<uint>(66);
QuestGiverPortraitMount = fields.Read<uint>(66); QuestGiverPortraitMount = fields.Read<uint>(67);
QuestGiverPortraitModelSceneId = fields.Read<int>(67); QuestGiverPortraitModelSceneId = fields.Read<int>(68);
QuestTurnInPortrait = fields.Read<uint>(68); QuestTurnInPortrait = fields.Read<uint>(69);
for (int i = 0; i < SharedConst.QuestRewardReputationsCount; ++i) for (int i = 0; i < SharedConst.QuestRewardReputationsCount; ++i)
{ {
RewardFactionId[i] = fields.Read<uint>(69 + i * 4); RewardFactionId[i] = fields.Read<uint>(70 + i * 4);
RewardFactionValue[i] = fields.Read<int>(70 + i * 4); RewardFactionValue[i] = fields.Read<int>(71 + i * 4);
RewardFactionOverride[i] = fields.Read<int>(71 + i * 4); RewardFactionOverride[i] = fields.Read<int>(72 + i * 4);
RewardFactionCapIn[i] = fields.Read<int>(72 + i * 4); RewardFactionCapIn[i] = fields.Read<int>(73 + i * 4);
} }
RewardReputationMask = fields.Read<uint>(89); RewardReputationMask = fields.Read<uint>(90);
for (int i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i) for (int i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
{ {
RewardCurrencyId[i] = fields.Read<uint>(90 + i * 2); RewardCurrencyId[i] = fields.Read<uint>(91 + i * 2);
RewardCurrencyCount[i] = fields.Read<uint>(91 + i * 2); RewardCurrencyCount[i] = fields.Read<uint>(92 + i * 2);
if (RewardCurrencyId[i] != 0)
++_rewCurrencyCount;
} }
SoundAccept = fields.Read<uint>(98); SoundAccept = fields.Read<uint>(99);
SoundTurnIn = fields.Read<uint>(99); SoundTurnIn = fields.Read<uint>(100);
AreaGroupID = fields.Read<uint>(100); AreaGroupID = fields.Read<uint>(101);
LimitTime = fields.Read<uint>(101); LimitTime = fields.Read<uint>(102);
AllowableRaces = new(fields.Read<ulong>(102)); AllowableRaces = new(fields.Read<ulong>(103));
ResetByScheduler = fields.Read<bool>(103); ResetByScheduler = fields.Read<bool>(104);
Expansion = fields.Read<int>(104); Expansion = fields.Read<int>(105);
ManagedWorldStateID = fields.Read<int>(105); ManagedWorldStateID = fields.Read<int>(106);
QuestSessionBonus = fields.Read<int>(106); QuestSessionBonus = fields.Read<int>(107);
LogTitle = fields.Read<string>(107); LogTitle = fields.Read<string>(108);
LogDescription = fields.Read<string>(108); LogDescription = fields.Read<string>(109);
QuestDescription = fields.Read<string>(109); QuestDescription = fields.Read<string>(110);
AreaDescription = fields.Read<string>(110); AreaDescription = fields.Read<string>(111);
PortraitGiverText = fields.Read<string>(111); PortraitGiverText = fields.Read<string>(112);
PortraitGiverName = fields.Read<string>(112); PortraitGiverName = fields.Read<string>(113);
PortraitTurnInText = fields.Read<string>(113); PortraitTurnInText = fields.Read<string>(114);
PortraitTurnInName = fields.Read<string>(114); PortraitTurnInName = fields.Read<string>(115);
QuestCompletionLog = fields.Read<string>(115); QuestCompletionLog = fields.Read<string>(116);
} }
public void LoadRewardDisplaySpell(SQLFields fields) public void LoadRewardDisplaySpell(SQLFields fields)
@@ -727,6 +725,7 @@ namespace Game
response.Info.Flags = (uint)Flags; response.Info.Flags = (uint)Flags;
response.Info.FlagsEx = (uint)FlagsEx; response.Info.FlagsEx = (uint)FlagsEx;
response.Info.FlagsEx2 = (uint)FlagsEx2; response.Info.FlagsEx2 = (uint)FlagsEx2;
response.Info.FlagsEx3 = FlagsEx3;
response.Info.RewardTitle = RewardTitleId; response.Info.RewardTitle = RewardTitleId;
response.Info.RewardArenaPoints = RewardArenaPoints; response.Info.RewardArenaPoints = RewardArenaPoints;
response.Info.RewardSkillLineID = RewardSkillId; response.Info.RewardSkillLineID = RewardSkillId;
@@ -849,7 +848,6 @@ namespace Game
public uint GetRewChoiceItemsCount() { return _rewChoiceItemsCount; } public uint GetRewChoiceItemsCount() { return _rewChoiceItemsCount; }
public uint GetRewItemsCount() { return _rewItemsCount; } public uint GetRewItemsCount() { return _rewItemsCount; }
public uint GetRewCurrencyCount() { return _rewCurrencyCount; }
public void SetEventIdForQuest(ushort eventId) { _eventIdForQuest = eventId; } public void SetEventIdForQuest(ushort eventId) { _eventIdForQuest = eventId; }
public ushort GetEventIdForQuest() { return _eventIdForQuest; } public ushort GetEventIdForQuest() { return _eventIdForQuest; }
@@ -879,6 +877,7 @@ namespace Game
public QuestFlags Flags { get; set; } public QuestFlags Flags { get; set; }
public QuestFlagsEx FlagsEx; public QuestFlagsEx FlagsEx;
public QuestFlagsEx2 FlagsEx2; public QuestFlagsEx2 FlagsEx2;
public uint FlagsEx3;
public uint[] RewardItemId = new uint[SharedConst.QuestRewardItemCount]; public uint[] RewardItemId = new uint[SharedConst.QuestRewardItemCount];
public uint[] RewardItemCount = new uint[SharedConst.QuestRewardItemCount]; public uint[] RewardItemCount = new uint[SharedConst.QuestRewardItemCount];
public uint[] ItemDrop = new uint[SharedConst.QuestItemDropCount]; public uint[] ItemDrop = new uint[SharedConst.QuestItemDropCount];
@@ -983,7 +982,6 @@ namespace Game
uint _rewChoiceItemsCount; uint _rewChoiceItemsCount;
uint _rewItemsCount; uint _rewItemsCount;
uint _rewCurrencyCount;
ushort _eventIdForQuest; ushort _eventIdForQuest;
#endregion #endregion
} }
+1 -1
View File
@@ -121,7 +121,7 @@ namespace Game.Spells
if (_castreq != null) if (_castreq != null)
{ {
RequiresSpellFocus = _castreq.RequiresSpellFocus; RequiresSpellFocus = _castreq.RequiresSpellFocus;
FacingCasterFlags = _castreq.FacingCasterFlags; FacingCasterFlags = (uint)_castreq.FacingCasterFlags;
RequiredAreasID = _castreq.RequiredAreasID; RequiredAreasID = _castreq.RequiredAreasID;
} }