German Bug Thread

1,167 replies
Goto Page
To the start Previous 1 2 ... 57 58 59 Next To the start
31.05.10 06:00:33 pm
Up
Nova
User
Offline Off
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.
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
31.05.10 06:23:05 pm
Up
Westbeam
User
Offline Off
Oh, tatsächlich. Ich dachte, er hatte CS2D geschrieben. Sry
18.11.10 12:52:04 pm
Up
Nova
User
Offline Off
Funktioniert:
Code:
1
$test = int ($bla -0.5);

Funktioniert nicht (Mismatched brackets):
Code:
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.
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
18.11.10 03:19:54 pm
Up
Hurri04
Super User
Offline Off
hmm, funktioniert denn beispielsweise das hier:
Code:
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.
18.11.10 06:24:20 pm
Up
Nova
User
Offline Off
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:
Code:
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.
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
18.11.10 06:31:19 pm
Up
Hurri04
Super User
Offline Off
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
18.11.10 06:37:53 pm
Up
Nova
User
Offline Off
Ja, genau so hatte ich vor es zu umgehen.
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
23.11.10 07:46:53 am
Up
ump5master
User
Offline Off
Bug gefunden!
Wenn ich tauch und dann beim tauchen angel, friert die Luftanzeige ein... sie sinkt erst wieder nach dem Angelprozess.

Hoffentlich richtiger Thread...
usmp5master
23.11.10 09:09:46 am
Up
Nova
User
Offline Off
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.
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
30.11.10 08:17:30 pm
Up
Mc Leaf
Super User
Offline Off
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...
user DC has written:
I'm actually working on Stranded III now with highest priority even though I said that I planned to release the next CC update first.
14.07.12 04:04:36 pm
Up
Nova
User
Offline Off
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:
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:
Code:
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
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
16.07.12 12:28:48 am
Up
Mr Stranded
User
Offline Off
Siehe "local $c;" am Anfang des Changeday-Events.

mfg
Ich entwickle momentan ein eigenes Spiel namens Irnithal. (Das war schon der Name eines früheren Projekts) Der Worklog
16.07.12 06:58:49 am
Up
Nova
User
Offline Off
Was ist damit user Mr Stranded?
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
16.07.12 11:40:37 am
Up
DC
Admin
Offline Off
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.
www.UnrealSoftware.de | www.CS2D.com | www.CarnageContest.com | Use the forum & avoid PMs!
16.07.12 11:52:12 am
Up
Nova
User
Offline Off
Okay, habe die Fehlerbehebung mal durch s2 cmd freevar ersetzt.
Hexenverbrennung, Inquisition, Kreuzzüge... Wir wissen, wie man feiert! - Ihre Kirche
06.09.12 12:16:27 am
Up
Reaper
User
Offline Off
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:
Code:
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:
Code:
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.

Code:
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";
}
www.cs2d.me has launched - Join Now *CLOSED*
06.09.12 01:15:11 am
Up
Hurri04
Super User
Offline Off
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.
Code:
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
06.09.12 02:08:51 am
Up
Mc Leaf
Super User
Offline Off
Das $-Zeichen beim dritten Parameter gehört dort aber nicht hin, oder...?

Naja, ich nutze die beiden Befehle ebenfalls so gut wie nie...
user DC has written:
I'm actually working on Stranded III now with highest priority even though I said that I planned to release the next CC update first.
06.09.12 02:41:37 am
Up
Hurri04
Super User
Offline Off
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...
06.09.12 07:05:47 am
Up
Mc Leaf
Super User
Offline Off
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...
user DC has written:
I'm actually working on Stranded III now with highest priority even though I said that I planned to release the next CC update first.
To the start Previous 1 2 ... 57 58 59 Next To the start