Hauptmenü

Neuigkeiten:

Bitte unterstützt uns und bestellt über diese Links bei Amazon  oder HumbleBumble!

.Walk nach einem Dialog?

Begonnen von cast, 15. Juli 2007, 23:41:11

Vorheriges Thema - Nächstes Thema

cast

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

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

#2
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!
Ted is red.
See red Ted.

KhrisMUC

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

#4
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
Ted is red.
See red Ted.

Bòógieman

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

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

ja kannst du, und zwar genau so wie du es beschrieben hast  ;)
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

cast

super.

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

KhrisMUC

#9
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)) {
    ...

cast

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

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

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

Versuch doch mal das:

SetDialogOption (0, 5 ,eOptionOn); 

KhrisMUC

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()"