📄 basearena.cpp
字号:
// BaseArena.cpp: implementation of the CBaseArena class.
//
//////////////////////////////////////////////////////////////////////
#include "..\stdafx.h"
#include "BaseArena.h"
#include "CoreArena.h"
#include "StoneArena.h"
#include "MonsterArena.h"
///////////////////////////////////////////////////////////////////////////////
// Static Method
///////////////////////////////////////////////////////////////////////////////
CBaseArena* CBaseArena::CreateArena(int nIndex, int nType)
{
CBaseArena* pArena = NULL;
switch (nType)
{
case AT_CORE:
{
pArena = new CCoreArena(nIndex, nType);
break;
}
case AT_STONE:
{
pArena = new CStoneArena(nIndex, nType);
break;
}
case AT_MONSTER:
{
pArena = new CMonsterArena(nIndex, nType);
break;
}
}
return pArena;
}
///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////
CBaseArena::CBaseArena()
{
Clear();
}
CBaseArena::~CBaseArena()
{
ClearTeam();
ClearBonus();
m_pLeader = NULL;
SAFE_DELETE(m_pState);
SAFE_DELETE(m_pGambling);
SAFE_DELETE(m_pObserve);
SAFE_DELETE(m_pLobby);
}
///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////
void CBaseArena::Clear()
{
m_pState = NULL;
m_pGambling = NULL;
m_pObserve = NULL;
m_pLobby = NULL;
m_ltTeam.clear();
m_ltBonus.clear();
m_nIndex = 0;
m_nArenaType = AT_UNKNOWN;
m_pLeader = NULL;
}
void CBaseArena::AddTeam(CArenaTeam* pTeam)
{
m_ltTeam.push_back(pTeam);
}
void CBaseArena::DelTeam(CArenaTeam* pTeam)
{
m_ltTeam.remove(pTeam);
}
void CBaseArena::ClearTeam()
{
for_each(m_ltTeam.begin(), m_ltTeam.end(), TDelete());
m_ltTeam.clear();
}
void CBaseArena::AddBonus(CArenaBonus* pBonus)
{
m_ltBonus.push_back(pBonus);
}
void CBaseArena::DelBonus(CArenaBonus* pBonus)
{
m_ltBonus.remove(pBonus);
}
void CBaseArena::ClearBonus()
{
for_each(m_ltBonus.begin(), m_ltBonus.end(), TDelete());
m_ltBonus.clear();
}
bool CBaseArena::AddLobby(int nGame, CHARLIST* pMember)
{
if (m_pLobby->IsExistMember(pMember))
{
pMember->Message(MK_INFORMATION, 1, 104);
return false;
}
pMember->SetJoinArenaGame(this);
m_pLobby->AddMember(nGame, pMember);
SendAddLobby(pMember);
return true;
}
bool CBaseArena::DelLobby(CHARLIST* pMember)
{
if (!m_pLobby->IsExistMember(pMember))
{
return false;
}
SendDeleteLobby(pMember);
m_pLobby->DelMember(pMember);
return true;
}
bool CBaseArena::AddTeam(int nTeam, CHARLIST* pMember)
{ //< CSD-030930
for (ITOR_TEAM i = m_ltTeam.begin(); i != m_ltTeam.end(); ++i)
{
if ((*i)->IsExistMember(pMember))
{
pMember->Message(MK_INFORMATION, 1, 105);
return false;
}
if ((*i)->IsExistObserve(pMember))
{
pMember->Message(MK_INFORMATION, 1, 106);
return false;
}
if ((*i)->IsExistGambler(pMember))
{
pMember->Message(MK_INFORMATION, 1, 123);
return false;
}
}
CArenaTeam* pTeam = GetArenaTeam(nTeam);
if (pTeam == NULL)
{
pMember->Message(MK_INFORMATION, 1, 107);
return false;
}
if (pTeam->GetMemberCount() >= MAX_TEAM_NUMBER)
{
pMember->Message(MK_INFORMATION, 1, 119);
return false;
}
if (m_pLobby->IsExistMember(pMember))
{
SendDeleteLobby(pMember);
m_pLobby->DelMember(pMember);
}
pMember->SetJoinArenaTeam(pTeam);
pTeam->AddMember(pMember);
SendAddTeam(nTeam, pMember);
return true;
} //> CSD-030930
bool CBaseArena::DelTeam(CHARLIST* pMember)
{
CArenaTeam* pTeam = pMember->GetJoinArenaTeam();
if (pTeam == NULL)
{
return false;
}
if (!pTeam->IsExistMember(pMember))
{
return false;
}
const int nTeam = pTeam->GetTeamNumber();
SendDeleteTeam(nTeam, pMember);
pTeam->DelMember(pMember);
return true;
}
bool CBaseArena::AddObserve(int nTeam, CHARLIST* pMember)
{
CArenaTeam* pTeam = GetArenaTeam(nTeam);
if (pTeam == NULL)
{
pMember->Message(MK_INFORMATION, 1, 107);
return false;
}
if (pTeam->IsEmptyMember())
{
pMember->Message(MK_INFORMATION, 1, 108);
return false;
}
if (pTeam->IsExistMember(pMember))
{
pMember->Message(MK_INFORMATION, 1, 101);
return false;
}
if (pTeam->IsExistObserve(pMember))
{
pTeam->DelObserve(pMember);
}
// 包傈丰 拌魂
if (!m_pObserve->IsEnoughMoney(pMember))
{
pMember->Message(MK_INFORMATION, 1, 109);
return false;
}
pMember->SetJoinArenaTeam(pTeam);
pTeam->AddObserve(pMember);
SendAddObserve(nTeam, pMember);
return true;
}
bool CBaseArena::DelObserve(CHARLIST* pMember)
{
CArenaTeam* pTeam = pMember->GetJoinArenaTeam();
if (pTeam == NULL)
{
return false;
}
if (!pTeam->IsExistObserve(pMember))
{
return false;
}
const int nTeam = pTeam->GetTeamNumber();
SendDeleteObserve(nTeam, pMember);
pTeam->DelObserve(pMember);
return true;
}
bool CBaseArena::AddGambler(int nTeam, CHARLIST* pMember, DWORD dwMoney)
{
for (ITOR_TEAM i = m_ltTeam.begin(); i != m_ltTeam.end(); ++i)
{
CArenaTeam* pTeam = *i;
if (!m_pGambling->IsEnableGamblerCount(pTeam))
{
pMember->Message(MK_SHORTAGE, 1, 110);
return false;
}
}
if (!m_pGambling->IsEnableBattingMoney(dwMoney))
{
pMember->Message(MK_SHORTAGE, 1, 111);
return false;
}
if (pMember->GetBankMoney() < dwMoney)
{
pMember->Message(MK_SHORTAGE, 1, 112);
return false;
}
CArenaTeam* pTeam = GetArenaTeam(nTeam);
if (pTeam == NULL)
{
pMember->Message(MK_INFORMATION, 1, 107);
return false;
}
if (pTeam->IsEmptyMember())
{
pMember->Message(MK_INFORMATION, 1, 113);
return false;
}
if (pTeam->IsExistGambler(pMember))
{
pTeam->DelGambler(pMember);
}
pMember->SetJoinArenaTeam(pTeam);
pTeam->AddGambler(pMember, dwMoney);
SendAddGambling(nTeam, pMember);
return true;
}
bool CBaseArena::DelGambler(CHARLIST* pMember)
{
CArenaTeam* pTeam = pMember->GetJoinArenaTeam();
if (pTeam == NULL)
{
return false;
}
if (!pTeam->IsExistGambler(pMember))
{
return false;
}
const int nTeam = pTeam->GetTeamNumber();
SendDeleteGambling(nTeam, pMember);
pTeam->DelGambler(pMember);
return true;
}
void CBaseArena::SendAddLobby(CHARLIST* pMember)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_ADD_LOBBY;
packet.h.header.size = sizeof(t_arena_add_lobby);
packet.u.arena.arena_add_lobby.idMember = pMember->GetServerID();
SendPacketAll(&packet);
}
void CBaseArena::SendDeleteLobby(CHARLIST* pMember)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_DELETE_LOBBY;
packet.h.header.size = sizeof(t_arena_delete_lobby);
packet.u.arena.arena_delete_lobby.idMember = pMember->GetServerID();
SendPacketAll(&packet);
}
void CBaseArena::SendAddTeam(int nTeam, CHARLIST* pMember)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_ADD_TEAM;
packet.h.header.size = sizeof(t_arena_add_team);
packet.u.arena.arena_add_team.idMember = pMember->GetServerID();
packet.u.arena.arena_add_team.nTeam = nTeam;
SendPacketAll(&packet);
}
void CBaseArena::SendDeleteTeam(int nTeam, CHARLIST* pMember)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_DELETE_TEAM;
packet.h.header.size = sizeof(t_arena_delete_team);
packet.u.arena.arena_delete_team.idMember = pMember->GetServerID();
packet.u.arena.arena_delete_team.nTeam = nTeam;
SendPacketAll(&packet);
}
void CBaseArena::SendAddGambling(int nTeam, CHARLIST* pGambler)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_ADD_GAMBLING;
packet.h.header.size = sizeof(t_arena_add_gambling);
packet.u.arena.arena_add_gambling.idGambler = pGambler->GetServerID();
packet.u.arena.arena_add_gambling.nTeam = nTeam;
SendPacketAll(&packet);
}
void CBaseArena::SendDeleteGambling(int nTeam, CHARLIST* pGambler)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_DELETE_GAMBLING;
packet.h.header.size = sizeof(t_arena_delete_gambling);
packet.u.arena.arena_delete_gambling.idGambler = pGambler->GetServerID();
packet.u.arena.arena_delete_gambling.nTeam = nTeam;
SendPacketAll(&packet);
}
void CBaseArena::SendAddObserve(int nTeam, CHARLIST* pObserve)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_ADD_OBSERVE;
packet.h.header.size = sizeof(t_arena_add_observe);
packet.u.arena.arena_add_observe.idObserve = pObserve->GetServerID();
packet.u.arena.arena_add_observe.nTeam = nTeam;
SendPacketAll(&packet);
}
void CBaseArena::SendDeleteObserve(int nTeam, CHARLIST* pObserve)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_DELETE_OBSERVE;
packet.h.header.size = sizeof(t_arena_delete_observe);
packet.u.arena.arena_delete_observe.idObserve = pObserve->GetServerID();
packet.u.arena.arena_delete_observe.nTeam = nTeam;
SendPacketAll(&packet);
}
void CBaseArena::SendLeaderInfo(CHARLIST* pMember)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_LEADER_INFO;
packet.h.header.size = sizeof(t_arena_leader_info);
packet.u.arena.arena_leader_info.idLeader = pMember->GetServerID();
SendPacketAll(&packet);
// 府歹肺 汲沥
m_pLeader = pMember;
}
void CBaseArena::SendGameInfo(CHARLIST* pTarget, WORD wPort)
{ //< CSD-TW-030701
t_packet packet;
packet.h.header.size = sizeof(t_arena_game_info);
packet.h.header.type = CMD_ARENA_GAME_INFO;
packet.u.arena.arena_game_info.wPort = wPort;
packet.u.arena.arena_game_info.wMemberCount = GetGameMemberCount();
if (m_pLeader != NULL)
{
strcpy(packet.u.arena.arena_game_info.szLeader, m_pLeader->Name);
}
else
{
strcpy(packet.u.arena.arena_game_info.szLeader, " ");
}
::QueuePacket(connections, pTarget->GetServerID(), &packet, 1);
} //> CSD-TW-030701
void CBaseArena::SendStartGame(CHARLIST* pLeader)
{
t_packet packet;
packet.h.header.type = CMD_ARENA_START_GAME;
packet.h.header.size = sizeof(t_arena_start_game);
packet.u.arena.arena_start_game.idLeader = pLeader->GetServerID();
::QueuePacket(connections, pLeader->GetServerID(), &packet, 1);
}
void CBaseArena::SendRemainCount(int nTeam, int nCount)
{ //< CSD-031106
t_packet packet;
packet.h.header.size = sizeof(t_arena_game_message1);
packet.h.header.type = CMD_ARENA_GAME_MESSAGE1;
packet.u.arena.arena_game_message1.nTeamNumber = nTeam;
packet.u.arena.arena_game_message1.nMsgType = 6;
packet.u.arena.arena_game_message1.nGameData = nCount;
SendPacketTeam(&packet);
} //> CSD-031106
void CBaseArena::SendRemainTime(CHARLIST* pTarget, DWORD dwTime)
{ //< CSD-TW-030627
t_packet packet;
packet.h.header.size = sizeof(t_arena_game_message4);
packet.h.header.type = CMD_ARENA_GAME_MESSAGE4;
packet.u.arena.arena_game_message4.dwRemainMinute = m_pState->GetRemainTime(dwTime)/60;
::QueuePacket(connections, pTarget->GetServerID(), &packet, 1);
} //> CSD-TW-030627
void CBaseArena::SendKillCount(int nTeam, int nCount)
{ //< CSD-031106
t_packet packet;
packet.h.header.size = sizeof(t_arena_game_message1);
packet.h.header.type = CMD_ARENA_GAME_MESSAGE1;
packet.u.arena.arena_game_message1.nTeamNumber = nTeam;
packet.u.arena.arena_game_message1.nMsgType = 6;
packet.u.arena.arena_game_message1.nGameData = nCount;
SendPacketTeam(&packet);
} //> CSD-031106
void CBaseArena::SendOccupyStone(int nTeam, int nCount)
{ //< CSD-031106
t_packet packet;
packet.h.header.size = sizeof(t_arena_game_message1);
packet.h.header.type = CMD_ARENA_GAME_MESSAGE1;
packet.u.arena.arena_game_message1.nTeamNumber = nTeam;
packet.u.arena.arena_game_message1.nMsgType = 6;
packet.u.arena.arena_game_message1.nGameData = nCount;
SendPacketTeam(&packet);
} //> CSD-031106
void CBaseArena::SendGameMessage(int nTeam, int nType, int nData)
{ //< CSD-031106
t_packet packet;
packet.h.header.size = sizeof(t_arena_game_message1);
packet.h.header.type = CMD_ARENA_GAME_MESSAGE1;
packet.u.arena.arena_game_message1.nTeamNumber = nTeam;
packet.u.arena.arena_game_message1.nMsgType = nType;
packet.u.arena.arena_game_message1.nGameData = nData;
SendPacketTeam(&packet);
} //> CSD-031106
void CBaseArena::SendGameMessage(CHARLIST* pCaster, CHARLIST* pTarget)
{
if (pCaster->GetJoinArenaGame() != this)
{
return;
}
if (pTarget->GetJoinArenaGame() != this)
{
return;
}
CArenaTeam* pTeam1 = pCaster->GetJoinArenaTeam();
if (pTeam1 == NULL)
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -