Das ist das Script:
[ags] StartCutscene(eSkipESCOnly);
player.Walk(220, 120, eNoBlock, eWalkableAreas);
Wait(50);
player.FaceDirection(eDirUp);
Wait(5);
dColtelli.Start();
Wait(50);
dColtelli2.Start();
Wait(50);
player.FaceDirection(eDirDown);
player.Say("Das kann doch nicht sein...");
cColtelli.Say("Wie gesagt; DOCH!");[/ags]
Was hab ich falsch gemacht?
1. es gibt kein EndCutscene
2. wenn ich mich recht erinnere, funktionieren dialoge nicht so ganz in einer cutscene, da diese benutzereingaben erwarten
ich glaube die werden dann erst nach der cutscene gestartet :cl
Um mal die Hilfedatei zu zitieren:
ZitatNOTE: The conversation will not start immediately; instead, it will be run when the current script function finishes executing.
Gibt es in den Dialogen Auswahlmöglichkeiten? Oder benutzt Du die nur, um viel Text sprechen zu lassen (da es sich ja anscheinend um eine Cutscene handelt)?
Grundsätzlich kann man durchaus Skriptbefehle nach einem Dialog ausführen; die einfachste Möglichkeit ist, sie direkt in den Dialog zu schreiben (das geht, wenn man die Skriptbefehle einrückt).
Das hier:
[ags]player.Walk(220, 120, eNoBlock, eWalkableAreas);
Wait(50);[/ags]
kann vermutlich durch dieses ersetzt werden:
[ags]player.Walk(220, 120, eBlock);[/ags]
Ich habe dieses Script zur Seite gelegt und habe wieder den Fehler.
Bsp.:
StartCutscene(eSkipESCOrRightButton);
cChara.Say("blabla");
dDialog1.Start();
cChara.Say("blabla"); //das da nach dem dDialog1. Wie?
Wie stoppe ich den die Cutscene dann das der Dialog mit Auswähl-Möglichkeiten anfangen kann und die Cutscene danach weiter geht?
mach zwei cutscenes draus
StartCutscene(eSkipESCOrRightButton);
cChara.Say("blabla");
EndCutscene();
dDialog1.Start();
StartCutscene(eSkipESCOrRightButton);
cChara.Say("blabla");
EndCutscene();
funktioniert nicht.
Es spielt immer noch den Dialog am End
Leider ein Spoiler zu einem neuen Spiel :/
Komplettes Skript:
Spoiler
[ags] StartCutscene(eSkipESCOrRightButton);
cBernard1.Say("HEY!");
player.Say("?!");
player.Walk(231, 132, eBlock, eWalkableAreas);
player.FaceDirection(eDirUp);
Wait(5);
cEierman.Say("DUUUU!!!");
Wait(5);
player.Say("Ich?");
Wait(5);
cBadgraf.Say("Du klaust unser Image!");
Wait(5);
cZweig.Say("Wir sind die Superhelden!");
Wait(5);
cBernard1.Say("Nicht DUUUU!!!");
Wait(5);
player.Say("Hä?");
Wait(5);
player.Say("Was soll das?");
Wait(5);
cZweig.Say("Verpiss dich!");
Wait(5);
player.Say("Nö");
cBernard1.Say("So! Jetzt reichts! NIMM DAS!!!");
EndCutscene();
dFight.Start();
StartCutscene(eSkipESCOrRightButton);
cBernard1.Say("Ufff.....");
Wait(5);
cZweig.Say("Iiiiekkkk!!!");
Wait(5);
cEierman.Say("UUUH!!!");
Wait(5);
cBadgraf.Say("AAAH!");
Wait(5);
player.Say("Man Leute wollt ihr jetzt noch das ganze ABC aufsagen?");
Wait(5);
cBernard1.Say("Ja! Genau!");
cZweig.Say("A");
cEierman.Say("B");
cBadgraf.Say("C");
cBernard1.Say("D");
cZweig.Say("E");
cEierman.Say("F");
cBadgraf.Say("G");
cBernard1.Say("H");
cZweig.Say("I");
cEierman.Say("J");
cBadgraf.Say("K");
Wait(5);
player.Say("GEHTS NOCH!???");
Wait(5);
EndCutscene();
player.ChangeRoom(4, 1, 1);[/ags]
Zitat von: AGS HilfeStart (dialog)
(Formerly known as global function RunDialog, which is now obsolete)
Dialog.Start()
Starts a conversation from the specified topic.
NOTE: The conversation will not start immediately; instead, it will be run when the current script function finishes executing.
If you use this command from within the dialog_request function, it will specify that the game should return to this new topic when the script finishes.
Example:
dMerchant.Start();
will start the conversation topic named dMerchant.
somit kannst du das so nicht machen
alles was nach dDialog1.Start() kommt muss also in eine andere script function
im dDialog1 kannst du
run-script 1 (siehe AGS-hilfe)
ausführen um einen weiteres script in
dialog_request (im global script)
auszuführen
dort kannst du param auf 1 überprüfen und dein restliches script einfügen
bei neueren AGS-versionen steht auch das von KhrisMUC bereits erwähnte direkt im dialog skripten zur verfügung
Zitat von: KhrisMUC in 11. März 2013, 01:00:36
Grundsätzlich kann man durchaus Skriptbefehle nach einem Dialog ausführen; die einfachste Möglichkeit ist, sie direkt in den Dialog zu schreiben (das geht, wenn man die Skriptbefehle einrückt).
schau dir einfach mal die AGS-hilfe dazu an, da werden sie geholfen ;)
Also das mit dem Scriptbefehle ausführen in Dialogen funktioniert zwar aber es werden keine Objekte erkannt. Wenn man z.B. will das direkt nach dem Dialog eine Person z.B. eine Vase aus dem Raum mitnimmt dann kann der Befehl oVase.Visible = false nicht im Dialog ausgeführt werden (auch wenn er eingerückt ist).
AGS meldet dann oVase undefined token. AGS kennt im Dialog (und auch im Global Script) die Objekte nicht. run-Script 1 funktioniert auch nicht. AGS kennt den run Befehl nicht. Und wenn AGS dann trotzdem ins Global Script eine Funktion ausführen würde, so ist dort oVase immer noch unbekannt.
Die Frage ist nun, wie man sowas machen kann? In der AGS Hilfe habe ich dazu nichts gefunden. Dort habe ich nur Beispiele ohne Objekte gefunden.
Da Dialogskripte im globalen Kontext ausgeführt werden, kann sich AGS nicht darauf verlassen, dass gerade der richtige Raum geladen ist.
Du kannst aber den globalen object-Array nehmen:
[ags] if (player.Room == 4) object[0].Visible = false;[/ags]
Das funktioniert, DANKE!
Hier noch ein Hinweis von mir:
[ags]if (player.Room == 4) object[0].Visible = false;[/ags]
Die Zahl in eckigen Klammern ist die Objekt-ID. Einfach das Objekt im Editor anklicken und dann steht unten rechts im Punkt "Entwürfe" die ID (blass gedruckt und leicht zu übersehen).