Bettler soll immer was anderes sagen...
- Find dA real
- Hobby-Archäologe
- Beiträge: 233
- Registriert: 28.12.2005, 00:16
Bettler soll immer was anderes sagen...
In meinem Spiel gibt es einen Bettler - jedesmal wenn man auf einem hotSpot vor ihm tritt soll er was anderes sagen also genau genommen wir die szene etwa so:
Man tritt das erste mal drauf "hey hast du ne mark?".
Dann sagt er nicht mehr bis man nochmal den raum betritt bzw. nochmal den hotspot überschreitet.
Dann sagt er "hey gib mir ne mark"
Das ganze sollte 3 mal sein beim dritten mal ist er halt eingeschnappt...
wie geht das?!
Nutze AGS 2.71
Man tritt das erste mal drauf "hey hast du ne mark?".
Dann sagt er nicht mehr bis man nochmal den raum betritt bzw. nochmal den hotspot überschreitet.
Dann sagt er "hey gib mir ne mark"
Das ganze sollte 3 mal sein beim dritten mal ist er halt eingeschnappt...
wie geht das?!
Nutze AGS 2.71
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Zwei Möglichkeiten: SSH's MultiResponse-Module, such einfach danach im englischen AGS-Forum.
Oder du skriptest es selbst:
Füge eine RunScript-Interaction ein, dann öffne das raumskript:
(Jede hinzugefügte RunScript-Interaction generiert eine Funktion im Raumskript, sie wird wahrscheinlich ganz unten sein, such einfach danach, dann füge die fehlenden Zeilen ein.
Nicht einfach diesen kompletten Code ins Raumskript pasten!)
Oder du skriptest es selbst:
Füge eine RunScript-Interaction ein, dann öffne das raumskript:
Code: Alles auswählen
// ausschnitt aus dem raumskript
int antw=0;
#DO NOT EDIT bla
function x() {
// player walks on hotspot x
antw++; // variable um eins erhöhen
if (antw==1) cBettler.SayBackground("Hey, ...");
if (antw==2) cBettler.SayBackground("Hey, ...");
if (antw>=3) cBettler.SayBackground("Jetzt bin ich sauer.");
}
#DO NOT EDIT bla
Nicht einfach diesen kompletten Code ins Raumskript pasten!)
Use gopher repellent on funny little man
- Find dA real
- Hobby-Archäologe
- Beiträge: 233
- Registriert: 28.12.2005, 00:16
Klappt soweit ganz gut, nur das alle 3 antworten direkt hintereinander kommen nicht wenn ich nochmal über den hotspot laufe. Der Hotspot ist ein Punkt auf dem Boden - könnte das Problem sein?!
Code: Alles auswählen
// script for Hotspot 4 (Hotspot 4): Player stands on hotspot
int antw=0;
GUIOff(0);
StopMoving(EGO);
DisableHotspot(4);
antw++; // variable um eins erhöhen
if (antw==1) cHeinz.SayBackground("Halt!");
MoveCharacterBlocking(HEINZ, 271, 130, 1);
cHeinz.Say("Ich brauche Geld - gibt mir Geld");
MoveCharacterBlocking(EGO, 418, 126, 1);
EnableHotspot(4);
GUIOff(1);
if (antw==2) cHeinz.SayBackground("Hey2, ...");
MoveCharacterBlocking(HEINZ, 271, 130, 1);
cHeinz.Say("Gib mir Geld!");
MoveCharacterBlocking(EGO, 418, 126, 1);
EnableHotspot(4);
GUIOff(1);
if (antw>=3) cHeinz.SayBackground("Jetzt bin ich sauer!");
- Rocco
- Adventure-Treff
- Beiträge: 1019
- Registriert: 25.11.2003, 16:20
- Wohnort: Ronville
- Kontaktdaten:
du musst die blöcke einklammer { }
wenn du nur eine anweisung nach dem if hast, brauchst du keine klammern
if(var == 1)
var++;
das funktioniert, aber wenn du hast
if(var == 1)
var++;
player.Say("Hello");
dann wird er immer Hello sagen weil sich das if nur auf das var++; bezieht und danach alles normal ausgeführt wird.
richtigerweise musst du dann klammern benutzen:
if(var == 1)
{
var++;
player.Say("Hello");
}
damits klappt.
wenn du nur eine anweisung nach dem if hast, brauchst du keine klammern
if(var == 1)
var++;
das funktioniert, aber wenn du hast
if(var == 1)
var++;
player.Say("Hello");
dann wird er immer Hello sagen weil sich das if nur auf das var++; bezieht und danach alles normal ausgeführt wird.
richtigerweise musst du dann klammern benutzen:
if(var == 1)
{
var++;
player.Say("Hello");
}
damits klappt.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
@blound:
statt: MoveCharacterBlocking(EGO, 418, 126, 1); (alter code) besser:
player.Walk(418, 126, eBlock);
Du lässt den Spieler vom Hotspot herunterlaufen, damit nicht alle drei Reaktionen hintereinander passieren, oder?
Und warum soll sich Heinz bewegen?
Aber erstmal Folgendes:
Für so etwas sind normalerweise regions gedacht. (Steht auch im Interaction-Fenster: "player stands on hotspot - obsolete, use regions").
Bei regions gibt es nämlich die Interaction "player walks onto region", und diese wird nur einmal ausgeführt, dann nicht mehr, so lange, bis der Spieler aus der region raus- und wieder reinläuft.
"player stands on hotspot" hingegen wird kontinuierlich ausgeführt, während man draufsteht.
Und: Ich hatte extra erklärt, wie Du "int antw=0;" außerhalb der Funktion einfügen kannst.
Wenn Du die Variable innerhalb der Funktion deklarierst, wird sie immer wieder auf 0 gesetzt, auch, wenn Du nur "int antw;" schreiben würdest.
"int antw=0;" muss außerhalb stehen.
statt: MoveCharacterBlocking(EGO, 418, 126, 1); (alter code) besser:
player.Walk(418, 126, eBlock);
Du lässt den Spieler vom Hotspot herunterlaufen, damit nicht alle drei Reaktionen hintereinander passieren, oder?
Und warum soll sich Heinz bewegen?
Aber erstmal Folgendes:
Für so etwas sind normalerweise regions gedacht. (Steht auch im Interaction-Fenster: "player stands on hotspot - obsolete, use regions").
Bei regions gibt es nämlich die Interaction "player walks onto region", und diese wird nur einmal ausgeführt, dann nicht mehr, so lange, bis der Spieler aus der region raus- und wieder reinläuft.
"player stands on hotspot" hingegen wird kontinuierlich ausgeführt, während man draufsteht.
Und: Ich hatte extra erklärt, wie Du "int antw=0;" außerhalb der Funktion einfügen kannst.
Wenn Du die Variable innerhalb der Funktion deklarierst, wird sie immer wieder auf 0 gesetzt, auch, wenn Du nur "int antw;" schreiben würdest.
"int antw=0;" muss außerhalb stehen.
Use gopher repellent on funny little man
- Find dA real
- Hobby-Archäologe
- Beiträge: 233
- Registriert: 28.12.2005, 00:16
Hatte ich ja gemacht (die steht bei mir ganz ganz oben in roomscript).
Mein Code funktioniert jetzt hier ist er für dritte:
Einziges Manko ist das es nur funktioniert solange man den Raum nicht verlässt - es sollte aber auch so sein das wenn man später nochmal da wäre das dann halt immer noch die erste Reaktion rum ist..
Mein Code funktioniert jetzt hier ist er für dritte:
Code: Alles auswählen
// script for Hotspot 4 (Hotspot 4): Player stands on hotspot (obsolete, use Regions)
GUIOff(0);
StopMoving(EGO);
DisableHotspot(4);
antw++; // variable um eins erhöhen
if (antw==1)
{
cHeinz.SayBackground("Halt!");
MoveCharacterBlocking(HEINZ, 271, 130, 1);
cHeinz.Say("Geld! Sofort");
cEgo.Walk(418, 126, eBlock);
EnableHotspot(4);
GUIOn(1);
}
if (antw==2) {
cHeinz.SayBackground("Hey2, ...");
MoveCharacterBlocking(HEINZ, 271, 130, 1);
cHeinz.Say("ich will dein Geld!");
cEgo.Walk(418, 126, eBlock);
EnableHotspot(4);
GUIOff(1);
}
if (antw>=3) {
cHeinz.SayBackground("Jetzt bin ich sauer!");
GUIOn(1);
}
- Sinitrena
- Tastatursteuerer
- Beiträge: 678
- Registriert: 08.05.2004, 01:01
- Wohnort: Frankfurt
- Kontaktdaten:
Das funktioniert doch eigentlich automatisch, zumindest wenn du am Anfang des room script "int antw;" schreibst statt "int antw=0;".Einziges Manko ist das es nur funktioniert solange man den Raum nicht verlässt - es sollte aber auch so sein das wenn man später nochmal da wäre das dann halt immer noch die erste Reaktion rum ist..
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"
- Agent Cat
- Tastatursteuerer
- Beiträge: 614
- Registriert: 30.04.2005, 13:21
- Kontaktdaten:
Man könnte es im Grunde auch ganz einfach machen:
Du setzt vor den Bettler 3 Regions (evtl. gaaaaanz dicht aneinander). Beim Betreten des Raumes deaktivierst du 2 Regions. Die Region,die jetzt noch da ist, löst beim Drauftreten z.B den Kommentar "hey hast du ne mark?" aus. Jetzt wird auch diese Region ausgeschaltet. Dafür schaltet sich jetzt eine der 2 anderen Regions an. Wenn man jetzt auf die neu angeschaltete, nächste Region tritt kommt der Kommenar "hey gib mir ne mark!". Und dann wird eben diese Region ausgeschaltet und die letzte Region widerum angeschaltet, die den letzten Kommentar dann auslöst.
Klingt zwar mächtig nach Kauderwelsch, geht aber in AGS eigentlich schnell und leicht zu machen. Da ich selbst keine Ahnung vom umfangreichen Skripten habe (Variables usw...) umgehe ich Situationen, die eigentlich kompliziertes Geskripte erfordern, meisten auf so eine ähnliche Art.
Du setzt vor den Bettler 3 Regions (evtl. gaaaaanz dicht aneinander). Beim Betreten des Raumes deaktivierst du 2 Regions. Die Region,die jetzt noch da ist, löst beim Drauftreten z.B den Kommentar "hey hast du ne mark?" aus. Jetzt wird auch diese Region ausgeschaltet. Dafür schaltet sich jetzt eine der 2 anderen Regions an. Wenn man jetzt auf die neu angeschaltete, nächste Region tritt kommt der Kommenar "hey gib mir ne mark!". Und dann wird eben diese Region ausgeschaltet und die letzte Region widerum angeschaltet, die den letzten Kommentar dann auslöst.
Klingt zwar mächtig nach Kauderwelsch, geht aber in AGS eigentlich schnell und leicht zu machen. Da ich selbst keine Ahnung vom umfangreichen Skripten habe (Variables usw...) umgehe ich Situationen, die eigentlich kompliziertes Geskripte erfordern, meisten auf so eine ähnliche Art.
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- Find dA real
- Hobby-Archäologe
- Beiträge: 233
- Registriert: 28.12.2005, 00:16
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Gerade erst gesehen...
Ich will nicht AgentCat fertigmachen, er hat immerhin einen gewissen Erfindungsgeist bewiesen, aber seine Methode kommt dem gleich, die Schraube an einer Uhr mit zugeschliffener Nagelfeile und Rohrzange reinzudrehen. Es kann funktionieren, ist aber unsauber, unelegant und fehleranfällig.
Noch dazu ist die alternative Skriptlösung alles andere als kompliziert oder umständlich. Die Benutzung von Variablen ist nun mal unumgänglich für etwas gehobenere Aufgaben, und wer es einmal begriffen hat, der wird es nie wieder anders versuchen.
Und auch an dieser Stelle nochmal: Die Benutzung von Variablen ist einfach. Wirklich. Kein Info-Diplom nötig.
Ich will nicht AgentCat fertigmachen, er hat immerhin einen gewissen Erfindungsgeist bewiesen, aber seine Methode kommt dem gleich, die Schraube an einer Uhr mit zugeschliffener Nagelfeile und Rohrzange reinzudrehen. Es kann funktionieren, ist aber unsauber, unelegant und fehleranfällig.
Noch dazu ist die alternative Skriptlösung alles andere als kompliziert oder umständlich. Die Benutzung von Variablen ist nun mal unumgänglich für etwas gehobenere Aufgaben, und wer es einmal begriffen hat, der wird es nie wieder anders versuchen.
Und auch an dieser Stelle nochmal: Die Benutzung von Variablen ist einfach. Wirklich. Kein Info-Diplom nötig.
Use gopher repellent on funny little man