[Source]Gmlist

10/14/2011 13:15 .Crasy#16
Quote:
Originally Posted by Sedrika View Post
In einer For schleife ist das ganze totaler mist finde ich.
Wenn man keine Fehler will ist das richtig.

Ich frag mich allerdings, was willst du mit dem "online"? kanst auch gleich abfragen ob kein GM on is anstat da Online++; und if( Online == 0 ) bla zu machen.
10/14/2011 22:12 FragGoogle#17
Also so klappt es zumindest bei mir nicht.
Gm steht neben mir wird jedoch ganze zeit keine Gms online angezeigt
Habs mit einem Gm level 1 und 3 ausprobiert klappt keins von beiden :>
02/02/2016 21:02 NoWay | Phoenix#18
Works now
#Done
10/12/2017 17:58 Schulzie#19
Hallo,
ich möchte dies Thema mal wieder aufgreifen, da ich es grade probiere.
Soweit habe ich es hinbekommen, aber es wird nur ein Admin (P) angezeigt, kein GM (L). Die Abfrage '&& !pUser2->HasBuff( BUFF_ITEM, II_SYS_SYS_SCR_SMELPROT )' habe ich rausgenommen, aber das sollte ja nicht das Problem sein.
Ich habe auch mal die AUTH in der Abfrage geändert, aber es wird nichts angezeigt. Normalerweise ist das ja AUTH_GAMEMASTER, aber auch hier wird kein GM angezeigt.

Könnte mir dabei bitte einer behilflich sein.
Danke !

Hier ein paar Screens:

ADMIN
[Only registered and activated users can see links. Click Here To Register...]

GM
[Only registered and activated users can see links. Click Here To Register...]

SOURCE FuncTextCmd.cpp (neuz & worldserver defines = ok)
[Only registered and activated users can see links. Click Here To Register...]

Code:
#define AUTH_OBSERVER      'D'
#define AUTH_GENERAL       'F'
#define AUTH_LOGCHATTING   'G'
#define AUTH_JOURNALIST    'H'
#define AUTH_HELPER        'J'
#define AUTH_GAMEMASTER    'L'
#define AUTH_GAMEMASTER2   'M'
#define AUTH_GAMEMASTER3   'N'
#define AUTH_OPERATOR      'O'
#define AUTH_ADMINISTRATOR 'P'
10/12/2017 18:16 Blouflash#20
Quote:
Originally Posted by Schulzie View Post
Hallo,
ich möchte dies Thema mal wieder aufgreifen, da ich es grade probiere.
Soweit habe ich es hinbekommen, aber es wird nur ein Admin (P) angezeigt, kein GM (L). Die Abfrage '&& !pUser2->HasBuff( BUFF_ITEM, II_SYS_SYS_SCR_SMELPROT )' habe ich rausgenommen, aber das sollte ja nicht das Problem sein.
Ich habe auch mal die AUTH in der Abfrage geändert, aber es wird nichts angezeigt. Normalerweise ist das ja AUTH_GAMEMASTER, aber auch hier wird kein GM angezeigt.

Könnte mir dabei bitte einer behilflich sein.
Danke !
Code:
    for ( int i = 0; i < g_UserMng.GetCount(); i++ ){
        CUser* pUser2 = static_cast<CUser*>( prj.GetUserByID( i ) );
:facepalm:

Code:
BOOL TextCmd_gml(CScanner& scanner)
{
#ifdef __WORLDSERVER
	CUser* pUser = (CUser*)scanner.dwValue;
	for (auto const& user : g_UserMng.m_users)
	{
		if (IsValidObj(user.second) && user.second->IsAuthHigher(AUTH_GAMEMASTER))
		{
			pUser->AddText(user.second->GetName());
		}
	}
#endif
	return TRUE;
}
Nimm das. Sollte gehen. Musst aber m_users noch auf public setzen in User.h

EDIT:
Wenn du Wert auf Performance legst, solltest du eine zusätzliche map<> erstellen in der dann nur Team User sind und dann durch diese map iterieren.

EDIT2: @[Only registered and activated users can see links. Click Here To Register...]

Code:
BOOL TextCmd_gml(CScanner& scanner)
{
#ifdef __WORLDSERVER
	CUser* pUser = (CUser*)scanner.dwValue;
	CString strAuthName = "";

	pUser->AddText("Admin/GameMaster online:");
	for (auto const& user : g_UserMng.m_users)
	{
		if (IsValidObj(user.second) && user.second->IsAuthHigher(AUTH_GAMEMASTER))
		{
			switch (user.second->m_dwAuthorization)
			{
				case AUTH_ADMINISTRATOR:
					strAuthName = "[ADMIN] ";
					break;
				case AUTH_GAMEMASTER:
					strAuthName = "[GM] ";
					break;
			}

			pUser->AddText(strAuthName + user.second->GetName());
		}
	}
#endif
	return TRUE;
}
10/12/2017 19:18 Schulzie#21
Danke. Es läuft.
Wie bekomme ich jetzt noch eine Überschrift rein zB: "Admin/GameMaster online:"

Zum Edit:
könntest Du mir das genauer erklären?
Ich bin ja nicht so gut wie Du. ;)
Was müsste ich machen?
10/12/2017 21:26 Sedrika#22
Kannst ja noch ein if/else einbauen mit IsAuthorization und einen string parsen ;)
10/13/2017 09:50 Schulzie#23
@ Blouflash : Dickes Danke ! Hab dein Edit grade gesehen ;)
Ich war auch schon fast soweit, hatte aber einen blöden Denkfehler... :(

[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
10/14/2017 13:33 FlyServices#24
g_UserMng.GetCount() = online player. So if you have 300 offlines players and 30 onlines players the loop will start to 0 and end at 30.

The 30 onlines players will have ID 330, 331, ...
So your loop can't works
10/14/2017 16:02 Schulzie#25
@ FlyServices : wir sind doch schon viel weiter....:confused::facepalm:;)
10/14/2017 16:57 FlyServices#26
Quote:
Originally Posted by Schulzie View Post
@ FlyServices : wir sind doch schon viel weiter....:confused::facepalm:;)
^^
10/14/2017 17:06 Schulzie#27
Was soll uns das nun sagen ?:confused:
Eine extra App dafür ?
03/06/2019 10:01 Lindanus#28
Ich arbeite grade an meiner vs2003 source und möchte das gmlist command zum laufen bringen, aber es funktioniert nicht so richtig.
Der Befehlt wird zwar ausgeführt, aber es kommt nur die Überschrift und dann 'Kein GM da.', obwohl ein GM online ist...
Beim Compilieren kommt auch kein Fehler.

