Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Newbies => Thema gestartet von: Champ am 23. November 2010, 21:24:50

Titel: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 23. November 2010, 21:24:50
Kurz und knapp:

"Nimm Stift: "Erstmal sehen, was draußen los ist."

(SetGlobalInt (1)==1) (Nur als Beispiel)

(GetGlobalInt(1)==1)

"Nimm Stift: "Her damit!"

Ich habs versucht, aber nun ist das Skript durch herumexperimentieren im Arsch.

Bei schau kommt es wie gewohnt, aber nach benutze kommt ein Standart Kommentar, eine Fehler Meldung,
beide Texte werden angezeigt, es erscheint ein Fehler in einen Skript, welches ich nicht mal angefasst habe, usw.

Hotspot entfernen geht nicht, da 2 Hotspots nicht übereinander liegen können und ein object sollte es nicht sein.

Könnte Hilfe gebrauchen.
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: KhrisMUC am 23. November 2010, 22:14:26
Mir ist nicht ganz klar, warum ein Stift, der mitgenommen werden kann, nicht als Objekt eingebunden werden soll. Egal.

Ich weiß nicht, mit welchem Starterpack oder welcher AGS-Version Du arbeitest; GlobalInts werden bei älteren Starterpacks verwendet, um den Status von Türen zu speichern, man sollte also pauschal keinesfalls die GlobalInts 1-100 verwenden.

Der Stift wird also erst beim zweiten Mal mitgenommen, richtig? Da gibt es die sehr praktische Funktion DoOnceOnly:

  else if (UsedAction(eActPickUp)) {

    if (Game.DoOnceOnly("Stift mitnehmen")) player.Say("Erstmal sehen, was draußen los ist.");
    else {
      player.Say("Her damit!");
      oStift.Visible = false;
      player.AddInventory(iStift);
    }
  }

Game.DoOnceOnly("beliebiger Text") ist beim ersten Mal wahr, danach immer falsch. Der Text muss aber einmalig sein, also am besten eine Beschreibung der Situation; theoretisch könnte man aber auch eine beliebige Zeichenfolge nehmen.

