DragonNest/Server/DNVillageServer/DNPvPLobbyField.cpp
2024-12-19 09:48:26 +08:00

166 lines
4.1 KiB
C++

#include "Stdafx.h"
#include "DNPvPLobbyField.h"
#include "DNUserSession.h"
#include "DNPvPRoomManager.h"
#include "DNPvPRoom.h"
#include "DNMasterConnection.h"
#include "DNLadderSystemManager.h"
#include "DNLadderRoom.h"
CDNPvPLobbyField::CDNPvPLobbyField()
{
}
CDNPvPLobbyField::~CDNPvPLobbyField()
{
}
int CDNPvPLobbyField::SendFieldMessage(CDNBaseObject *pSender, USHORT wMsg, TBaseData *pSenderData, TParamData *pParamData)
{
switch(wMsg)
{
case FM_CREATE:
{
if( !EnterObject(pSender) )
{
return -1;
}
break;
}
case FM_DESTROY:
{
if( !LeaveObject(pSender) )
{
return -1;
}
break;
}
case FM_CHAT:
{
CDNUserSession* pSession = static_cast<CDNUserSession*>(pSender);
if( !pSession )
{
return -1;
}
UINT32 uiPvPIndex = pSession->GetPvPIndex();
// ·Îºñ»óÅÂ
if( uiPvPIndex == 0 && pSession->bIsLadderUser() == false )
{
#if !defined( _FINAL_BUILD )
std::vector<std::wstring> tokens;
if( pParamData )
{
if (wcslen( pParamData->wszChatMsg ) > 0 )
{
TokenizeW( pParamData->wszChatMsg, tokens, L" " );
if( !tokens.empty() )
{
if( wcsicmp( tokens[0].c_str(), L"/userlist") == 0 )
{
if( g_pMasterConnection && g_pMasterConnection->GetActive() )
{
CSPVP_WAITUSERLIST TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.SortType = PvPCommon::WaitUserList::SortType::Null;
TxPacket.unPage = 0;
TxPacket.bIsAscend = false;
g_pMasterConnection->SendPvPWaitUserList( pSession->GetAccountDBID(), pSession->GetChannelID(), &TxPacket );
}
}
if( wcsicmp( tokens[0].c_str(), L"/·¡´õÃÊ´ëÀÀ´ä") == 0 && tokens.size() >= 3 )
{
LadderSystem::CS_INVITE_CONFIRM TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
TxPacket.bAccept = _ttoi(tokens[1].c_str()) ? true : false;
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), tokens[2].c_str(), (int)wcslen(tokens[2].c_str()) );
pSession->OnRecvPvPMessage( ePvP::CS_LADDER_INVITE_CONFIRM, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
}
}
}
}
#endif // #if !defined( _FINAL_BUILD )
for( UINT i=0 ; i<m_FieldBlocks.size() ; ++i )
m_FieldBlocks[i]->SendPvPLobbyMessage( pSender, wMsg, pSenderData, pParamData );
}
// PvP¹æ»óÅÂ
else if( uiPvPIndex > 0 )
{
#if !defined( _FINAL_BUILD )
std::vector<std::wstring> tokens;
if( pParamData )
{
if (wcslen( pParamData->wszChatMsg ) > 0 )
{
TokenizeW( pParamData->wszChatMsg, tokens, L" " );
if( !tokens.empty() )
{
}
}
}
#endif // #if !defined( _FINAL_BUILD )
CDNPvPRoom* pPvPRoom = CDNPvPRoomManager::GetInstance().GetPvPRoom( pSession->GetChannelID(), uiPvPIndex );
if( !pPvPRoom )
{
_DANGER_POINT();
return -1;
}
if (pParamData)
pPvPRoom->SendChat( pParamData->eChatType, pParamData->nChatSize, pSender->wszName(), pParamData->wszChatMsg );
}
else if( pSession->bIsLadderUser() )
{
#if defined( _WORK )
std::vector<std::wstring> tokens;
if( pParamData )
{
if (wcslen( pParamData->wszChatMsg ) > 0 ){
TokenizeW( pParamData->wszChatMsg, tokens, L" " );
if( wcsicmp( tokens[0].c_str(), L"/·¡´õÃÊ´ë") == 0 )
{
if( tokens.size() < 2 )
return 0;
LadderSystem::CS_INVITE TxPacket;
memset( &TxPacket, 0, sizeof(TxPacket) );
_wcscpy( TxPacket.wszCharName, _countof(TxPacket.wszCharName), tokens[1].c_str(), (int)wcslen(tokens[1].c_str()) );
pSession->OnRecvPvPMessage( ePvP::CS_LADDER_INVITE, reinterpret_cast<char*>(&TxPacket), sizeof(TxPacket) );
return 1;
}
}
}
#endif // #if defined( _WORK )
LadderSystem::CRoom* pRoom = LadderSystem::CManager::GetInstance().GetRoomPtr( pSession->GetCharacterName() );
if( pRoom == NULL )
{
_DANGER_POINT();
return -1;
}
if (pParamData)
pRoom->SendChat( pParamData->eChatType, pParamData->nChatSize, pSender->wszName(), pParamData->wszChatMsg );
}
break;
}
}
return 1;
}