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

📄 party.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
////////////////////////////////////////////////////////////////////////////////////////
//	Party.cpp: implementation of the Party class.
//
//	-	bIsFullParty
//	-	bISAllClass
////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "../Parameter/player.h"			// 纳腐 荐摹 包访 Class
#include "MapServerSocket.h"				
#include "map.h"							//	MAP

#include "CUDPSocket.h"						
#include "DBSocket.h"
#include "PlayerInfo.h"
#include "Party.h"
#include "CFightzone.h"

#include "ServerMem.h"


extern _LPCFIGHTZONEMANAGER  g_lpFightzoneManager ;

////////////////////////////////////////////////////////////////////////////////////////
// Global Value
////////////////////////////////////////////////////////////////////////////////////////
extern ServerMem			*g_pServerMem;	

extern	Map					*g_pMap;		//	MAP 包府 (User捞悼)
extern	MapServerSocket		*g_pServer;		//	Map Server 

extern _LPDBSOCK			g_lpDBSock ;	//	World Server TCP Socket
extern _LPUDPSOCKET			g_lpUdpSock ;	//	World Server UDP Socket

////////////////////////////////////////////////////////////////////////////////////////
//	Construction/Destruction
////////////////////////////////////////////////////////////////////////////////////////
CParty::CParty()
{
	m_pPartyMember	=	new _ZP_PARTYLIST_REP;

	Clear_Party();
}

CParty::~CParty()
{
	if( m_pPartyMember )
	{
		delete m_pPartyMember;
	}
}


