From 4c86eab673a5b4b48faba2cf6faacdb0a493c5f1 Mon Sep 17 00:00:00 2001 From: "False.Genesis" Date: Thu, 8 Feb 2007 23:55:53 +0000 Subject: [PATCH] * added opcode handler for initial spells * corrected opcode output together with hidefreqopcodes conf option (plz test!) --- src/Client/World/UpdateData.cpp | 4 ++-- src/Client/World/WorldSession.cpp | 22 +++++++++++++++++++--- src/Client/World/WorldSession.h | 3 ++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Client/World/UpdateData.cpp b/src/Client/World/UpdateData.cpp index 1b89f1e..4e4d9f7 100644 --- a/src/Client/World/UpdateData.cpp +++ b/src/Client/World/UpdateData.cpp @@ -93,7 +93,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket) recvPacket >> objtypeid >> flags; logdebug("Create Object type %u with guid "I64FMT,objtypeid,uguid); - this->_MovementUpdate(objtypeid, uguid, recvPacket); + //this->_MovementUpdate(objtypeid, uguid, recvPacket); // i think thats the wrong place for this [FG] // (TODO) and then: Add object to objmgr } @@ -105,7 +105,7 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket) { uguid = recvPacket.GetPackedGuid(); // not 100% sure if this is correct logdebug("GUID "I64FMT" out of range",uguid); - // TODO: delete object from known objects list + objmgr.RemoveObject(uguid); } break; diff --git a/src/Client/World/WorldSession.cpp b/src/Client/World/WorldSession.cpp index 023c1aa..5ff25e8 100644 --- a/src/Client/World/WorldSession.cpp +++ b/src/Client/World/WorldSession.cpp @@ -121,12 +121,12 @@ void WorldSession::Update(void) hideOpcode = true; } - if( ( (known && GetInstance()->GetConf()->showopcodes==1) + if( (known && GetInstance()->GetConf()->showopcodes==1) || ((!known) && GetInstance()->GetConf()->showopcodes==2) || (GetInstance()->GetConf()->showopcodes==3) ) - && (!GetInstance()->GetConf()->hidefreqopcodes || GetInstance()->GetConf()->hidefreqopcodes && !hideOpcode)) { - logcustom(1,YELLOW,">> Opcode %u [%s] (%s)", packet->GetOpcode(), LookupName(packet->GetOpcode(),g_worldOpcodeNames), known ? "Known" : "UNKNOWN"); + if(!(GetInstance()->GetConf()->hidefreqopcodes && hideOpcode)) + logcustom(1,YELLOW,">> Opcode %u [%s] (%s)", packet->GetOpcode(), LookupName(packet->GetOpcode(),g_worldOpcodeNames), known ? "Known" : "UNKNOWN"); } delete packet; } @@ -174,6 +174,7 @@ OpcodeHandler *WorldSession::_GetOpcodeHandlerTable() const {SMSG_CAST_RESULT, &WorldSession::_HandleCastResultOpcode}, {SMSG_ITEM_QUERY_SINGLE_RESPONSE, &WorldSession::_HandleItemQuerySingleResponseOpcode}, {SMSG_DESTROY_OBJECT, &WorldSession::_HandleDestroyObjectOpcode}, + {SMSG_INITIAL_SPELLS, &WorldSession::_HandleInitialSpellsOpcode}, // table termination { 0, NULL } @@ -598,3 +599,18 @@ void WorldSession::_HandleCastResultOpcode(WorldPacket& recvPacket) { // _playerSettings->HandleCastResultOpcode(recvPacket); } + +void WorldSession::_HandleInitialSpellsOpcode(WorldPacket& recvPacket) +{ + uint8 unk; + uint16 spellid,spellslot,count; + recvPacket >> unk >> count; + logdebug("Got initial spells list, %u spells.",count); + for(uint16 i = 0; i < count; i++) + { + recvPacket >> spellid >> spellslot; + logdebug("Initial Spell: id=%u slot=%u",spellid,spellslot); + // these data need to be added to MyCharacter later + } +} + diff --git a/src/Client/World/WorldSession.h b/src/Client/World/WorldSession.h index 6d0b361..7b7352b 100644 --- a/src/Client/World/WorldSession.h +++ b/src/Client/World/WorldSession.h @@ -90,7 +90,8 @@ private: void _HandleUpdateObjectOpcode(WorldPacket& recvPacket); void _HandleItemQuerySingleResponseOpcode(WorldPacket& recvPacket); void _HandleDestroyObjectOpcode(WorldPacket& recvPacket); - + void _HandleInitialSpellsOpcode(WorldPacket& recvPacket); + void _MovementUpdate(uint8 objtypeid, uint64 guid, WorldPacket& recvPacket); // Helper for _HandleUpdateObjectOpcode PseuInstance *_instance;