Autor Thema: AGS 3.1.2 SP1 Script Parsing Bug  (Gelesen 3186 mal)

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2676
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
AGS 3.1.2 SP1 Script Parsing Bug
« am: 05. September 2010, 22:01:26 »
AGS hat probleme beim parsen von mathematischen ausdrücken
ist das schon jemanden aufgefallen?

   player.Say("%d", 100 + (10 - 20) - 30);    -> 60 (passt)
   player.Say("%d", 100 + 10 - 20 - 30);   -> 120 (WTF?!?)

 :o
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

Rocco

  • Administrator
  • alter Tentakel
  • *****
  • Beiträge: 2372
  • Geschlecht: Männlich
    • Profil anzeigen
    • Maniac Mansion Mania
    • E-Mail
Re: AGS 3.1.2 SP1 Script Parsing Bug
« Antwort #1 am: 05. September 2010, 22:12:25 »
Ja leider, hatte auch schon Probleme damit.
Ich klammere sowieso immer alles zur Sicherheit, aber selbst da kann es noch zu Problemen kommen.
Letztens hatte ich so einen Fall, wo mir dann im AGS Forum geholfen wurde.

Zitat von: CShelton
Minus variable name does work but it gets weird with the order of operations when a multiply comes just before it.

variable1 * -variable2Will totally flake out, so do this instead:

-variable2 * variable1

rulaman

  • Moderator
  • Teenie Tentakel
  • *****
  • Beiträge: 355
  • Geschlecht: Männlich
    • Profil anzeigen
Re: AGS 3.1.2 SP1 Script Parsing Bug
« Antwort #2 am: 06. September 2010, 08:31:33 »
[...]
   player.Say("%d", 100 + 10 - 20 - 30);   -> 120 (WTF?!?)
[...]


Ohne Klammern rechnet AGS von rechts nach links.
also
20-30 = -10=> 100 + 10 - (-10)
10- (-10) = 20=> 100 + 20
100 + 20 = 120

Folglich kommt richtig 120 heraus


Laut Handbuch-Auszug zu Operators:

WARNING: When using operators of equal precedence, AGS by default evaluates them right-to-left. So, the expression a = 5 - 4 - 2;
evaluates as a = 5 - (4 - 2); which is not what you might expect. Always use parenthesis to make it clear what you want.
The "Left-to-right operator precedence" option on the General Settings pane allows you to control this behaviour.


Baden ist die einzige Möglichkeit, den Dreck der Füße an den Hals zu bekommen.

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2676
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
Re: AGS 3.1.2 SP1 Script Parsing Bug
« Antwort #3 am: 06. September 2010, 09:54:10 »
ok, das bedeutet also, CJ weiß dass AGS da mathematisch falsch rechnet und hat aus bequemlichkeit heraus einfach einen hinweis in die hilfe geschrieben und den bug dann später ausgebessert
und jetzt ist das verhalten zwecks kompatibilität zu beretis mit dem fehler gescripteten spielen einstellbar

naja, wissen muss man es halt, aber solange es gratis ist kann ich auch mit so einer pseudolösung leben
hab da aber nicht damit gerechnet, dass es bug-beschreibungen in der hilfe gibt  ;)

aber mal schaun, so eine game option für links-rechts statt rechts-links wär mir noch gar nicht aufgefallen...
aber eigentlich hätte die default einstellung wohl doch besser auf links-rechts eingestellt sein sollen  ::)
« Letzte Änderung: 06. September 2010, 09:58:22 von Bòógieman »
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: AGS 3.1.2 SP1 Script Parsing Bug
« Antwort #4 am: 06. September 2010, 11:59:45 »
Das ist kein bug sondern Standard bei Programmiersprachen. Soweit ich weiß, liegt das daran, dass die einzelnen Bestandteile von links nach rechts auf einen Stapel gelegt werden und dieser dann von oben abgearbeitet wird.
AGS bietet halt zusätzlich die Möglichkeit, die Verarbeitungsrichtung umzudrehen, aber das ist eher ein Bonus, keine Übertünchung einer Schwäche.

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2676
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
Re: AGS 3.1.2 SP1 Script Parsing Bug
« Antwort #5 am: 06. September 2010, 12:25:29 »
Das ist kein bug sondern Standard bei Programmiersprachen.
sorry, aber das stimmt ganz einfach nicht  ::)
standard bei programmiersprachen ist in diesem fall mathematisch korrekt, sprich punktrechnung vor strichrechnung sowie + und - werden auch ohne klammern richtig erkannt (wie das intern verarbeitet wird ist ziemlich egal)
kann natürlich sein, dass diverse compiler sowas einstellen lassen, aber das wäre die ausnahme vom standard

ich behaupte jetzt nicht alle programmiersprachen zu kennen, aber ich beherrsche einige als ausgebildeter programmierer mit jahrelanger berufspraxis und dem hobby programmieren  ;)

und dieses verhalten weicht eindeutig vom standard ab und wäre mir bisher auch noch nie untergekommen

aber versteht mich nicht falsch, ich will hier nicht gegen AGS wettern
ich verstehe CJ's beweggründe schon, ich war gestern halt nur am verzweifeln, da AGS sich nicht wie erwartet verhalten hat

wenn ich mir ein auto kaufe, den rückwärtsgang einlege und das auto da vorwärts gegen einen baum fährt, gehe ich auch zum händler und rege mich über den defekt des autos auf
auch wenn vielleicht in der 1000-seiten betriebsanleitung drinsteht, dass man das gaspedal zurückziehen muss, damit das auto weiß, dass man rückwärts fahren will ;D
bei sowas liest man sich das nicht extra durch, da man das verhalten erwartet, das alle anderen autos auch haben   ;)
« Letzte Änderung: 06. September 2010, 12:59:40 von Bòógieman »
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: AGS 3.1.2 SP1 Script Parsing Bug
« Antwort #6 am: 30. September 2010, 13:51:14 »
Hab mit 2.72(!) ein default game geöffnet; dort ist left-to-right die Standardeinstellung.

Das ist inzwischen sicher auch bei anderen Hochsprachen so, war früher aber eben anders. Wenn AGS lange right-to-left als default hatte, dann aus Gründen der Rückwärtskompatibilität (anscheinend bis 2.6x).

Ich verstehe Deinen Frust, weil ich mal annehme, dass Du lange nach dem Fehler woanders gesucht hast, aber der Vergleich mit dem Rückwärtsgang ist schon bissl übertrieben, oder? ;)

Scheint jedenfalls, als wäre diese Einstellung aus einem alten Starterpack.

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2676
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
Re: AGS 3.1.2 SP1 Script Parsing Bug
« Antwort #7 am: 30. September 2010, 14:11:00 »
ist halt gemein eine skriptsprache zu machen, die einen C-artigen syntax hat, aber sich dann anders verhält  :P

aber im endeffekt kann CJ ja machen was er will, ist sein seine skriptsprache  ;)

Scheint jedenfalls, als wäre diese Einstellung aus einem alten Starterpack.
da hast du wohl recht, da das spiel auf dem villa-template für 2.X basiert
« Letzte Änderung: 30. September 2010, 14:13:36 von Bòógieman »
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<