Mit "Gehe zu" Befehl durch eine Tür gehen, NICHT m

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Sharalamude

Mit "Gehe zu" Befehl durch eine Tür gehen, NICHT m

Beitrag von Sharalamude »

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'
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

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 ();
}
}
Gast

Beitrag von Gast »

raff ich nicht ganz: so ne aktion gibts im global script. so, wenn ichs im globalscript eintrage dann wüsste der aber nicht was gemeint ist. wenn ichs im raumscript reinschreibe gehts nich weil die aktion schon definiert ist. kasnnste mir nicht ne genauere erkl#ärung dazu aufschreiben?
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

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.
sharalamude

Beitrag von sharalamude »

hm, wenn ich das einfach so in room script poste, woher weiß ags dann, welchen hotspot ich meine?
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

wie gesagt, bei mehreren Hotspots wäre GetLocationName sinnvoller als GetLocationType, denn dann kannst du den Hotspot anhand seines Namens identifizieren.
Gast

Beitrag von Gast »

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 (); 
} 
}
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

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 ();
}
}
}
Sharalamude

Beitrag von Sharalamude »

es geht, thx :)
Gast

Beitrag von Gast »

SCHEISSE^^ wie mach ich das ghleich denn mit objektne?
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

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.
Sharalamude

Beitrag von Sharalamude »

det isses ja grad, die ham die gleichen namen. und das muss auch so sein. und nu?
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

// 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?
Sharalamude

Beitrag von Sharalamude »

nein, nur noch 'n paar variablen, aber das krieg ich locker selbst hin. Also danke nochmal ;)
Year Problem Shara

Beitrag von Year Problem Shara »

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?
Antworten