diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-12-09 00:03:10 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-12-09 00:03:10 +0100 |
| commit | 364f6eec9a4d6d044666a172a2823161e0e3a418 (patch) | |
| tree | 9793077f5f88cf79b61884cd288fe170db3f57bf | |
| parent | 0beaee407e04ae9769d9cd9d3928a67ab750d54b (diff) | |
Core/GameObjects: Updated gameobject template structure to 9.0
| -rw-r--r-- | sql/updates/world/master/2020_12_09_00_world.sql | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 15 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObjectData.h | 168 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 9 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QueryPackets.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QueryPackets.h | 2 |
7 files changed, 150 insertions, 56 deletions
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 00000000000..f49fc758417 --- /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`; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index cc6e2bde27b..9247c0eb731 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -90,7 +90,7 @@ WorldPacket GameObjectTemplate::BuildQueryData(LocaleConstant loc) const stats.QuestItems.push_back(item); memcpy(stats.Data, raw.data, MAX_GAMEOBJECT_DATA * sizeof(int32)); - stats.RequiredLevel = RequiredLevel; + stats.ContentTuningId = ContentTuningId; return *queryTemp.Write(); } @@ -1898,12 +1898,13 @@ void GameObject::Use(Unit* user) return; //required lvl checks! - uint8 level = player->getLevel(); - if (level < info->meetingStone.minLevel) - return; - level = targetPlayer->getLevel(); - if (level < info->meetingStone.minLevel) - return; + if (Optional<ContentTuningLevels> userLevels = sDB2Manager.GetContentTuningData(info->ContentTuningId, player->m_playerData->CtrOptions->ContentTuningConditionMask)) + if (player->getLevel() < userLevels->MaxLevel) + return; + + if (Optional<ContentTuningLevels> targetLevels = sDB2Manager.GetContentTuningData(info->ContentTuningId, targetPlayer->m_playerData->CtrOptions->ContentTuningConditionMask)) + if (targetPlayer->getLevel() < targetLevels->MaxLevel) + return; if (info->entry == 194097) spellId = 61994; // Ritual of Summoning diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index 9b382bc84ab..fa6627cd2db 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -37,7 +37,7 @@ struct GameObjectTemplate std::string castBarCaption; std::string unk1; float size; - int32 RequiredLevel; + int32 ContentTuningId; union { // 0 GAMEOBJECT_TYPE_DOOR @@ -55,6 +55,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false uint32 InfiniteAOI; // 10 Infinite AOI, enum { false, true, }; Default: false uint32 NotLOSBlocking; // 11 Not LOS Blocking, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } door; // 1 GAMEOBJECT_TYPE_BUTTON struct @@ -69,6 +70,7 @@ struct GameObjectTemplate uint32 closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0 uint32 requireLOS; // 8 require LOS, enum { false, true, }; Default: false uint32 conditionID1; // 9 conditionID1, References: PlayerCondition, NoValue = 0 + uint32 InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } button; // 2 GAMEOBJECT_TYPE_QUESTGIVER struct @@ -85,6 +87,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false uint32 conditionID1; // 10 conditionID1, References: PlayerCondition, NoValue = 0 uint32 NeverUsableWhileMounted; // 11 Never Usable While Mounted, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } questgiver; // 3 GAMEOBJECT_TYPE_CHEST struct @@ -98,7 +101,7 @@ struct GameObjectTemplate uint32 triggeredEvent; // 6 triggeredEvent, References: GameEvents, NoValue = 0 uint32 linkedTrap; // 7 linkedTrap, References: GameObjects, NoValue = 0 uint32 questID; // 8 questID, References: QuestV2, NoValue = 0 - uint32 level; // 9 level, int, Min value: 0, Max value: 65535, Default value: 0 + uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 requireLOS; // 10 require LOS, enum { false, true, }; Default: false uint32 leaveLoot; // 11 leaveLoot, enum { false, true, }; Default: false uint32 notInCombat; // 12 notInCombat, enum { false, true, }; Default: false @@ -107,9 +110,9 @@ struct GameObjectTemplate uint32 usegrouplootrules; // 15 use group loot rules, enum { false, true, }; Default: false uint32 floatingTooltip; // 16 floatingTooltip, enum { false, true, }; Default: false uint32 conditionID1; // 17 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 XPLevelRange; // 18 XP Level Range, References: ContentTuning, NoValue = 0 + int32 Unused; // 18 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 uint32 xpDifficulty; // 19 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp - uint32 lootLevel; // 20 lootLevel, int, Min value: 0, Max value: 123, Default value: 0 + uint32 Unused2; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0 uint32 GroupXP; // 21 Group XP, enum { false, true, }; Default: false uint32 DamageImmuneOK; // 22 Damage Immune OK, enum { false, true, }; Default: false uint32 trivialSkillLow; // 23 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0 @@ -127,6 +130,7 @@ struct GameObjectTemplate // 4 GAMEOBJECT_TYPE_BINDER struct { + uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } binder; // 5 GAMEOBJECT_TYPE_GENERIC struct @@ -140,12 +144,13 @@ struct GameObjectTemplate uint32 conditionID1; // 6 conditionID1, References: PlayerCondition, NoValue = 0 uint32 LargeAOI; // 7 Large AOI, enum { false, true, }; Default: false uint32 UseGarrisonOwnerGuildColors; // 8 Use Garrison Owner Guild Colors, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } generic; // 6 GAMEOBJECT_TYPE_TRAP struct { uint32 open; // 0 open, References: Lock_, NoValue = 0 - uint32 level; // 1 level, int, Min value: 0, Max value: 65535, Default value: 0 + uint32 Unused; // 1 Unused, int, Min value: 0, Max value: 65535, Default value: 0 uint32 radius; // 2 radius, int, Min value: 0, Max value: 100, Default value: 0 uint32 spell; // 3 spell, References: Spell, NoValue = 0 uint32 charges; // 4 charges, int, Min value: 0, Max value: 65535, Default value: 1 @@ -165,6 +170,7 @@ struct GameObjectTemplate uint32 requireLOS; // 18 require LOS, enum { false, true, }; Default: false uint32 TriggerCondition; // 19 Trigger Condition, References: PlayerCondition, NoValue = 0 uint32 Checkallunits; // 20 Check all units (spawned traps only check players), enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 21 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } trap; // 7 GAMEOBJECT_TYPE_CHAIR struct @@ -174,6 +180,7 @@ struct GameObjectTemplate uint32 onlyCreatorUse; // 2 onlyCreatorUse, enum { false, true, }; Default: false uint32 triggeredEvent; // 3 triggeredEvent, References: GameEvents, NoValue = 0 uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 + uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } chair; // 8 GAMEOBJECT_TYPE_SPELL_FOCUS struct @@ -187,6 +194,7 @@ struct GameObjectTemplate uint32 floatingTooltip; // 6 floatingTooltip, enum { false, true, }; Default: false uint32 floatOnWater; // 7 floatOnWater, enum { false, true, }; Default: false uint32 conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0 + uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } spellFocus; // 9 GAMEOBJECT_TYPE_TEXT struct @@ -197,6 +205,7 @@ struct GameObjectTemplate uint32 allowMounted; // 3 allowMounted, enum { false, true, }; Default: false uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 uint32 NeverUsableWhileMounted; // 5 Never Usable While Mounted, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } text; // 10 GAMEOBJECT_TYPE_GOOBER struct @@ -233,6 +242,8 @@ struct GameObjectTemplate uint32 SortFarZ; // 29 Sort Far Z, enum { false, true, }; Default: false uint32 SyncAnimationtoObjectLifetime; // 30 Sync Animation to Object Lifetime (global track only), enum { false, true, }; Default: false uint32 NoFuzzyHit; // 31 No Fuzzy Hit, enum { false, true, }; Default: false + uint32 LargeAOI; // 32 Large AOI, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 33 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } goober; // 11 GAMEOBJECT_TYPE_TRANSPORT struct @@ -261,6 +272,7 @@ struct GameObjectTemplate uint32 Reached10thfloor; // 21 Reached 10th floor, References: GameEvents, NoValue = 0 uint32 onlychargeheightcheck; // 22 only charge height check. (yards), int, Min value: 0, Max value: 65535, Default value: 0 uint32 onlychargetimecheck; // 23 only charge time check, int, Min value: 0, Max value: 65535, Default value: 0 + uint32 InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } transport; // 12 GAMEOBJECT_TYPE_AREADAMAGE struct @@ -273,6 +285,7 @@ struct GameObjectTemplate uint32 autoClose; // 5 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 openTextID; // 6 openTextID, References: BroadcastText, NoValue = 0 uint32 closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0 + uint32 InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } areaDamage; // 13 GAMEOBJECT_TYPE_CAMERA struct @@ -282,6 +295,7 @@ struct GameObjectTemplate uint32 eventID; // 2 eventID, References: GameEvents, NoValue = 0 uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 + uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } camera; // 14 GAMEOBJECT_TYPE_MAP_OBJECT struct @@ -301,14 +315,18 @@ struct GameObjectTemplate uint32 allowstopping; // 8 allow stopping, enum { false, true, }; Default: false uint32 InitStopped; // 9 Init Stopped, enum { false, true, }; Default: false uint32 TrueInfiniteAOI; // 10 True Infinite AOI (programmer only!), enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 Allowareaexplorationwhileonthistransport;// 12 Allow area exploration while on this transport, enum { false, true, }; Default: false } moTransport; // 16 GAMEOBJECT_TYPE_DUEL_ARBITER struct { + uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } duelFlag; // 17 GAMEOBJECT_TYPE_FISHINGNODE struct { + uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } fishingNode; // 18 GAMEOBJECT_TYPE_RITUAL struct @@ -322,11 +340,13 @@ struct GameObjectTemplate uint32 castersGrouped; // 6 castersGrouped, enum { false, true, }; Default: true uint32 ritualNoTargetCheck; // 7 ritualNoTargetCheck, enum { false, true, }; Default: true uint32 conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0 + uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } ritual; // 19 GAMEOBJECT_TYPE_MAILBOX struct { uint32 conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0 + uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } mailbox; // 20 GAMEOBJECT_TYPE_DO_NOT_USE struct @@ -338,6 +358,7 @@ struct GameObjectTemplate uint32 creatureID; // 0 creatureID, References: Creature, NoValue = 0 uint32 charges; // 1 charges, int, Min value: 0, Max value: 65535, Default value: 1 uint32 Preferonlyifinlineofsight; // 2 Prefer only if in line of sight (expensive), enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } guardPost; // 22 GAMEOBJECT_TYPE_SPELLCASTER struct @@ -350,13 +371,15 @@ struct GameObjectTemplate uint32 conditionID1; // 5 conditionID1, References: PlayerCondition, NoValue = 0 uint32 playerCast; // 6 playerCast, enum { false, true, }; Default: false uint32 NeverUsableWhileMounted; // 7 Never Usable While Mounted, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } spellCaster; // 23 GAMEOBJECT_TYPE_MEETINGSTONE struct { - uint32 minLevel; // 0 minLevel, int, Min value: 0, Max value: 65535, Default value: 1 - uint32 maxLevel; // 1 maxLevel, int, Min value: 1, Max value: 65535, Default value: 60 + uint32 Unused; // 0 Unused, int, Min value: 0, Max value: 65535, Default value: 1 + uint32 Unused2; // 1 Unused, int, Min value: 1, Max value: 65535, Default value: 60 uint32 areaID; // 2 areaID, References: AreaTable, NoValue = 0 + uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } meetingStone; // 24 GAMEOBJECT_TYPE_FLAGSTAND struct @@ -374,6 +397,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 10 Gigantic AOI, enum { false, true, }; Default: false uint32 InfiniteAOI; // 11 Infinite AOI, enum { false, true, }; Default: false uint32 cooldown; // 12 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000 + uint32 InteractRadiusOverride; // 13 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } flagStand; // 25 GAMEOBJECT_TYPE_FISHINGHOLE struct @@ -383,6 +407,7 @@ struct GameObjectTemplate uint32 minRestock; // 2 minRestock, int, Min value: 0, Max value: 65535, Default value: 0 uint32 maxRestock; // 3 maxRestock, int, Min value: 0, Max value: 65535, Default value: 0 uint32 open; // 4 open, References: Lock_, NoValue = 0 + uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } fishingHole; // 26 GAMEOBJECT_TYPE_FLAGDROP struct @@ -397,6 +422,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 7 Gigantic AOI, enum { false, true, }; Default: false uint32 InfiniteAOI; // 8 Infinite AOI, enum { false, true, }; Default: false uint32 cooldown; // 9 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000 + uint32 InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } flagDrop; // 27 GAMEOBJECT_TYPE_MINI_GAME struct @@ -437,6 +463,7 @@ struct GameObjectTemplate uint32 UncontestedTime; // 25 Uncontested Time, int, Min value: 0, Max value: 65535, Default value: 0 uint32 FrequentHeartbeat; // 26 Frequent Heartbeat, enum { false, true, }; Default: false uint32 EnablingWorldStateExpression; // 27 Enabling World State Expression, References: WorldStateExpression, NoValue = 0 + uint32 InteractRadiusOverride; // 28 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } controlZone; // 30 GAMEOBJECT_TYPE_AURA_GENERATOR struct @@ -448,6 +475,7 @@ struct GameObjectTemplate uint32 auraID2; // 4 auraID2, References: Spell, NoValue = 0 uint32 conditionID2; // 5 conditionID2, References: PlayerCondition, NoValue = 0 uint32 serverOnly; // 6 serverOnly, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } auraGenerator; // 31 GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY struct @@ -463,6 +491,7 @@ struct GameObjectTemplate uint32 LargeAOI; // 8 Large AOI, enum { false, true, }; Default: false uint32 GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false uint32 Legacy; // 10 Legacy, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } dungeonDifficulty; // 32 GAMEOBJECT_TYPE_BARBER_CHAIR struct @@ -470,6 +499,7 @@ struct GameObjectTemplate uint32 chairheight; // 0 chairheight, int, Min value: 0, Max value: 2, Default value: 1 int32 HeightOffset; // 1 Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0 uint32 SitAnimKit; // 2 Sit Anim Kit, References: AnimKit, NoValue = 0 + uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } barberChair; // 33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING struct @@ -501,11 +531,13 @@ struct GameObjectTemplate int32 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 int32 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 int32 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 + uint32 InteractRadiusOverride; // 27 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } destructibleBuilding; // 34 GAMEOBJECT_TYPE_GUILD_BANK struct { uint32 conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0 + uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } guildbank; // 35 GAMEOBJECT_TYPE_TRAPDOOR struct @@ -518,6 +550,7 @@ struct GameObjectTemplate uint32 GiganticAOI; // 5 Gigantic AOI, enum { false, true, }; Default: false uint32 InfiniteAOI; // 6 Infinite AOI, enum { false, true, }; Default: false uint32 DoorisOpaque; // 7 Door is Opaque (Disable portal on close), enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } trapdoor; // 36 GAMEOBJECT_TYPE_NEW_FLAG struct @@ -536,23 +569,27 @@ struct GameObjectTemplate uint32 worldState1; // 11 worldState1, References: WorldState, NoValue = 0 uint32 ReturnonDefenderInteract; // 12 Return on Defender Interact, enum { false, true, }; Default: false uint32 SpawnVignette; // 13 Spawn Vignette, References: vignette, NoValue = 0 + uint32 InteractRadiusOverride; // 14 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } newflag; // 37 GAMEOBJECT_TYPE_NEW_FLAG_DROP struct { uint32 open; // 0 open, References: Lock_, NoValue = 0 uint32 SpawnVignette; // 1 Spawn Vignette, References: vignette, NoValue = 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } newflagdrop; // 38 GAMEOBJECT_TYPE_GARRISON_BUILDING struct { int32 SpawnMap; // 0 Spawn Map, References: Map, NoValue = -1 + uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonBuilding; // 39 GAMEOBJECT_TYPE_GARRISON_PLOT struct { uint32 PlotInstance; // 0 Plot Instance, References: GarrPlotInstance, NoValue = 0 int32 SpawnMap; // 1 Spawn Map, References: Map, NoValue = -1 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonPlot; // 40 GAMEOBJECT_TYPE_CLIENT_CREATURE struct @@ -592,6 +629,7 @@ struct GameObjectTemplate uint32 SpellVisual4; // 20 Spell Visual 4, References: SpellVisual, NoValue = 0 uint32 SpellVisual5; // 21 Spell Visual 5, References: SpellVisual, NoValue = 0 uint32 SpawnVignette; // 22 Spawn Vignette, References: vignette, NoValue = 0 + uint32 InteractRadiusOverride; // 23 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } capturePoint; // 43 GAMEOBJECT_TYPE_PHASEABLE_MO struct @@ -600,12 +638,14 @@ struct GameObjectTemplate int32 AreaNameSet; // 1 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 uint32 DoodadSetA; // 2 Doodad Set A, int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 DoodadSetB; // 3 Doodad Set B, int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } phaseableMO; // 44 GAMEOBJECT_TYPE_GARRISON_MONUMENT struct { uint32 TrophyTypeID; // 0 Trophy Type ID, References: TrophyType, NoValue = 0 uint32 TrophyInstanceID; // 1 Trophy Instance ID, References: TrophyInstance, NoValue = 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonMonument; // 45 GAMEOBJECT_TYPE_GARRISON_SHIPMENT struct @@ -613,11 +653,13 @@ struct GameObjectTemplate uint32 ShipmentContainer; // 0 Shipment Container, References: CharShipmentContainer, NoValue = 0 uint32 GiganticAOI; // 1 Gigantic AOI, enum { false, true, }; Default: false uint32 LargeAOI; // 2 Large AOI, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonShipment; // 46 GAMEOBJECT_TYPE_GARRISON_MONUMENT_PLAQUE struct { uint32 TrophyInstanceID; // 0 Trophy Instance ID, References: TrophyInstance, NoValue = 0 + uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } garrisonMonumentPlaque; // 47 GAMEOBJECT_TYPE_ITEM_FORGE struct @@ -627,7 +669,9 @@ struct GameObjectTemplate uint32 IgnoreBoundingBox; // 2 Ignore Bounding Box, enum { false, true, }; Default: false uint32 CameraMode; // 3 Camera Mode, References: CameraMode, NoValue = 0 uint32 FadeRegionRadius; // 4 Fade Region Radius, int, Min value: 0, Max value: 2147483647, Default value: 0 - uint32 ForgeType; // 5 Forge Type, enum { Artifact Forge, Relic Forge, Heart Forge, }; Default: Relic Forge + uint32 ForgeType; // 5 Forge Type, enum { Artifact Forge, Relic Forge, Heart Forge, Soulbind Forge, Anima Reservoir, }; Default: Relic Forge + uint32 InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 GarrTalentTreeID; // 7 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0 } itemForge; // 48 GAMEOBJECT_TYPE_UI_LINK struct @@ -637,17 +681,19 @@ struct GameObjectTemplate uint32 GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false uint32 spellFocusType; // 3 spellFocusType, References: SpellFocusObject, NoValue = 0 uint32 radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10 + uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } UILink; // 49 GAMEOBJECT_TYPE_KEYSTONE_RECEPTACLE struct { + uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } KeystoneReceptacle; // 50 GAMEOBJECT_TYPE_GATHERING_NODE struct { uint32 open; // 0 open, References: Lock_, NoValue = 0 uint32 chestLoot; // 1 chestLoot, References: Treasure, NoValue = 0 - uint32 level; // 2 level, int, Min value: 0, Max value: 65535, Default value: 0 + uint32 Unused; // 2 Unused, int, Min value: 0, Max value: 65535, Default value: 0 uint32 notInCombat; // 3 notInCombat, enum { false, true, }; Default: false uint32 trivialSkillLow; // 4 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0 uint32 trivialSkillHigh; // 5 trivialSkillHigh, int, Min value: 0, Max value: 65535, Default value: 0 @@ -657,7 +703,7 @@ struct GameObjectTemplate uint32 openTextID; // 9 openTextID, References: BroadcastText, NoValue = 0 uint32 floatingTooltip; // 10 floatingTooltip, enum { false, true, }; Default: false uint32 conditionID1; // 11 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 XPLevelRange; // 12 XP Level Range, References: ContentTuning, NoValue = 0 + int32 Unused2; // 12 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 uint32 xpDifficulty; // 13 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp uint32 spell; // 14 spell, References: Spell, NoValue = 0 uint32 GiganticAOI; // 15 Gigantic AOI, enum { false, true, }; Default: false @@ -669,6 +715,7 @@ struct GameObjectTemplate uint32 PlayOpenAnimationonOpening; // 21 Play Open Animation on Opening, enum { false, true, }; Default: false uint32 turnpersonallootsecurityoff; // 22 turn personal loot security off, enum { false, true, }; Default: false uint32 ClearObjectVignetteonOpening; // 23 Clear Object Vignette on Opening, enum { false, true, }; Default: false + uint32 InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } gatheringNode; // 51 GAMEOBJECT_TYPE_CHALLENGE_MODE_REWARD struct @@ -677,6 +724,7 @@ struct GameObjectTemplate uint32 WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 uint32 open; // 2 open, References: Lock_, NoValue = 0 uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 + uint32 InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } challengeModeReward; // 52 GAMEOBJECT_TYPE_MULTI struct @@ -698,6 +746,7 @@ struct GameObjectTemplate uint32 DoodadSetC; // 3 Doodad Set C, int, Min value: 0, Max value: 2147483647, Default value: 0 int32 SpawnMap; // 4 Spawn Map, References: Map, NoValue = -1 int32 AreaNameSet; // 5 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + uint32 InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } siegeableMO; // 55 GAMEOBJECT_TYPE_PVP_REWARD struct @@ -706,15 +755,50 @@ struct GameObjectTemplate uint32 WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 uint32 open; // 2 open, References: Lock_, NoValue = 0 uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 + uint32 InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 } pvpReward; - // 56 GAMEOBJECT_TYPE_FUTURE_PATCH_1 + // 56 GAMEOBJECT_TYPE_PLAYER_CHOICE_CHEST struct { - } futurePatch1; - // 57 GAMEOBJECT_TYPE_FUTURE_PATCH_2 + uint32 spell; // 0 spell, References: Spell, NoValue = 0 + uint32 WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 + uint32 GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false + uint32 PlayerChoice; // 3 Player Choice, References: PlayerChoice, NoValue = 0 + uint32 MawPowerFilter; // 4 Maw Power Filter, References: MawPowerFilter, NoValue = 0 + uint32 Script; // 5 Script, References: SpellScript, NoValue = 0 + uint32 SpellVisual1; // 6 Spell Visual 1, References: SpellVisual, NoValue = 0 + uint32 InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 Dontupdateplayerinteractability; // 8 Don't update player interactability, enum { false, true, }; Default: false + } playerChoiceChest; + // 57 GAMEOBJECT_TYPE_LEGENDARY_FORGE + struct + { + uint32 PlayerChoice; // 0 Player Choice, References: PlayerChoice, NoValue = 0 + uint32 CustomItemBonusFilter; // 1 Custom Item Bonus Filter, References: CustomItemBonusFilter, NoValue = 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } legendaryForge; + // 58 GAMEOBJECT_TYPE_GARR_TALENT_TREE + struct + { + uint32 UiMapID; // 0 Ui Map ID, References: UiMap, NoValue = 0 + uint32 GarrTalentTreeID; // 1 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } garrTalentTree; + // 59 GAMEOBJECT_TYPE_WEEKLY_REWARD_CHEST + struct + { + uint32 WhenAvailable; // 0 When Available, References: GameObjectDisplayInfo, NoValue = 0 + uint32 open; // 1 open, References: Lock_, NoValue = 0 + uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + } weeklyRewardChest; + // 60 GAMEOBJECT_TYPE_CLIENT_MODEL struct { - } futurePatch2; + uint32 LargeAOI; // 0 Large AOI, enum { false, true, }; Default: false + uint32 GiganticAOI; // 1 Gigantic AOI, enum { false, true, }; Default: false + uint32 InfiniteAOI; // 2 Infinite AOI, enum { false, true, }; Default: false + uint32 TrueInfiniteAOI; // 3 True Infinite AOI (programmer only!), enum { false, true, }; Default: false + } clientModel; struct { uint32 data[MAX_GAMEOBJECT_DATA]; @@ -753,23 +837,24 @@ struct GameObjectTemplate { switch (type) { - case GAMEOBJECT_TYPE_DOOR: return door.open; - case GAMEOBJECT_TYPE_BUTTON: return button.open; - case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.open; - case GAMEOBJECT_TYPE_CHEST: return chest.open; - case GAMEOBJECT_TYPE_TRAP: return trap.open; - case GAMEOBJECT_TYPE_GOOBER: return goober.open; - case GAMEOBJECT_TYPE_AREADAMAGE: return areaDamage.open; - case GAMEOBJECT_TYPE_CAMERA: return camera.open; - case GAMEOBJECT_TYPE_FLAGSTAND: return flagStand.open; - case GAMEOBJECT_TYPE_FISHINGHOLE: return fishingHole.open; - case GAMEOBJECT_TYPE_FLAGDROP: return flagDrop.open; - case GAMEOBJECT_TYPE_NEW_FLAG: return newflag.open; - case GAMEOBJECT_TYPE_NEW_FLAG_DROP: return newflagdrop.open; - case GAMEOBJECT_TYPE_CAPTURE_POINT: return capturePoint.open; - case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.open; + case GAMEOBJECT_TYPE_DOOR: return door.open; + case GAMEOBJECT_TYPE_BUTTON: return button.open; + case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.open; + case GAMEOBJECT_TYPE_CHEST: return chest.open; + case GAMEOBJECT_TYPE_TRAP: return trap.open; + case GAMEOBJECT_TYPE_GOOBER: return goober.open; + case GAMEOBJECT_TYPE_AREADAMAGE: return areaDamage.open; + case GAMEOBJECT_TYPE_CAMERA: return camera.open; + case GAMEOBJECT_TYPE_FLAGSTAND: return flagStand.open; + case GAMEOBJECT_TYPE_FISHINGHOLE: return fishingHole.open; + case GAMEOBJECT_TYPE_FLAGDROP: return flagDrop.open; + case GAMEOBJECT_TYPE_NEW_FLAG: return newflag.open; + case GAMEOBJECT_TYPE_NEW_FLAG_DROP: return newflagdrop.open; + case GAMEOBJECT_TYPE_CAPTURE_POINT: return capturePoint.open; + case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.open; case GAMEOBJECT_TYPE_CHALLENGE_MODE_REWARD: return challengeModeReward.open; - case GAMEOBJECT_TYPE_PVP_REWARD: return pvpReward.open; + case GAMEOBJECT_TYPE_PVP_REWARD: return pvpReward.open; + case GAMEOBJECT_TYPE_WEEKLY_REWARD_CHEST: return weeklyRewardChest.open; default: return 0; } } @@ -814,19 +899,17 @@ struct GameObjectTemplate uint32 GetAutoCloseTime() const { - uint32 autoCloseTime = 0; switch (type) { - case GAMEOBJECT_TYPE_DOOR: autoCloseTime = door.autoClose; break; - case GAMEOBJECT_TYPE_BUTTON: autoCloseTime = button.autoClose; break; - case GAMEOBJECT_TYPE_TRAP: autoCloseTime = trap.autoClose; break; - case GAMEOBJECT_TYPE_GOOBER: autoCloseTime = goober.autoClose; break; - case GAMEOBJECT_TYPE_TRANSPORT: autoCloseTime = transport.autoClose; break; - case GAMEOBJECT_TYPE_AREADAMAGE: autoCloseTime = areaDamage.autoClose; break; - case GAMEOBJECT_TYPE_TRAPDOOR: autoCloseTime = trapdoor.autoClose; break; - default: break; + case GAMEOBJECT_TYPE_DOOR: return door.autoClose; + case GAMEOBJECT_TYPE_BUTTON: return button.autoClose; + case GAMEOBJECT_TYPE_TRAP: return trap.autoClose; + case GAMEOBJECT_TYPE_GOOBER: return goober.autoClose; + case GAMEOBJECT_TYPE_TRANSPORT: return transport.autoClose; + case GAMEOBJECT_TYPE_AREADAMAGE: return areaDamage.autoClose; + case GAMEOBJECT_TYPE_TRAPDOOR: return trapdoor.autoClose; + default: return 0; } - return autoCloseTime; // prior to 3.0.3, conversion was / 0x10000; } uint32 GetLootId() const @@ -881,6 +964,7 @@ struct GameObjectTemplate case GAMEOBJECT_TYPE_FLAGDROP: return flagDrop.InfiniteAOI != 0; case GAMEOBJECT_TYPE_TRAPDOOR: return trapdoor.InfiniteAOI != 0; case GAMEOBJECT_TYPE_NEW_FLAG: return newflag.InfiniteAOI != 0; + case GAMEOBJECT_TYPE_CLIENT_MODEL: return newflag.InfiniteAOI != 0; default: return false; } } @@ -908,6 +992,8 @@ struct GameObjectTemplate case GAMEOBJECT_TYPE_GARRISON_SHIPMENT: return garrisonShipment.GiganticAOI != 0; case GAMEOBJECT_TYPE_UI_LINK: return UILink.GiganticAOI != 0; case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.GiganticAOI != 0; + case GAMEOBJECT_TYPE_PLAYER_CHOICE_CHEST: return gatheringNode.GiganticAOI != 0; + case GAMEOBJECT_TYPE_CLIENT_MODEL: return gatheringNode.GiganticAOI != 0; default: return false; } } @@ -918,10 +1004,12 @@ struct GameObjectTemplate { case GAMEOBJECT_TYPE_CHEST: return chest.LargeAOI != 0; case GAMEOBJECT_TYPE_GENERIC: return generic.LargeAOI != 0; + case GAMEOBJECT_TYPE_GOOBER: return goober.LargeAOI != 0; case GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY: return dungeonDifficulty.LargeAOI != 0; case GAMEOBJECT_TYPE_GARRISON_SHIPMENT: return garrisonShipment.LargeAOI != 0; case GAMEOBJECT_TYPE_ITEM_FORGE: return itemForge.LargeAOI != 0; case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.LargeAOI != 0; + case GAMEOBJECT_TYPE_CLIENT_MODEL: return clientModel.LargeAOI != 0; default: return false; } } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 2b5be2e3fd5..c5f4f51599a 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7235,7 +7235,7 @@ void ObjectMgr::LoadGameObjectTemplate() go.size = db2go->Scale; memset(go.raw.data, 0, sizeof(go.raw.data)); memcpy(go.raw.data, db2go->PropValue, std::min(sizeof(db2go->PropValue), sizeof(go.raw.data))); - go.RequiredLevel = 0; + go.ContentTuningId = 0; go.ScriptId = 0; } @@ -7245,8 +7245,8 @@ void ObjectMgr::LoadGameObjectTemplate() "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 43 44 - "Data29, Data30, Data31, Data32, Data33, RequiredLevel, AIName, ScriptName " + // 37 38 39 40 41 42 43 44 + "Data29, Data30, Data31, Data32, Data33, ContentTuningId, AIName, ScriptName " "FROM gameobject_template"); if (!result) @@ -7276,7 +7276,7 @@ void ObjectMgr::LoadGameObjectTemplate() for (uint8 i = 0; i < MAX_GAMEOBJECT_DATA; ++i) got.raw.data[i] = fields[8 + i].GetUInt32(); - got.RequiredLevel = fields[42].GetInt32(); + got.ContentTuningId = fields[42].GetInt32(); got.AIName = fields[43].GetString(); got.ScriptId = GetScriptId(fields[44].GetString()); diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index a80b610f59c..621100c4033 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -2621,11 +2621,14 @@ enum GameobjectTypes : uint8 GAMEOBJECT_TYPE_SIEGEABLE_MULTI = 53, GAMEOBJECT_TYPE_SIEGEABLE_MO = 54, GAMEOBJECT_TYPE_PVP_REWARD = 55, - GAMEOBJECT_TYPE_FUTURE_PATCH_1 = 56, - GAMEOBJECT_TYPE_FUTURE_PATCH_2 = 57 + GAMEOBJECT_TYPE_PLAYER_CHOICE_CHEST = 56, + GAMEOBJECT_TYPE_LEGENDARY_FORGE = 57, + GAMEOBJECT_TYPE_GARR_TALENT_TREE = 58, + GAMEOBJECT_TYPE_WEEKLY_REWARD_CHEST = 59, + GAMEOBJECT_TYPE_CLIENT_MODEL = 60 }; -#define MAX_GAMEOBJECT_TYPE 58 // sending to client this or greater value can crash client. +#define MAX_GAMEOBJECT_TYPE 61 // sending to client this or greater value can crash client. #define MAX_GAMEOBJECT_DATA 34 // Max number of uint32 vars in gameobject_template data field enum GameObjectFlags diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index d1a113b9ed6..96e29b1477d 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -292,7 +292,7 @@ WorldPacket const* WorldPackets::Query::QueryGameObjectResponse::Write() if (!Stats.QuestItems.empty()) statsData.append(Stats.QuestItems.data(), Stats.QuestItems.size()); - statsData << int32(Stats.RequiredLevel); + statsData << int32(Stats.ContentTuningId); } _worldPacket << uint32(statsData.size()); diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index b7279d18964..5cca2e916c5 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -227,7 +227,7 @@ namespace WorldPackets uint32 Data[MAX_GAMEOBJECT_DATA]; float Size = 0.0f; std::vector<int32> QuestItems; - uint32 RequiredLevel = 0; + uint32 ContentTuningId = 0; }; class QueryGameObjectResponse final : public ServerPacket |
