📄 arenamanager.cpp
字号:
// ArenaManager.cpp: implementation of the CArenaManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ArenaManager.h"
#include "Network.h"
#include "Menu.h"
#include "CharDataTable.h"
#include "CurrentMsgMgr.h"
#include "TeamBattle.h"
#include "Map.h"
extern char FightTeam[5][13];
extern int fight_map_live_man[4];
extern void OpenFightMapSignMenuOpen(int tema[]);
///////////////////////////////////////////////////////////////////////////////
// Global Member
///////////////////////////////////////////////////////////////////////////////
CArenaManager g_mgrArena;
CArenaManager* g_pArenaManager = &g_mgrArena;
///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////
CArenaLobby::CArenaLobby()
{
m_ltMember.clear();
}
CArenaLobby::~CArenaLobby()
{
ClearMember();
}
///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////
void CArenaLobby::AddMember(WORD idMember)
{
m_ltMember.push_back(idMember);
}
void CArenaLobby::DelMember(WORD idMember)
{
m_ltMember.remove(idMember);
}
void CArenaLobby::ClearMember()
{
m_ltMember.clear();
}
///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////
CArenaTeam::CArenaTeam(int nTeam) : m_nTeamNumber(nTeam)
{
m_ltMember.clear();
m_ltGambler.clear();
m_ltObserve.clear();
m_dwBattingMoney = 0;
m_fTeamProbability = 0.0;
}
CArenaTeam::~CArenaTeam()
{
ClearMember();
ClearGambler();
ClearObserve();
}
///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////
void CArenaTeam::AddMember(WORD idMember)
{
m_ltMember.push_back(idMember);
}
void CArenaTeam::DelMember(WORD idMember)
{
m_ltMember.remove(idMember);
}
void CArenaTeam::ClearMember()
{
m_ltMember.clear();
}
void CArenaTeam::AddGambler(WORD idGambler)
{
m_ltGambler.push_back(idGambler);
}
void CArenaTeam::DelGambler(WORD idGambler)
{
m_ltGambler.remove(idGambler);
}
void CArenaTeam::ClearGambler()
{
m_ltGambler.clear();
}
void CArenaTeam::AddObserve(WORD idObserve)
{
m_ltObserve.push_back(idObserve);
}
void CArenaTeam::DelObserve(WORD idObserve)
{
m_ltObserve.remove(idObserve);
}
void CArenaTeam::ClearObserve()
{
m_ltObserve.clear();
}
///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////
CArenaManager::CArenaManager()
{
Clear();
}
CArenaManager::~CArenaManager()
{
Reset();
for_each(m_vtTeam.begin(), m_vtTeam.end(), TDelete());
m_vtTeam.clear();
if (m_pLobby != NULL)
{
delete m_pLobby;
m_pLobby = NULL;
}
}
///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////
void CArenaManager::Clear()
{
m_pLobby = new CArenaLobby;
m_vtTeam.clear();
m_vtTeam.reserve(2);
m_vtTeam.push_back(new CArenaTeam(0));
m_vtTeam.push_back(new CArenaTeam(1));
m_nSelectGame = 0;
m_idLeader = 0;
m_dwBattingMoney = 0;
m_dwDividendMoney = 0;
m_dwReadyTime = 0;
m_nObserveTeam = ATI_RED_TEAM;
m_nGamblingTeam = ATI_RED_TEAM;
}
void CArenaManager::Reset()
{
m_pLobby->ClearMember();
for (ITOR_TEAM i = m_vtTeam.begin(); i != m_vtTeam.end(); ++i)
{
(*i)->ClearMember();
(*i)->ClearGambler();
(*i)->ClearObserve();
(*i)->SetBattingMoney(0);
(*i)->SetTeamProbability(0.0);
}
// 急琶等 酒饭唱 版扁厘 檬扁拳
m_nSelectGame = 0;
m_idLeader = 0;
m_dwBattingMoney = 0;
m_dwReadyTime = 0;
m_dwDividendMoney = 0;
m_nObserveTeam = ATI_RED_TEAM;
m_nGamblingTeam = ATI_RED_TEAM;
}
void CArenaManager::SendEnterLobby(int nGame)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_ENTER_LOBBY;
packet.h.header.size = sizeof(t_arena_enter_lobby);
packet.u.arena.arena_enter_lobby.nArenaGame = nGame;
::QueuePacket(&packet, 1);
// 酒饭唱 版扁厘 急琶
m_nSelectGame = nGame;
}
void CArenaManager::SendLeaveLobby()
{
::CallServer(CMD_ARENA_LEAVE_LOBBY);
}
void CArenaManager::SendEnterTeam(int nTeam)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_ENTER_TEAM;
packet.h.header.size = sizeof(t_arena_enter_team);
packet.u.arena.arena_enter_team.nArenaGame = m_nSelectGame;
packet.u.arena.arena_enter_team.nArenaTeam = nTeam;
::QueuePacket(&packet, 1);
}
void CArenaManager::SendLeaveTeam()
{
t_packet packet;
packet.h.header.type = CMD_ARENA_LEAVE_TEAM;
packet.h.header.size = sizeof(t_arena_leave_team);
packet.u.arena.arena_leave_team.nArenaGame = m_nSelectGame;
::QueuePacket(&packet, 1);
}
void CArenaManager::SendReadyGame(WORD idMember)
{ //< CSD-TW-030618
LPCHARACTER pMember = ::ReturnCharacterPoint(idMember);
if (pMember == NULL)
{
return;
}
if (IsLeader(idMember))
{
t_packet packet;
packet.h.header.type = CMD_ARENA_READY_GAME;
packet.h.header.size = sizeof(t_arena_ready_game);
packet.u.arena.arena_ready_game.dwDelay = TIME_READY;
::QueuePacket(&packet, 1);
}
} //> CSD-TW-030618
void CArenaManager::SendEnterObserve(int nTeam)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_ENTER_OBSERVE;
packet.h.header.size = sizeof(t_arena_enter_observe);
packet.u.arena.arena_enter_observe.nArenaGame = m_nSelectGame;
packet.u.arena.arena_enter_observe.nArenaTeam = nTeam;
::QueuePacket(&packet, 1);
m_nObserveTeam = nTeam;
}
void CArenaManager::SendEnterGambling(int nTeam, DWORD dwMoney)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_ENTER_GAMBLING;
packet.h.header.size = sizeof(t_arena_enter_gambling);
packet.u.arena.arena_enter_gambling.nArenaGame = m_nSelectGame;
packet.u.arena.arena_enter_gambling.nArenaTeam = nTeam;
packet.u.arena.arena_enter_gambling.dwBattingMoney = dwMoney;
::QueuePacket(&packet, 1);
m_nGamblingTeam = nTeam;
}
void CArenaManager::RecvAddLobby(t_arena_add_lobby* pPacket)
{
if (!IsSelectGame())
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 114));
return;
}
const WORD idMember = pPacket->idMember;
LPCHARACTER pMember = ::ReturnCharacterPoint(idMember);
if (pMember == NULL)
{
return;
}
if (m_pLobby->IsExistMember(idMember))
{
return;
}
m_pLobby->AddMember(idMember);
}
void CArenaManager::RecvDeleteLobby(t_arena_delete_lobby* pPacket)
{
if (!IsSelectGame())
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 114));
return;
}
const WORD idMember = pPacket->idMember;
LPCHARACTER pMember = ::ReturnCharacterPoint(idMember);
if (pMember == NULL)
{
return;
}
if (!m_pLobby->IsExistMember(idMember))
{
return;
}
m_pLobby->DelMember(idMember);
}
void CArenaManager::RecvAddTeam(t_arena_add_team* pPacket)
{
if (!IsSelectGame())
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 114));
return;
}
const DWORD idMember = pPacket->idMember;
LPCHARACTER pMember = ::ReturnCharacterPoint(idMember);
if (pMember == NULL)
{
return;
}
const int nTeam = pPacket->nTeam;
if (nTeam < 0 || nTeam > 1)
{
return;
}
if (m_vtTeam[nTeam]->IsExistMember(idMember))
{
return;
}
m_vtTeam[nTeam]->AddMember(idMember);
::AddCurrentStatusMessage(220, 220,
0,
lan->OutputMessage(3,44),
pMember->name,
FightTeam[nTeam]);
::OpenFightMapSignMenuOpen(fight_map_live_man);
}
void CArenaManager::RecvDeleteTeam(t_arena_delete_team* pPacket)
{
if (!IsSelectGame())
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 114));
return;
}
const WORD idMember = pPacket->idMember;
LPCHARACTER pMember = ::ReturnCharacterPoint(idMember);
if (pMember == NULL)
{
return;
}
const int nTeam = pPacket->nTeam;
if (nTeam < 0 || nTeam > 1)
{
return;
}
if (!m_vtTeam[nTeam]->IsExistMember(idMember))
{
return;
}
pMember->fight_map_team_num = 0;
m_vtTeam[nTeam]->DelMember(idMember);
::AddCurrentStatusMessage(200, 50,
50,
lan->OutputMessage(3,45),
pMember->name,
FightTeam[nTeam]);
if (IsLeader(idMember))
{
m_idLeader = 0;
}
::OpenFightMapSignMenuOpen(fight_map_live_man);
}
void CArenaManager::RecvAddGambling(t_arena_add_gambling* pPacket)
{
if (!IsSelectGame())
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 114));
return;
}
const WORD idGambler = pPacket->idGambler;
LPCHARACTER pGambler = ::ReturnCharacterPoint(pPacket->idGambler);
if (pGambler == NULL)
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -