Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: ZAK am 03. März 2011, 18:01:48
-
wie kann ich im Dialog ein script hinzufügen?
in dem lehrnvideo wird da etwas von doppelspace erzählt, aber bei mir klappt das nicht so
z.B.
// Dialog script file
@S // Dialog startup entry point
return
@1
Fred: Dazu sage ich nichts.
cFred.FaceDirection(eDirLeft);
Wait(40);
Wendy: Dann hast du doch was damit zu tun.
cFred.FaceDirection(eDirRight);
Fred: Ich Kann...
option-off 1
return
@2
Fred: BlaBla
Wendy: Bla Bla
Fred: Tut mir leid, darüber weiss ich nichts.
option-off 2
return
bekomme da immer wieder die fehlermeldung cFred... wird nicht erkannt.
hat einer ne andere idee (arbeite mit AGS 3.0.2)
-
Solche Methoden wie FaceDirection funktionieren nicht wenn du sie in einem Dialogscript aufrufst.
Solche Dinge müsstest du über ein Dioalog-request script aufrufen.
Also so:
Fred: Dazu sage ich nichts.
run-script x
Wendy: Dann hast du doch was damit zu tun.
run-script y
Fred: Ich Kann...
option-off 1
Und dann natürlich die jeweiligen FaceDirection befehle im Dialog Request Script hinterlegen.
Sieh dir am besten die Hilfedatei von AGS an da ist das noch mal etwas genauer erklärt.
-
ich habe in hilfe noch nichts passenes gefunden.
frage mich nur warum es in dem "video" funktioniert und bei mir nicht...
in dem video wird auch erklärt das man auch andere funktionen mit einbinden kann (durch doppel spacebar)
-
Suche mal in der Hilfe nach "Conversations" da findest du sämtliche im Dialog Script nützliche Befehle.
Kannst du vielleicht mal einen Link zu dem Video posten?
-
ab video 30 sind die Dialog Instuctions
(http://www.youtube.com/watch?v=1Ml_DR76Cl4)
-
3:48
Allerdings stimmt das schon, was der da sagt, Siel. Steht alles auch genauso im Handbuch von AGS unter "Conversations". Warum das also bei Zak nicht funktioniert, ist mir ein Rätsel, wo dies doch seit AGS 3.x möglich ist. Request Scripts gibts nicht mehr.
-
Dann hast du ein anderes Handbuch als ich, obwohl ich Version 3.0.2 mein Eigen nenne.
Und bei mir funktioniert es wie ich gerade im Test festgestellt habe auch nicht.
Sehr seltsam...
-
Also bei mir (AGS 3.1.2) steht das neue im Handbuch. Eventuell ist das eine Neuerung aus 3.1?
-
Das geht erst seit 3.1.1 oder 3.1.2.
Mit 3.1 geht es jedenfalls noch nicht, mit 3.1.2 auf jeden Fall.
Mir ist eh nicht ganz klar, warum man noch mit 3.0.irgendwas arbeitet, wenn 3.2 seit fast einem Jahr draußen ist (es sei denn man hat Windows 98 oder ME, aber dann läuft eh irgendwas nicht ganz rund ;))
Doppelspace stimmt auch nicht ganz, ein einfaches Leerzeichen reicht.
-
Danke für den Tip. wusste nicht das es mit 3.0 (3.1) nicht geht.
habe jetzt den neuen AGS und jetzt klappt alles.
-
bin gerade dabei meine Dialoge zu erstellen, stehe da aber vor einem kleinem Problem.
durch "option-off" verschwindet ja die gestellte Frage
@2
Fred: Ich möchte nimanden Grundlos beschuldigen.
Wait(20);
Fred: Jerder hier auf dem Dampfer könnte ein Motiv haben.
option-off 2
return
jetzt habe ich z.B.eine Frage die beim 4ten mal stellen erst verschwinden soll?
Skript
@1
if (dialogCounter <= 2)
{
cFred.Say("Ich kenne den Toten nicht.");
dialogCounter++;
}
else
{
cFred.Say("Ich habe ihn mal mit Dave gesehen.");
}
return
wie schreibe ich das?
-
man kann beim dialog auch ein skript aufrufen
ich glaube der befehl heißt "run-script" oder so ähnlich (einfach mal in der hilfe suchen)
der übergibt man eine nummer (die als identifikation dient) und dann wird im globalscript eine funktion aufgerufen (weiß nicht mehr wie die heißt, aber irgendwas mit "dialog")
da kannst du dann skripten was du willst :)
-
die skrpits erstelle ich doch direkt im Dialog...
habe z.B auch eine Frage dabei, wo die Antwort erst frei geschaltet wird wenn schon vorher etwas anderes getan wurde...
@5
if(bBeweise11)
{
cWendy.Say("Ich bin mir sicher das du die Tat begannen hast.");
Wait(20);
cBernard.Say("Warum sollte ich so was tun?");
Wait(20);
cWendy.Say("Die Beweise sprechen alle gegen Dich.");
Wait(5);
cWendy.Say("Sicherlich kannst du so einen Diamanten gut gebrauchen.");
Wait(20);
cBernard.Say("Ich war es aber nicht.");
}
else
{
cWendy.Say("Ich habe noch nicht genug Beweise.");
}
return
also muss es doch ein befehl geben der erst nach allem die frage löscht...!!!
-
du hast doch eh schon sowas ähnliches mit deinem dialogCounter gemacht
warum machst du das nicht einfach auch beim "option-off 2"?
also sowas wie
[ags]if(dialogCounter == 4)
option-off 2[/ags]
-
Das geht mit
this.SetOptionState(...);
this bezieht sich auf den aktuellen Dialog.
http://www.bigbluecup.com/manual/Dialog.SetOptionState.htm
Lies dir am besten auch nochmal den Punkt "Using scripting commands in dialogs" in der Hilfedatei unter Tutorial -> Setting up the game -> Conversations durch.
Oder was genau ist denn jetzt das Problem? Kriegst Du eine Fehlermeldung oder funktioniert es einfach nicht? (dass man den Leuten immer wieder alles einzeln aus der Nase ziehen muss, meine Güte)
-
das skript wie oben geschrieben funktioniert ohne fehlermeldung, was ich nun erreichen möchte ist das die Frage nach der antwort mit if(bBeweise11) aus meinem fragedialog verschwindet.
-
die frage wurde schon auf zwei verschiedene arten beantwortet ::)
entweder mit
[ags]option-off 5[/ags]
was alter code ist (nachdem ich das noch nie probiert habe, bin ich mir jetzt nicht sicher, ob die kombination aus altem+neuem code hier funktionieren würde :cl ), oder besser mit
[ags]this.SetOptionState(...)[/ags]
was der elegantere weg ist, da es neuer code ist (allerdings musst du da in der hilfe nachsehen, wie genau diese funktion aufgerufen werden soll)
[ags]@5
if(bBeweise11)
{
cWendy.Say("Ich bin mir sicher das du die Tat begannen hast.");
Wait(20);
cBernard.Say("Warum sollte ich so was tun?");
Wait(20);
cWendy.Say("Die Beweise sprechen alle gegen Dich.");
Wait(5);
cWendy.Say("Sicherlich kannst du so einen Diamanten gut gebrauchen.");
Wait(20);
cBernard.Say("Ich war es aber nicht.");
this.SetOptionState(...); // <-- HIER DEN OBEN ERWÄHNTEN BEFEHL AUFRUFEN
}
else
{
cWendy.Say("Ich habe noch nicht genug Beweise.");
}
return[/quote]
also muss es doch ein befehl geben der erst nach allem die frage löscht...!!!
[/ags]
-
Danke für die hilfe...
...mit this.SetOptionState(1,eOptionOff); hat es geklappt.
-
Ja, ich habs jetzt nicht ausprobiert, ich glaube aber, dass man "if (...)" nicht mit "option-off x" kombinieren kann.
Deswegen muss man das mit "this.SetDialogState(...)". machen.
Der Punkt ist doch, Zak:
A) Hast Du es mit option-off probiert?
B) Was kam dabei raus?
C) Wenn nicht, warum nicht?
Deine Bemerkung mit den drei Ausrufezeichen am Ende hört sich so an, als hättest Du schon Einiges ausprobiert wärst frustriert, weil nichts klappt.
Die Sache ist die, dass Dir ja auch jemand helfen kann, der die Antwort nicht sofort weiß; bloß so jemand tut sich natürlich sehr viel leichter, wenn er weiß, was Du schon erfolglos probiert hast und was jeweils das Ergebnis war.
Und Dein "jetzt habe ich z.B.eine Frage die beim 4ten mal stellen erst verschwinden soll?" hört sich an, als hättest Du mit dem Zählen Probleme, dabei sollte es nur verdeutlichen, dass Du normalen Code verwendest.
"Frage löschen" ist auch nicht gerade ein super Ausdruck für "Dialogoption ausschalten".
Kurz gesagt: PRÄZISE formulieren und MEHR INFO in Zukunft. Dann ist es für alle Beteiligten angenehmer.
Hättest Du gepostet: "Wenn ich im Dialogskript regulären Code verwende, nimmt er "option-off" nicht an; was muss ich statt dessen benutzen?" wäre diese Sache mit zwei Posts erledigt gewesen.
-
KhrisMUC, es wurde bereits gelöst. ;)
Allerdings ist es gut, zu erwähnen, dass option-off nur in "plain" Dialogskripte gehören und ein eingerücktes if deshalb nicht damit kombinierbar ist. Das ist doch das entscheidende. ;D
-
Darum ging es doch, und darum, dass Zak seine Fragen hier vernünftig formuliert.
KhrisMUC, es wurde bereits gelöst. ;)
Ach nee, echt? Danke für den Hinweis. (http://www.maniac-mansion-mania.de/forum/index.php?topic=1825.msg38991#msg38991). ::)
-
Naja, aber noch kein Grund, gleich jemanden so unhöflich anzureden. :(
Ich mein, niemand kann immer sofort wissen wie alles funktioniert. Außerdem hat er es, denke ich, so gut er konnte formuliert. Meine Antwort war nur auf das hier bezogen, was ich eher nebensächlich finde:
Der Punkt ist doch, Zak:
Vor allem wenn man eben nicht weiß, was relevant ist. Man kann ja auch schlecht immer die ganze Bibel posten, wenn man nicht versteht, wieso Jesus nun gekreuzigt wurde. ;)
-
Ich reagiere immer etwas allergisch, wenn mir jemand Sachen erklärt, die ich längst weiß, oder Fehler ankreidet, die keine sind. Ist nicht persönlich gemeint, war allerdings schon das zweite Mal. Ich hasse es einfach, unterschätzt zu werden; bei Deiner offensichtlichen Intelligenz kennst Du das doch bestimmt selbst.
Natürlich kann niemand "immer sofort wissen wie alles funktioniert", aber man kann zumindest erwarten, das eine Problematik klar und eindeutig formuliert wird, wenn man Hilfe möchte.
Wenn man z.B. versucht, option-off in eine if-Klammer zu setzen, bekommt man "Undefined token 'option'"; es ist anzunehmen, dass er das ausprobiert hat, warum postet er dann nicht, dass und wie es schiefgegangen ist?
Ist mir jetzt auch latte, ich hab alles dazu gesagt, was zu sagen ist. Nebensächlich finde ich das ganz bestimmt nicht; denn es hilft auch ihm.
-
Ich habe ja nicht gesagt das ich ein fehler oder eine fehlermeldung habe!
Ich wollte lediglich nur ein wenig hilfe, weil ich nicht wusste wie ich die dialog (option-off 1) so anwenden kann das es erst dann wirksam wird wenn auch alles im skript erledigt ist.
habe halt vieles probiert und dank der hilfe hier hat es letztendlich mit dem befehl
"this.SetOptionState(1,eOptionOff);"
doch geklappt.
man muss nicht alles wissen, man muss nur wissen wo man es findet!
Danke nochmal.