Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Newbies => Thema gestartet von: cast am 15. Juli 2007, 23:41:11

Titel: .Walk nach einem Dialog?
Beitrag von: cast am 15. Juli 2007, 23:41:11
Hallo erstmal!

Ich spiele gerade ein wenig an ags rum und habe halt eine Idee zu einem 3 Fragezeichen Adventure. Nein, ich habe das eine Crossover noch nicht gespielt^^

So, jetzt zu meinem Problem.
Ein char soll nach einem rundialog befehl den raum verlassen, oder erstmal den screen, aber wäre toll wenn gleich gesagt wird, wie man den befehl gibt dass einer die tür öffnet und "hindurchgeht" und die tür wieder schließt.

Aber erstmal das wichtigste:

So sieht mein code aus:

RunDialog(0);
character[JEFF_OLD].Walk(800, 122, eBlock, eAnywhere);

Problem:
Sobald ich ihn anspreche läuft er bereits davon!
Gibt es eine "after that" funktion?

Leider hat mir die suche nicht weitergeholfen...
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Rocco am 16. Juli 2007, 00:28:12
in dem dialogscript schreibst du an der position wo jeff weggehen soll, folgendes:

run-script 1
dieser befehl bewirkt, dass in im global script diese funktion aufgerufen wird.


also in deinem global script sollte es eine funktion geben die so aussieht:

function dialog_request (int xvalue) {
 
// das hier musst du selber reinschreiben
if(xvalue == 1) {
character[JEFF_OLD].Walk(800, 122, eBlock, eAnywhere);
oDooropen.Visible = true;
PlaySound(2);   // türöffen sound
player.ChangeRoom(20,580,137);
}
 }

falls es diese funktion noch nicht gibt, kopier sie rein - und pass die drei zeilen unter character.Walk an deine bedürfnisse an.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 16. Juli 2007, 01:15:16
Edit die 2te^^

okay, mit dem script geht es.

Nur eine sache noch. Ich nutze das Starterpaket Schule.

und oDooropen ist nicht bedingt.
Kann ich dies noch machen?

Bisher ist die Tür auf und es fällt nicht weiter auf, dass der Character verschwindet. Ich bin nämlich nicht Jeff, den habe ich derzeit noch als platzhalter bis ich mir einen Peter gemacht habe.

Also JEFF ist dann in einem anderen raum, und dort spreche ich ihn wieder an und dann läuft leider das script von vorne los...

ich schau mich mal um.
Danke bisher!!!
Wird bestimmt nicht die letzte Frage gewesen sein!
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC am 16. Juli 2007, 03:10:01
1. Statt "character[JEFF_OLD]" geht auch "cJeff_old".
2. "oDooropen" funktioniert nur, wenn das Türobjekt auch so genannt wurde (Script O-Name: DOOROPEN).
Da die dialog_request im global script ist, kann man keine O-Names für Objekte verwenden, statt dessen muss "object[X]" verwendet werden. Aber:
3. RunDialog wird am Ende einer Funktion aufgerufen, egal, wo es steht.
Eine einfachere Methode: Zwei RunScript-Actions benutzen, "dDialog.Start()" ("RunDialog()" ist veralteter Code) ans Ende der Ersten, alles, was nach dem Dialog passieren soll, kommt in die Zweite.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 16. Juli 2007, 03:54:58
hallo nochmal.

Ich wollte gerade das script nochmal benutzen, allerdings in einer cutscene.
Da funktioniert ja run-script nicht.

Und zwar soll in der cutscene ein char in richtung tür gehen sie öffnen und in einem anderen raum verschwinden.

Das müsste doch eigentlich so ähnlich sein.


EDIT: Was heißt so ähnlich?! :D

Habs hinbekommen.
So, Spielidee ist geschrieben.
Intro habe ich, wieso fange ich mit solchen spielereien an?
Erste Gespräche habe ich auch.

Gut, da erwartet mich noch einiges.

Ist das schlimm, wenn ich die Grafiken der Schule nutze?
Habe bisher auch nur meinen Justus gestaltet.
Als Peter habe ich Jeff und als Bob habe ich Dave gewählt.

Ich würde gerne Skinny Norris reinbringen, dafür werde ich mal Klaus editieren.

