[Release] AFK System

11/11/2013 14:48 Chriѕ#1
Das es Leute gibt die mit diesem System Geld verdienen wollen stell ich es mal auf diesem Forum public. Wenn ich etwas beim kopieren aus dem Source vergessen habe schreibt es drunter ^.^

Das System ist 1:1 wie es auf Lumex läuft.


DPClient.cpp // void CDPClient::OnSnapshot( CAr & ar )


unter:

PHP Code:
#endif    // __TRAFIC_1218
//        TRACE( "hdr = %04x, cb = %d\n", hdr, cb );
        
g_hdr = (BYTE)( hdr );

        switch( 
hdr )
        { 

über:

PHP Code:
case SNAPSHOTTYPE_MOVERMOVED:    OnMoverMovedobjidar );    break;
            case 
SNAPSHOTTYPE_MOVERBEHAVIOR:        OnMoverBehaviorobjidar );    break;
            case 
SNAPSHOTTYPE_MOVERMOVED2:    OnMoverMoved2objidar );    break; 

das:
PHP Code:
//__AFK_NOTIFY
            
case SNAPSHOTTYPE_AFKCHANGE:    OnAFKToggleobjidar ); break;
// 

über :

PHP Code:
void CDPClient::OnMoverMovedOBJID objidCAr ar 

das:

PHP Code:
void CDPClient::OnAFKToggleOBJID objidCAr ar )
{
    
BOOL isAfk FALSE;
    
ar >> isAfk;
    
    
//::OUTPUTDEBUGSTRING("Toggling AFK to %d\n", isAfk);

    
CMoverpMover    prj.GetMoverobjid );

    if( 
IsValidObj( (CObj*)pMover ) ) 
        
pMover->isAFK isAfk;

DPClient.h

über:

PHP Code:
void    OnMoverMovedOBJID objidCAr ar );
    
void    OnMoverBehaviorOBJID objidCAr ar );
    
void    OnMoverMoved2OBJID objidCAr ar );
    
void    OnMoverBehavior2OBJID objidCAr ar ); 
das:

PHP Code:
//__AFK_NOTIFY
    
void    OnAFKToggleOBJID objidCAr ar );
//__AFK_NOTIFY 

DPSrvr.cpp:

in: void CDPSrvr::OnPlayerMoved

sucht ihr nach:

PHP Code:
            pUser->m_CorrAction.dwMotionOption    dwMotionOption;
            
pUser->m_CorrAction.fValid    TRUE;

            
pUser->SetDestPosv, ( dwState OBJSTA_MOVE_ALL ) != OBJSTA_BMOVE ); 
darunter:
PHP Code:
CTime Now CTime::GetCurrentTime(); //__AFK_NOTIFY

            
CMovercMover = (CMover*)pUser;
            
cMover->m_ctLastAction Now;

            if(
cMover->isAFK)
            {
                
cMover->isAFK FALSE;
                
g_UserMng.AddAFKToggle(cMovercMover->isAFK); 
            }
        } 
    } 
Mover.cpp

unter:

PHP Code:
    memset( &m_Resurrection_Data0sizeof(m_Resurrection_Data) );

    
m_bRegenItem        TRUE;
    
m_bActiveAttack        FALSE;
    
m_dwGold            0;        // 0À¸·Î ÇÒ°Í.  -xuzhu- 
das:

PHP Code:
    // __AFK_NOTIFY
    
m_ctLastAction CTime::GetCurrentTime();
    
isAFK FALSE;
    
// 

Mover.h

unter:
PHP Code:
    DWORD            m_dwMotionOption;            /// ¸ð¼Ç Ãß°¡ ¿É¼Ç
    
OBJMSG            m_dwMotionArrive;            /// À̵¿ ¿Ï·á ÈÄ ¸ð¼Ç

    
DWORD            m_dwTickRecovery;            /// ¾ÉÀº »óÅÂÀÇ hp, mp º¹±¸ timer
    
DWORD            m_dwTickRecoveryStand;        /// stand »óÅÂÀÇ hp, mp º¹±¸ timer 
und über:

PHP Code:
#ifdef __VTN_TIMELIMIT
    
int                m_nAccountPlayTime;        //ms´ÜÀ§ °èÁ¤ Ç÷¹ÀÌ ½Ã°£
#endif // __VTN_TIMELIMIT 
das:

