⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arenamanager.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -