Unerklärliches Problem

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Unerklärliches Problem

Beitrag von DieFüchsin »

Ich weiß nicht, wo das Problem steckt, denn es kann eigentlich gar keins geben... ich habe folgendes Script:

// script for Region 1: Player walks onto region

FadeOut(4);

if(letztes==8 && weiter==9){ //wenn das letzte richtige Symbol betreten wird

player.ChangeRoom(71, 156, 376); //geht der Spieler in die Plattenhalle
}

else{ //ansonsten:
eingang=(Random(5)+1); //wird ein zufälliger Ausgang(Eingang) gewählt

if(weiter==letztes+1){ //ist das betretene Symbol richtig
letztes=letztes+1; //wird das nächste Symbol bestimmt

}

else{ //ansonsten:

irr=Random(3); //verirrt sich der Spieler:
if(irr==1){player.ChangeRoom(69, 156, 135);} //kommt er zurück in den Startraum

else{ //oder:


letztes=-1; //irrt er herum
weiter=Random(8);
}

SetPlates(weiter+1, true);
FaceLocation(FUL, 155, 134);

object[0].X=11;
object[0].Y=144;
object[7].X=223;
object[7].Y=140;
object[11].X=226;
object[11].Y=192;
object[12].X=89;
object[12].Y=87;
object[10].X=88;
object[10].Y=207;
object[9].X=3;
object[9].Y=212;

object[1].X=40;
object[2].X=42;
object[3].X=184;
object[4].X=114;
object[5].X=185;
object[6].X=113;
object[1].Y=128;
object[2].Y=173;
object[3].Y=173;
object[4].Y=175;
object[5].Y=126;
object[6].Y=122;
SetWalkBehindBase(1, 192);
SetObjectBaseline(8, 195);
p=0;
character[FUL].SetWalkSpeed(20, 20);

MoveCharacterToHotspot(FUL, eingang);
character[FUL].SetWalkSpeed(8, 8);
FaceLocation(FUL, 158, 134);



fade=100;

}
}


das fade=100 bewirkt dann im Player stands on Hotspot, dass es wieder ein fadein gibt, aber seltsamerweise bleibt das Spiel nach der Zeile

if(weiter==letztes+1){ //ist das betretene Symbol richtig
letztes=letztes+1; //wird das nächste Symbol bestimmt

}

hängen. Ich hab mit dem Scrolllock geschaut, welche Programmzeilen es durchläuft, aber es durchläuft keine mehr. Sobald die letzte Aktion in der if-Abfrage erfüllt ist (getestet mit einer Display-Ausgabe), bleibt das Spiel im Leerlauf (No Script) hängen und ich weiß einfach nicht warum, Klammern habe ich schon überprüft.
Danke, Adventuretreff! <3
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Edit: Käse, hab's verplant wegen der fehlenden Formatierung.
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

Ich machs mal farbig, eigentlich müsste es stimmen und die if und elses richtig verteilt sein...

// script for Region 1: Player walks onto region

FadeOut(4);

if(letztes==8 && weiter==9){ //wenn das letzte richtige Symbol betreten wird

player.ChangeRoom(71, 156, 376); //geht der Spieler in die Plattenhalle
}

else{ //ansonsten:
eingang=(Random(5)+1); //wird ein zufälliger Ausgang(Eingang) gewählt

if(weiter==letztes+1){ //ist das betretene Symbol richtig
letztes=letztes+1; //wird das nächste Symbol bestimmt

}

else{ //ansonsten:

irr=Random(3); //verirrt sich der Spieler:
if(irr==1){player.ChangeRoom(69, 156, 135);} //kommt er zurück in den Startraum

else{ //oder:


letztes=-1; //irrt er herum
weiter=Random(8);
}


blabliblablum

}}
Danke, Adventuretreff! <3
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Ich hoffe doch, dass Du in Deinen Skripts die Befehle einrückst, oder? :)
AGS macht es sogar automatisch.

Code: Alles auswählen

FadeOut(4); 

if(letztes==8 && weiter==9){ //wenn das letzte richtige Symbol betreten wird 
  player.ChangeRoom(71, 156, 376); //geht der Spieler in die Plattenhalle 
} 
else{ //ansonsten: 
  eingang=(Random(5)+1); 
  if(weiter==letztes+1){       // IST DIESE BEDINGUNG WAHR,
    letztes=letztes+1;     // IST NACH DIESER ZEILE SCHLUSS
  } 
  else{ //ansonsten: 
    irr=Random(3); //verirrt sich der Spieler: 
    if(irr==1) {
      player.ChangeRoom(69, 156, 135); //kommt er zurück in den Startraum 
      return;      //   HIER EIN RETURN REIN
    }
    else { //oder: 
      letztes=-1; //irrt er herum 
      weiter=Random(8); 
    } 
    SetPlates(weiter+1, true); 
    FaceLocation(FUL, 155, 134); 
    ...
    [schnipp]
    ...
  } 
}
Jetzt kannst Du auch sofort sehen, dass alles nach dem zweiten "else" nicht ausgeführt wird, wenn "weiter==letztes+1" wahr ist, d.h. das Spiel wartet wieder auf einen Mausklick, während der Bildschirm dunkel ist.

Denk auch dran, dass ChangePlayer erst am Ende des Skriptes ausgeführt wird, d.h. der ganze Code ab SetPlates läuft vorher noch durch.
Füg nach ChangePlayer einfach ein "return;" ein.
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

x(

AGS beschwert sich mit "Parse Error near else" wenn ich return so einfüge, wie du es geschrieben hast...
Danke, Adventuretreff! <3
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Geht es ohne return?
Hast Du denn Strichpunkt nach dem return drin?
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

Hast du denn außer dem return noch was anderes umgeschrieben?
Ohne return bleibt es jedenfalls hängen und ans Semikolon hab ich auch gedacht.
Danke, Adventuretreff! <3
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Achso....ich hab nix umgeschrieben, nur das return rein.
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

Tja wie gesagt, es geht leider nicht ohne... was könnte denn das für ein Parse Error sein??
Danke, Adventuretreff! <3
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Eine fehlende oder falsche Klammer z.B., welche Zeile gibt AGS an?
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

ah ok ich hatte das return außerhalb der Klammer liegen, darum...

jetzt läufts zwar, allerdings hat das return nichts gebracht, der Bildschirm bleibt weiterhin schwarz. Ich habs getestet, mit einem Display("Hallo") nach dem return, aber auch das erschien nicht.
Danke, Adventuretreff! <3
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Wie gesagt:
khrismuc hat geschrieben:Jetzt kannst Du auch sofort sehen, dass alles nach dem zweiten "else" nicht ausgeführt wird, wenn "weiter==letztes+1" wahr ist, d.h. das Spiel wartet wieder auf einen Mausklick, während der Bildschirm dunkel ist.
Ich vermute mal, dass vor "SetPlates(weiter+1, true);" eine } reingehört, und am Ende eine } raus.
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

hmm das scheint zu funktionieren, danke! :D
Danke, Adventuretreff! <3
Antworten