Objekte anschauen
- leChuck93
- Verpackungs-Wegwerfer
- Beiträge: 55
- Registriert: 13.05.2006, 18:01
Objekte anschauen
ich hab mal ne frage:
wenn der player charakter ein hotspot oder objekt anschaut und einen gegenstand erhält und dann danach den hotspot oder das objekt noch einmal anschaut soll er etwas anderes sagen
weiß jemand dazu einen script?
danke im voraus
wenn der player charakter ein hotspot oder objekt anschaut und einen gegenstand erhält und dann danach den hotspot oder das objekt noch einmal anschaut soll er etwas anderes sagen
weiß jemand dazu einen script?
danke im voraus
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Anfang des room script:
Look at kiste-RunScript:
Wichtig ist jetzt, dass Du diesen Code nicht blind abschreibst, sondern kapierst, was er tut.
Das Konzept von Variablen ist sehr, sehr einfach, trotzdem haben viele Leute damit Probleme. Also wenn Du Dir nicht 100%-ig sicher bist, warum ich das so gelöst habe, frag bitte nochmal nach.
Code: Alles auswählen
int kiste_angeschaut;
Code: Alles auswählen
if (kiste_angeschaut==0) {
player.Say("Da ist etwas drin!");
player.Say("Ein Ball.");
player.AddInventory(iBall);
kiste_angeschaut=1;
}
else {
player.Say("Die Kiste ist jetzt leer.");
}
Das Konzept von Variablen ist sehr, sehr einfach, trotzdem haben viele Leute damit Probleme. Also wenn Du Dir nicht 100%-ig sicher bist, warum ich das so gelöst habe, frag bitte nochmal nach.
Use gopher repellent on funny little man
- Floyd
- Logik-Lord
- Beiträge: 1088
- Registriert: 14.03.2004, 19:59
Was genau ist denn dein Problem? Weißt du nicht, wo genau der Code hin soll, oder verstehst du die Syntax nicht?
Der verschwundene Husky - ein 2D Point&Click Adventure
Einen schönen Orbit, Bürger!
Einen schönen Orbit, Bürger!
- Sinitrena
- Tastatursteuerer
- Beiträge: 678
- Registriert: 08.05.2004, 01:01
- Wohnort: Frankfurt
- Kontaktdaten:
Mir ist zwar auch nicht ganz klar was daran schwer zu verstehen ist, aber ich versuche das mal in möglichst vielen Einzelheiten (wahrscheinlich werden das jetzt zu viele) zu erklären:
1. Das room script:
Das room script ist der Teil des Scripts, der sich auf den einzelnen Raum bezieht, also room1.crm, room2.crm, usw; im Gegensatz dazu steht das global Script, dass sich auf das ganze Spiel, also alle Räume, Charaktere, usw bezieht. Da die Aktion in einem bestimmten Raum stattfinden soll, bemühen wir hier das room Script
int kiste_angeschaut; wird an den Anfang des room script geschrieben, weil es sich auf den ganzen Raum bezieht und nicht nur auf eine einzelne Funktion (oder anders ausgedrückt: wenn es keinen sehr guten Grund gibt, werden ints oder Strings immer am Anfang eines Scripts (egal ob room oder global bestimmt)
2. ein int (auch bekannt als Variable)
Ein int ist etwas, worin man einen Wert wie 1, 2, 3, usw speichern kann, im Gegensatz dazu steht ein String in dem man einen Text speichert. Mit ints kann man auch rechnen, z.B.:
int a=3;
in b=4;
int c;
c=a+b;
Man kann ints auch in Strings oder Strings in ints verwandeln, aber das führt jetzt zu weit. "kiste_angeschaut" ist nur ein Name, im Prinzip kannst du alles nehmen (es gibt glaub ich ein paar Einschränkungen was Sonderzeichen betrifft, aber das dürfte nie zu einem Problem werden - korrigiert mich, wenn ich mich irre
)
3. Das Semicolon (auch Strichpunkt genannt, oder einfach dieses ";" Zeichen)
Nach jeder Script-Zeile muss ein Semicolon gesetzt werden, dass ist damit AGS erkennt, dass dieser Befehl fertig ist (einfach dran denken)
4. Das Look at kiste run script (blöder Name, aber eigentlich eine klare Bezeichnung)
Look at ist die Funktion für etwas anschauen. Wenn du im Room Editor auf Areas gehst und dann auf den Button "Interaction" klickst (natürlich nachdem du den richtigen Hotspot ausgewählt hast), erhältst du eine Liste mit verschiedenen Interaktionen, eine davon müsste look at sein. Dort klickst du drauf und erähltst ein drop-down Menu in dem du run-script auswählst, dann noch auf "edit script" klicken und du landest im script editor (das kennen wir schon, es ist ein Teil des room scripts, aber eben nur ein Teil, damit es für dich übersichtlicher bleibt. - Das gesamte room script erreichst du übrigens über room editor - settings - button mit den eckigen Klammern).
5. Eine if-Funktion:
"if (kiste_angeschaut==0) {" damit fragst du den Wert der Variablen kiste_angeschaut ab. Wenn du eine Variable definierst hat sie zunächst immer den Wert 0. Das doppelte Gleichheitszeichen fragt, ob etwas zutreffend ist, mit einem einfachen Gleichheitszeichen setzt du die Variable auf den entsprechenden Wert. Die eckige Klammer am Ende dieser Zeile meint, dass alles was nun folgt geschehen soll, wenn die if-Abfrage zutrifft, der Spieler soll etwas sagen, usw (die nächsten Zeilen aus khrismucs script überspringe ich) kiste_angeschaut=1; setzt den Wert schließlich auf 1; durch die folgende eckige Klammer wird der if Teil abgeschlossen.
6. else
Das else sagt, dass alles folgende (eckige Klammern) geschehen soll, wenn das if vorher nicht zutrifft, also wenn kiste_angeschaut einen anderen Wert als 0 hat.
Eine kleine Bemerkung am Rande: Man könnte zunächst denken, dass man statt else nochmal if schreiben kann, dass wäre jedoch falsch, da dann der zweite Teil, ebenfalls direkt geschen würde, weil der Wert der Variablen ja zuvor geändert wurde, mit else passiert das nicht.
Alle Klarheiten beseitigt? Gut, wenn du das nächste Mal Probleme hast, stell bitte eine klare Frage. Was hast du vorher nicht kapiert? Ich bin nicht immer so nett und erkläre absolute Grundlagen in allen Einzelheiten.
Grundsätzlich sollte ein Blick in die AGS-Hilfe überaus hilfreich sein. Zu dem Thema empfehlen sich die Kapitel "Script language keywords", "Scripting Tutorial 1" und "2" und natürlich die Beginner FAQ, die du irgendwo im AGS Forum finden kannst (keine Ahnung wo, ich brauch die nicht) Ach, und ich bezweifle, dass dir irgendjemand für etwas derart einfaches ein test game macht, nicht dass das viel Arbeit wäre, aber es scheint einfach so überflüssig.
1. Das room script:
Das room script ist der Teil des Scripts, der sich auf den einzelnen Raum bezieht, also room1.crm, room2.crm, usw; im Gegensatz dazu steht das global Script, dass sich auf das ganze Spiel, also alle Räume, Charaktere, usw bezieht. Da die Aktion in einem bestimmten Raum stattfinden soll, bemühen wir hier das room Script
int kiste_angeschaut; wird an den Anfang des room script geschrieben, weil es sich auf den ganzen Raum bezieht und nicht nur auf eine einzelne Funktion (oder anders ausgedrückt: wenn es keinen sehr guten Grund gibt, werden ints oder Strings immer am Anfang eines Scripts (egal ob room oder global bestimmt)
2. ein int (auch bekannt als Variable)
Ein int ist etwas, worin man einen Wert wie 1, 2, 3, usw speichern kann, im Gegensatz dazu steht ein String in dem man einen Text speichert. Mit ints kann man auch rechnen, z.B.:
int a=3;
in b=4;
int c;
c=a+b;
Man kann ints auch in Strings oder Strings in ints verwandeln, aber das führt jetzt zu weit. "kiste_angeschaut" ist nur ein Name, im Prinzip kannst du alles nehmen (es gibt glaub ich ein paar Einschränkungen was Sonderzeichen betrifft, aber das dürfte nie zu einem Problem werden - korrigiert mich, wenn ich mich irre
)
3. Das Semicolon (auch Strichpunkt genannt, oder einfach dieses ";" Zeichen)
Nach jeder Script-Zeile muss ein Semicolon gesetzt werden, dass ist damit AGS erkennt, dass dieser Befehl fertig ist (einfach dran denken)
4. Das Look at kiste run script (blöder Name, aber eigentlich eine klare Bezeichnung)
Look at ist die Funktion für etwas anschauen. Wenn du im Room Editor auf Areas gehst und dann auf den Button "Interaction" klickst (natürlich nachdem du den richtigen Hotspot ausgewählt hast), erhältst du eine Liste mit verschiedenen Interaktionen, eine davon müsste look at sein. Dort klickst du drauf und erähltst ein drop-down Menu in dem du run-script auswählst, dann noch auf "edit script" klicken und du landest im script editor (das kennen wir schon, es ist ein Teil des room scripts, aber eben nur ein Teil, damit es für dich übersichtlicher bleibt. - Das gesamte room script erreichst du übrigens über room editor - settings - button mit den eckigen Klammern).
5. Eine if-Funktion:
"if (kiste_angeschaut==0) {" damit fragst du den Wert der Variablen kiste_angeschaut ab. Wenn du eine Variable definierst hat sie zunächst immer den Wert 0. Das doppelte Gleichheitszeichen fragt, ob etwas zutreffend ist, mit einem einfachen Gleichheitszeichen setzt du die Variable auf den entsprechenden Wert. Die eckige Klammer am Ende dieser Zeile meint, dass alles was nun folgt geschehen soll, wenn die if-Abfrage zutrifft, der Spieler soll etwas sagen, usw (die nächsten Zeilen aus khrismucs script überspringe ich) kiste_angeschaut=1; setzt den Wert schließlich auf 1; durch die folgende eckige Klammer wird der if Teil abgeschlossen.
6. else
Das else sagt, dass alles folgende (eckige Klammern) geschehen soll, wenn das if vorher nicht zutrifft, also wenn kiste_angeschaut einen anderen Wert als 0 hat.
Eine kleine Bemerkung am Rande: Man könnte zunächst denken, dass man statt else nochmal if schreiben kann, dass wäre jedoch falsch, da dann der zweite Teil, ebenfalls direkt geschen würde, weil der Wert der Variablen ja zuvor geändert wurde, mit else passiert das nicht.
Alle Klarheiten beseitigt? Gut, wenn du das nächste Mal Probleme hast, stell bitte eine klare Frage. Was hast du vorher nicht kapiert? Ich bin nicht immer so nett und erkläre absolute Grundlagen in allen Einzelheiten.
Grundsätzlich sollte ein Blick in die AGS-Hilfe überaus hilfreich sein. Zu dem Thema empfehlen sich die Kapitel "Script language keywords", "Scripting Tutorial 1" und "2" und natürlich die Beginner FAQ, die du irgendwo im AGS Forum finden kannst (keine Ahnung wo, ich brauch die nicht) Ach, und ich bezweifle, dass dir irgendjemand für etwas derart einfaches ein test game macht, nicht dass das viel Arbeit wäre, aber es scheint einfach so überflüssig.
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
{} werden geschweifte Klammern genannt, nur um leChuck93 nicht zu verwirren
Da es eine Arbeit von nur 10 Minuten war und vielleicht auch anderen Anfängern nützt, hab ich tatsächlich ein "test game" gemacht.
http://www.2dadventure.com/ags/kiste2.zip
lechuck93, schau Dir auf jeden Fall das room script genau an, bzw. die interactions des Kisten-hotspots.
EDIT: Link korrigiert
Zur Erläuterung:
1. Wenn man eine Variable ohne Wertangabe deklariert, ist sie 0 (bzw. false bzw. ""). Wenn ich also nur int ball_genommen; schreibe, ist diese Variable 0. Schreibe ich hingegen int ball_genommen=0; ins room script, wird die Variable immer wieder auf 0 gesetzt, wenn ich den Raum neu betrete.
2. Bei einer if-Anweisung wird der Teil in Klammern "Bedingung" genannt. Diese Bedingung ist im Normalfall eine mathematische Gleichung oder Ungleichung. Es kann aber auch nur eine einzelne Variable sein, dann gilt alles ungleich 0 bzw. false als wahr.
D.h. if (ball_genommen) reicht in diesem Fall, ball_genommen hat anfangs den Wert 0, somit ist die Bedingung falsch. Nachdem man den Ball genommen hat, wird ball_genommen auf eins gesetzt, das entspricht einer wahren Bedingung.
Um alle Klarheiten zu beseitigen: if (a) ist das Gleiche wie if (a!=0).
(Es ist nicht das Gleiche wie if (a==1)!)
Da es eine Arbeit von nur 10 Minuten war und vielleicht auch anderen Anfängern nützt, hab ich tatsächlich ein "test game" gemacht.
http://www.2dadventure.com/ags/kiste2.zip
lechuck93, schau Dir auf jeden Fall das room script genau an, bzw. die interactions des Kisten-hotspots.
EDIT: Link korrigiert
Zur Erläuterung:
1. Wenn man eine Variable ohne Wertangabe deklariert, ist sie 0 (bzw. false bzw. ""). Wenn ich also nur int ball_genommen; schreibe, ist diese Variable 0. Schreibe ich hingegen int ball_genommen=0; ins room script, wird die Variable immer wieder auf 0 gesetzt, wenn ich den Raum neu betrete.
2. Bei einer if-Anweisung wird der Teil in Klammern "Bedingung" genannt. Diese Bedingung ist im Normalfall eine mathematische Gleichung oder Ungleichung. Es kann aber auch nur eine einzelne Variable sein, dann gilt alles ungleich 0 bzw. false als wahr.
D.h. if (ball_genommen) reicht in diesem Fall, ball_genommen hat anfangs den Wert 0, somit ist die Bedingung falsch. Nachdem man den Ball genommen hat, wird ball_genommen auf eins gesetzt, das entspricht einer wahren Bedingung.
Um alle Klarheiten zu beseitigen: if (a) ist das Gleiche wie if (a!=0).
(Es ist nicht das Gleiche wie if (a==1)!)
Zuletzt geändert von KhrisMUC am 06.11.2006, 22:40, insgesamt 1-mal geändert.
Use gopher repellent on funny little man
- Sinitrena
- Tastatursteuerer
- Beiträge: 678
- Registriert: 08.05.2004, 01:01
- Wohnort: Frankfurt
- Kontaktdaten:
khrismuc hat natürlich recht:{} werden geschweifte Klammern genannt, nur um leChuck93 nicht zu verwirren
{ } geschweifte Klammern
[ ] eckige Klammern
Lasst euch also nicht verwirren, ich hab das oben ziemlich schnell getippt...
Wer noch mehr Fehler findet darf sie mir zurückgeben...
Ich werd mir das Test Game mal anschauen
Edit: Sehr informativ =D> =D> =D>
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"