📄 party.cpp
字号:
////////////////////////////////////////////////////////////////////////////////////////
// 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 + -