Okay.
Danke bisher für die Hilfe
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Bòógieman am 16. Juli 2007, 08:07:01
seh ich das jetzt richtig? du willst ein MMM-starterpack für ein "die drei fragezeichen"-spiel verwenden
hmm, also wenn du in deinem spiel klar ersichtlich machst, woher die ressourcen stammen und du MMM, uns (und vor allem mich  ;D ) huldigst, seh ich da kein problem
(das ist nur meine meinung, mal sehen was der rest der community denkt)

schöner wäre natürlich eine MMM episode  ;)
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 16. Juli 2007, 16:03:04
habe da nochmal eine frage zu der stand und gesichs position in gesprächen.

In meinem bisherigen script geht der mein char zu einer festen position geht und sie sich dann anschauen.

Nun ist es jedoch so, dass der anzusprechende in der mitte eines raumes steht und wenn ich links von ihm stehe geht er halt einmal um ihn rum.
Kann ich da mit einer if abfrage das abfangen? wenn er diese koordinate überschritten hat stellt er sich dahin ansonsten dahin?

Titel: Re: .Walk nach einem Dialog?
Beitrag von: Bòógieman am 16. Juli 2007, 18:16:37
ja kannst du, und zwar genau so wie du es beschrieben hast  ;)
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 16. Juli 2007, 18:46:17
super.

nur wie schreibe ich die abfrage? ich habe keine ahnung davon wie ich das formulieren soll.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC am 16. Juli 2007, 18:46:41
Dafür gibt's die Funktion GoToCharacter(). Die macht das automatisch.

Im Skript würde das so aussehen:
// interaction: talk to Dave
  if (GoToCharacter(cDave.ID, 0, 1, 2)) {
    dDialog.Start();
  }

Edit: ansonsten würdest Du die x-Koordinaten von Spieler und NPC vergleichen:
  int x=cDave.x;
  if (player.x < x)   // spieler steht links von Dave
    x=x-35;
  else             // spieler steht rechts von Dave
    x=x+35;

  if (MovePlayer(x, cDave.y)) {
    ...
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 16. Juli 2007, 19:25:04
vielen,vielen dank bisher.

Eine andere Frage:

Und zwar habe ich ein Dialog mit diversen options, allerdings soll eine option erst angezeigt werden, wenn alle dialoge durch sind.

Mit option-onund off geht das schelcht, da man ja beliebig die optionen wählen sollen und erst wenn die alle durch sind, soll das script starten.

Es soll jedoch auch die ganze zeit die option sichtbar sein, den dialog zu beenden.<- habe ich bereits.

Geht eine abfrage in einer dDialog? Oder muss ich das anders scripten?
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC am 16. Juli 2007, 20:15:54
In so einem Fall musst Du ganz systematisch vorgehen:

Angenommen, der Dialog sähe so aus:

1. Hallo
2. Bli
3. Bla
4. Blub
5. Aha!      < taucht auf, wenn 1-4 abgehakt sind
6. Tschüß.

Wenn die Optionen 1-4 garantiert nur einmal aufgerufen werden können, genügt es, eine Variable hochzuzählen. Wenn die dann den Wert 4 hat, erscheint Option 5.
Da die Option nicht erst beim nächsten Mal erscheinen soll, sondern wahrscheinlich sofort im laufenden Dialog, musst Du jedesmal nach den Optionen 1-4 überprüfen, ob Nr. 5 aktiviert werden soll. Du brauchst also run-script/dialog_request:

int c;

#sectionstart ...
function dialog_request(int xvalue) {
  ...
  if (xvalue==2) {
    c++;
    if (c==4) SetOptionState(dDialog, 5, eOptionOn);
  }
}
#sectionend ...

Jetzt schreibst Du noch
run-script 2
zu jeder der ersten vier Optionen dazu.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 16. Juli 2007, 22:03:13
undefined token: setoptionstate.

In der hilfe heißt es auch dialog.setoptionstate.

Allerdings geht es dann immernoch nicht.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Mister L am 16. Juli 2007, 22:12:16
Versuch doch mal das:

SetDialogOption (0, 5 ,eOptionOn); 
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC am 16. Juli 2007, 22:13:55
EDIT: Mister L: Alter Code! Bös! Bös! Aus! ;)

Stimmt, mein Fehler.

Es heißt "Dialog.SetOptionState"; Groß- und Kleinschreibung ist sehr wichtig. Das auto-complete Fenster nimmt einem diese Arbeit aber größtenteils ab.

