Add structure and prevent spam for some LFG opcodes.

Thanks to Spp for help with researching CMSG_LFG_JOIN.
This commit is contained in:
XTZGZoReX 2010-03-11 20:52:28 +01:00
parent dbe089b66d
commit bd6d27998b
3 changed files with 37 additions and 16 deletions

View file

@ -147,38 +147,59 @@ static void AttemptAddMore(Player* _player)
} }
} }
void WorldSession::HandleLfgSetAutoJoinOpcode( WorldPacket & /*recv_data*/ ) void WorldSession::HandleLfgJoinOpcode( WorldPacket & recv_data )
{ {
sLog.outDebug("CMSG_LFG_SET_AUTOJOIN"); sLog.outDebug("CMSG_LFG_JOIN");
LookingForGroup_auto_join = true; LookingForGroup_auto_join = true;
uint8 counter1, counter2;
std::string comment;
recv_data >> Unused<uint32>(); // lfg roles
recv_data >> Unused<uint8>(); // unk1 (unused?)
recv_data >> Unused<uint8>(); // unk2 (unused?)
recv_data >> counter1;
for (uint8 i = 0; i < counter1; i++)
recv_data >> Unused<uint32>(); // queue block? (type/zone?)
recv_data >> counter2;
for (uint8 i = 0; i < counter2; i++)
recv_data >> Unused<uint8>(); // unk (unused?)
recv_data >> comment; // lfg comment
if(!_player) // needed because STATUS_AUTHED if(!_player) // needed because STATUS_AUTHED
return; return;
AttemptJoin(_player); AttemptJoin(_player);
} }
void WorldSession::HandleLfgClearAutoJoinOpcode( WorldPacket & /*recv_data*/ ) void WorldSession::HandleLfgLeaveOpcode( WorldPacket & /*recv_data*/ )
{ {
sLog.outDebug("CMSG_LFG_CLEAR_AUTOJOIN"); sLog.outDebug("CMSG_LFG_LEAVE");
LookingForGroup_auto_join = false; LookingForGroup_auto_join = false;
} }
void WorldSession::HandleLfmSetAutoFillOpcode( WorldPacket & /*recv_data*/ ) void WorldSession::HandleSearchLfgJoinOpcode( WorldPacket & recv_data )
{ {
sLog.outDebug("CMSG_LFM_SET_AUTOFILL"); sLog.outDebug("CMSG_SEARCH_LFG_JOIN");
LookingForGroup_auto_add = true; LookingForGroup_auto_add = true;
recv_data >> Unused<uint32>(); // join id?
if(!_player) // needed because STATUS_AUTHED if(!_player) // needed because STATUS_AUTHED
return; return;
AttemptAddMore(_player); AttemptAddMore(_player);
} }
void WorldSession::HandleLfmClearAutoFillOpcode( WorldPacket & /*recv_data*/ ) void WorldSession::HandleSearchLfgLeaveOpcode( WorldPacket & recv_data )
{ {
sLog.outDebug("CMSG_LFM_CLEAR_AUTOFILL"); sLog.outDebug("CMSG_SEARCH_LFG_LEAVE");
LookingForGroup_auto_add = false; LookingForGroup_auto_add = false;
recv_data >> Unused<uint32>(); // join id?
} }
void WorldSession::HandleLfgClearOpcode( WorldPacket & /*recv_data */ ) void WorldSession::HandleLfgClearOpcode( WorldPacket & /*recv_data */ )

View file

