"stack overflow" (?!)
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten:
"stack overflow" (?!)
Hallo,
nach längerer Forums-Abstinenz habe ich nun doch mal wieder ein Problem (wäre ja auch ohne irgendwie langweilig )
Die Situation mal kurz:
Ich habe gerade 4 neue Global Ints und strings in das script reingebastelt.
Wenn ich nun das Spiel starte läuft noch das Intro-Video ab, danach kommt sofort die Fehlermeldung "stack overflow".
Die komplette Fehlermeldung heisst :
"Error: run_text_script1: error -6 running function "repeatedly_execute":
Error: stack overflow
in Global script (line 75)"
Line 75 ist natürlich die wo die neuen 4 strings stehen.
Natürlich dachte ich jetzt zuerst: Ich hab wohl zuviele strings da drin, geht halt nicht.
Dem ist aber nicht so:
Laut ags-Hilfe sind 50 strings möglich und ich habe bei mir jetzt gerade 23 gezählt. Jetzt ist natürlich 23 eine ungünstige Zahl aber ich weigere mich zu glauben das es daran liegt;)
Ich habe jetzt schon einige scripts aus dem global "repeatedly" rausgenommen und in die room-repeatedly´s gesteckt...anfangs habe ich da nicht so drauf geachtet.
Aber daran liegt´s auch nicht.
Ab den neuen 4 strings läuft es einfach nicht mehr.
Ich hoffe wirklich das jemand nen Lösungsansatz hat, ich habe mittlerweile so viel Zeit und Mühe in das Spiel gesteckt das es echt kagge wäre wenn´s jetzt an 4 strings scheitern soll. Trennen möchte ich mich von denen eigentlich nicht.
Vorsichtshalber poste ich hier jetzt mal mein komplettes repeatedly execute script. Vielleicht erkennt ja jemand das Problem.
line 75 ist die wo der string "kills" steht:
function repeatedly_execute() {
string Gesundheit; //Brandywine
string Erfahrung;
string Geisteszustand;
string Energiewaffen;
string Schlaegerei;
string ErsteHilfe;
string brandy;
string LVLBRA; //LevelUP-Punkte
string G; //Baldwin
string GZ;
string EH;
string EW;
string Schl;
string Erf;
string Bald;
string LVLBAL; //LevelUP-Punkte
string Gegner; //Gegner-Lebenskraft für Brandywine
string Geg; //Gegner_Lebenkraft für Baldwin
string Zriddle; //Zahlenrätsel
string kills; //getötete Gegner
string riddles; //gelöste Rätsel
string clothes; //Verkleidungen
string allies; //Verbündete
StrFormat (Gesundheit, "%d", GetGlobalInt (1));
StrFormat (Erfahrung, "%d", GetGlobalInt (2));
StrFormat (Geisteszustand, "%d", GetGlobalInt (3));
StrFormat (Energiewaffen, "%d", GetGlobalInt (4));
StrFormat (Schlaegerei, "%d", GetGlobalInt (5));
StrFormat (ErsteHilfe, "%d", GetGlobalInt (6));
StrFormat (brandy, "%d", GetGlobalInt (1));
StrFormat (LVLBRA, "%d", GetGlobalInt (22));
lbl_Gesundheit.SetText(Gesundheit);
lbl_Erfahrung.SetText(Erfahrung);
lbl_Geisteszustand.SetText(Geisteszustand);
lbl_Energiewaffen.SetText(Energiewaffen);
lbl_Schlaegerei.SetText(Schlaegerei);
lbl_ErsteHilfe.SetText(ErsteHilfe);
lbl_brandy.SetText(brandy);
lbl_LVLBRA.SetText(LVLBRA);
StrFormat (G, "%d", GetGlobalInt (8));
StrFormat (Erf, "%d", GetGlobalInt (9));
StrFormat (GZ, "%d", GetGlobalInt (10));
StrFormat (EW, "%d", GetGlobalInt (11));
StrFormat (Schl, "%d", GetGlobalInt (12));
StrFormat (EH, "%d", GetGlobalInt (13));
StrFormat (Bald, "%d", GetGlobalInt (8));
StrFormat (LVLBAL, "%d", GetGlobalInt (23));
lbl_G.SetText(G);
lbl_Erf.SetText(Erf);
lbl_GZ.SetText(GZ);
lbl_EW.SetText(EW);
lbl_Schl.SetText(Schl);
lbl_EH.SetText(EH);
lbl_Bald.SetText(Bald);
lbl_LVLBAL.SetText(LVLBAL);
StrFormat (Gegner, "%d", GetGlobalInt (7));
lbl_Gegner.SetText(Gegner);
StrFormat (Geg, "%d", GetGlobalInt (7));
lbl_Geg.SetText(Geg);
StrFormat (Zriddle, "%d", GetGlobalInt (14));
lbl_Zriddle.SetText(Zriddle);
StrFormat (kills, "%d", GetGlobalInt (25));
StrFormat (riddles, "%d", GetGlobalInt (26));
StrFormat (clothes, "%d", GetGlobalInt (27));
StrFormat (allies, "%d", GetGlobalInt (28));
lbl_kills.SetText(kills);
lbl_riddles.SetText(riddles);
lbl_clothes.SetText(clothes);
lbl_allies.SetText(allies);
if (GetGlobalInt (1) < 1) {
character[EGO].ChangeRoom(8);
} //Brandywine Game over
if (GetGlobalInt (8) < 1) {
character[BALD1].ChangeRoom(28);
} //Baldwin Game over
//Level-UP für Brandywine :
if ((GetGlobalInt(2) > 50) && (GetGlobalInt(5) == 1)) {
SetGlobalInt(20,1);
SetGlobalInt(22,10);
SetGlobalInt(5,2);
}
if (GetGlobalInt(20) == 1) {
gLevupbrandy.Visible = true;
gBrandywine.Visible = true;
gIconbar.Visible = false;
PlayMusic(19);
SetGlobalInt(20,0);
mouse.UseModeGraphic(eModePointer);
}
//Level-UP für Baldwin :
if ((GetGlobalInt(9) > 50) && (GetGlobalInt(12) == 1)) {
SetGlobalInt(21,1);
SetGlobalInt(23,10);
SetGlobalInt(12,2);
}
if (GetGlobalInt(21) == 1) {
gLevupbald.Visible = true;
gBaldwin.Visible = true;
gIconbar.Visible = false;
PlayMusic(19);
SetGlobalInt(21,0);
mouse.UseModeGraphic(eModePointer);
}
nach längerer Forums-Abstinenz habe ich nun doch mal wieder ein Problem (wäre ja auch ohne irgendwie langweilig )
Die Situation mal kurz:
Ich habe gerade 4 neue Global Ints und strings in das script reingebastelt.
Wenn ich nun das Spiel starte läuft noch das Intro-Video ab, danach kommt sofort die Fehlermeldung "stack overflow".
Die komplette Fehlermeldung heisst :
"Error: run_text_script1: error -6 running function "repeatedly_execute":
Error: stack overflow
in Global script (line 75)"
Line 75 ist natürlich die wo die neuen 4 strings stehen.
Natürlich dachte ich jetzt zuerst: Ich hab wohl zuviele strings da drin, geht halt nicht.
Dem ist aber nicht so:
Laut ags-Hilfe sind 50 strings möglich und ich habe bei mir jetzt gerade 23 gezählt. Jetzt ist natürlich 23 eine ungünstige Zahl aber ich weigere mich zu glauben das es daran liegt;)
Ich habe jetzt schon einige scripts aus dem global "repeatedly" rausgenommen und in die room-repeatedly´s gesteckt...anfangs habe ich da nicht so drauf geachtet.
Aber daran liegt´s auch nicht.
Ab den neuen 4 strings läuft es einfach nicht mehr.
Ich hoffe wirklich das jemand nen Lösungsansatz hat, ich habe mittlerweile so viel Zeit und Mühe in das Spiel gesteckt das es echt kagge wäre wenn´s jetzt an 4 strings scheitern soll. Trennen möchte ich mich von denen eigentlich nicht.
Vorsichtshalber poste ich hier jetzt mal mein komplettes repeatedly execute script. Vielleicht erkennt ja jemand das Problem.
line 75 ist die wo der string "kills" steht:
function repeatedly_execute() {
string Gesundheit; //Brandywine
string Erfahrung;
string Geisteszustand;
string Energiewaffen;
string Schlaegerei;
string ErsteHilfe;
string brandy;
string LVLBRA; //LevelUP-Punkte
string G; //Baldwin
string GZ;
string EH;
string EW;
string Schl;
string Erf;
string Bald;
string LVLBAL; //LevelUP-Punkte
string Gegner; //Gegner-Lebenskraft für Brandywine
string Geg; //Gegner_Lebenkraft für Baldwin
string Zriddle; //Zahlenrätsel
string kills; //getötete Gegner
string riddles; //gelöste Rätsel
string clothes; //Verkleidungen
string allies; //Verbündete
StrFormat (Gesundheit, "%d", GetGlobalInt (1));
StrFormat (Erfahrung, "%d", GetGlobalInt (2));
StrFormat (Geisteszustand, "%d", GetGlobalInt (3));
StrFormat (Energiewaffen, "%d", GetGlobalInt (4));
StrFormat (Schlaegerei, "%d", GetGlobalInt (5));
StrFormat (ErsteHilfe, "%d", GetGlobalInt (6));
StrFormat (brandy, "%d", GetGlobalInt (1));
StrFormat (LVLBRA, "%d", GetGlobalInt (22));
lbl_Gesundheit.SetText(Gesundheit);
lbl_Erfahrung.SetText(Erfahrung);
lbl_Geisteszustand.SetText(Geisteszustand);
lbl_Energiewaffen.SetText(Energiewaffen);
lbl_Schlaegerei.SetText(Schlaegerei);
lbl_ErsteHilfe.SetText(ErsteHilfe);
lbl_brandy.SetText(brandy);
lbl_LVLBRA.SetText(LVLBRA);
StrFormat (G, "%d", GetGlobalInt (8));
StrFormat (Erf, "%d", GetGlobalInt (9));
StrFormat (GZ, "%d", GetGlobalInt (10));
StrFormat (EW, "%d", GetGlobalInt (11));
StrFormat (Schl, "%d", GetGlobalInt (12));
StrFormat (EH, "%d", GetGlobalInt (13));
StrFormat (Bald, "%d", GetGlobalInt (8));
StrFormat (LVLBAL, "%d", GetGlobalInt (23));
lbl_G.SetText(G);
lbl_Erf.SetText(Erf);
lbl_GZ.SetText(GZ);
lbl_EW.SetText(EW);
lbl_Schl.SetText(Schl);
lbl_EH.SetText(EH);
lbl_Bald.SetText(Bald);
lbl_LVLBAL.SetText(LVLBAL);
StrFormat (Gegner, "%d", GetGlobalInt (7));
lbl_Gegner.SetText(Gegner);
StrFormat (Geg, "%d", GetGlobalInt (7));
lbl_Geg.SetText(Geg);
StrFormat (Zriddle, "%d", GetGlobalInt (14));
lbl_Zriddle.SetText(Zriddle);
StrFormat (kills, "%d", GetGlobalInt (25));
StrFormat (riddles, "%d", GetGlobalInt (26));
StrFormat (clothes, "%d", GetGlobalInt (27));
StrFormat (allies, "%d", GetGlobalInt (28));
lbl_kills.SetText(kills);
lbl_riddles.SetText(riddles);
lbl_clothes.SetText(clothes);
lbl_allies.SetText(allies);
if (GetGlobalInt (1) < 1) {
character[EGO].ChangeRoom(8);
} //Brandywine Game over
if (GetGlobalInt (8) < 1) {
character[BALD1].ChangeRoom(28);
} //Baldwin Game over
//Level-UP für Brandywine :
if ((GetGlobalInt(2) > 50) && (GetGlobalInt(5) == 1)) {
SetGlobalInt(20,1);
SetGlobalInt(22,10);
SetGlobalInt(5,2);
}
if (GetGlobalInt(20) == 1) {
gLevupbrandy.Visible = true;
gBrandywine.Visible = true;
gIconbar.Visible = false;
PlayMusic(19);
SetGlobalInt(20,0);
mouse.UseModeGraphic(eModePointer);
}
//Level-UP für Baldwin :
if ((GetGlobalInt(9) > 50) && (GetGlobalInt(12) == 1)) {
SetGlobalInt(21,1);
SetGlobalInt(23,10);
SetGlobalInt(12,2);
}
if (GetGlobalInt(21) == 1) {
gLevupbald.Visible = true;
gBaldwin.Visible = true;
gIconbar.Visible = false;
PlayMusic(19);
SetGlobalInt(21,0);
mouse.UseModeGraphic(eModePointer);
}
- Sinitrena
- Tastatursteuerer
- Beiträge: 678
- Registriert: 08.05.2004, 01:01
- Wohnort: Frankfurt
- Kontaktdaten:
Hat es irgendeine logische Begründung dafür, dass du sämtliche strings in der rep_ex erschaffst? Die gehören davor, ganz an den Anfang des global scripts.
Was bei dir passiert ist folgendes:
Die strings werden einmal erschaffen, wenn die rep_ex zum ersten Mal aufgerufen wird, dann wieder beim zweiten Mal, dann beim dritten Mal, usw. Eigentlich logisch, dass das irgendwann zu einer Überlastung führt - so verständlich ausgedrück wie ich es gerade hinbekomme.
Ich hab mir den Code jetzt nicht ganz im Detail angesehen, aber wenn du alle Zeilen, die mit string anfangen außerhalb jeder Funktion setzt und nur den anderen Rest darin lässt (der muss wahrscheinlich drin bleiben, soweit ich das auf den ersten Blick sehe) müsste es klappen.
Noch ein kleiner Rat am Rande: wenn du viele Globale Variablen brauchst würde ich davon abraten die GlobalInts zu verwenden, das wird leicht unübersichtlich.
Was bei dir passiert ist folgendes:
Die strings werden einmal erschaffen, wenn die rep_ex zum ersten Mal aufgerufen wird, dann wieder beim zweiten Mal, dann beim dritten Mal, usw. Eigentlich logisch, dass das irgendwann zu einer Überlastung führt - so verständlich ausgedrück wie ich es gerade hinbekomme.
Ich hab mir den Code jetzt nicht ganz im Detail angesehen, aber wenn du alle Zeilen, die mit string anfangen außerhalb jeder Funktion setzt und nur den anderen Rest darin lässt (der muss wahrscheinlich drin bleiben, soweit ich das auf den ersten Blick sehe) müsste es klappen.
Noch ein kleiner Rat am Rande: wenn du viele Globale Variablen brauchst würde ich davon abraten die GlobalInts zu verwenden, das wird leicht unübersichtlich.
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten:
Mit ganz an den Anfang setzen meinst du die Sektion "game_start", oder?
Ich werde das mal gleich testen.
Ich habe das in der Hilfe aber so verstanden das die strings immer wieder aktualisert werden müssen weil sie ja variable Werte anzeigen, oder vertue ich mich da jetzt mit den labels?
Ich werd´s auf jeden Fall mal ausprobieren
Danke erstmal.
Ich werde das mal gleich testen.
Ich habe das in der Hilfe aber so verstanden das die strings immer wieder aktualisert werden müssen weil sie ja variable Werte anzeigen, oder vertue ich mich da jetzt mit den labels?
Ich werd´s auf jeden Fall mal ausprobieren
Danke erstmal.
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten:
Ich hab das jetzt mal ausprobiert, leider funktioniert es so aber nicht.
Wenn ich die strings nach oben verfrachte meldet ags beim kompilieren das das "token" kills "undefined" ist.
Danach geht dann gar nichts mehr.
Ich hab den ganzen Mist jetzt erstmal wieder da raus gerupft und kümmere mich um andere Sachen.
Zur Not verzichte ich halt auf diese eine GUI. Man muss ja auch nicht zwingend wissen wieviele Gegner man überwunden hat
Wenn ich die strings nach oben verfrachte meldet ags beim kompilieren das das "token" kills "undefined" ist.
Danach geht dann gar nichts mehr.
Ich hab den ganzen Mist jetzt erstmal wieder da raus gerupft und kümmere mich um andere Sachen.
Zur Not verzichte ich halt auf diese eine GUI. Man muss ja auch nicht zwingend wissen wieviele Gegner man überwunden hat
-
- Hobby-Archäologe
- Beiträge: 163
- Registriert: 28.04.2005, 16:26
- Wohnort: Mönchengladbach
Du musste die strings außerhalb einer Funktion deklarieren.
so:
deklarierst du den string Gesundheit global für alle Funktionen im Skript.
so:
wird Gesundheit nur lokal für repeatedly_execute deklariert.
Und da AGS nur eine begrenzte Anzahl von lokalen Variablen für eine Funktion vertragen kann (http://americangirlscouts.org/agswiki/Engine_limits), kommt ne Fehlermeldung.
so:
Code: Alles auswählen
string Gesundheit;
function repeatedly_execute() {
}
so:
Code: Alles auswählen
function repeatedly_execute() {
string Gesundheit;
}
Und da AGS nur eine begrenzte Anzahl von lokalen Variablen für eine Funktion vertragen kann (http://americangirlscouts.org/agswiki/Engine_limits), kommt ne Fehlermeldung.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Also NICHT in game_start, AUSSERHALB.Sinitrena hat geschrieben:aber wenn du alle Zeilen, die mit string anfangen außerhalb jeder Funktion setzt
Eine Variable/String, die/der innerhalb einer Funktion definiert wird, gilt auch nur innerhalb der Funktion, d.h. sie ist nach Ablauf 0 bzw. "".
In diesem Fall ist das egal, da Du die Strings eh nur benutzt, um Label zu aktualisieren.
Mach es einfach so:
Code: Alles auswählen
function update_label(Label*l, int gi) {
l.SetText(String.Format("%d", GetGlobalInt(gi));
}
function update_player() {
update_label(lbl_Gesundheit, 1);
update_label(lbl_Erfahrung, 2);
update_label(lbl_Geisteszustand, 3);
... usw.
}
function repeatedly_execute() {
update_player();
}
Use gopher repellent on funny little man
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten:
- Sinitrena
- Tastatursteuerer
- Beiträge: 678
- Registriert: 08.05.2004, 01:01
- Wohnort: Frankfurt
- Kontaktdaten:
Ach, es ist schon schwer richtig zu lesen, nicht wahr?
Aber es ist gut, dass es jetzt geht.
Aber es ist gut, dass es jetzt geht.
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten: