From ed190daffa8e32bc03954d151f80b805fba4a78f Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 13 Dec 2020 18:13:51 -0500 Subject: [PATCH] Core/GameObjects: Updated gameobject template structure to 9.0 Port From (https://github.com/TrinityCore/TrinityCore/commit/364f6eec9a4d6d044666a172a2823161e0e3a418) --- Source/Framework/Constants/GameObjectConst.cs | 9 +- Source/Game/Entities/GameObject/GameObject.cs | 15 +- .../Entities/GameObject/GameObjectData.cs | 178 ++++++++++++++---- Source/Game/Entities/Object/WorldObject.cs | 4 +- Source/Game/Globals/ObjectManager.cs | 8 +- .../Game/Networking/Packets/QueryPackets.cs | 5 +- .../world/master/2020_11_05_00_world.sql | 80 ++++++++ .../world/master/2020_12_09_00_world.sql | 2 + 8 files changed, 245 insertions(+), 56 deletions(-) create mode 100644 sql/updates/world/master/2020_11_05_00_world.sql create mode 100644 sql/updates/world/master/2020_12_09_00_world.sql diff --git a/Source/Framework/Constants/GameObjectConst.cs b/Source/Framework/Constants/GameObjectConst.cs index db86f12c2..9e23e758c 100644 --- a/Source/Framework/Constants/GameObjectConst.cs +++ b/Source/Framework/Constants/GameObjectConst.cs @@ -75,9 +75,12 @@ namespace Framework.Constants SiegeableMulti = 53, SiegeableMo = 54, PvpReward = 55, - FuturePatch1 = 56, - FuturePatch2 = 57, - Max = 58 + PlayerChoiceChest = 56, + LegendaryForge = 57, + GarrTalentTree = 58, + WeeklyRewardChest = 59, + ClientModel = 60, + Max = 61 } public enum GameObjectState diff --git a/Source/Game/Entities/GameObject/GameObject.cs b/Source/Game/Entities/GameObject/GameObject.cs index cbb025197..cf44db25b 100644 --- a/Source/Game/Entities/GameObject/GameObject.cs +++ b/Source/Game/Entities/GameObject/GameObject.cs @@ -1789,12 +1789,15 @@ namespace Game.Entities return; //required lvl checks! - uint level = player.GetLevel(); - if (level < info.MeetingStone.minLevel) - return; - level = targetPlayer.GetLevel(); - if (level < info.MeetingStone.minLevel) - return; + var userLevels = Global.DB2Mgr.GetContentTuningData(info.ContentTuningId, player.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (userLevels.HasValue) + if (player.GetLevel() < userLevels.Value.MaxLevel) + return; + + var targetLevels = Global.DB2Mgr.GetContentTuningData(info.ContentTuningId, targetPlayer.m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (targetLevels.HasValue) + if (targetPlayer.GetLevel() < targetLevels.Value.MaxLevel) + return; if (info.entry == 194097) spellId = 61994; // Ritual of Summoning diff --git a/Source/Game/Entities/GameObject/GameObjectData.cs b/Source/Game/Entities/GameObject/GameObjectData.cs index 1b91e00d3..e690b7a35 100644 --- a/Source/Game/Entities/GameObject/GameObjectData.cs +++ b/Source/Game/Entities/GameObject/GameObjectData.cs @@ -53,7 +53,7 @@ namespace Game.Entities public float size; [FieldOffset(52)] - public int RequiredLevel; + public uint ContentTuningId; [FieldOffset(56)] public string AIName; @@ -73,6 +73,9 @@ namespace Game.Entities [FieldOffset(68)] public chest Chest; + [FieldOffset(68)] + public binder Binder; + [FieldOffset(68)] public generic Generic; @@ -103,6 +106,12 @@ namespace Game.Entities [FieldOffset(68)] public moTransport MoTransport; + [FieldOffset(68)] + public duelflag DuelFlag; + + [FieldOffset(68)] + public fishingnode FishingNode; + [FieldOffset(68)] public ritual Ritual; @@ -208,6 +217,21 @@ namespace Game.Entities [FieldOffset(68)] public pvpReward PvpReward; + [FieldOffset(68)] + public playerchoicechest PlayerChoiceChest; + + [FieldOffset(68)] + public legendaryforge LegendaryForge; + + [FieldOffset(68)] + public garrtalenttree GarrTalentTree; + + [FieldOffset(68)] + public weeklyrewardchest WeeklyRewardChest; + + [FieldOffset(68)] + public clientmodel ClientModel; + [FieldOffset(68)] public raw Raw; @@ -572,7 +596,7 @@ namespace Game.Entities stats.Data[i] = Raw.data[i]; } - stats.RequiredLevel = (uint)RequiredLevel; + stats.ContentTuningId = ContentTuningId; QueryData.Stats = stats; } @@ -597,9 +621,9 @@ namespace Game.Entities public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false public uint InfiniteAOI; // 10 Infinite AOI, enum { false, true, }; Default: false public uint NotLOSBlocking; // 11 Not LOS Blocking, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct button { public uint startOpen; // 0 startOpen, enum { false, true, }; Default: false @@ -612,9 +636,9 @@ namespace Game.Entities public uint closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0 public uint requireLOS; // 8 require LOS, enum { false, true, }; Default: false public uint conditionID1; // 9 conditionID1, References: PlayerCondition, NoValue = 0 + public uint InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct questgiver { public uint open; // 0 open, References: Lock_, NoValue = 0 @@ -629,9 +653,9 @@ namespace Game.Entities public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false public uint conditionID1; // 10 conditionID1, References: PlayerCondition, NoValue = 0 public uint NeverUsableWhileMounted; // 11 Never Usable While Mounted, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct chest { public uint open; // 0 open, References: Lock_, NoValue = 0 @@ -643,7 +667,7 @@ namespace Game.Entities public uint triggeredEvent; // 6 triggeredEvent, References: GameEvents, NoValue = 0 public uint linkedTrap; // 7 linkedTrap, References: GameObjects, NoValue = 0 public uint questID; // 8 questID, References: QuestV2, NoValue = 0 - public uint level; // 9 level, int, Min value: 0, Max value: 65535, Default value: 0 + public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint requireLOS; // 10 require LOS, enum { false, true, }; Default: false public uint leaveLoot; // 11 leaveLoot, enum { false, true, }; Default: false public uint notInCombat; // 12 notInCombat, enum { false, true, }; Default: false @@ -652,9 +676,9 @@ namespace Game.Entities public uint usegrouplootrules; // 15 use group loot rules, enum { false, true, }; Default: false public uint floatingTooltip; // 16 floatingTooltip, enum { false, true, }; Default: false public uint conditionID1; // 17 conditionID1, References: PlayerCondition, NoValue = 0 - public uint xpLevel; // 18 XP Level Range, References: ContentTuning, NoValue = 0 + public uint Unused; // 18 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 public uint xpDifficulty; // 19 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp - public uint lootLevel; // 20 lootLevel, int, Min value: 0, Max value: 123, Default value: 0 + public uint Unused2; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0 public uint GroupXP; // 21 Group XP, enum { false, true, }; Default: false public uint DamageImmuneOK; // 22 Damage Immune OK, enum { false, true, }; Default: false public uint trivialSkillLow; // 23 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0 @@ -670,6 +694,10 @@ namespace Game.Entities public uint chestPushLoot; // 33 chest Push Loot, References: Treasure, NoValue = 0 } + public struct binder + { + public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } public struct generic { @@ -682,13 +710,13 @@ namespace Game.Entities public uint conditionID1; // 6 conditionID1, References: PlayerCondition, NoValue = 0 public uint LargeAOI; // 7 Large AOI, enum { false, true, }; Default: false public uint UseGarrisonOwnerGuildColors; // 8 Use Garrison Owner Guild Colors, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct trap { public uint open; // 0 open, References: Lock_, NoValue = 0 - public uint level; // 1 level, int, Min value: 0, Max value: 65535, Default value: 0 + public uint Unused; // 1 Unused, int, Min value: 0, Max value: 65535, Default value: 0 public uint radius; // 2 radius, int, Min value: 0, Max value: 100, Default value: 0 public uint spell; // 3 spell, References: Spell, NoValue = 0 public uint charges; // 4 charges, int, Min value: 0, Max value: 65535, Default value: 1 @@ -708,9 +736,9 @@ namespace Game.Entities public uint requireLOS; // 18 require LOS, enum { false, true, }; Default: false public uint TriggerCondition; // 19 Trigger Condition, References: PlayerCondition, NoValue = 0 public uint Checkallunits; // 20 Check all units (spawned traps only check players), enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 21 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct chair { public uint chairslots; // 0 chairslots, int, Min value: 1, Max value: 5, Default value: 1 @@ -718,9 +746,9 @@ namespace Game.Entities public uint onlyCreatorUse; // 2 onlyCreatorUse, enum { false, true, }; Default: false public uint triggeredEvent; // 3 triggeredEvent, References: GameEvents, NoValue = 0 public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 + public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct spellFocus { public uint spellFocusType; // 0 spellFocusType, References: SpellFocusObject, NoValue = 0 @@ -732,9 +760,9 @@ namespace Game.Entities public uint floatingTooltip; // 6 floatingTooltip, enum { false, true, }; Default: false public uint floatOnWater; // 7 floatOnWater, enum { false, true, }; Default: false public uint conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0 + public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct text { public uint pageID; // 0 pageID, References: PageText, NoValue = 0 @@ -743,9 +771,9 @@ namespace Game.Entities public uint allowMounted; // 3 allowMounted, enum { false, true, }; Default: false public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 public uint NeverUsableWhileMounted; // 5 Never Usable While Mounted, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct goober { public uint open; // 0 open, References: Lock_, NoValue = 0 @@ -780,9 +808,10 @@ namespace Game.Entities public uint SortFarZ; // 29 Sort Far Z, enum { false, true, }; Default: false public uint SyncAnimationtoObjectLifetime; // 30 Sync Animation to Object Lifetime (global track only), enum { false, true, }; Default: false public uint NoFuzzyHit; // 31 No Fuzzy Hit, enum { false, true, }; Default: false + public uint LargeAOI; // 32 Large AOI, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 33 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct transport { public uint Timeto2ndfloor; // 0 Time to 2nd floor (ms), int, Min value: 0, Max value: 2147483647, Default value: 0 @@ -809,9 +838,9 @@ namespace Game.Entities public uint Reached10thfloor; // 21 Reached 10th floor, References: GameEvents, NoValue = 0 public uint onlychargeheightcheck; // 22 only charge height check. (yards), int, Min value: 0, Max value: 65535, Default value: 0 public uint onlychargetimecheck; // 23 only charge time check, int, Min value: 0, Max value: 65535, Default value: 0 + public uint InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct areadamage { public uint open; // 0 open, References: Lock_, NoValue = 0 @@ -822,9 +851,9 @@ namespace Game.Entities public uint autoClose; // 5 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint openTextID; // 6 openTextID, References: BroadcastText, NoValue = 0 public uint closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0 + public uint InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct camera { public uint open; // 0 open, References: Lock_, NoValue = 0 @@ -832,9 +861,9 @@ namespace Game.Entities public uint eventID; // 2 eventID, References: GameEvents, NoValue = 0 public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 + public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct moTransport { public uint taxiPathID; // 0 taxiPathID, References: TaxiPath, NoValue = 0 @@ -848,8 +877,19 @@ namespace Game.Entities public uint allowstopping; // 8 allow stopping, enum { false, true, }; Default: false public uint InitStopped; // 9 Init Stopped, enum { false, true, }; Default: false public uint TrueInfiniteAOI; // 10 True Infinite AOI (programmer only!), enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint Allowareaexplorationwhileonthistransport;// 12 Allow area exploration while on this transport, enum { false, true, }; Default: false } + public struct duelflag + { + public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } + + public struct fishingnode + { + public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } public struct ritual { @@ -862,23 +902,23 @@ namespace Game.Entities public uint castersGrouped; // 6 castersGrouped, enum { false, true, }; Default: true public uint ritualNoTargetCheck; // 7 ritualNoTargetCheck, enum { false, true, }; Default: true public uint conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0 + public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct mailbox { public uint conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0 + public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct guardpost { public uint creatureID; // 0 creatureID, References: Creature, NoValue = 0 public uint charges; // 1 charges, int, Min value: 0, Max value: 65535, Default value: 1 public uint Preferonlyifinlineofsight; // 2 Prefer only if in line of sight (expensive), enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct spellcaster { public uint spell; // 0 spell, References: Spell, NoValue = 0 @@ -889,17 +929,17 @@ namespace Game.Entities public uint conditionID1; // 5 conditionID1, References: PlayerCondition, NoValue = 0 public uint playerCast; // 6 playerCast, enum { false, true, }; Default: false public uint NeverUsableWhileMounted; // 7 Never Usable While Mounted, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct meetingstone { - public uint minLevel; // 0 minLevel, int, Min value: 0, Max value: 65535, Default value: 1 - public uint maxLevel; // 1 maxLevel, int, Min value: 1, Max value: 65535, Default value: 60 + public uint Unused; // 0 Unused, int, Min value: 0, Max value: 65535, Default value: 1 + public uint Unused2; // 1 Unused, int, Min value: 1, Max value: 65535, Default value: 60 public uint areaID; // 2 areaID, References: AreaTable, NoValue = 0 + public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct flagstand { public uint open; // 0 open, References: Lock_, NoValue = 0 @@ -915,9 +955,9 @@ namespace Game.Entities public uint GiganticAOI; // 10 Gigantic AOI, enum { false, true, }; Default: false public uint InfiniteAOI; // 11 Infinite AOI, enum { false, true, }; Default: false public uint cooldown; // 12 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000 + public uint InteractRadiusOverride; // 13 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct fishinghole { public uint radius; // 0 radius, int, Min value: 0, Max value: 50, Default value: 0 @@ -925,9 +965,9 @@ namespace Game.Entities public uint minRestock; // 2 minRestock, int, Min value: 0, Max value: 65535, Default value: 0 public uint maxRestock; // 3 maxRestock, int, Min value: 0, Max value: 65535, Default value: 0 public uint open; // 4 open, References: Lock_, NoValue = 0 + public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct flagdrop { public uint open; // 0 open, References: Lock_, NoValue = 0 @@ -940,9 +980,9 @@ namespace Game.Entities public uint GiganticAOI; // 7 Gigantic AOI, enum { false, true, }; Default: false public uint InfiniteAOI; // 8 Infinite AOI, enum { false, true, }; Default: false public uint cooldown; // 9 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000 + public uint InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct controlzone { public uint radius; // 0 radius, int, Min value: 0, Max value: 100, Default value: 10 @@ -973,9 +1013,9 @@ namespace Game.Entities public uint UncontestedTime; // 25 Uncontested Time, int, Min value: 0, Max value: 65535, Default value: 0 public uint FrequentHeartbeat; // 26 Frequent Heartbeat, enum { false, true, }; Default: false public uint EnablingWorldStateExpression; // 27 Enabling World State Expression, References: WorldStateExpression, NoValue = 0 + public uint InteractRadiusOverride; // 28 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct auraGenerator { public uint startOpen; // 0 startOpen, enum { false, true, }; Default: true @@ -985,9 +1025,9 @@ namespace Game.Entities public uint auraID2; // 4 auraID2, References: Spell, NoValue = 0 public uint conditionID2; // 5 conditionID2, References: PlayerCondition, NoValue = 0 public uint serverOnly; // 6 serverOnly, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct dungeonDifficulty { public uint InstanceType; // 0 Instance Type, enum { Not Instanced, Party Dungeon, Raid Dungeon, PVP Battlefield, Arena Battlefield, Scenario, }; Default: Party Dungeon @@ -1001,17 +1041,17 @@ namespace Game.Entities public uint LargeAOI; // 8 Large AOI, enum { false, true, }; Default: false public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false public uint Legacy; // 10 Legacy, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct barberChair { public uint chairheight; // 0 chairheight, int, Min value: 0, Max value: 2, Default value: 1 public int HeightOffset; // 1 Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0 public uint SitAnimKit; // 2 Sit Anim Kit, References: AnimKit, NoValue = 0 + public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct destructiblebuilding { public int Unused; // 0 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 @@ -1041,15 +1081,15 @@ namespace Game.Entities public int Thexoffsetofthedestructiblenameplateifitisenabled;// 24 The x offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 public int Theyoffsetofthedestructiblenameplateifitisenabled;// 25 The y offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 public int Thezoffsetofthedestructiblenameplateifitisenabled;// 26 The z offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 27 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct guildbank { public uint conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0 + public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct trapDoor { public uint AutoLink; // 0 Auto Link, enum { false, true, }; Default: false @@ -1060,6 +1100,7 @@ namespace Game.Entities public uint GiganticAOI; // 5 Gigantic AOI, enum { false, true, }; Default: false public uint InfiniteAOI; // 6 Infinite AOI, enum { false, true, }; Default: false public uint DoorisOpaque; // 7 Door is Opaque (Disable portal on close), enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct newflag @@ -1078,23 +1119,27 @@ namespace Game.Entities public uint worldState1; // 11 worldState1, References: WorldState, NoValue = 0 public uint ReturnonDefenderInteract; // 12 Return on Defender Interact, enum { false, true, }; Default: false public uint SpawnVignette; // 13 Spawn Vignette, References: vignette, NoValue = 0 + public uint InteractRadiusOverride; // 14 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct newflagdrop { public uint open; // 0 open, References: Lock_, NoValue = 0 public uint SpawnVignette; // 1 Spawn Vignette, References: vignette, NoValue = 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct Garrisonbuilding { public int SpawnMap; // 0 Spawn Map, References: Map, NoValue = -1 + public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrisonplot { public uint PlotInstance; // 0 Plot Instance, References: GarrPlotInstance, NoValue = 0 public int SpawnMap; // 1 Spawn Map, References: Map, NoValue = -1 + public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct clientcreature @@ -1134,6 +1179,7 @@ namespace Game.Entities public uint SpellVisual4; // 20 Spell Visual 4, References: SpellVisual, NoValue = 0 public uint SpellVisual5; // 21 Spell Visual 5, References: SpellVisual, NoValue = 0 public uint SpawnVignette; // 22 Spawn Vignette, References: vignette, NoValue = 0 + public uint InteractRadiusOverride; // 23 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct phaseablemo @@ -1142,12 +1188,14 @@ namespace Game.Entities public int AreaNameSet; // 1 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 public uint DoodadSetA; // 2 Doodad Set A, int, Min value: 0, Max value: 2147483647, Default value: 0 public uint DoodadSetB; // 3 Doodad Set B, int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrisonmonument { public uint TrophyTypeID; // 0 Trophy Type ID, References: TrophyType, NoValue = 0 public uint TrophyInstanceID; // 1 Trophy Instance ID, References: TrophyInstance, NoValue = 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrisonshipment @@ -1155,11 +1203,13 @@ namespace Game.Entities public uint ShipmentContainer; // 0 Shipment Container, References: CharShipmentContainer, NoValue = 0 public uint GiganticAOI; // 1 Gigantic AOI, enum { false, true, }; Default: false public uint LargeAOI; // 2 Large AOI, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrisonmonumentplaque { public uint TrophyInstanceID; // 0 Trophy Instance ID, References: TrophyInstance, NoValue = 0 + public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct itemforge @@ -1169,7 +1219,9 @@ namespace Game.Entities public uint IgnoreBoundingBox; // 2 Ignore Bounding Box, enum { false, true, }; Default: false public uint CameraMode; // 3 Camera Mode, References: CameraMode, NoValue = 0 public uint FadeRegionRadius; // 4 Fade Region Radius, int, Min value: 0, Max value: 2147483647, Default value: 0 - public uint ForgeType; // 5 Forge Type, enum { Artifact Forge, Relic Forge, Heart Forge }; Default: Relic Forge + public uint ForgeType; // 5 Forge Type, enum { Artifact Forge, Relic Forge, Heart Forge, Soulbind Forge, Anima Reservoir, }; Default: Relic Forge + public uint InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint GarrTalentTreeID; // 7 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0 } public struct uilink @@ -1179,15 +1231,19 @@ namespace Game.Entities public uint GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false public uint spellFocusType; // 3 spellFocusType, References: SpellFocusObject, NoValue = 0 public uint radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10 + public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } - public struct keystonereceptacle { } + public struct keystonereceptacle + { + public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } public struct gatheringnode { public uint open; // 0 open, References: Lock_, NoValue = 0 public uint chestLoot; // 1 chestLoot, References: Treasure, NoValue = 0 - public uint level; // 2 level, int, Min value: 0, Max value: 65535, Default value: 0 + public uint Unused; // 2 Unused, int, Min value: 0, Max value: 65535, Default value: 0 public uint notInCombat; // 3 notInCombat, enum { false, true, }; Default: false public uint trivialSkillLow; // 4 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0 public uint trivialSkillHigh; // 5 trivialSkillHigh, int, Min value: 0, Max value: 65535, Default value: 0 @@ -1197,7 +1253,7 @@ namespace Game.Entities public uint openTextID; // 9 openTextID, References: BroadcastText, NoValue = 0 public uint floatingTooltip; // 10 floatingTooltip, enum { false, true, }; Default: false public uint conditionID1; // 11 conditionID1, References: PlayerCondition, NoValue = 0 - public uint XPLevelRange; // 12 XP Level Range, References: ContentTuning, NoValue = 0 + public uint Unused2; // 12 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 public uint xpDifficulty; // 13 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp public uint spell; // 14 spell, References: Spell, NoValue = 0 public uint GiganticAOI; // 15 Gigantic AOI, enum { false, true, }; Default: false @@ -1209,6 +1265,7 @@ namespace Game.Entities public uint PlayOpenAnimationonOpening; // 21 Play Open Animation on Opening, enum { false, true, }; Default: false public uint turnpersonallootsecurityoff; // 22 turn personal loot security off, enum { false, true, }; Default: false public uint ClearObjectVignetteonOpening; // 23 Clear Object Vignette on Opening, enum { false, true, }; Default: false + public uint InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct challengemodereward @@ -1217,6 +1274,7 @@ namespace Game.Entities public uint WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 public uint open; // 2 open, References: Lock_, NoValue = 0 public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 + public uint InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct multi @@ -1238,6 +1296,7 @@ namespace Game.Entities public uint DoodadSetC; // 3 Doodad Set C, int, Min value: 0, Max value: 2147483647, Default value: 0 public int SpawnMap; // 4 Spawn Map, References: Map, NoValue = -1 public int AreaNameSet; // 5 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct pvpReward @@ -1246,6 +1305,49 @@ namespace Game.Entities public uint WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 public uint open; // 2 open, References: Lock_, NoValue = 0 public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 + public uint InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } + + public struct playerchoicechest + { + public uint spell; // 0 spell, References: Spell, NoValue = 0 + public uint WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 + public uint GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false + public uint PlayerChoice; // 3 Player Choice, References: PlayerChoice, NoValue = 0 + public uint MawPowerFilter; // 4 Maw Power Filter, References: MawPowerFilter, NoValue = 0 + public uint Script; // 5 Script, References: SpellScript, NoValue = 0 + public uint SpellVisual1; // 6 Spell Visual 1, References: SpellVisual, NoValue = 0 + public uint InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint Dontupdateplayerinteractability; // 8 Don't update player interactability, enum { false, true, }; Default: false + } + + public struct legendaryforge + { + public uint PlayerChoice; // 0 Player Choice, References: PlayerChoice, NoValue = 0 + public uint CustomItemBonusFilter; // 1 Custom Item Bonus Filter, References: CustomItemBonusFilter, NoValue = 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } + + public struct garrtalenttree + { + public uint UiMapID; // 0 Ui Map ID, References: UiMap, NoValue = 0 + public uint GarrTalentTreeID; // 1 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } + + public struct weeklyrewardchest + { + public uint WhenAvailable; // 0 When Available, References: GameObjectDisplayInfo, NoValue = 0 + public uint open; // 1 open, References: Lock_, NoValue = 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } + + public struct clientmodel + { + public uint LargeAOI; // 0 Large AOI, enum { false, true, }; Default: false + public uint GiganticAOI; // 1 Gigantic AOI, enum { false, true, }; Default: false + public uint InfiniteAOI; // 2 Infinite AOI, enum { false, true, }; Default: false + public uint TrueInfiniteAOI; // 3 True Infinite AOI (programmer only!), enum { false, true, }; Default: false } #endregion } diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index 514043b84..60cd648cc 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -124,8 +124,8 @@ namespace Game.Entities var area = CliDB.AreaTableStorage.LookupByKey(m_areaId); if (area != null) - if (area.Id != 0) - m_zoneId = area.Id; + if (area.ParentAreaID != 0) + m_zoneId = area.ParentAreaID; m_staticFloorZ = data.FloorZ; } diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 5b8140f7c..553df65c6 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -3683,7 +3683,7 @@ namespace Game go.Raw.data[x] = db2go.PropValue[x]; } - go.RequiredLevel = 0; + go.ContentTuningId = 0; go.ScriptId = 0; _gameObjectTemplateStorage[db2go.Id] = go; @@ -3695,8 +3695,8 @@ namespace Game "Data0, Data1, Data2, Data3, Data4, Data5, Data6, Data7, Data8, Data9, Data10, Data11, Data12, " + //21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 "Data13, Data14, Data15, Data16, Data17, Data18, Data19, Data20, Data21, Data22, Data23, Data24, Data25, Data26, Data27, Data28, " + - //37 38 39 40 41 42 44 44 - "Data29, Data30, Data31, Data32, Data33, RequiredLevel, AIName, ScriptName FROM gameobject_template"); + //37 38 39 40 41 42 43 44 + "Data29, Data30, Data31, Data32, Data33, ContentTuningId, AIName, ScriptName FROM gameobject_template"); if (result.IsEmpty()) { @@ -3726,7 +3726,7 @@ namespace Game got.Raw.data[x] = result.Read(8 + x); } - got.RequiredLevel = result.Read(42); + got.ContentTuningId = result.Read(42); got.AIName = result.Read(43); got.ScriptId = Global.ObjectMgr.GetScriptId(result.Read(44)); diff --git a/Source/Game/Networking/Packets/QueryPackets.cs b/Source/Game/Networking/Packets/QueryPackets.cs index d4947540d..07c3b9fa1 100644 --- a/Source/Game/Networking/Packets/QueryPackets.cs +++ b/Source/Game/Networking/Packets/QueryPackets.cs @@ -297,8 +297,7 @@ namespace Game.Networking.Packets foreach (uint questItem in Stats.QuestItems) statsData.WriteUInt32(questItem); - statsData.WriteUInt32(Stats.RequiredLevel); - + statsData.WriteUInt32(Stats.ContentTuningId); } _worldPacket.WriteUInt32(statsData.GetSize()); @@ -745,7 +744,7 @@ namespace Game.Networking.Packets public int[] Data = new int[SharedConst.MaxGOData]; public float Size; public List QuestItems = new List(); - public uint RequiredLevel; + public uint ContentTuningId; } class QuestCompletionNPC diff --git a/sql/updates/world/master/2020_11_05_00_world.sql b/sql/updates/world/master/2020_11_05_00_world.sql new file mode 100644 index 000000000..dcdfdbaeb --- /dev/null +++ b/sql/updates/world/master/2020_11_05_00_world.sql @@ -0,0 +1,80 @@ +ALTER TABLE `creature_template` DROP `FadeRegionRadius`; + +ALTER TABLE `playerchoice_response` + ADD `ResponseIdentifier` smallint(5) unsigned NOT NULL AFTER `ResponseId`, + ADD `UiTextureKitID` int(11) NOT NULL DEFAULT '0' AFTER `GroupID`; + +-- +-- Table structure for table `playerchoice_response_reward_item_choice` +-- +DROP TABLE IF EXISTS `playerchoice_response_reward_item_choice`; +CREATE TABLE `playerchoice_response_reward_item_choice` ( + `ChoiceId` int(11) NOT NULL, + `ResponseId` int(11) NOT NULL, + `Index` int(10) unsigned NOT NULL, + `ItemId` int(10) unsigned NOT NULL DEFAULT '0', + `BonusListIDs` text, + `Quantity` int(11) NOT NULL DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ChoiceId`,`ResponseId`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Table structure for table `playerchoice_response_maw_power` +-- +DROP TABLE IF EXISTS `playerchoice_response_maw_power`; +CREATE TABLE `playerchoice_response_maw_power` ( + `ChoiceId` int(11) NOT NULL, + `ResponseId` int(11) NOT NULL, + `TypeArtFileID` int(11) DEFAULT '0', + `Rarity` int(11) DEFAULT '0', + `RarityColor` int(10) unsigned DEFAULT '0', + `SpellID` int(11) DEFAULT '0', + `MaxStacks` int(11) DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ChoiceId`,`ResponseId`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +ALTER TABLE `quest_poi` ADD `NavigationPlayerConditionID` int(11) NOT NULL DEFAULT '0' AFTER `PlayerConditionID`; + +ALTER TABLE `quest_poi_points` ADD `Z` int(11) NOT NULL DEFAULT '0' AFTER `Y`; + +-- +-- Table structure for table `quest_reward_choice_items` +-- +DROP TABLE IF EXISTS `quest_reward_choice_items`; +CREATE TABLE `quest_reward_choice_items` ( + `QuestID` int(10) unsigned NOT NULL, + `Type1` tinyint(3) unsigned DEFAULT '0', + `Type2` tinyint(3) unsigned DEFAULT '0', + `Type3` tinyint(3) unsigned DEFAULT '0', + `Type4` tinyint(3) unsigned DEFAULT '0', + `Type5` tinyint(3) unsigned DEFAULT '0', + `Type6` tinyint(3) unsigned DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`QuestID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Table structure for table `quest_reward_display_spell` +-- +DROP TABLE IF EXISTS `quest_reward_display_spell`; +CREATE TABLE `quest_reward_display_spell` ( + `QuestID` int(10) unsigned NOT NULL, + `Idx` int(10) unsigned NOT NULL, + `SpellID` int(10) unsigned DEFAULT '0', + `PlayerConditionID` int(10) unsigned DEFAULT '0', + `VerifiedBuild` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`QuestID`,`Idx`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +ALTER TABLE `quest_template` + ADD `ContentTuningID` int(10) unsigned NOT NULL DEFAULT '0' AFTER `QuestPackageID`, + DROP `QuestLevel`, + DROP `ScalingFactionGroup`, + DROP `MaxScalingLevel`, + DROP `MinLevel`; + +ALTER TABLE `scenario_poi` ADD `NavigationPlayerConditionID` int(11) NOT NULL DEFAULT '0' AFTER `PlayerConditionID`; + +ALTER TABLE `scenario_poi_points` ADD `Z` int(11) NOT NULL DEFAULT '0' AFTER `Y`; diff --git a/sql/updates/world/master/2020_12_09_00_world.sql b/sql/updates/world/master/2020_12_09_00_world.sql new file mode 100644 index 000000000..f49fc7584 --- /dev/null +++ b/sql/updates/world/master/2020_12_09_00_world.sql @@ -0,0 +1,2 @@ +ALTER TABLE `gameobject_template` ADD `ContentTuningId` int(11) NOT NULL DEFAULT '0' AFTER `Data33`; +ALTER TABLE `gameobject_template` DROP `RequiredLevel`;