Ein Objekt nur einmal nehmen und anderes Problem

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Adventure-Freak
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 61
Registriert: 30.06.2005, 15:22

Ein Objekt nur einmal nehmen und anderes Problem

Beitrag von Adventure-Freak »

Hi!

Ich habe mir das MMM-Starterpack mit Bernards Haus gezogen und gleichmal ein wenig gebastelt. Zu einer Sache habe ich eine Frage:
Ich will in einer Schublade etwas herausnehmen (bei Schaue an), wenn ich es aber mehrmals mache, kommt immer wieder die selbe Aktion. Wie kann ich das so einstellen, dass ab der 2. Betätigung (Schaue an) immer "Leer." oder so kommt. Mit Variablen habe ich es schon probiert, aber die werden bei jeder Betätigung wieder zurückgesetzt.

Und eine andere Frage:
Wenn ich ein Objekt mit dem Computer benutzen will, kommt zwar die normale Aktion (es kommt Text), aber am Ende sagt er immer "Besser nicht."
Wie kann ich das ausstellen?

Danke und sorry für die wirklich simplen Fragen, aber ich bin ein Anfänger ;)
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Re: Ein Objekt nur einmal nehmen und anderes Problem

Beitrag von [ZENSIERT] »

Adventure-Freak hat geschrieben:Ich habe mir das MMM-Starterpack mit Bernards Haus gezogen und gleichmal ein wenig gebastelt. Zu einer Sache habe ich eine Frage:
Ich will in einer Schublade etwas herausnehmen (bei Schaue an), wenn ich es aber mehrmals mache, kommt immer wieder die selbe Aktion. Wie kann ich das so einstellen, dass ab der 2. Betätigung (Schaue an) immer "Leer." oder so kommt. Mit Variablen habe ich es schon probiert, aber die werden bei jeder Betätigung wieder zurückgesetzt.
Variablen ;)

Anderes kann ich mir nícht erklären...
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Die Variablen werden zurückgesetzt, weil sie lokal sind, d.h. sie werden in der Funktion erschaffen, auf Null gesetzt und verschwinden am Ende wieder.

Du verwendest am Besten entweder die GlobalInts von AGS, oder Du deklarierst eine Variable außerhalb jeder Funktion.

Mit dem {}-Button im Roomeditor kannst Du das vollständige Skript eines Raumes sehen.
Schreib Dein int schublade_angeschaut=0; einfach vor die erste Funktion.
Jetzt hast Du auf diese Variable von fast überall (innerhalb des Raumes) Zugriff, außerdem bleibt ihr Wert erhalten.

Das "Besser nicht"-Problem liegt wahrscheinlich an falsch gesetzen geschweiften Klammern und if-elses.
In der Any-click-interaction des Computers wird am Ende fälschlicherweise Unhandled_Event(); aufgerufen, diese Routine, die sich im global script befindet, lässt den Spieler im Falle einer nicht vorhergesehen Interaktion die Standardsätze wie "Nett." usw. sagen. "Besser nicht" sagt der Spieler, wenn "Benutze" verwendet wurde.
Wenn Du es nicht hinkriegst, poste einfach das Any-click-script.
Use gopher repellent on funny little man
Adventure-Freak
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 61
Registriert: 30.06.2005, 15:22

Beitrag von Adventure-Freak »

Danke für die Antworten!

Die Probleme habe ich gelöst, mit Globalen Variablen und der Rausnahme von "else Unhandled;" ;)

Vielleicht folgt auch bald eine Episode von mir, mal sehen was ich mir so einfallen lasse.

Danke nochmal!
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Würde mich freuen. Ich spiele alle neuen ;)
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Adventure-Freak hat geschrieben:der Rausnahme von "else Unhandled;" ;)
Ganz rausnehmen würde ich es nicht, es hat durchaus seinen Sinn. Es sollte aber halt nur aufgerufen werden, wenn z.B. nicht das vorhergesehene Objekt benutzt wurde.
Use gopher repellent on funny little man
Benutzeravatar
Floyd
Logik-Lord
Logik-Lord
Beiträge: 1088
Registriert: 14.03.2004, 19:59

Beitrag von Floyd »

Nochmal zu dem "Besser nicht" Problem:
Das script, das bei "Any click" ausgeführt wird, müsste (von der Form her) etwa so aussehen:

Code: Alles auswählen

  if (UsedAction (A_WALK_TO)){
  }

  else if (UsedAction (A_LOOK_AT)){
  }

  else if (UsedAction (A_PICK_UP)){
  }

  else if (UsedAction (A_USE)){
  }

  else Unhandled ();
    
