Autor Thema: .Walk nach einem Dialog?  (Gelesen 22586 mal)

Mister L

  • Boss der T.I.A.
  • Globaler Moderator
  • Ehrwürdiger Tentakel
  • *****
  • Beiträge: 3113
  • Geschlecht: Männlich
  • "R.I.P. Clever & Smart † 1958 -2023"
    • Profil anzeigen
    • Maniac Mansion - Night of the Meteor
Re: .Walk nach einem Dialog?
« Antwort #30 am: 19. Juli 2007, 11:13:26 »
EDIT: hmm, bin mir jetzt aber nicht sicher, ob die idle-view bei einem NonPlayerCharacter überhaupt funktioniert...  :-\
Ja, das geht auch bei NPCs.

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #31 am: 19. Juli 2007, 17:04:07 »
Habe ich auch schon gemacht.
Aber es geht trotzdem nicht.
Ted is red.
See red Ted.

Rocco

  • Administrator
  • alter Tentakel
  • *****
  • Beiträge: 2375
  • Geschlecht: Männlich
    • Profil anzeigen
    • Maniac Mansion Mania
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #32 am: 19. Juli 2007, 17:18:01 »
also ich hab das mal so gemacht.

wenn der spieler in den raum kommt wo sich der idel character befindet, in den ... players enters room before fadein


// VORSICHT ALTER CODE  ;)
SetCharacterView(JEFF,9);       // Das ist der idle view
AnimateCharacter(JEFF,0,9,1);

wenn er dann angeprochen wird. (talk to character)

ReleaseCharacterView(JEFF);
RunDialog(2);
 

im dialog dann diese zeile

run-script 7
und dort (global script, dialog request) dann wieder dieses

if(xvalue == 7) {
                SetCharacterView(JEFF,9);
    AnimateCharacter(JEFF,0,3,1);
    }

sorry bin jetzt zu faul um das auf neuen code umzuändern, hab das von meinem ersten ags-game Airbreak (gibts übrigens als open source)rauskopiert.

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #33 am: 19. Juli 2007, 18:03:30 »
Hi,

ist kein thema, habe es auch schon vorher in der "before fade in" drinn gehabt.
Das einzige was ich nicht hatte, war das mit dem releasecharacterview.

ABER: Es geht immernoch nicht.
Kann ich das als repeadly execute einfügen? Das halt alle halbe sekunde die view beginnt?
Ted is red.
See red Ted.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #34 am: 19. Juli 2007, 18:16:26 »
Bin grad zu erledigt, um mich damit genauer auseinander zu setzen, aber eins:

Zitat von: Manual, Dialog.Start()
NOTE: The conversation will not start immediately; instead, it will be run when the current script function finishes executing.

Also:
dDialog.Start();
cPenner.ChangeView...
cPenner.Animate...
bringt nix, es wird in dieser Reihenfolge ausgeführt:
cPenner.ChangeView...
cPenner.Animate...
dDialog.Start();
Das Ulkige (oder Traurige) hierbei ist: genau dieser Punkt war der Grund, warum dieser thread überhaupt gestartet wurde.
Und meine Antwort damals:
Zitat
3. RunDialog wird am Ende einer Funktion aufgerufen, egal, wo es steht.
Eine einfachere Methode: Zwei RunScript-Actions benutzen, "dDialog.Start()" [...] ans Ende der Ersten, alles, was nach dem Dialog passieren soll, kommt in die Zweite.

Kein Problem. Gern geschehen.

Rocco

  • Administrator
  • alter Tentakel
  • *****
  • Beiträge: 2375
  • Geschlecht: Männlich
    • Profil anzeigen
    • Maniac Mansion Mania
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #35 am: 19. Juli 2007, 18:32:43 »

ABER: Es geht immernoch nicht.
Kann ich das als repeadly execute einfügen? Das halt alle halbe sekunde die view beginnt?
das würde ich nicht empfehlen, wird dann standardmässig 40x pro sekunde gestartet, würde deswegen nicht viel bringen.

hast du am ende von deinem dialog run-script 4?

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #36 am: 19. Juli 2007, 19:00:04 »

cPenner.ChangeView...
cPenner.Animate...
dDialog.Start();


Hey danke, nur ist das jetzt eine endlosschleife, da es ewig geloopt wird, bevor der dialog startet.
Ted is red.
See red Ted.

steve-o-mat

  • volljähriger Tentakel
  • *****
  • Beiträge: 617
  • Geschlecht: Männlich
    • ICQ Messenger - 481703404
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #37 am: 19. Juli 2007, 20:12:41 »
Hey danke, nur ist das jetzt eine endlosschleife, da es ewig geloopt wird, bevor der dialog startet.

character[EGO].Animate(3, 1, 0, eBlock, eBackwards);

Hab hier mal das Beispiel aus der Hilfedatei hergenommen...

3 ist die Nummer des Loops, 1 das Delay, dann kommt der Repeat style (da müsste für stete Wiederholung ja eRepeat rein), der Blocking style und dann die Richtung die der Loop durchläuft.
Wenn ich das letztens richtig verstanden habe bewirkt das eBlock, das alles geblockt wird bis die Animation zuende ist. Da müsstest du  noBlock reinsetzen -> keine Blockung! (also keine Endlosschleife)    ;)
[/klugscheiss]    ;D

Falls ich da irgendwie falsch liege, lass ich mich gern berichtigen.

