Autor Thema: Int-Problem.  (Gelesen 1554 mal)

Bummels

  • kleiner Tentakel
  • ***
  • Beiträge: 199
  • Geschlecht: Männlich
  • Nicht Notm-Entwickler
    • Profil anzeigen
Int-Problem.
« am: 21. Januar 2011, 22:58:57 »
Ich halte mich an das Ags Handbuch, nur wenn ich wie darin beschrieben [ags]// script for hotspot1: LOOK AT HOTSPOT    
  if (my_counter == 0) {
    Display("You see a bookshelf.");
  }
  if (my_counter == 1) {
    Display("Looking closer, you see a book called Hamlet.");  
  }
  if (my_counter == 2) {
    Display("There is also a book called Harry Potter.");
  }
  if (my_counter == 3) {
    Display("There is nothing else of interest on the shelf.");  
  }
  if (my_counter < 3) {
    my_counter += 1;
  }[/ags] schreibe, bekomme ich an meiner Variabelen kein + drauf, also es bringt nichts.
Ich habe es dann so probiert:
[ags]int my_counter
if (my_counter == 0){
player.Say (" Ein Blatt");
}
my_counter += 1;

if (my_counter == 1) {
player.Say ("Ein tolles Platt! ");
}

usw. usw.[/ags]
Aber dann geht der das durch, d.h. er macht keine Pause. Der sagt sofotz "Ein Blatt" und "Ein tolles Platt!" hintereinander, ich muss garnicht nochmal gucken.

Kann mir wer helfen?

MacGyver

  • Teenie Tentakel
  • ****
  • Beiträge: 339
    • Profil anzeigen
Re: Int-Problem.
« Antwort #1 am: 21. Januar 2011, 23:23:57 »
Logisch. Verschieb mal die Zeilen, in denen du my_counter hochzählst in die jeweilge if-Abfrage mit rein. Außerdem musst du die ifs mit einem else verbinden. Will sagen:

[ags]
int my_counter;
if (my_counter == 0)
{
  player.Say (" Ein Blatt");
  my_counter += 1;
}
else if (my_counter == 1)
{
  player.Say ("Ein tolles Platt! ");
  my_counter += 1;
}

.
.
.
[/ags]

Ich hoffe das funktioniert. Habe noch nicht viel Scriptingerfahrung.
« Letzte Änderung: 22. Januar 2011, 00:42:15 von MacGyver »

Bummels

  • kleiner Tentakel
  • ***
  • Beiträge: 199
  • Geschlecht: Männlich
  • Nicht Notm-Entwickler
    • Profil anzeigen
Re: Int-Problem.
« Antwort #2 am: 22. Januar 2011, 09:09:36 »
[ags]int my_counter;
if (my_counter == 0){
 player.Say ("Ein Blatt.");

my_counter += 1;
  
}


  
 else if (my_counter == 1) {
  player.Say ("Ein tolles Platt!");
  my_counter += 1;
 }[/ags]
Und er sagt immer nur "Ein Blatt".
Was mache ich falsch?
Ich benutzt ags 2.7.2.
Habe mal was von importieren und exportieren von Global-Script gehört. Hat das was damit zutun? habe nichts gemacht...

Edit:
Habe int exportiert / importiert. Geht jetzt :)

Danke an MacGyver; so gehts richtig.
« Letzte Änderung: 22. Januar 2011, 09:42:55 von Bummels »

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Int-Problem.
« Antwort #3 am: 23. Januar 2011, 01:56:26 »
Du musst das Hochzählen nicht in den if-Block mit reinnehmen.

Das Problem ist, dass Du die Variable innerhalb der Funktion deklariert hast, d.h. sie wurde jedesmal nach Beenden der Funktion gelöscht und beim nächsten Mal wieder mit 0 initialisiert.
Schreib einfach die Deklaration vor die Funktion:

[ags]int my_counter;

function dingens() {
// script for hotspot1: LOOK AT HOTSPOT    
  if (my_counter == 0) {
    Display("You see a bookshelf.");
  }
  if (my_counter == 1) {
    Display("Looking closer, you see a book called Hamlet.");  
  }
  if (my_counter == 2) {
    Display("There is also a book called Harry Potter.");
  }
  if (my_counter == 3) {
    Display("There is nothing else of interest on the shelf.");  
  }
  if (my_counter < 3) {
    my_counter += 1;
  }
}[/ags]

Mit import/export machst Du die Variable global, d.h. sie kann in jedem Skript verändert und gelesen werden. Das braucht man natürlich auf des Öfteren, ist hier aber nicht nötig.