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

📄 battle_murimfield.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	switch( m_MurimBattleInfo.wMurimBattleKind )
	{
	case eMurimBattle_MaxKill:
		Judge_MaxKill();
		break;
	}	

	// ¸ðµç °ÔÀÓÀº ±âº»ÀûÀ¸·Î ½Ã°£ Á¦ÇÑ ÀÖÀ½.
	Judge_TimeLimit();

	return FALSE;
}

void CBattle_MurimField::Victory( int WinnerTeamNum, int LoserTeamNum )
{
	CBattle::Victory( WinnerTeamNum, LoserTeamNum );

#ifdef _MAPSERVER_	
	MSG_DWORD2 msg;
	msg.Category = MP_MURIMNET;
	msg.Protocol = MP_MURIMNET_NOTIFYTOMN_GAMEEND;
	msg.dwData1 = GetBattleID();
	msg.dwData2 = WinnerTeamNum;

	g_pServerTable->SetPositionHead();
	SERVERINFO* pAgentInfo = g_pServerTable->GetNextAgentServer();
	if(pAgentInfo == NULL)
	{
		ASSERT(0);
		return;
	}

	PACKEDDATA_OBJ->SendToMapServer( pAgentInfo->dwConnectionIndex, 99, &msg, sizeof(msg) );
#else
	if( HERO->GetBattleTeam() == WinnerTeamNum )
		m_pCurShowImage = &m_ImageWin;
	else if( HERO->GetBattleTeam() == LoserTeamNum )
		m_pCurShowImage = &m_ImageLose;
	else
		m_pCurShowImage = NULL;

	m_vImageScale.x = m_vImageScale.y = 3.0f;
	m_vImagePos.x = (1024 - 128 * m_vImageScale.x ) / 2;	//128 = width
	m_vImagePos.y = ( 768 - 42 * m_vImageScale.y ) / 2;		//42 = height

	//AutoAttack¸ØÃã
//	HERO->DisableAutoAttack();					//°ø°ÝÁß ÀÌ´ø°Å Ãë¼ÒµÇ³ª?
//	HERO->SetNextAction(NULL);			//½ºÅ³ ¾²´ø°Íµµ Ãë¼ÒµÇ³ª?
#endif
}

void CBattle_MurimField::Draw()
{
	CBattle::Draw();

#ifdef _MAPSERVER_
	MSG_DWORD2 msg;
	msg.Category = MP_MURIMNET;
	msg.Protocol = MP_MURIMNET_NOTIFYTOMN_GAMEEND;
	msg.dwData1 = GetBattleID();
	msg.dwData2 = 2;
	
	g_pServerTable->SetPositionHead();
	SERVERINFO* pAgentInfo = g_pServerTable->GetNextAgentServer();
	if(pAgentInfo == NULL)
	{
		ASSERT(0);
		return;
	}

	PACKEDDATA_OBJ->SendToMapServer( pAgentInfo->dwConnectionIndex, 99, &msg, sizeof(msg) );
#else
	m_pCurShowImage = &m_ImageDraw;

	m_vImageScale.x = m_vImageScale.y = 3.0f;
	m_vImagePos.x = (1024 - 128 * m_vImageScale.x ) / 2;	//128 = width
	m_vImagePos.y = ( 768 - 42 * m_vImageScale.y ) / 2;		//42 = height
	
	//AutoAttack¸ØÃã
//	HERO->DisableAutoAttack();					//°ø°ÝÁß ÀÌ´ø°Å Ãë¼ÒµÇ³ª?
//	HERO->SetNextAction(NULL);			//½ºÅ³ ¾²´ø°Íµµ Ãë¼ÒµÇ³ª?
#endif	
}

void CBattle_MurimField::Result()
{
	switch( m_MurimBattleInfo.wMurimBattleReward )
	{
	case 0:
		break;

	case 1:
		Result_Money();
		break;
	}

	// °á°ú º¸´Â ½Ã°£ üũ
	DWORD ElapTime = gCurTime - m_BattleInfo.BattleTime;
	if( ElapTime > BATTLE_MURIMFIELD_RESULTTIME )
	{
		MSGBASE msg;
		msg.Category = MP_MURIMNET;
		msg.Protocol = MP_MURIMNET_RETURNTOMURIMNET_ACK;

		ToEachTeam( pTeam )
			pTeam->SendTeamMsg( &msg, sizeof(msg) );
		EndToEachTeam

		SetDestroyFlag();
	}
}