PHP Code:
    // __AFK_NOTIFY

CTime            m_ctLastAction;

BOOL            isAFK;
    
// ///// 
ObjSerializeOpt.cpp

in: void CMover::Serialize( CAr & ar ) sucht ihr nach:
PHP Code:
#if __VER >= 12 // __MOD_TUTORIAL
                
ar << m_nTutorialState;
#else    // __MOD_TUTORIAL
                
ar << (u_short)m_nFlightLv;
#endif    // __MOD_TUTORIAL
                
ar << m_nFxp;
                
                
dwGold GetGold();
                
ar << dwGold
darunter:
PHP Code:
ar << isAFK//// __AFK_NOTIFY 

und sucht nach:

PHP Code:
#else    // __MOD_TUTORIAL
                
ar >> (u_short&)m_nFlightLv;
#endif    // __MOD_TUTORIAL
                
ar >> m_nFxp;

                
ar >> dwGold;
                
SetGolddwGold ); 
darunter:

PHP Code:
ar << isAFK//// __AFK_NOTIFY 

MsgHdr.h

unter:

PHP Code:
#define    SNAPSHOTTYPE_QUERYMAILBOX_REQ                (WORD)0x8860 
das:

PHP Code:
#define    SNAPSHOTTYPE_AFKCHANGE                    (WORD)0x8886 // __AFK_NOTIFY# 


Network / Obj.cpp

unter:
PHP Code:
#if __VER >= 12 // __MOD_TUTORIAL
    
m_nTutorialState    0;
#else    // __MOD_TUTORIAL
    
m_nFlightLv        0;
#endif    // __MOD_TUTORIAL
    
m_nFxp            0;
//    m_nTxp            = 0;
    
m_bySex        SEX_FEMALE;
    
m_dwRideItemIdx        0;

      
m_dwGold    0
und über:

PHP Code:
    m_nJob    = -1;
    
    
m_nStr    m_nSta    m_nDex    m_nInt    15

das:

PHP Code:
isAFK FALSE///__AFK_NOTIFY 

Network / Obj.h

unter:

PHP Code:
    BOOL    IsEquipableNPC()    {    return FALSE;    }

    
LONG            m_nFxp;
    
BYTE            m_bySex;
    
DWORD            m_dwRideItemIdx;
    
int                m_nFuel;
    
LONG            m_nJob;
    
BYTE            m_nSlot;
    
char            m_szBankPass[5];
    
int                m_idGuildCloak
das:

PHP Code:
BOOL            isAFK/// __AFK_NOTIFY 


MoverRender.cpp

unter:

PHP Code:
if( IsPlayer() )
    {
        if( 
GetWorld()->GetID() == WI_WORLD_GUILDWAR && g_pPlayer->GetGuild() && GetGuild() )
        {
            
bOtherColor TRUE;
            if( 
g_pPlayer->GetGuild()->GetGuildId() == GetGuild()->GetGuildId() )
                
dwNewColor COLOR_GUILDCOMBAT;
            else
                
dwNewColor COLOR_PLAYER;                            
        }
    if(
m_dwAuthorization >= AUTH_GENERAL)
    {
    
CString strName;
    
strName szName
und über :

PHP Code:
#if __VER >= 13 // __HONORABLE_TITLE 
das:


PHP Code:
if(isAFK//////// AFK_NOTIFY
        
{
        
strName += "[AFK] ";
        }

        
strcpyszName, (LPCTSTR)strName );
    } 


EDIT: // Vergessen danke ;)



User.cpp

ganz ans Ende:


PHP Code:
void CUserMng::AddAFKToggle(CMoverpMoverBOOL isAFK)
{
    
CAr ar;
    
ar << GETIDpMover ) << SNAPSHOTTYPE_AFKCHANGE;
    
ar << isAFK;

    
GETBLOCKarlpBufnBufSize );

    
FOR_VISIBILITYRANGEpMover )
        
//if( USERPTR != pMover )
            
USERPTR->AddBlocklpBufnBufSize );
    
NEXT_VISIBILITYRANGEpMover )

Nach:

PHP Code:
#ifdef __EVENTLUA_KEEPCONNECT
        
