Problem mit skript

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
m@fju
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 33
Registriert: 12.04.2005, 17:59

Problem mit skript

Beitrag von m@fju »

hi leute, ich hab ein kleines problem. in meinem kleinen probegame sind 2 charactere, ein spieler und ein npc. wenn ich mit dem npc reden will läuft ein dialog per skript ab (unter interactions -> talk to charakter) . aber es soll ja nicht nur dieses eine skript als gespräch ablaufen sondern noch andere zu späteren zeitpunkten im spiel. weiß einer wieman das macht?
Benutzeravatar
Floyd
Logik-Lord
Logik-Lord
Beiträge: 1088
Registriert: 14.03.2004, 19:59

...

Beitrag von Floyd »

Wahrscheinlich ist es auch mit den Standardbefehlen realisierbar, aber damit kenne ich mich nicht so aus, deswegen hier nur mal ein Lösungvorschlag mit "run script":

Geh ins Global script (Menüleiste -> script -> Global script).
Dort definierst du unter "Game start" eine neue variable.
...
function game_start() {
// called when the game starts, before the first room is loaded
SetGlobalInt(1,0);
...
.

Als nächstes lässt du an der Stelle, an der dein Charakter den anderen anspricht (oder umgekehrt), ein script ablaufen (Interactions -> New Action -> run script).
Dort schreibst du folgenes:
if (GetGlobalInt (1) == 0) {
RunDialog (1);
SetGlobalInt (1,1);
}
else if (GetGlobalInt (1) == 1) {
RunDialog (2);
}
Falls der erste Dialog nur ein einziges mal abläuft, kannst du Global Int gleich auf 1 setzen (kursiv) , ansonsten musst du dies zu einem späteren Zeitpunkt tun.

MfG Floyd
m@fju
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 33
Registriert: 12.04.2005, 17:59

Beitrag von m@fju »

also, ich hab jetz folgendes skript gemacht:

// script for character0: Talk to character
MoveCharacter(EGO, 200,123);
while (character[EGO].walking) Wait(1);
FaceCharacter(EGO, TALK);
FaceCharacter(TALK, EGO);
Wait(50);
if (GetGlobalInt (1) == 0) {
RunDialog (0);
MoveCharacter(EGO, 56,122);
Wait(100);
Display("???");
Wait(150);
RunDialog (1);
SetGlobalInt (1,1);
}
else if (GetGlobalInt (1) == 1) {
RunDialog (2);
}


das einzige was jetz noch nich klappt is, das der allererste dialog abgespielt wird und DANN erst der zweite (es gibt insgesamt 3 dialoge)
Benutzeravatar
Floyd
Logik-Lord
Logik-Lord
Beiträge: 1088
Registriert: 14.03.2004, 19:59

...

Beitrag von Floyd »

Mmm ich verstehe das Problem nicht ganz. Welcher sollte denn als erstes abgespielt werden? MfG Floyd
Benutzeravatar
-BigDaniel-
Süßwasserpirat
Süßwasserpirat
Beiträge: 304
Registriert: 18.09.2003, 15:19
Kontaktdaten:

Beitrag von -BigDaniel- »

[quote]
// script for character0: Talk to character
MoveCharacter(EGO, 200,123);
while (character[EGO].walking) Wait(1);
FaceCharacter(EGO, TALK);
FaceCharacter(TALK, EGO);
Wait(50);
if (GetGlobalInt (1) == 0) {
RunDialog (0);
MoveCharacter(EGO, 56,122);
Wait(100);
Display("???");
Wait(150);
RunDialog (1);
SetGlobalInt (1,1);
stop;
}
else if (GetGlobalInt (1) == 1) {
RunDialog (2);
}

dum musst nach der ersten variable abfrage ein STOP; sertzten damit das script hier endet !!!
-------------------------------------------------------------------------------------
FALS DAS EINE FALSCH INTERPRÄTATION DEINER FRAGE WAR DANN HAB ICH HIER NOCH EINE LÖSUNG!!! -------------------------------------------------------------------------------------

VErbinde die ienzelnen dialoge doch mit goto-dialog XX im DIALOG SCRIPT!!!

mfg Daniel ;)
Benutzeravatar
-BigDaniel-
Süßwasserpirat
Süßwasserpirat
Beiträge: 304
Registriert: 18.09.2003, 15:19
Kontaktdaten:

Beitrag von -BigDaniel- »

