Nach Codeeingabe auf Keypad soll Tür öffnen.
- DernetteEddy
- Süßwasserpirat
- Beiträge: 298
- Registriert: 30.06.2004, 00:31
Nach Codeeingabe auf Keypad soll Tür öffnen.
Hi,
ich möchte gerne folgende Animation realisieren, weiß aber nicht wirklich wie das gehen soll:
Ich habe wie bei Maniac Mansion ein Keypad auf dem man einen bestimmten Code eingeben muss damit sich eine Tür öffnet. Wenn man einen falschen Code eingibt soll nichts passieren. Der Code ist vierstellig und lautet z.B. 1234
Mach ich das über eine GUI oder wie? Super wäre, wenn einer schonmal sowas gemacht hat und mir das Script zukommen lassen könnte.
Gruß
Eddy
ich möchte gerne folgende Animation realisieren, weiß aber nicht wirklich wie das gehen soll:
Ich habe wie bei Maniac Mansion ein Keypad auf dem man einen bestimmten Code eingeben muss damit sich eine Tür öffnet. Wenn man einen falschen Code eingibt soll nichts passieren. Der Code ist vierstellig und lautet z.B. 1234
Mach ich das über eine GUI oder wie? Super wäre, wenn einer schonmal sowas gemacht hat und mir das Script zukommen lassen könnte.
Gruß
Eddy
Mit * markierte Felder sind erforderlich
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
Ja, am besten wäre ein GUI und ein String in dem die Eingabe gespeichert werden kann. Das Script dazu ist recht simpel:
Nicht getestet
Meine neueste Episode enthält ein solches Script mit Hotspots. Das Script ist allerdings so unübersehbar, dass ich dir das nicht antun will
Code: Alles auswählen
string temp;
GetGlobalString(20, temp);
if(interface == CONTROL) {
if(button == 0) StrCat(temp, "1");
...
// nach allen button-Abfragen
if(StrLen(temp) == 4) {
if(!StrComp(temp, "0123")) DisplaySpeech(EGO, "Ich habe 0123 eingetippt");
else DisplaySpeech(EGO, "Das bringt mir zwar nichts, aber es ist unterhaltsam");
SetGlobalString(20, "");
}
else SetGlobalString(20, temp);
}
Meine neueste Episode enthält ein solches Script mit Hotspots. Das Script ist allerdings so unübersehbar, dass ich dir das nicht antun will
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
- DernetteEddy
- Süßwasserpirat
- Beiträge: 298
- Registriert: 30.06.2004, 00:31
Mach ruhig!!!
Ich kenn mich im GUI Bereich wirklich nicht aus, da ich selber nur von anderen übernommen und nie selber was gemacht habe.
Hotspotsachen sind für mich einfacher zu verstehen. Zur Not über PM. Wenn's nicht geht, muss ich mir wohl oder übel die GUI templates durchsehen. *buhuuu*
Ich kenn mich im GUI Bereich wirklich nicht aus, da ich selber nur von anderen übernommen und nie selber was gemacht habe.
Hotspotsachen sind für mich einfacher zu verstehen. Zur Not über PM. Wenn's nicht geht, muss ich mir wohl oder übel die GUI templates durchsehen. *buhuuu*
Mit * markierte Felder sind erforderlich
-
- Adventure-Gott
- Beiträge: 4575
- Registriert: 13.07.2004, 14:04
- Wohnort: Da wo muss
- Kontaktdaten:
Meine Güte
Mein Script ist noch komplizierter, das fragt über on_mouse_click den geklicken Hotspot ab
Mein Script ist noch komplizierter, das fragt über on_mouse_click den geklicken Hotspot ab
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
- Floyd
- Logik-Lord
- Beiträge: 1088
- Registriert: 14.03.2004, 19:59
...
Also ich habe es folgendermaßen gemacht:
Jede Taste (also bei dir wahrscheinlich 0-9) ist ein Objekt/Hotspot.
Beim Klick auf dieses/diesen wird ein script aufgerufen (geht natürlich auch mit rauminternen Variablen):
Zur Erklärung:
Variable 5 speichert die Anzahl der bereits eingegebenen Zahlen und prüft diese auch wieder ab, sodass nicht mehr als 4 eingegeben werden können.
Die anderen 4 Variablen stehen für die Stelle, an der die Zahl auftaucht.
Für x setzt du die Zahl ein, z.B. ist bei SetGlobalInt ( 3,8 ); die 3te Stelle deiner Zahl eine 8.
Wenn der Spieler nun auf "OK" klickt, schreibst du folgendes in ein script:
Du benötigst natürlich noch einen Button "Zurücksetzen", der alle Variablen wieder auf 0 setzt.
Die grafische Ausgabe dürfte ja kein Problem sein, oder?
MfG Floyd
Jede Taste (also bei dir wahrscheinlich 0-9) ist ein Objekt/Hotspot.
Beim Klick auf dieses/diesen wird ein script aufgerufen (geht natürlich auch mit rauminternen Variablen):
Code: Alles auswählen
if (GetGlobalInt (5) == 0) {
SetGlobalInt (1,x);
SetGlobalInt (5,1);
}
else if (GetGlobalInt (5) == 1) {
SetGlobalInt (2,x);
SetGlobalInt (5,2);
}
else if (GetGlobalInt (5) == 2) {
SetGlobalInt (3,x);
SetGlobalInt (5,3);
}
else if (GetGlobalInt (5) == 3) {
SetGlobalInt (4,x);
SetGlobalInt (5,4);
}
else if (GetGlobalInt (5) == 4) {
}
Variable 5 speichert die Anzahl der bereits eingegebenen Zahlen und prüft diese auch wieder ab, sodass nicht mehr als 4 eingegeben werden können.
Die anderen 4 Variablen stehen für die Stelle, an der die Zahl auftaucht.
Für x setzt du die Zahl ein, z.B. ist bei SetGlobalInt ( 3,8 ); die 3te Stelle deiner Zahl eine 8.
Wenn der Spieler nun auf "OK" klickt, schreibst du folgendes in ein script:
Wenn an der ersten Stelle 1, an der zweiten 2 usw. steht und die Zahl aus 4 Stellen besteht ( (5) = 4 ), passiert etwas, ansonsten nicht.if ((GetGlobalInt (1) == 1) && (GetGlobalInt (2) == 2) && (GetGlobalInt (3) == 3) && (GetGlobalInt (4) == 4) && (GetGlobalInt (5) == 4)) {
Dein Code hier;
}
else {
}
Du benötigst natürlich noch einen Button "Zurücksetzen", der alle Variablen wieder auf 0 setzt.
Die grafische Ausgabe dürfte ja kein Problem sein, oder?
MfG Floyd
Der verschwundene Husky - ein 2D Point&Click Adventure
Einen schönen Orbit, Bürger!
Einen schönen Orbit, Bürger!
- DernetteEddy
- Süßwasserpirat
- Beiträge: 298
- Registriert: 30.06.2004, 00:31
Super danke Floyd hat geklappt. Grafisch hatte ich das schon fertig gehabt.
Für die, die es auch vor haben sollten kann ich noch sagen, dass für jeden Button das Script eingefügt werden muss. Die Buttons die eine Zahl in dem Code darstellen müssen dann an der Stelle an der sie auftauchen eingetragen werden.z.b:
Wenn der Code 6789 ist muss man bei Button 6 das Script so aussehen:
Bei der 7 dann die sieben hier einsetzen:
bei der 8 und 9 natürlich dann jeweils einen tiefer eintragen. Alle andeen Buttons die nicht im Code vorkommen werden mit 0 eingetragen.
So hab ich es gemacht. Geht bestimmt auch einfacher. Danke nochmal an Floyd.
Gruß
Eddy
Für die, die es auch vor haben sollten kann ich noch sagen, dass für jeden Button das Script eingefügt werden muss. Die Buttons die eine Zahl in dem Code darstellen müssen dann an der Stelle an der sie auftauchen eingetragen werden.z.b:
Wenn der Code 6789 ist muss man bei Button 6 das Script so aussehen:
Code: Alles auswählen
if (GetGlobalInt (5) == 0) {
SetGlobalInt (1,6); // die erste zahl des codes ist 6
SetGlobalInt (5,1);
}
else if (GetGlobalInt (5) == 1) {
SetGlobalInt (2,0);
SetGlobalInt (5,2);
}
else if (GetGlobalInt (5) == 2) {
SetGlobalInt (3,0);
SetGlobalInt (5,3);
}
else if (GetGlobalInt (5) == 3) {
SetGlobalInt (4,0);
SetGlobalInt (5,4);
}
else if (GetGlobalInt (5) == 4) {
}
Code: Alles auswählen
if (GetGlobalInt (5) == 0) {
SetGlobalInt (1,0);
SetGlobalInt (5,1);
}
else if (GetGlobalInt (5) == 1) {
SetGlobalInt (2,7);
SetGlobalInt (5,2);
}
else if (GetGlobalInt (5) == 2) {
SetGlobalInt (3,0);
SetGlobalInt (5,3);
}
else if (GetGlobalInt (5) == 3) {
SetGlobalInt (4,0);
SetGlobalInt (5,4);
}
else if (GetGlobalInt (5) == 4) {
}
So hab ich es gemacht. Geht bestimmt auch einfacher. Danke nochmal an Floyd.
Gruß
Eddy
Mit * markierte Felder sind erforderlich
- Floyd
- Logik-Lord
- Beiträge: 1088
- Registriert: 14.03.2004, 19:59
...
So geht es natürlich auch. Allerdings kannst du x auch genauso gut durch die Zahl selbst (also hier 7) ersetzen und musst so nicht immer sehen, dass du die Zahl an der richtigen Stelle einfügst. Aber das ist nun wirklich Geschmackssache . MfG Floyd
Der verschwundene Husky - ein 2D Point&Click Adventure
Einen schönen Orbit, Bürger!
Einen schönen Orbit, Bürger!
- DernetteEddy
- Süßwasserpirat
- Beiträge: 298
- Registriert: 30.06.2004, 00:31
- Floyd
- Logik-Lord
- Beiträge: 1088
- Registriert: 14.03.2004, 19:59
Es gibt 2 Möglichkeiten:
MfG Floyd
Code: Alles auswählen
if (GetGlobalInt (5) == 0) {
SetGlobalInt (1,0);
SetGlobalInt (5,1);
}
else if (GetGlobalInt (5) == 1) {
SetGlobalInt (2,7 );
SetGlobalInt (5,2);
}
else if (GetGlobalInt (5) == 2) {
SetGlobalInt (3,0 );
SetGlobalInt (5,3);
}
else if (GetGlobalInt (5) == 3) {
SetGlobalInt (4,0 );
SetGlobalInt (5,4);
}
else if (GetGlobalInt (5) == 4) {
}
Code: Alles auswählen
if (GetGlobalInt (5) == 0) {
SetGlobalInt (1,7 );
SetGlobalInt (5,1);
}
else if (GetGlobalInt (5) == 1) {
SetGlobalInt (2,7 );
SetGlobalInt (5,2);
}
else if (GetGlobalInt (5) == 2) {
SetGlobalInt (3,7 );
SetGlobalInt (5,3);
}
else if (GetGlobalInt (5) == 3) {
SetGlobalInt (4,7 );
SetGlobalInt (5,4);
}
else if (GetGlobalInt (5) == 4) {
}
Der verschwundene Husky - ein 2D Point&Click Adventure
Einen schönen Orbit, Bürger!
Einen schönen Orbit, Bürger!
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Es geht aber wirklich vieeeel einfacher:
Ein Klick auf den Button (ob GUI oder hotspot is total egal) ruft eine funktion auf und übergibt ihr die Taste: 0-9 is klar, -1 für enter.
Dann braucht man noch eine globale variable für den code, meinetwegen int code=0;.
Ein Klick auf den Button (ob GUI oder hotspot is total egal) ruft eine funktion auf und übergibt ihr die Taste: 0-9 is klar, -1 für enter.
Dann braucht man noch eine globale variable für den code, meinetwegen int code=0;.
Code: Alles auswählen
function key_pressed(int a) {
if (a==-1) {
if (code>999) {
if (code==1234) {
// Tür öffnen, etc.
}
else code=0; // falscher Code, zurücksetzen
}
else PlaySound(x); // Fehlerton, noch keine 4 Ziffern eingegeben
}
else {
if (code>999) // 5. Zahl gedrückt, 1. Zahl wird abgeschnitten
code=code-(code/1000)*1000;
code=code*10+a; // gedrückte Zahl dranhängen
}
// grafische Befehle, um GUI/Screen zu aktualisieren
}
Use gopher repellent on funny little man
- DernetteEddy
- Süßwasserpirat
- Beiträge: 298
- Registriert: 30.06.2004, 00:31
- Dusty D.
- Hobby-Archäologe
- Beiträge: 153
- Registriert: 18.04.2004, 20:03
- Kontaktdaten:
In unserem Spiel gibt es eine Aufzugsteuerung, da geht das Folgendermaßen:
Jeder Knopf hat einen eigenen Hotspot. Im Interact-Hotspot-Script steht
wobei im String "etage" zunächst die Eingabe und in "position" die Anzahl der gedrückten Tasten gespeichert wird. Statt "x" wird die jeweilige Taste (0-9) in den String eingefügt. Im repeatedly-execute des Raums steht:
Wenn 3 Stellen eingegeben wurden, steht in GlobalInt(11) die eingegebene Zahl und kann ausgewertet werden. Da unsere Steuerung auch negative Zahlen verarbeiten kann, wurde das Negativ-Flag fällig, das gesetzt wird, wenn man den entsprechenden Knopf drückt. Außerdem kann man weitere Spielereien leicht einbauen, wie zB. einen "clear enter" Button usw.
Jeder Knopf hat einen eigenen Hotspot. Im Interact-Hotspot-Script steht
Code: Alles auswählen
StrCat(etage,"x");
position=++;
Code: Alles auswählen
if (position==3) {
ziel=StringToInt(etage);
if (negativ==1) ziel=-1*ziel;
SetGlobalInt(11,ziel);