diff options
author | megamage <none@none> | 2009-06-11 00:45:59 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-11 00:45:59 -0500 |
commit | 9d670fe6f5757430d575081db9a6e5273400330d (patch) | |
tree | 9148b75f310fda0bf082be70731abfca03e84f20 /src/game/QueryHandler.cpp | |
parent | 9c70e3d89bbace30bfabcf8c42323472ad1e4c4d (diff) |
*Switch to support client version 3.1.3
*I strongly recommend you not to use this until you get the 313 db. Now all destructible buildings cause client crash.
Source: Mangos
Thanks to TOM_RUS for most work to make this switch possible ;)
--HG--
branch : trunk
Diffstat (limited to 'src/game/QueryHandler.cpp')
-rw-r--r-- | src/game/QueryHandler.cpp | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index 5d13a6a576a..5786e24eaef 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -40,13 +40,14 @@ void WorldSession::SendNameQueryOpcode(Player *p) return; // guess size - WorldPacket data( SMSG_NAME_QUERY_RESPONSE, (8+1+4+4+4+10) ); - data << p->GetGUID(); - data << p->GetName(); + WorldPacket data( SMSG_NAME_QUERY_RESPONSE, (8+1+1+1+1+1+10) ); + data.append(p->GetPackGUID()); // player guid + data << uint8(0); // added in 3.1 + data << p->GetName(); // played name data << uint8(0); // realm name for cross realm BG usage - data << uint32(p->getRace()); - data << uint32(p->getGender()); - data << uint32(p->getClass()); + data << uint8(p->getRace()); + data << uint8(p->getGender()); + data << uint8(p->getClass()); if(DeclinedName const* names = p->GetDeclinedNames()) { data << uint8(1); // is declined @@ -98,14 +99,15 @@ void WorldSession::SendNameQueryOpcodeFromDBCallBack(QueryResult *result, uint32 else field = fields[2].GetUInt32(); - // guess size - WorldPacket data( SMSG_NAME_QUERY_RESPONSE, (8+1+4+4+4+10) ); - data << MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER); + // guess size + WorldPacket data( SMSG_NAME_QUERY_RESPONSE, (8+1+1+1+1+1+1+10) ); + data.appendPackGUID(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER)); + data << uint8(0); // added in 3.1 data << name; data << uint8(0); - data << uint32(field & 0xFF); - data << uint32((field >> 16) & 0xFF); - data << uint32((field >> 8) & 0xFF); + data << uint8(field & 0xFF); + data << uint8((field >> 16) & 0xFF); + data << uint8((field >> 8) & 0xFF); // if the first declined name field (3) is empty, the rest must be too if(sWorld.getConfig(CONFIG_DECLINED_NAMES_USED) && fields[3].GetCppString() != "") @@ -167,9 +169,9 @@ void WorldSession::HandleCreatureQueryOpcode( WorldPacket & recv_data ) CreatureLocale const *cl = objmgr.GetCreatureLocale(entry); if (cl) { - if (cl->Name.size() > loc_idx && !cl->Name[loc_idx].empty()) + if (cl->Name.size() > size_t(loc_idx) && !cl->Name[loc_idx].empty()) Name = cl->Name[loc_idx]; - if (cl->SubName.size() > loc_idx && !cl->SubName[loc_idx].empty()) + if (cl->SubName.size() > size_t(loc_idx) && !cl->SubName[loc_idx].empty()) SubName = cl->SubName[loc_idx]; } } @@ -185,13 +187,18 @@ void WorldSession::HandleCreatureQueryOpcode( WorldPacket & recv_data ) data << uint32(ci->type); // CreatureType.dbc data << uint32(ci->family); // CreatureFamily.dbc data << uint32(ci->rank); // Creature Rank (elite, boss, etc) - data << uint32(ci->PetSpellDataId); // Id from CreatureSpellData.dbc wdbField12 + data << uint32(ci->unk1); // new in 3.1, creature entry? + data << uint32(ci->unk2); // new in 3.1, creature entry? data << (uint32)ci->Modelid_A1; // Modelid_A1 data << (uint32)ci->Modelid_A2; // Modelid_A2 data << (uint32)ci->Modelid_H1; // Modelid_H1 data << (uint32)ci->Modelid_H2; // Modelid_H2 + data << float(ci->unk16); // unk data << float(ci->unk17); // unk data << uint8(ci->RacialLeader); + for(uint32 i = 0; i < 4; ++i) + data << uint32(ci->questItems[i]); // itemId[4], quest drop + data << uint32(ci->movementId); // CreatureMovementInfo.dbc SendPacket( &data ); sLog.outDebug( "WORLD: Sent SMSG_CREATURE_QUERY_RESPONSE" ); } @@ -234,9 +241,9 @@ void WorldSession::HandleGameObjectQueryOpcode( WorldPacket & recv_data ) GameObjectLocale const *gl = objmgr.GetGameObjectLocale(entryID); if (gl) { - if (gl->Name.size() > loc_idx && !gl->Name[loc_idx].empty()) + if (gl->Name.size() > size_t(loc_idx) && !gl->Name[loc_idx].empty()) Name = gl->Name[loc_idx]; - if (gl->CastBarCaption.size() > loc_idx && !gl->CastBarCaption[loc_idx].empty()) + if (gl->CastBarCaption.size() > size_t(loc_idx) && !gl->CastBarCaption[loc_idx].empty()) CastBarCaption = gl->CastBarCaption[loc_idx]; } } @@ -249,9 +256,11 @@ void WorldSession::HandleGameObjectQueryOpcode( WorldPacket & recv_data ) data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4 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 << uint8(0); // 2.0.3, string + data << info->unk1; // 2.0.3, string data.append(info->raw.data, 24); data << float(info->size); // go size + for(uint32 i = 0; i < 4; ++i) + data << uint32(info->questItems[i]); // itemId[4], quest drop SendPacket( &data ); sLog.outDebug( "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE" ); } @@ -371,9 +380,9 @@ void WorldSession::HandleNpcTextQueryOpcode( WorldPacket & recv_data ) { for (int i = 0; i < 8; ++i) { - if (nl->Text_0[i].size() > loc_idx && !nl->Text_0[i][loc_idx].empty()) + if (nl->Text_0[i].size() > size_t(loc_idx) && !nl->Text_0[i][loc_idx].empty()) Text_0[i]=nl->Text_0[i][loc_idx]; - if (nl->Text_1[i].size() > loc_idx && !nl->Text_1[i][loc_idx].empty()) + if (nl->Text_1[i].size() > size_t(loc_idx) && !nl->Text_1[i][loc_idx].empty()) Text_1[i]=nl->Text_1[i][loc_idx]; } } @@ -440,7 +449,7 @@ void WorldSession::HandlePageTextQueryOpcode( WorldPacket & recv_data ) PageTextLocale const *pl = objmgr.GetPageTextLocale(pageID); if (pl) { - if (pl->Text.size() > loc_idx && !pl->Text[loc_idx].empty()) + if (pl->Text.size() > size_t(loc_idx) && !pl->Text[loc_idx].empty()) Text = pl->Text[loc_idx]; } } |