[Source]Admin & User online anzahl

12/14/2012 02:51 Jopsi332#1
Dieses tut lässt euch im Worldserver die user und staff online anzah ausgeben



user.h
Code:
unter
	LONG			GetCount()	{	return m_lCount;	}
das

#ifdef __WORLDSERVER_ADMIN
	LONG			GetUserCount()	{	return m_uCount;	}
	LONG			GetAdminCount()	{	return m_sCount;	}
	void			AddUserCount() ;
	void			AddAdminCount() ;
#endif

unter

class CUserMng
{
public:
CUserMng();
virtual ~CUserMng();

private:
long m_lCount;

Das adden:
#ifdef __WORLDSERVER_ADMIN
long m_uCount;
long m_sCount;
#endif
user.cpp

Code:
am ende dieser funktion :
#ifdef __MAP_SECURITY
void CUser::Open( DWORD dwWorldId )
#else // __MAP_SECURITY
void CUser::Open( void )
#endif // __MAP_SECURITY

#ifdef __WORLDSERVER_ADMIN
		if(IsAuthHigher(AUTH_GAMEMASTER))
			g_UserMng.AddAdminCount(); 
		else
			g_UserMng.AddUserCount();
#endif
Code:
unter
CUserMng::CUserMng()
{
	m_lCount = 0;
das
#ifdef __WORLDSERVER_ADMIN
	m_sCount = 0;
	m_uCount = 0;
#endif
Code:
unter
void CUserMng::RemoveAllUsers()
{
	map<DWORD, CUser*>::iterator it;
	for( it = m_users.begin(); it != m_users.end(); ++it )
	{
		DestroyPlayer( it->second );
	}

	m_users.clear();
	m_lCount = 0;
das
#ifdef __WORLDSERVER_ADMIN
	m_sCount = 0;
	m_uCount = 0;
#endif

in user.cpp

Code:
#ifdef __WORLDSERVER_ADMIN
void CUserMng::AddUserCount()
{
	++m_uCount;
}
void CUserMng::AddAdminCount()
{
	++m_sCount;
}
#endif
adden

Code:
unter
void CUserMng::RemoveUser( DWORD dwSerial )
{
	map<DWORD, CUser*>::iterator it = m_users.find( dwSerial );
	if( it == m_users.end() )
		return;

	CUser* pUser = it->second;

	if( IsValidObj( pUser ) ) 
	{
		pUser->OnTradeRemoveUser();

		m_users.erase( it );
		--m_lCount;
das adden
		#ifdef __WORLDSERVER_ADMIN
		if(pUser->IsAuthHigher(AUTH_GAMEMASTER))
			--m_sCount; 
		else
			--m_uCount;
#endif
threadmng.cpp
Code:
unter
#ifdef __INFINITE_0227
	if( dwTick > 1000 )
	{
		char szBuffer[256];
			sprintf( szBuffer, 
					"OP: %d, %2.1f, %2.1f, %2.1f, %2.1f, %2.1f, %2.1f, %2.1f, %2.1f, %2.1f, %2.1f, %2.1f, %2.1f\n",
					dwTick, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12 );
			Error( szBuffer );
	}
#endif	// __INFINITE_0227

	if( dwElapsed > 1000 )
	{
		SetLogInfo( LOGTYPE_CCU, "CCU:%d", g_UserMng.GetCount() );

das

#ifdef __WORLDSERVER_ADMIN

					SetLogInfo( LOGTYPE_USER, "Online User:%d ", g_UserMng.GetUserCount() );
				    SetLogInfo( LOGTYPE_ADMIN, "Online Staff:%d ", g_UserMng.GetAdminCount() );
			   
#endif
worldserver.h

Code:
unter
void RedirectIOToConsole();
enum LOGTYPE
{
	LOGTYPE_TIME,
	LOGTYPE_CCU,
	LOGTYPE_PERFOMANCE,
	LOGTYPE_RESPAWN,
	LOGTYPE_WARN1,
	LOGTYPE_WARN2,
	LOGTYPE_MAP,
das
#ifdef __WORLDSERVER_ADMIN
	LOGTYPE_ADMIN,
	LOGTYPE_USER,
#endif

nun steht im worldserver fenster

Online Staff : x
Online User : x

(x = anzahl)
12/14/2012 03:26 guiieduardo#2
Nice! I'll test on my server
12/14/2012 06:41 Icetea#3
Nice. Vielen Dank Jopsi :) werde ich in meine Source einbauen compilen und direkt probieren ;)
12/14/2012 14:35 uKn0w'#4
Du solltest In User.h noch
Quote:
class CUserMng
{
public:
CUserMng();
virtual ~CUserMng();

private:
suchen und dann unter dem
Quote:
long m_lCount;
Das adden:
Quote:
#ifdef __WORLDSERVER_ADMIN
long m_uCount;
long m_sCount;
#endif
Ansonsten ist es ganz nützlich ^.^
12/14/2012 14:56 RoFDokers#5
Ich finde es ganz gut so kann ein Owner immer schauen ob sein Team online ist und muss nicht Ingame dazu
12/14/2012 23:33 Velmore#6
Muss nicht unter
Quote:
CUser* CUserMng::AddUser( DPID dpidCache, DPID dpidUser, DPID dpidSocket )
{
CUser *pUser = GetUser( dpidCache, dpidUser );
if( pUser == NULL )
{
++m_lCount;
Quote:
#ifdef __WORLDSERVER_ADMIN
if(pUser->IsAuthHigher(AUTH_GAMEMASTER))
++m_uCount;
else
++m_sCount;
#endif
weil er ja sonst nich hochzählt.
Habs aber noch nicht getestet
12/15/2012 00:02 Unleashed!#7
Quote:
Originally Posted by Velmore View Post
Muss nicht unter




weil er ja sonst nich hochzählt.
Habs aber noch nicht getestet
Quote:
if(IsAuthHigher(AUTH_GAMEMASTER))
g_UserMng.AddAdminCount();
else
g_UserMng.AddUserCount();
Guck dir die beiden Funktionen mal an. Mal ehrlich, der einzige Grund dafür, dass in Funktionen zu packen, wäre die Übersicht, man könnte halt nachher nochmal was an einer Stelle ändern aber bei einer Zeile Code gleich ne Funktion drauß machen? o.O Das ist ungefähr genauso sinnvoll wie das hier:
Quote:
public int Addiere(int x, int y) { return x+y; }
12/15/2012 00:29 Velmore#8
habs mal versucht und beim einloggen hat der jetzt bei mir nicht hochgezählt.