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

📄 monsterarena.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
字号:
// MonsterArena.cpp: implementation of the CMonsterArena class.
//
//////////////////////////////////////////////////////////////////////

#include "..\stdafx.h"
#include "MonsterArena.h"

#include "RegenManager.h"
//#include "Kein_item.h"

///////////////////////////////////////////////////////////////////////////////
// Global Function
///////////////////////////////////////////////////////////////////////////////

extern int DeleteINVItem(CHARLIST *pChar,int nItemNumber,int nDelCount);

void SaveMonsterArena(int idGame, int nPoint, CArenaTeam::LIST_MEMBER& rMember)
{	//< CSD-030603
	char szFile[FILENAME_MAX];											
	sprintf(szFile, "Event/MonsterArena.txt");
	
	FILE* fp = fopen(szFile, "at+");
	if (fp == NULL)  return;
	
	time_t nowTime;
	time(&nowTime);
	tm* pNow = localtime(&nowTime);

	const int nYear = pNow->tm_year + 1900;
	const int nMon  = pNow->tm_mon + 1;
	const int nDay  = pNow->tm_mday;
	const int nHour = pNow->tm_hour;
	const int nMin  = pNow->tm_min;
	const int nSec  = pNow->tm_sec;

	fprintf(fp, "%04d-%02d-%02d ", nYear, nMon, nDay);
	fprintf(fp, "%02d:%02d ", nHour, nMin);
	fprintf(fp, "%2d %6d ", idGame, nPoint);

	for (CArenaTeam::ITOR_MEMBER i = rMember.begin(); i != rMember.end(); ++i)
	{
		fprintf(fp, "%s ", (*i)->Name);
	}

	fprintf(fp, "\n");
	fclose(fp);
}	//> CSD-030603

///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////

CMonsterArena::CMonsterArena(int nIndex, int nType)
{
	m_nIndex = nIndex;
	m_nArenaType = nType;
}

CMonsterArena::~CMonsterArena()
{

}

///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////

void CMonsterArena::StartGame(DWORD dwTime)
{
	CBaseArena::StartGame(dwTime);

	for (ITOR_TEAM i = m_ltTeam.begin(); i != m_ltTeam.end(); ++i)
	{
		const int nTeam = (*i)->GetTeamNumber();
		SendKillCount(nTeam, 0);

		const int nHunt = (*i)->GetHuntNumber();
		g_pRegenManager->Ready(nHunt);
	}
}

void CMonsterArena::EndGame(CArenaInfo* pArena)
{
	//阁胶磐 酒饭唱 弥碍磊傈 捞亥飘 soto-030605
	for (ITOR_TEAM t = m_ltTeam.begin(); t != m_ltTeam.end(); ++t)
	{
		CArenaTeam* pTeam = *t;

		CArenaTeam::LIST_MEMBER ltMember = pTeam->GetMemberSet();
		for (CArenaTeam::ITOR_MEMBER i = ltMember.begin(); i != ltMember.end(); ++i)
		{
			CHARLIST* pMember = *i;
			
			//DeleteINVItem(pMember,10247,1); // 030617 kyo
			DeleteINVItem(pMember,10256,1); // 030617 kyo
		}
	}
	
	CBaseArena::EndGame(pArena);

	for (ITOR_TEAM i = m_ltTeam.begin(); i != m_ltTeam.end(); ++i)
	{
		const int nHunt = (*i)->GetHuntNumber();
		g_pRegenManager->Remove(nHunt);

		(*i)->ResetKillCount();
	}
}
	
bool CMonsterArena::PlayGame(DWORD dwTime)
{
	DWORD dwRemainTime = m_pState->GetRemainTime(dwTime);

	for (ITOR_TEAM i = m_ltTeam.begin(); i != m_ltTeam.end(); ++i)
	{
		const int nHunt = (*i)->GetHuntNumber();
		g_pRegenManager->Regenerate(nHunt);
	}

	if (dwRemainTime <= 0)
	{
		for (ITOR_TEAM j = m_ltTeam.begin(); j != m_ltTeam.end(); ++j)
		{
			DoResult(*j);
		}

		return false;
	}
	
	return CBaseArena::PlayGame(dwTime);
}

///////////////////////////////////////////////////////////////////////////////
// Protected Method
///////////////////////////////////////////////////////////////////////////////

void CMonsterArena::DoResult(CArenaTeam* pTeam)
{
	for (ITOR_TEAM i = m_ltTeam.begin(); i != m_ltTeam.end(); ++i)
	{
		CArenaTeam* pTemp = *i;

		if (pTemp == pTeam)
		{
			continue;
		}
			
		if (pTemp->GetKillCount() < pTeam->GetKillCount())
		{
			pTeam->SetGameResult(FST_WIN);
		}
		else
		{
			pTeam->SetGameResult(FST_DEFEAT);
		}
	}

	CBaseArena::DoResult(pTeam);
}

void CMonsterArena::DoVictory(CArenaTeam* pTeam)
{
	CBaseArena::DoVictory(pTeam);

	CArenaTeam::LIST_MEMBER ltMember = pTeam->GetMemberSet();

	for (CArenaTeam::ITOR_MEMBER i = ltMember.begin(); i != ltMember.end(); ++i)
	{
		CHARLIST* pMember = *i;

		for (ITOR_BONUS j = m_ltBonus.begin(); j != m_ltBonus.end(); ++j)
		{
			if ((*j)->GiveBonus(pMember))
			{
				break;
			}
		}
	}

	::SaveMonsterArena(GetGameIndex(), pTeam->GetKillCount(), ltMember); // CSD-030603
}
	
void CMonsterArena::DoDefeat(CArenaTeam* pTeam)
{
	CBaseArena::DoDefeat(pTeam);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -