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

📄 cfightzone.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		//
		//	Socket Check Function栏肺 荐沥窃 (碍辆龋)
		//
		/*
		if( !lpSocketFD								) continue;
		if( lpSocketFD->dwMagicNum	!=	MAGIC_NUM	) continue;
		if( lpSocketFD->bClose						) continue;
		if( lpSocketFD->socket == INVALID_SOCKET	) continue;
		if( !lpSocketFD->pPlayer)					  continue;
		*/
		if( !IsSocketValidity( lpSocketFD )	) continue;	
		 

		if(bIsStarGame)
		{
			if( lpSocketFD->pPlayer->m_nTeam != DEF_OBSERVER )
			{
				lpSocketFD->pPlayer->m_bIsFightMode = true ;
			}
		}
		else
		{
			// 版扁啊 辆丰 登绰 版快 檬扁拳 
			lpSocketFD->pPlayer->MatchClear(); 
		}

		lpSendIOContext = NULL;
		lpSendIOContext = g_pServer->CreateIOContext(WRITE);

		if( lpSendIOContext )
		{
			memcpy( lpSendIOContext->buf , pZemiPacket, pZemiPacket->dwSize );
			lpSendIOContext->dwTotalBytes = pZemiPacket->dwSize;

			g_pServer->Send( lpSocketFD , lpSendIOContext );						
		}
	}	
}


////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightZone::GameEnd()
{
	if (m_lpMatch != NULL)
	{
		g_lpDBSock->WorldSend_FightzoneReserveCancel(NULL, lpZoneInfor.strFightZoneName ,wSeq, m_lpMatch->m_dwMatchSEQ ) ;

#ifdef DEF_FIGHTZONEITEM
		if(Prize != PVP_PRIZE_GAMBLIE ) 
#endif
		{
			g_lpFightzoneManager->lpMapMatch->Delete(m_lpMatch->m_dwMatchSEQ) ;
			g_lpFightzoneManager->lpMatchPool->Free(m_lpMatch) ;
			m_lpMatch = NULL ;
		}
	}
	else 
	{
		g_lpDBSock->WorldSend_FightzoneReserveCancel(NULL, lpZoneInfor.strFightZoneName ,wSeq, 0 ) ;
	}
	
	
}


////////////////////////////////////////////////////////////////////////////////////////
//	PVP 矫累
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightZone::GameStart()
{

	if (m_lpMatch == NULL) return ;

	// 惑措规狼 付胶磐啊 绝栏搁 矫累且 荐绝促. 
	if (sMasterCount != sTeamCount || nPlayer == 0 )
	{
		bIsFightEnd = true ;
		
		if (Team == PVP_TEAM_PERSON)
			Send_NoticeMsgAndChangeMode(MSG_FIGHTZONENOENEMY,false) ;
		else
			Send_NoticeMsgAndChangeMode(MSG_FIGHTZONENOMASTER,false) ;

		return ;
	}


	// 评 牢盔荐啊 嘎瘤 臼阑锭 霸烙 辆丰 

//	if ( MemberCount[0] != MemberCount[1])
//	{
//		Send_NoticeMsg(MSG_FIGHTZONENOSAMEMEMBER) ;
//		bIsFightEnd = true ;
//		
//		return ;
//	}

	for(int i = 0 ; i < DEF_MAXTEAM ; ++i)
		 
	{
		if(MemberCount[i] > 0 )
			bTeamJoin[i] = true;
	}

	// 版扁 矫累
	bIsFightStart = true ;

	// 弥措 牢盔荐甫 历厘茄促.
	memcpy(sMaxMember, MemberCount, sizeof(short)*DEF_MAXTEAM) ;


	_LPZEMIPACKET lpSendPacket	=	g_pServerMem->ZemiPacket_Pop();

		lpSendPacket->dwCommand	= ZP_PVPSTART ;
		lpSendPacket->dwSize	= 0 ;
			
		SendAll_PacketAndChangeMode( lpSendPacket , true );

	g_pServerMem->ZemiPacket_Push(  lpSendPacket );
}


////////////////////////////////////////////////////////////////////////////////////////
//	PVP狼 焊龋 MODE矫埃阑 厚背窃
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightZone::CheckProtectTime()
{
	_LPSOCKET_FD lpSocketFD ;
	
	for(POSITION pos = m_lpListPlayer->GetHeadPosition(); pos != NULL;)
	{
		lpSocketFD = (_LPSOCKET_FD)m_lpListPlayer->GetNext(pos);

		if( !lpSocketFD								) continue;
		if( IsBadReadPtr(lpSocketFD, sizeof(_SOCKET_FD) ) )
		{
			MapLog("(X) Fightzone Point Error !!") ;
			continue ;
		}

		//
		//	Socket Function栏肺 措眉 矫糯	[碍辆龋]
		//
		/*
		if( lpSocketFD->dwMagicNum	!=	MAGIC_NUM	) continue;
		if( lpSocketFD->bClose						) continue;
		if( lpSocketFD->socket == INVALID_SOCKET	) continue;
		if( !lpSocketFD->pPlayer)					  continue;
		*/
		if( !IsSocketValidity( lpSocketFD )	) continue;	

		if( lpSocketFD->pPlayer->m_sProtectTime > 0 )
		{
			 if(--lpSocketFD->pPlayer->m_sProtectTime <= 0)
			 {
				lpSocketFD->pPlayer->m_bIsFightMode = true ;
				lpSocketFD->pPlayer->m_sProtectTime = 0 ;
			 }
		}

	}
}