Bei deinem script fehlt vermutlich irgendwo das else vor "if (UsedAction...". Durchsuche einfach dein script nach diesem Fehler, danach geht es garantiert wieder.
edit: Vor das erste if kommt natürlich kein else :wink: .
MfG FLoyd
Sandy

Beitrag von Sandy »

Habe auch ein Problem damit.

Ich will aus einer Schublade was bekommen wenn ich "Schaue an Schublade" klicke, aber das funktioniert nicht. Ich muss dann immer erst "Nimm Schublade" machen damit er das aus der Schublade nimmt.

Wenn ich es aus der Schublade nehme und wieder "Schaue an Schublade" mache kommt immer wieder der gleiche Text wie vorher, aber nicht "Leer".

Habe mir zwar das andere durchgelesen, aber ich verstehe das mit den Varibalen nicht.
Benutzeravatar
Kate
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 173
Registriert: 13.07.2005, 10:52
Wohnort: Springe

Beitrag von Kate »

if (UsedAction(A_LOOK_AT)){ angucken / oder else if (je nach dem)
if (MoveCharacter(CHARID,123,145)){ gehen
FaceLocation(CHARID, 123,144); in welche Richtung er schaut
if (schublade == 0){ falls was drin ist
DisplaySpeech(CHARID,"Oh, ein Taschenrechner!");
AddInventory(34); nehmen
schublade = 1; jetzt ist nichts mehr drin
}
else{ falls nichts drin ist
DisplaySpeech(CHARID,"Leer.");
}
}
}

und in das Roomscript(unter Settings: {}) schreibst du ganz oben unter // room script file :
int schublade;

Bei 0 ist sie voll, bei 1 leer
GRRRRR AAARGGGHH
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Wer klaut da meine Scripts? :D

Würde aber empfehlen, das Script immer mit MovePlayer() anzufangen, d.h. so wie hier:

Code: Alles auswählen

if(MovePlayer(205, 129)) {
  FaceDirection(GetPlayerCharacter(),DIR_UP);
  if(UsedAction(A_LOOK_AT)) {
    DisplaySpeech(GetPlayerCharacter(),"Fred Edisons \"Grüns Essen\"");  
  }
  else if(UsedAction(A_PICK_UP)) DisplaySpeech(GetPlayerCharacter(), "Da hängt es ganz gut");
  else Unhandled();
  }
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Sandy

Beitrag von Sandy »

Ok soweit so gut. Habe jetzt folgenden eingebaut

Code: Alles auswählen

else if(UsedAction(A_LOOK_AT)) {
if(MovePlayer(120, 129)) { 
FaceDirection(GetPlayerCharacter(),DIR_UP); 
if (schublade == 0){
if(UsedAction(A_LOOK_AT)) {
DisplaySpeech(GetPlayerCharacter(), "Mein Portemonnaie, das sollte ich mitnehmen."); 
AddInventory(1);
schublade = 1;
} 
else{ 
DisplaySpeech(GetPlayerCharacter (),"Leer."); 
} 
} 
}
}
Wenn ich jetzt aber ein zweites mal die schublade anschauen will passiert gar nichts.

Was ist daran falsch?
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Sandy hat geschrieben:Ok soweit so gut. Habe jetzt folgenden eingebaut

else if(UsedAction(A_LOOK_AT)) {
if(MovePlayer(120, 129)) {
FaceDirection(GetPlayerCharacter(),DIR_UP);
if (schublade == 0){
if(UsedAction(A_LOOK_AT)) {
DisplaySpeech(GetPlayerCharacter(), "Mein Portemonnaie, das sollte ich mitnehmen.");
AddInventory(1);
schublade = 1;
}
else{
DisplaySpeech(GetPlayerCharacter (),"Leer.");
}
}
}
}
Die fette Zeile ergibt immer wahr, das wurde ja schon vorher geprüft. Eine kleine Änderung:

Code: Alles auswählen

else if(UsedAction(A_LOOK_AT)) {
if(MovePlayer(120, 129)) { 
FaceDirection(GetPlayerCharacter(),DIR_UP); 
if(!schublade) {
DisplaySpeech(GetPlayerCharacter(), "Mein Portemonnaie, das sollte ich mitnehmen."); 
AddInventory(1);
schublade = 1;
} 
else{ 
DisplaySpeech(GetPlayerCharacter (),"Leer."); 
} 
} 
}
Bitte :D
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Sandy

Beitrag von Sandy »

Danke, die Zeile habe ich wohl vergessen zu löschen.
Antworten