Einen wunderschönen,
Ich hätte mal eine Frage an euch liebe Community.
Weiß jemand wie man eine Admin Liste scriptet?
Einen wunderschönen,
Ich hätte mal eine Frage an euch liebe Community.
Weiß jemand wie man eine Admin Liste scriptet?
Wie soll sie denn aussehen?
In deinem Dialog...oder soll sie oben im Text stehen? Oder richtig schön verziert mit einem TextDraw..oder soll sie auf eine Wand geschrieben sein?
Da gibt es sehr viele Möglichkeiten
Quasi einfach eine Liste die anzeigt, welche Teammitglieder gerade online, ggf. noch ein Anzeige ob sie im Dienst sind oder nicht ?
Quasi einfach eine Liste die anzeigt, welche Teammitglieder gerade online, ggf. noch ein Anzeige ob sie im Dienst sind oder nicht ?
Ja so ähnlich
Du musst eine Schleife erstellen, die das Adminlevel jeden Spielers abfragt.
Wenn ein Spieler dann ein Admin ist, gibst du das an den Spieler, der die Liste sehen soll, aus.
Dafür eignet sich [wiki]SendClientMessage[/wiki] oder - etwas komplexer - [wiki]ShowPlayerDialog[/wiki].
Ich habe schnell einen Code für dich geschrieben, passe ihn noch auf dein Skript an!
Probiere den Code aber auch bitte zu verstehen, ist eigentlich alles von selbst zu erklären.
->PWN Code <-
ocmd:admins(playerid){ShowAllAdmins(playerid); return 1;}
stock ShowAllAdmins(playerid)
{
new string[1024], str[20];
for(new i, playername[MAX_PLAYER_NAME];i<GetMaxPlayers();i++)
{
if(!IsPlayerConnected(i))continue;
if(PlayerInfo[playerid][pAdminlevel] < 1)continue;
if(PlayerInfo[playerid][pAdmindienst] == 0) str = "{FF0000}Nein";
else if(PlayerInfo[playerid][pAdmindienst] == 1)str = "{69FF00}Ja";
GetPlayerName(playerid, playername, sizeof playername),
format(string, sizeof string, "%s\n%i. %s | %s | Dienst: %s", string, i+1, getAdmin(playerid), playername, str);
}
ShowPlayerDialog(playerid, DIALOG_SHOW_ADMIN, DIALOG_STYLE_LIST, "Admins", string, "Jaman", "Jaman");
return 1;
}
stock getAdmin(playerid)
{
new str[34];
switch(PlayerInfo[playerid][pAdminlevel])
{
case 0: str = "Zivilist";
case 1: str = "Moderator";
case 2: str = "Administrator";
case 3..5: str = "blabla";
case 6: str = "Projektleiter";
}
return str;
}
-> Bilder <-
Huch, danke habe es mir anders vorgestellt
Alles anzeigenIch habe schnell einen Code für dich geschrieben, passe ihn noch auf dein Skript an!
Probiere den Code aber auch bitte zu verstehen, ist eigentlich alles von selbst zu erklären.
->PWN Code <-
ocmd:admins(playerid){ShowAllAdmins(playerid); return 1;}stock ShowAllAdmins(playerid){ new string[1024], str[20]; for(new i, playername[MAX_PLAYER_NAME];i<GetMaxPlayers();i++) { if(!IsPlayerConnected(i))continue; if(PlayerInfo[playerid][pAdminlevel] < 1)continue; if(PlayerInfo[playerid][pAdmindienst] == 0) str = "{FF0000}Nein"; else if(PlayerInfo[playerid][pAdmindienst] == 1)str = "{69FF00}Ja"; GetPlayerName(playerid, playername, sizeof playername), format(string, sizeof string, "%s\n%i. %s | %s | Dienst: %s", string, i+1, getAdmin(playerid), playername, str); } ShowPlayerDialog(playerid, DIALOG_SHOW_ADMIN, DIALOG_STYLE_LIST, "Admins", string, "Jaman", "Jaman"); return 1;}stock getAdmin(playerid){ new str[34]; switch(PlayerInfo[playerid][pAdminlevel]) { case 0: str = "Zivilist"; case 1: str = "Moderator"; case 2: str = "Administrator"; case 3..5: str = "blabla"; case 6: str = "Projektleiter"; } return str;}
-> Bilder <-
Vielen Dank dir
Funktioniert aber nicht ganz, außer man testet nur mit sich selbst:
ocmd:admins(playerid){ShowAllAdmins(playerid); return 1;}
stock ShowAllAdmins(playerid)
{
new string[1024], str[20];
for(new i, playername[MAX_PLAYER_NAME];i<GetMaxPlayers();i++)
{
if(!IsPlayerConnected(i))continue;
if(PlayerInfo[playerid][pAdminlevel] < 1)continue;// hier muss i statt playerid
if(PlayerInfo[playerid][pAdmindienst] == 0) str = "{FF0000}Nein";// hier muss i statt playerid
else if(PlayerInfo[playerid][pAdmindienst] == 1)str = "{69FF00}Ja";// hier muss i statt playerid
GetPlayerName(playerid, playername, sizeof playername),// hier muss i statt playerid
format(string, sizeof string, "%s\n%i. %s | %s | Dienst: %s", string, i+1, getAdmin(playerid), playername, str);// auch hier muss i statt playerid
}
ShowPlayerDialog(playerid, DIALOG_SHOW_ADMIN, DIALOG_STYLE_LIST, "Admins", string, "Jaman", "Jaman");
return 1;
}
stock getAdmin(playerid)
{
new str[34];
switch(PlayerInfo[playerid][pAdminlevel])
{
case 0: str = "Zivilist";
case 1: str = "Moderator";
case 2: str = "Administrator";
case 3..5: str = "blabla";
case 6: str = "Projektleiter";
}
return str;
}
Du könntest auch mit GetPlayerName prüfen, ob die Spielerid verbunden ist. Anstatt dort direkt Ja/Nein in der ShowAllAdmins herauszufinden, würde ich daraus eine eigene Funktion machen.
// z.B.
IsAdminOnDuty(playerid)
@Goldkiller
Es war schon Sandmänchenzeit, ich war unkonzentriert
Ajo, ist aber nicht Sinnvoll daraus direkt eine Funktion zu machen.
Ich arbeite da einfach mit Makros, was denke mal sowieso viel Praktischer ist, für kleine Sachen.
Und zu deiner Aussage "Mit dem Namen die Gültigkeit überprüfen", wenn ich den Online Status einer ID abfragen möchte geht es auch mit dem namen ja ?
Ob das sooo sinnvoll ist, dass noch mit strings statt Nummern prüfen zu lassen, weis ich nicht.
-> Online Status <-
stock CheckUserOnlineState(online_name[]){ for(new i, pname[MAX_PLAYERS][MAX_PLAYER_NAME]; i<GetMaxPlayers();i++) { GetPlayerName(i, pname[i], sizeof pname[i]); if(!strcmp(pname[i], online_name, true))return 1;// existiert nicht } return 0;}
-> verbesserter Code für /admins <-
#define IsPlayerAdmDuty(%0) PlayerInfo[%0][pAdminduty]
#define getPlayerAdmin(%0) aRang[PlayerInfo[%0][pAdminlevel]]
new aRang[7][] = {
{"Spieler"}, {"Supporter"}, {"Moderator"}, {"Administrator"}, {"Fraktionsmanager"}, {"Servermanager"}, {"Projektleiter"}
};
ocmd:admins(playerid){ShowAllAdmins(playerid); return 1;}
stock ShowAllAdmins(playerid)
{
new string[1024], str[20];
for(new i, playername[MAX_PLAYER_NAME];i<GetMaxPlayers();i++)
{
if(!IsPlayerConnected(i))continue;
if(getPlayerAdmin(i) < 1) continue;
if(!IsPlayerAdmDuty(i)) str = "{FF0000}Nein";
else if(IsPlayerAdmDuty(i)) str = "{69FF00}Ja";
GetPlayerName(i, playername, sizeof playername),
format(string, sizeof string, "%s\n%i. %s | %s | Dienst: %s", string, i+1, getAdmin(i), playername, str);
}
ShowPlayerDialog(playerid, DIALOG_SHOW_ADMIN, DIALOG_STYLE_LIST, "Admins", string, "Jaman", "Jaman");
return 1;
}
Und @Goldkiller, glaube echt es wäre am besten man fragt den Namen einfach so ab.
-> Name herausfinden <-
enum e_D{ // ... pName[MAX_PLAYER_NAME],};new PlayerD[MAX_PLAYERS][e_D];#define GetName(%0) PlayerD[%0][pName]// ->OnPlayerConnect <-GetPlayerName(playerid, PlayerD[playerid][pName], MAX_PLAYER_NAME);
Ajo, ist aber nicht Sinnvoll daraus direkt eine Funktion zu machen.
Ich arbeite da einfach mit Makros, was denke mal sowieso viel Praktischer ist, für kleine Sachen.
Selbst als Macro steigert es die Lesbarkeit. getAdmin() ist auch als extra Methode vorhanden, wieso also nicht auch für den Duty-Status
Und zu deiner Aussage "Mit dem Namen die Gültigkeit überprüfen", wenn ich den Online Status einer ID abfragen möchte geht es auch mit dem namen ja ?
Ob das sooo sinnvoll ist, dass noch mit strings statt Nummern prüfen zu lassen, weis ich nicht.
ZitatReturn Values:
The length of the player's name. 0 if player specified doesn't exist.
The player's name is stored in the specified array.
Heisst:
for(new i, playername[MAX_PLAYER_NAME];i<GetMaxPlayers();i++) {
if(GetPlayerName(i,playername,sizeof(playername))) {
// Spielerid ist verbunden. Kein IsPlayerConnected notwendig
}
}
Zu deinem verbessertem Code:
Der war mMn vorher besser. getAdmin ist leider lowerCamelCase (zwar oben auch schon gewesen aber alles andere UpperCamelCase). Jetzt ist es auch nicht sicher im Umgang mit dem Index :/.
for(new i, playername[MAX_PLAYER_NAME];i<GetMaxPlayers();i++) {
if(GetPlayerName(i,playername,sizeof(playername))) {
// Spielerid ist verbunden. Kein IsPlayerConnected notwendig
}
}
--> playername ist aber leer, er würde nichts finden <-
Und wüsste auch nicht wieso das mehr sinn macht als z.B einfach IsPlayerConnected().
Oder was auch gehen würde ..
-> Onlinestatus prüfen, 2 Möglichkeiten mehr <-
stock IsPlayerCon(playerid, mean)
{
if(mean == 3) //Überprüfen ob jemand auf dem Server ist und-oder ob er eingeloggt ist
{
if(IsPlayerConnected(playerid) || PlayerInfo[playerid][pLoggedIn])return 1;
return 0;
}
else if(mean == 1) // -> Normale Verbindung zum Server checken
return IsPlayerConnected(playerid);
else if(mean == 2) //Checken ob er verbunden ist
return PlayerInfo[playerid][pLoggedIn];
return -1; //Falsche "mean" ausgewählt
}
Hallo zusammen,
Ich wollte fragen wie man sowas scripter kann?
Ich wollte fragen wie man sowas scripter kann?
Mit dem Code..der hier vorgestellt wurde: [SA:MP] Wie kann ich sowas scripten? - Adminliste
Ich möchte das ja auch so im Bild (Link) haben so soll das auch aussehen wie macht man sowas?
Wie bereits Kaliber schon sagte, nutze die Codes hier in dem Beitrag als anlaufstelle.
Kannst dir ggf. auch mal den SAMP Color-Picker herunterladen, und dort dann auf HTML gehen, du pickst dir eine Farbe heraus und kannst diese wiefolgt in Dialogen verwenden.
-> Beispiel für verschiedene Farben <-
ShowPlayerDialog(playerid, dialogid, dialogstyle, "blabla", "{FFBE00}Orange|{DC00FF}Lila|{FFFFFF}Weis", "bla", "bla");
Denn ich kann nicht scripten also muss ich ja einen suchen...