Anfänger-Problem

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Kofe
Frischling
Frischling
Beiträge: 5
Registriert: 14.12.2009, 09:12

Anfänger-Problem

Beitrag von Kofe »

Hallo, ich habe ein grobes Verständnisproblem beim Scripten.

Ich möchte eine Tür (hDoor) mit iKey öffnen --> Also, dass die Tür verschlossen bleibt, wenn der Spieler keinen Schlüssel hat und den Spieler in den nächsten Raum befördert, wenn er den Schlüssel hat und ihn mit der Tür verwendet.

Ich habe es auf zwei Arten versucht, beide Male habe ich mich an diesem Demo Spiel orientiert:

// room script file

function hTor_UseInv()
{
if(cChar1.ActiveInventory==iKey);
Display("Klack und offen.");
cChar1.ChangeRoom(2,305,412);
}

function hMaske_Look()
{
Display("Schaurig. Die setze ich lieber nicht auf!");
}

function hMaske_Interact()
{
Display("Nein. Lieber nicht.");
}

function hZeitung_Look()
{
Display("ZAMG meldet starken Westwind von Ost. Irgendetwas an diesem Bericht irritiert mich.");
}

function hZeitung_Interact()
{
Display("In Anbetracht der Tatsache, dass diese Ausgabe drei Monate alt ist, will ich sie nicht.");
}

function hTor_Look()
{
Display("Ein Tor. Gut zu wissen, dass es einen Ausgang gibt.");
}

function hTor_Interact()
{
Display("Abgeschlossen.");
}

function hWandteppich_Look()
{
Display("Genial. Fabulos. Incredible.");
}

function hWandteppich_Interact()
{
Display("Dieser Teppich ist vier Meter lang und sehr staubig und er bleibt hier.");
}

function oKey_Look()
{
Display("Das wird doch wohl nicht der Key zu diesem Ausgang sein...");
}
function oKey_Interact ()
{
cChar1.Walk(615,628,eBlock);
Display("Den kann ich gebrauchen.");
cChar1.AddInventory(iKey);
oKey.Visible=false;
}


Da kam bereits bei der if-Zeile eine Fehlermeldung. (parse error at ;)




Dann habe ichs mit einer statischen Variable versucht:

// room script file

int DoorState=LOCKED;
int State=0;

function OperateDoor()
{
cChar1.Walk(404, 608, eBlock);
if (DoorState==LOCKED);
if (cChar1.InventoryQuantity(iKey)>0);
DoorState=OPENED;
cChar1.ChangeRoom(2, 400, 500);
}
else
{
Display("Verschlossen.");
}

function hMaske_Look()
{
Display("Schaurig. Die setze ich lieber nicht auf!");
}

function hMaske_Interact()
{
Display("Nein. Lieber nicht.");
}

function hZeitung_Look()
{
Display("ZAMG meldet starken Westwind von Ost. Irgendetwas an diesem Bericht irritiert mich.");
}

function hZeitung_Interact()
{
Display("In Anbetracht der Tatsache, dass diese Ausgabe drei Monate alt ist, will ich sie nicht.");
}

function hTor_Look()
{
Display("Ein Tor. Gut zu wissen, dass es einen Ausgang gibt.");
}

function hTor_Interact()
{
Display("Abgeschlossen.");
}

function hWandteppich_Look()
{
Display("Genial. Fabulos. Incredible.");
}

function hWandteppich_Interact()
{
Display("Dieser Teppich ist vier Meter lang und sehr staubig und er bleibt hier.");
}

function oKey_Look()
{
Display("Das wird doch wohl nicht der Key zu diesem Ausgang sein...");
}
function oKey_Interact ()
{
cChar1.Walk(615,628,eBlock);
Display("Den kann ich gebrauchen.");
cChar1.AddInventory(iKey);
oKey.Visible=false;
}


Da kam dann in der ersten Zeile schon die Meldung: Expected integer value after `...

Ich verstehe nicht, warum diese Dinge im Demospiel funktionieren und bei mir nicht.
Hoffentlich könnt ihr mir helfen.
Benutzeravatar
Helme
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 147
Registriert: 23.01.2009, 10:13

Re: Anfänger-Problem

Beitrag von Helme »

Nach einem if-Statement kein ; sondern {} um den nachfolgenden Befehl.

Code: Alles auswählen

function hTor_UseInv()
{
if(cChar1.ActiveInventory==iKey){
Display("Klack und offen.");
cChar1.ChangeRoom(2,305,412);}
// zusätzlich würde ich noch sowas einsetzen:
else {Display("Damit bekomme ich die Tür nicht auf.");}
}
Kofe
Frischling
Frischling
Beiträge: 5
Registriert: 14.12.2009, 09:12

Re: Anfänger-Problem

Beitrag von Kofe »

Vielen Dank. Jetzt funktioniert es tatsächlich.

Und ich habe noch eine andere Frage:
Ich habe ein Problem mit meinem Hotspot (hZeitung) und meinem Objekt (oKey). Wenn ich den Player mit dem Key interagieren lassen möchte, muss ich manchmal 10 mal draufklicken bis er drauf reagiert.
Und bei der Zeitung geht er zwar hin, wie er sollte, aber die Nachricht, die ich ins Skript geschrieben habe, spielt er nie ab.
Ein Skriptproblem ist das wahrscheinlich nicht, aber was kann es sonst sein?
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Anfänger-Problem

Beitrag von KhrisMUC »

Die Mauscursor haben selbst einen hotspot, in dem Fall einen einzigen Pixel, der die tatsächliche Mausposition repräsentiert. Wenn Du einen der Cursor öffnest, siehst Du in der Vorschau ein kleines Kreuzchen, dessen Position Du verändern kannst.

Wenn der Schlüssel selbst nur aus ein paar Pixeln besteht und generell schwer zu treffen ist, kannst Du oKey.Clickable = false; setzen und stattdessen einen Hotspot benutzen. Der muss natürlich nach Aktivierung ebenfalls ausgeschaltet werden. (Oder ein Stück Hintergrund in das Sprite von oKey einfügen.)

Praktisch ist auch, z.B. am unteren Bildschirmrand ein durchsichtiges, kleines GUI anzuzeigen mit einem Label mit dem Text "@OVERHOTSPOT@". Dort steht dann immer der Name dessen, was sich unter der Maus befindet. Praktisch zum Testen, und auch der Spieler wird sehr dankbar sein.
Use gopher repellent on funny little man
Kofe
Frischling
Frischling
Beiträge: 5
Registriert: 14.12.2009, 09:12

Re: Anfänger-Problem

Beitrag von Kofe »

Danke für die Tipps.

Wenn ich dieses GUI mit dem Text "@OVERHOTSPOT@" versehe, zeigt es aber nur an, wenn ich mit der Maus über Hotspot fahre, oder?
Um Objekte anzuzeigen, muss ich das clickable beim Objekt falsifizieren und ein Hotspot drüber zeichne, oder?
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Anfänger-Problem

Beitrag von KhrisMUC »

Glücklicherweise nicht; der Name ist ein bisschen irreführend, zeigt aber auch Objekte und Charaktere an.
Use gopher repellent on funny little man
Antworten