TrinityCore
Loading...
Searching...
No Matches
GameObjectData.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef GameObjectData_h__
19#define GameObjectData_h__
20
21#include "Common.h"
22#include "SharedDefines.h"
23#include "SpawnData.h"
24#include "WorldPacket.h"
25
26#include <array>
27#include <string>
28#include <vector>
29
30#define MAX_GAMEOBJECT_QUEST_ITEMS 6
31
32// from `gameobject_template`
34{
38 std::string name;
39 std::string IconName;
40 std::string castBarCaption;
41 std::string unk1;
42 float size;
43 union // different GO types have different data field
44 {
45 //0 GAMEOBJECT_TYPE_DOOR
46 struct
47 {
48 uint32 startOpen; //0 used client side to determine GO_ACTIVATED means open/closed
49 uint32 lockId; //1 -> Lock.dbc
50 uint32 autoCloseTime; //2 secs till autoclose = autoCloseTime / 0x10000
51 uint32 noDamageImmune; //3 break opening whenever you recieve damage?
52 uint32 openTextID; //4 can be used to replace castBarCaption?
57 //1 GAMEOBJECT_TYPE_BUTTON
58 struct
59 {
60 uint32 startOpen; //0
61 uint32 lockId; //1 -> Lock.dbc
62 uint32 autoCloseTime; //2 secs till autoclose = autoCloseTime / 0x10000
64 uint32 noDamageImmune; //4 isBattlegroundObject
66 uint32 openTextID; //6 can be used to replace castBarCaption?
71 //2 GAMEOBJECT_TYPE_QUESTGIVER
72 struct
73 {
74 uint32 lockId; //0 -> Lock.dbc
80 uint32 openTextID; //6 can be used to replace castBarCaption?
81 uint32 losOK; //7
82 uint32 allowMounted; //8 Is usable while on mount/vehicle. (0/1)
83 uint32 large; //9
86 //3 GAMEOBJECT_TYPE_CHEST
87 struct
88 {
89 uint32 lockId; //0 -> Lock.dbc
93 uint32 minSuccessOpens; //4 Deprecated, pre 3.0 was used for mining nodes but since WotLK all mining nodes are usable once and grant all loot with a single use
94 uint32 maxSuccessOpens; //5 Deprecated, pre 3.0 was used for mining nodes but since WotLK all mining nodes are usable once and grant all loot with a single use
95 uint32 eventId; //6 lootedEvent
97 uint32 questId; //8 not used currently but store quest required for GO activation for player
99 uint32 losOK; //10
103 uint32 openTextID; //14 can be used to replace castBarCaption?
106 uint32 conditionID1; //17
108 //4 GAMEOBJECT_TYPE_BINDER - empty
109 //5 GAMEOBJECT_TYPE_GENERIC
110 struct
111 {
115 uint32 large; //3
120 //6 GAMEOBJECT_TYPE_TRAP
121 struct
122 {
123 uint32 lockId; //0 -> Lock.dbc
124 uint32 level; //1
125 uint32 diameter; //2 diameter for trap activation
127 uint32 type; //4 0 trap with no despawn after cast. 1 trap despawns after cast. 2 bomb casts on spawn.
128 uint32 cooldown; //5 time in secs
131 uint32 serverOnly; //8
133 uint32 large; //10
135 uint32 openTextID; //12 can be used to replace castBarCaption?
136 uint32 closeTextID; //13
138 uint32 conditionID1; //15
140 //7 GAMEOBJECT_TYPE_CHAIR
141 struct
142 {
149 //8 GAMEOBJECT_TYPE_SPELL_FOCUS
150 struct
151 {
155 uint32 serverOnly; //3
157 uint32 large; //5
162 //9 GAMEOBJECT_TYPE_TEXT
163 struct
164 {
168 uint32 allowMounted; //3 Is usable while on mount/vehicle. (0/1)
171 //10 GAMEOBJECT_TYPE_GOOBER
172 struct
173 {
174 uint32 lockId; //0 -> Lock.dbc
176 uint32 eventId; //2
178 uint32 customAnim; //4
179 uint32 consumable; //5
180 uint32 cooldown; //6
182 uint32 language; //8
184 uint32 spellId; //10
186 uint32 linkedTrapId; //12
187 uint32 large; //13
188 uint32 openTextID; //14 can be used to replace castBarCaption?
189 uint32 closeTextID; //15
190 uint32 losOK; //16 isBattlegroundObject
191 uint32 allowMounted; //17 Is usable while on mount/vehicle. (0/1)
193 uint32 gossipID; //19
195 uint32 floatOnWater; //21
196 uint32 conditionID1; //22
198 //11 GAMEOBJECT_TYPE_TRANSPORT
199 struct
200 {
202 uint32 startOpen; //1
203 uint32 autoCloseTime; //2 secs till autoclose = autoCloseTime / 0x10000
208 //12 GAMEOBJECT_TYPE_AREADAMAGE
209 struct
210 {
211 uint32 lockId; //0
216 uint32 autoCloseTime; //5 secs till autoclose = autoCloseTime / 0x10000
217 uint32 openTextID; //6
220 //13 GAMEOBJECT_TYPE_CAMERA
221 struct
222 {
223 uint32 lockId; //0 -> Lock.dbc
226 uint32 openTextID; //3 can be used to replace castBarCaption?
229 //14 GAMEOBJECT_TYPE_MAPOBJECT - empty
230 //15 GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT
231 struct
232 {
239 int32 mapID; //6
243 //16 GAMEOBJECT_TYPE_DUELFLAG - empty
244 //17 GAMEOBJECT_TYPE_FISHINGNODE - empty
245 //18 GAMEOBJECT_TYPE_RITUAL
246 struct
247 {
249 uint32 spellId; //1
258 //19 GAMEOBJECT_TYPE_MAILBOX
259 struct
260 {
263 //20 GAMEOBJECT_TYPE_DO_NOT_USE - empty
264 //21 GAMEOBJECT_TYPE_GUARDPOST
265 struct
266 {
270 //22 GAMEOBJECT_TYPE_SPELLCASTER
271 struct
272 {
273 uint32 spellId; //0
276 uint32 allowMounted; //3 Is usable while on mount/vehicle. (0/1)
277 uint32 large; //4
280 //23 GAMEOBJECT_TYPE_MEETINGSTONE
281 struct
282 {
287 //24 GAMEOBJECT_TYPE_FLAGSTAND
288 struct
289 {
290 uint32 lockId; //0
292 uint32 radius; //2
296 uint32 openTextID; //6
297 uint32 losOK; //7
300 //25 GAMEOBJECT_TYPE_FISHINGHOLE
301 struct
302 {
303 uint32 radius; //0 how close bobber must land for sending loot
304 uint32 lootId; //1
307 uint32 lockId; //4 -> Lock.dbc; possibly 1628 for all?
309 //26 GAMEOBJECT_TYPE_FLAGDROP
310 struct
311 {
312 uint32 lockId; //0
313 uint32 eventID; //1
316 uint32 openTextID; //4
318 //27 GAMEOBJECT_TYPE_MINI_GAME
319 struct
320 {
323 //28 GAMEOBJECT_TYPE_DO_NOT_USE_2 - empty
324 //29 GAMEOBJECT_TYPE_CAPTURE_POINT
325 struct
326 {
327 uint32 radius; //0
345 uint32 large; //18
346 uint32 highlight; //19
350 //30 GAMEOBJECT_TYPE_AURA_GENERATOR
351 struct
352 {
353 uint32 startOpen; //0
354 uint32 radius; //1
359 uint32 serverOnly; //6
361 //31 GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY
362 struct
363 {
364 int32 mapID; //0
367 //32 GAMEOBJECT_TYPE_BARBER_CHAIR
368 struct
369 {
373 //33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
374 struct
375 {
401 //34 GAMEOBJECT_TYPE_GUILDBANK
402 struct
403 {
406 //35 GAMEOBJECT_TYPE_TRAPDOOR
407 struct
408 {
410 uint32 startOpen; // 1
413
414 // not use for specific field access (only for output with loop by all filed), also this determinate max union size
415 struct
416 {
419 };
420
421 std::string AIName;
423 std::string StringId;
425
426 // helpers
427 bool IsDespawnAtAction() const
428 {
429 switch (type)
430 {
431 case GAMEOBJECT_TYPE_CHEST: return chest.consumable != 0;
432 case GAMEOBJECT_TYPE_GOOBER: return goober.consumable != 0;
433 default: return false;
434 }
435 }
436
437 bool IsUsableMounted() const
438 {
439 switch (type)
440 {
441 case GAMEOBJECT_TYPE_MAILBOX: return true;
442 case GAMEOBJECT_TYPE_BARBER_CHAIR: return false;
443 case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.allowMounted != 0;
444 case GAMEOBJECT_TYPE_TEXT: return text.allowMounted != 0;
445 case GAMEOBJECT_TYPE_GOOBER: return goober.allowMounted != 0;
446 case GAMEOBJECT_TYPE_SPELLCASTER: return spellcaster.allowMounted != 0;
447 default: return false;
448 }
449 }
450
452 {
453 switch (type)
454 {
455 case GAMEOBJECT_TYPE_BUTTON: return button.losOK == 0;
456 case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.losOK == 0;
457 case GAMEOBJECT_TYPE_CHEST: return chest.losOK == 0;
458 case GAMEOBJECT_TYPE_GOOBER: return goober.losOK == 0;
459 case GAMEOBJECT_TYPE_FLAGSTAND: return flagstand.losOK == 0;
460 case GAMEOBJECT_TYPE_TRAP: return true;
461 default: return false;
462 }
463 }
464
466 {
467 switch (type)
468 {
469 case GAMEOBJECT_TYPE_DOOR: return door.lockId;
470 case GAMEOBJECT_TYPE_BUTTON: return button.lockId;
471 case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.lockId;
472 case GAMEOBJECT_TYPE_CHEST: return chest.lockId;
473 case GAMEOBJECT_TYPE_TRAP: return trap.lockId;
474 case GAMEOBJECT_TYPE_GOOBER: return goober.lockId;
475 case GAMEOBJECT_TYPE_AREADAMAGE: return areadamage.lockId;
476 case GAMEOBJECT_TYPE_CAMERA: return camera.lockId;
477 case GAMEOBJECT_TYPE_FLAGSTAND: return flagstand.lockId;
478 case GAMEOBJECT_TYPE_FISHINGHOLE:return fishinghole.lockId;
479 case GAMEOBJECT_TYPE_FLAGDROP: return flagdrop.lockId;
480 default: return 0;
481 }
482 }
483
484 bool GetDespawnPossibility() const // despawn at targeting of cast?
485 {
486 switch (type)
487 {
488 case GAMEOBJECT_TYPE_DOOR: return door.noDamageImmune != 0;
489 case GAMEOBJECT_TYPE_BUTTON: return button.noDamageImmune != 0;
490 case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.noDamageImmune != 0;
491 case GAMEOBJECT_TYPE_GOOBER: return goober.noDamageImmune != 0;
492 case GAMEOBJECT_TYPE_FLAGSTAND: return flagstand.noDamageImmune != 0;
493 case GAMEOBJECT_TYPE_FLAGDROP: return flagdrop.noDamageImmune != 0;
494 default: return true;
495 }
496 }
497
498 bool CannotBeUsedUnderImmunity() const // Cannot be used/activated/looted by players under immunity effects (example: Divine Shield)
499 {
500 switch (type)
501 {
502 case GAMEOBJECT_TYPE_DOOR: return door.noDamageImmune != 0;
503 case GAMEOBJECT_TYPE_BUTTON: return button.noDamageImmune != 0;
504 case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.noDamageImmune != 0;
505 case GAMEOBJECT_TYPE_CHEST: return true; // All chests cannot be opened while immune on 3.3.5a
506 case GAMEOBJECT_TYPE_GOOBER: return goober.noDamageImmune != 0;
507 case GAMEOBJECT_TYPE_FLAGSTAND: return flagstand.noDamageImmune != 0;
508 case GAMEOBJECT_TYPE_FLAGDROP: return flagdrop.noDamageImmune != 0;
509 default: return false;
510 }
511 }
512
513 uint32 GetCharges() const // despawn at uses amount
514 {
515 switch (type)
516 {
517 //case GAMEOBJECT_TYPE_TRAP: return trap.charges;
518 case GAMEOBJECT_TYPE_GUARDPOST: return guardpost.charges;
519 case GAMEOBJECT_TYPE_SPELLCASTER: return spellcaster.charges;
520 default: return 0;
521 }
522 }
523
525 {
526 switch (type)
527 {
528 case GAMEOBJECT_TYPE_BUTTON: return button.linkedTrap;
529 case GAMEOBJECT_TYPE_CHEST: return chest.linkedTrapId;
530 case GAMEOBJECT_TYPE_SPELL_FOCUS: return spellFocus.linkedTrapId;
531 case GAMEOBJECT_TYPE_GOOBER: return goober.linkedTrapId;
532 default: return 0;
533 }
534 }
535
537 {
539 switch (type)
540 {
541 case GAMEOBJECT_TYPE_DOOR: autoCloseTime = door.autoCloseTime; break;
542 case GAMEOBJECT_TYPE_BUTTON: autoCloseTime = button.autoCloseTime; break;
543 case GAMEOBJECT_TYPE_TRAP: autoCloseTime = trap.autoCloseTime; break;
544 case GAMEOBJECT_TYPE_GOOBER: autoCloseTime = goober.autoCloseTime; break;
545 case GAMEOBJECT_TYPE_TRANSPORT: autoCloseTime = transport.autoCloseTime; break;
546 case GAMEOBJECT_TYPE_AREADAMAGE: autoCloseTime = areadamage.autoCloseTime; break;
547 default: break;
548 }
549 return autoCloseTime; // prior to 3.0.3, conversion was / 0x10000;
550 }
551
553 {
554 switch (type)
555 {
556 case GAMEOBJECT_TYPE_CHEST: return chest.lootId;
557 case GAMEOBJECT_TYPE_FISHINGHOLE: return fishinghole.lootId;
558 default: return 0;
559 }
560 }
561
563 {
564 switch (type)
565 {
566 case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.gossipID;
567 case GAMEOBJECT_TYPE_GOOBER: return goober.gossipID;
568 default: return 0;
569 }
570 }
571
573 {
574 switch (type)
575 {
576 case GAMEOBJECT_TYPE_GOOBER: return goober.eventId;
577 case GAMEOBJECT_TYPE_CHEST: return chest.eventId;
578 case GAMEOBJECT_TYPE_CAMERA: return camera.eventID;
579 default: return 0;
580 }
581 }
582
583 uint32 GetCooldown() const // Cooldown preventing goober and traps to cast spell
584 {
585 switch (type)
586 {
587 case GAMEOBJECT_TYPE_TRAP: return trap.cooldown;
588 case GAMEOBJECT_TYPE_GOOBER: return goober.cooldown;
589 default: return 0;
590 }
591 }
592
593 bool IsLargeGameObject() const
594 {
595 switch (type)
596 {
597 case GAMEOBJECT_TYPE_BUTTON: return button.large != 0;
598 case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.large != 0;
599 case GAMEOBJECT_TYPE_GENERIC: return _generic.large != 0;
600 case GAMEOBJECT_TYPE_TRAP: return trap.large != 0;
601 case GAMEOBJECT_TYPE_SPELL_FOCUS: return spellFocus.large != 0;
602 case GAMEOBJECT_TYPE_GOOBER: return goober.large != 0;
603 case GAMEOBJECT_TYPE_SPELLCASTER: return spellcaster.large != 0;
604 case GAMEOBJECT_TYPE_CAPTURE_POINT: return capturePoint.large != 0;
605 default: return false;
606 }
607 }
608
610 {
611 switch (type)
612 {
613 case GAMEOBJECT_TYPE_DOOR: return true;
614 case GAMEOBJECT_TYPE_FLAGSTAND: return true;
615 case GAMEOBJECT_TYPE_FLAGDROP: return true;
616 case GAMEOBJECT_TYPE_TRAPDOOR: return true;
617 default: return false;
618 }
619 }
620
622 {
623 switch (type)
624 {
625 case GAMEOBJECT_TYPE_GENERIC: return _generic.serverOnly;
626 case GAMEOBJECT_TYPE_TRAP: return trap.serverOnly;
627 case GAMEOBJECT_TYPE_SPELL_FOCUS: return spellFocus.serverOnly;
628 case GAMEOBJECT_TYPE_AURA_GENERATOR: return auraGenerator.serverOnly;
629 default: return 0;
630 }
631 }
632
633 void InitializeQueryData();
635};
636
637// From `gameobject_template_addon`, `gameobject_overrides`
643
644// From `gameobject_template_addon`
646{
649 std::array<uint32, 4> artKits = {};
650};
651
653{
654 std::vector<std::string> Name;
655 std::vector<std::string> CastBarCaption;
656};
657
659{
660 float x, y, z, w;
661
662 QuaternionData() : x(0.0f), y(0.0f), z(0.0f), w(1.0f) { }
663 QuaternionData(float X, float Y, float Z, float W) : x(X), y(Y), z(Z), w(W) { }
664
665 bool isUnit() const;
666 void toEulerAnglesZYX(float& Z, float& Y, float& X) const;
667 static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X);
668
669 friend bool operator==(QuaternionData const& left, QuaternionData const& right) = default;
670};
671
672// `gameobject_addon` table
679
680// `gameobject` table
689
691{
692 // Name from client executable // Comments
693 None = 0, // -NONE-
694 AnimateCustom0 = 1, // Animate Custom0
695 AnimateCustom1 = 2, // Animate Custom1
696 AnimateCustom2 = 3, // Animate Custom2
697 AnimateCustom3 = 4, // Animate Custom3
698 Disturb = 5, // Disturb // Triggers trap
699 Unlock = 6, // Unlock // Resets GO_FLAG_LOCKED
700 Lock = 7, // Lock // Sets GO_FLAG_LOCKED
701 Open = 8, // Open // Sets GO_STATE_ACTIVE
702 OpenAndUnlock = 9, // Open + Unlock // Sets GO_STATE_ACTIVE and resets GO_FLAG_LOCKED
703 Close = 10, // Close // Sets GO_STATE_READY
704 ToggleOpen = 11, // Toggle Open
705 Destroy = 12, // Destroy // Sets GO_STATE_DESTROYED
706 Rebuild = 13, // Rebuild // Resets from GO_STATE_DESTROYED
707 Creation = 14, // Creation
708 Despawn = 15, // Despawn
709 MakeInert = 16, // Make Inert // Disables interactions
710 MakeActive = 17, // Make Active // Enables interactions
711 CloseAndLock = 18, // Close + Lock // Sets GO_STATE_READY and sets GO_FLAG_LOCKED
712 UseArtKit0 = 19, // Use ArtKit0 // 46904: 121
713 UseArtKit1 = 20, // Use ArtKit1 // 36639: 81, 46903: 122
714 UseArtKit2 = 21, // Use ArtKit2
715 UseArtKit3 = 22, // Use ArtKit3
716 SetTapList = 23, // Set Tap List
717 Max
718};
719
720#endif // GameObjectData_h__
LocaleConstant
Definition Common.h:48
@ TOTAL_LOCALES
Definition Common.h:59
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
GameObjectActions
@ GAMEOBJECT_TYPE_CAMERA
@ GAMEOBJECT_TYPE_CAPTURE_POINT
@ GAMEOBJECT_TYPE_BUTTON
@ GAMEOBJECT_TYPE_SPELL_FOCUS
@ GAMEOBJECT_TYPE_TRANSPORT
@ GAMEOBJECT_TYPE_AURA_GENERATOR
@ GAMEOBJECT_TYPE_TRAP
@ GAMEOBJECT_TYPE_GENERIC
@ GAMEOBJECT_TYPE_CHEST
@ GAMEOBJECT_TYPE_FISHINGHOLE
@ GAMEOBJECT_TYPE_TRAPDOOR
@ GAMEOBJECT_TYPE_FLAGDROP
@ GAMEOBJECT_TYPE_QUESTGIVER
@ GAMEOBJECT_TYPE_MAILBOX
@ GAMEOBJECT_TYPE_SPELLCASTER
@ GAMEOBJECT_TYPE_FLAGSTAND
@ GAMEOBJECT_TYPE_TEXT
@ GAMEOBJECT_TYPE_AREADAMAGE
@ GAMEOBJECT_TYPE_GOOBER
@ GAMEOBJECT_TYPE_BARBER_CHAIR
@ GAMEOBJECT_TYPE_DOOR
@ GAMEOBJECT_TYPE_GUARDPOST
InvisibilityType
#define MAX_GAMEOBJECT_DATA
GOState
@ GO_STATE_ACTIVE
@ SPAWN_TYPE_GAMEOBJECT
Definition SpawnData.h:32
QuaternionData ParentRotation
InvisibilityType invisibilityType
QuaternionData rotation
std::vector< std::string > Name
std::vector< std::string > CastBarCaption
std::array< uint32, 4 > artKits
struct GameObjectTemplate::@191::@214 flagdrop
struct GameObjectTemplate::@191::@210 spellcaster
struct GameObjectTemplate::@191::@208 mailbox
struct GameObjectTemplate::@191::@199 chair
bool CannotBeUsedUnderImmunity() const
uint32 GetAutoCloseTime() const
struct GameObjectTemplate::@191::@200 spellFocus
uint32 data[MAX_GAMEOBJECT_DATA]
struct GameObjectTemplate::@191::@216 capturePoint
struct GameObjectTemplate::@191::@209 guardpost
struct GameObjectTemplate::@191::@201 text
uint32 GetGossipMenuId() const
WorldPacket QueryData[TOTAL_LOCALES]
bool IsLargeGameObject() const
bool IsUsableMounted() const
WorldPacket BuildQueryData(LocaleConstant loc) const
struct GameObjectTemplate::@191::@213 fishinghole
struct GameObjectTemplate::@191::@204 areadamage
struct GameObjectTemplate::@191::@218 dungeonDifficulty
bool IsInfiniteGameObject() const
bool IsDespawnAtAction() const
struct GameObjectTemplate::@191::@206 moTransport
struct GameObjectTemplate::@191::@223 raw
uint32 GetCharges() const
struct GameObjectTemplate::@191::@212 flagstand
struct GameObjectTemplate::@191::@203 transport
uint32 GetEventScriptId() const
uint32 GetCooldown() const
struct GameObjectTemplate::@191::@215 miniGame
struct GameObjectTemplate::@191::@219 barberChair
struct GameObjectTemplate::@191::@202 goober
bool GetDespawnPossibility() const
uint32 GetServerOnly() const
uint32 GetLinkedGameObjectEntry() const
struct GameObjectTemplate::@191::@205 camera
struct GameObjectTemplate::@191::@221 guildbank
struct GameObjectTemplate::@191::@207 summoningRitual
struct GameObjectTemplate::@191::@196 chest
struct GameObjectTemplate::@191::@195 questgiver
struct GameObjectTemplate::@191::@211 meetingstone
struct GameObjectTemplate::@191::@217 auraGenerator
struct GameObjectTemplate::@191::@193 door
struct GameObjectTemplate::@191::@220 building
std::string castBarCaption
struct GameObjectTemplate::@191::@194 button
struct GameObjectTemplate::@191::@198 trap
struct GameObjectTemplate::@191::@222 trapDoor
bool IsIgnoringLOSChecks() const
uint32 GetLockId() const
struct GameObjectTemplate::@191::@197 _generic
uint32 GetLootId() const
friend bool operator==(QuaternionData const &left, QuaternionData const &right)=default
QuaternionData(float X, float Y, float Z, float W)