CFightzoneManager::~CFightzoneManager()
{

	lpMapFightZone->Clear() ;

	SAFE_DELETE <SafeMap> (&lpMapFightZone ) ;

	SAFE_DELETE <SafeMap> (&lpMapMatch ) ;


	SAFE_DELETE <CMemPool <CFightZone> > (&lpFightzonePool ) ;

	SAFE_DELETE <CMemPool <CMatch> > (&lpMatchPool ) ;

}

////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
CFightzoneManager::CFightzoneManager()
{
	lpMapFightZone  = new SafeMap ;

	lpMapMatch		= new SafeMap ;


	lpFightzonePool = new CMemPool<CFightZone>(MAX_FIGHTZONE);

	lpMatchPool		= new CMemPool< CMatch >(MAX_FIGHTZONE * MAX_MATCH);

	wFightZoneSeq	= 0 ;
	m_dwTimeTick	= 0 ;
}

////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
CFightzoneManager::CFightzoneManager(bool bIsMapServer)
{
	// 甘辑滚绰 荤捧厘 沥焊啊 鞘夸 绝促.
	if(!bIsMapServer)
	{
		lpMapFightZone  = new SafeMap ;

		lpFightzonePool = new CMemPool<CFightZone>(MAX_FIGHTZONE);
	}
	else
	{
		lpMapFightZone = NULL ;
		lpFightzonePool = NULL ;
	}

	lpMapMatch		= new SafeMap ;

	lpMatchPool		= new CMemPool< CMatch >(MAX_FIGHTZONE * MAX_MATCH);

	wFightZoneSeq	= 0 ;
	m_dwTimeTick	= 0 ;
	m_bIsMapServer  = bIsMapServer ;
}

////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightzoneManager::MatchReserve(_LPZW_FIGHTZONERESERVE lpFightZoneReserve)
{
	_LPCFIGHTZONE lpFightZone = Find_FightZone(lpFightZoneReserve->wSEQ) ;
	
	if(lpFightZone == NULL) return ;

	lpFightZone->Clear() ;

	_LPCMATCH	lpMatch	= lpMatchPool->Alloc() ;

	lpMatch->Clear() ;

	lpMatch->m_lpFightZone	= lpFightZone ;
	lpFightZone->m_lpMatch	= lpMatch ;

	lpFightZone->Prize		= lpFightZoneReserve->lpInfor.Prize ;
	lpFightZone->Team		= lpFightZoneReserve->lpInfor.Team ;
	lpFightZone->UsePotion	= lpFightZoneReserve->lpInfor.UsePotion ;
	lpFightZone->wTime		= lpFightZoneReserve->lpInfor.wTime ;
	lpFightZone->Type		= lpFightZoneReserve->lpInfor.Type  ;
	lpFightZone->dwReserveTime = m_dwTimeTick ;

	lpMatch->Rule			= lpFightZoneReserve->lpInfor.Rule ;

	lpMatch->MasterHandle[0] = lpFightZoneReserve->lpInfor.dwFromPlayerHande ;
	lpMatch->MasterHandle[1] = lpFightZoneReserve->lpInfor.dwToPlayerHande ;

	lpMatch->m_dwMatchSEQ =  lpFightZoneReserve->dwMatchSEQ ;
	
	// 15檬 饶 矫累
	lpFightZone->dwTime = 15 + m_dwTimeTick  ;

	if(lpFightZone->bIsHidden )
		lpFightZone->dwTime = 20 + m_dwTimeTick  ;

	lpFightZone->bIsHidden = lpFightZoneReserve->bIsHiden ;
	
	// 评傈捞搁 15檬 眠啊
	if (lpFightZone->Team == PVP_TEAM_GUILD)
		lpFightZone->dwTime += 15  ;


	memcpy(lpFightZone->cTeamName[0], lpFightZoneReserve->lpInfor.strFromPlayerID,20) ;
	memcpy(lpFightZone->cTeamName[1], lpFightZoneReserve->lpInfor.strToPlayerID	 ,20) ;
		
	lpFightZone->sTeamCount = lpFightZoneReserve->nTeamCount ;
	lpMapMatch->Insert(lpFightZoneReserve->dwMatchSEQ , lpMatch ) ;
	
}

