Skip to content

Commit 331cbe0

Browse files
committed
Core/GameObjects: Implement new gameobject_template data20 for chests, consolidating all bool typed data columns
1 parent 26f7402 commit 331cbe0

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
UPDATE `gameobject_template` SET `Data20`=0 WHERE `type`=3;
2+
3+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0001 WHERE `type`=3 AND `Data3`!=0;
4+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0002 WHERE `type`=3 AND `Data10`!=0;
5+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0004 WHERE `type`=3 AND `Data11`!=0;
6+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0008 WHERE `type`=3 AND `Data12`!=0;
7+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0010 WHERE `type`=3 AND `Data13`!=0;
8+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0020 WHERE `type`=3 AND `Data15`!=0;
9+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0040 WHERE `type`=3 AND `Data16`!=0;
10+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0080 WHERE `type`=3 AND `Data21`!=0;
11+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0100 WHERE `type`=3 AND `Data22`!=0;
12+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0200 WHERE `type`=3 AND `Data27`!=0;
13+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0400 WHERE `type`=3 AND `Data28`!=0;
14+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x0800 WHERE `type`=3 AND `Data31`!=0;
15+
UPDATE `gameobject_template` SET `Data20`=`Data20`|0x1000 WHERE `type`=3 AND `Data34`!=0;
16+
17+
-- reset fields that were reused for something else
18+
UPDATE `gameobject_template` SET `Data21`=0 WHERE `type`=3;
19+
UPDATE `gameobject_template` SET `Data22`=0 WHERE `type`=3;

src/server/game/Entities/GameObject/GameObjectData.h

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
#include <set>
2828
#include <string>
2929

30-
// TODO: Reorder properly, this is temporary to fix compile
3130
enum class GameObjectChestFlags : int32
3231
{
3332
Consumable = 0x0001,
@@ -891,8 +890,7 @@ struct GameObjectTemplate
891890
{
892891
switch (type)
893892
{
894-
case GAMEOBJECT_TYPE_CHEST: return chest.Unused != 0; // TODO: update database values and research flag order
895-
// case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::Consumable);
893+
case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::Consumable);
896894
case GAMEOBJECT_TYPE_GOOBER: return goober.consumable != 0;
897895
default: return false;
898896
}
@@ -1019,8 +1017,7 @@ struct GameObjectTemplate
10191017
{
10201018
case GAMEOBJECT_TYPE_BUTTON: return button.requireLOS;
10211019
case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.requireLOS;
1022-
case GAMEOBJECT_TYPE_CHEST: return chest.Unused2; // TODO: update database values and research flag order
1023-
// case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::RequireLOS);
1020+
case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::RequireLOS);
10241021
case GAMEOBJECT_TYPE_TRAP: return trap.requireLOS;
10251022
case GAMEOBJECT_TYPE_GOOBER: return goober.requireLOS;
10261023
case GAMEOBJECT_TYPE_FLAGSTAND: return flagStand.requireLOS;
@@ -1078,8 +1075,7 @@ struct GameObjectTemplate
10781075
case GAMEOBJECT_TYPE_DOOR: return door.noDamageImmune;
10791076
case GAMEOBJECT_TYPE_BUTTON: return button.noDamageImmune;
10801077
case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.noDamageImmune;
1081-
case GAMEOBJECT_TYPE_CHEST: return !chest.OneTimeChestAccountFlag; // TODO: update database values and research flag order
1082-
// case GAMEOBJECT_TYPE_CHEST: return !EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::DamageImmuneOK);
1078+
case GAMEOBJECT_TYPE_CHEST: return !EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::DamageImmuneOK);
10831079
case GAMEOBJECT_TYPE_GOOBER: return goober.noDamageImmune;
10841080
case GAMEOBJECT_TYPE_FLAGSTAND: return flagStand.noDamageImmune;
10851081
case GAMEOBJECT_TYPE_FLAGDROP: return flagDrop.noDamageImmune;
@@ -1091,8 +1087,7 @@ struct GameObjectTemplate
10911087
{
10921088
switch (type)
10931089
{
1094-
case GAMEOBJECT_TYPE_CHEST: return chest.Unused4; // TODO: update database values and research flag order
1095-
//case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::NotInCombat);
1090+
case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::NotInCombat);
10961091
case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.notInCombat;
10971092
default: return 0;
10981093
}
@@ -1153,8 +1148,7 @@ struct GameObjectTemplate
11531148
{
11541149
switch (type)
11551150
{
1156-
case GAMEOBJECT_TYPE_CHEST: return chest.Unused6 != 0; // TODO: update database values and research flag order
1157-
//case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::UseGroupLootRules);
1151+
case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::UseGroupLootRules);
11581152
default: return false;
11591153
}
11601154
}
@@ -1301,8 +1295,7 @@ struct GameObjectTemplate
13011295
case GAMEOBJECT_TYPE_DOOR: return door.GiganticAOI != 0;
13021296
case GAMEOBJECT_TYPE_BUTTON: return button.GiganticAOI != 0;
13031297
case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.GiganticAOI != 0;
1304-
case GAMEOBJECT_TYPE_CHEST: return chest.Unused8 != 0; // TODO: update database values and research flag order
1305-
// case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::GiganticAOI);
1298+
case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::GiganticAOI);
13061299
case GAMEOBJECT_TYPE_GENERIC: return generic.GiganticAOI != 0;
13071300
case GAMEOBJECT_TYPE_TRAP: return trap.GiganticAOI != 0;
13081301
case GAMEOBJECT_TYPE_SPELL_FOCUS: return spellFocus.GiganticAOI != 0;
@@ -1330,8 +1323,7 @@ struct GameObjectTemplate
13301323
{
13311324
switch (type)
13321325
{
1333-
case GAMEOBJECT_TYPE_CHEST: return chest.Unused9 != 0; // TODO: update database values and research flag order
1334-
// case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::LargeAOI);
1326+
case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::LargeAOI);
13351327
case GAMEOBJECT_TYPE_GENERIC: return generic.LargeAOI != 0;
13361328
case GAMEOBJECT_TYPE_GOOBER: return goober.LargeAOI != 0;
13371329
case GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY: return dungeonDifficulty.LargeAOI != 0;

0 commit comments

Comments
 (0)