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

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
.Walk nach einem Dialog?
« 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...
Ted is red.
See red Ted.

Rocco

  • Administrator
  • alter Tentakel
  • *****
  • Beiträge: 2371
  • Geschlecht: Männlich
    • Profil anzeigen
    • Maniac Mansion Mania
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #1 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.

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #2 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!
« Letzte Änderung: 16. Juli 2007, 02:03:55 von cast »
Ted is red.
See red Ted.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #3 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.

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #4 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
« Letzte Änderung: 16. Juli 2007, 04:26:17 von cast »
Ted is red.
See red Ted.

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2667
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #5 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  ;)
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #6 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?

Ted is red.
See red Ted.

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2667
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #7 am: 16. Juli 2007, 18:16:37 »
ja kannst du, und zwar genau so wie du es beschrieben hast  ;)
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #8 am: 16. Juli 2007, 18:46:17 »
super.

nur wie schreibe ich die abfrage? ich habe keine ahnung davon wie ich das formulieren soll.
Ted is red.
See red Ted.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #9 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)) {
    ...
« Letzte Änderung: 16. Juli 2007, 18:49:56 von KhrisMUC »

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #10 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?
Ted is red.
See red Ted.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #11 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.

cast

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 29
  • Geschlecht: Männlich
    • ICQ Messenger - 107562728
    • Profil anzeigen
    • E-Mail
Re: .Walk nach einem Dialog?
« Antwort #12 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.
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 #13 am: 16. Juli 2007, 22:12:16 »
Versuch doch mal das:

SetDialogOption (0, 5 ,eOptionOn); 

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: .Walk nach einem Dialog?
« Antwort #14 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()"