////////////////////////////////////////////////////////////////////////////////////////
//	秦寸 颇萍盔甸俊霸 版氰摹 盒硅
//	
//	-	八祸矫 颇萍盔捞 辆丰茄 版快 贸府	(SOCKET CLOSE矫)
////////////////////////////////////////////////////////////////////////////////////////
void CParty::GetPartyExp(_LPSOCKET_FD pSocketFD, int iGetExp )
{

	if( !IsSocketValidity( pSocketFD ) )	return;		//	Socket Validity Checking	
	
	if (iGetExp == 0 ) return ;							//	版氰摹啊 绝栏搁 甸绢啊瘤 臼绰促.


	//	--------------------------------------------------------------------------------
	//	秦寸 颇萍盔 INDEX茫扁 
	//	--------------------------------------------------------------------------------
	for( int i=0; i < MAX_PARTY_NUM ; ++i  )
	{
		if( m_pPartySocket[ i ] == pSocketFD )	break;
	}

	//	--------------------------------------------------------------------------------
	//	秦寸 Index沥焊甫 给茫篮 版快 
	//	--------------------------------------------------------------------------------
	if( i >= MAX_PARTY_NUM )	return;

	int nPartyIndex = i;	

	int nAttackExp = 0;

	//	--------------------------------------------------------------------------------
	//	秦寸 颇萍盔俊霸 版氰摹甫 盒硅 矫糯
	//	--------------------------------------------------------------------------------
	for( i=0; i < MAX_PARTY_NUM ; ++i )
	{		

		if( m_pPartyMember->PARTYLIST[i].strPlayerID[0] == NULL )	continue;

		/*	
			秦寸 SOCKET捞 粮犁 窍瘤 臼绰 版快

			-	秦寸 荤侩磊甫 昏力 矫虐绰 风凭阑 眠啊 矫糯
		*/
		if(!m_pPartySocket[i]									)	continue;		
		if( m_pPartySocket[i]->dwMagicNum		!=	MAGIC_NUM	)	continue;

		// 版氰摹 馆棵覆窃
		int nGetExp = (int)( ceil( (double)iGetExp * m_fExpMatrix[ nPartyIndex ][ i ] ) );	//	秦寸 颇萍盔捞 掘阑 版氰摹甫 掘澜 
		
		if( nGetExp <=	0 ) continue;

		nGetExp		=	MIN( nGetExp, iGetExp );

		if(	(i	!= nPartyIndex	)																	 &&	//	磊扁 磊脚捞 酒囱版快 
			pSocketFD->pPlayer->m_nMapLayer	==	m_pPartySocket[i]->pPlayer->m_nMapLayer				 &&	//	鞍篮 Layer俊 乐绰 版快
			pSocketFD->pPlayer->IsDistanceRange( m_pPartySocket[i]->pPlayer, CHECK_GETPARTYEXP_TILE )&& //	颇萍 版氰摹甫 林绰	TILE

			//	2003.12.12 Duke Kim 荐沥 
			//	!pSocketFD->pPlayer->IsDead()														 &&		//	混酒 乐绰 版快
			!m_pPartySocket[i]->pPlayer->IsDead()													 &&
			
			!g_pMap->IsSafeZone( m_pPartySocket[i]->pPlayer->m_nMapLayer, m_pPartySocket[i]->pPlayer->m_Tile			)								//	救傈 瘤开牢 版快
		)
		{
			


#ifdef DEF_CHINES_FREEUSER
			bool bSend = false;
			if ( m_pPartySocket[i]->pPlayer->IsFreeUser() )
			{
				if ( m_pPartySocket[i]->pPlayer->m_nLastLevel < CHINES_FREEUSER_MAXLEVEL )
					bSend = true;			
			}
			else
				bSend = true;

			if ( bSend )
			{
				//	秦寸 颇萍盔俊霸 掘篮 版氰摹 傈价
				//	- LEVEL UP篮 眠饶  搬沥 (SEND 咯何)
				m_pPartySocket[i]->pPlayer->SetPartyExp( nGetExp );

				g_pServer->PacketSend_ChangeExp( m_pPartySocket[i] );				//	掘篮 版氰摹甫 傈价窃


				//	泅 荤侩磊狼 Level Up咯何 犬牢
				if( m_pPartySocket[i] && m_pPartySocket[i]->pPlayer->CheckLevelUp() )
				{		 

					g_pServer->PacketSend_ChangeLevel( m_pPartySocket[i] );		//	Level Up Message甫 傈价		
					g_pServer->PacketSend_ChangePlayerBase( m_pPartySocket[i] );	//	促矫 拌魂等 荐摹甫 傈价		
					m_pPartySocket[i]->pPlayer->World_PlayerBaseUpdate();			//	[纳腐 扁夯 沥焊]历厘 Message傈价

					//	函版 郴开阑 World Server俊 傈价 
					g_lpDBSock->WorldSend_PartyRefresh( m_pPartySocket[i], m_pPartyMember->dwPartyHandle );	
					
					char cMsg[100]={0,} ;
					
					wsprintf(cMsg, MSG_PARTYMEMBERLEVELUP, m_pPartySocket[i]->pPlayer->m_strPlayerID);
					Party_Msg(cMsg) ;
				}
			}

#else

			//	秦寸 颇萍盔俊霸 掘篮 版氰摹 傈价
			//	- LEVEL UP篮 眠饶  搬沥 (SEND 咯何)
			m_pPartySocket[i]->pPlayer->SetPartyExp( nGetExp );

			g_pServer->PacketSend_ChangeExp( m_pPartySocket[i] );				//	掘篮 版氰摹甫 傈价窃


			//	泅 荤侩磊狼 Level Up咯何 犬牢
			if( m_pPartySocket[i] && m_pPartySocket[i]->pPlayer->CheckLevelUp() )
			{		 

				g_pServer->PacketSend_ChangeLevel( m_pPartySocket[i] );		//	Level Up Message甫 傈价		
				g_pServer->PacketSend_ChangePlayerBase( m_pPartySocket[i] );	//	促矫 拌魂等 荐摹甫 傈价		
				m_pPartySocket[i]->pPlayer->World_PlayerBaseUpdate();			//	[纳腐 扁夯 沥焊]历厘 Message傈价

				//	函版 郴开阑 World Server俊 傈价 
				g_lpDBSock->WorldSend_PartyRefresh( m_pPartySocket[i], m_pPartyMember->dwPartyHandle );	
				
				char cMsg[100]={0,} ;
				
				wsprintf(cMsg, MSG_PARTYMEMBERLEVELUP, m_pPartySocket[i]->pPlayer->m_strPlayerID);
				Party_Msg(cMsg) ;
			}
#endif


		}
		else
		{
			nAttackExp = nAttackExp + nGetExp;
		}
	}

	//	--------------------------------------------------------------------------------	
	//	秦寸 荤侩磊俊霸 Packet傈价
	//	--------------------------------------------------------------------------------
	if( nAttackExp > 0 )
	{
#ifdef DEF_CHINES_FREEUSER
		bool bSend = false;
		if ( pSocketFD->pPlayer->IsFreeUser() )
		{
			if ( pSocketFD->pPlayer->m_nLastLevel < CHINES_FREEUSER_MAXLEVEL )
				bSend = true;			
		}
		else
			bSend = true;

		if ( bSend )
		{
			nAttackExp	=	MIN ( nAttackExp, iGetExp );
			
			pSocketFD->pPlayer->SetPartyExp( nAttackExp );				//	版氰摹 涝仿
			
			if( nAttackExp != 0 )										//	版氰摹 傈价		
			{
				g_pServer->PacketSend_ChangeExp( pSocketFD );			//	掘篮 版氰摹甫 傈价窃							
			}
		
			
			//	泅 荤侩磊狼 Level Up咯何 犬牢

			if(pSocketFD && pSocketFD->pPlayer->CheckLevelUp() )
			{		 	

				g_pServer->PacketSend_ChangeLevel( pSocketFD );			//	Level Up Message甫 傈价		
				g_pServer->PacketSend_ChangePlayerBase( pSocketFD );	//	促矫 拌魂等 荐摹甫 傈价		
				pSocketFD->pPlayer->World_PlayerBaseUpdate();			//	[纳腐 扁夯 沥焊]历厘 Message傈价

				//	函版 郴开阑 World Server俊 傈价 
				g_lpDBSock->WorldSend_PartyRefresh( pSocketFD, m_pPartyMember->dwPartyHandle );	

				char cMsg[100]={0,} ;
					
				wsprintf(cMsg,MSG_PARTYMEMBERLEVELUP , pSocketFD->pPlayer->m_strPlayerID );
				Party_Msg(cMsg) ;
			}
		}
#else
		nAttackExp	=	MIN ( nAttackExp, iGetExp );
			
		pSocketFD->pPlayer->SetPartyExp( nAttackExp );				//	版氰摹 涝仿
		
		if( nAttackExp != 0 )										//	版氰摹 傈价		
		{
			g_pServer->PacketSend_ChangeExp( pSocketFD );			//	掘篮 版氰摹甫 傈价窃							
		}
	
		
		//	泅 荤侩磊狼 Level Up咯何 犬牢

		if(pSocketFD && pSocketFD->pPlayer->CheckLevelUp() )
		{		 	

			g_pServer->PacketSend_ChangeLevel( pSocketFD );			//	Level Up Message甫 傈价		
			g_pServer->PacketSend_ChangePlayerBase( pSocketFD );	//	促矫 拌魂等 荐摹甫 傈价		
			pSocketFD->pPlayer->World_PlayerBaseUpdate();			//	[纳腐 扁夯 沥焊]历厘 Message傈价

			//	函版 郴开阑 World Server俊 傈价 
			g_lpDBSock->WorldSend_PartyRefresh( pSocketFD, m_pPartyMember->dwPartyHandle );	

			char cMsg[100]={0,} ;
				
			wsprintf(cMsg,MSG_PARTYMEMBERLEVELUP , pSocketFD->pPlayer->m_strPlayerID );
			Party_Msg(cMsg) ;
		}
#endif	
	}
}