Ich glaub die interprätationen waren beide falsch!!! oO hmmm komische fragestellung :P 8:)
m@fju
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 33
Registriert: 12.04.2005, 17:59

Beitrag von m@fju »

also meine frage ist. ich habe halt 3 dialoge. am anfang wenn man mit dem npc reden will soll dialog 0 abgespielt werden, dann soll sich der player geskriptet an eine andere stelle bewegen und dialog 1 abspieln. wenn das dann getan wurde soll es nich mehr möglich sein, die beiden dialoge abzuspiele, sondern dialog 2 soll abgespielt werden.
mein problem ist aber , dass dialog 0 garnicht abgespielt wird, sondern dass direkt der player an die andere stelle geht und dialog 1 abgespielt wird. danach wird wie ich es wollte nur noch dialog 2 abgespielt.
hoffe jetz isses klar^^
Benutzeravatar
Floyd
Logik-Lord
Logik-Lord
Beiträge: 1088
Registriert: 14.03.2004, 19:59

...

Beitrag von Floyd »

Mmh hast du bei deinem Dialog denn bei "Show" Haken gesetzt, d.h. kann man Sätze auswählen? MfG Floyd
strazer

Beitrag von strazer »

RunDialog wird immer am Ende des Skripts ausgeführt.
Am einfachsten ist es deshalb, nach jedem RunDialog-Befehl eine neue "Run script"-Action direkt dahinterzusetzen.

Erste "Run script"-Action:

Code: Alles auswählen

 // script for character0: Talk to character

  MoveCharacterBlocking(EGO, 200, 123);
  FaceCharacter(EGO, TALK);
  FaceCharacter(TALK, EGO);
  Wait(50);
  if (GetGlobalInt (1) == 0) RunDialog (0);
  else if (GetGlobalInt (1) == 1) RunDialog (2);

Zweite "Run script"-Action für dieselbe Interaktion (wird ausgeführt nachdem der in der ersten Action gestartete Dialog endet):

Code: Alles auswählen

 // script for character0: Talk to character

  if (GetGlobalInt (1) == 0) { // wenn Dialog 0 lief
    MoveCharacterBlocking(EGO, 56, 122);
    Wait(100);
    Display("???");
    Wait(150);
    SetGlobalInt (1, 1);
    RunDialog (1);
  }

Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

-BigDaniel- hat geschrieben:dum musst nach der ersten variable abfrage ein STOP; sertzten damit das script hier endet !!!
-------------------------------------------------------------------------------------
FALS DAS EINE FALSCH INTERPRÄTATION DEINER FRAGE WAR DANN HAB ICH HIER NOCH EINE LÖSUNG!!! -------------------------------------------------------------------------------------

VErbinde die ienzelnen dialoge doch mit goto-dialog XX im DIALOG SCRIPT!!!
1. Nein. Den Befehl 'stop' kann man nur innerhalb von Dialog-scripts verwenden. Und er hat ein else (if) verwendet, sprich, alles richtig gemacht.
2. Das geht zwar, aber er hat extra 2 einzelne Dialoge gemacht, weil die Figur zwischendrin gehen soll.

Ich finds ja cool, dass Du helfen willst, aber falsche Tips verwirren nur.

Übrigens gibt's rechts oben bei Deinen posts einen edit-Button, dann musst Du nicht 2mal hintereinander posten.
strazer hat geschrieben:Am einfachsten ist es deshalb, nach jedem RunDialog-Befehl eine neue "Run script"-Action direkt dahinterzusetzen.
Coole Methode, man lernt nie aus.
Eine andere Möglichkeit wäre noch der 'run-script x'-Befehl im dialogscript.
Zuletzt geändert von KhrisMUC am 13.04.2005, 22:45, insgesamt 1-mal geändert.
Use gopher repellent on funny little man
m@fju
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 33
Registriert: 12.04.2005, 17:59

Beitrag von m@fju »

danke, jetz klappts!
strazer

Beitrag von strazer »

Eine andere Möglichkeit wäre noch der 'run-script x'-Befehl im dialogscript.
Stimmt, muss man je nach Situation entscheiden.
Benutzeravatar
-BigDaniel-
Süßwasserpirat
Süßwasserpirat
Beiträge: 304
Registriert: 18.09.2003, 15:19
Kontaktdaten:

Beitrag von -BigDaniel- »

Ich muss mich entschuldigen man verwendet den befehl "return;" und nicht "stop;" :oops: ^^
Antworten