SQF-VM - An SQF Emulator

  • Sonstiges
  • SQF-VM - An SQF Emulator


    SQF-VM
    Der SQF Emulator
    Eine voll funktionstüchtige, open-source Virtual Machine für die Skriptsprache der ArmA Spiele.
    Links


    FAQ
    • Wie benutzt man das Ding?
      Um die SQF-VM zu starten, müssen Sie nur die Anwendung starten.
    • Wofür kann es verwendet werden (Beispiele)?
      Das offensichtlichste Beispiel ist: Sie benutzen einen Laptop auf Reisen und wollen SQF Code testen.Fortgeschrittene Benutzer könnten mithilfe des Tools auch Unit-Tests gestalten.
    • Gibt es Kommandozeilenparameter für z.B. Unit-Tests?
      Ja, gibt es. Starten Sie das Tool über die Kommandozeile und mit den Parameter -? um alle zu bekommen.
    • Was wird unterstützt?
      Um zu sehen, was in dem von Ihnen verwendeten Build unterstützt wird, verwenden Sie den Befehl "help_".
      Die Ausgabe für Version Alpha 0.1.4
      [spoiler]

      Quellcode

      1. NAME:TYPE:PRECEDENCE:USAGE
      2. SCALAR:t:0:(null)
      3. BOOL:t:0:(null)
      4. STRING:t:0:(null)
      5. WHILE:t:0:(null)
      6. GROUP:t:0:(null)
      7. SCRIPT:t:0:(null)
      8. COUNT__:t:0:(null)
      9. ARRAY:t:0:(null)
      10. NOTHING:t:0:(null)
      11. ANY:t:0:(null)
      12. NAMESPACE:t:0:(null)
      13. NaN:t:0:(null)
      14. IF:t:0:(null)
      15. SWITCH:t:0:(null)
      16. OBJECT:t:0:(null)
      17. CONFIG:t:0:(null)
      18. FOR:t:0:(null)
      19. CODE:t:0:(null)
      20. WITH:t:0:(null)
      21. SIDE:t:0:(null)
      22. true:n:4:true
      23. diag_tickTime:n:4:diag_tickTime
      24. help__:n:4:help__
      25. productVersion:n:4:productVersion
      26. independent:n:4:independent
      27. sideFriendly:n:4:sideFriendly
      28. missionNamespace:n:4:missionNamespace
      29. east:n:4:east
      30. civilian:n:4:civilian
      31. uiNamespace:n:4:uiNamespace
      32. configFile:n:4:nil
      33. profileNamespace:n:4:profileNamespace
      34. pi:n:4:pi
      35. parsingNamespace:n:4:parsingNamespace
      36. nil:n:4:nil
      37. sideLogic:n:4:sideLogic
      38. sideEnemy:n:4:sideEnemy
      39. sideEmpty:n:4:sideEmpty
      40. allGroups:n:4:allGroups
      41. objNull:n:4:objNull
      42. resistance:n:4:resistance
      43. blufor:n:4:blufor
      44. opfor:n:4:opfor
      45. sideUnknown:n:4:sideUnknown
      46. false:n:4:false
      47. west:n:4:west
      48. deg:u:4:deg <SCALAR>
      49. exp:u:4:exp <SCALAR>
      50. atan:u:4:atan <SCALAR>
      51. atg:u:4:atg <SCALAR>
      52. floor:u:4:floor <SCALAR>
      53. typeOf:u:4:typeOf <OBJECT>
      54. selectRandom:u:4:selectRandom <ARRAY>
      55. parseconfig__:u:4:parseconfig__ <STRING>
      56. getText:u:4:getText <CONFIG>
      57. tolower:u:4:tolower <STRING>
      58. help__:u:4:help__ <STRING>
      59. format:u:4:format <ARRAY>
      60. tan:u:4:tan <SCALAR>
      61. vectorNormalized:u:4:vectorNormalized <VECTOR3D>
      62. str:u:4:str <ANY>
      63. toupper:u:4:toupper <STRING>
      64. call:u:4:call <CODE>
      65. rad:u:4:rad <SCALAR>
      66. position:u:4:position <OBJECT>
      67. switch:u:4:switch <ANY>
      68. units:u:4:units <GROUP>
      69. for:u:4:for <STRING>
      70. acos:u:4:acos <SCALAR>
      71. !:u:4:! <BOOL>
      72. deleteGroup:u:4:deleteGroup <GROUP>
      73. ln:u:4:ln <SCALAR>
      74. case:u:4:case <ANY>
      75. with:u:4:with <NAMESPACE>
      76. toArray:u:4:toArray <STRING>
      77. isArray:u:4:isArray <CONFIG>
      78. isText:u:4:isText <CONFIG>
      79. typeName:u:4:typeName <ANY>
      80. sin:u:4:sin <SCALAR>
      81. random:u:4:random <SCALAR>
      82. toString:u:4:toString <ARRAY>
      83. diag_log:u:4:diag_log <ANY>
      84. if:u:4:if <BOOL>
      85. abs:u:4:abs <SCALAR>
      86. default:u:4:default <CODE>
      87. compile:u:4:compile <STRING>
      88. vectorMagnitude:u:4:vectorMagnitude <VECTOR3D>
      89. isNumber:u:4:isNumber <CONFIG>
      90. velocity:u:4:velocity <OBJECT>
      91. deleteVehicle:u:4:deleteVehicle <OBJECT>
      92. getNumber:u:4:getNumber <CONFIG>
      93. cos:u:4:cos <SCALAR>
      94. comment:u:4:comment <BOOL>
      95. isNil:u:4:isNil <STRING> | isNil <CODE>
      96. groupId:u:4:groupId <GROUP>
      97. while:u:4:while <CODE>
      98. count:u:4:count <STRING> | count <ARRAY>
      99. createGroup:u:4:createGroup <SIDE>
      100. sqrt:u:4:sqrt <SCALAR>
      101. inheritsFrom:u:4:inheritsFrom <CONFIG>
      102. isClass:u:4:isClass <CONFIG>
      103. +:u:4:+ <ARRAY> | + <SCALAR> | + <NaN>
      104. asin:u:4:asin <SCALAR>
      105. allVariables:u:4:allVariables <OBJECT> | allVariables <NAMESPACE> | allVariables <GROUP>
      106. getArray:u:4:getArray <CONFIG>
      107. ceil:u:4:ceil <SCALAR>
      108. round:u:4:round <SCALAR>
      109. -:u:4:- <SCALAR>
      110. getPos:u:4:getPos <OBJECT>
      111. private:u:4:private <STRING> | private <ARRAY>
      112. log:u:4:log <SCALAR>
      113. reverse:u:4:reverse <ARRAY>
      114. params:u:4:params <ARRAY>
      115. scriptDone:u:4:scriptDone <SCRIPT>
      116. systemChat:u:4:systemChat <STRING>
      117. hint:u:4:hint <STRING>
      118. vectorMagnitudeSqr:u:4:vectorMagnitudeSqr <VECTOR3D>
      119. do:b:4:<WHILE> do <CODE> | <FOR> do <CODE> | <WITH> do <CODE>
      120. >>:b:4:<CONFIG> >> <STRING>
      121. ==:b:3:<SCALAR> == <SCALAR> | <OBJECT> == <OBJECT> | <STRING> == <STRING>
      122. from:b:4:<FOR> from <SCALAR>
      123. mod:b:7:<SCALAR> mod <SCALAR>
      124. vectorMultiply:b:4:<VECTOR3D> ectorMultiply <SCALAR>
      125. vectorDistance:b:4:<VECTOR3D> vectorDistance <VECTOR3D>
      126. vectorDistanceSqr:b:4:<VECTOR3D> vectorDistanceSqr <VECTOR3D>
      127. vectorDiff:b:4:<VECTOR3D> vectorDiff <VECTOR3D>
      128. max:b:6:<SCALAR> max <SCALAR>
      129. !=:b:3:<SCALAR> != <SCALAR> | <OBJECT> != <OBJECT> | <STRING> != <STRING>
      130. spawn:b:4:<ANY> spawn <CODE>
      131. resize:b:4:<ARRAY> resize <SCALAR>
      132. vectorDotProduct:b:4:<VECTOR3D> vectorDotProduct <VECTOR3D>
      133. forEach:b:4:<CODE> forEach <ARRAY> | <COUNT> forEach <ARRAY>
      134. vectorAdd:b:4:<VECTOR3D> vectorAdd <VECTOR3D>
      135. vectorCos:b:4:<VECTOR3D> vectorCos <VECTOR3D>
      136. call:b:4:<ANY> call <CODE>
      137. getVariable:b:4:<NAMESPACE> getVariable <STRING> | <NAMESPACE> getVariable <ARRAY> | <OBJECT> getVariable <STRING> | <OBJECT> getVariable <ARRAY>
      138. createVehicle:b:4:<STRING> createVehicle <ARRAY>
      139. ::b:4:<SWITCH> : <CODE>
      140. createUnit:b:4:<GROUP> createUnit <ARRAY>
      141. deleteAt:b:4:<ARRAY> deleteAt <SCALAR>
      142. or:b:1:<BOOL> or <BOOL> | <BOOL> or <CODE>
      143. and:b:2:<BOOL> and <BOOL>
      144. to:b:4:<FOR> to <SCALAR>
      145. <:b:3:<SCALAR> < <SCALAR>
      146. isEqualType:b:4:<ANY> isEqualType <ANY>
      147. atan2:b:7:<SCALAR> atan2 <SCALAR>
      148. append:b:4:<ARRAY> append <ARRAY>
      149. >:b:3:<SCALAR> > <SCALAR>
      150. step:b:4:<FOR> step <SCALAR>
      151. :b:7:<SCALAR> <SCALAR>
      152. >=:b:3:<SCALAR> >= <SCALAR>
      153. ||:b:1:<BOOL> || <BOOL> | <BOOL> || <CODE>
      154. &&:b:2:<BOOL> && <BOOL> | <BOOL> && <CODE>
      155. set:b:4:<ARRAY> set <ANY>
      156. mergefrom__:b:4:<CONFIG> mergefrom__ <CONFIG>
      157. min:b:6:<SCALAR> min <SCALAR>
      158. pushBack:b:4:<ARRAY> pushBack <ANY>
      159. <=:b:3:<SCALAR> <= <SCALAR>
      160. select:b:10:<ARRAY> select <SCALAR> | <ARRAY> select <BOOL>
      161. count:b:4:<CODE> count <ARRAY> | <COUNT> count <STRING>
      162. *:b:7:<SCALAR> * <SCALAR>
      163. +:b:6:<SCALAR> + <SCALAR> | <STRING> + <STRING> | <ARRAY> + <ANY>
      164. ^:b:9:<SCALAR> ^ <SCALAR>
      165. -:b:6:<SCALAR> - <SCALAR> | <ARRAY> - <ARRAY>
      166. doMove:b:4:<OBJECT> doMove <ARRAY> | <ARRAY> doMove <ARRAY>
      167. find:b:4:<ARRAY> find <ANY>#<STRING> find <STRING>
      168. then:b:4:<IF> then <ARRAY>
      169. isEqualTo:b:4:<ANY> isEqualTo <ANY>
      170. exitWith:b:4:<IF> exitWith <CODE>
      171. /:b:7:<SCALAR> / <SCALAR> | <CONFIG> / <STRING>
      172. else:b:5:<CODE> else <CODE>
      173. setVariable:b:4:<NAMESPACE> setVariable <ARRAY> | <OBJECT> setVariable <ARRAY>
      174. setPos:b:4: <OBJECT> setPos <ARRAY>
      175. setVelocity:b:4: <OBJECT> setVelocity <ARRAY>
      176. params:b:4:<ANY> params <ARRAY>
      177. arrayIntersect:b:4:<ARRAY> arrayIntersect <ARRAY>
      178. vectorCrossProduct:b:4:<VECTOR3D> vectorCrossProduct <VECTOR3D>
      Alles anzeigen
      [/spoiler]
    • Ich habe SQF mit ungültiger Syntax eingegeben und die VM gibt Kauderwelsch aus
      Das Projekt zielt nicht darauf ab, eine eigentliche Syntaxprüfung durchzuführen.
      Das Tool selbst erwartet gültigen SQF-Code als Input.
      Eine ungültige Syntax kann zu ungültigen Ausführungs-Stacks führen.
    • Ich habe einen Fehler gefunden, was soll ich jetzt tun?
      Erstens: wenn es daran liegt, dass eine fehlerhafte Syntax nicht korrekt angezeigt wird, nichts.
      Sonst: Vergewissern Sie sich, dass alle verwendeten Befehle in Ihrer SQF-VM-Version tatsächlich unterstützt werden, indem Sie z.B. den Befehl help__ verwenden.
      Wenn es nicht durch eine ungültige Syntax oder einen fehlenden Befehl in der SQF-VM verursacht wird, versuchen Sie, das Problem so weit wie möglich einzugrenzen (minimales beispiel) und gehen Sie dann nach GitHub, um den Fehler zu melden.
      Die einzige Ausnahme ist ein Absturz!
      Crashes können Sie immer berichten:)
    • Ich habe eine Frage, die hier nicht beantwortet wird, was tun?
      Stellen Sie Ihre Frage in diesem Thread oder im Discord Channel und ich füge sie eventuell in das FAQ ein :)


    Downloads
    Alle Releases können auch auf Github gefunden werden.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von X39 () aus folgendem Grund: Alpha 0.1.44

  • github.com/X39/sqf-vm/releases/tag/0.1.2-alpha

    Quellcode

    1. Added more checks to FOR
    2. fix
    3. re-fixed endless attempt to parse empty blocks
    4. Added Switch case do
    5. Added ForEach
    6. fixed parser
    7. fix
    8. Moved OBJECT type into its own file
    9. fixed array parsing
    10. Fixed array order
    11. Added productversion
    12. added missing comparison types to ==, added !=
    13. Added velocity and setVelocity
    14. Added getPos, position and setPos
    15. Added typeOf
    16. added setVariable & getVariable
    17. malloc sizeof from pointer to actual struct
    18. fixed invalid malloc sizeof
    19. fixed copy-paste error
    20. Added createVehicle
    21. Added OBJECT type
    22. fixed last token getting proper textrange info
    23. fixed empty string not terminated segfault
    24. unterminated strings are no longer trimmed by 2 chars
    25. Added COUNT type to vm types
    Alles anzeigen
    Nächster release wird vermutlich sides & groups enthalten
  • Neu

    Released SQF-VM Standalone Alpha 0.1.4 (tool allowing you to run arbitrary sqf code) github.com/X39/sqf-vm/releases/tag/0.1.4-alpha
    As usual, the hint that the Discord-Server contains a bot that allows you to run the code inside of discord.

    Highlights of this version:
    • support for `spawn` (executed after the sync context of the VM is done, might suspend a script to give other scripts a chance to run)
    • support for config parsing (during runtime, use `configFile mergeFrom__ parseConfig__ "<YOUR CONFIG>"`)
    • Changes to the command line parameters (making old scripts possibly outdated)


    Changelog:

    Quellcode

    1. SCRIPT:t:0:(null)
    2. CONFIG:t:0:(null)
    3. configFile:n:4:nil
    4. selectRandom:u:4:selectRandom <ARRAY>
    5. getText:u:4:getText <CONFIG>
    6. tolower:u:4:tolower <STRING>
    7. vectorNormalized:u:4:vectorNormalized <VECTOR3D>
    8. toupper:u:4:toupper <STRING>
    9. isArray:u:4:isArray <CONFIG>
    10. isText:u:4:isText <CONFIG>
    11. vectorMagnitude:u:4:vectorMagnitude <VECTOR3D>
    12. isNumber:u:4:isNumber <CONFIG>
    13. getNumber:u:4:getNumber <CONFIG>
    14. inheritsFrom:u:4:inheritsFrom <CONFIG>
    15. isClass:u:4:isClass <CONFIG>
    16. getArray:u:4:getArray <CONFIG>
    17. reverse:u:4:reverse <ARRAY>
    18. scriptDone:u:4:scriptDone <SCRIPT>
    19. vectorMagnitudeSqr:u:4:vectorMagnitudeSqr <VECTOR3D>
    20. >>:b:4:<CONFIG> >> <STRING>
    21. vectorMultiply:b:4:<VECTOR3D> ectorMultiply <SCALAR>
    22. vectorDistance:b:4:<VECTOR3D> vectorDistance <VECTOR3D>
    23. vectorDistanceSqr:b:4:<VECTOR3D> vectorDistanceSqr <VECTOR3D>
    24. vectorDiff:b:4:<VECTOR3D> vectorDiff <VECTOR3D>
    25. spawn:b:4:<ANY> spawn <CODE>
    26. resize:b:4:<ARRAY> resize <SCALAR>
    27. vectorDotProduct:b:4:<VECTOR3D> vectorDotProduct <VECTOR3D>
    28. vectorAdd:b:4:<VECTOR3D> vectorAdd <VECTOR3D>
    29. vectorCos:b:4:<VECTOR3D> vectorCos <VECTOR3D>
    30. createUnit:b:4:<GROUP> createUnit <ARRAY>
    31. deleteAt:b:4:<ARRAY> deleteAt <SCALAR>
    32. append:b:4:<ARRAY> append <ARRAY>
    33. find:b:4:<ARRAY> find <ANY>#<STRING> find <STRING>
    34. exitWith:b:4:<IF> exitWith <CODE>
    35. /:b:7:<SCALAR> / <SCALAR> | <CONFIG> / <STRING>
    36. arrayIntersect:b:4:<ARRAY> arrayIntersect <ARRAY>
    37. vectorCrossProduct:b:4:<VECTOR3D> vectorCrossProduct <VECTOR3D>
    38. mergefrom__:b:4:<CONFIG> mergefrom__ <CONFIG>
    39. parseconfig__:u:4:parseconfig__ <STRING>
    Alles anzeigen