Hauptmenü

Neuigkeiten:

Bitte unterstützt uns und bestellt über diese Links bei Amazon  oder HumbleBumble!

GlobalInt (Och noch ne Frage!)

Begonnen von Champ, 23. November 2010, 21:24:50

Vorheriges Thema - Nächstes Thema

Champ

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.
Für den Halloween Streich wird Benard bezahlen!

KhrisMUC

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.

Bissiger Witzbold

Zitat von: KhrisMUC in 23. November 2010, 22:14:26
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.


Champ

#3
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.
Für den Halloween Streich wird Benard bezahlen!

Endres

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



Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

Champ

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
Für den Halloween Streich wird Benard bezahlen!

KhrisMUC

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;

Champ

Habe es mal versucht (den Text ändere ich noch) Ergebniss:

Jedesmal wenn ich nur so ein Script ansehe, fängt mein Gehirn an zu rotieren!
(Eures, nicht meines)
Für den Halloween Streich wird Benard bezahlen!

Timer

Hast du bereits bei der Definition und im import im Header das "b" vor dem "WarDraußen"?

Champ

Für den Halloween Streich wird Benard bezahlen!

Champ

Was soviel heißen soll wie.
"Hä? Ich glaube ich blicke nicht richtig durch!"
Für den Halloween Streich wird Benard bezahlen!

Endres

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



Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

Domi

"Das Internet vergisst nie."

Champ

#13
HA! Domi!! Wen kümmerts? :police:
Für den Halloween Streich wird Benard bezahlen!

ManiacTwister

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)

Zitate:
Die Intelligenz in der Welt bleibt konstant. Nur dumm, dass die Bevölkerung wächst.
Mein charakter ist derb! fies und gemein!