Forum

> > Stranded II > Allgemein > Bug Thread
Forums overviewStranded II overviewAllgemein overviewLog in to reply

German Bug Thread

1,167 replies
Page
To the start Previous 1 257 58 59 Next To the start

old Re: Bug Thread

Nova
User Off Offline

Quote
Du hast dich im Thread geirrt, dies ist der Stranded II Bug Thread, nicht irgendwas mit CS2D oder so.

Naja, okay, ich kenn' mich mit Linux nicht so aus, kann sein.

old Re: Bug Thread

Nova
User Off Offline

Quote
Funktioniert:
1
$test = int ($bla -0.5);
Funktioniert nicht (Mismatched brackets):
1
$test = int (($bla) -0.5);

Ich werde diesen Fehler in Zukunft umgehen, aber trotzdem wollte ich ihn melden. Vielleicht werden sich die momentanen Modder des Quelltextes dazu bequemen, diesen Fehler in ihrer Modifikation zu entfernen.


Ps: Nette Abfrage, ob man übersehen hat, dass der Thread alt ist. Ich hatte das zwar nicht übersehen, aber so ein Hinweis ist nicht schlecht.

old Re: Bug Thread

Hurri04
Super User Off Offline

Quote
hmm, funktioniert denn beispielsweise das hier:
1
$test = int (($bla +0) -0.5);
?

wenn ja, dann könnte das ganz einfach heißen, dass es probleme gibt, wenn man variablen einfach so in klammern schreibt, ohne dass da noch irgend eine rechenoperation durchgeführt wird, wobei ich da jetzt zwar nicht wirklich nen sinn drin sehe aber du wirst wahrscheinlich deine gründe dafür haben, warum du das so machst.

old Re: Bug Thread

Nova
User Off Offline

Quote
Habe ich nicht, ich habe die Gleichung nur vereinfacht, damit sie übersichtlicher wird.

Mit Variablen hat das auch anscheinend nichts zu tun, folgendes funktioniert genau so wenig:
1
$bla = int(7.5*(2.5*3)+2);

Möglicherweise hat Stranded bei dem Befehl s2 cmd int oder vielleicht bei noch mehr ein Problem mit inneren Klammern.

old Re: Bug Thread

Hurri04
Super User Off Offline

Quote
naja, in dem fall kann man ja immer noch den wert, der dann nachher im int befehl in den klammern stehen soll, vorher ausrechnen, in ner variable speichern und dann erst in dem befehl einsetzen.

ich weiß, dass Stranded 2 da einige macken hat, aber der beste weg, wenn man sowas findet, ist einfach ne andere möglichkeit zu probieren um ans ziel zu kommen. not macht erfinderisch

old Bug

ump5master
User Off Offline

Quote
Bug gefunden!
Wenn ich tauch und dann beim tauchen angel, friert die Luftanzeige ein... sie sinkt erst wieder nach dem Angelprozess.

Hoffentlich richtiger Thread...

old Re: Bug Thread

Nova
User Off Offline

Quote
Das dürfte dann wahrscheinlich bei jedem Prozess so sein.
Du kannst ja mal versuchen, ob das auch bei anderen Prozessen passieren, beispielsweise wenn du etwas unter Wasser schmieden willst.

old Re: Bug Thread

Mc Leaf
Super User Off Offline

Quote
Nova has written
Das dürfte dann wahrscheinlich bei jedem Prozess so sein.

Meines Wissens ja. Sinnvoll wäre wohl eine Abfrage bei on:use, ob der Spieler sich ober/unter Wasser befindet.

Zu dem Klammerzeugs oben:
Der Parser bei S2 ist ja auch unter aller Sau. Aber für einen (damals noch) Abiturienten natürlich wirklich klasse.
Es gibt eine ganze Menge solcher Bugs und die wird es wohl auch in Zukunft noch geben, d.h. sofern sich Workarounds dafür finden lassen. Ansonsten müsste man den Parser komplett neu auflegen, was dazu führen würde, dass ältere Skripte nicht mehr funzen würden, oder bspw. Codekonstruktionen welche sich gerade solche 'Bugs' zu nutze machen...

old Re: Bug Thread

Nova
User Off Offline

Quote
Es gibt einen Fehler beim Schmetterlings-Garten. Er zählt ja immer nach, wie viele Schmetterlinge in der Nähe sind und speichert diesen Wert. Sollte er dabei unter 3 sein, wird einer oder zwei neue Schmetterlinge erstellt. Dummerweise wird die Variable, in der der gespeicherte Wert steht, nicht wieder zurückgesetzt.
Sollten also beim ersten Tag zwei Schmetterlinge rumfliegen und beim zweiten auch einer, dann wird nie wieder ein Schmetterling erstellt, da der Wert immer über oder gleich 3 ist.

Hier der fehlerhafte Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
on:use {
	msgbox "Garten","sys/scripts/butterflygarden.s2s";
}
on:build_finish {
	event "gardenbuild",0,0;
}
on:changeday {
	local $c;
	$c+=count_inrange("unit",6,250,"self");
	$c+=count_inrange("unit",7,250,"self");
	if ($c<3){
		create "unit",random(6,7),getx("self"),getz("self");
		if (random(2)==1){
			create "unit",random(6,7),getx("self"),getz("self");
		}
	}
}

Und hier eine korrigierte Fassung:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
on:use {
	msgbox "Garten","sys/scripts/butterflygarden.s2s";
}
on:build_finish {
	event "gardenbuild",0,0;
}
on:changeday {
	local $c;
	$c+=count_inrange("unit",6,250,"self");
	$c+=count_inrange("unit",7,250,"self");
	if ($c<3){
		create "unit",random(6,7),getx("self"),getz("self");
		if (random(2)==1){
			create "unit",random(6,7),getx("self"),getz("self");
		}
	}
	freevar $c;
}