prj.m_EventLua.SetKeepConnectEventthisdwTick );
#endif // __EVENTLUA_KEEPCONNECT 
dashier:


PHP Code:
        if(timeSpan.GetMinutes() >= 10 && !isAFK)
        {
            
isAFK TRUE;
            
g_UserMng.AddAFKToggle(thisisAFK);
        } 

User.h


unter:

PHP Code:
    void            RemoveUserFromCacheMsgCUser *pUser ); 
dashier:

PHP Code:
    void            AddAFKToggle(CMoverpMoverBOOL isAFK); 
11/11/2013 15:14 Iban24#2
Nichtmal richtig C&P kannst du.


User.cpp

ganz ans Ende:
Code:
void CUserMng::AddAFKToggle(CMover* pMover, BOOL isAFK)
{
	CAr ar;
	ar << GETID( pMover ) << SNAPSHOTTYPE_AFKCHANGE;
	ar << isAFK;

	GETBLOCK( ar, lpBuf, nBufSize );

	FOR_VISIBILITYRANGE( pMover )
		//if( USERPTR != pMover )
			USERPTR->AddBlock( lpBuf, nBufSize );
	NEXT_VISIBILITYRANGE( pMover )
}
Nach:

Code:
void CUser::Process()
{
	if( IsValid() == FALSE )
		return;

	DWORD dwTick	= g_tmCurrent;
dashier:

Code:
	CTime Now = CTime::GetCurrentTime();
	CTimeSpan timeSpan = Now - m_ctLastAction;
Nach:

Code:
#ifdef __EVENTLUA_KEEPCONNECT
		prj.m_EventLua.SetKeepConnectEvent( this, dwTick );
#endif // __EVENTLUA_KEEPCONNECT
dashier:

Code:
		if(timeSpan.GetMinutes() >= 10 && !isAFK)
		{
			isAFK = TRUE;
			g_UserMng.AddAFKToggle(this, isAFK);
		}
User.h

unter:

Code:
	void			RemoveUserFromCacheMsg( CUser *pUser );
dashier:

Code:
public:	
void			AddAFKToggle(CMover* pMover, BOOL isAFK);
private:
Btw wenn man mit der Maus im Spiel rumläuft geht der AFK titel nicht weg.
Wer den Fix dazu haben will -> PN

Edit: du hast einen Fehler beim 2. ar << isAFK; das muss ar >> isAFK; sein
11/11/2013 18:01 LoscArmy#3
Hello and thanks for the release, but I have errors :x :

Code:
c:\Users\Official Source\WORLDSERVER\DPSrvr.cpp(2408): error C2143: syntax error : missing ';' before '}'
c:\Users\Official Source\WORLDSERVER\User.cpp(523): error C2065: 'timeSpan' : undeclared identifier
c:\Users\Official Source\WORLDSERVER\User.cpp(523): error C2228: left of '.GetMinutes' must have class/struct/union type
        type is ''unknown-type''
c:\Users\Official Source\WORLDSERVER\User.cpp(526): error C2248: 'CUserMng::AddAFKToggle' : cannot access private member declared in class 'CUserMng'
        c:\users\official source\worldserver\User.h(826) : see declaration of 'CUserMng::AddAFKToggle'
        c:\users\official source\worldserver\User.h(814) : see declaration of 'CUserMng'
c:\Users\Official Source\WORLDSERVER\DPSrvr.cpp(2402): error C2248: 'CUserMng::AddAFKToggle' : cannot access private member declared in class 'CUserMng'
If u know how fix it please, thanks u so much in advances!
11/12/2013 10:52 Velmore#4
Quote:
c:\Users\Official Source\WORLDSERVER\DPSrvr.cpp(2408): error C2143: syntax error : missing ';' before '}'
Read the error.
11/12/2013 22:46 Wanetrain#5
Quote:
Originally Posted by Iban24 View Post
Nichtmal richtig C&P kannst du.


User.cpp

ganz ans Ende:
Code:
void CUserMng::AddAFKToggle(CMover* pMover, BOOL isAFK)
{
	CAr ar;
	ar << GETID( pMover ) << SNAPSHOTTYPE_AFKCHANGE;
	ar << isAFK;

	GETBLOCK( ar, lpBuf, nBufSize );

	FOR_VISIBILITYRANGE( pMover )
		//if( USERPTR != pMover )
			USERPTR->AddBlock( lpBuf, nBufSize );
	NEXT_VISIBILITYRANGE( pMover )
}
Nach:

Code:
void CUser::Process()
{
	if( IsValid() == FALSE )
		return;

	DWORD dwTick	= g_tmCurrent;
dashier:

Code:
	CTime Now = CTime::GetCurrentTime();
	CTimeSpan timeSpan = Now - m_ctLastAction;
Nach:

Code:
#ifdef __EVENTLUA_KEEPCONNECT
		prj.m_EventLua.SetKeepConnectEvent( this, dwTick );
#endif // __EVENTLUA_KEEPCONNECT
dashier:

Code:
		if(timeSpan.GetMinutes() >= 10 && !isAFK)
		{
			isAFK = TRUE;
			g_UserMng.AddAFKToggle(this, isAFK);
		}
User.h

unter:

Code:
	void			RemoveUserFromCacheMsg( CUser *pUser );
dashier:

Code:
public:	
void			AddAFKToggle(CMover* pMover, BOOL isAFK);
private:
Btw wenn man mit der Maus im Spiel rumläuft geht der AFK titel nicht weg.
Wer den Fix dazu haben will -> PN
Willst es drauf anlegen? meine fresse ich Release den Scheiß einfach, dein Code hier ist genau so großer scheiß, komm wir belasten der Server mit einer sinnlosen AFK abfrage noch, hey haben ja nichts besseres zutun, omg.

Ganz im ernst, was bringt es euch wenn da AFK im Name steht? klar andere wissen "aha, der ist AFK" allerdings 1x anschreiben lohnt auch. ._.
11/12/2013 23:10 Velmore#6
Quote:
Originally Posted by Wanetrain View Post
Willst es drauf anlegen? meine fresse ich Release den Scheiß einfach, dein Code hier ist genau so großer scheiß, komm wir belasten der Server mit einer sinnlosen AFK abfrage noch, hey haben ja nichts besseres zutun, omg.

Ganz im ernst, was bringt es euch wenn da AFK im Name steht? klar andere wissen "aha, der ist AFK" allerdings 1x anschreiben lohnt auch. ._.
Ich finde es sinnvoll wenn man beim Chat Fenster z.b. anzeigt ob der andere schon 5min oder länger untätig ist.
11/12/2013 23:33 Wanetrain#7
Quote:
Originally Posted by Velmore View Post
Ich finde es sinnvoll wenn man beim Chat Fenster z.b. anzeigt ob der andere schon 5min oder länger untätig ist.
Ja, gut, stimm ich dir zu dass es teils sinnvoll ist, allerdings ist es wiederrum sinnfrei damit den Server zu belasten, lasst dass doch einfach den Client machen, er sendet nach untätigkeit (MsgProc) einfach ein Packet mit "Jo, ick bin AFK".

Wenn jetzt jemand sagt "ja aber dann könnte man Cheaten etc" was bringt es einem ein AFK Titel zu Cheaten? wt..f? :o
11/12/2013 23:52 19Dani92#8
Quote:
Originally Posted by Chriѕ View Post
Das es Leute gibt die mit diesem System Geld verdienen wollen stell ich es mal auf diesem Forum public.
Ich weiß echt nicht was ihr immer mit solchen Meldung habt.
Irgendjemand hat es gecoded und sollte wenn er möchte dafür Geld verlangen dürfen, auch wenns mal was nicht so großes ist.

Du kannst dir ja auch nicht den Maler zum Streichen einer Mauerseite ins Haus holen und ihm dann sagen dass er für so eine "Kleinigkeit" kein Geld verlangen darf. Absolutes Fehldenken meiner Meinung nach...
11/16/2013 19:07 WooTheFck#9
DPClient.cpp

This:

void CDPClient::OnMoverMoved( OBJID objid, CAr & ar )
{
void CDPClient::OnAFKToggle( OBJID objid, CAr & ar )
{
BOOL isAfk = FALSE;
ar >> isAfk;

//::OUTPUTDEBUGSTRING("Toggling AFK to %d\n", isAfk);

CMover* pMover = prj.GetMover( objid );

if( IsValidObj( (CObj*)pMover ) )
pMover->isAFK = isAfk;
}



or This :

void CDPClient::OnMoverMoved( OBJID objid, CAr & ar )

void CDPClient::OnAFKToggle( OBJID objid, CAr & ar )
{
BOOL isAfk = FALSE;
ar >> isAfk;

//::OUTPUTDEBUGSTRING("Toggling AFK to %d\n", isAfk);

CMover* pMover = prj.GetMover( objid );

if( IsValidObj( (CObj*)pMover ) )
pMover->isAFK = isAfk;
}
{
11/19/2013 20:50 LoscArmy#10
It's great work thanks, but when the title [AFK] disappears only when one moves with the "Q".. Keys and I want it to work when you move the mouse too.

Thanks so much in advances et sry for my bad english
11/20/2013 00:12 emo02#11
Quote:
Originally Posted by LoscArmy View Post
It's great work thanks, but when the title [AFK] disappears only when one moves with the "Q".. Keys and I want it to work when you move the mouse too.

Thanks so much in advances et sry for my bad english

bro where you can puit this?

void CDPClient::OnAFKToggle( OBJID objid, CAr & ar )
{
BOOL isAfk = FALSE;
ar >> isAfk;

//::OUTPUTDEBUGSTRING("Toggling AFK to %d\n", isAfk);

CMover* pMover = prj.GetMover( objid );

if( IsValidObj( (CObj*)pMover ) )
pMover->isAFK = isAfk;
}
11/20/2013 00:16 LoscArmy#12
Quote:
Originally Posted by emo02 View Post
bro where you can puit this?

void CDPClient::OnAFKToggle( OBJID objid, CAr & ar )
{
BOOL isAfk = FALSE;
ar >> isAfk;

//::OUTPUTDEBUGSTRING("Toggling AFK to %d\n", isAfk);

CMover* pMover = prj.GetMover( objid );

if( IsValidObj( (CObj*)pMover ) )
pMover->isAFK = isAfk;
}
Before this:

Code:
void CDPClient::OnMoverMoved( OBJID objid, CAr & ar )
{
Add this:

Code:
void CDPClient::OnAFKToggle( OBJID objid, CAr & ar ) 
{ 
    BOOL isAfk = FALSE; 
    ar >> isAfk; 
     
    //::OUTPUTDEBUGSTRING("Toggling AFK to %d\n", isAfk); 

    CMover* pMover    = prj.GetMover( objid ); 

    if( IsValidObj( (CObj*)pMover ) )  
        pMover->isAFK = isAfk; 
}
(So you get this:

Code:
const	int	nRevision	= 35;

void CDPClient::OnAFKToggle( OBJID objid, CAr & ar ) 
{ 
    BOOL isAfk = FALSE; 
    ar >> isAfk; 
     
    //::OUTPUTDEBUGSTRING("Toggling AFK to %d\n", isAfk); 

    CMover* pMover    = prj.GetMover( objid ); 

    if( IsValidObj( (CObj*)pMover ) )  
        pMover->isAFK = isAfk; 
}

void CDPClient::OnMoverMoved( OBJID objid, CAr & ar )
{
	TRACE( "OnMoverMoved()\n" );
	D3DXVECTOR3 v, vd;
	float f;
	DWORD dwState, dwStateFlag, dwMotion	= 0;
	int nMotionEx	= 0, nLoop;
	DWORD dwMotionOption;
	__int64 nTickCount;
12/07/2013 11:06 kun_sama13#13
d:\Source\Program\WORLDSERVER\User.cpp(246): error C2065: 'timeSpan' : undeclared identifier
d:\Source\Program\WORLDSERVER\User.cpp(246): error C2228: left of '.GetMinutes' must have class/struct/union type
type is ''unknown-type''
12/07/2013 17:55 Lumi#14
Quote:
Originally Posted by kun_sama13 View Post
d:\Source\Program\WORLDSERVER\User.cpp(246): error C2065: 'timeSpan' : undeclared identifier
d:\Source\Program\WORLDSERVER\User.cpp(246): error C2228: left of '.GetMinutes' must have class/struct/union type
type is ''unknown-type''
You have to declare timeSpan. Just read the error.
12/07/2013 17:56 .HC'IReIReXx.#15
Tahnks 4 share