@ -886,10 +886,10 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
/*0x359*/ { "MSG_MOVE_START_ASCEND", STATUS_LOGGEDIN, &WorldSession::HandleMovementOpcodes }, /*0x359*/ { "MSG_MOVE_START_ASCEND", STATUS_LOGGEDIN, &WorldSession::HandleMovementOpcodes },
/*0x35A*/ { "MSG_MOVE_STOP_ASCEND", STATUS_LOGGEDIN, &WorldSession::HandleMovementOpcodes }, /*0x35A*/ { "MSG_MOVE_STOP_ASCEND", STATUS_LOGGEDIN, &WorldSession::HandleMovementOpcodes },
/*0x35B*/ { "SMSG_ARENA_TEAM_STATS", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x35B*/ { "SMSG_ARENA_TEAM_STATS", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x35C*/ { "CMSG_LFG_JOIN", STATUS_LOGGEDIN, &WorldSession::HandleLfgSetAutoJoinOpcode }, /*0x35C*/ { "CMSG_LFG_JOIN", STATUS_LOGGEDIN, &WorldSession::HandleLfgJoinOpcode },
/*0x35D*/ { "CMSG_LFG_LEAVE", STATUS_LOGGEDIN, &WorldSession::HandleLfgClearAutoJoinOpcode }, /*0x35D*/ { "CMSG_LFG_LEAVE", STATUS_LOGGEDIN, &WorldSession::HandleLfgLeaveOpcode },
/*0x35E*/ { "CMSG_SEARCH_LFG_JOIN", STATUS_LOGGEDIN, &WorldSession::HandleLfmSetAutoFillOpcode }, /*0x35E*/ { "CMSG_SEARCH_LFG_JOIN", STATUS_LOGGEDIN, &WorldSession::HandleSearchLfgJoinOpcode },
/*0x35F*/ { "CMSG_SEARCH_LFG_LEAVE", STATUS_LOGGEDIN, &WorldSession::HandleLfmClearAutoFillOpcode }, /*0x35F*/ { "CMSG_SEARCH_LFG_LEAVE", STATUS_LOGGEDIN, &WorldSession::HandleSearchLfgLeaveOpcode },
/*0x360*/ { "SMSG_UPDATE_LFG_LIST", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x360*/ { "SMSG_UPDATE_LFG_LIST", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x361*/ { "SMSG_LFG_PROPOSAL_DECLINED", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x361*/ { "SMSG_LFG_PROPOSAL_DECLINED", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x362*/ { "CMSG_LFG_PROPOSAL_RESULT", STATUS_LOGGEDIN, &WorldSession::Handle_NULL }, /*0x362*/ { "CMSG_LFG_PROPOSAL_RESULT", STATUS_LOGGEDIN, &WorldSession::Handle_NULL },

View file

@ -641,10 +641,10 @@ class MANGOS_DLL_SPEC WorldSession
void HandleSetDungeonDifficultyOpcode(WorldPacket& recv_data); void HandleSetDungeonDifficultyOpcode(WorldPacket& recv_data);
void HandleSetRaidDifficultyOpcode(WorldPacket& recv_data); void HandleSetRaidDifficultyOpcode(WorldPacket& recv_data);
void HandleMoveSetCanFlyAckOpcode(WorldPacket& recv_data); void HandleMoveSetCanFlyAckOpcode(WorldPacket& recv_data);
void HandleLfgSetAutoJoinOpcode(WorldPacket& recv_data); void HandleLfgJoinOpcode(WorldPacket& recv_data);
void HandleLfgClearAutoJoinOpcode(WorldPacket& recv_data); void HandleLfgLeaveOpcode(WorldPacket& recv_data);
void HandleLfmSetAutoFillOpcode(WorldPacket& recv_data); void HandleSearchLfgJoinOpcode(WorldPacket& recv_data);
void HandleLfmClearAutoFillOpcode(WorldPacket& recv_data); void HandleSearchLfgLeaveOpcode(WorldPacket& recv_data);
void HandleLfgClearOpcode(WorldPacket& recv_data); void HandleLfgClearOpcode(WorldPacket& recv_data);
void HandleLfmClearOpcode(WorldPacket& recv_data); void HandleLfmClearOpcode(WorldPacket& recv_data);
void HandleSetLfmOpcode(WorldPacket& recv_data); void HandleSetLfmOpcode(WorldPacket& recv_data);