Falls ich beim Kopieren Fehler reingeklatscht haben pm me;D
Credits natürlich an Pumbaaa.
FuncTextCmd.cpp:
Code:
#ifdef __PARTY_FIND
BOOL TextCmd_getparty( CScanner& scanner )
{
#ifdef __WORLDSERVER
CUser *pUser = (CUser*)scanner.dwValue;
if( pUser->m_idparty > 0 )
{
pUser->AddText( "You are already in a party" );
return TRUE;
}
CParty *pParty;
pParty = g_PartyMng.GetPartyFree();
if( pParty )
{
g_DPSrvr.InviteParty( pParty->GetLeader()->m_idPlayer, pUser->m_idPlayer, FALSE, TRUE );
}else
{
pUser->AddText( "Sorry, but there is no party for you" );
}
#endif
return TRUE;
}
#endif //__PARTY_FIND
Code:
BOOL TextCmd_PartyInvite( CScanner& scanner )
{
#ifdef __WORLDSERVER
CUser* pUser = (CUser*)scanner.dwValue;
MoverProp* pMoverProp = NULL;
scanner.GetToken();
#if __VER >= 11 // __SYS_PLAYER_DATA
u_long uidPlayer = CPlayerDataCenter::GetInstance()->GetPlayerId( scanner.token );
#else // __SYS_PLAYER_DATA
u_long uidPlayer = prj.GetPlayerID( scanner.Token );
#endif // __SYS_PLAYER_DATA
if( 0 < uidPlayer )
{
CUser* pUser2 = g_UserMng.GetUserByPlayerID( uidPlayer );
if( IsValidObj( pUser2 ) )
#ifdef __PARTY_FIND
g_DPSrvr.InviteParty( pUser->m_idPlayer, pUser2->m_idPlayer, FALSE, FALSE );
#else
g_DPSrvr.InviteParty( pUser->m_idPlayer, pUser2->m_idPlayer, FALSE );
#endif //__PARTY_FIND
else
pUser->AddDefinedText( TID_DIAG_0060, "\"%s\"", scanner.Token );
}
else
{
pUser->AddDefinedText( TID_DIAG_0061, "\"%s\"", scanner.Token );
}
#endif // __WORLDSERVER
return TRUE;
}
Code:
#ifdef __PARTY_FIND
ON_TEXTCMDFUNC( TextCmd_getparty, "getParty", "getP", "", "", TCM_SERVER, AUTH_GENERAL ,"" )
#endif //__PARTY_FIND
DPClient.cpp;
Code:
void CDPClient::OnPartyRequest( CAr & ar )
{
u_long uLeader, uMember;
BOOL bTroup
#ifdef __PARTY_FIND
, bPartyFind
#endif// __PARTY_FIND
;
LONG nLeaderLevel, nMemberLevel, nLeaderJob, nMemberJob;
BYTE byLeaderSex, byMemberSex;
char szLeaderName[MAX_PLAYER] = {0,};
ar >> uLeader >> nLeaderLevel >> nLeaderJob >> byLeaderSex;
ar >> uMember >> nMemberLevel >> nMemberJob >> byMemberSex;
ar.ReadString( szLeaderName, MAX_PLAYER );
ar >> bTroup
#ifdef __PARTY_FIND
>> bPartyFind
#endif //__PARTY_FIND
;
if( g_Option.m_bParty == FALSE )
{
SendPartyMemberCancle( uLeader, uMember, 3 );
return;
}
#ifdef __S_SERVER_UNIFY
if( g_WndMng.m_bAllAction == FALSE )
return;
#endif // __S_SERVER_UNIFY
CWndBase* pWndBaseBuf = g_WndMng.GetWndBase( APP_PARTY_CONFIRM );
if( pWndBaseBuf )
{
SendBlock( 7, g_pPlayer->GetName(), szLeaderName );
return;
}
#ifdef __PARTY_FIND
if( bPartyFind )
{
SendAddPartyMember( uLeader, nLeaderLevel, nLeaderJob, byLeaderSex, uMember, nMemberLevel, nMemberJob, byMemberSex );
}else
{
g_WndMng.m_pWndPartyConfirm = new CWndPartyConfirm;
g_WndMng.m_pWndPartyConfirm->SetMember( uLeader, nLeaderLevel, nLeaderJob, byLeaderSex, uMember, nMemberLevel, nMemberJob, byMemberSex, szLeaderName, bTroup );
g_WndMng.m_pWndPartyConfirm->Initialize();
}
#else
g_WndMng.m_pWndPartyConfirm = new CWndPartyConfirm;
g_WndMng.m_pWndPartyConfirm->SetMember( uLeader, nLeaderLevel, nLeaderJob, byLeaderSex, uMember, nMemberLevel, nMemberJob, byMemberSex, szLeaderName, bTroup );
g_WndMng.m_pWndPartyConfirm->Initialize();
#endif //__PARTY_FIND
}
Code:
#ifdef __PARTY_FIND
void CDPClient::SendAllowParty( u_long idLeader, u_long idParty, BOOL bAllow )
{
BEFORESENDSOLE( ar, PACKETTYPE_ALLOW_PARTY, DPID_UNKNOWN );
ar << idLeader << idParty << bAllow;
SEND( ar, this, DPID_SERVERPLAYER );
}
void CDPClient::OnPartyAllowJoin( CAr & ar )
{
ar >> g_Party.m_bAllowEnter;
}
#endif //__PARTY_FIND
Code:
#ifdef __PARTY_FIND
case SNAPSHOTTYPE_PARTYALLOW: OnPartyAllowJoin( ar ); break;
#endif
Code:
CParty::CParty()
{
m_uPartyId = 0;
m_nSizeofMember = 0;
memset( m_sParty, 0, sizeof(m_sParty) );
m_nLevel = 1;
m_nExp = m_nPoint = 0;
m_nTroupsShareExp = m_nTroupeShareItem = 0;
m_nKindTroup = 0; // 단막극단
m_nReferens = 0;
m_nGetItemPlayerId = 0;
#ifdef __PARTY_FIND
m_bAllowEnter = TRUE;
#endif //__PARTY_FIND
for( int i = 0 ; i < MAX_PARTYMODE ; i++ )
{
m_nModeTime[i] = 0;
}
m_idDuelParty = 0;
#ifdef __WORLDSERVER
m_dwWorldId = 0;
#endif // __WORLDSERVER
}
Code:
void CParty::InitParty()
{
m_uPartyId = 0;
m_nSizeofMember = 0;
memset( m_sParty, 0, sizeof(m_sParty) );
m_nLevel = 1;
m_nExp = m_nPoint = 0;
m_nTroupsShareExp = m_nTroupeShareItem = 0;
m_nKindTroup = 0; // 단막극단
m_nReferens = 0;
#ifdef __PARTY_FIND
m_bAllowEnter = TRUE;
#endif //__PARTY_FIND
for( int i = 0 ; i < MAX_PTMEMBER_SIZE ; i++ )
{
m_aMember[i].m_uPlayerId = 0;
m_aMember[i].m_tTime = CTime::GetCurrentTime();
m_aMember[i].m_bRemove = FALSE;
#if __VER < 11 // __SYS_PLAYER_DATA
m_aMember[i].m_nLevel = m_aMember[i].m_nJob = 0;
m_aMember[i].m_szName[0] = '\0';
#endif // __SYS_PLAYER_DATA
}
}
Code:
#ifdef __PARTY_FIND
CParty* CPartyMng::GetPartyFree()
{
CParty* pParty, *pPartyTmp = NULL;
if( !m_2PartyPtr.begin()->second )
return NULL;
BOOL bRan = FALSE;
DWORD dwRand = 0;
if( m_2PartyPtr.end()->first >= 1 )
DWORD dwRand = xRandom( m_2PartyPtr.end()->first );
for( C2PartyPtr::iterator i = m_2PartyPtr.begin(); i != m_2PartyPtr.end(); ++i )
{
pParty = (CParty*)i->second;
if( pParty && pParty->GetSizeofMember() < 8 && pParty->m_bAllowEnter )
{
if( i->first > dwRand )
return pParty;
else
pPartyTmp = pParty;
}
}
return pPartyTmp;
}
#endif //__PARTY_FIND
Code:
#ifdef __PARTY_FIND
void CDPSrvr::OnAllowParty( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long )
{
CUser *pUser = g_UserMng.GetUser( dpidCache, dpidUser );
if( IsValidObj( pUser ) )
{
u_long idLeader, idParty;
BOOL bAllow;
ar >> idLeader >> idParty >> bAllow;
if( idLeader != pUser->m_idPlayer )
return;
CParty *pParty = g_PartyMng.GetParty( idParty );
if( pParty && pParty->IsLeader( idLeader ) )
pParty->m_bAllowEnter = bAllow;
else
return;
CUser *pMember;
for( int i = 0; i < pParty->m_nSizeofMember; i++ )
{
pMember = (CUser*)prj.GetUserByID( pParty->m_aMember[i].m_uPlayerId );
if( IsValidObj( (CObj*)pMember ) )
pMember->AddPartyAllowJoin( pParty->m_bAllowEnter );
}
}
}
#endif //__PARTY_FIND
Code:
#ifdef __PARTY_FIND ON_MSG( PACKETTYPE_ALLOW_PARTY, OnAllowParty ); #endif //__PARTY_FIND
Code:
void CDPSrvr::OnPartyRequest( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
{
u_long uLeaderid, uMemberid;
BOOL bTroup;
ar >> uLeaderid >> uMemberid;
ar >> bTroup;
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
if( IsValidObj( pUser ) && pUser->m_idPlayer == uLeaderid )
#ifdef __PARTY_FIND
InviteParty( uLeaderid, uMemberid, bTroup, FALSE );
#else
InviteParty( uLeaderid, uMemberid, bTroup );
#endif //__PARTY_FIND
}
Code:
#ifdef __PARTY_FIND
void CDPSrvr::InviteParty( u_long uLeaderid, u_long uMemberid, BOOL bTroup, BOOL bPartyFind )
#else
void CDPSrvr::InviteParty( u_long uLeaderid, u_long uMemberid, BOOL bTroup )
#endif //__PARTY_FIND
{
CUser* pUser = g_UserMng.GetUserByPlayerID( uMemberid );
CUser* pLeaderUser = g_UserMng.GetUserByPlayerID( uLeaderid );
if( IsValidObj( pLeaderUser ) && IsValidObj( pUser ) )
{
if( !pUser->IsAuthorization( AUTH_GENERAL ) || !pLeaderUser->IsAuthorization( AUTH_GENERAL ) )
{
if( !pUser->IsAuthorization( AUTH_ADMINISTRATOR ) || !pLeaderUser->IsAuthorization( AUTH_ADMINISTRATOR ) )
{
pLeaderUser->AddText("Insufficient Permissions.");
pUser->AddText("Insufficient Permissions.");
return;
}
}
// 대전장에 는 파티를 할수 없습니다.
CWorld* pWorld = pUser->GetWorld();
if( ( pWorld && pWorld->GetID() == WI_WORLD_GUILDWAR ) || pLeaderUser->GetWorld() && pLeaderUser->GetWorld()->GetID() == WI_WORLD_GUILDWAR )
{
pLeaderUser->AddText( prj.GetText(TID_GAME_GUILDCOMBAT_CANNOT_PARTY) );// "수정해야함 : 길드대전장에는 파티를 할수 없습니다" );
return;
}
#if __VER >= 11 // __GUILD_COMBAT_1TO1
if( g_GuildCombat1to1Mng.IsPossibleUser( pUser ) )
{
pLeaderUser->AddText( prj.GetText(TID_GAME_GUILDCOMBAT_CANNOT_PARTY) );// "수정해야함 : 길드대전장에는 파티를 할수 없습니다" );
return;
}
#endif // __GUILD_COMBAT_1TO1
#if __VER >= 8 // 8차 듀얼 061226 ma
if( 0 < pUser->m_nDuel || 0 < pLeaderUser->m_nDuel )
{
return;
}
#endif // __VER >= 8 // 8차 듀얼 061226 ma
if( pLeaderUser->m_nDuel == 2 )
{
pLeaderUser->AddDefinedText( TID_GAME_PPVP_ADDPARTY, "" ); // 극단 듀얼중엔 초청 못함다.
}
else
{
if( 0 < (CMover*)pUser->GetPartyId() ) // 이미 파티가 있을때
{
pLeaderUser->AddPartyRequestCancel( uLeaderid, uMemberid, 1 );
}
else
{
if( pUser->IsAttackMode() )
pLeaderUser->AddDefinedText( TID_GAME_BATTLE_NOTPARTY, "" );
else
#ifdef __PARTY_FIND
pUser->AddPartyRequest( pLeaderUser, pUser, bTroup, bPartyFind );
#else
pUser->AddPartyRequest( pLeaderUser, pUser, bTroup );
#endif //__PARTY_FIND
}
}
}
else
{
if( IsValidObj( pLeaderUser ) )
pLeaderUser->AddPartyRequestCancel( uLeaderid, uMemberid, 4 );
}
}
Code:
#ifdef __PARTY_FIND
void CUser::AddPartyAllowJoin( BOOL bAllow )
{
if( IsDelete() ) return;
m_Snapshot.cb++;
m_Snapshot.ar << GetId();
m_Snapshot.ar << SNAPSHOTTYPE_PARTYALLOW;
m_Snapshot.ar << bAllow;
}
#endif //__PARTY_FIND
Code:
#ifdef __PARTY_FIND
void CUser::AddPartyRequest( CUser * pLeader, CUser * pMember, BOOL bTroup, BOOL bPartyFind )
#else
void CUser::AddPartyRequest( CUser * pLeader, CUser * pMember, BOOL bTroup )
#endif //__PARTY_FIND
{
if( IsDelete() ) return;
m_Snapshot.cb++;
m_Snapshot.ar << GetId();
m_Snapshot.ar << SNAPSHOTTYPE_PARTYREQEST;
m_Snapshot.ar << pLeader->m_idPlayer << pLeader->m_nLevel << pLeader->m_nJob << pLeader->GetSex();
m_Snapshot.ar << pMember->m_idPlayer << pMember->m_nLevel << pMember->m_nJob << pMember->GetSex();
m_Snapshot.ar.WriteString( pLeader->m_szName );
m_Snapshot.ar << bTroup
#ifdef __PARTY_FIND
<< bPartyFind
#endif //__PARTY_FIND
;
}
Code:
#ifdef __PARTY_FIND void InviteParty( u_long uLeaderid, u_long uMemberid, BOOL bTroup, BOOL bPartyFind ); #else void InviteParty( u_long uLeaderid, u_long uMemberid, BOOL bTroup ); #endif //__PARTY_FIND
Code:
#ifdef __PARTY_FIND void OnAllowParty( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long ); #endif //__PARTY_FIND
Code:
#ifdef __PARTY_FIND void AddPartyAllowJoin( BOOL bAllow ); void AddPartyRequest( CUser * pLeader, CUser * pMember, BOOL bTroup, BOOL bPartyFind ); #else void AddPartyRequest( CUser * pLeader, CUser * pMember, BOOL bTroup ); #endif //__PARTY_FIND
Code:
#ifdef __PARTY_FIND BOOL m_bAllowEnter; #endif
Code:
#ifdef __PARTY_FIND CParty* GetPartyFree(); #endif
OnChildNotify:
Code:
#ifdef __PARTY_FIND
else if( nID == WIDC_CHECK1 )
{
if( g_Party.IsLeader( g_pPlayer->m_idPlayer ) )
{
CWndButton *chk = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
g_Party.m_bAllowEnter = !chk->GetCheck();
g_DPlay.SendAllowParty( g_pPlayer->m_idPlayer, g_Party.m_uPartyId, g_Party.m_bAllowEnter );
}
}
#endif //__PARTY_FIND
Code:
#ifdef __PARTY_FIND CWndButton *chk = (CWndButton*)GetDlgItem( WIDC_CHECK1 ); if( g_Party.IsLeader( g_pPlayer->m_idPlayer ) ) chk->EnableWindow( TRUE ); else chk->EnableWindow( FALSE ); chk->SetCheck( !g_Party.m_bAllowEnter ); #endif
Code:
#ifdef __PARTY_FIND void OnPartyAllowJoin( CAr& ar ); void SendAllowParty( u_long idLeader, u_long idParty, BOOL bAllow ); #endif //__PARTY_FIND
Kein Support oder so, so schwer ists nicht...
Party Fenster k nt ihr auch selber editieren.
Packets auch, da ich nicht wei ob meine eure erschreiben.
Aufgrund der Quantit k nte Code fehlen, ist schon etwas l ger her.
Wenn dem so ist. bitte posten.
So far, Pumbaaa