BOOL CBattle_MurimField::Judge_MaxKill()
{
	CBattleTeam_MurimField* pTheTeam = GetTeam(eBattleTeam1);
	CBattleTeam_MurimField* pOtherTeam = GetTeam(eBattleTeam2);
	MURIMFIELD_TEAMINFO* pTheTeamInfo = pTheTeam->GetTeamInfo();
	MURIMFIELD_TEAMINFO* pOtherTeamInfo = pOtherTeam->GetTeamInfo();

//	if( pTheTeamInfo->TotalKill >= m_MurimBattleInfo.dwValue )
	if( pTheTeamInfo->TotalKill >= 10 )
	{
		Victory( eBattleTeam1, eBattleTeam2 );
		return TRUE;
	}
//	if( pOtherTeamInfo->TotalKill >= m_MurimBattleInfo.dwValue )
	if( pOtherTeamInfo->TotalKill >= 10 )
	{
		Victory( eBattleTeam2, eBattleTeam1 );
		return TRUE;
	}	

	return FALSE;
}

BOOL CBattle_MurimField::Judge_TimeLimit()
{
	CBattleTeam_MurimField* pTheTeam = GetTeam(eBattleTeam1);
	CBattleTeam_MurimField* pOtherTeam = GetTeam(eBattleTeam2);
	MURIMFIELD_TEAMINFO* pTheTeamInfo = pTheTeam->GetTeamInfo();
	MURIMFIELD_TEAMINFO* pOtherTeamInfo = pOtherTeam->GetTeamInfo();
	
	DWORD ElapsedTime = gCurTime - m_BattleInfo.BattleTime;
	if( ElapsedTime > BATTLE_MURIMFIELD_FIGHTTIME )
	{
		if( pTheTeamInfo->TotalKill > pOtherTeamInfo->TotalKill )
			Victory( eBattleTeam1, eBattleTeam2 );
		else if( pTheTeamInfo->TotalKill < pOtherTeamInfo->TotalKill )
			Victory( eBattleTeam2, eBattleTeam1 );
		else
			Draw();
	}

	return FALSE;
}

BOOL CBattle_MurimField::Result_Money()
{
	// µ·ÀÌ °É·ÁÀÖ´Â °æ¿ì ó¸®ÇÑ´Ù.
	
	return TRUE;
}

#ifdef _MAPSERVER_	// Battle Á¤º¸ °ü·Ã
void CBattle_MurimField::GetBattleInfo( char* pInfo, WORD* size )
{
	MSG_BATTLESETTING_SYN_MURIMFIELD* Info = (MSG_BATTLESETTING_SYN_MURIMFIELD*)pInfo;
	memcpy( Info, &m_BattleInfo, sizeof(BATTLE_INFO_BASE) );

	ToEachTeam( pTeam )
		CBattleTeam_MurimField* pTeamMF = (CBattleTeam_MurimField*)pTeam;
		pTeamMF->GetTeamInfo( &Info->TeamInfo[TeamNumber] );
	EndToEachTeam

	*size = sizeof(MSG_BATTLESETTING_SYN_MURIMFIELD);
}
#endif