////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightzoneManager::Register(_FIGHTZONE * lpZoneInfor,DWORD dwMapSEQ ,int nlayer ,int nPKMode)
{
	_LPCFIGHTZONE lpFightzone = lpFightzonePool->Alloc() ;

	lpFightzone->m_lpListPlayer = new CXPtrList ;

	lpFightzone->Clear() ;

	memcpy(&lpFightzone->lpZoneInfor, lpZoneInfor, sizeof(_FIGHTZONE) ) ;
	lpFightzone->nLayer		= nlayer ;
	lpFightzone->dwMapSEQ	= dwMapSEQ ;

	++wFightZoneSeq ;

	lpFightzone->nPlayer	= 0 ;
	lpFightzone->wSeq  = wFightZoneSeq ;

	if(nPKMode)
		lpFightzone->lpZoneInfor.bIsHiden = false ;
	else
		lpFightzone->lpZoneInfor.bIsHiden = true ;


	lpMapFightZone->Insert(wFightZoneSeq, lpFightzone ) ;
}

////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
WORD CFightzoneManager::wGetList(char * lpData)
{
	WORD wFightZoneCount = 0 ;

	_LPCFIGHTZONE lpFightZone = NULL; 

	MAP_VOIDPTR::iterator iEnd  = lpMapFightZone->End() ;

	for (MAP_VOIDPTR::iterator it = lpMapFightZone->Begin(); it != iEnd; ++it)
	{
		lpFightZone = static_cast <_LPCFIGHTZONE> (it->second) ;

		if(lpFightZone == NULL) continue ;
			
		_LPFIGHTZONEINFOR lpFightzoneInfor = (_LPFIGHTZONEINFOR) lpData ;

		memcpy(lpFightzoneInfor->strMapName, lpFightZone->lpZoneInfor.strFightZoneName , 20) ;
		
		memcpy(lpFightzoneInfor->Point, lpFightZone->lpZoneInfor.Point,sizeof(_POINT)*DEF_MAXTEAM ) ;

		lpFightzoneInfor->dwMapSEQ = lpFightZone->dwMapSEQ   ;
		lpFightzoneInfor->wSEQ	   =  it->first ;

		lpFightzoneInfor->bIsHiden = lpFightZone->lpZoneInfor.bIsHiden ;

		lpData += sizeof(_FIGHTZONEINFOR)  ;
		++wFightZoneCount ;
	}

	return wFightZoneCount ;
}

////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
bool CFightzoneManager::bLoginZone(_LPSOCKET_FD lpSocketFD,DWORD dwMatchSeq, int nTeam, int x, int y )
{
	//
	//	Socket Function栏肺 烹老 矫糯
	//
	/*
	if( !lpSocketFD								) return false ;
	if( lpSocketFD->dwMagicNum	!=	MAGIC_NUM	) return false ;
	if( lpSocketFD->bClose						) return false ;
	if( lpSocketFD->socket == INVALID_SOCKET	) return false ;
	*/
	if( !IsSocketValidity( lpSocketFD )	) return false ;

	_LPCMATCH lpMatch = NULL ;
	

	if( NULL == (lpMatch = Find_Match(dwMatchSeq)))
	{
		return false ;
	}
	
	if( NULL == lpMatch->m_lpFightZone) 	return false ;

	// 版扁啊 矫累登菌促. 
	// 可历滚绰 版扁 矫累苞 包拌绝捞 甸绢哎荐 乐促.
	if( nTeam != DEF_OBSERVER && lpMatch->m_lpFightZone->bIsStartMatch)	return false ;

	if ( lpMatch->bCheckLocation(lpSocketFD->pPlayer->m_nMapLayer, x, y)	)
	{

		lpSocketFD->pPlayer->m_nUsePotion = lpMatch->m_lpFightZone->UsePotion ;

		lpSocketFD->pPlayer->m_nMatchTeamType	= lpMatch->m_lpFightZone->Team ;

		lpSocketFD->pPlayer->m_bIsFightZone = true ;

		lpSocketFD->pPlayer->m_bIsFightMode = false ;

		lpMatch->JoinTeam(lpSocketFD,nTeam ) ;

		ErrorMsg("(FZ) PlayerLoin (%s) Match(%d) Killed(%d) Member(%d) TeamCount(%d) Team(%d)",
		lpSocketFD->pPlayer->m_strPlayerID, lpSocketFD->pPlayer->m_dwMatchSEQ,
		lpMatch->m_lpFightZone->KilledCount[lpSocketFD->pPlayer->m_nTeam] , lpMatch->m_lpFightZone->MemberCount[lpSocketFD->pPlayer->m_nTeam] 
		,  lpMatch->m_lpFightZone->sTeamCount ,lpSocketFD->pPlayer->m_nTeam);
		
		return true ;
	}
	
	return false ;
}


////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
bool CFightzoneManager::bIsTeleportZone(_LPSOCKET_FD lpSocketFD,DWORD nMatchSeq)
{
	/*
	if( !lpSocketFD								) return false ;
	if( lpSocketFD->dwMagicNum	!=	MAGIC_NUM	) return false ;
	if( lpSocketFD->bClose						) return false ;
	if( lpSocketFD->socket == INVALID_SOCKET	) return false ;
	*/
	if( !IsSocketValidity( lpSocketFD )	) return false ;

	_LPCMATCH lpMatch = NULL ;

⌨️ 快捷键说明

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