Ich release heute mal ein kleines System welches ich letzte Nacht kurz geschrieben habe. Es ist dazu da, einem Spieler einen Dialog anzuzeigen, zb. Mit allen connected Spielern oder mit allen Admins etc. Man kann dann ganz leicht unter OnPlayerDialogResponse das Listitem benutzen.
Als erstes erstellen wir ein Makro für den Dialog.
#define DIALOG_PLAYERS 1525 //1525 = Eindeutige DialogID.
Dann brauchen wir noch eine Variable in der das Listitem zwischengespeichert wird.
new item[MAX_PLAYERS][MAX_PLAYERS]; //Das 1. MAX_PLAYERS ist dafür da das das Array für jeden Spieler einzeln erstellt wird. Das 2. ist für die einzelnen Listitems da.
Dann der Befehl:
if(strcmp("/players", cmdtext, true) == 0)//Standart-Befehl halt
{
new iItem;//Variable damit das listitem richtig gesetzt wird
new string[MAX_PLAYER_NAME*MAX_PLAYERS];//String
new dName[MAX_PLAYER_NAME];//String für den Namen
for(new i; i<MAX_PLAYERS; i++)//Schleife die alle Spieler durchgeht
{
if(!IsPlayerConnected(i))continue;//Wenn Spieler nicht Connected -> Continue
//if(!IsPlayerAdmin(i))continue; <- Würde alle RCON-Admins anzeigen.
GetPlayerName(i, dName, sizeof dName);//String mit Namen setzen
format(string, sizeof string, "%s\n%s", string, dName);//String für den Dialog erweitern + nächsten Namen reinsetzen
item[playerid][iItem] = i;//Listitem auf Playerid setzen
iItem ++;//Listitem hochsetzen damit es das nächste ist
}
ShowPlayerDialog(playerid, DIALOG_PLAYERS, DIALOG_STYLE_LIST, "Spieler:", string, "Weiter","Abbrechen");//Dialog anzeigen
return 1;
}
Dann noch ganz simpel bei OnPlayerDialogResponse:
if(dialogid == DIALOG_PLAYERS)//Dialogid abfragen
{
if(!response)return 1;//Wenn er auf Abbrechen drückt -> Abbrechen
//Hier kannst du nun item[playerid][listitem] für den gewählten Spieler verwenden.
SendClientMessage(item[playerid][listitem], -1, "Dein Name wurde angeklickt!");
}
Wenn ihr noch Fragen habt, schreibt sie einfach hier im Thema!
Bei Bugs natürlich auch
MfG.