#ifdef _MHCLIENT_
#include "interface/cFont.h"
// ÀÎÅÍÆäÀ̽º´Â ±×¸² ¹× ±âȹÀÌ ³ª¿À´Â´ë·ç....
void CBattle_MurimField::Render()
{
	// °á°ú ÀÎÅÍÆäÀ̽º ±¸¼º. ( Àӽà )
	if( m_pCurShowImage )
		m_pCurShowImage->RenderSprite( &m_vImageScale, NULL, 0.0f, &m_vImagePos, 0xffffffff );

	DWORD ElapsedTime = gCurTime-m_BattleInfo.BattleTime;
	switch( m_BattleInfo.BattleState )
	{
	case eBATTLE_STATE_READY:
		{
			DWORD RemainTime = BATTLE_MURIMFIELD_READYTIME > ElapsedTime ? BATTLE_MURIMFIELD_READYTIME - ElapsedTime : 0;
			m_ImageNumber.SetNumber( RemainTime / 1000 );
			m_ImageNumber.Render();
		}
		break;

	case eBATTLE_STATE_FIGHT:
		{
			DWORD RemainTime = BATTLE_MURIMFIELD_FIGHTTIME > ElapsedTime ? BATTLE_MURIMFIELD_FIGHTTIME - ElapsedTime : 0;
			m_ImageNumber.SetNumber( RemainTime / 1000 );
			m_ImageNumber.Render();
		}
		break;

	case eBATTLE_STATE_RESULT:
		{
		}
		break;
	}
	
	MURIMFIELD_TEAMINFO *pOurTeam, *pOtherTeam/*, *pObserver */;

	if( HERO->GetBattleTeam() == eBattleTeam1 )
	{
		pOurTeam = GetTeam(eBattleTeam1)->GetTeamInfo();
		pOtherTeam = GetTeam(eBattleTeam2)->GetTeamInfo();
//		pObserver = GetTeam(eBattleTeam_Observer)->GetTeamInfo();
	}
	else if( HERO->GetBattleTeam() == eBattleTeam2 )
	{
		pOurTeam = GetTeam(eBattleTeam2)->GetTeamInfo();
		pOtherTeam = GetTeam(eBattleTeam1)->GetTeamInfo();
//		pObserver = GetTeam(eBattleTeam_Observer)->GetTeamInfo();
	}
	else
	{
		pOurTeam = GetTeam(eBattleTeam1)->GetTeamInfo();
		pOtherTeam = GetTeam(eBattleTeam2)->GetTeamInfo();
//		pObserver = GetTeam(eBattleTeam_Observer)->GetTeamInfo();
	}

	RECT rect;
	char temp[256];
	int pos, n;

	// Total Score
	sprintf( temp, "Total Score is Our Team( %d ) : Other Team( %d )", pOurTeam->TotalKill, pOtherTeam->TotalKill );
	SetRect( &rect, 150, 10, 250, 25 );
	CFONT_OBJ->RenderFont( 0, temp, strlen(temp), &rect, 0xffffffff );

	// Our Team
	sprintf( temp, "- Our Team Member -" );
	SetRect( &rect, 10, 100, 110, 115 );
	CFONT_OBJ->RenderFont( 0, temp, strlen(temp), &rect, 0xff00ffff );	
	for( n = 0; n < MAX_MURIMFIELD_MEMBERNUM; ++n )
	{
		BATTLE_TEAMMEMBER_INFO* pMemberInfo = &pOurTeam->TeamMember[n];
		if( pMemberInfo->MemberID )
		{
			sprintf( temp, "%s (%d-%d)", pMemberInfo->MemberName, pMemberInfo->MemberKillNum, pMemberInfo->MemberDieNum );
			SetRect( &rect, 10, pos*15+115, 110, pos*15+130 );
			CFONT_OBJ->RenderFont( 0, temp, strlen(temp), &rect, 0xff00ffff );
			pos++;
		}
	}
	// Other Team
	sprintf( temp, "- Other Team Member -" );
	SetRect( &rect, 130, 100, 240, 115 );
	CFONT_OBJ->RenderFont( 0, temp, strlen(temp), &rect, 0xffff00ff );
	pos = 0;
	for( n = 0; n < MAX_MURIMFIELD_MEMBERNUM; ++n )
	{
		BATTLE_TEAMMEMBER_INFO* pMemberInfo = &pOtherTeam->TeamMember[n];
		if( pMemberInfo->MemberID )
		{
			sprintf( temp, "%s (%d-%d)", pMemberInfo->MemberName, pMemberInfo->MemberKillNum, pMemberInfo->MemberDieNum );
			SetRect( &rect, 130, pos*15+115, 240, pos*15+130 );	
			CFONT_OBJ->RenderFont( 0, temp, strlen(temp), &rect, 0xffff00ff );
			pos++;
		}
	}
	// Observer
/*	sprintf( temp, "- Observers -" );
	SetRect( &rect, 10, 400, 110, 415 );
	CFONT_OBJ->RenderFont( 0, temp, strlen(temp), &rect, 0xffffffff );
	pos = 0;
	for( n = 0; n < MAX_MURIMFIELD_MEMBERNUM; ++n )
	{
		BATTLE_TEAMMEMBER_INFO* pMemberInfo = &pObserver->TeamMember[n];
		if( pMemberInfo->MemberID )
		{
			sprintf( temp, "Observer %s", pMemberInfo->MemberName );
			SetRect( &rect, 10, pos*15+415, 110, pos*15+430 );	
			CFONT_OBJ->RenderFont( 0, temp, strlen(temp), &rect, 0xffffffff );
			pos++;
		}
	} */
}

#endif

⌨️ 快捷键说明

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