Jetzt musst Du nur deinem Dialog einen Skriptnamen verpassen, z.b. dDialog2; dann würde der Befehl "dDialog2.SetOptionState()" lauten. Oder Du nimmst die Nummer des Dialogs: "dialog[X].SetOptionState()"
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 16. Juli 2007, 22:39:05
Vielen danke für eure schnellen antworten.

wieder mal ein problem dabei.
ich habe schon eine dialog request function, die halt weiter oben mir schon reinkopiert wurde.

variable: dialog_request is already defined.

Wie kann ich das jetzt so ändern, dass das script geht.

oh man, habe mir das ganze wesentlich einfacher vorgestellt... zumal ich noch keine objekte oder inventargegenstände habe.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Timer am 16. Juli 2007, 22:42:50
Warum benutzt du denn dann nicht einfach die vorgegebene dialog_request? ;)
Kopiere doch einfach den Inhalt deiner Dialog_request in die vorherige und lösche die zweite (Dann überflüssige) aus dem Script. Damit müsste dein Problem behoben sein.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 16. Juli 2007, 22:59:16
haha:D
weil ich nicht soweit gedacht habe :D

mal schauen ob ich mir eine if abfrage machen kann, dass erst ein dialogoption mit einem character möglich ist, wenn man mit einem anderen z.b. über ihn gesprochen hat, also ein dialogoption mit jemanden anderen abgheackt ist.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC am 16. Juli 2007, 23:07:29
Du brauchst kein if, das geht wieder genauso.
Ins Dialogscript schreibst Du bei dem Gespräch über den anderen Charakter "run-script 3" mit rein.

Und in die bestehende dialog_request kommt dann:
  if (xvalue==3) dAndererdialog.SetOptionState(x, eOptionOn);
Du merkst, es zeichnet sich ein Muster ab ;)
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 16. Juli 2007, 23:08:47
hi danke, habs aber selbst hinbekommen, zumal aber das in mein script2 reinpasst. schließlich rede ich in dem ersten satz über die person.

Aber vielen dank:D

EDIT:

ABER:

function dialog_request (int xvalue) {
 
// das hier musst du selber reinschreiben
if(xvalue == 1) {
character[JEFF_OLD].Walk(800, 122, eBlock, eAnywhere);
oDooropen.Visible = true;
PlaySound(2);   // türöffen sound
player.ChangeRoom(20,580,137);
}
 }

Es kommt immernoch die meldung, dass sie undefiniert ist, also die Tür, obwohl das Objekt so heißt.

Mit
object[oOpendoor].Visible=true;Da kommt die Meldung: undefined symbol.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Bòógieman am 17. Juli 2007, 08:04:21
ja, weil die tür im raum definiert ist und nicht im globalen skript
auswendig weiss ich jetzt keine 100%ige lösung und AGS hab ich momentan leider nicht zur hand...
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC am 17. Juli 2007, 08:43:25
1. Statt "character[JEFF_OLD]" geht auch "cJeff_old".
2. [...] Da die dialog_request im global script ist, kann man keine O-Names für Objekte verwenden, statt dessen muss "object[X]" verwendet werden.
Statt dem X die Objektnummer eintragen.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 18. Juli 2007, 00:41:41
ja, habe ich schon probiert.
Aber dann stürzt es einfach ab.

Muss ich erst das Object Tür als also obeject[] definieren?

Ausserdem habe ich folgendes Problem.
Ich habe jetzt vollkommen neu angefangen, da das Startpack mir zuviel scripte hatte, die ich am ende nicht brauche.

Jetzt habe ich das Problem, dass die Eingangtür im ErdgeschossQuer(also mein Object) mein Character überdeckt.

Er verschwindet also in der geöffnetet Tür.
Habe schon die Objects verglichen, aber ich sehe keinen unterschied zu meinem.


EDIT: Aber nochmal zu vorheriger Problem, dass die Tür nicht als object erkannt wird.
Wenn die Tür schon auf ist, brauch ja kein Ton mehr kommen. Wie regel ich dass denn gleich mit?
Titel: Re: .Walk nach einem Dialog?
Beitrag von: steve-o-mat am 18. Juli 2007, 01:43:41
Wegen dem Verschwinden hinter der Tür, da kann ich helfen:

