Hey Community,
Da ich es schon selber länge so benutze und es viel einfacher ist wie die anderen wo man alles
extra neu schreiben muss
habe ich mir überlegt, das ich es mal mit Enum ausführe...
nunja, es klappt Problemlos und wird auch perfekt angezeigt.
vorab möchte ich euch darauf hinweise, das ich eine Rechtschreibschwäche habe daher Gramatik oder Rechtschreibung
nicht so toll bewerten.
nun beginne ich mal.
ich schreibe nur die Codes und dahinter was es bringt und macht.
Aller anfang machen wir einen Enum, indem wir auflisten,
was in den darauf folgenden new stehen soll.
dies sieht bei mir dan so aus
enum NaviInfo //Benennung beliebig ändern
{
Ort[50],//Das ist der Name wie es dan im Navi steht
Float:NX,//die X Position des Checkpoints
Float:NY,//Die Y Position des Checkpoints
Float:NZ//Und zu letzt die höhe also die Z position.
};
da ich es mit Dialog machen, muss ich noch den Dialog Definieren.
#define DIALOG_NAVI 7864 //Zu euer Dialog Zahl ändern
so nun kommt das new, damit unser Enum auch benutzt wird...
dies müsste dan so aussehen
new NaviList[][NaviInfo] = {//Das new, NaviInfo ist unser enum
//{ "Namen z.B. LSPD",X Coords, Y Coords, Z Coords },
{ "{FF1E00}Checkpoint Löschen",1542.6882,-1675.3882,13.5550 },
{ "{689FFF}LSPD",1542.6882,-1675.3882,13.5550 },
{ "{00CADC}Kleidergeschäft",1458.4689,-1140.0231,24.0714 }
};
im ganzen würde es dan soweit so aussehen:
#define DIALOG_NAVI 5000
enum NaviInfo
{
Ort[50],
Float:NX,
Float:NY,
Float:NZ
};
new NaviList[][NaviInfo] = {
{ "{FF1E00}Checkpoint Löschen",1542.6882,-1675.3882,13.5550 },
{ "{689FFF}LSPD",1542.6882,-1675.3882,13.5550 },
{ "{00CADC}Kleidergeschäft",1458.4689,-1140.0231,24.0714 },
}
nun möchte ich mit dem Befehl beginnen
diesen werde ich mit einer For(new schleifen machen damit alle
Orte aufgelistet werden, die man dan Auswählen kann.
ich benutze einen List Dialog
if(strcmp(cmdtext,"/navi",true) == 0)//der strcmp also der Befehlsname
{
new stringa[800];//Unser string wo wir es definieren
for(new navi; navi < sizeof(NaviList); navi++)//Hier die for(new schleife
{
format(stringa,sizeof(stringa),"%s\n%s",stringa,NaviList[navi][Ort]);//nun formatieren wie das ganze stringa steht da weil
//damit auch das darüber angezeigt ist, sonnst kommt es zu problemen
}
ShowPlayerDialog(playerid,DIALOG_NAVI,DIALOG_STYLE_LIST,"Navigation",stringa,"Auswählen","Abbrechen");//Hier lassen wir den Dialog anzeigen
//WICHTIG! das Anzeigen des Dialogs darf nicht in die for(new schleife!!
return 1;
}
und zu guterletzt komme ich noch
zum OnDialogResponse...
um hier die ID herraus zu bekommen benutzen wir listitem und
lassen es dan einfach ausführen.
if(dialogid == DIALOG_NAVI)
{
if(!response) return 1;//Wenn er den Abbrech Button drückt
new stringa[300];//unser string
new auswahl = listitem;//hier der ort den er ausgewählt hat
if(auswahl == 0) return SendClientMessage(playerid,COLOR_RED,"Der Checkpoint wurde gelöscht!"),DisablePlayerCheckpoint(playerid);//wenn er auf Checkpoint Löschen geht wird checkpoint gelöscht
format(stringa,300,"der Ort %s {FFFFFF} wurde ausgewählt, fahren sie zum Roten Marker!",NaviList[auswahl][Ort]);//hier formatieren wir den string
SendClientMessage(playerid,COLOR_WHITE,stringa);//string wird abgesendet
SetPlayerCheckpoint(playerid,NaviList[auswahl][NX],NaviList[auswahl][NY],NaviList[auswahl][NZ]);//checkpoint wurde gesetzt
}
So, das war der ganze Code für das Navi, wo man bei ein anderen Navi ewig braucht hat man hier in wenigen zeilen.
wenn ihr noch ordner haben wollt müsst ihr den enum etwas umändern, zweiten dialog erstellen
und dan halt immer abfragen und dan die jeweiligen orte setzten etc, eigentlich auch einfach
ich werde dafür evtl. auch noch ein Tutorial machen.
Pastebin: http://pastebin.com/KaxDSRGd
Mfg. Dark_Leary