////////////////////////////////////////////////////////////////////////////////////////
//	颇萍盔俊霸 皋矫瘤甫 傈价窃
//
////////////////////////////////////////////////////////////////////////////////////////
void CParty::Party_Msg(char * cMsg)
{
	_LPZEMIPACKET lpSendPacket	=	g_pServerMem->ZemiPacket_Pop();

		_LPZP_PARTYCHAT_ASK p =  (_LPZP_PARTYCHAT_ASK)lpSendPacket->strPacket ;

		p->dwPartyHandle = m_pPartyMember->dwPartyHandle ;
		p->dwMapID = _Module.m_nMapSeq ;

		strcpy(p->strPlayerID, MSG_PARTYMSG) ;

		memcpy(p->strMessage, cMsg,100)  ;

		Send_ChatMsg_Map(p) ;


	g_pServerMem->ZemiPacket_Push(  lpSendPacket );
}


////////////////////////////////////////////////////////////////////////////////////////
//	Party 檬扁拳 累诀
//	-	包访 函荐 檬扁拳 / 犁荤侩矫 巩力啊 绝档废 荐沥窃
////////////////////////////////////////////////////////////////////////////////////////
void CParty::Clear_Party()
{	
	memset( m_pPartyMember,0x0, sizeof( _ZP_PARTYLIST_REP ) ); 

	memset( m_pPartySocket,0x0,  (MAX_PARTY_NUM)*sizeof( m_pPartySocket[0]) ); 

	m_nType			= 0;
	m_sClassCount	= 0;

	m_bPartyDelete	= false;
}


////////////////////////////////////////////////////////////////////////////////////////
//	弥檬 Party盔 积己 累诀
//	
//	-	颇萍 积己阑 Client俊 舅覆
////////////////////////////////////////////////////////////////////////////////////////
void CParty::Party_Create(_LPZW_PARTYCREATE_REP pPacket)
{
	Clear_Party();
	
	m_pPartyMember->dwPartyHandle	=	pPacket->dwPartyHandle;			//	Party Handle涝仿 
	
	Member_Add( &pPacket->PARTYLIST[0] );								//	LIST 殿废 
	Member_Add( &pPacket->PARTYLIST[1] );
	m_nType	= pPacket->nType ;


	SetPartyExpMatrix();												//	颇萍 版氰摹 盒硅伏 拌魂

	//	--------------------------------------------------------------------------------	
	//	眠饶 Socket 坷幅 Msg贸府
	//	Socket FD啊 NULL牢 版快 贸府
	//	--------------------------------------------------------------------------------	
	g_pServer->PacketSend_PartyCreate( m_pPartySocket[0], pPacket );	// 颇萍 炉
	g_pServer->PacketSend_PartyCreate( m_pPartySocket[1], pPacket );	// 颇萍 盔 

	if ( IsSocketValidity(m_pPartySocket[0]) ) 
		m_pPartySocket[0]->pPlayer->m_bWaitForPartyReq	 = false;

	if ( IsSocketValidity(m_pPartySocket[1]) ) 
		m_pPartySocket[1]->pPlayer->m_bWaitForPartyReq	 = false;

}