Was mache ich falsch?:confused:

Code:
#ifdef __USER_COMMAND
BOOL TextCmd_gml ( CScanner& scanner )
{
#ifdef __WORLDSERVER
    CUser* pUser = (CUser*)scanner.dwValue;
    CString Nick;
    int online = 0;
    g_DPCoreClient.SendGetPlayerCount( pUser->m_idPlayer );
	pUser->AddText( "GM's online:" );
    for ( int i = 0; i < g_UserMng.GetCount(); i++ ){
        CUser* pUser2 = static_cast<CUser*>( prj.GetUserByID( i ) );
        if( IsValidObj( pUser2 ) && pUser2->IsAuthHigher( AUTH_GAMEMASTER ) && !pUser2->HasBuff( BUFF_ITEM, II_SYS_SYS_SCR_SMELPROT  ) ){
            Nick = CPlayerDataCenter::GetInstance()->GetPlayerString( i );
            pUser->AddText( Nick + " [Online]" );
            online++;
        }
    }
    if( online == 0 )
        pUser->AddText( "Kein GM da." );
#endif
    return TRUE;
}
#endif // __USER_COMMAND
03/08/2019 19:11 Drabur#29
Quote:
Originally Posted by Lindanus View Post
Ich arbeite grade an meiner vs2003 source und möchte das gmlist command zum laufen bringen, aber es funktioniert nicht so richtig.
Der Befehlt wird zwar ausgeführt, aber es kommt nur die Überschrift und dann 'Kein GM da.', obwohl ein GM online ist...
Beim Compilieren kommt auch kein Fehler.

Was mache ich falsch?:confused:

Code:
#ifdef __USER_COMMAND
BOOL TextCmd_gml ( CScanner& scanner )
{
#ifdef __WORLDSERVER
    CUser* pUser = (CUser*)scanner.dwValue;
    CString Nick;
    int online = 0;
    g_DPCoreClient.SendGetPlayerCount( pUser->m_idPlayer );
	pUser->AddText( "GM's online:" );
    for ( int i = 0; i < g_UserMng.GetCount(); i++ ){
        CUser* pUser2 = static_cast<CUser*>( prj.GetUserByID( i ) );
        if( IsValidObj( pUser2 ) && pUser2->IsAuthHigher( AUTH_GAMEMASTER ) && !pUser2->HasBuff( BUFF_ITEM, II_SYS_SYS_SCR_SMELPROT  ) ){
            Nick = CPlayerDataCenter::GetInstance()->GetPlayerString( i );
            pUser->AddText( Nick + " [Online]" );
            online++;
        }
    }
    if( online == 0 )
        pUser->AddText( "Kein GM da." );
#endif
    return TRUE;
}
#endif // __USER_COMMAND
Wenn das Item II_SYS_SYS_SCR_SMELPROT aktiviert ist, wird er nicht angezeigt und der sollte auch AUTH_GAMEMASTER haben.
03/08/2019 20:08 Lindanus#30
Danke, aber das weiss ich schon und ist nicht das Problem.
Es gibt glaube ich ein Problem mit dem Antihack......