Du musst im 'Room Editor' bei den 'Objects' die Tür auswählen, dann klickst du auf den 'Set baseline'-Button (neben 'Interaction') und schiebst die Linie an den oberen Bildrand. Das bewirkt, dass AGS die Grundlinie als weiter hinten im Raum erkennt und Bernard dann vor die Tür gesetzt wird.  ;)
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 18. Juli 2007, 03:07:57
danke  ;D

Habe noch eine weitere Frage, neben dem definieren eines objects in der global


Und zwar:
Bei einem Gespräch soll eine Kamerafahrt nach links verlaufen und wieder zurück fahren.
Problem: Ich kann keine feste X-Position angeben, da ich ja beim sprechen mit dem char entweder links oder rechts stehe oder gar unter/über ihm.
Aber das kann ich ja fixen, indem ich bei Ansprechen meinem ego eine feste x position zu weise.

Dennoch steht er entweder rechts oder links und mein script sieht bisher so aus:

if (xvalue==3){
 
{
  StartCutscene(eSkipESCOrRightButton);
  GUIOff(0);
  GUIOff(1);
  GUIOn(2);
  int x;
x = 300;
if (player.x < x) {

while(x > 50)
{
  x-=4;
  SetViewport(270, 0);
  Wait(1);
}
  Wait(20);
while(x< 175)
{
  x+=4;
  SetViewport(x, 0);
  Wait(1);
}

 {

else (player.x > x) {
while(x > 50)
{
  x-=4;
  SetViewport(x, 0);
  Wait(1);
}
  Wait(20);
while(x< 175)
{
  x+=4;
  SetViewport(330, 0);
  Wait(1);
}

  GUIOn(0);
  GUIOn(1);
  GUIOff(2);
EndCutscene();
}
}
}
}
}
}

Leider kommt eine Fehlermeldung wegen dem else.
Kann man mir da helfen?
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC am 18. Juli 2007, 09:35:49
Mal der Reihe nach:

object[] ist ein von AGS definierter array. Die einzelnen Elemente enthalten die Objekte des momentan geladenen Raumes, also object[0] ist das erste Objekt, object[1] das zweite, usw.
Warum es beim Testen abgestürzt ist, kann ich Dir nicht sagen, eventuell hast Du z.B. object[1] verwendet, obwohl der Raum nur ein Objekt (nämlich Nr. 0) hat.
Die Nummer eines Objekts kannst Du unter Room -> objects links oben ablesen.

Zum code:
Gewöhn Dir am Besten von Anfang an sinnvolles Einrücken und Klammersetzen an. Sonst wird es nachher nur mühsam. Debuggen macht bei weitem nicht so viel Spass wie coden. :)

Hier eine aufgeräumte Version, mit korrigierten Klammern:
  if (xvalue==3) {
    StartCutscene(eSkipESCOrRightButton);
    GUIOff(0);
    GUIOff(1);
    GUIOn(2);
    int x;
    x = 300;
    if (player.x < x) {
      while(x > 50) {
        x-=4;
        SetViewport(270, 0);
        Wait(1);
      }
      Wait(20);
      while(x< 175) {
        x+=4;
        SetViewport(x, 0);
        Wait(1);
      }
    }
    else {
      while(x > 50) {
        x-=4;
        SetViewport(x, 0);
        Wait(1);
      }
      Wait(20);
      while(x< 175) {
        x+=4;
        SetViewport(330, 0);
        Wait(1);
      }
     
      GUIOn(0);
      GUIOn(1);
      GUIOff(2);
      EndCutscene();
    }
  }
Mir ist nicht ganz klar, was der Code genau bewirken soll, aber SetViewPort(270, 0); in der while-Schleife ca. 80 mal hintereinander aufzurufen, macht keinen Sinn.
EndCutscene(); steht nicht außerhalb sondern im else-Block, d.h. es wird nicht immer ausgeführt. Muss es aber.

Nach else brauchst Du nicht nochmal die Bedingung in Klammern, else behandelt jeden Fall, der nicht durch if (/else if) abgedeckt worden ist.
if (player.x < x) {
  ...
}
else if (player.x > x) {
  ...
}
else {
  Display("player.x ist genau x!");
}
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 18. Juli 2007, 16:06:43
Zu dem Object: DANKE!

Habe total vergessen, dass das erste Object als object[0] erkannt wird.

Zum Zweiten: DANKE!

Es ist eine "Kamerafahrt" in dem Raum, sie fährt nach links und dann wieder nach rechts.

