Mit "Gehe zu" Befehl durch eine Tür gehen, NICHT m
Mit "Gehe zu" Befehl durch eine Tür gehen, NICHT m
Also ich will, das wenn man mit dem Gehe zu Befehl auf ein Objekt klickt, das dann der Raum gewechselt wird. Ich will es aber NICHT per "Player stands on hotspot" machen, also nicht wenn man darauf steht, sondern wenn man einfach mit Gehe zu drauf klickt. Wie kann ich das maken?
Euer Sharal'
Euer Sharal'
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Die folgende Lösung geht erst ab Version 2.6 (glaube ich), weil erst da on_mouse_click im Raum definiert werden kann.
// --- room script ---
// result of GetLocationType
#define LT_HOTSPOT 1
function on_mouse_click(int button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if ((IsGamePaused() == 0) && (button==LEFT) && (GetCursorMode () == MODE_WALK) && (GetLocationType (mouse.x, mouse.y) == LT_HOTSPOT))
{
NewRoom (1);
ClaimEvent ();
}
}
// --- room script ---
// result of GetLocationType
#define LT_HOTSPOT 1
function on_mouse_click(int button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if ((IsGamePaused() == 0) && (button==LEFT) && (GetCursorMode () == MODE_WALK) && (GetLocationType (mouse.x, mouse.y) == LT_HOTSPOT))
{
NewRoom (1);
ClaimEvent ();
}
}
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Solange du keine Version 2.6 hast, funktioniert das Script nicht. Die noch inoffizielle 2.6 kannst du hier herunterladen, sie soll in einigen Tagen auf der Website zum Download angeboten werden, wenn keine Fehler bekannt werden. Eigentlich sollte sie soweit fehlerfrei sein; allerdings gebe ich keine Garantie. Also vorher eine Sicherungskopie deines Spiels machen.
Wenn du die 2.6 installiert hast und dein Spiel geladen, dann öffne das Script des betreffenden Raumes und kopiere das room script hinein. Nun wird bei jedem Hotspot der NewRoom-Befehl ausgeführt. Es wäre wohl sinnvoller GetLocationName und nicht GetLocationType für die Identifikation des Hotspots zu verwenden, wenn es mehrere Hotspots gibt.
Die im room-script definierte on_mouse_click-Funktion hat Vorrang vor der im global script. Mit ClaimEvent wird verhindert, dass zusätzlich die im global script ausgeführt wird.
Wenn du die 2.6 installiert hast und dein Spiel geladen, dann öffne das Script des betreffenden Raumes und kopiere das room script hinein. Nun wird bei jedem Hotspot der NewRoom-Befehl ausgeführt. Es wäre wohl sinnvoller GetLocationName und nicht GetLocationType für die Identifikation des Hotspots zu verwenden, wenn es mehrere Hotspots gibt.
Die im room-script definierte on_mouse_click-Funktion hat Vorrang vor der im global script. Mit ClaimEvent wird verhindert, dass zusätzlich die im global script ausgeführt wird.
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
klappt aber nicht :
Code: Alles auswählen
// room script file
// result of GetLocationType
#define Tür 1
function on_mouse_click(int button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if ((IsGamePaused() == 0) && (button==LEFT) && (GetCursorMode () == MODE_WALK) && (GetLocationName (mouse.x, mouse.y) == Tür))
{
NewRoom (1);
ClaimEvent ();
}
}
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Hier ein Beispiel für 2 Hotspots (Eingang, Ausgang):
function on_mouse_click(int button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if ((IsGamePaused() == 0) && (button==LEFT) && (GetCursorMode () == MODE_WALK))
{
string loc_name;
GetLocationName (mouse.x, mouse.y, loc_name);
if (StrComp (loc_name, "Ausgang") == 0)
{
NewRoom (1);
ClaimEvent ();
}
else if (StrComp (loc_name, "Eingang") == 0)
{
DisplaySpeech (GetPlayerCharacter (), "Da geht es nicht raus!");
ClaimEvent ();
}
}
}
function on_mouse_click(int button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if ((IsGamePaused() == 0) && (button==LEFT) && (GetCursorMode () == MODE_WALK))
{
string loc_name;
GetLocationName (mouse.x, mouse.y, loc_name);
if (StrComp (loc_name, "Ausgang") == 0)
{
NewRoom (1);
ClaimEvent ();
}
else if (StrComp (loc_name, "Eingang") == 0)
{
DisplaySpeech (GetPlayerCharacter (), "Da geht es nicht raus!");
ClaimEvent ();
}
}
}
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Tja, da sieht man mal wieder, wie vorausschauend ich denke. Benenne einfach deine Objekte und verwende das gleiche Script. Es ist universell, geht mit Hotspots, Objekten und Characteren.
Allerdings solltest du darauf achten, dass alles im Raum unterschiedliche Namen hat, sonst musst du zusätzlich unterscheiden ob das "Tor" nun der Hotspot "Tor" oder das Objekt "Tor" ist.
Allerdings solltest du darauf achten, dass alles im Raum unterschiedliche Namen hat, sonst musst du zusätzlich unterscheiden ob das "Tor" nun der Hotspot "Tor" oder das Objekt "Tor" ist.
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
// result of GetLocationType
#define LT_HOTSPOT 1
#define LT_OBJECT 3
function on_mouse_click(int button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if ((IsGamePaused() == 0) && (button==LEFT) && (GetCursorMode () == MODE_WALK))
{
string loc_name;
GetLocationName (mouse.x, mouse.y, loc_name);
int loc_type = GetLocationType (mouse.x, mouse.y);
if (StrComp (loc_name, "Ausgang") == 0)
{
if (loc_type == LT_HOTSPOT)
{
NewRoom (1);
ClaimEvent ();
}
else if (loc_type == LT_OBJECT)
{
NewRoom (2);
ClaimEvent ();
}
}
else if (StrComp (loc_name, "Eingang") == 0)
{
DisplaySpeech (GetPlayerCharacter (), "Da geht es nicht raus!");
ClaimEvent ();
}
}
}
Jetzt sollte aber so langsam jede Eventualität berücksichtigt sein, oder fehlt noch was?
#define LT_HOTSPOT 1
#define LT_OBJECT 3
function on_mouse_click(int button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if ((IsGamePaused() == 0) && (button==LEFT) && (GetCursorMode () == MODE_WALK))
{
string loc_name;
GetLocationName (mouse.x, mouse.y, loc_name);
int loc_type = GetLocationType (mouse.x, mouse.y);
if (StrComp (loc_name, "Ausgang") == 0)
{
if (loc_type == LT_HOTSPOT)
{
NewRoom (1);
ClaimEvent ();
}
else if (loc_type == LT_OBJECT)
{
NewRoom (2);
ClaimEvent ();
}
}
else if (StrComp (loc_name, "Eingang") == 0)
{
DisplaySpeech (GetPlayerCharacter (), "Da geht es nicht raus!");
ClaimEvent ();
}
}
}
Jetzt sollte aber so langsam jede Eventualität berücksichtigt sein, oder fehlt noch was?
oh eine sache noch, die hat nix direkt damit zu tun, is ziemlich kompliziert:
also man klickt nun auf die tür und dann wird der mauszeiger ausgeblendet ( bei mir is nur transparenz als waitmauszeiger ) und dann wartet man kurz bis der spieler bei der tür is und durchgeht.
NEIN, das ist für mich kein lucasarts, aber mein spiel soll möglichst lucasarts-änhlich werden.
ich will es jetzt so haben:
wenn man auf die tür klickt, geht der spieler drauf zu und wenn er angekommen ist betritt er den nächsten raum.
aber während er dort hingeht soll man ihn trotzdem per mausklick irgendwo anders im raum davon wegholen können. also verstehste? er geht drauf zu, man klickt irgendwo anders hin und er geht zu der angeklickten stelle aber nicht mehr durch. es läuft praktisch eine aktion, doch man kann sie per mausklick auf irgendwas - nur net auffe tür ( dann geht die aktion logischerweise normal wweiter ) - abbrechen. weisst du wie man das realiesieren könnte?
also man klickt nun auf die tür und dann wird der mauszeiger ausgeblendet ( bei mir is nur transparenz als waitmauszeiger ) und dann wartet man kurz bis der spieler bei der tür is und durchgeht.
NEIN, das ist für mich kein lucasarts, aber mein spiel soll möglichst lucasarts-änhlich werden.
ich will es jetzt so haben:
wenn man auf die tür klickt, geht der spieler drauf zu und wenn er angekommen ist betritt er den nächsten raum.
aber während er dort hingeht soll man ihn trotzdem per mausklick irgendwo anders im raum davon wegholen können. also verstehste? er geht drauf zu, man klickt irgendwo anders hin und er geht zu der angeklickten stelle aber nicht mehr durch. es läuft praktisch eine aktion, doch man kann sie per mausklick auf irgendwas - nur net auffe tür ( dann geht die aktion logischerweise normal wweiter ) - abbrechen. weisst du wie man das realiesieren könnte?