aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.h1
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.cpp59
-rwxr-xr-xsrc/server/game/Miscellaneous/SharedDefines.h2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/QueryHandler.cpp6
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.cpp10
5 files changed, 40 insertions, 38 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 9167b40d285..d6ddc29a3e0 100755
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -51,6 +51,7 @@ struct GameObjectTemplate
uint32 flags;
float size;
uint32 questItems[MAX_GAMEOBJECT_QUEST_ITEMS];
+ int32 unkInt32;
union // different GO types have different data field
{
//0 GAMEOBJECT_TYPE_DOOR
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index be9c11a0f26..4680d6edc4f 100755
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -6489,8 +6489,10 @@ void ObjectMgr::LoadGameObjectTemplate()
QueryResult result = WorldDatabase.Query("SELECT entry, type, displayId, name, IconName, castBarCaption, unk1, faction, flags, size, questItem1, questItem2, questItem3, "
// 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
"questItem4, questItem5, questItem6, data0, data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12, "
- // 29 30 31 32 33 34 35 36 37 38 39 40 41
- "data13, data14, data15, data16, data17, data18, data19, data20, data21, data22, data23, AIName, ScriptName "
+ // 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
+ "data13, data14, data15, data16, data17, data18, data19, data20, data21, data22, data23, data24, data25, data26, data27, data28, "
+ // 45 46 47 48 49 50
+ "data29, data30, data31, unkInt32, AIName, ScriptName "
"FROM gameobject_template");
if (!result)
@@ -6521,44 +6523,41 @@ void ObjectMgr::LoadGameObjectTemplate()
got.size = fields[9].GetFloat();
for (uint8 i = 0; i < MAX_GAMEOBJECT_QUEST_ITEMS; ++i)
- {
got.questItems[i] = fields[10 + i].GetUInt32();
- }
for (uint8 i = 0; i < MAX_GAMEOBJECT_DATA; ++i)
- {
got.raw.data[i] = fields[16 + i].GetUInt32();
- }
- got.AIName = fields[40].GetString();
- got.ScriptId = GetScriptId(fields[41].GetCString());
+ got.unkInt32 = fields[48].GetInt32();
+ got.AIName = fields[49].GetString();
+ got.ScriptId = GetScriptId(fields[50].GetCString());
// Checks
switch (got.type)
{
- case GAMEOBJECT_TYPE_DOOR: //0
+ case GAMEOBJECT_TYPE_DOOR: //0
{
if (got.door.lockId)
CheckGOLockId(&got, got.door.lockId, 1);
CheckGONoDamageImmuneId(&got, got.door.noDamageImmune, 3);
break;
}
- case GAMEOBJECT_TYPE_BUTTON: //1
+ case GAMEOBJECT_TYPE_BUTTON: //1
{
if (got.button.lockId)
CheckGOLockId(&got, got.button.lockId, 1);
CheckGONoDamageImmuneId(&got, got.button.noDamageImmune, 4);
break;
}
- case GAMEOBJECT_TYPE_QUESTGIVER: //2
+ case GAMEOBJECT_TYPE_QUESTGIVER: //2
{
if (got.questgiver.lockId)
CheckGOLockId(&got, got.questgiver.lockId, 0);
CheckGONoDamageImmuneId(&got, got.questgiver.noDamageImmune, 5);
break;
}
- case GAMEOBJECT_TYPE_CHEST: //3
+ case GAMEOBJECT_TYPE_CHEST: //3
{
if (got.chest.lockId)
CheckGOLockId(&got, got.chest.lockId, 0);
@@ -6569,16 +6568,16 @@ void ObjectMgr::LoadGameObjectTemplate()
CheckGOLinkedTrapId(&got, got.chest.linkedTrapId, 7);
break;
}
- case GAMEOBJECT_TYPE_TRAP: //6
+ case GAMEOBJECT_TYPE_TRAP: //6
{
if (got.trap.lockId)
CheckGOLockId(&got, got.trap.lockId, 0);
break;
}
- case GAMEOBJECT_TYPE_CHAIR: //7
- CheckAndFixGOChairHeightId(&got, got.chair.height, 1);
- break;
- case GAMEOBJECT_TYPE_SPELL_FOCUS: //8
+ case GAMEOBJECT_TYPE_CHAIR: //7
+ CheckAndFixGOChairHeightId(&got, got.chair.height, 1);
+ break;
+ case GAMEOBJECT_TYPE_SPELL_FOCUS: //8
{
if (got.spellFocus.focusId)
{
@@ -6591,7 +6590,7 @@ void ObjectMgr::LoadGameObjectTemplate()
CheckGOLinkedTrapId(&got, got.spellFocus.linkedTrapId, 2);
break;
}
- case GAMEOBJECT_TYPE_GOOBER: //10
+ case GAMEOBJECT_TYPE_GOOBER: //10
{
if (got.goober.lockId)
CheckGOLockId(&got, got.goober.lockId, 0);
@@ -6609,19 +6608,19 @@ void ObjectMgr::LoadGameObjectTemplate()
CheckGOLinkedTrapId(&got, got.goober.linkedTrapId, 12);
break;
}
- case GAMEOBJECT_TYPE_AREADAMAGE: //12
+ case GAMEOBJECT_TYPE_AREADAMAGE: //12
{
if (got.areadamage.lockId)
CheckGOLockId(&got, got.areadamage.lockId, 0);
break;
}
- case GAMEOBJECT_TYPE_CAMERA: //13
+ case GAMEOBJECT_TYPE_CAMERA: //13
{
if (got.camera.lockId)
CheckGOLockId(&got, got.camera.lockId, 0);
break;
}
- case GAMEOBJECT_TYPE_MO_TRANSPORT: //15
+ case GAMEOBJECT_TYPE_MO_TRANSPORT: //15
{
if (got.moTransport.taxiPathId)
{
@@ -6631,37 +6630,37 @@ void ObjectMgr::LoadGameObjectTemplate()
}
break;
}
- case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18
- break;
- case GAMEOBJECT_TYPE_SPELLCASTER: //22
+ case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18
+ break;
+ case GAMEOBJECT_TYPE_SPELLCASTER: //22
{
// always must have spell
CheckGOSpellId(&got, got.spellcaster.spellId, 0);
break;
}
- case GAMEOBJECT_TYPE_FLAGSTAND: //24
+ case GAMEOBJECT_TYPE_FLAGSTAND: //24
{
if (got.flagstand.lockId)
CheckGOLockId(&got, got.flagstand.lockId, 0);
CheckGONoDamageImmuneId(&got, got.flagstand.noDamageImmune, 5);
break;
}
- case GAMEOBJECT_TYPE_FISHINGHOLE: //25
+ case GAMEOBJECT_TYPE_FISHINGHOLE: //25
{
if (got.fishinghole.lockId)
CheckGOLockId(&got, got.fishinghole.lockId, 4);
break;
}
- case GAMEOBJECT_TYPE_FLAGDROP: //26
+ case GAMEOBJECT_TYPE_FLAGDROP: //26
{
if (got.flagdrop.lockId)
CheckGOLockId(&got, got.flagdrop.lockId, 0);
CheckGONoDamageImmuneId(&got, got.flagdrop.noDamageImmune, 3);
break;
}
- case GAMEOBJECT_TYPE_BARBER_CHAIR: //32
- CheckAndFixGOChairHeightId(&got, got.barberChair.chairheight, 0);
- break;
+ case GAMEOBJECT_TYPE_BARBER_CHAIR: //32
+ CheckAndFixGOChairHeightId(&got, got.barberChair.chairheight, 0);
+ break;
}
++count;
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index a95f29c17d9..2f70031e715 100755
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -1519,7 +1519,7 @@ enum GameobjectTypes
};
#define MAX_GAMEOBJECT_TYPE 36 // sending to client this or greater value can crash client.
-#define MAX_GAMEOBJECT_DATA 24 // Max number of uint32 vars in gameobject_template data field
+#define MAX_GAMEOBJECT_DATA 32 // Max number of uint32 vars in gameobject_template data field
enum GameObjectFlags
{
diff --git a/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp b/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp
index e194f57ba09..48caa4f36d5 100755
--- a/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp
@@ -169,6 +169,7 @@ void WorldSession::HandleCreatureQueryOpcode(WorldPacket & recv_data)
/// Only _static_ data is sent in this packet !!!
void WorldSession::HandleGameObjectQueryOpcode(WorldPacket & recv_data)
{
+ const int GO_DATA_FIELDS_NUMBER = 32;
uint32 entry;
recv_data >> entry;
uint64 guid;
@@ -204,10 +205,11 @@ void WorldSession::HandleGameObjectQueryOpcode(WorldPacket & recv_data)
data << IconName; // 2.0.3, string. Icon name to use instead of default icon for go's (ex: "Attack" makes sword)
data << CastBarCaption; // 2.0.3, string. Text will appear in Cast Bar when using GO (ex: "Collecting")
data << info->unk1; // 2.0.3, string
- data.append(info->raw.data, 24);
+ data.append(info->raw.data, MAX_GAMEOBJECT_DATA);
data << float(info->size); // go size
for (uint32 i = 0; i < MAX_GAMEOBJECT_QUEST_ITEMS; ++i)
- data << uint32(info->questItems[i]); // itemId[6], quest drop
+ data << uint32(info->questItems[i]); // itemId[6], quest drop
+ data << int32(info->unkInt32); // 4.x, unknown
SendPacket(&data);
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE");
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 89e26dbfef7..1b3b7eea061 100755
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -137,7 +137,7 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(CMSG_QUEST_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestQueryOpcode );
DEFINE_OPCODE_HANDLER(SMSG_QUEST_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(CMSG_GAMEOBJECT_QUERY, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGameObjectQueryOpcode );
- //DEFINE_OPCODE_HANDLER(SMSG_GAMEOBJECT_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GAMEOBJECT_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(CMSG_CREATURE_QUERY, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleCreatureQueryOpcode );
DEFINE_OPCODE_HANDLER(SMSG_CREATURE_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(CMSG_WHO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleWhoOpcode );
@@ -192,7 +192,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(UMSG_UPDATE_GUILD, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_ADDON_X, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
- DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
+ //DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_BATTLEGROUND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_BATTLEGROUND_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
@@ -1368,8 +1368,8 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_COMMENTATOR_SKIRMISH_QUEUE_RESULT1, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_COMMENTATOR_SKIRMISH_QUEUE_RESULT2, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_COMPRESSED_UNKNOWN_1310, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER( SMSG_VERIFY_CONNECTIVITY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER( CMSG_VERIFY_CONNECTIVITY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess );
- DEFINE_OPCODE_HANDLER( CMSG_LOG_DISCONNECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess );
+ DEFINE_OPCODE_HANDLER(SMSG_VERIFY_CONNECTIVITY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(CMSG_VERIFY_CONNECTIVITY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess );
+ //DEFINE_OPCODE_HANDLER(CMSG_LOG_DISCONNECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess );
#undef DEFINE_OPCODE_HANDLER
};