Hallo,
ich möchte euch jetzt zeigen wie ihr ein paar Dialoge erstellt und diese dann auch funktionieren lasst. ;)
Als erstes solltet ihr folgendes wissen, es gibt 4 Arten von Dialogen, dazu gehören:
Diese haben die verschiedensten Möglichkeiten verwendet zu werden.
Ob nun beim RealLife-Script als "Jobmenü" oder bei einem Deathmatch-Script als "Moduswahl", natürlich auch als Loginfenster oder z.B. für ein PN-System. Ich möchte euch heute ein paar Dinge nahelegen ...
Wir benötigen:
Als erstes möchte ich euch zeigen wie man sich teleportieren kann ...
Wir definieren am Anfang einfach mal den Dialog wie folgt:
[pwn]#define Teleportdialog 1[/pwn]
Dabei ist "Teleportdialog" unrelevant und dient nur der späteren Abfrage. Die "1"/eins steht dafür für die Dialog ID - man sollte verhindern das zwei Dialoge die selbe ID haben - auch Dialog ID's aus Filterscripts können sich mit dem Gamemode verhetzen und es kommt ein Gewirr raus.Als nächtes erstellen wir einen Befehl um den Dialog zu öffnen (man kann natürlich das ganze auch per PickUp ect. machen).
Dazu benutzen wir OCMD - Tutorial OCMD - Das wohl übersichtlichste!
[pwn]ocmd:dialog(playerid, params[])
{
#pragma unused params
ShowPlayerDialog(playerid, Teleportdialog, DIALOG_STYLE_LIST, "Dialogüberschrift", "Beispielteleport", "Porten", "");
SendClientMessage(playerid, Farbe, "Du hast den Dialog geöffnet!");
return 1;
}[/pwn]
Auf den Begriff "ShowPlayerDialog" möchte ich nicht weiter eingehen, ihr könnt ihn hier nochmal nachlesen: wiki.sa-mp.com/wiki/ShowPlayerDialog
Anschließend gehen wir zum Callback/Public "OnDialogResponse", dieser schaut, soweit ihr noch keine Dialoge gemacht habt, so aus:
[pwn]public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
return 1;//Publicreturn / Callbackreturn
}[/pwn]
Wir möchten nun also das der Spieler zu den Koordinaten:
geportet wird. Diese sind von mir frei gewählt.
Dazu müssen wir die Funktion "SetPlayerPos" nutzen, welche wir hier nachschlagen können: wiki.sa-mp.com/wiki/SetPlayerPos :
[pwn]SetPlayerPos(playerid, 1, 2, 3);[/pwn]
So sieht das aus, was wir dann nutzen möchten, wenn ein Spieler den Button "Porten" drückt.
Nun erstmal zu unserem Callback "OnDialogResponse" zurück.
Wir müssen folgendes tun, um den Befehl des Dialogbuttons auszuführen:
Fangen wir an:
[pwn]if(dialogid == Teleportdialog)//Wenn der Dialog der "Teleportdialog" ist
{//dann ...
SetPlayerPos(playerid, 1, 2, 3);
return 1;
}[/pwn]
So schaut das ganze aus was wir einsetzen müssen, ich denke das sollte klar sein.
Das fügt ihr unter "OnDialogReponse" ein, dann schaut das bei euch so aus:
[pwn]public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])//Hier definiert man was die Dialoge bewirken ;)
{
if(dialogid == Teleportdialog)//Wenn der Dialog der "Teleportdialog" ist
{//dann ...
SetPlayerPos(playerid, 1, 2, 3);
return 1;//Dialogreturn
}
return 1;//Publicreturn / Callbackreturn
}[/pwn]
Ich hoffe, ich konnte helfen.
Bei Fragen stehe ich zur Verfügung.
Weitere Dialog-Tutorials folgen auf Anfrage. :)
ich möchte euch jetzt zeigen wie ihr ein paar Dialoge erstellt und diese dann auch funktionieren lasst. ;)
Als erstes solltet ihr folgendes wissen, es gibt 4 Arten von Dialogen, dazu gehören:
[Blockierte Grafik: http://wiki.sa-mp.com/wroot/images2/a/a1/Dialog_style_msgbox.png]
[Blockierte Grafik: http://wiki.sa-mp.com/wroot/images2/d/d5/Dialog_style_input.png]
[Blockierte Grafik: http://wiki.sa-mp.com/wroot/images2/b/b1/Dialog_style_list.png]
[Blockierte Grafik: http://wiki.sa-mp.com/wroot/images2/f/f8/Dialog_style_password.png]
Bilder von wiki.sa-mp.com
Diese haben die verschiedensten Möglichkeiten verwendet zu werden.
Ob nun beim RealLife-Script als "Jobmenü" oder bei einem Deathmatch-Script als "Moduswahl", natürlich auch als Loginfenster oder z.B. für ein PN-System. Ich möchte euch heute ein paar Dinge nahelegen ...
Wir benötigen:
- Pawn.exe
- Gamemode-/Filterscriptdatei
- Spaß am scripten
- Geduld
- Eine Tastatur, Maus
Als erstes möchte ich euch zeigen wie man sich teleportieren kann ...
Wir definieren am Anfang einfach mal den Dialog wie folgt:
[pwn]#define Teleportdialog 1[/pwn]
Dabei ist "Teleportdialog" unrelevant und dient nur der späteren Abfrage. Die "1"/eins steht dafür für die Dialog ID - man sollte verhindern das zwei Dialoge die selbe ID haben - auch Dialog ID's aus Filterscripts können sich mit dem Gamemode verhetzen und es kommt ein Gewirr raus.Als nächtes erstellen wir einen Befehl um den Dialog zu öffnen (man kann natürlich das ganze auch per PickUp ect. machen).
Dazu benutzen wir OCMD - Tutorial OCMD - Das wohl übersichtlichste!
[pwn]ocmd:dialog(playerid, params[])
{
#pragma unused params
ShowPlayerDialog(playerid, Teleportdialog, DIALOG_STYLE_LIST, "Dialogüberschrift", "Beispielteleport", "Porten", "");
SendClientMessage(playerid, Farbe, "Du hast den Dialog geöffnet!");
return 1;
}[/pwn]
Auf den Begriff "ShowPlayerDialog" möchte ich nicht weiter eingehen, ihr könnt ihn hier nochmal nachlesen: wiki.sa-mp.com/wiki/ShowPlayerDialog
Anschließend gehen wir zum Callback/Public "OnDialogResponse", dieser schaut, soweit ihr noch keine Dialoge gemacht habt, so aus:
[pwn]public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
return 1;//Publicreturn / Callbackreturn
}[/pwn]
Wir möchten nun also das der Spieler zu den Koordinaten:
- x: 1
- y: 2
- z: 3
geportet wird. Diese sind von mir frei gewählt.
Dazu müssen wir die Funktion "SetPlayerPos" nutzen, welche wir hier nachschlagen können: wiki.sa-mp.com/wiki/SetPlayerPos :
[pwn]SetPlayerPos(playerid, 1, 2, 3);[/pwn]
So sieht das aus, was wir dann nutzen möchten, wenn ein Spieler den Button "Porten" drückt.
Nun erstmal zu unserem Callback "OnDialogResponse" zurück.
Wir müssen folgendes tun, um den Befehl des Dialogbuttons auszuführen:
- Abfragen ob der Dialog auch der richtige ist
- Den Befehl "SetPlayerPos" ausführen
- Den Befehl returnen
Fangen wir an:
[pwn]if(dialogid == Teleportdialog)//Wenn der Dialog der "Teleportdialog" ist
{//dann ...
SetPlayerPos(playerid, 1, 2, 3);
return 1;
}[/pwn]
So schaut das ganze aus was wir einsetzen müssen, ich denke das sollte klar sein.
Das fügt ihr unter "OnDialogReponse" ein, dann schaut das bei euch so aus:
[pwn]public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])//Hier definiert man was die Dialoge bewirken ;)
{
if(dialogid == Teleportdialog)//Wenn der Dialog der "Teleportdialog" ist
{//dann ...
SetPlayerPos(playerid, 1, 2, 3);
return 1;//Dialogreturn
}
return 1;//Publicreturn / Callbackreturn
}[/pwn]
Ich hoffe, ich konnte helfen.
Bei Fragen stehe ich zur Verfügung.
Weitere Dialog-Tutorials folgen auf Anfrage. :)
"Das müsste jetzt funktionieren..."
---
Mit freundlichen Grüßen,
Vincent Petritz
---
Mit freundlichen Grüßen,
Vincent Petritz