////////////////////////////////////////////////////////////////////////////////////////
//	秦寸 颇萍 沥焊甫 涝仿 矫糯
//	
////////////////////////////////////////////////////////////////////////////////////////
void CParty::Party_Create(_LPZP_PARTYLIST_REP pPacket)
{
	memcpy( m_pPartyMember, pPacket, sizeof( _ZP_PARTYLIST_REP  ) );

	//	秦寸 颇萍盔狼 SOCKET FD甫 掘澜	
	for( int i = 0; i < MAX_PARTY_NUM; i ++ )
	{
		if( m_pPartyMember->PARTYLIST[i].strPlayerID[0] != NULL )
		{
			if( m_pPartyMember->PARTYLIST[i].dwMapID == _Module.m_nMapSeq )
			{			
				m_pPartySocket[i]	= g_pMap->Find_Player( 	m_pPartyMember->PARTYLIST[i].strPlayerID );	
			}
		}
	}

	m_nType	= pPacket->nType ;

	SetPartyExpMatrix();			//	颇萍 版氰摹 盒硅伏 拌魂 	
}

////////////////////////////////////////////////////////////////////////////////////////
//	颇萍盔 眠啊 累诀
////////////////////////////////////////////////////////////////////////////////////////
void CParty::Member_Add(_PARTYLIST_ *pMember  )
{

	for( int i = 0; i < MAX_PARTY_NUM; i ++ )
	{
		
		//	秦寸 颇萍狼 Empty Slot阑 茫澜		
		//	秦寸 荤侩磊甫 Add矫糯 
		if( m_pPartyMember->PARTYLIST[i].strPlayerID[0] == NULL )
		{
			//	PARTY盔 汗荤 
			memcpy( &m_pPartyMember->PARTYLIST[i], pMember,sizeof( _PARTYLIST_ ) );
			m_pPartyMember->nCount ++;

			//	SOCKET FD涝仿 
			if( m_pPartyMember->PARTYLIST[i].dwMapID == _Module.m_nMapSeq )
			{
				m_pPartySocket[i]	= g_pMap->Find_Player( 	m_pPartyMember->PARTYLIST[i].strPlayerID );	
			
				if( m_pPartySocket[i] )
				{
					m_pPartySocket[i]->pPlayer->m_dwPartyHandle = m_pPartyMember->dwPartyHandle;
				}
			}
			else
			{
				m_pPartySocket[i] = NULL;
			}

			break;
		}
	}
}


////////////////////////////////////////////////////////////////////////////////////////
//	颇萍盔狼 版氰摹 Matrix甫 Setting矫糯
////////////////////////////////////////////////////////////////////////////////////////
void CParty::SetPartyExpMatrix()
{
	//	--------------------------------------------------------------------------------
	//	版氰摹 盒硅 Matrix甫 涝仿 矫糯
	//	--------------------------------------------------------------------------------
	int i, j;

	short	sClass = 0 ;
 
	 	///////////////////////////////////////////////////////////////////
	 	//	1瞒 函券  = 1 * ( 1 - MIN (abs( A Level - B Level),20 )
	 	///////////////////////////////////////////////////////////////////
	 	for( i =0; i < MAX_PARTY_NUM ; i ++ )
	 	{		

			// 辑肺 促弗 努饭胶甫 眉农窍扁 困秦 
			if(m_pPartyMember->PARTYLIST[i].nClass > 0)
				sClass |=    1 << (m_pPartyMember->PARTYLIST[i].nClass -1  ) ;


	 		for( j =0; j < MAX_PARTY_NUM ; j ++ )
	 		{
	 			//	秦寸 荤侩磊 NULL牢版快 
	 			if( m_pPartyMember->PARTYLIST[j].strPlayerID[0] == NULL ) 
	 			{
	 				m_fTempMatrix[i][j] = 0.0;
	 				continue;	
	 			}
 			
	 			m_fTempMatrix[i][j] = 1.0 * ( 1.0 - MIN( abs( m_pPartyMember->PARTYLIST[i].wLevel - m_pPartyMember->PARTYLIST[j].wLevel ) , 20.0 ) * 0.05 );

			}			
 		}
		

⌨️ 快捷键说明

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