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;
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
return;
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;
}
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;
recv_data >> Unused<uint32>(); // join id?
if(!_player) // needed because STATUS_AUTHED
return;
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;
recv_data >> Unused<uint32>(); // join id?
}
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 },
/*0x35A*/ { "MSG_MOVE_STOP_ASCEND", STATUS_LOGGEDIN, &WorldSession::HandleMovementOpcodes },
/*0x35B*/ { "SMSG_ARENA_TEAM_STATS", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x35C*/ { "CMSG_LFG_JOIN", STATUS_LOGGEDIN, &WorldSession::HandleLfgSetAutoJoinOpcode },
/*0x35D*/ { "CMSG_LFG_LEAVE", STATUS_LOGGEDIN, &WorldSession::HandleLfgClearAutoJoinOpcode },
/*0x35E*/ { "CMSG_SEARCH_LFG_JOIN", STATUS_LOGGEDIN, &WorldSession::HandleLfmSetAutoFillOpcode },
/*0x35F*/ { "CMSG_SEARCH_LFG_LEAVE", STATUS_LOGGEDIN, &WorldSession::HandleLfmClearAutoFillOpcode },
/*0x35C*/ { "CMSG_LFG_JOIN", STATUS_LOGGEDIN, &WorldSession::HandleLfgJoinOpcode },
/*0x35D*/ { "CMSG_LFG_LEAVE", STATUS_LOGGEDIN, &WorldSession::HandleLfgLeaveOpcode },
/*0x35E*/ { "CMSG_SEARCH_LFG_JOIN", STATUS_LOGGEDIN, &WorldSession::HandleSearchLfgJoinOpcode },
/*0x35F*/ { "CMSG_SEARCH_LFG_LEAVE", STATUS_LOGGEDIN, &WorldSession::HandleSearchLfgLeaveOpcode },
/*0x360*/ { "SMSG_UPDATE_LFG_LIST", 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 },

View file

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