How to disable it:
- Open VersionCommon.h in the WorldServer project
- Find all occurrences of #define __NEW_PROFILE and comment those lines out (two slashes at the beginning of the line //)
- Do the same from above for #define __PROFILE_RUN
- Compile the WorldServer and you're done.

--------------------------------------------------------------------------------------------------------------------
Increase CS Pets speed
1. Open CreateObj.cpp in Common folder
2. Look for this:
#if VER >= 9 //AI_0509
MoverProp pProp = pMover->GetProp();
if( pProp->dwAI == AII_MONSTER )
{
pMover->m_pActMover->m_fSpeed /= 2.0F;
// if( pProp->dwClass == RANK_SUPER )
// pMover->m_pActMover->m_fSpeed = 1.5F;
}
- Underneath it add this:
<div>Code:<pre> if( pProp->dwAI == AII_PET ) pMover->m_pActMover->m_fSpeed *= 5;</pre>
</div>The value in red will multiply the base movement speed of the CS pet.
Recompile it and you’re done.
<p>——————————————————————————————————————–
</p><p>Change your window’s title
</p><p>Open Neuz.cpp and search for m_strWindowTitle = T and you will see something like
</p><p>m_strWindowTitle = T( “FlyFF” );
</p><p>
</p><p>——————————————————————————————————————–
</p><p>Weapon swing color
</p><p>Here’s how to change the weapon swing color. Open Mover.cpp first. /contribute
</p><p><div><div>if( IsPlayer() )
{
int nOption = 0;
DWORD dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
if( IsActiveMover() )
{
CItemElem *pItemElem = GetWeaponItem();
if( pItemElem )
nOption = pItemElem->GetAbilityOption();
}
else
{
// Ÿ Ç÷¹À̾î´Â ÆäÀÌÅ©¾ÆÀÌÅÛÀ̹ǷΠ¿©±â¼¿¡¼ °ªÀ» »©¿Â´Ù.
nOption = m_aEquipInfo[PARTS_RWEAPON].nOption & 0xFF;
}
if( nOption == 10 )
dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
else if( nOption == 9 )
dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
else if( nOption >= 7 )
dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
else if( nOption >= 5 )
dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
else if( nOption >= 3)
dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
else if( nOption >= 1 )
dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
else
dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
pModel->MakeSWDForce( PARTS_RWEAPON, pItemProp->dwItemKind3, (dwOption & MOP_HITSLOW) ? TRUE : FALSE, dwColor, m_fAniSpeed );
pModel->MakeSWDForce( PARTS_LWEAPON, pItemProp->dwItemKind3, (dwOption & MOP_HITSLOW) ? TRUE : FALSE, dwColor, m_fAniSpeed );
}</div></div>
Change the values after D3DCOLOR_ARGB ( XXX, XXX, XXX, XXX );
Using the following macros work as well I believe:
<div>
Spoiler: <div><div>D3DCOLOR_XYUV
D3DCOLOR_AYUV
D3DCOLOR_ARGB
D3DCOLOR_RGBA
D3DCOLOR_XRGB
D3DCOLOR_COLORVALUE</div></div>
Obviously if you set a new D3DCOLOR type you also have to change the values as well. RGBA = red green blue alpha, so change the first three to the colors you desire and the fourth to the alpha level. With XRGB you would have no alpha, just XXX, XXX, XXX. Do note that black is impossible unless you do heavy alterations to the source.
The format works this way: 255, 255, 255, 0. The numbers are Red, Blue, Green, Alpha. Change each value from 0 to 255 as you wish.
inb4 every nub server does this /ridi</div>
</p><p>
</p><p>——————————————————————————————————————–
</p><p>Change the max. buy count
</p><p>lets keep this topic alive:
its only some edits i start to learn c++ 3 weeks ago but im a starter so its ok ^^:
1:change the max you can buy from shop from 99 to xxxx:
go to your folder source/_interface
now open WndShop.cpp
and find this:
const int MAX_BUY_ITEMCOUNT = 99;
</p><p>
</p><p>——————————————————————————————————————–
</p><p>Rejoin guild time
</p><p>How to change the amount of time before you can rejoin a guild:
This has two parts. The first is the cache so this works while you stay logged in and the second you have to change some stored procedures in the database.
First part:
Find this line in DPCacheSrvr (its in there twice):
<div>Code:<pre>pPlayer->m_tGuildMember += CTimeSpan( 2, 0, 0, 0 );</pre>
</div>Change the (2, 0, 0, 0) to what you want in the format of (Days, Hours, Minutes, Seconds). i.e. 5 minutes (0, 0, 5, 0)
Second part:
Find the GUILD_STR stored procedure in CHARACTER_DBF and find this in the procedure (Again its there twice):
<div>Code:<pre>SET m_tGuildMember = CONVERT(CHAR(8),DATEADD(d,2,GETDATE()),112)
+ RIGHT(‘00’ + CONVERT(VARCHAR(2),DATEPART(hh,DATEADD(d,2,GETDATE()))),2)
+ RIGHT(‘00’ + CONVERT(VARCHAR(2),DATEPART(mi,DATEADD(d,2,GETDATE()))),2)
+ RIGHT(‘00’ + CONVERT(VARCHAR(2),DATEPART(ss,DATEADD(d,2,GETDATE()))),2)</pre>
</div>Now change<div>Code:<pre>DATEADD(d,2,GETDATE())))</pre>
</div>to the same value you entered above. i.e. 5 minutes again<div>Code:<pre>DATEADD(mi,5,GETDATE())))</pre>
</div>
</p><p>——————————————————————————————————————–
</p><p>colored names of staff members
</p><p><div>Go to your neuz project, go to MoverRender.cpp and search for this one:
<div>
// ¸í¼º¿¡ µû¸¥ »öÇ¥½Ã.if VER >= 13 // HONORABLE_TITLE
Go one line below and add this:
<div>Code:<pre> if( IsAuthHigher(AUTH_ADMINISTRATOR)) // fnL
{
dwColor = 0xff9e054d;
}
else if( IsAuthHigher(AUTH_GAMEMASTER))
{
dwColor = 0xff1d8fca;
}</pre></div>Since it's scanning for karma, and there is already an opened up if-statement, we'll need to go to <br><br><p></p><div>Code:<p></p><pre>if( IsChaotic() )</pre></div>which is one line below, and just change the "if" to an "else if"</div></div><br></span></p><p><span style="line-height: 1.45em;">--------------------------------------------------------------------------------------------------------------------<br></span></p><p><span style="line-height: 1.45em;">Emote client crash by enter !888888888888889<br></span></p><p><span style="line-height: 1.45em;"><br></span></p><p><span style="line-height: 1.45em;">How to fix Emote client crash by enter !888888888888889 in the chat :<br><br>go to DialogMsg.cpp and search for <br><p></p><div>Code:<p></p><pre>void CDialogMsg::AddMessage( CObj* pObj, LPCTSTR lpszMessage, DWORD RGB, int nKind, DWORD dwPStyle )</pre></div>then search <br><br><p></p><div>Code:<p></p><pre> if( scanner.Token == "!" )
{
int nEmoticonIdx = scanner.GetNumber();
AddEmoticon( pObj, nEmoticonIdx );
return;
}</pre></div>now replace with this :<br><p></p><div>Code:<p></p><pre> if( scanner.Token == "!" )
{
int nEmoticonIdx = scanner.GetNumber();
if( nEmoticonIdx > MAX_EMOTICON_NUM )
nEmoticonIdx = MAX_EMOTICON_NUM;
else if( nEmoticonIdx < 0 )
nEmoticonIdx = 0;
AddEmoticon( pObj, nEmoticonIdx );
return;
}</pre></div>--------------------------------------------------------------------------------------------------------------------<br></span></p><p><span style="line-height: 1.45em;"><b>fix the onekill / invisible / summon / teleport bug from Toms Hack</b><br></span></p><p><span style="line-height: 1.45em;">Hello,<br>I show you today how you can fix the<br>"onekill / invisible / summon / teleport" bug from Toms Hack<br><br>Copyright @ Yannickmama !!<br><br>1. You go first into the DPSrvr.cpp<br>2. You are looking for the following functions:<br><br><br><p></p><div>PHP Code:<p></p><p><code><code><span>CDPSrvr::OnModifyMode<br>CDPSrvr::OnSummonPlayer<br>CDPSrvr::OnTeleportPlayer </span></code></code></p></div>and change this :<br><br><p></p><div>PHP Code:<p></p><p><code><code><span>#ifdef __HACK_0516<span>DPID dpid;<span>ar >> dpid;<br> if( pUser->m_Snapshot.dpidUser != dpid )<br> {<span>Error( "[%s] try to hack : PACKETTYPE_MODIFYMODE", pUser->GetName() );<br> return;<br> }<span>#endif // __HACK_0516 </span></span></span></span></span></code></code></p></div>to<br><br><p></p><div>PHP Code:<p></p><p><code><code><span>#ifdef __HACK_0516<span>DPID dpid;<span>ar >> dpid;<br> if( pUser->m_Snapshot.dpidUser != dpid )<br> {<span>Error( "[%s] try to hack : PACKETTYPE_MODIFYMODE", pUser->GetName() );<br> return;<br> }<br> if( !pUser->IsAuthHigher(AUTH_GAMEMASTER) )<br> {<span>Error( "[%s] try to hack with dpid : PACKETTYPE_MODIFYMODE", pUser->GetName() );<br> return;<br> }<span>#endif // __HACK_0516 </span></span></span></span></span></span></code></code></p></div>If you dont define __HACK_0516 go and define it :-*<br><br>for the Create Item fix from Toms Hack Programm go to :<br><br>CDPSrvr::OnBuyingInfo<br><br>and edit this acutually with you code<br><br><p></p><div>PHP Code:<p></p><p><code><code><span>void CDPSrvr::OnBuyingInfo( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )<br>{/*<br> BUYING_INFO2 bi2;<br> ar.Read( (void*)&bi2, sizeof(BUYING_INFO2) );<br><br> CWorld* pWorld;<br> CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );<br><br> SERIALNUMBER iSerialNumber = 0;<br> if( IsValidObj( pUser ) && ( pWorld = pUser->GetWorld() ) )<br> {<br> bi2.dwRetVal = 0;<br> CItemElem itemElem;<br> itemElem.m_dwItemId = bi2.dwItemId;<br> itemElem.m_nItemNum = (short)bi2.dwItemNum;<br> itemElem.m_bCharged = TRUE;<br> BYTE nId;<br> bi2.dwRetVal = pUser->CreateItem( &itemElem, &nId );<br>#ifdef __LAYER_1015<br> g_dpDBClient.SavePlayer( pUser, pWorld->GetID(), pUser->GetPos(), pUser->GetLayer() );<br>#else // __LAYER_1015<br> g_dpDBClient.SavePlayer( pUser, pWorld->GetID(), pUser->GetPos() );<br>#endif // __LAYER_1015<br> if( bi2.dwRetVal )<br> {<br> CItemElem* pItemElem = pUser->m_Inventory.GetAtId( nId );<br> if( pItemElem )<br> {<br> iSerialNumber = pItemElem->GetSerialNumber();<br> pItemElem->m_bCharged = TRUE;<br> if( bi2.dwSenderId > 0 )<br> {<br> // %s을 %s님으로부터 선물 받았습니다.<br> }<br> }<br> }<br> }<br> g_dpDBClient.SendBuyingInfo( &bi2, iSerialNumber );<br>// FILEOUT( "buyinginfo.txt", "dwServerIndex = %d\tdwPlayerId = %d\tdwItemId = %d\tdwItemNum = %d\n", <br> // bi2.dwServerIndex, bi2.dwPlayerId, bi2.dwItemId, bi2.dwItemNum );<br> static char lpOutputString[260] = { 0, };<br> sprintf( lpOutputString, "dwServerIndex = %d\tdwPlayerId = %d\tdwItemId = %d\tdwItemNum = %d",<br> bi2.dwServerIndex, bi2.dwPlayerId, bi2.dwItemId, bi2.dwItemNum ); <br> OutputDebugString( lpOutputString );<br>*/} </span></code></code></p></div>Then you have fixed allready the biggest problems<br><br>have fun and good luck <3<br></span></p><p><span style="line-height: 1.45em;">--------------------------------------------------------------------------------------------------------------------<br></span></p><p><span style="line-height: 1.45em;"><b>Swap bug Quick fix</b><br></span></p><p><span style="line-height: 1.45em;">Hi I fixed the swap bug a long time ago it got tested on my server and it worked <img src="http://forum.ragezone.com/images/smilies/thumbup1.gif" border="0" alt="" title="Thumbup1" class="inlineimg"><br>I posted this because someone kinda posted a youtube thingy about it :O.<br><br>Find this in DPSrv.cpp @ worldserver<br><p></p><div>Code:<p></p><pre>void CDPSrvr::OnDoEquip( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
{ DWORD nId; int nPart;
ar >> nId;
ar >> nPart;
if( nPart >= MAX_HUMAN_PARTS )
return;
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );</pre></div>And put this under it<br><br><p></p><div>Code:<p></p><pre>#ifdef __QUGET_SWAP_FIX
if( pUser->GetHitPoint() > pUser->GetMaxHitPoint() )
pUser->SetHitPoint( pUser->GetMaxHitPoint());
if( pUser->GetManaPoint() > pUser->GetMaxManaPoint() )
pUser->SetManaPoint( pUser->GetMaxManaPoint() );
if( pUser->GetFatiguePoint() > pUser->GetMaxFatiguePoint() )
pUser->SetFatiguePoint( pUser->GetMaxFatiguePoint() );
endif
</pre>
</div>find this in function void CDPClient::OnDoEquip( OBJID objid, CAr & ar ) @ DPClient.cpp
and add under
<div>Code:<pre>if( g_WndMng.m_pWndBeautyShop && g_WndMng.m_pWndBeautyShop->m_pModel )
{
CMover::UpdateParts( pPlayer->GetSex(), pPlayer->m_dwSkinSet, pPlayer->m_dwFace, pPlayer->m_dwHairMesh, pPlayer->m_dwHeadMesh, pPlayer->m_aEquipInfo, g_WndMng.m_pWndBeautyShop->m_pModel, &pPlayer->m_Inventory );
}</pre></div>this<br><p></p><div>Code:<p></p><pre>#ifdef __QUGET_SWAP_FIX
if( pPlayer->GetHitPoint() > pPlayer->GetMaxHitPoint() )
pPlayer->SetHitPoint( pPlayer->GetMaxHitPoint());
if( pPlayer->GetManaPoint() > pPlayer->GetMaxManaPoint() )
pPlayer->SetManaPoint( pPlayer->GetMaxManaPoint() );
if( pPlayer->GetFatiguePoint() > pPlayer->GetMaxFatiguePoint() )
pPlayer->SetFatiguePoint( pPlayer->GetMaxFatiguePoint() );
endif
</pre>
</div>and then define QUGET_SWAP_FIX in versioncommon.h @neuz and worldserver
--------------------------------------------------------------------------------------------------------------------
PartyFinder System
FuncTextCmd.cpp:
#ifdef PARTY_FINDBOOL 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
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;}
#ifdef __PARTY_FIND
ON_TEXTCMDFUNC( TextCmd_getparty, "getParty", "getP", "", "", TCM_SERVER, AUTH_GENERAL ,"" )
endif //__PARTY_FIND
DPClient.cpp;
<div>Code:<pre>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
}
</pre> </div>
#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
#ifdef PARTY_FINDcase SNAPSHOTTYPE_PARTYALLOW: OnPartyAllowJoin( ar ); break;endif
party.cpp:
<div>Code:<pre>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
}
</pre> </div>
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
}
}
#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
DPSrvr.cpp:
<div>Code:<pre>#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
</pre> </div>
#ifdef PARTY_FINDON_MSG( PACKETTYPE_ALLOW_PARTY, OnAllowParty );endif //__PARTY_FIND
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
}
#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, "" ); elseifdef __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 ); }}
User.cpp:
<div>Code:<pre>#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
</pre> </div>
#ifdef PARTY_FINDvoid 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 << bTroupifdef __PARTY_FIND
<< bPartyFindendif //__PARTY_FIND
;}
DPSrvr.h(public scope pls):
<div>Code:<pre>#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
</pre> </div>
#ifdef PARTY_FINDvoid OnAllowParty( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long );endif //PARTY_FIND
User.h(ebenso):
<div>Code:<pre>#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
</pre>
</div>party.h:
<div>Code:<pre>#ifdef PARTY_FIND
BOOL m_bAllowEnter;
endif
</pre> </div>
#ifdef __PARTY_FINDCParty* GetPartyFree();endif
WndParty.cpp:
OnChildNotify:
<div>Code:<pre>#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
</pre>
</div>OnDraw:
<div>Code:<pre>#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
</pre>
</div>DPClient.h(public):
<div>Code:<pre>#ifdef __PARTY_FIND
void OnPartyAllowJoin( CAr& ar );
void SendAllowParty( u_long idLeader, u_long idParty, BOOL bAllow );
endif //__PARTY_FIND
</pre>
</div>
</strong> </div> </div></span></p>
..อยาก..เข้าใจ..เรื่อง..และ..ตัว..ประเภท..นี้..อ้ะะๆ