Der Code geht natürlich davon aus, dass man den Stift kein drittes Mal nehmen kann, logischerweise wird ja das Objekt nach dem zweiten Mal ausgeschaltet. Wenn Du das um jeden Preis doch als Hotspot einbauen willst, sag Bescheid.
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Bissiger Witzbold am 23. November 2010, 22:36:22
Der Stift wird also erst beim zweiten Mal mitgenommen, richtig?
"Nimm Stift: "Erstmal sehen, was draußen los ist." lässt eher vermuten, daß man den Stift erst nehmen darf wenn man draussen war oder aus dem Fenster geguckt hat.

Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 23. November 2010, 22:46:19
Ja, der Stift war ein schlechtes Beispiel. (Da kann ich ja gleich object on/off machen)
Es ist ein Hotspot, welcher mit einen Gegenstand bearbeitet werden kann, und auf zwei ansichten
angeschaut werden kann. (Z.B. Schau an Zettel: "Ein leerer Zettel."
                                          (GetGlobalInt) (Schau an Zettel: "Immernoch ein Zettel."

Was ich vergessen habe zu sagen, ich benutze AGS 2.7.2.
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Endres am 24. November 2010, 00:33:53
Wie schon von KhrisMUC gesagt, lässt sich das auch Prima (sowieso) ohne GIs realisieren.

if(Game.DoOnceOnly("Zettel anschauen")) player.Say("Ein leerer Zettel.");
else player.Say("Immernoch ein Zettel.");

Generell sollte man dennoch auf überflüssige Werte verzichten, und auch hierbei könnte man sich eventuell schon überlegen, einen richtigen Integer oder ein Boolschen Wert zu verwenden, da ein DoOnce-String schon ein bisschen länger ist als ein paar Variablen zu beschreiben. Allerdings lässt sich darüber streiten. GlobalInts sind Mist, punkt.

Erstes Beispiel:
bool bWarDraussen = false; // Im GlobalScript definieren und exportieren mit export bWarDraussen;
function ...() { // Any Click On Hotspot bei Stift
  if(UsedAction(eActLookAt)) {
    player.Say("Das ist ein Stift.");
  } else if(UsedAction(eActPickUp)) {
    if(!bWarDraussen) player.Say("Erstmal sehen, was draußen los ist.");
    else {
      player.Say("Her damit!");
      // ...
    }
  } else Unhandled();
}
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 24. November 2010, 14:57:23
Falls der Edit nicht gezeigt hat, dass ich was neued geschrieben habe, hier nochmal so.
Wo genau im Globalscript?
Und ich benutze AGS 2.7.2
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: KhrisMUC am 24. November 2010, 16:26:34
Wo im Globalscript ist prinzipiell egal, solange alle Funktionen, die die Variable verwenden, weiter unten sind.
Mach dir am Bestem der Übersicht halber einen Kommentar mit ein paar Leerzeilen ganz oben:


// meine globalen Variablen

bool WarDraussen;
export WarDraussen;



Jetzt musst Du die Variablendefinition noch im header des Globalscripts importieren:
import bool WarDraussen;
Du kannst jetzt die Variable im Global- und jedem Raumskript verändern oder ihren Wert abfragen.
Wenn Du sie ohne Anfangswert definierst (so wie ich es gemacht habe), ist sie false.
Sobald man also draußen war, setzt man sie auf true:

// innerhalb einer Funktion, z.B. "first time player enters room", room = vor der Haustür

  WarDraussen = true;
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 29. November 2010, 18:26:37
Habe es mal versucht (den Text ändere ich noch) Ergebniss:
(http://npshare.de/files/b458c69a/Fehler.png)
Jedesmal wenn ich nur so ein Script ansehe, fängt mein Gehirn an zu rotieren!
(Eures, nicht meines)
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Timer am 29. November 2010, 18:52:23
Hast du bereits bei der Definition und im import im Header das "b" vor dem "WarDraußen"?
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 29. November 2010, 18:56:14
Lass es mich so sagen:
:O---
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 03. Dezember 2010, 17:42:28
Was soviel heißen soll wie.
"Hä? Ich glaube ich blicke nicht richtig durch!"
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Endres am 03. Dezember 2010, 18:35:32
du hast die Variable bWarDraussen schon definiert, oder? ;)

Wie gesagt. Im GlobalScript folgendes einfügen:
bool bWarDraussen;
export bWarDraussen;
und im GlobalHeader:
import bool bWarDraussen;

Warum benutzt du "DisplaySpeech"?
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Domi am 03. Dezember 2010, 18:59:24
HA! champ!! doppelpost ;D
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 03. Dezember 2010, 19:12:04
HA! Domi!! Wen kümmerts? :police:
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: ManiacTwister am 03. Dezember 2010, 19:13:18
Doppelposts gelten nach 72 stunden nicht mehr als Doppelpost, wenn wir geade Forum Cherif spieln....

Übrigens dein Post ist völlig unnötig(meiner auch)
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 03. Dezember 2010, 19:20:51
Display.Speech?
Was ist daran komisch?
Gibts player.say auch in AGS 2.7.2?
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Endres am 03. Dezember 2010, 20:55:01
Achso, du verwendest noch 2.72?
Naja, jedenfalls gibt es das da auch schon.
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 09. Dezember 2010, 20:26:15
Der erzählt mir immernoch etwas von "undefined symbol".

Das ganze script. (Reihe 530 ist der Fehler)
(http://www.npshare.de/files/6cf9fcfe/1.png)

Global script:
(http://www.npshare.de/files/f852ffd4/2.png)

Script header:
(http://www.npshare.de/files/ec0892a3/3.png)

Vergisst nicht, AGS 2.7.2, falls das wichtig ist.
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Endres am 09. Dezember 2010, 20:32:13
Ich glaub bei den Variablen war das bei 2.72 ein bisschen anders...

Was ist der Grund, dass du nicht mit 3.x anfängst?
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Champ am 09. Dezember 2010, 20:46:23
Der Grund war, das ich eigentlich mit MD anfangen wollte und die
anderen Versionen nicht kompartiebel sind.
Daher habe ich angefangen mich in AGS 2.7.2 einzuarbeiten.
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: KhrisMUC am 10. Dezember 2010, 00:06:22
Die Variable wird bei Dir als "WarDraussen" deklariert und ex- und importiert; in Zeile 530 verwendest Du aber "bWarDraussen". Einfach das b weg, dann passts.

In meinen Beispiel hab ich kein b davor, und genau das hat dann erst Timer und dann Endres angesprochen...

Ist doch auch logisch, dass AGS "bWarDraussen" nicht kennt, wenn Du die Variable "WarDraussen" nennst...
Titel: Re: GlobalInt (Och noch ne Frage!)
Beitrag von: Endres am 10. Dezember 2010, 14:10:28
Achso, das hatte ich wiederum übersehen... ;D