Adminrank auslesen [name]

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey,
    ich möchte, wenn ich etwas in meinen AdminLogs speichere, das dort der Adminrank ausgegeben wird.
    Allerdings nicht die Zahl des Ranges sonder ein Name(z.B. Administrator, Supporter, Projektleiter) usw...
    Irgendwie habe ich einen Denkfehler / Logikfehler und weiß einfach nicht wie ich das ganze Programmieren soll, das er immer aus der Zahl, der abfrage des Adminlevels sagt, 1 == supporter, 2 == so undso ...


    Hier ein Beispiel:

    Code
    format(string,sizeof(string),"%s hat von %s den Adminrang in %d geändert.",aName,pName,a_level);


    in:

    Code
    format(string,sizeof(string),"%s %s hat von %s den Adminrang in %d geändert.",adminrank,aName,pName,a_level);

    und bei Adminrank soll dann in Buchstaben der Rang, den ich vorher definiere (wäre schön wenn nur einmal) , stehen.
    Ich hoffe ihr versteht, was ich meine, ich komme einfach nicht auf die Lösung des problems, also wie ich soetwas anstellen kann.


    mfg,
    .Pioneer

  • Du könntest ne Funktion schreiben

    C
    stock AdminrankToName(adminrank, name[], len) {
    	if(adminrank == 0) return format(name, len, "Spieler", 0);
    	else if (adminrank == 1) return format(name, len, "Supporter", 0);
    	else if (adminrank== 2) return format(name, len, "Administrator", 0);
    	return false;
    }


    die dann so benutzen



    C
    new lRank[24];
    AdminrankToName(adminrank, lRank, 24);
    format(string,sizeof(string),"%s %s hat von %s den Adminrang in %i geändert.",lRank,aName,pName,a_level);
  • Das ", 0" am Ende von format in dem stock kannst du weg lassen, format funktioniert auch ganz ohne die Parameter für die Platzhalter.


    Allerdings brauchst du bei der Methode die du vor schlägst jedes mal eine Variable. Geschickter zum benutzen ist es so:

    C
    stock AdminrankName(playerid) {
    	new name[16] = "Unbekannt";
    	new adminrank = PlayerInfo[playerid][pLevel];
    	if(adminrank == 0) name = "Spieler";
    	else if (adminrank == 1) name = "Supporter";
    	else if (adminrank== 2) name = "Administrator";
    	return name;
    }


    Dann kannst du es einfach so verwenden:


    C
    format(string,sizeof(string),"%s %s hat von %s den Adminrang in %i geändert.",AdminrankName(playerid),aName,pName,a_level);
  • Hey,


    ich habe es soweit ausprobiert. Erst funktionierte es aufgrund eines Fehlers meinerseits nicht, aber jetzt läuft es super...
    Ich bin echt nicht darauf gekommen wie man das lösen kann.
    Danke!


    mfg,


    .Pioneer

  • Zwecks dem MAX_PLAYER_NAME:
    Das braucht man hier nicht zwangsläufig, da es nicht der Spieler-Name ist der ausgegeben wird, sondern der Rang-Name, und der ist ja benutzerdefiniert lang.


    Zwecks dem switch:
    Ein switch ist bei zwei oder drei Möglichkeiten langsamer als eine if-else Verknüpfung. Ab wann genau es sich rentiert kommt immer auf die Abfrage selbst an.
    Wenns dann aber mal 10 sind oder so, dann würde ich auch den switch empfehlen.

  • Hmm, okey.


    Ich weiß nicht ob ihr die frage hier kurz beantworten könnt, wenn ich meinen Restart Befehl ausführe, beendet sich der server, was auch richtig ist, aber öffnet sich nicht mehr...


    Das ganze würde ich noch umskripten (case).


    Kann das eventuell an anderen Skripts liegen?


    Wenn ich nur /rcon gmx eingebe, beendet er sich auch nur.

    Einmal editiert, zuletzt von delete_17.04 ()

  • Code
    [17:15:20] RCON (In-Game): Player [.Pioneer] sent command: gmx
    [17:15:20] [debug] Server crashed while executing testskript1.amx
    [17:15:20] [debug] AMX backtrace:
    [17:15:20] [debug] #0 native mysql_close () from mysql.DLL
    [17:15:20] [debug] #1 0001f260 in public OnGameModeExit () from testskript1.amx
    [17:15:20] [debug] Native backtrace:
    [17:15:20] [debug] #0 027679cc in ?? () from LIBMYSQL.dll
    [17:15:20] [debug] #1 02767a7a in ?? () from LIBMYSQL.dll
  • Code
    public OnGameModeExit()
    {
    	/* MySQl */
    	mysql_close(dbhandle);
    	return 1;
    }

    Ich benutze das MySQl Plugin R34. Also das steht dort, wenn ich den Server starte.

  • Wenn ich das so mache funktioniert alles, vielen dank!


    Aber muss ich das dann garnicht diese Funktion bei OnGameModeExit rein schreiben?
    Immer werde ich den Server ja nicht mit mit dem Befehl schließen... bzw. damit beende ich diesen ja nicht.

  • Wenn ich das so mache funktioniert alles, vielen dank!


    Aber muss ich das dann garnicht diese Funktion bei OnGameModeExit rein schreiben?
    Immer werde ich den Server ja nicht mit mit dem Befehl schließen... bzw. damit beende ich diesen ja nicht.

    Ja musst du. Denn der Gamemode schließt sich ja beim Restart und öffnet sich wieder. Sprich wenn du sie bei OngameModeExit nicht schließt die mySQL Verbindung öffnen sich zig tausende.

  • Du musst die Funktion überall dort hin schreiben, wo du den Server mit GMX beendest.
    Wenn du den Server "hart" schließt (exit-Befehl, oder X drücken bei Windows), oder wenn der Server abstürzt, dann wird OnGameModeExit eh nicht aufgerufen.


    Du darfst den Server dann nur nicht mit /rcon gmx beenden, aber das machst du ja wahrscheinlich sowieso nicht, wenn du extra einen Befehl dafür gemacht hast.