Man beachte die vorletzte Zeile für die Fehlerbehebung.


Gruß, Nova
edited 1×, last 16.07.12 11:51:16 am

old Re: Bug Thread

DC
Admin Off Offline

Quote
Ohje, es ist tatsächlich ein Bug, ja.
Man könnte meinen, dass das local $c den Variablenwert zurücksetzt oder die Variable neu erstellt. Das ist aber nicht der Fall, wenn die Variable bereits existiert. Es sorgt lediglich dafür, dass die Variable als lokale Variable behandelt wird.

Ich habe beim Schreiben wohl selbst nicht bedacht, dass die Variable bestehen bleibt. Noch effektiver wäre es, sie nicht nur auf 0 zu setzen, sondern sie komplett zu löschen (s2 cmd freevar). So würde sie nicht in Spielständen gespeichert, was eh nur Platzverschwendung ist.

old Re: Bug Thread

Reaper
User Off Offline

Quote
user Hurri04 has written
EDIT:
habe gerade wieder eine lösung zu einem bug gefunden, der mir schon vor einiger zeit aufgefallen war:
und zwar geht es diesmal um den befehl s2 cmd getlocal, der bisher bisher beim auslösen des events, dem er untergeordnet war, in der konsole eine fehlermeldung ausspuckte.

hier ist mal der code, mit dem ich es ursprünglich versucht habe:
1
2
3
4
5
6
7
8
9
10
11
12
on:start {
	local "$bag_amount";
	$bag_amount=count("item", 1);
}
on:hit {
	$temp_class=currentclass();
	$temp_id=currentid();
	$glob_bag_amount=count("item", 1);
	setlocal "$temp_class", $temp_id, "$bag_amount", $glob_bag_amount;
	getlocal("item", $temp_id, "$bag_amount");
	msg "$bag_amount";
}

ich habe ein wenig herumexperimentiert und bin zu folgender lösung gekommen:
wenn man hinter der geschlossenen klammer beim s2 cmd getlocal -befehl noch zwei kommata anhängt, dann tritt das problem nicht mehr auf und das script funktioniert wunderbar:
1
2
3
4
5
6
7
8
9
10
11
12
on:start {
	local "$bag_amount";
	$bag_amount=count("item", 1);
}
on:hit {
	$temp_class=currentclass();
	$temp_id=currentid();
	$glob_bag_amount=count("item", 1);
	setlocal "$temp_class", $temp_id, "$bag_amount", $glob_bag_amount;
	getlocal("item", $temp_id, "$bag_amount"),,;		// HIER MÜSSEN ZWEI KOMMATA SEIN!
	msg "$bag_amount";
}


Ist zwar schon recht alt, aber hier noch eine andere Variante welche ebenfalls klappen sollte.

1
2
3
4
5
6
7
8
9
10
11
12
on:start {
	local $bag_amount;
	$bag_amount=count("item", 1);
}
on:hit {
	$temp_class=currentclass();
	$temp_id=currentid();
	$glob_bag_amount=count("item", 1);
	setlocal "$temp_class", $temp_id, "bag_amount", $glob_bag_amount;
	getlocal("item", $temp_id, "bag_amount");
	msg "$bag_amount";
}

old Re: Bug Thread

Hurri04
Super User Off Offline

Quote
soweit ich weiß, funktioniert das eben nicht.

der fehler war halt, dass der s2 cmd getlocal befehl auch funktionierte, wenn davor keine variable stand, also z.b.
1
$var=getlocal("item", $temp_id, "$bag_amount");

ich glaub das war dann irgendwie so, dass der wert in die zuletzt verwendete variable geschrieben wurde oder so, jedenfalls recht fragwürdig, ob man das normalerweise je so verwenden würde.

das ganze hatte ich damals auch nur rein zufällig entdeckt, aber natürlich nicht so in meiner modifikation verwendet. eigentlich versuche ich auch generell, die s2 cmd setlocal und s2 cmd getlocal befehle zu vermeiden. ich mein mich erinnern zu können, dass die recht viel leistung ziehen, wenn man sie schon nen paarmal auf einmal verwendet und manchmal gibts dann da andere lösungen, die effektiver sind

old Re: Bug Thread

Mc Leaf
Super User Off Offline

Quote
Das $-Zeichen beim dritten Parameter gehört dort aber nicht hin, oder...?

Naja, ich nutze die beiden Befehle ebenfalls so gut wie nie...

old Re: Bug Thread

Hurri04
Super User Off Offline

Quote
also ich weiß definitiv, dass man bei manchen befehlen, wo man laut befehlsreferenz einen variablen-namen angeben muss, entweder das $-zeichen hinschreiben oder weglassen kann, beispielsweise s2 cmd local.

andererseits gibt es auch 1 oder 2 befehle, bei denen mann es weglassen muss...

old Re: Bug Thread

Mc Leaf
Super User Off Offline

Quote
Ach so, nach einen kurzen Blick in den SC ist es mir jetzt auch klar. Variablen werden ja eh über ihre Bezeichnungen angesprochen. Und steht hier ein $ an erster Stelle, wird es intern einfach abgetrennt. In diesem Kontext macht es auch durchaus Sinn, da eh ein Variablenname erwartet wird. Anders bei Strings wie "I have $amount gold." o.ä.

Den Bug da oben (mit den beiden Kommata) schaue ich mir bei Gelegenheit auch noch einmal an...
To the start Previous 1 257 58 59 Next To the start
Log in to replyAllgemein overviewStranded II overviewForums overview