Problem dadurch:
Ich denke es liegt an dem letzten SetViepoint, der Screen lässt sich nämlich nicht weiter "scrollen". Er würde halt an den Seiten noch weitergehen, jedoch bleibt der Bildausschnitt bei den SetViewpoint, anstatt wieder dem ego zu folgen.
Habe bisher nichts dazu gefunden.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Timer am 18. Juli 2007, 16:10:59
ReleaseViewport () lautet die Lösung. Damit lässt sich die "Kamera" wieder frei bewegen.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 18. Juli 2007, 23:47:29
dankschön!

Soo, mal wieder eine Frage:

Ich habe vor einen Penner vor dem Müllcontainer der Schule "suchen" zu lassen.

Ich habe also eine View mit "gestreckten" armen gemacht die sich bewegen.
Wie kriege ich das jetzt hin, dass diese View ständig läuft, bis ich ihn halt anspreche und der Talkview kommt? Danach soll wieder die andere View kommen.

EDIT die letzte... vorerst:

Hat geklappt. Bin wohl immer ein wenig zu ungeduldig.

Dafür stehe ich jetzt vor einem echten Problem. Jedesmal klappt das hier:
ChangeCharacterView(PENNER,39);
AnimateCharacter(PENNER,0,1,1);

Nur nicht nach dem TALK_TO...
Ich habe auch schon in dem dDialog ein script starten lassen, so das der obrige code in der dialog request steht.
Ich habe davor auch schon ein Wait(1) gesetzt, weil ich dachte vielleicht hat das damit zu tun.

So sieht die dialog request aus:
if (xvalue==4)
    {
      Wait(1);
      ChangeCharacterView(PENNER,39);
      AnimateCharacter(PENNER,0,1,1);
    }

Und so sah es in der interaction mit dem Char aus:
  else if (UsedAction (A_TALK_TO))
{
 {
  GoToCharacter(cPenner.ID, 0, 1, 2);
      FaceCharacter (GetPlayerCharacter (), PENNER);
      FaceCharacter (PENNER, GetPlayerCharacter ());
      dPenner.Start();
      ChangeCharacterView(PENNER,39);
      AnimateCharacter(PENNER,0,1,1);
 }
}
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Bòógieman am 19. Juli 2007, 08:31:50
um den penner suchen zu lassen brauchst du garkeinen extra code!
verwende einfach die "im müll suchen"-view als idle-view des charakters und setz die wartezeit auf 0

EDIT: hmm, bin mir jetzt aber nicht sicher, ob die idle-view bei einem NonPlayerCharacter überhaupt funktioniert...  :-\
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Mister L 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.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast am 19. Juli 2007, 17:04:07
Habe ich auch schon gemacht.
Aber es geht trotzdem nicht.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Rocco 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.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast 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?
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC 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.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Rocco 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?
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast 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.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: steve-o-mat 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.

Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC 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 ;)
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast 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.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC 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) {
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast 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.
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Mister L 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...  ;)
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC 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
Titel: Re: .Walk nach einem Dialog?
Beitrag von: cast 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?
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Bòógieman am 07. August 2007, 08:17:08
entweder merkst du dir die x/y koordinate der spielfigur ganz einfach in einer globalen variable und stellst sie nach der cutscene wieder an ihre position zurück
oder du setzt einfach einen anderen char als spielfigur und lässt deine richtige spielfigur einfach da stehen wo sie ist  ;)
Titel: Re: .Walk nach einem Dialog?
Beitrag von: Mister L am 07. August 2007, 11:10:52
Ich kenn natürlich nur wieder den uralt-Code, aber früher konnte man damit so die genaue Koordinate des Spielers beim Raumwechsel bestimmen:

NewRoomEx (1,100,100);
Und ich benutze das heute noch!  ;D
Titel: Re: .Walk nach einem Dialog?
Beitrag von: KhrisMUC am 07. August 2007, 12:40:06
Aktueller Code wäre:
player.ChangeRoom(player.PreviousRoom, x, y);
Titel: Re: .Walk nach einem Dialog?
Beitrag von: ZAK am 30. April 2011, 22:51:27
Hallo erstmal!
Ich spiele gerade ein wenig an ags rum und habe halt eine Idee zu einem 3 Fragezeichen Adventure. Nein, ich habe das eine Crossover noch nicht gespielt^^
Was ist denn aus der Idee geworden???