« Letzte Änderung: 19. Juli 2007, 20:25:11 von steve-o-mat »

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #38 am: 19. Juli 2007, 20:37:30 »
Statt der 0 kann man auch eOnce verwenden.

eNoBlock und eRepeat zusammen geht ohne weiteres, und eRepeat macht auch nur mit eNoBlock Sinn, da das Spiel sonst ja auf das Ende einer endlosen Animation wartet ;)

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #39 am: 20. Juli 2007, 00:00:43 »
danke nochmal.

Jetzt habe ich allerdings ein anderes problem.

Und zwar:
Der Penner gibt kommentare ab:

  // script for Room: Repeatedly execute
if(IsTimerExpired(1)) {
  int ran = Random(3);
  if(ran==0) DisplaySpeechBackground(PENNER, "Hier muss doch was Essbares sein.");
  else if(ran==1) DisplaySpeechBackground(PENNER, "Oh man! Ich habe so einen Hunger");
  else if(ran==2) DisplaySpeechBackground(PENNER, "Hmm... alter Nudelauflauf!");
  else if(ran==3) DisplaySpeechBackground(PENNER, "Wie kan man sowas nur wegwerfen?");
  SetTimer(1, Random((10*20))+(20*10));
  }   

Allderings soll es so sein, dass der Penner weggeht wenn man ihm einen Burger gibt<- das habe ich schon alles.
Allerdings läuft das Script oben immernoch weiter. wie kann ich das ganze in eine If-Abfrage machen, dass abgefragt wird ob der Char in dem raum ist und dann das script läuft und wenn nicht, dann nicht.
Ted is red.
See red Ted.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #40 am: 20. Juli 2007, 02:38:54 »
Nur nebenbei: statt DisplaySpeechBackground wird inzwischen Folgendes verwendet: cPenner.SayBackground("...");
Aber egal:
if (IsTimerExpired(1) && cPenner.Room==X) {

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #41 am: 21. Juli 2007, 03:23:29 »
Mal wieder ich.

So, ich will einen countdown der nach nach einem gespräch gestartet wird.
Also nach dem dialog kommt halt mein run-script befehl.

und in der dialog request kommt dann das hier:
if (xvalue==4) {
    SetTimer(2,200); 
    if (IsTimerExpired(2)){
    cJustus.ChangeRoom(5, 1, 1);
    }
}

Es ist ja das gleiche wie mit dem Penner, der was alle paar sekunden sagt, nur dieses geht einfach nicht.


€DIT:
Hat sich erledigt.
Mister L hatte die gleiche Frage im Adventure Treff Forum.
« Letzte Änderung: 21. Juli 2007, 03:42:14 von cast »
Ted is red.
See red Ted.

Mister L

  • Boss der T.I.A.
  • Globaler Moderator
  • Ehrwürdiger Tentakel
  • *****
  • Beiträge: 3113
  • Geschlecht: Männlich
  • "R.I.P. Clever & Smart † 1958 -2023"
    • Profil anzeigen
    • Maniac Mansion - Night of the Meteor
Re: .Walk nach einem Dialog?
« Antwort #42 am: 21. Juli 2007, 17:04:50 »
Mister L hatte die gleiche Frage im Adventure Treff Forum.
Echt? Kann ich mich gar nicht mehr dran erinnern.  :-\
Tja, man wird alt...  ;)

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #43 am: 21. Juli 2007, 18:36:15 »
Nur aus Neugier: Ging es darum, dass if (IsTimerExpired(... in die repeatedly_execute muss?

Übrigens kannst Du den SetTimer-Befehl auch in eine zweite RunScript-action schreiben, wenn er nach dem Dialog ausgeführt werden soll (ich wiederhole mich).
Die dialog_request sollte man nur benutzen, wenn es nicht anders geht, sonst wirds schnell unübersichtlich.

Bei der Gelegenheit:
Wenn man eigene enums definiert, erhalten diese die Werte 1, 2, 3, usw. in der Reihenfolge der Deklaration. Also könnte man zumindest in der dialog_request (wenn auch nicht im Dialogskript) z.B. sowas verwenden:
function dialog_request(int p) {
  if (p==Edna_schaut_boese) {   // run-script 1
    cEdna.ChangeView(47);
  }
  ...
}
Das geht natürlich auch anderswo, ein tolles Beispiel wäre CallRoomScript(), da kann man nämlich direkt sowas machen:

// global script
  CallRoomScript[AlleTuerenZu];

// room script
function on_call(int p) {
  if (p==AlleTuerenZu) {
  ...
}
Und das tollste: Autocomplete funktioniert bekanntlich auch mit enums :D
« Letzte Änderung: 21. Juli 2007, 18:37:40 von KhrisMUC »

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #44 am: 06. August 2007, 21:46:18 »
hey hey,

lange nichts von mir gehört.

Ich habe mal eine frage... was sonst.

Und zwar soll eine zwischensequenz kommen, wie halt mit dem Paket und Ed.

Okay, der timer rennt runter, nur die frage wie ich den raum lade.

Das war bisher so, dass ich EGO in den raum geladen habe, wobei player invisible gesetzt ist.

Allerdings soll nach der cutszene, der vorige raum geladen werden, .prevroom, allerdings steht mein EGO ja nicht mehr an der stelle.

Kann man das mit einem Save and Load regeln? dass er vor der scene saved und am ende lädt?

oder gibt es gar eine einfachere lösung?
Ted is red.
See red Ted.