Ein Objekt nur einmal nehmen und anderes Problem
-
- Verpackungs-Wegwerfer
- Beiträge: 61
- Registriert: 30.06.2005, 15:22
Ein Objekt nur einmal nehmen und anderes Problem
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
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
-
- 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
VariablenAdventure-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.
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
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
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.
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
-
- Verpackungs-Wegwerfer
- Beiträge: 61
- Registriert: 30.06.2005, 15:22
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
- Floyd
- Logik-Lord
- Beiträge: 1088
- Registriert: 14.03.2004, 19:59
Nochmal zu dem "Besser nicht" Problem:
Das script, das bei "Any click" ausgeführt wird, müsste (von der Form her) etwa so aussehen:
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 .
MfG FLoyd
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 ();
edit: Vor das erste if kommt natürlich kein else .
MfG FLoyd
Der verschwundene Husky - ein 2D Point&Click Adventure
Einen schönen Orbit, Bürger!
Einen schönen Orbit, Bürger!
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.
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.
- Kate
- Hobby-Archäologe
- Beiträge: 173
- Registriert: 13.07.2005, 10:52
- Wohnort: Springe
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
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
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
Wer klaut da meine Scripts?
Würde aber empfehlen, das Script immer mit MovePlayer() anzufangen, d.h. so wie hier:
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
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Ok soweit so gut. Habe jetzt folgenden eingebaut
Wenn ich jetzt aber ein zweites mal die schublade anschauen will passiert gar nichts.
Was ist daran falsch?
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.");
}
}
}
}
Was ist daran falsch?
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
Die fette Zeile ergibt immer wahr, das wurde ja schon vorher geprüft. Eine kleine Änderung: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.");
}
}
}
}
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.");
}
}
}
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
Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.
Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet