redscript-mc 2.6.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/.github/workflows/ci.yml +11 -0
  2. package/CHANGELOG.md +18 -9
  3. package/README-benchmarks.md +48 -0
  4. package/README-vscode-test.md +251 -0
  5. package/RELEASE_NOTES.md +74 -0
  6. package/ROADMAP.md +131 -167
  7. package/benchmarks/_shared.ts +468 -0
  8. package/benchmarks/baseline.json +2816 -0
  9. package/benchmarks/baseline.md +13 -0
  10. package/benchmarks/compiler-perf.report.json +207 -0
  11. package/benchmarks/compiler-perf.ts +76 -0
  12. package/benchmarks/results.md +13 -0
  13. package/benchmarks/stdlib-complexity.report.json +2606 -0
  14. package/benchmarks/stdlib-complexity.ts +54 -0
  15. package/benchmarks/stdlib-size.md +57 -0
  16. package/benchmarks/stdlib-size.ts +91 -0
  17. package/coverage-report.md +177 -0
  18. package/dist/src/__tests__/budget.test.js +4 -0
  19. package/dist/src/__tests__/cache/cache-behavior.test.d.ts +10 -0
  20. package/dist/src/__tests__/cache/cache-behavior.test.js +425 -0
  21. package/dist/src/__tests__/cache-extra.test.d.ts +5 -0
  22. package/dist/src/__tests__/cache-extra.test.js +211 -0
  23. package/dist/src/__tests__/cli-init.test.d.ts +1 -0
  24. package/dist/src/__tests__/cli-init.test.js +97 -0
  25. package/dist/src/__tests__/cli-publish.test.d.ts +9 -0
  26. package/dist/src/__tests__/cli-publish.test.js +189 -0
  27. package/dist/src/__tests__/cli.test.js +76 -0
  28. package/dist/src/__tests__/compile-preprocess.test.d.ts +11 -0
  29. package/dist/src/__tests__/compile-preprocess.test.js +328 -0
  30. package/dist/src/__tests__/compiler/break-stmt.test.d.ts +1 -0
  31. package/dist/src/__tests__/compiler/break-stmt.test.js +58 -0
  32. package/dist/src/__tests__/compiler/const-decl.test.d.ts +1 -0
  33. package/dist/src/__tests__/compiler/const-decl.test.js +123 -0
  34. package/dist/src/__tests__/compiler/continue-stmt.test.d.ts +1 -0
  35. package/dist/src/__tests__/compiler/continue-stmt.test.js +67 -0
  36. package/dist/src/__tests__/compiler/coroutine-extended.test.d.ts +17 -0
  37. package/dist/src/__tests__/compiler/coroutine-extended.test.js +565 -0
  38. package/dist/src/__tests__/compiler/deprecated.test.d.ts +4 -0
  39. package/dist/src/__tests__/compiler/deprecated.test.js +285 -0
  40. package/dist/src/__tests__/compiler/do-while.test.d.ts +1 -0
  41. package/dist/src/__tests__/compiler/do-while.test.js +120 -0
  42. package/dist/src/__tests__/compiler/enum-payload.test.d.ts +9 -0
  43. package/dist/src/__tests__/compiler/enum-payload.test.js +272 -0
  44. package/dist/src/__tests__/compiler/interface.test.d.ts +10 -0
  45. package/dist/src/__tests__/compiler/interface.test.js +258 -0
  46. package/dist/src/__tests__/compiler/labeled-loops.test.d.ts +1 -0
  47. package/dist/src/__tests__/compiler/labeled-loops.test.js +263 -0
  48. package/dist/src/__tests__/compiler/match-string.test.d.ts +1 -0
  49. package/dist/src/__tests__/compiler/match-string.test.js +43 -0
  50. package/dist/src/__tests__/compiler/memoize.test.d.ts +1 -0
  51. package/dist/src/__tests__/compiler/memoize.test.js +113 -0
  52. package/dist/src/__tests__/compiler/method-chain.test.d.ts +5 -0
  53. package/dist/src/__tests__/compiler/method-chain.test.js +115 -0
  54. package/dist/src/__tests__/compiler/module-import.test.d.ts +12 -0
  55. package/dist/src/__tests__/compiler/module-import.test.js +261 -0
  56. package/dist/src/__tests__/compiler/option-extensions.test.d.ts +6 -0
  57. package/dist/src/__tests__/compiler/option-extensions.test.js +191 -0
  58. package/dist/src/__tests__/compiler/profile-decorator.test.d.ts +1 -0
  59. package/dist/src/__tests__/compiler/profile-decorator.test.js +69 -0
  60. package/dist/src/__tests__/compiler/string-advanced.test.d.ts +7 -0
  61. package/dist/src/__tests__/compiler/string-advanced.test.js +281 -0
  62. package/dist/src/__tests__/compiler/struct-extends.test.d.ts +1 -0
  63. package/dist/src/__tests__/compiler/struct-extends.test.js +95 -0
  64. package/dist/src/__tests__/compiler/throttle-retry.test.d.ts +1 -0
  65. package/dist/src/__tests__/compiler/throttle-retry.test.js +166 -0
  66. package/dist/src/__tests__/compiler/tuple-type.test.d.ts +10 -0
  67. package/dist/src/__tests__/compiler/tuple-type.test.js +229 -0
  68. package/dist/src/__tests__/compiler/watch-decorator.test.d.ts +1 -0
  69. package/dist/src/__tests__/compiler/watch-decorator.test.js +65 -0
  70. package/dist/src/__tests__/config/project-config.test.d.ts +1 -0
  71. package/dist/src/__tests__/config/project-config.test.js +199 -0
  72. package/dist/src/__tests__/config-decorator.test.d.ts +8 -0
  73. package/dist/src/__tests__/config-decorator.test.js +142 -0
  74. package/dist/src/__tests__/diagnostics-extra.test.d.ts +6 -0
  75. package/dist/src/__tests__/diagnostics-extra.test.js +132 -0
  76. package/dist/src/__tests__/emit/compile-branches.test.d.ts +1 -0
  77. package/dist/src/__tests__/emit/compile-branches.test.js +123 -0
  78. package/dist/src/__tests__/emit/compile-coverage.test.d.ts +25 -0
  79. package/dist/src/__tests__/emit/compile-coverage.test.js +617 -0
  80. package/dist/src/__tests__/emit/compile-extra-branches.test.d.ts +12 -0
  81. package/dist/src/__tests__/emit/compile-extra-branches.test.js +225 -0
  82. package/dist/src/__tests__/emit/compile-mocked-branches.test.d.ts +0 -0
  83. package/dist/src/__tests__/emit/compile-mocked-branches.test.js +238 -0
  84. package/dist/src/__tests__/emit/execute-chain.test.d.ts +10 -0
  85. package/dist/src/__tests__/emit/execute-chain.test.js +94 -0
  86. package/dist/src/__tests__/emit/index.test.js +2 -1
  87. package/dist/src/__tests__/emit/modules-branches.test.d.ts +1 -0
  88. package/dist/src/__tests__/emit/modules-branches.test.js +88 -0
  89. package/dist/src/__tests__/emit/modules-coverage.test.d.ts +15 -0
  90. package/dist/src/__tests__/emit/modules-coverage.test.js +221 -0
  91. package/dist/src/__tests__/emit/modules-errors.test.d.ts +12 -0
  92. package/dist/src/__tests__/emit/modules-errors.test.js +169 -0
  93. package/dist/src/__tests__/emit/modules-rewrite.test.d.ts +17 -0
  94. package/dist/src/__tests__/emit/modules-rewrite.test.js +204 -0
  95. package/dist/src/__tests__/emit/source-map.test.d.ts +1 -0
  96. package/dist/src/__tests__/emit/source-map.test.js +167 -0
  97. package/dist/src/__tests__/enum.test.js +9 -4
  98. package/dist/src/__tests__/error-recovery.test.d.ts +7 -0
  99. package/dist/src/__tests__/error-recovery.test.js +217 -0
  100. package/dist/src/__tests__/events-types-extra.test.d.ts +10 -0
  101. package/dist/src/__tests__/events-types-extra.test.js +91 -0
  102. package/dist/src/__tests__/events-types.test.d.ts +4 -0
  103. package/dist/src/__tests__/events-types.test.js +56 -0
  104. package/dist/src/__tests__/formatter.test.js +13 -5
  105. package/dist/src/__tests__/hir/lower-extra.test.d.ts +9 -0
  106. package/dist/src/__tests__/hir/lower-extra.test.js +140 -0
  107. package/dist/src/__tests__/hir/monomorphize-extra.test.d.ts +15 -0
  108. package/dist/src/__tests__/hir/monomorphize-extra.test.js +200 -0
  109. package/dist/src/__tests__/hir/monomorphize-extra2.test.d.ts +16 -0
  110. package/dist/src/__tests__/hir/monomorphize-extra2.test.js +316 -0
  111. package/dist/src/__tests__/incremental.test.js +10 -2
  112. package/dist/src/__tests__/index-extra.test.d.ts +10 -0
  113. package/dist/src/__tests__/index-extra.test.js +71 -0
  114. package/dist/src/__tests__/lexer.test.js +2 -2
  115. package/dist/src/__tests__/lint/rules.test.d.ts +5 -0
  116. package/dist/src/__tests__/lint/rules.test.js +208 -0
  117. package/dist/src/__tests__/lir/lower.test.js +29 -0
  118. package/dist/src/__tests__/lir/verify.test.js +30 -0
  119. package/dist/src/__tests__/lsp/completion.test.d.ts +7 -0
  120. package/dist/src/__tests__/lsp/completion.test.js +583 -0
  121. package/dist/src/__tests__/lsp/definition.test.d.ts +7 -0
  122. package/dist/src/__tests__/lsp/definition.test.js +454 -0
  123. package/dist/src/__tests__/lsp/diagnostics.test.d.ts +10 -0
  124. package/dist/src/__tests__/lsp/diagnostics.test.js +98 -0
  125. package/dist/src/__tests__/lsp/hover-docs.test.d.ts +10 -0
  126. package/dist/src/__tests__/lsp/hover-docs.test.js +210 -0
  127. package/dist/src/__tests__/lsp.test.js +4 -1
  128. package/dist/src/__tests__/mc-integration/item-entity-events.test.js +4 -0
  129. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +4 -0
  130. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.d.ts +13 -0
  131. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1227 -0
  132. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.d.ts +13 -0
  133. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1509 -0
  134. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.d.ts +14 -0
  135. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1374 -0
  136. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.d.ts +10 -0
  137. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +759 -0
  138. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.d.ts +13 -0
  139. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +855 -0
  140. package/dist/src/__tests__/mc-integration/stdlib-coverage.test.js +4 -0
  141. package/dist/src/__tests__/mc-integration/syntax-coverage.test.js +4 -0
  142. package/dist/src/__tests__/mc-validator-coverage.test.d.ts +13 -0
  143. package/dist/src/__tests__/mc-validator-coverage.test.js +296 -0
  144. package/dist/src/__tests__/mc-validator-extra.test.d.ts +13 -0
  145. package/dist/src/__tests__/mc-validator-extra.test.js +245 -0
  146. package/dist/src/__tests__/mir/lower-extra.test.d.ts +20 -0
  147. package/dist/src/__tests__/mir/lower-extra.test.js +361 -0
  148. package/dist/src/__tests__/mir/lower-extra2.test.d.ts +17 -0
  149. package/dist/src/__tests__/mir/lower-extra2.test.js +317 -0
  150. package/dist/src/__tests__/mir/lower-extra3.test.d.ts +19 -0
  151. package/dist/src/__tests__/mir/lower-extra3.test.js +249 -0
  152. package/dist/src/__tests__/mir/lower-extra4.test.d.ts +23 -0
  153. package/dist/src/__tests__/mir/lower-extra4.test.js +606 -0
  154. package/dist/src/__tests__/mir/lower-extra5.test.d.ts +25 -0
  155. package/dist/src/__tests__/mir/lower-extra5.test.js +543 -0
  156. package/dist/src/__tests__/mir/lower-extra6.test.d.ts +16 -0
  157. package/dist/src/__tests__/mir/lower-extra6.test.js +471 -0
  158. package/dist/src/__tests__/mir/lower-extra7.test.d.ts +35 -0
  159. package/dist/src/__tests__/mir/lower-extra7.test.js +921 -0
  160. package/dist/src/__tests__/mir/lower-extra8.test.d.ts +19 -0
  161. package/dist/src/__tests__/mir/lower-extra8.test.js +626 -0
  162. package/dist/src/__tests__/mir/lower-extra9.test.d.ts +14 -0
  163. package/dist/src/__tests__/mir/lower-extra9.test.js +717 -0
  164. package/dist/src/__tests__/optimizer/auto-inline.test.d.ts +1 -0
  165. package/dist/src/__tests__/optimizer/auto-inline.test.js +176 -0
  166. package/dist/src/__tests__/optimizer/cse.test.d.ts +4 -0
  167. package/dist/src/__tests__/optimizer/cse.test.js +178 -0
  168. package/dist/src/__tests__/optimizer/inline_fn.test.d.ts +1 -0
  169. package/dist/src/__tests__/optimizer/inline_fn.test.js +221 -0
  170. package/dist/src/__tests__/optimizer/licm.test.d.ts +1 -0
  171. package/dist/src/__tests__/optimizer/licm.test.js +244 -0
  172. package/dist/src/__tests__/optimizer/optimizer-extended.test.d.ts +12 -0
  173. package/dist/src/__tests__/optimizer/optimizer-extended.test.js +993 -0
  174. package/dist/src/__tests__/optimizer/strength-reduction.test.d.ts +1 -0
  175. package/dist/src/__tests__/optimizer/strength-reduction.test.js +86 -0
  176. package/dist/src/__tests__/optimizer/tco.test.d.ts +14 -0
  177. package/dist/src/__tests__/optimizer/tco.test.js +203 -0
  178. package/dist/src/__tests__/parser-coverage.test.d.ts +25 -0
  179. package/dist/src/__tests__/parser-coverage.test.js +491 -0
  180. package/dist/src/__tests__/parser-extra.test.d.ts +6 -0
  181. package/dist/src/__tests__/parser-extra.test.js +451 -0
  182. package/dist/src/__tests__/parser.test.js +12 -0
  183. package/dist/src/__tests__/repl-extra.test.d.ts +13 -0
  184. package/dist/src/__tests__/repl-extra.test.js +174 -0
  185. package/dist/src/__tests__/repl-server-extra.test.d.ts +10 -0
  186. package/dist/src/__tests__/repl-server-extra.test.js +161 -0
  187. package/dist/src/__tests__/repl-server.test.d.ts +6 -0
  188. package/dist/src/__tests__/repl-server.test.js +146 -0
  189. package/dist/src/__tests__/runtime-extra.test.d.ts +15 -0
  190. package/dist/src/__tests__/runtime-extra.test.js +732 -0
  191. package/dist/src/__tests__/singleton-decorator.test.d.ts +11 -0
  192. package/dist/src/__tests__/singleton-decorator.test.js +260 -0
  193. package/dist/src/__tests__/sourcemap.test.js +1 -1
  194. package/dist/src/__tests__/stdlib/advanced.test.d.ts +5 -0
  195. package/dist/src/__tests__/stdlib/advanced.test.js +301 -0
  196. package/dist/src/__tests__/stdlib/bigint.test.d.ts +4 -0
  197. package/dist/src/__tests__/stdlib/bigint.test.js +83 -0
  198. package/dist/src/__tests__/stdlib/bits.test.d.ts +4 -0
  199. package/dist/src/__tests__/stdlib/bits.test.js +96 -0
  200. package/dist/src/__tests__/stdlib/bossbar.test.d.ts +4 -0
  201. package/dist/src/__tests__/stdlib/bossbar.test.js +72 -0
  202. package/dist/src/__tests__/stdlib/color.test.d.ts +4 -0
  203. package/dist/src/__tests__/stdlib/color.test.js +84 -0
  204. package/dist/src/__tests__/stdlib/combat.test.d.ts +4 -0
  205. package/dist/src/__tests__/stdlib/combat.test.js +64 -0
  206. package/dist/src/__tests__/stdlib/cooldown.test.d.ts +4 -0
  207. package/dist/src/__tests__/stdlib/cooldown.test.js +64 -0
  208. package/dist/src/__tests__/stdlib/dialog.test.js +15 -7
  209. package/dist/src/__tests__/stdlib/ecs.test.d.ts +4 -0
  210. package/dist/src/__tests__/stdlib/ecs.test.js +81 -0
  211. package/dist/src/__tests__/stdlib/effects.test.d.ts +4 -0
  212. package/dist/src/__tests__/stdlib/effects.test.js +72 -0
  213. package/dist/src/__tests__/stdlib/events.test.d.ts +4 -0
  214. package/dist/src/__tests__/stdlib/events.test.js +55 -0
  215. package/dist/src/__tests__/stdlib/expr.test.d.ts +4 -0
  216. package/dist/src/__tests__/stdlib/expr.test.js +77 -0
  217. package/dist/src/__tests__/stdlib/fft.test.d.ts +4 -0
  218. package/dist/src/__tests__/stdlib/fft.test.js +82 -0
  219. package/dist/src/__tests__/stdlib/graph.test.d.ts +4 -0
  220. package/dist/src/__tests__/stdlib/graph.test.js +102 -0
  221. package/dist/src/__tests__/stdlib/interactions.test.d.ts +4 -0
  222. package/dist/src/__tests__/stdlib/interactions.test.js +60 -0
  223. package/dist/src/__tests__/stdlib/inventory.test.d.ts +4 -0
  224. package/dist/src/__tests__/stdlib/inventory.test.js +68 -0
  225. package/dist/src/__tests__/stdlib/linalg.test.d.ts +5 -0
  226. package/dist/src/__tests__/stdlib/linalg.test.js +78 -0
  227. package/dist/src/__tests__/stdlib/map.test.d.ts +1 -0
  228. package/dist/src/__tests__/stdlib/map.test.js +84 -0
  229. package/dist/src/__tests__/stdlib/math.test.js +19 -6
  230. package/dist/src/__tests__/stdlib/math_hp.test.d.ts +4 -0
  231. package/dist/src/__tests__/stdlib/math_hp.test.js +80 -0
  232. package/dist/src/__tests__/stdlib/mobs.test.d.ts +4 -0
  233. package/dist/src/__tests__/stdlib/mobs.test.js +61 -0
  234. package/dist/src/__tests__/stdlib/noise.test.d.ts +4 -0
  235. package/dist/src/__tests__/stdlib/noise.test.js +73 -0
  236. package/dist/src/__tests__/stdlib/ode.test.d.ts +4 -0
  237. package/dist/src/__tests__/stdlib/ode.test.js +68 -0
  238. package/dist/src/__tests__/stdlib/parabola.test.d.ts +4 -0
  239. package/dist/src/__tests__/stdlib/parabola.test.js +77 -0
  240. package/dist/src/__tests__/stdlib/particles.test.d.ts +4 -0
  241. package/dist/src/__tests__/stdlib/particles.test.js +68 -0
  242. package/dist/src/__tests__/stdlib/physics.test.d.ts +4 -0
  243. package/dist/src/__tests__/stdlib/physics.test.js +76 -0
  244. package/dist/src/__tests__/stdlib/player.test.d.ts +4 -0
  245. package/dist/src/__tests__/stdlib/player.test.js +64 -0
  246. package/dist/src/__tests__/stdlib/quaternion.test.d.ts +4 -0
  247. package/dist/src/__tests__/stdlib/quaternion.test.js +73 -0
  248. package/dist/src/__tests__/stdlib/queue.test.d.ts +1 -0
  249. package/dist/src/__tests__/stdlib/queue.test.js +97 -0
  250. package/dist/src/__tests__/stdlib/random.test.d.ts +4 -0
  251. package/dist/src/__tests__/stdlib/random.test.js +76 -0
  252. package/dist/src/__tests__/stdlib/result.test.d.ts +12 -0
  253. package/dist/src/__tests__/stdlib/result.test.js +329 -0
  254. package/dist/src/__tests__/stdlib/scheduler.test.js +19 -8
  255. package/dist/src/__tests__/stdlib/set_int.test.d.ts +1 -0
  256. package/dist/src/__tests__/stdlib/set_int.test.js +88 -0
  257. package/dist/src/__tests__/stdlib/sets.test.d.ts +6 -0
  258. package/dist/src/__tests__/stdlib/sets.test.js +60 -0
  259. package/dist/src/__tests__/stdlib/signal.test.d.ts +4 -0
  260. package/dist/src/__tests__/stdlib/signal.test.js +84 -0
  261. package/dist/src/__tests__/stdlib/spawn.test.d.ts +4 -0
  262. package/dist/src/__tests__/stdlib/spawn.test.js +68 -0
  263. package/dist/src/__tests__/stdlib/string.test.d.ts +12 -0
  264. package/dist/src/__tests__/stdlib/string.test.js +231 -0
  265. package/dist/src/__tests__/stdlib/strings.test.d.ts +4 -0
  266. package/dist/src/__tests__/stdlib/strings.test.js +83 -0
  267. package/dist/src/__tests__/stdlib/tags.test.d.ts +4 -0
  268. package/dist/src/__tests__/stdlib/tags.test.js +57 -0
  269. package/dist/src/__tests__/stdlib/teams.test.d.ts +4 -0
  270. package/dist/src/__tests__/stdlib/teams.test.js +72 -0
  271. package/dist/src/__tests__/stdlib/timer.test.d.ts +4 -0
  272. package/dist/src/__tests__/stdlib/timer.test.js +79 -0
  273. package/dist/src/__tests__/stdlib/vec.test.d.ts +5 -0
  274. package/dist/src/__tests__/stdlib/vec.test.js +94 -0
  275. package/dist/src/__tests__/stdlib/world.test.d.ts +4 -0
  276. package/dist/src/__tests__/stdlib/world.test.js +72 -0
  277. package/dist/src/__tests__/struct-display.test.d.ts +1 -0
  278. package/dist/src/__tests__/struct-display.test.js +64 -0
  279. package/dist/src/__tests__/test-framework/runner.test.d.ts +10 -0
  280. package/dist/src/__tests__/test-framework/runner.test.js +193 -0
  281. package/dist/src/__tests__/tuner/adapters.test.d.ts +14 -0
  282. package/dist/src/__tests__/tuner/adapters.test.js +194 -0
  283. package/dist/src/__tests__/tuner/simulator-extra.test.d.ts +4 -0
  284. package/dist/src/__tests__/tuner/simulator-extra.test.js +193 -0
  285. package/dist/src/__tests__/typechecker-coverage.test.d.ts +30 -0
  286. package/dist/src/__tests__/typechecker-coverage.test.js +627 -0
  287. package/dist/src/__tests__/typechecker.test.js +3 -3
  288. package/dist/src/__tests__/watch-decorator.test.d.ts +1 -0
  289. package/dist/src/__tests__/watch-decorator.test.js +54 -0
  290. package/dist/src/ast/types.d.ts +102 -3
  291. package/dist/src/cache/incremental.d.ts +13 -14
  292. package/dist/src/cache/incremental.js +106 -89
  293. package/dist/src/cache/index.d.ts +8 -2
  294. package/dist/src/cache/index.js +18 -6
  295. package/dist/src/cli.d.ts +1 -0
  296. package/dist/src/cli.js +466 -17
  297. package/dist/src/config/project-config.d.ts +29 -0
  298. package/dist/src/config/project-config.js +180 -0
  299. package/dist/src/diagnostics/index.d.ts +9 -0
  300. package/dist/src/diagnostics/index.js +18 -1
  301. package/dist/src/emit/compile.d.ts +10 -0
  302. package/dist/src/emit/compile.js +395 -50
  303. package/dist/src/emit/index.d.ts +40 -0
  304. package/dist/src/emit/index.js +307 -14
  305. package/dist/src/emit/modules.js +21 -3
  306. package/dist/src/emit/sourcemap.d.ts +23 -27
  307. package/dist/src/emit/sourcemap.js +52 -30
  308. package/dist/src/formatter/index.js +33 -8
  309. package/dist/src/hir/deprecated.d.ts +13 -0
  310. package/dist/src/hir/deprecated.js +218 -0
  311. package/dist/src/hir/lower.js +114 -8
  312. package/dist/src/hir/monomorphize.js +22 -2
  313. package/dist/src/hir/types.d.ts +65 -1
  314. package/dist/src/index.d.ts +6 -0
  315. package/dist/src/index.js +18 -3
  316. package/dist/src/lexer/index.d.ts +2 -1
  317. package/dist/src/lexer/index.js +39 -3
  318. package/dist/src/lint/index.d.ts +45 -0
  319. package/dist/src/lint/index.js +930 -0
  320. package/dist/src/lir/lower.js +29 -2
  321. package/dist/src/lir/types.d.ts +2 -0
  322. package/dist/src/lsp/server.js +92 -5
  323. package/dist/src/mir/lower.js +775 -34
  324. package/dist/src/mir/macro.js +36 -2
  325. package/dist/src/mir/types.d.ts +12 -0
  326. package/dist/src/mir/verify.js +9 -0
  327. package/dist/src/optimizer/auto-inline.d.ts +2 -0
  328. package/dist/src/optimizer/auto-inline.js +67 -0
  329. package/dist/src/optimizer/cse.d.ts +20 -0
  330. package/dist/src/optimizer/cse.js +234 -0
  331. package/dist/src/optimizer/inline.d.ts +26 -0
  332. package/dist/src/optimizer/inline.js +286 -0
  333. package/dist/src/optimizer/interprocedural.js +4 -0
  334. package/dist/src/optimizer/licm.d.ts +32 -0
  335. package/dist/src/optimizer/licm.js +371 -0
  336. package/dist/src/optimizer/pipeline.js +12 -2
  337. package/dist/src/optimizer/strength_reduction.d.ts +15 -0
  338. package/dist/src/optimizer/strength_reduction.js +90 -0
  339. package/dist/src/optimizer/tco.d.ts +53 -0
  340. package/dist/src/optimizer/tco.js +238 -0
  341. package/dist/src/parser/index.d.ts +32 -0
  342. package/dist/src/parser/index.js +421 -59
  343. package/dist/src/repl-server.d.ts +13 -0
  344. package/dist/src/repl-server.js +127 -0
  345. package/dist/src/structs/expand.d.ts +15 -0
  346. package/dist/src/structs/expand.js +46 -0
  347. package/dist/src/testing/runner.d.ts +40 -0
  348. package/dist/src/testing/runner.js +237 -0
  349. package/dist/src/typechecker/index.d.ts +3 -0
  350. package/dist/src/typechecker/index.js +254 -9
  351. package/dist/tsconfig.tsbuildinfo +1 -1
  352. package/doc-drafts/redscript-docs/docs/en/stdlib/graph.md +104 -0
  353. package/doc-drafts/redscript-docs/docs/en/stdlib/parabola.md +113 -0
  354. package/doc-drafts/redscript-docs/docs/en/stdlib/pathfind.md +104 -0
  355. package/doc-drafts/redscript-docs/docs/en/stdlib/physics.md +134 -0
  356. package/doc-drafts/redscript-docs/docs/en/stdlib/quaternion.md +135 -0
  357. package/doc-drafts/redscript-docs/docs/zh/stdlib/graph.md +104 -0
  358. package/doc-drafts/redscript-docs/docs/zh/stdlib/parabola.md +113 -0
  359. package/doc-drafts/redscript-docs/docs/zh/stdlib/pathfind.md +104 -0
  360. package/doc-drafts/redscript-docs/docs/zh/stdlib/physics.md +134 -0
  361. package/doc-drafts/redscript-docs/docs/zh/stdlib/quaternion.md +135 -0
  362. package/docs/stdlib/result.md +156 -0
  363. package/docs/stdlib/result.zh.md +156 -0
  364. package/editors/vscode/fixtures/test.mcrs +7 -0
  365. package/editors/vscode/out/extension.js +2095 -225
  366. package/editors/vscode/out/lsp-server.js +519 -51
  367. package/editors/vscode/package-lock.json +9 -4
  368. package/editors/vscode/package.json +1 -1
  369. package/examples/display-demo.mcrs +64 -0
  370. package/examples/game/racing.mcrs +301 -0
  371. package/examples/game/tower_defense.mcrs +311 -0
  372. package/examples/math/physics_sim.mcrs +322 -0
  373. package/examples/rpg/boss_fight.mcrs +313 -0
  374. package/examples/rpg/health_system.mcrs +237 -0
  375. package/examples/rpg/inventory.mcrs +265 -0
  376. package/examples/util/debug_hud.mcrs +279 -0
  377. package/jest.config.js +10 -0
  378. package/package.json +12 -3
  379. package/playground/index.html +823 -0
  380. package/scripts/gen-docs.ts +533 -0
  381. package/scripts/update-redscript-docs-stdlib.sh +770 -0
  382. package/src/__tests__/budget.test.ts +5 -0
  383. package/src/__tests__/cache/cache-behavior.test.ts +480 -0
  384. package/src/__tests__/cache-extra.test.ts +199 -0
  385. package/src/__tests__/cli-docs.test.ts +77 -0
  386. package/src/__tests__/cli-init.test.ts +91 -0
  387. package/src/__tests__/cli-publish.test.ts +190 -0
  388. package/src/__tests__/cli.test.ts +117 -1
  389. package/src/__tests__/compile-preprocess.test.ts +366 -0
  390. package/src/__tests__/compiler/break-stmt.test.ts +66 -0
  391. package/src/__tests__/compiler/const-decl.test.ts +141 -0
  392. package/src/__tests__/compiler/continue-stmt.test.ts +81 -0
  393. package/src/__tests__/compiler/coroutine-extended.test.ts +723 -0
  394. package/src/__tests__/compiler/deprecated.test.ts +305 -0
  395. package/src/__tests__/compiler/do-while.test.ts +130 -0
  396. package/src/__tests__/compiler/enum-payload.test.ts +299 -0
  397. package/src/__tests__/compiler/interface.test.ts +287 -0
  398. package/src/__tests__/compiler/labeled-loops.test.ts +279 -0
  399. package/src/__tests__/compiler/match-string.test.ts +45 -0
  400. package/src/__tests__/compiler/memoize.test.ts +126 -0
  401. package/src/__tests__/compiler/method-chain.test.ts +121 -0
  402. package/src/__tests__/compiler/module-import.test.ts +240 -0
  403. package/src/__tests__/compiler/option-extensions.test.ts +207 -0
  404. package/src/__tests__/compiler/profile-decorator.test.ts +79 -0
  405. package/src/__tests__/compiler/string-advanced.test.ts +310 -0
  406. package/src/__tests__/compiler/struct-extends.test.ts +109 -0
  407. package/src/__tests__/compiler/throttle-retry.test.ts +191 -0
  408. package/src/__tests__/compiler/tuple-type.test.ts +263 -0
  409. package/src/__tests__/compiler/watch-decorator.test.ts +72 -0
  410. package/src/__tests__/config/project-config.test.ts +181 -0
  411. package/src/__tests__/config-decorator.test.ts +157 -0
  412. package/src/__tests__/diagnostics-extra.test.ts +155 -0
  413. package/src/__tests__/emit/compile-branches.test.ts +135 -0
  414. package/src/__tests__/emit/compile-coverage.test.ts +696 -0
  415. package/src/__tests__/emit/compile-extra-branches.test.ts +228 -0
  416. package/src/__tests__/emit/compile-mocked-branches.test.ts +249 -0
  417. package/src/__tests__/emit/compile.test.ts +6 -1
  418. package/src/__tests__/emit/execute-chain.test.ts +114 -0
  419. package/src/__tests__/emit/index.test.ts +2 -1
  420. package/src/__tests__/emit/modules-branches.test.ts +90 -0
  421. package/src/__tests__/emit/modules-coverage.test.ts +241 -0
  422. package/src/__tests__/emit/modules-errors.test.ts +192 -0
  423. package/src/__tests__/emit/modules-rewrite.test.ts +232 -0
  424. package/src/__tests__/emit/source-map.test.ts +152 -0
  425. package/src/__tests__/enum.test.ts +9 -4
  426. package/src/__tests__/error-recovery.test.ts +226 -0
  427. package/src/__tests__/events-types-extra.test.ts +110 -0
  428. package/src/__tests__/events-types.test.ts +66 -0
  429. package/src/__tests__/formatter.test.ts +15 -5
  430. package/src/__tests__/generics.test.ts +16 -9
  431. package/src/__tests__/hir/lower-extra.test.ts +151 -0
  432. package/src/__tests__/hir/monomorphize-coverage.test.ts +432 -0
  433. package/src/__tests__/hir/monomorphize-extra.test.ts +220 -0
  434. package/src/__tests__/hir/monomorphize-extra2.test.ts +350 -0
  435. package/src/__tests__/impl.test.ts +12 -8
  436. package/src/__tests__/incremental.test.ts +10 -2
  437. package/src/__tests__/index-extra.test.ts +79 -0
  438. package/src/__tests__/lexer.test.ts +2 -2
  439. package/src/__tests__/lint/hir-coverage.test.ts +1716 -0
  440. package/src/__tests__/lint/rules-coverage.test.ts +598 -0
  441. package/src/__tests__/lint/rules.test.ts +230 -0
  442. package/src/__tests__/lir/lower.test.ts +33 -0
  443. package/src/__tests__/lir/verify.test.ts +33 -0
  444. package/src/__tests__/lsp/completion.test.ts +687 -0
  445. package/src/__tests__/lsp/definition.test.ts +499 -0
  446. package/src/__tests__/lsp/diagnostics.test.ts +108 -0
  447. package/src/__tests__/lsp/hover-docs.test.ts +222 -0
  448. package/src/__tests__/lsp.test.ts +4 -1
  449. package/src/__tests__/mc-integration/item-entity-events.test.ts +5 -0
  450. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +5 -0
  451. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1105 -0
  452. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1366 -0
  453. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1245 -0
  454. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +755 -0
  455. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +771 -0
  456. package/src/__tests__/mc-integration/stdlib-coverage.test.ts +5 -0
  457. package/src/__tests__/mc-integration/syntax-coverage.test.ts +5 -0
  458. package/src/__tests__/mc-validator-coverage.test.ts +325 -0
  459. package/src/__tests__/mc-validator-extra.test.ts +252 -0
  460. package/src/__tests__/mir/lower-extra.test.ts +402 -0
  461. package/src/__tests__/mir/lower-extra2.test.ts +348 -0
  462. package/src/__tests__/mir/lower-extra3.test.ts +277 -0
  463. package/src/__tests__/mir/lower-extra4.test.ts +636 -0
  464. package/src/__tests__/mir/lower-extra5.test.ts +612 -0
  465. package/src/__tests__/mir/lower-extra6.test.ts +520 -0
  466. package/src/__tests__/mir/lower-extra7.test.ts +1045 -0
  467. package/src/__tests__/mir/lower-extra8.test.ts +704 -0
  468. package/src/__tests__/mir/lower-extra9.test.ts +821 -0
  469. package/src/__tests__/optimizer/auto-inline.test.ts +206 -0
  470. package/src/__tests__/optimizer/cse.test.ts +195 -0
  471. package/src/__tests__/optimizer/inline_fn.test.ts +263 -0
  472. package/src/__tests__/optimizer/licm.test.ts +358 -0
  473. package/src/__tests__/optimizer/nbt-coalesce.test.ts +147 -0
  474. package/src/__tests__/optimizer/optimizer-extended.test.ts +1081 -0
  475. package/src/__tests__/optimizer/scoreboard-batch.test.ts +141 -0
  476. package/src/__tests__/optimizer/strength-reduction.test.ts +111 -0
  477. package/src/__tests__/optimizer/tco-coverage.test.ts +309 -0
  478. package/src/__tests__/optimizer/tco.test.ts +238 -0
  479. package/src/__tests__/option.test.ts +14 -7
  480. package/src/__tests__/parser-coverage.test.ts +576 -0
  481. package/src/__tests__/parser-extra.test.ts +531 -0
  482. package/src/__tests__/parser.test.ts +14 -0
  483. package/src/__tests__/repl-extra.test.ts +195 -0
  484. package/src/__tests__/repl-server-extra.test.ts +150 -0
  485. package/src/__tests__/repl-server.test.ts +122 -0
  486. package/src/__tests__/runtime-extra.test.ts +862 -0
  487. package/src/__tests__/singleton-decorator.test.ts +285 -0
  488. package/src/__tests__/sourcemap.test.ts +1 -1
  489. package/src/__tests__/stdlib/advanced.test.ts +312 -0
  490. package/src/__tests__/stdlib/bigint.test.ts +57 -0
  491. package/src/__tests__/stdlib/bits.test.ts +75 -0
  492. package/src/__tests__/stdlib/bossbar.test.ts +45 -0
  493. package/src/__tests__/stdlib/color.test.ts +60 -0
  494. package/src/__tests__/stdlib/combat.test.ts +35 -0
  495. package/src/__tests__/stdlib/cooldown.test.ts +35 -0
  496. package/src/__tests__/stdlib/dialog.test.ts +14 -6
  497. package/src/__tests__/stdlib/ecs.test.ts +54 -0
  498. package/src/__tests__/stdlib/effects.test.ts +45 -0
  499. package/src/__tests__/stdlib/events.test.ts +23 -0
  500. package/src/__tests__/stdlib/expr.test.ts +48 -0
  501. package/src/__tests__/stdlib/fft.test.ts +54 -0
  502. package/src/__tests__/stdlib/graph.test.ts +77 -0
  503. package/src/__tests__/stdlib/interactions.test.ts +30 -0
  504. package/src/__tests__/stdlib/inventory.test.ts +40 -0
  505. package/src/__tests__/stdlib/linalg.test.ts +52 -0
  506. package/src/__tests__/stdlib/map.test.ts +55 -0
  507. package/src/__tests__/stdlib/math.test.ts +19 -5
  508. package/src/__tests__/stdlib/math_hp.test.ts +55 -0
  509. package/src/__tests__/stdlib/mobs.test.ts +40 -0
  510. package/src/__tests__/stdlib/noise.test.ts +46 -0
  511. package/src/__tests__/stdlib/ode.test.ts +40 -0
  512. package/src/__tests__/stdlib/parabola.test.ts +51 -0
  513. package/src/__tests__/stdlib/particles.test.ts +40 -0
  514. package/src/__tests__/stdlib/physics.test.ts +50 -0
  515. package/src/__tests__/stdlib/player.test.ts +35 -0
  516. package/src/__tests__/stdlib/quaternion.test.ts +46 -0
  517. package/src/__tests__/stdlib/queue.test.ts +73 -0
  518. package/src/__tests__/stdlib/random.test.ts +50 -0
  519. package/src/__tests__/stdlib/result.test.ts +326 -0
  520. package/src/__tests__/stdlib/scheduler.test.ts +18 -7
  521. package/src/__tests__/stdlib/set_int.test.ts +62 -0
  522. package/src/__tests__/stdlib/sets.test.ts +28 -0
  523. package/src/__tests__/stdlib/signal.test.ts +60 -0
  524. package/src/__tests__/stdlib/spawn.test.ts +40 -0
  525. package/src/__tests__/stdlib/string.test.ts +224 -0
  526. package/src/__tests__/stdlib/strings.test.ts +55 -0
  527. package/src/__tests__/stdlib/tags.test.ts +32 -0
  528. package/src/__tests__/stdlib/teams.test.ts +45 -0
  529. package/src/__tests__/stdlib/timer.test.ts +53 -0
  530. package/src/__tests__/stdlib/vec.test.ts +72 -0
  531. package/src/__tests__/stdlib/world.test.ts +45 -0
  532. package/src/__tests__/struct-display.test.ts +69 -0
  533. package/src/__tests__/test-framework/runner.test.ts +208 -0
  534. package/src/__tests__/tuner/adapters.test.ts +232 -0
  535. package/src/__tests__/tuner/simulator-extra.test.ts +222 -0
  536. package/src/__tests__/tuple.test.ts +11 -4
  537. package/src/__tests__/typechecker-coverage.test.ts +671 -0
  538. package/src/__tests__/typechecker.test.ts +4 -3
  539. package/src/__tests__/watch-decorator.test.ts +59 -0
  540. package/src/ast/types.ts +65 -3
  541. package/src/cache/incremental.ts +128 -99
  542. package/src/cache/index.ts +35 -8
  543. package/src/cli.ts +538 -29
  544. package/src/config/project-config.ts +176 -0
  545. package/src/diagnostics/index.ts +22 -0
  546. package/src/docs.ts +98 -0
  547. package/src/emit/compile.ts +408 -51
  548. package/src/emit/index.ts +366 -18
  549. package/src/emit/modules.ts +19 -3
  550. package/src/emit/sourcemap.ts +64 -43
  551. package/src/formatter/index.ts +35 -8
  552. package/src/hir/deprecated.ts +212 -0
  553. package/src/hir/lower.ts +128 -8
  554. package/src/hir/monomorphize.ts +24 -2
  555. package/src/hir/types.ts +26 -1
  556. package/src/index.ts +23 -3
  557. package/src/lexer/index.ts +45 -6
  558. package/src/lint/index.ts +922 -0
  559. package/src/lir/lower.ts +30 -2
  560. package/src/lir/types.ts +4 -0
  561. package/src/lsp/server.ts +100 -1
  562. package/src/mir/lower.ts +785 -40
  563. package/src/mir/macro.ts +30 -2
  564. package/src/mir/types.ts +13 -0
  565. package/src/mir/verify.ts +10 -2
  566. package/src/optimizer/auto-inline.ts +86 -0
  567. package/src/optimizer/copy_prop.ts +2 -2
  568. package/src/optimizer/coroutine.ts +3 -3
  569. package/src/optimizer/cse.ts +205 -0
  570. package/src/optimizer/dce.ts +2 -2
  571. package/src/optimizer/inline.ts +335 -0
  572. package/src/optimizer/interprocedural.ts +5 -1
  573. package/src/optimizer/licm.ts +454 -0
  574. package/src/optimizer/nbt-coalesce.ts +109 -0
  575. package/src/optimizer/pipeline.ts +16 -2
  576. package/src/optimizer/scoreboard-batch.ts +52 -0
  577. package/src/optimizer/strength_reduction.ts +95 -0
  578. package/src/optimizer/tco.ts +267 -0
  579. package/src/optimizer/unroll.ts +2 -2
  580. package/src/parser/index.ts +426 -53
  581. package/src/repl-server.ts +102 -0
  582. package/src/stdlib/advanced.mcrs +271 -101
  583. package/src/stdlib/bigint.mcrs +97 -11
  584. package/src/stdlib/bits.mcrs +75 -12
  585. package/src/stdlib/bossbar.mcrs +37 -8
  586. package/src/stdlib/calculus.mcrs +82 -26
  587. package/src/stdlib/color.mcrs +98 -16
  588. package/src/stdlib/combat.mcrs +23 -5
  589. package/src/stdlib/cooldown.mcrs +19 -0
  590. package/src/stdlib/dialog.mcrs +45 -7
  591. package/src/stdlib/easing.mcrs +132 -12
  592. package/src/stdlib/ecs.mcrs +142 -25
  593. package/src/stdlib/effects.mcrs +88 -12
  594. package/src/stdlib/events.mcrs +21 -2
  595. package/src/stdlib/expr.mcrs +18 -3
  596. package/src/stdlib/fft.mcrs +66 -56
  597. package/src/stdlib/geometry.mcrs +137 -39
  598. package/src/stdlib/graph.mcrs +73 -0
  599. package/src/stdlib/heap.mcrs +49 -8
  600. package/src/stdlib/i18n/zh.yaml +2891 -0
  601. package/src/stdlib/interactions.mcrs +43 -20
  602. package/src/stdlib/inventory.mcrs +14 -3
  603. package/src/stdlib/linalg.mcrs +185 -30
  604. package/src/stdlib/list.mcrs +168 -18
  605. package/src/stdlib/map.mcrs +112 -0
  606. package/src/stdlib/math.mcrs +68 -18
  607. package/src/stdlib/math_hp.mcrs +124 -33
  608. package/src/stdlib/matrix.mcrs +133 -20
  609. package/src/stdlib/mobs.mcrs +87 -0
  610. package/src/stdlib/noise.mcrs +65 -21
  611. package/src/stdlib/ode.mcrs +96 -0
  612. package/src/stdlib/parabola.mcrs +104 -29
  613. package/src/stdlib/particles.mcrs +78 -21
  614. package/src/stdlib/pathfind.mcrs +89 -35
  615. package/src/stdlib/physics.mcrs +134 -26
  616. package/src/stdlib/player.mcrs +18 -0
  617. package/src/stdlib/quaternion.mcrs +213 -9
  618. package/src/stdlib/queue.mcrs +123 -0
  619. package/src/stdlib/random.mcrs +63 -18
  620. package/src/stdlib/result.mcrs +111 -0
  621. package/src/stdlib/scheduler.mcrs +59 -10
  622. package/src/stdlib/set_int.mcrs +240 -0
  623. package/src/stdlib/sets.mcrs +49 -19
  624. package/src/stdlib/signal.mcrs +151 -79
  625. package/src/stdlib/sort.mcrs +44 -24
  626. package/src/stdlib/spawn.mcrs +30 -7
  627. package/src/stdlib/state.mcrs +40 -5
  628. package/src/stdlib/strings.mcrs +131 -3
  629. package/src/stdlib/tags.mcrs +2 -2
  630. package/src/stdlib/teams.mcrs +22 -10
  631. package/src/stdlib/timer.mcrs +36 -6
  632. package/src/stdlib/vec.mcrs +44 -9
  633. package/src/stdlib/world.mcrs +57 -25
  634. package/src/structs/expand.ts +64 -0
  635. package/src/testing/runner.ts +271 -0
  636. package/src/typechecker/index.ts +273 -9
@@ -0,0 +1,2891 @@
1
+ ## zh.yaml — 中文翻译文件,供 gen-docs.ts 生成 docs/zh/stdlib/*.md 使用。
2
+ ## 结构:<模块>.<函数名>.{desc, params.<param>, returns, example_note}
3
+
4
+ math:
5
+ abs:
6
+ desc: 返回 x 的绝对值(支持泛型 T)
7
+ params:
8
+ x: 输入值(任意数值类型 T)
9
+ returns: 若 x >= 0 则返回 x,否则返回 -x
10
+ sign:
11
+ desc: 返回 x 的符号:1、0 或 -1
12
+ params:
13
+ x: 输入整数
14
+ returns: x > 0 返回 1,x < 0 返回 -1,x == 0 返回 0
15
+ min:
16
+ desc: 返回两个值中较小的一个
17
+ params:
18
+ a: 第一个值
19
+ b: 第二个值
20
+ returns: a < b 则返回 a,否则返回 b
21
+ max:
22
+ desc: 返回两个值中较大的一个
23
+ params:
24
+ a: 第一个值
25
+ b: 第二个值
26
+ returns: a > b 则返回 a,否则返回 b
27
+ clamp:
28
+ desc: "将 x 限制在 [lo, hi] 范围内"
29
+ params:
30
+ x: 输入值
31
+ lo: 下界(含)
32
+ hi: 上界(含)
33
+ returns: x < lo 返回 lo;x > hi 返回 hi;否则返回 x
34
+ lerp:
35
+ desc: 在 a 和 b 之间进行线性插值,t 为定点数(范围 0-1000)
36
+ params:
37
+ a: 起始值
38
+ b: 结束值
39
+ t: 插值因子 ×1000(0 = a,1000 = b)
40
+ returns: a + (b - a) * t / 1000
41
+ sqrt_fixed:
42
+ desc: 定点数平方根(精度 ×1000)
43
+ params:
44
+ x: 输入值 ×1000(即 2.0 传入 2000)
45
+ returns: sqrt(x/1000) × 1000
46
+ sin_fixed:
47
+ desc: 整数角度的正弦值,返回值 ×1000(查表法,精度 ≤0.1%)
48
+ params:
49
+ deg: 角度(任意整数,自动对 360 取模)
50
+ returns: sin(deg°) × 1000,范围 -1000 到 1000
51
+ cos_fixed:
52
+ desc: 整数角度的余弦值,返回值 ×1000(通过 sin_fixed(deg+90) 实现)
53
+ params:
54
+ deg: 角度(任意整数,自动对 360 取模)
55
+ returns: cos(deg°) × 1000,范围 -1000 到 1000
56
+
57
+ vec:
58
+ dot2d:
59
+ desc: 两个二维整数向量的点积
60
+ params:
61
+ ax: 向量 A 的 X 分量
62
+ ay: 向量 A 的 Y 分量
63
+ bx: 向量 B 的 X 分量
64
+ by: 向量 B 的 Y 分量
65
+ returns: ax*bx + ay*by
66
+ length2d_fixed:
67
+ desc: 二维向量的欧几里得长度,结果 ×1000 定点数
68
+ params:
69
+ x: X 分量(保持 |x|, |y| ≤ ~1000 以避免溢出)
70
+ y: Y 分量
71
+ returns: sqrt(x²+y²) × 1000
72
+ dot3d:
73
+ desc: 两个三维整数向量的点积
74
+ params:
75
+ ax: 向量 A 的 X 分量
76
+ ay: 向量 A 的 Y 分量
77
+ az: 向量 A 的 Z 分量
78
+ bx: 向量 B 的 X 分量
79
+ by: 向量 B 的 Y 分量
80
+ bz: 向量 B 的 Z 分量
81
+ returns: ax*bx + ay*by + az*bz
82
+ cross3d_x:
83
+ desc: 叉积 A×B 的 X 分量(ay*bz - az*by)
84
+ params:
85
+ ax: A 的 X 分量
86
+ ay: A 的 Y 分量
87
+ az: A 的 Z 分量
88
+ bx: B 的 X 分量
89
+ by: B 的 Y 分量
90
+ bz: B 的 Z 分量
91
+ returns: ay*bz - az*by
92
+ cross3d_y:
93
+ desc: 叉积 A×B 的 Y 分量(az*bx - ax*bz)
94
+ params:
95
+ ax: A 的 X 分量
96
+ ay: A 的 Y 分量
97
+ az: A 的 Z 分量
98
+ bx: B 的 X 分量
99
+ by: B 的 Y 分量
100
+ bz: B 的 Z 分量
101
+ returns: az*bx - ax*bz
102
+ cross3d_z:
103
+ desc: 叉积 A×B 的 Z 分量(ax*by - ay*bx)
104
+ params:
105
+ ax: A 的 X 分量
106
+ ay: A 的 Y 分量
107
+ az: A 的 Z 分量
108
+ bx: B 的 X 分量
109
+ by: B 的 Y 分量
110
+ bz: B 的 Z 分量
111
+ returns: ax*by - ay*bx
112
+
113
+ strings:
114
+ str_len:
115
+ desc: "返回 rs:strings.{s} 中字符串的长度(MC 限制:普通字符串总返回 1)"
116
+ params:
117
+ s: rs:strings 中的 NBT 字段名(如 "A")
118
+ returns: 普通字符串返回 1;字符列表返回元素数量
119
+ str_concat:
120
+ desc: 将 rs:strings 中的两个字符串拼接,结果以 NBT 列表形式写入 rs:strings.Result
121
+ params:
122
+ a: 第一个字符串的 NBT 字段名(如 "A")
123
+ b: 第二个字符串的 NBT 字段名(如 "B")
124
+ returns: "rs:strings.Result 被设为 [valueA, valueB] 的 NBT 列表"
125
+ str_contains:
126
+ desc: "检测 rs:strings.{s} 是否包含 rs:strings.{sub}(因 MC 限制始终返回 0)"
127
+ params:
128
+ s: 被搜索字符串的 NBT 字段名
129
+ sub: 子字符串的 NBT 字段名
130
+ returns: 0(始终,MC 原生不支持子串搜索)
131
+ str_slice:
132
+ desc: "从 rs:strings.{s} 中提取子串,写入 rs:strings.Result(需要 MC 1.20.2+)"
133
+ params:
134
+ s: 源字符串的 NBT 字段名(如 "A")
135
+ start: 起始索引(含,0-based)
136
+ end: 结束索引(不含,负数从末尾计)
137
+ returns: rs:strings.Result 包含提取的子串
138
+
139
+ map:
140
+ map_set:
141
+ desc: "将整数值写入 storage rs:maps.{map_name}.{key}"
142
+ params:
143
+ map_name: rs:maps 下的顶层 map 名称
144
+ key: map compound 内的键名
145
+ value: 要写入的整数值
146
+ map_get:
147
+ desc: "读取 storage rs:maps.{map_name}.{key} 中的整数值"
148
+ params:
149
+ map_name: rs:maps 下的顶层 map 名称
150
+ key: map compound 内的键名
151
+ returns: 已存储的整数值;若键不存在则返回 0
152
+ map_has:
153
+ desc: "检查 storage rs:maps.{map_name}.{key} 是否存在"
154
+ params:
155
+ map_name: rs:maps 下的顶层 map 名称
156
+ key: map compound 内的键名
157
+ returns: 键存在返回 1,否则返回 0
158
+ map_delete:
159
+ desc: 删除指定 map 中的一个键
160
+ params:
161
+ map_name: rs:maps 下的顶层 map 名称
162
+ key: map compound 内的键名
163
+ map_clear:
164
+ desc: "删除整个 storage rs:maps.{map_name} compound"
165
+ params:
166
+ map_name: rs:maps 下的顶层 map 名称
167
+
168
+ set_int:
169
+ set_add:
170
+ desc: "向 storage rs:set_int.{set_name} 中插入一个整数;若已存在则不会重复添加"
171
+ params:
172
+ set_name: rs:set_int 下的集合名称
173
+ value: 要插入的整数值
174
+ set_has:
175
+ desc: "检查整数是否存在于 storage rs:set_int.{set_name} 中"
176
+ params:
177
+ set_name: rs:set_int 下的集合名称
178
+ value: 要检测的整数值
179
+ returns: 元素存在返回 1,否则返回 0
180
+ set_remove:
181
+ desc: "从 storage rs:set_int.{set_name} 中删除一个整数"
182
+ params:
183
+ set_name: rs:set_int 下的集合名称
184
+ value: 要删除的整数值
185
+ set_size:
186
+ desc: "返回 storage rs:set_int.{set_name} 中当前元素数量"
187
+ params:
188
+ set_name: rs:set_int 下的集合名称
189
+ returns: 集合中的整数个数;若集合不存在则返回 0
190
+ set_clear:
191
+ desc: "将 storage rs:set_int.{set_name} 重置为空整数列表"
192
+ params:
193
+ set_name: rs:set_int 下的集合名称
194
+ set_union:
195
+ desc: 计算两个整数集合的并集,并将结果写入目标集合
196
+ params:
197
+ a: 左侧输入集合名称
198
+ b: 右侧输入集合名称
199
+ result: 目标集合名称
200
+ set_intersect:
201
+ desc: 计算两个整数集合的交集,并将结果写入目标集合
202
+ params:
203
+ a: 左侧输入集合名称
204
+ b: 右侧输入集合名称
205
+ result: 目标集合名称
206
+
207
+ result:
208
+ result_ok:
209
+ desc: 构造一个携带成功值的 Result
210
+ params:
211
+ value: 成功值(任意整数)
212
+ returns: Result::Ok(value)
213
+ result_err:
214
+ desc: 构造一个携带错误码的 Result
215
+ params:
216
+ code: 错误码(按惯例使用负数:-1 通用错误,-2 除零)
217
+ returns: Result::Err(code)
218
+ result_is_ok:
219
+ desc: 判断 Result 是否为 Ok
220
+ params:
221
+ r: 要检测的 Result
222
+ returns: Ok 返回 1,Err 返回 0
223
+ result_is_err:
224
+ desc: 判断 Result 是否为 Err
225
+ params:
226
+ r: 要检测的 Result
227
+ returns: Err 返回 1,Ok 返回 0
228
+ result_value:
229
+ desc: 从 Ok 结果中提取值(Err 时返回 0,请先调用 result_is_ok 检查)
230
+ params:
231
+ r: 要解包的 Result
232
+ returns: Ok 的值,或 0(Err 时)
233
+ result_code:
234
+ desc: 从 Err 结果中提取错误码(Ok 时返回 0)
235
+ params:
236
+ r: 要解包的 Result
237
+ returns: Err 的错误码,或 0(Ok 时)
238
+ result_divide:
239
+ desc: 带安全检查的整数除法,除数为零时返回 Err(-2)
240
+ params:
241
+ a: 被除数
242
+ b: 除数
243
+ returns: Ok(a/b) 或 Err(-2)(b == 0 时)
244
+
245
+ timer:
246
+ tick_to_seconds:
247
+ desc: 将 Minecraft 游戏刻转换为整秒(20 刻 = 1 秒)
248
+ params:
249
+ ticks: 游戏刻数
250
+ returns: ticks / 20
251
+ tick_to_ms:
252
+ desc: 将游戏刻转换为毫秒(1 刻 = 50 ms)
253
+ params:
254
+ ticks: 游戏刻数
255
+ returns: ticks * 50
256
+ seconds_to_ticks:
257
+ desc: 将秒转换为 Minecraft 游戏刻(1 秒 = 20 刻)
258
+ params:
259
+ s: 秒数
260
+ returns: s * 20
261
+ format_time_s:
262
+ desc: 从刻数中提取秒分量(0-59)
263
+ params:
264
+ ticks: 游戏刻数
265
+ returns: (ticks / 20) % 60
266
+ format_time_m:
267
+ desc: 从刻数中提取分钟分量(0-59)
268
+ params:
269
+ ticks: 游戏刻数
270
+ returns: (ticks / 1200) % 60
271
+ format_time_h:
272
+ desc: 从刻数中提取小时分量
273
+ params:
274
+ ticks: 游戏刻数
275
+ returns: ticks / 72000
276
+ Timer.new:
277
+ desc: 创建一个指定持续时长的新计时器
278
+ params:
279
+ duration: 持续游戏刻数
280
+ returns: 新的 Timer 实例
281
+ Timer.start:
282
+ desc: 启动或继续计时器
283
+ Timer.pause:
284
+ desc: 暂停计时器
285
+ Timer.reset:
286
+ desc: 将已流逝的刻数重置为零
287
+ Timer.done:
288
+ desc: 检查计时器是否已达到持续时间
289
+ returns: 若已完成返回 true,否则返回 false
290
+ Timer.elapsed:
291
+ desc: 获取已流逝的游戏刻数
292
+ returns: 已流逝刻数
293
+ Timer.remaining:
294
+ desc: 获取剩余刻数(最小为 0)
295
+ returns: 剩余刻数,不足时为 0
296
+ Timer.tick:
297
+ desc: 在计时器激活时手动推进一刻
298
+
299
+ bossbar:
300
+ create_timer_bar:
301
+ desc: 创建一个对所有玩家可见的计时器 Bossbar,并以秒数初始化最大值和当前值
302
+ params:
303
+ id: Bossbar 标识符,通常使用 `<namespace>:<name>`
304
+ name: Bossbar 显示名称
305
+ max_seconds: 持续秒数,内部会转换为游戏刻
306
+ create_health_bar:
307
+ desc: 创建一个红色血量风格 Bossbar,并以满值显示
308
+ params:
309
+ id: Bossbar 标识符
310
+ name: Bossbar 显示名称
311
+ max_val: 最大值,同时也是初始值
312
+ create_progress_bar:
313
+ desc: 创建一个蓝色进度 Bossbar,初始值为 0
314
+ params:
315
+ id: Bossbar 标识符
316
+ name: Bossbar 显示名称
317
+ max_val: 进度最大值
318
+ update_bar:
319
+ desc: 设置已有 Bossbar 的当前值
320
+ params:
321
+ id: Bossbar 标识符
322
+ value: 新的当前值
323
+ hide_bar:
324
+ desc: 将已有 Bossbar 设为不可见
325
+ params:
326
+ id: Bossbar 标识符
327
+ show_bar:
328
+ desc: 将已有 Bossbar 重新显示给已分配的玩家
329
+ params:
330
+ id: Bossbar 标识符
331
+ remove_bar:
332
+ desc: 彻底移除一个 Bossbar
333
+ params:
334
+ id: Bossbar 标识符
335
+ update_bar_color:
336
+ desc: 根据百分比阈值更新 Bossbar 颜色
337
+ params:
338
+ id: Bossbar 标识符
339
+ percent: 预期为 0-100 的百分比值
340
+
341
+ teams:
342
+ create_team:
343
+ desc: 创建一个队伍并设置显示颜色
344
+ params:
345
+ name: 计分板队伍名称
346
+ color: Minecraft 队伍颜色字符串,如 `red` 或 `blue`
347
+ create_red_team:
348
+ desc: 创建默认红队,并关闭队友伤害
349
+ create_blue_team:
350
+ desc: 创建默认蓝队,并关闭队友伤害
351
+ create_green_team:
352
+ desc: 创建默认绿队,并关闭队友伤害
353
+ create_yellow_team:
354
+ desc: 创建默认黄队,并关闭队友伤害
355
+ add_to_team:
356
+ desc: 将目标选择器加入指定队伍
357
+ params:
358
+ target: 要加入队伍的目标选择器
359
+ team_name: 已存在的队伍名称
360
+ remove_from_teams:
361
+ desc: 将目标选择器从所有队伍中移除
362
+ params:
363
+ target: 要移除的目标选择器
364
+ setup_two_teams:
365
+ desc: 创建默认的双队配置(红队和蓝队)
366
+ setup_four_teams:
367
+ desc: 创建默认的四队配置(红蓝绿黄)
368
+ cleanup_teams:
369
+ desc: 删除本模块默认创建的四个标准队伍
370
+
371
+ spawn:
372
+ teleport_to:
373
+ desc: 将目标选择器传送到固定坐标
374
+ params:
375
+ target: 要传送的目标选择器
376
+ x: 目标 X 坐标
377
+ y: 目标 Y 坐标
378
+ z: 目标 Z 坐标
379
+ teleport_to_entity:
380
+ desc: 将目标选择器传送到另一个实体当前位置
381
+ params:
382
+ target: 要传送的目标选择器
383
+ dest: 作为目的地的实体选择器
384
+ spread_players:
385
+ desc: 预留的随机分散玩家辅助函数;当前仅输出提示消息,尚未真正执行 spreadplayers
386
+ params:
387
+ x: 中心点 X 坐标
388
+ z: 中心点 Z 坐标
389
+ radius: 最大分散半径(方块)
390
+ gather_all:
391
+ desc: 将所有玩家传送到同一位置
392
+ params:
393
+ x: 目标 X 坐标
394
+ y: 目标 Y 坐标
395
+ z: 目标 Z 坐标
396
+ launch_up:
397
+ desc: 按相对坐标将目标向上抬升
398
+ params:
399
+ target: 要传送的目标选择器
400
+ height: 相对 Y 偏移(方块)
401
+ goto_lobby:
402
+ desc: 将目标传送到内置大厅坐标,并显示欢迎标题
403
+ params:
404
+ target: 要传送到大厅的目标选择器
405
+ goto_arena:
406
+ desc: 将目标传送到内置竞技场坐标,并显示开战标题
407
+ params:
408
+ target: 要传送到竞技场的目标选择器
409
+
410
+ world:
411
+ set_day:
412
+ desc: 将世界时间设置为白天(tick 1000)
413
+ set_night:
414
+ desc: 将世界时间设置为夜晚(tick 13000)
415
+ set_noon:
416
+ desc: 将世界时间设置为正午(tick 6000)
417
+ set_midnight:
418
+ desc: 将世界时间设置为午夜(tick 18000)
419
+ weather_clear:
420
+ desc: 将天气设置为晴天
421
+ weather_rain:
422
+ desc: 将天气设置为下雨
423
+ weather_thunder:
424
+ desc: 将天气设置为雷暴
425
+ enable_keep_inventory:
426
+ desc: 启用 `keepInventory` 游戏规则
427
+ disable_keep_inventory:
428
+ desc: 关闭 `keepInventory` 游戏规则
429
+ disable_mob_griefing:
430
+ desc: 将 `mobGriefing` 设为 false,禁止生物破坏方块
431
+ disable_fire_spread:
432
+ desc: 将 `doFireTick` 设为 false,禁止火焰蔓延
433
+ set_peaceful:
434
+ desc: 将难度设置为和平
435
+ set_easy:
436
+ desc: 将难度设置为简单
437
+ set_normal:
438
+ desc: 将难度设置为普通
439
+ set_hard:
440
+ desc: 将难度设置为困难
441
+ barrier_wall:
442
+ desc: 用屏障方块填充一个长方体区域
443
+ params:
444
+ x1: 第一个角点 X 坐标
445
+ y1: 第一个角点 Y 坐标
446
+ z1: 第一个角点 Z 坐标
447
+ x2: 对角点 X 坐标
448
+ y2: 对角点 Y 坐标
449
+ z2: 对角点 Z 坐标
450
+ clear_area:
451
+ desc: 用空气填充一个长方体区域,以清空该区域
452
+ params:
453
+ x1: 第一个角点 X 坐标
454
+ y1: 第一个角点 Y 坐标
455
+ z1: 第一个角点 Z 坐标
456
+ x2: 对角点 X 坐标
457
+ y2: 对角点 Y 坐标
458
+ z2: 对角点 Z 坐标
459
+ glass_box:
460
+ desc: 构建一个中空玻璃盒,先填满外壳再挖空内部
461
+ params:
462
+ x1: 第一个角点 X 坐标
463
+ y1: 第一个角点 Y 坐标
464
+ z1: 第一个角点 Z 坐标
465
+ x2: 对角点 X 坐标
466
+ y2: 对角点 Y 坐标
467
+ z2: 对角点 Z 坐标
468
+ sun_altitude:
469
+ desc: 根据世界时间计算太阳高度角,结果为角度 ×10000 定点数
470
+ params:
471
+ ticks: Minecraft 世界时间(游戏刻)
472
+ returns: 太阳高度角,单位为角度 ×10000
473
+ sun_azimuth:
474
+ desc: 根据世界时间计算太阳方位角,结果为角度 ×10000 定点数
475
+ params:
476
+ ticks: Minecraft 世界时间(游戏刻)
477
+ returns: "方位角,范围为 `[0, 3600000)`"
478
+
479
+ interactions:
480
+ interactions_init:
481
+ desc: 初始化本模块所需的计分板目标 `rs.click`、`rs.sneak` 和 `rs.attack`
482
+ on_right_click:
483
+ desc: 使用 `rs.click` 计分板检测右键,并给检测到的玩家添加 `rs.clicked` 标签
484
+ params:
485
+ callback_fn: 预留的回调标识,当前实现尚未使用
486
+ example_right_click:
487
+ desc: 演示如何直接消费 `rs.click` 计分板并在右键时广播消息
488
+ is_sneaking:
489
+ desc: 检查目标当前是否处于潜行状态
490
+ params:
491
+ target: 要检查的玩家选择器
492
+ returns: 潜行时返回 `1`,否则返回 `0`
493
+ on_sneak_start:
494
+ desc: 检测玩家是否在当前 tick 开始潜行,并维护 `rs.sneak_start` 标签
495
+ check_look_up:
496
+ desc: 检测玩家是否抬头,并为满足条件者添加 `rs.look_up` 标签
497
+ check_look_down:
498
+ desc: 检测玩家是否低头,并为满足条件者添加 `rs.look_down` 标签
499
+ check_look_straight:
500
+ desc: 检测玩家是否平视,并为满足条件者添加 `rs.look_straight` 标签
501
+ check_holding_item:
502
+ desc: 预留的手持物检测辅助函数;当前仅输出提示,真实检测需配合谓词或 NBT 检查
503
+ params:
504
+ item_id: 期望的物品 ID 或逻辑键名
505
+ on_sneak_click:
506
+ desc: 检测“潜行 + 右键”组合输入,并添加 `rs.sneak_click` 或 `rs.clicked` 标签
507
+ DOUBLE_TAP_WINDOW:
508
+ desc: 双击潜行判定窗口,单位为游戏刻
509
+ on_double_sneak:
510
+ desc: 检测双击潜行;要求调用方自行维护 `rs.last_sneak` 和 `rs.tick`
511
+
512
+ inventory:
513
+ clear_inventory:
514
+ desc: 清空目标选择器的全部背包内容
515
+ params:
516
+ target: 要清空背包的玩家或实体选择器
517
+ give_kit_warrior:
518
+ desc: 给目标发放战士套装,包含铁甲、近战武器、盾牌和食物
519
+ params:
520
+ target: 接收套装的玩家或实体选择器
521
+ give_kit_archer:
522
+ desc: 给目标发放弓箭手套装,包含弓箭、轻甲和食物
523
+ params:
524
+ target: 接收套装的玩家或实体选择器
525
+ give_kit_mage:
526
+ desc: 给目标发放法师套装,包含位移、消耗品和范围伤害道具
527
+ params:
528
+ target: 接收套装的玩家或实体选择器
529
+ remove_item:
530
+ desc: 从目标背包中移除指定物品的全部副本
531
+ params:
532
+ target: 要移除物品的玩家或实体选择器
533
+ item: 传给 `clear` 命令的物品参数,可包含 NBT
534
+
535
+ particles:
536
+ hearts_at:
537
+ desc: 在指定坐标生成爱心粒子
538
+ params:
539
+ x: X 坐标
540
+ y: Y 坐标
541
+ z: Z 坐标
542
+ flames:
543
+ desc: 在指定坐标生成火焰粒子
544
+ params:
545
+ x: X 坐标
546
+ y: Y 坐标
547
+ z: Z 坐标
548
+ smoke:
549
+ desc: 在指定坐标生成大烟雾粒子
550
+ params:
551
+ x: X 坐标
552
+ y: Y 坐标
553
+ z: Z 坐标
554
+ explosion_effect:
555
+ desc: 在指定坐标生成爆炸粒子
556
+ params:
557
+ x: X 坐标
558
+ y: Y 坐标
559
+ z: Z 坐标
560
+ sparkles_at:
561
+ desc: 在指定坐标生成附魔闪烁粒子
562
+ params:
563
+ x: X 坐标
564
+ y: Y 坐标
565
+ z: Z 坐标
566
+ angry_at:
567
+ desc: 在指定坐标生成愤怒村民粒子
568
+ params:
569
+ x: X 坐标
570
+ y: Y 坐标
571
+ z: Z 坐标
572
+ happy_at:
573
+ desc: 在指定坐标生成开心村民粒子
574
+ params:
575
+ x: X 坐标
576
+ y: Y 坐标
577
+ z: Z 坐标
578
+ portal_effect:
579
+ desc: 在指定坐标生成传送门粒子
580
+ params:
581
+ x: X 坐标
582
+ y: Y 坐标
583
+ z: Z 坐标
584
+ totem_at:
585
+ desc: 在指定坐标生成不死图腾粒子
586
+ params:
587
+ x: X 坐标
588
+ y: Y 坐标
589
+ z: Z 坐标
590
+ end_sparkles_at:
591
+ desc: 在指定坐标生成末地烛粒子
592
+ params:
593
+ x: X 坐标
594
+ y: Y 坐标
595
+ z: Z 坐标
596
+ particle_at_fx:
597
+ desc: 在以方块 ×100 表示的定点坐标上生成粒子
598
+ params:
599
+ x_fx: X 坐标(方块 ×100)
600
+ y_fx: Y 坐标(方块 ×100)
601
+ z_fx: Z 坐标(方块 ×100)
602
+ particle: 粒子 ID,如 `minecraft:flame`
603
+ draw_line_2d:
604
+ desc: 使用线性插值绘制二维粒子直线
605
+ params:
606
+ x0: 起点 X(方块 ×100)
607
+ y0: 起点 Y(方块 ×100)
608
+ x1: 终点 X(方块 ×100)
609
+ y1: 终点 Y(方块 ×100)
610
+ steps: 插值步数
611
+ z: 所在 Z 平面(方块 ×100)
612
+ particle: 粒子 ID
613
+ draw_circle:
614
+ desc: 在 XZ 平面绘制粒子圆环
615
+ params:
616
+ cx: 圆心 X(方块)
617
+ cy: 圆心 Y(方块)
618
+ cz: 圆心 Z(方块)
619
+ r: 半径(方块 ×100)
620
+ steps: 采样点数量
621
+ particle: 粒子 ID
622
+ draw_helix:
623
+ desc: 绘制可配置半径、高度和圈数的粒子螺旋
624
+ params:
625
+ cx: 中心 X(方块)
626
+ cy_start: 起始 Y(方块)
627
+ cz: 中心 Z(方块)
628
+ r: 半径(方块 ×100)
629
+ height: 总高度(方块)
630
+ rotations: 完整旋转圈数
631
+ steps: 采样点数量
632
+ particle: 粒子 ID
633
+ particle_dot:
634
+ desc: 在整数方块坐标生成单个粒子
635
+ params:
636
+ x: X 坐标(整数方块)
637
+ y: Y 坐标(整数方块)
638
+ z: Z 坐标(整数方块)
639
+ particle: 粒子 ID
640
+
641
+ dialog:
642
+ dialog_say:
643
+ desc: 向玩家或选择器发送一条纯白色聊天消息
644
+ params:
645
+ p: 接收者选择器
646
+ msg: 纯文本消息内容
647
+ dialog_broadcast:
648
+ desc: 向所有玩家广播一条纯白色聊天消息
649
+ params:
650
+ msg: 纯文本消息内容
651
+ dialog_say_color:
652
+ desc: 向玩家或选择器发送带颜色的聊天消息,未知颜色值会回退为白色
653
+ params:
654
+ p: 接收者选择器
655
+ msg: 纯文本消息内容
656
+ color: 颜色编号(0=white, 1=red, 2=green, 3=gold, 4=aqua)
657
+ dialog_title:
658
+ desc: 在玩家屏幕上显示标题和副标题
659
+ params:
660
+ p: 接收者选择器
661
+ title: 主标题文本
662
+ subtitle: 副标题文本
663
+ dialog_title_clear:
664
+ desc: 清除目标当前显示的标题
665
+ params:
666
+ p: 接收者选择器
667
+ dialog_actionbar:
668
+ desc: 在玩家动作栏显示一条短消息
669
+ params:
670
+ p: 接收者选择器
671
+ msg: 纯文本消息内容
672
+
673
+ player:
674
+ heal:
675
+ desc: 通过给 #health 计分板加值来治疗最近的玩家
676
+ params:
677
+ amount: 要恢复的生命值点数(正整数)
678
+ returns: void — 修改 @p 的 #health 计分板目标值
679
+ example_note: heal(10) — 恢复 10 点生命值
680
+ damage:
681
+ desc: 对最近的玩家造成伤害,生命值最低降至 0
682
+ params:
683
+ amount: 造成的伤害点数(正整数)
684
+ returns: void — 修改 @p 的 #health 计分板目标值,不低于 0
685
+ example_note: damage(5) — 对最近玩家造成 5 点伤害
686
+ is_op:
687
+ desc: 检查最近的玩家是否拥有 op 实体标签(管理员权限)
688
+ returns: 若 @p 有 op 标签则返回 1,否则返回 0
689
+ example_note: let admin = is_op()
690
+
691
+ effects:
692
+ speed:
693
+ desc: 给目标实体施加速度提升效果
694
+ params:
695
+ target: "实体选择器(如 @p, @a, @e[...])"
696
+ duration: 效果持续时间(刻,20 刻 = 1 秒)
697
+ level: 效果等级(0 = 速度 I,1 = 速度 II,...)
698
+ returns: void — 应用 minecraft:speed 效果
699
+ jump:
700
+ desc: 给目标实体施加跳跃提升效果
701
+ params:
702
+ target: 实体选择器
703
+ duration: 效果持续时间(刻)
704
+ level: 效果等级(0 = 跳跃 I,...)
705
+ returns: void — 应用 minecraft:jump_boost 效果
706
+ regen:
707
+ desc: 给目标实体施加生命恢复效果
708
+ params:
709
+ target: 实体选择器
710
+ duration: 效果持续时间(刻)
711
+ level: 效果等级
712
+ returns: void — 应用 minecraft:regeneration 效果
713
+ resistance:
714
+ desc: 给目标实体施加伤害抵抗效果
715
+ params:
716
+ target: 实体选择器
717
+ duration: 效果持续时间(刻)
718
+ level: 效果等级
719
+ returns: void — 应用 minecraft:resistance 效果
720
+ strength:
721
+ desc: 给目标实体施加力量提升效果
722
+ params:
723
+ target: 实体选择器
724
+ duration: 效果持续时间(刻)
725
+ level: 效果等级(0 = 力量 I,1 = 力量 II,...)
726
+ returns: void — 应用 minecraft:strength 效果
727
+ invisible:
728
+ desc: 使目标实体隐身
729
+ params:
730
+ target: 实体选择器
731
+ duration: 效果持续时间(刻)
732
+ returns: void — 应用 minecraft:invisibility(等级 0)
733
+ night_vision:
734
+ desc: 给目标实体施加夜视效果
735
+ params:
736
+ target: 实体选择器
737
+ duration: 效果持续时间(刻)
738
+ returns: void — 应用 minecraft:night_vision
739
+ slow_fall:
740
+ desc: 给目标实体施加缓降效果
741
+ params:
742
+ target: 实体选择器
743
+ duration: 效果持续时间(刻)
744
+ returns: void — 应用 minecraft:slow_falling
745
+ glow:
746
+ desc: 使目标实体发光轮廓
747
+ params:
748
+ target: 实体选择器
749
+ duration: 效果持续时间(刻)
750
+ returns: void — 应用 minecraft:glowing
751
+ clear_effects:
752
+ desc: 清除目标实体的所有药水效果
753
+ params:
754
+ target: 实体选择器
755
+ returns: void
756
+ clear_effect:
757
+ desc: 清除目标实体的特定效果
758
+ params:
759
+ target: 实体选择器
760
+ eff: 效果资源位置字符串(如 "minecraft:speed")
761
+ returns: void
762
+ buff_all:
763
+ desc: 给目标施加完整增益套餐(速度 I、力量 I、生命恢复 I、抵抗 I)
764
+ params:
765
+ target: 实体选择器
766
+ duration: 所有效果的持续时间(刻)
767
+ returns: void
768
+
769
+ combat:
770
+ weapon_damage:
771
+ desc: 计算武器基础伤害加上加成的总伤害
772
+ params:
773
+ base: 武器基础伤害值
774
+ bonus: 额外伤害修饰(如附魔或增益)
775
+ returns: base + bonus
776
+ example_note: weapon_damage(10, 5) → 15
777
+ take_damage:
778
+ desc: 对生命值应用伤害,结果最低为 0
779
+ params:
780
+ health: 当前生命值(如来自计分板)
781
+ amount: 要扣减的伤害量
782
+ returns: health - amount,最低为 0;调用后用 scoreboard_set 写回
783
+ example_note: let new_hp = take_damage(current_hp, 8)
784
+ is_dead:
785
+ desc: 判断实体是否已死亡(生命值 <= 0)
786
+ params:
787
+ health: 要判断的当前生命值
788
+ returns: 若 health <= 0 则返回 1(已死亡),否则返回 0(存活)
789
+
790
+ physics:
791
+ gravity_fx:
792
+ desc: Minecraft 重力常数(定点数,0.08 方块/刻² × 100 = 8)
793
+ returns: 8
794
+ air_drag_fx:
795
+ desc: 空气阻力因子(×10000,每刻乘以 0.98)
796
+ returns: 9800
797
+ water_drag_fx:
798
+ desc: 水中阻力因子(×10000,每刻乘以 0.80)
799
+ returns: 8000
800
+ projectile_y:
801
+ desc: 计算抛体在 t 刻后的 Y 轴位置(无阻力,恒定重力)
802
+ params:
803
+ p0: 初始 Y 位置 ×100
804
+ v0: 初始 Y 速度 ×100(方块/刻 × 100)
805
+ t: 时间(刻)
806
+ returns: p0 + v0*t - gravity*t²/2
807
+ projectile_x:
808
+ desc: 计算抛体在 t 刻后的水平 X 位置(匀速,无阻力)
809
+ params:
810
+ p0: 初始 X 位置 ×100
811
+ v0: 水平 X 速度 ×100
812
+ t: 时间(刻)
813
+ returns: p0 + v0*t
814
+ projectile_vy:
815
+ desc: 计算抛体在 t 刻后的 Y 轴速度(含重力)
816
+ params:
817
+ v0: 初始 Y 速度 ×100
818
+ t: 时间(刻)
819
+ returns: v0 - gravity*t
820
+ apply_drag:
821
+ desc: 对速度应用一刻的阻力
822
+ params:
823
+ v_fx: 速度 ×100
824
+ drag_fx: 阻力因子 ×10000(空气 9800,水 8000)
825
+ returns: v_fx * drag_fx / 10000
826
+ apply_gravity:
827
+ desc: 对 Y 速度分量应用一刻重力
828
+ params:
829
+ vy_fx: 当前 Y 速度 ×100
830
+ returns: vy_fx - gravity_fx()
831
+ bounce_v:
832
+ desc: 对速度分量进行弹跳反射(含能量损耗)
833
+ params:
834
+ v_fx: 速度 ×100
835
+ restitution_fx: 弹性系数 ×10000(10000=完全弹性,0=完全非弹性)
836
+ returns: 反向并缩放后的速度
837
+ spring_force:
838
+ desc: 计算弹簧力(胡克定律:F = -k*(x-目标))
839
+ params:
840
+ pos_fx: 当前位置 ×100
841
+ target_fx: 弹簧平衡位置 ×100
842
+ k_fx: 弹簧常数 ×10000
843
+ returns: (target - pos) * k / 10000
844
+
845
+ easing:
846
+ ease_linear:
847
+ desc: 线性缓动,无加速或减速
848
+ params:
849
+ t: "进度 ×10000,范围 [0, 10000]"
850
+ returns: t(恒等函数)
851
+ ease_in_quad:
852
+ desc: 二次方缓入,慢开始快结束
853
+ params:
854
+ t: 进度 ×10000
855
+ returns: t²
856
+ ease_out_quad:
857
+ desc: 二次方缓出,快开始慢结束
858
+ params:
859
+ t: 进度 ×10000
860
+ returns: 1 - (1-t)²
861
+ ease_in_out_quad:
862
+ desc: 二次方缓入缓出,两端慢中间快
863
+ params:
864
+ t: 进度 ×10000
865
+ returns: 前半段 2t²,后半段 1 - 2*(1-t)²
866
+ ease_in_cubic:
867
+ desc: 三次方缓入(比二次方更强烈)
868
+ params:
869
+ t: 进度 ×10000
870
+ returns: t³
871
+ ease_out_cubic:
872
+ desc: 三次方缓出
873
+ params:
874
+ t: 进度 ×10000
875
+ returns: 1 - (1-t)³
876
+ ease_smooth:
877
+ desc: 平滑步进缓动(Hermite 三次曲线:3t² - 2t³)
878
+ params:
879
+ t: 进度 ×10000
880
+ returns: 3t² - 2t³
881
+ ease_smoother:
882
+ desc: 更平滑步进(Ken Perlin 五次曲线:6t⁵ - 15t⁴ + 10t³)
883
+ params:
884
+ t: 进度 ×10000
885
+ returns: 6t⁵ - 15t⁴ + 10t³
886
+ ease_in_back:
887
+ desc: 后退缓入,运动前先轻微后退(过冲预备)
888
+ params:
889
+ t: 进度 ×10000
890
+ returns: 可能短暂低于 0
891
+ ease_out_bounce:
892
+ desc: 弹跳缓出,结尾模拟球落地弹跳
893
+ params:
894
+ t: 进度 ×10000
895
+ returns: "分段弹跳曲线,范围 [0, 10000]"
896
+
897
+ geometry:
898
+ midpoint:
899
+ desc: 计算两个坐标的整数中点
900
+ params:
901
+ a: 第一个坐标
902
+ b: 第二个坐标
903
+ returns: (a + b) / 2(整数截断)
904
+ aabb_contains:
905
+ desc: 检测三维点是否在轴对齐包围盒(AABB)内
906
+ params:
907
+ px: 点 X 坐标
908
+ py: 点 Y 坐标
909
+ pz: 点 Z 坐标
910
+ minx: 包围盒最小 X(含)
911
+ miny: 包围盒最小 Y(含)
912
+ minz: 包围盒最小 Z(含)
913
+ maxx: 包围盒最大 X(含)
914
+ maxy: 包围盒最大 Y(含)
915
+ maxz: 包围盒最大 Z(含)
916
+ returns: 点在包围盒内或边界上返回 1,否则返回 0
917
+ sphere_contains:
918
+ desc: 检测三维点是否在球体内(用平方距离避免 sqrt)
919
+ params:
920
+ px: 点 X
921
+ py: 点 Y
922
+ pz: 点 Z
923
+ cx: 球心 X
924
+ cy: 球心 Y
925
+ cz: 球心 Z
926
+ r: 球半径(与坐标同单位)
927
+ returns: 点在球内返回 1,否则返回 0
928
+ cylinder_contains:
929
+ desc: 检测二维点(XZ 平面)是否在竖直圆柱截面内(忽略 Y 轴)
930
+ params:
931
+ px: 点 X
932
+ pz: 点 Z
933
+ cx: 圆柱中心 X
934
+ cz: 圆柱中心 Z
935
+ r: 圆柱半径
936
+ returns: 点在圆柱截面内返回 1,否则返回 0
937
+ angle_normalize:
938
+ desc: "将角度(度×10000)归一化到 [0, 3600000) 范围"
939
+ params:
940
+ deg: 输入角度 ×10000(可为负数或超过 360°)
941
+ returns: "等效角度在 [0, 3600000) 范围内"
942
+ angle_diff:
943
+ desc: 计算两角度之间的有符号最短角度差(度×10000)
944
+ params:
945
+ a: 起始角 ×10000
946
+ b: 目标角 ×10000
947
+ returns: "有符号差值在 (-1800000, 1800000]"
948
+
949
+ random:
950
+ next_lcg:
951
+ desc: 推进 LCG 状态一步,返回下一个伪随机 int32
952
+ params:
953
+ seed: 当前 LCG 状态(任意非零整数)
954
+ returns: 下一个伪随机 int32(同时作为下次调用的种子)
955
+ example_note: seed = next_lcg(seed)
956
+ random_range:
957
+ desc: "生成 [lo, hi) 范围内的伪随机整数"
958
+ params:
959
+ seed: next_lcg 的输出值
960
+ lo: 下界(含)
961
+ hi: 上界(不含,必须 > lo)
962
+ returns: "范围 [lo, hi) 内的整数"
963
+ example_note: let roll = random_range(seed, 1, 7) — 骰子 1-6
964
+ random_bool:
965
+ desc: 以相等概率生成 0 或 1 的伪随机布尔值
966
+ params:
967
+ seed: next_lcg 的输出值
968
+ returns: 0 或 1,各约 50% 概率
969
+ binomial_sample:
970
+ desc: 模拟 n 次伯努利试验并统计成功次数(二项分布)
971
+ params:
972
+ n: 试验次数
973
+ p_x10000: 成功概率 ×10000(如 5000 = 50%)
974
+ seed: LCG 种子(任意非零整数)
975
+ returns: "成功次数,范围 [0, n]"
976
+ hypergeometric_sample:
977
+ desc: 无放回抽样并统计成功项数(超几何分布)
978
+ params:
979
+ pop_size: 总体大小
980
+ success_states: 总体中成功项数量
981
+ draws: 抽取数量
982
+ seed: LCG 种子
983
+ returns: "抽中的成功项数,范围 [0, min(draws, success_states)]"
984
+
985
+ bits:
986
+ bit_get:
987
+ desc: 检测 x 的第 n 位是否为 1
988
+ params:
989
+ x: 要检测的整数
990
+ n: "位索引(0 = 最低位),范围 [0, 30]"
991
+ returns: 第 n 位为 1 则返回 1,否则返回 0
992
+ bit_set:
993
+ desc: 将 x 的第 n 位设为 1(幂等)
994
+ params:
995
+ x: 要修改的整数
996
+ n: "要置 1 的位索引,范围 [0, 30]"
997
+ returns: 第 n 位置为 1 后的 x
998
+ bit_clear:
999
+ desc: 将 x 的第 n 位清零(幂等)
1000
+ params:
1001
+ x: 要修改的整数
1002
+ n: "要清零的位索引,范围 [0, 30]"
1003
+ returns: 第 n 位置为 0 后的 x
1004
+ bit_toggle:
1005
+ desc: 翻转 x 的第 n 位(0→1 或 1→0)
1006
+ params:
1007
+ x: 要修改的整数
1008
+ n: "要翻转的位索引,范围 [0, 30]"
1009
+ returns: 第 n 位翻转后的 x
1010
+ bit_shl:
1011
+ desc: 左移 x n 位(等效于 x * 2^n)
1012
+ params:
1013
+ x: 要移位的整数
1014
+ n: "左移位数,范围 [0, 30]"
1015
+ returns: x << n
1016
+ bit_shr:
1017
+ desc: 逻辑右移 x n 位(等效于 x / 2^n,向零截断)
1018
+ params:
1019
+ x: 要移位的整数
1020
+ n: "右移位数,范围 [0, 30]"
1021
+ returns: x >> n
1022
+ bit_and:
1023
+ desc: 两个整数的按位与(31 个非符号位)
1024
+ params:
1025
+ a: 第一个操作数
1026
+ b: 第二个操作数
1027
+ returns: a & b(两者均为 1 的位)
1028
+ bit_or:
1029
+ desc: 两个整数的按位或(31 个非符号位)
1030
+ params:
1031
+ a: 第一个操作数
1032
+ b: 第二个操作数
1033
+ returns: a | b(至少一个为 1 的位)
1034
+ bit_xor:
1035
+ desc: 两个整数的按位异或(31 个非符号位)
1036
+ params:
1037
+ a: 第一个操作数
1038
+ b: 第二个操作数
1039
+ returns: a ^ b(恰好一个为 1 的位)
1040
+ bit_not:
1041
+ desc: 按位非 — 翻转 x 的所有 31 个非符号位
1042
+ params:
1043
+ x: 要取反的整数
1044
+ returns: ~x(所有 31 个低位翻转;符号位不变)
1045
+ popcount:
1046
+ desc: 统计 x 中置 1 的位数(汉明重量)
1047
+ params:
1048
+ x: 整数值(使用 31 个低位;符号位不计)
1049
+ returns: "置 1 的位数,范围 [0, 31]"
1050
+
1051
+ color:
1052
+ rgb_pack:
1053
+ desc: 将 RGB 分量打包为单个整数(0xRRGGBB 格式)
1054
+ params:
1055
+ r: "红色通道,范围 [0, 255]"
1056
+ g: "绿色通道,范围 [0, 255]"
1057
+ b: "蓝色通道,范围 [0, 255]"
1058
+ returns: r*65536 + g*256 + b
1059
+ rgb_r:
1060
+ desc: 从打包 RGB 整数中提取红色分量
1061
+ params:
1062
+ packed: 打包颜色整数(0xRRGGBB)
1063
+ returns: "红色通道值,范围 [0, 255]"
1064
+ rgb_g:
1065
+ desc: 从打包 RGB 整数中提取绿色分量
1066
+ params:
1067
+ packed: 打包颜色整数(0xRRGGBB)
1068
+ returns: "绿色通道值,范围 [0, 255]"
1069
+ rgb_b:
1070
+ desc: 从打包 RGB 整数中提取蓝色分量
1071
+ params:
1072
+ packed: 打包颜色整数(0xRRGGBB)
1073
+ returns: "蓝色通道值,范围 [0, 255]"
1074
+ rgb_lerp:
1075
+ desc: 两个打包 RGB 颜色之间的线性插值
1076
+ params:
1077
+ a: 起始颜色(打包 0xRRGGBB)
1078
+ b: 结束颜色(打包 0xRRGGBB)
1079
+ t: "混合因子,范围 [0, 1000](0=a,1000=b)"
1080
+ returns: a 和 b 之间插值得到的打包 RGB 颜色
1081
+ rgb_to_l:
1082
+ desc: 从 RGB 分量计算 HSL 亮度(×10000 精度)
1083
+ params:
1084
+ r: "红色 ×10000,范围 [0, 2550000]"
1085
+ g: 绿色 ×10000
1086
+ b: 蓝色 ×10000
1087
+ returns: "亮度,范围 [0, 10000](0=黑,10000=白)"
1088
+ rgb_to_s:
1089
+ desc: 从 RGB 分量计算 HSL 饱和度(×10000 精度)
1090
+ params:
1091
+ r: 红色 ×10000
1092
+ g: 绿色 ×10000
1093
+ b: 蓝色 ×10000
1094
+ returns: "饱和度,范围 [0, 10000](0=灰,10000=全饱和)"
1095
+ rgb_to_h:
1096
+ desc: 从 RGB 分量计算 HSL 色相(×10000 精度)
1097
+ params:
1098
+ r: 红色 ×10000
1099
+ g: 绿色 ×10000
1100
+ b: 蓝色 ×10000
1101
+ returns: "色相,范围 [0, 3600000](度×10000;0=红,1200000=绿,2400000=蓝)"
1102
+ hsl_to_packed:
1103
+ desc: 将 HSL(×10000 精度)转换为打包 RGB 整数(0xRRGGBB)
1104
+ params:
1105
+ h: "色相 ×10000,范围 [0, 3600000]"
1106
+ s: "饱和度 ×10000,范围 [0, 10000]"
1107
+ l: "亮度 ×10000,范围 [0, 10000]"
1108
+ returns: 打包 RGB 整数,每通道 0-255
1109
+
1110
+ noise:
1111
+ hash_1d:
1112
+ desc: 从一维整数坐标生成伪随机整数
1113
+ params:
1114
+ x: 输入坐标(任意整数)
1115
+ returns: 伪随机整数(任意值;用 % 限制范围)
1116
+ hash_2d:
1117
+ desc: 从二维整数坐标对生成伪随机整数
1118
+ params:
1119
+ x: 第一个坐标
1120
+ z: 第二个坐标
1121
+ returns: 确定性组合两个输入的伪随机整数
1122
+ value_noise_1d:
1123
+ desc: 定点数位置处的平滑一维值噪声
1124
+ params:
1125
+ x_fx: 位置 ×10000(如 10000 = 坐标 1.0)
1126
+ returns: "噪声值,范围 [0, 10000],整数坐标间平滑插值"
1127
+ value_noise_2d:
1128
+ desc: 定点数位置处的平滑二维值噪声
1129
+ params:
1130
+ x_fx: X 位置 ×10000
1131
+ z_fx: Z 位置 ×10000
1132
+ returns: "噪声值,范围 [0, 10000],双线性平滑插值"
1133
+ fbm_1d:
1134
+ desc: 一维分形布朗运动(fBm)— 叠加多组八度值噪声
1135
+ params:
1136
+ x_fx: 位置 ×10000
1137
+ octaves: 噪声层数(1–6;越多细节越丰富但越慢)
1138
+ persistence_fx: 每八度振幅衰减因子 ×10000(5000 = 0.5 推荐)
1139
+ returns: "归一化噪声值,约在 [0, 10000]"
1140
+ fbm_2d:
1141
+ desc: 二维分形布朗运动 — 叠加多组二维值噪声
1142
+ params:
1143
+ x_fx: X 位置 ×10000
1144
+ z_fx: Z 位置 ×10000
1145
+ octaves: 噪声层数(1–6)
1146
+ persistence_fx: 振幅衰减因子 ×10000
1147
+ returns: "归一化噪声值,约在 [0, 10000]"
1148
+ terrain_height:
1149
+ desc: 使用 3 组八度 fBm 噪声生成地形高度
1150
+ params:
1151
+ x: 方块 X 坐标(整数,非定点数)
1152
+ z: 方块 Z 坐标(整数,非定点数)
1153
+ base_y: 基础高度(方块)
1154
+ amplitude: 最大高度变化(方块)
1155
+ returns: 坐标 (x, z) 处的方块高度
1156
+
1157
+ sort:
1158
+ insertion_sort:
1159
+ desc: 就地升序排序整数数组(插入排序,O(n²),适合 n≤64)
1160
+ params:
1161
+ arr: 要排序的整数数组(就地修改)
1162
+ len: "要排序的元素数量(arr[0..len-1])"
1163
+ returns: void — 调用后 arr 升序排列
1164
+ insertion_sort_desc:
1165
+ desc: 就地降序排序整数数组(插入排序)
1166
+ params:
1167
+ arr: 要排序的整数数组(就地修改)
1168
+ len: 要排序的元素数量
1169
+ returns: void — 调用后 arr 降序排列
1170
+ sort_merge:
1171
+ desc: 将两个已排序数组合并为一个新的排序数组
1172
+ params:
1173
+ a: 第一个已排序数组
1174
+ la: a 的元素数量
1175
+ b: 第二个已排序数组
1176
+ lb: b 的元素数量
1177
+ returns: "包含 a 和 b 所有元素的新排序 int[],长度 la+lb"
1178
+ merge_sort_coro:
1179
+ desc: 使用协程将归并排序分散到多个 tick 执行(O(n log n),适合大数组)
1180
+ params:
1181
+ arr: 要排序的整数数组(就地修改)
1182
+ n: arr 的元素数量
1183
+ returns: void — ceil(log₂(n)) 个 tick 后完成排序,onDone 触发
1184
+
1185
+ bigint:
1186
+ bigint_add:
1187
+ desc: 将两个等长大整数相加,结果写入预分配数组
1188
+ params:
1189
+ a: 第一个加数大整数
1190
+ b: 第二个加数大整数
1191
+ result: 输出大整数数组(长度需 >= len)
1192
+ len: 分块数量
1193
+ returns: 进位:0 或 1(非零表示溢出)
1194
+ bigint_sub:
1195
+ desc: 大整数 b 从 a 中减去,结果写入 result(要求 a >= b)
1196
+ params:
1197
+ a: 被减数大整数
1198
+ b: 减数大整数(必须 <= a)
1199
+ result: 输出大整数数组
1200
+ len: 分块数量
1201
+ returns: void — result = a - b
1202
+ bigint_mul_small:
1203
+ desc: 大整数乘以小整数(1 ≤ n ≤ 9999)
1204
+ params:
1205
+ a: 被乘数大整数
1206
+ n: "小整数乘数(范围 [1, 9999])"
1207
+ result: 输出数组
1208
+ len: 分块数量
1209
+ returns: void — result = a × n
1210
+ bigint_mul:
1211
+ desc: 两个大整数相乘(朴素 O(n²) 学校算法)
1212
+ params:
1213
+ a: 第一个大整数(la 个分块)
1214
+ b: 第二个大整数(lb 个分块)
1215
+ result: 输出数组(需 la+lb 个分块,预置为 0)
1216
+ la: a 的分块数
1217
+ lb: b 的分块数
1218
+ returns: void — result = a × b
1219
+ bigint_div_small:
1220
+ desc: 大整数除以小整数,返回商和余数
1221
+ params:
1222
+ a: 被除数大整数
1223
+ divisor: "小整数除数(范围 [1, 9999])"
1224
+ result: 商输出数组
1225
+ len: 分块数量
1226
+ returns: 余数(范围 0..divisor-1)
1227
+ bigint_div:
1228
+ desc: 任意精度整数除法,计算商和余数
1229
+ params:
1230
+ a: 被除数大整数(la 个分块)
1231
+ b: 除数大整数(lb 个分块)
1232
+ quotient: 商输出数组(la 个分块,预置为 0)
1233
+ remainder: 余数输出数组(lb 个分块,预置为 0)
1234
+ la: a 的分块数(需 >= lb)
1235
+ lb: b 的分块数
1236
+ returns: void — quotient = a/b, remainder = a%b
1237
+ bigint_cmp:
1238
+ desc: 比较两个等长大整数
1239
+ params:
1240
+ a: 第一个大整数(最高有效分块在索引 0)
1241
+ b: 第二个大整数
1242
+ len: 分块数量(两者相同)
1243
+ returns: a > b 返回 1,a < b 返回 -1,相等返回 0
1244
+
1245
+ heap:
1246
+ heap_new:
1247
+ desc: 分配一个可容纳 64 个元素的新空堆
1248
+ returns: "int[],h[0]=0(大小),h[1..64] 预分配为零"
1249
+ heap_size:
1250
+ desc: 返回堆中当前存储的元素数量
1251
+ params:
1252
+ h: 由 heap_new 创建的堆数组
1253
+ returns: "当前元素数量(h[0])"
1254
+ heap_peek:
1255
+ desc: 查看堆顶元素但不移除(最小堆返回最小值,最大堆返回最大值)
1256
+ params:
1257
+ h: 非空堆数组;前置条件:heap_size(h) > 0
1258
+ returns: "堆顶元素(h[1])"
1259
+ heap_push:
1260
+ desc: 向最小堆插入一个值
1261
+ params:
1262
+ h: 由 heap_new 创建的堆数组
1263
+ val: 要插入的值
1264
+ returns: 保持堆属性的更新堆数组
1265
+ heap_pop:
1266
+ desc: 移除并丢弃最小堆的最小元素
1267
+ params:
1268
+ h: 非空最小堆;前置条件:heap_size(h) > 0
1269
+ returns: 移除最小值并恢复堆属性的更新堆数组
1270
+ max_heap_push:
1271
+ desc: 向最大堆插入一个值
1272
+ params:
1273
+ h: 由 heap_new 创建的堆数组
1274
+ val: 要插入的值
1275
+ returns: 保持最大堆属性的更新堆数组
1276
+ max_heap_pop:
1277
+ desc: 移除并丢弃最大堆的最大元素
1278
+ params:
1279
+ h: 非空最大堆;前置条件:heap_size(h) > 0
1280
+ returns: 移除最大值并恢复最大堆属性的更新堆数组
1281
+
1282
+ graph:
1283
+ graph_new:
1284
+ desc: 创建含 n 个节点、最多 256 条有向边的新空图
1285
+ params:
1286
+ n: "节点数量(限制在 [0, 64])"
1287
+ returns: "初始化的图 int[],g[0]=0(边数),g[1]=n(节点数)"
1288
+ graph_add_edge:
1289
+ desc: 向图中添加一条有向加权边
1290
+ params:
1291
+ g: 图数组
1292
+ src: 源节点索引
1293
+ dst: 目标节点索引
1294
+ weight: 边权重(无权图使用 1)
1295
+ returns: 更新后的图数组;节点无效或边数已满时静默忽略
1296
+ graph_add_undirected:
1297
+ desc: 添加无向加权边(同时添加 a→b 和 b→a 两条有向边)
1298
+ params:
1299
+ g: 图数组
1300
+ a: 第一个节点索引
1301
+ b: 第二个节点索引
1302
+ weight: 边权重
1303
+ returns: 添加了两条有向边的更新图数组
1304
+ graph_bfs:
1305
+ desc: 从起始节点广度优先搜索,返回访问顺序
1306
+ params:
1307
+ g: 图数组
1308
+ start: 起始节点索引
1309
+ out_visited: "长度 >= node_count 的 int[];已访问节点对应格设为 1"
1310
+ returns: "BFS 访问顺序的节点索引 int[];起始节点无效时返回空数组"
1311
+ graph_dfs:
1312
+ desc: 从起始节点深度优先搜索,返回访问顺序(迭代实现,基于栈)
1313
+ params:
1314
+ g: 图数组
1315
+ start: 起始节点索引
1316
+ out_visited: "长度 >= node_count 的 int[]"
1317
+ returns: "DFS 访问顺序的节点索引 int[]"
1318
+ graph_has_path:
1319
+ desc: 使用 BFS 检测两节点之间是否存在有向路径
1320
+ params:
1321
+ g: 图数组
1322
+ src: 源节点索引
1323
+ dst: 目标节点索引
1324
+ returns: 存在从 src 到 dst 的有向路径返回 1,否则返回 0
1325
+ graph_shortest_path:
1326
+ desc: 使用 Dijkstra 算法计算从源节点到所有节点的最短加权路径
1327
+ params:
1328
+ g: 图数组
1329
+ src: 源节点索引
1330
+ dst: 目标节点索引(用于返回值)
1331
+ out_dist: "长度 >= node_count 的 int[];填入最短距离(不可达为 -1)"
1332
+ returns: src 到 dst 的最短距离,不可达返回 -1
1333
+
1334
+ pathfind:
1335
+ pf_pack:
1336
+ desc: 将 (x, z) 网格坐标编码为单个打包整数
1337
+ params:
1338
+ x: "网格 X 坐标 [0, 15]"
1339
+ z: "网格 Z 坐标 [0, 15]"
1340
+ returns: "x * 16 + z(范围 [0, 255] 内的唯一索引)"
1341
+ pf_unpack_x:
1342
+ desc: 从打包网格索引中提取 X 坐标
1343
+ params:
1344
+ packed: 来自 pf_pack 的打包坐标
1345
+ returns: X 分量:packed / 16
1346
+ pf_unpack_z:
1347
+ desc: 从打包网格索引中提取 Z 坐标
1348
+ params:
1349
+ packed: 来自 pf_pack 的打包坐标
1350
+ returns: Z 分量:packed % 16
1351
+ pf_new_map:
1352
+ desc: 分配一个新的 16×16 网格障碍物地图,所有格子初始可通行
1353
+ returns: "包含 256 个零的 int[];0=可通行,1=阻塞"
1354
+ pf_set_blocked:
1355
+ desc: 将网格格子标记为不可通行(阻塞)
1356
+ params:
1357
+ map: 来自 pf_new_map 的障碍物地图
1358
+ x: "格子 X 坐标 [0, 15]"
1359
+ z: "格子 Z 坐标 [0, 15]"
1360
+ returns: "void — 设置 map[pf_pack(x,z)] = 1"
1361
+ pf_set_open:
1362
+ desc: 将网格格子标记为可通行(开放)
1363
+ params:
1364
+ map: 来自 pf_new_map 的障碍物地图
1365
+ x: "格子 X 坐标 [0, 15]"
1366
+ z: "格子 Z 坐标 [0, 15]"
1367
+ returns: "void — 设置 map[pf_pack(x,z)] = 0"
1368
+ pf_is_blocked:
1369
+ desc: 检查网格格子是否被阻塞或超出边界
1370
+ params:
1371
+ map: 来自 pf_new_map 的障碍物地图
1372
+ x: 格子 X 坐标
1373
+ z: 格子 Z 坐标
1374
+ returns: 超出边界或不可通行返回 1,可通行返回 0
1375
+ pf_heuristic:
1376
+ desc: 计算两个网格格子之间的曼哈顿距离(×10000 精度)
1377
+ params:
1378
+ x1: 第一个格子 X
1379
+ z1: 第一个格子 Z
1380
+ x2: 第二个格子 X
1381
+ z2: 第二个格子 Z
1382
+ returns: (|x1-x2| + |z1-z2|) × 10000,可用作 A* 启发函数
1383
+ pathfind_bfs:
1384
+ desc: 使用 BFS 在 16×16 网格上寻找两格子之间的最短路径
1385
+ params:
1386
+ map: 来自 pf_new_map 的障碍物地图(已设置阻塞)
1387
+ sx: "起始格子 X [0, 15]"
1388
+ sz: "起始格子 Z [0, 15]"
1389
+ gx: "目标格子 X [0, 15]"
1390
+ gz: "目标格子 Z [0, 15]"
1391
+ returns: "从起点到终点(含)的打包坐标 int[],无路径时返回空数组"
1392
+ pathfind_bfs_coro:
1393
+ desc: 跨 tick 分散执行的 BFS 寻路(协程版本,避免卡顿)
1394
+ params:
1395
+ map: 来自 pf_new_map 的障碍物地图
1396
+ sx: "起始格子 X [0, 15]"
1397
+ sz: "起始格子 Z [0, 15]"
1398
+ gx: "目标格子 X [0, 15]"
1399
+ gz: "目标格子 Z [0, 15]"
1400
+ out: "调用方提供的 int[],完成时接收打包路径坐标"
1401
+ returns: "void — 结果异步推入 out[];替换 pf_noop 可设置完成回调"
1402
+
1403
+ scheduler:
1404
+ task_schedule:
1405
+ desc: 为玩家排程指定槽位的任务,在 delay 个 tick 后触发
1406
+ params:
1407
+ p: 目标玩家或实体选择器
1408
+ task_id: "槽位索引 [0, 7]"
1409
+ delay: 等待的 tick 数
1410
+ task_cancel:
1411
+ desc: 取消玩家指定槽位的任务(将计数器归零)
1412
+ params:
1413
+ p: 目标玩家或实体选择器
1414
+ task_id: "槽位索引 [0, 7]"
1415
+ task_ready:
1416
+ desc: 检查玩家指定槽位的任务是否在本 tick 触发;触发后自动清除
1417
+ params:
1418
+ p: 目标玩家或实体选择器
1419
+ task_id: "槽位索引 [0, 7]"
1420
+ returns: 任务触发返回 1,否则返回 0
1421
+ gtask_schedule:
1422
+ desc: 排程全局槽位任务(绑定到 #rs 假玩家),在 delay 个 tick 后触发
1423
+ params:
1424
+ task_id: "槽位索引 [0, 7]"
1425
+ delay: 等待的 tick 数
1426
+ gtask_cancel:
1427
+ desc: 取消全局槽位任务
1428
+ params:
1429
+ task_id: "槽位索引 [0, 7]"
1430
+ gtask_ready:
1431
+ desc: 检查全局槽位任务是否在本 tick 触发;触发后自动清除
1432
+ params:
1433
+ task_id: "槽位索引 [0, 7]"
1434
+ returns: 任务触发返回 1,否则返回 0
1435
+ scheduler_tick:
1436
+ desc: 每 tick 将所有激活的玩家和全局计时器减 1;在 @tick 函数中调用
1437
+
1438
+ state:
1439
+ get_state:
1440
+ desc: 读取实体的当前状态值
1441
+ params:
1442
+ entity: 目标实体选择器
1443
+ returns: rs.state 中存储的状态值;未初始化时返回 -1
1444
+ set_state:
1445
+ desc: 将状态值写入实体
1446
+ params:
1447
+ entity: 目标实体选择器
1448
+ state: 要写入的整数状态常量
1449
+ is_state:
1450
+ desc: 检查实体当前是否处于指定状态
1451
+ params:
1452
+ entity: 目标实体选择器
1453
+ state: 要对比的整数状态常量
1454
+ returns: 实体处于该状态返回 1,否则返回 0
1455
+ init_state:
1456
+ desc: 仅在实体未初始化时(得分为 -1)写入初始状态,避免覆盖进行中的状态
1457
+ params:
1458
+ entity: 目标实体选择器
1459
+ initial: 未初始化时写入的状态常量
1460
+ transition:
1461
+ desc: 仅当实体处于 from 状态时执行受保护的状态转换
1462
+ params:
1463
+ entity: 目标实体选择器
1464
+ from: 所需的当前状态
1465
+ to: 目标状态
1466
+ returns: 转换成功返回 1;实体不在 from 状态返回 0
1467
+
1468
+ ecs:
1469
+ ecs_registry_new:
1470
+ desc: 分配一个全零的 16 槽组件注册表
1471
+ returns: "长度为 16 的 int[],所有槽位为 0"
1472
+ ecs_register:
1473
+ desc: 在注册表中标记 comp_id 为已注册,并返回更新后的注册表
1474
+ params:
1475
+ reg: 来自 ecs_registry_new 的注册表数组
1476
+ comp_id: 组件类型 ID(0–15)
1477
+ returns: 更新后的注册表数组
1478
+ ecs_is_registered:
1479
+ desc: 检查 comp_id 是否已注册
1480
+ params:
1481
+ reg: 来自 ecs_registry_new 的注册表数组
1482
+ comp_id: 组件类型 ID(0–15)
1483
+ returns: 已注册返回 1,否则返回 0
1484
+ ecs_health_init:
1485
+ desc: 创建血量为满血的 Health 组件状态
1486
+ params:
1487
+ entity_score: 用于标识实体的计分板得分
1488
+ max_hp: 最大生命值
1489
+ returns: 长度为 8 的 Health 组件状态数组
1490
+ ecs_health_get:
1491
+ desc: 从 Health 组件状态中返回当前 HP
1492
+ params:
1493
+ state: 来自 ecs_health_init 的状态数组
1494
+ returns: 当前生命值
1495
+ ecs_health_max:
1496
+ desc: 从 Health 组件状态中返回最大 HP
1497
+ params:
1498
+ state: 来自 ecs_health_init 的状态数组
1499
+ returns: 最大生命值
1500
+ ecs_health_set:
1501
+ desc: "设置当前 HP(钳制到 [0, max])并返回更新后的状态"
1502
+ params:
1503
+ state: Health 组件状态
1504
+ hp: 新的生命值(自动钳制到有效范围)
1505
+ returns: 更新后的状态数组
1506
+ ecs_health_damage:
1507
+ desc: 扣除 HP(钳制到 0)并返回更新后的状态
1508
+ params:
1509
+ state: Health 组件状态
1510
+ amount: 扣除量(正整数)
1511
+ returns: 更新后的状态数组
1512
+ ecs_health_heal:
1513
+ desc: 恢复 HP(钳制到最大值)并返回更新后的状态
1514
+ params:
1515
+ state: Health 组件状态
1516
+ amount: 恢复量(正整数)
1517
+ returns: 更新后的状态数组
1518
+ ecs_health_is_dead:
1519
+ desc: 判断实体 HP 是否归零
1520
+ params:
1521
+ state: Health 组件状态
1522
+ returns: HP <= 0 返回 1,存活返回 0
1523
+ ecs_health_pct:
1524
+ desc: 以 ×10000 定点数返回 HP 百分比(5000 = 50.00%)
1525
+ params:
1526
+ state: Health 组件状态
1527
+ returns: current_hp * 10000 / max_hp;max_hp 为 0 时返回 0
1528
+ ecs_vel_init:
1529
+ desc: 创建具有给定初始速度的速度组件状态
1530
+ params:
1531
+ vx: X 方向速度 ×1000(1000 = 1.0 格/tick)
1532
+ vy: Y 方向速度 ×1000
1533
+ vz: Z 方向速度 ×1000
1534
+ returns: 长度为 8 的速度组件状态数组
1535
+ ecs_vel_get_x:
1536
+ desc: 从速度组件状态中返回 X 速度
1537
+ params:
1538
+ state: 速度组件状态
1539
+ returns: X 速度 ×1000
1540
+ ecs_vel_get_y:
1541
+ desc: 从速度组件状态中返回 Y 速度
1542
+ params:
1543
+ state: 速度组件状态
1544
+ returns: Y 速度 ×1000
1545
+ ecs_vel_get_z:
1546
+ desc: 从速度组件状态中返回 Z 速度
1547
+ params:
1548
+ state: 速度组件状态
1549
+ returns: Z 速度 ×1000
1550
+ ecs_vel_set:
1551
+ desc: 设置所有速度分量并返回更新后的状态
1552
+ params:
1553
+ state: 速度组件状态
1554
+ vx: 新 X 速度 ×1000
1555
+ vy: 新 Y 速度 ×1000
1556
+ vz: 新 Z 速度 ×1000
1557
+ returns: 更新后的状态数组
1558
+ ecs_vel_speed:
1559
+ desc: 返回速度向量的模(sqrt(vx²+vy²+vz²))×1000
1560
+ params:
1561
+ state: 速度组件状态
1562
+ returns: 速度大小 ×1000
1563
+ ecs_vel_apply_gravity:
1564
+ desc: 每 tick 将 Y 速度减去重力加速度
1565
+ params:
1566
+ state: 速度组件状态
1567
+ gravity_fx: 重力加速度 ×1000(如 980 ≈ 0.98 格/tick²)
1568
+ returns: 更新后的状态数组
1569
+ ecs_vel_damp:
1570
+ desc: 对所有速度分量乘以阻力系数
1571
+ params:
1572
+ state: 速度组件状态
1573
+ factor_fx: 阻力系数 ×10000(如 8000 = 0.80 倍衰减)
1574
+ returns: 更新后的状态数组
1575
+
1576
+ fft:
1577
+ dft_noop:
1578
+ desc: dft_coro 的默认空回调,不执行任何操作
1579
+ dft_real:
1580
+ desc: "计算 input[0..n-1] 的离散傅里叶变换,输出实部到 out_re"
1581
+ params:
1582
+ input: 信号采样值数组,×10000 定点数
1583
+ n: 采样数量(建议 ≤ 16)
1584
+ out_re: 预分配输出数组,存放实部(×10000)
1585
+ out_im: 预分配输出数组,存放虚部(×10000)
1586
+ dft_magnitude:
1587
+ desc: 返回 DFT 第 k 个频段的幅度(sqrt(re²+im²)),×10000
1588
+ params:
1589
+ re: dft_real 输出的实部数组
1590
+ im: dft_real 输出的虚部数组
1591
+ k: 频段索引
1592
+ returns: 第 k 频段幅度,×10000
1593
+ dft_power:
1594
+ desc: 返回 DFT 第 k 个频段的功率(re²/10000 + im²/10000),×10000
1595
+ params:
1596
+ re: dft_real 输出的实部数组
1597
+ im: dft_real 输出的虚部数组
1598
+ k: 频段索引
1599
+ returns: 第 k 频段功率,×10000
1600
+ dft_coro:
1601
+ desc: dft_real 的协程版本,每 tick 处理 4 个输出频段,避免卡顿
1602
+ params:
1603
+ input: 信号采样值数组,×10000
1604
+ n: 采样数量(建议 ≤ 16)
1605
+ out_re: 预分配输出数组,存放实部
1606
+ out_im: 预分配输出数组,存放虚部
1607
+ dft_freq_bin:
1608
+ desc: 返回 DFT 第 k 个频段对应的频率(Hz)
1609
+ params:
1610
+ sample_rate_hz: 采样率(Hz,如 20 = Minecraft tick 速率)
1611
+ n: 变换大小
1612
+ k: 频段索引
1613
+ returns: 第 k 频段对应的频率(Hz)
1614
+
1615
+ ode:
1616
+ ode_mul_fx:
1617
+ desc: 定点数乘法:a_fx * b_fx / 10000
1618
+ params:
1619
+ a_fx: 第一个操作数 ×10000
1620
+ b_fx: 第二个操作数 ×10000
1621
+ returns: 乘积(×10000)
1622
+ ode_weighted_increment:
1623
+ desc: 计算 RK4 加权增量:h * (k1 + 2k2 + 2k3 + k4) / 6
1624
+ params:
1625
+ h_fx: 步长 ×10000
1626
+ deriv_sum_fx: k1 + 2k2 + 2k3 + k4,×10000
1627
+ returns: 加权增量 ×10000
1628
+ ode_reset:
1629
+ desc: 在 storage rs:ode 中初始化 ODE 模块状态
1630
+ params:
1631
+ system_id: 内置系统常量(1=衰减,2=增长,3=振荡器)
1632
+ t_fx: 初始时间 ×10000
1633
+ y_fx: 初始主变量 y(0) ×10000
1634
+ y2_fx: 初始次变量 y'(0) ×10000(仅 system 3 使用)
1635
+ k_fx: 速率/弹性常数 ×10000
1636
+ extra_fx: 阻尼系数 ×10000(仅 system 3 使用)
1637
+ ode_get_system:
1638
+ desc: 返回 ODE 状态中的系统 ID
1639
+ returns: 槽位 0 中存储的系统 ID
1640
+ ode_get_t:
1641
+ desc: 返回当前时间 t(×10000)
1642
+ returns: 当前时间 ×10000
1643
+ ode_get_y:
1644
+ desc: 返回当前主变量 y(×10000)
1645
+ returns: 当前 y 值 ×10000
1646
+ ode_get_y2:
1647
+ desc: 返回当前次变量 y'(×10000,仅对 system 3 有意义)
1648
+ returns: 当前 y' 值 ×10000
1649
+ ode_get_k:
1650
+ desc: 返回速率常数 k(×10000)
1651
+ returns: 速率常数 ×10000
1652
+ ode_get_extra:
1653
+ desc: 返回额外参数(×10000,system 3 中表示阻尼)
1654
+ returns: 额外参数 ×10000
1655
+ ode_get_steps:
1656
+ desc: 返回已执行的步数
1657
+ returns: 步数(普通整数)
1658
+ ode_step:
1659
+ desc: 向前推进一个 RK4 步
1660
+ params:
1661
+ h_fx: 步长 ×10000(如 1000 = 0.1 时间单位)
1662
+ ode_run:
1663
+ desc: 对标量 ODE 系统执行 steps 步 RK4 积分
1664
+ params:
1665
+ system_id: 内置系统常量(1 或 2 用于标量系统)
1666
+ t0_fx: 初始时间 ×10000
1667
+ y0_fx: 初始 y 值 ×10000
1668
+ h_fx: 步长 ×10000
1669
+ steps: RK4 步数
1670
+ k_fx: 速率常数 ×10000
1671
+ ode_run2:
1672
+ desc: 对二维 ODE 系统(如谐振子)执行 steps 步 RK4 积分
1673
+ params:
1674
+ system_id: 内置系统常量(system 3 = 谐振子)
1675
+ t0_fx: 初始时间 ×10000
1676
+ y0_fx: 初始 y 值 ×10000
1677
+ y20_fx: 初始 y' 值 ×10000
1678
+ h_fx: 步长 ×10000
1679
+ steps: RK4 步数
1680
+ k_fx: 弹性常数 ×10000
1681
+ extra_fx: 阻尼系数 ×10000
1682
+
1683
+ linalg:
1684
+ vec2d_dot:
1685
+ desc: 两个二维向量的点积
1686
+ params:
1687
+ ax: 向量 A 的 X 分量
1688
+ ay: 向量 A 的 Y 分量
1689
+ bx: 向量 B 的 X 分量
1690
+ by: 向量 B 的 Y 分量
1691
+ returns: ax*bx + ay*by
1692
+ vec2d_length:
1693
+ desc: 二维向量的欧几里得长度
1694
+ params:
1695
+ x: X 分量
1696
+ y: Y 分量
1697
+ returns: sqrt(x² + y²)
1698
+ vec2d_dist:
1699
+ desc: 两个二维点之间的欧几里得距离
1700
+ params:
1701
+ ax: 点 A 的 X 坐标
1702
+ ay: 点 A 的 Y 坐标
1703
+ bx: 点 B 的 X 坐标
1704
+ by: 点 B 的 Y 坐标
1705
+ returns: sqrt((ax-bx)² + (ay-by)²)
1706
+ vec2d_normalize_x:
1707
+ desc: 二维单位向量的 X 分量;零向量返回 0.0
1708
+ params:
1709
+ x: X 分量
1710
+ y: Y 分量
1711
+ returns: x / ||(x,y)||,零向量时返回 0.0
1712
+ vec2d_normalize_y:
1713
+ desc: 二维单位向量的 Y 分量;零向量返回 0.0
1714
+ params:
1715
+ x: X 分量
1716
+ y: Y 分量
1717
+ returns: y / ||(x,y)||,零向量时返回 0.0
1718
+ vec3d_dot:
1719
+ desc: 两个三维向量的点积
1720
+ params:
1721
+ returns: ax*bx + ay*by + az*bz
1722
+ vec3d_length:
1723
+ desc: 三维向量的欧几里得长度
1724
+ params:
1725
+ returns: sqrt(x² + y² + z²)
1726
+ vec3d_dist:
1727
+ desc: 两个三维点之间的欧几里得距离
1728
+ params:
1729
+ returns: sqrt((ax-bx)² + (ay-by)² + (az-bz)²)
1730
+ vec3d_cross_x:
1731
+ desc: 叉积 a × b 的 X 分量
1732
+ params:
1733
+ returns: ay*bz - az*by
1734
+ vec3d_cross_y:
1735
+ desc: 叉积 a × b 的 Y 分量
1736
+ params:
1737
+ returns: az*bx - ax*bz
1738
+ vec3d_cross_z:
1739
+ desc: 叉积 a × b 的 Z 分量
1740
+ params:
1741
+ returns: ax*by - ay*bx
1742
+ vec3d_normalize_x:
1743
+ desc: 三维单位向量的 X 分量;零向量返回 0.0
1744
+ params:
1745
+ returns: x / ||(x,y,z)||,零向量时返回 0.0
1746
+ vec3d_normalize_y:
1747
+ desc: 三维单位向量的 Y 分量;零向量返回 0.0
1748
+ params:
1749
+ returns: y / ||(x,y,z)||,零向量时返回 0.0
1750
+ vec3d_normalize_z:
1751
+ desc: 三维单位向量的 Z 分量;零向量返回 0.0
1752
+ params:
1753
+ returns: z / ||(x,y,z)||,零向量时返回 0.0
1754
+ mat2d_det:
1755
+ desc: 2×2 矩阵的行列式
1756
+ params:
1757
+ returns: a*d - b*c
1758
+ mat2d_mul_r0c0:
1759
+ desc: "两个 2×2 矩阵乘积 M0×M1 的元素 [0,0]"
1760
+ params:
1761
+ returns: a0*a1 + b0*c1
1762
+ mat2d_mul_r0c1:
1763
+ desc: "两个 2×2 矩阵乘积 M0×M1 的元素 [0,1]"
1764
+ returns: a0*b1 + b0*d1
1765
+ mat2d_mul_r1c0:
1766
+ desc: "两个 2×2 矩阵乘积 M0×M1 的元素 [1,0]"
1767
+ returns: c0*a1 + d0*c1
1768
+ mat2d_mul_r1c1:
1769
+ desc: "两个 2×2 矩阵乘积 M0×M1 的元素 [1,1]"
1770
+ returns: c0*b1 + d0*d1
1771
+ mat2d_vecmul_x:
1772
+ desc: 2×2 矩阵与向量乘积 M×v 的 X 分量
1773
+ params:
1774
+ returns: a*vx + b*vy
1775
+ mat2d_vecmul_y:
1776
+ desc: 2×2 矩阵与向量乘积 M×v 的 Y 分量
1777
+ params:
1778
+ returns: c*vx + d*vy
1779
+ solve2d_x:
1780
+ desc: 用 Cramer 法则求解 2×2 线性方程组的 x 分量
1781
+ params:
1782
+ returns: (ex*d - b*ey) / det
1783
+ solve2d_y:
1784
+ desc: 用 Cramer 法则求解 2×2 线性方程组的 y 分量
1785
+ params:
1786
+ returns: (a*ey - ex*c) / det
1787
+
1788
+ matrix:
1789
+ rotate2d_x:
1790
+ desc: 将 (x, y) 绕原点旋转 angle_deg(×10000°)后的 X 分量
1791
+ params:
1792
+ x: 输入 X 坐标 ×10000
1793
+ y: 输入 Y 坐标 ×10000
1794
+ angle_deg: 角度 ×10000(如 450000 = 45°)
1795
+ returns: x*cos(angle) - y*sin(angle),×10000
1796
+ rotate2d_y:
1797
+ desc: 将 (x, y) 绕原点旋转 angle_deg(×10000°)后的 Y 分量
1798
+ params:
1799
+ x: 输入 X 坐标 ×10000
1800
+ y: 输入 Y 坐标 ×10000
1801
+ angle_deg: 角度 ×10000
1802
+ returns: x*sin(angle) + y*cos(angle),×10000
1803
+ scale_x:
1804
+ desc: 对 X 坐标施加缩放(sx_fx ×10000)
1805
+ params:
1806
+ x: 输入 X 值 ×10000
1807
+ sx_fx: 缩放系数 ×10000(如 20000 = 2×)
1808
+ returns: x * sx_fx / 10000
1809
+ scale_y:
1810
+ desc: 对 Y 坐标施加缩放
1811
+ params:
1812
+ y: 输入 Y 值 ×10000
1813
+ sy_fx: 缩放系数 ×10000
1814
+ returns: y * sy_fx / 10000
1815
+ scale_z:
1816
+ desc: 对 Z 坐标施加缩放
1817
+ params:
1818
+ z: 输入 Z 值 ×10000
1819
+ sz_fx: 缩放系数 ×10000
1820
+ returns: z * sz_fx / 10000
1821
+ uniform_scale:
1822
+ desc: 对单个分量施加均匀缩放
1823
+ params:
1824
+ v: 输入分量 ×10000
1825
+ s_fx: 均匀缩放系数 ×10000
1826
+ returns: v * s_fx / 10000
1827
+ rotate_y_x:
1828
+ desc: 绕 Y 轴旋转 angle_deg(×10000°)后的 X 分量
1829
+ params:
1830
+ angle_deg: 角度 ×10000
1831
+ returns: x*cos + z*sin,×10000
1832
+ rotate_y_z:
1833
+ desc: 绕 Y 轴旋转 angle_deg(×10000°)后的 Z 分量
1834
+ params:
1835
+ angle_deg: 角度 ×10000
1836
+ returns: -x*sin + z*cos,×10000
1837
+ rotate_x_y:
1838
+ desc: 绕 X 轴旋转 angle_deg(×10000°)后的 Y 分量
1839
+ params:
1840
+ angle_deg: 角度 ×10000
1841
+ returns: y*cos - z*sin,×10000
1842
+ rotate_x_z:
1843
+ desc: 绕 X 轴旋转 angle_deg(×10000°)后的 Z 分量
1844
+ params:
1845
+ angle_deg: 角度 ×10000
1846
+ returns: y*sin + z*cos,×10000
1847
+ quat_sin_half:
1848
+ desc: 用于 Display Entity Y 轴四元数的 sin(angle/2),×1000
1849
+ params:
1850
+ angle_deg_fx: 完整旋转角度 ×10000
1851
+ returns: sin(angle/2),×1000
1852
+ quat_cos_half:
1853
+ desc: 用于 Display Entity Y 轴四元数的 cos(angle/2),×1000
1854
+ params:
1855
+ angle_deg_fx: 完整旋转角度 ×10000
1856
+ returns: cos(angle/2),×1000
1857
+ billboard_y:
1858
+ desc: 计算朝向玩家的广告牌 Y 轴旋转角度
1859
+ params:
1860
+ player_yaw_fx: "玩家偏航角 ×10000(来自实体 NBT Rotation[0])"
1861
+ returns: "广告牌 Y 旋转 ×10000,范围 [0, 3600000)"
1862
+ lerp_angle:
1863
+ desc: 在两个角度(×10000)之间沿最短弧线性插值
1864
+ params:
1865
+ a_fx: 起始角度 ×10000
1866
+ b_fx: 终止角度 ×10000
1867
+ t: 插值系数 ×10000(0 = a,10000 = b)
1868
+ returns: 插值角度 ×10000
1869
+ mat3_mul_elem:
1870
+ desc: "计算 3×3 矩阵乘积 A×B 的元素 C[row][col](×10000)"
1871
+ params:
1872
+ a00: "A[0,0] … a22: A[2,2](9 个行主序元素,×10000)"
1873
+ b00: "B[0,0] … b22: B[2,2](9 个行主序元素,×10000)"
1874
+ row: 目标行索引(0–2)
1875
+ col: 目标列索引(0–2)
1876
+ returns: "C[row][col],×10000"
1877
+ mat3_mul_vec3_elem:
1878
+ desc: 计算 3×3 矩阵与列向量乘积 A×v 的一个分量
1879
+ params:
1880
+ a00: A 的 9 个行主序元素,×10000
1881
+ comp: 输出分量索引(0=x, 1=y, 2=z)
1882
+ returns: "(A×v)[comp],×10000"
1883
+ mat4_mul_elem:
1884
+ desc: "计算 4×4 矩阵乘积 A×B 的元素 C[row][col](×10000)"
1885
+ params:
1886
+ a00: A 的 16 个行主序元素,×10000
1887
+ b00: B 的 16 个行主序元素,×10000
1888
+ row: 目标行索引(0–3)
1889
+ col: 目标列索引(0–3)
1890
+ returns: "C[row][col],×10000"
1891
+ mat4_mul_vec4_elem:
1892
+ desc: 计算 4×4 矩阵与齐次向量乘积 A×v 的一个分量
1893
+ params:
1894
+ a00: A 的 16 个行主序元素,×10000
1895
+ comp: 输出分量索引(0=x, 1=y, 2=z, 3=w)
1896
+ returns: "(A×v)[comp],×10000"
1897
+
1898
+ signal:
1899
+ uniform_int:
1900
+ desc: "返回 [lo, hi] 内的均匀随机整数(使用 LCG 随机数生成器)"
1901
+ params:
1902
+ seed: 任意整数种子
1903
+ lo: 下界(含)
1904
+ hi: 上界(含)
1905
+ returns: "[lo, hi] 内的伪随机整数"
1906
+ uniform_frac:
1907
+ desc: "返回 [0, 10000] 内的均匀随机分数(×10000 精度)"
1908
+ params:
1909
+ seed: 任意整数种子
1910
+ returns: "[0, 10000] 内的伪随机整数"
1911
+ normal_approx12:
1912
+ desc: 使用 Irwin-Hall 方法(12 个均匀采样之和)近似 N(0,1) 变量
1913
+ params:
1914
+ seed: 任意整数种子
1915
+ returns: "近似 N(0,1) 采样值 ×10000,范围约 [-60000, 60000]"
1916
+ exp_dist_approx:
1917
+ desc: 从速率为 lambda_fx 的指数分布中采样(结果上限为 100000)
1918
+ params:
1919
+ seed: 任意整数种子
1920
+ lambda_fx: 速率参数 ×10000(如 10000 = 速率 1.0)
1921
+ returns: 指数分布变量 ×10000,上限 100000
1922
+ bernoulli:
1923
+ desc: 以 p_fx/10000 的概率返回 1,否则返回 0
1924
+ params:
1925
+ seed: 任意整数种子
1926
+ p_fx: 概率 ×10000(如 5000 = 50%,1000 = 10%)
1927
+ returns: 以给定概率返回 1,否则返回 0
1928
+ weighted2:
1929
+ desc: 按权重 w0、w1 随机选择 0 或 1
1930
+ params:
1931
+ seed: 任意整数种子
1932
+ w0: 结果 0 的权重
1933
+ w1: 结果 1 的权重
1934
+ returns: 按权重比例采样的 0 或 1
1935
+ weighted3:
1936
+ desc: 按权重 w0、w1、w2 随机选择 0、1 或 2
1937
+ params:
1938
+ seed: 任意整数种子
1939
+ w0: 结果 0 的权重
1940
+ w1: 结果 1 的权重
1941
+ w2: 结果 2 的权重
1942
+ returns: 按权重比例采样的 0、1 或 2
1943
+ gamma_sample:
1944
+ desc: 从 Gamma(k, θ) 分布中采样(支持整数 k = 1..5)
1945
+ params:
1946
+ shape_k: 形状参数 k ×10000(如 20000 = k=2)
1947
+ scale_theta: 尺度参数 θ ×10000(如 10000 = θ=1.0)
1948
+ seed: 任意整数种子
1949
+ returns: Gamma 分布变量 ×10000
1950
+ poisson_sample:
1951
+ desc: 使用 Knuth 算法从 Poisson(λ) 分布中采样(λ ≤ 20 时效果最佳)
1952
+ params:
1953
+ lambda: 速率参数 ×10000(如 30000 = λ=3.0)
1954
+ seed: 任意整数种子
1955
+ returns: Poisson 计数(普通整数,非 ×10000)
1956
+ geometric_sample:
1957
+ desc: 从几何分布 Geometric(p) 中采样(首次成功前失败次数)
1958
+ params:
1959
+ p_success: 成功概率 ×10000(如 5000 = p=0.5)
1960
+ seed: 任意整数种子
1961
+ returns: 非负整数失败次数
1962
+ negative_binomial_sample:
1963
+ desc: 从负二项分布 NegBin(r, p) 中采样(r 次成功前的总失败次数)
1964
+ params:
1965
+ r: 成功次数(普通整数,如 1, 2, 3)
1966
+ p_success: 成功概率 ×10000
1967
+ seed: 任意整数种子
1968
+ returns: 总失败次数
1969
+ dft_real:
1970
+ desc: 计算最多 8 个样本的实值信号第 k 个 DFT 频段实部
1971
+ params:
1972
+ s0: "样本 0 ×10000 … s7: 样本 7 ×10000"
1973
+ n: 样本数(1–8)
1974
+ k: 频段索引(0 到 n−1)
1975
+ returns: DFT 第 k 频段实部,×10000
1976
+ dft_imag:
1977
+ desc: 计算最多 8 个样本的实值信号第 k 个 DFT 频段虚部
1978
+ params:
1979
+ s0: "样本 0 ×10000 … s7: 样本 7 ×10000"
1980
+ n: 样本数(1–8)
1981
+ k: 频段索引
1982
+ returns: DFT 第 k 频段虚部,×10000(使用负正弦约定)
1983
+ dft_magnitude:
1984
+ desc: 计算 DFT 第 k 频段的幅度 sqrt(re² + im²),×10000
1985
+ params:
1986
+ s0: "样本 0 ×10000 … s7: 样本 7 ×10000"
1987
+ n: 样本数
1988
+ k: 频段索引
1989
+ returns: 第 k 频段幅度,×10000
1990
+
1991
+ parabola:
1992
+ parabola_gravity:
1993
+ desc: 每 tick 的 Minecraft 重力加速度(×10000,固定为 800)
1994
+ returns: "800"
1995
+ parabola_gravity_half:
1996
+ desc: 每 tick 重力加速度的一半(用于位移公式)
1997
+ returns: "400"
1998
+ parabola_vx:
1999
+ desc: 计算在 ticks 个 tick 内水平移动 dx 格所需的初始 X 速度(×10000)
2000
+ params:
2001
+ dx: X 方向位移(格)
2002
+ ticks: 飞行时间(tick)
2003
+ returns: 初始 X 速度 ×10000;ticks ≤ 0 时返回 0
2004
+ parabola_vy:
2005
+ desc: 计算在 ticks 个 tick 内垂直移动 dy 格所需的初始 Y 速度(×10000)
2006
+ params:
2007
+ dy: 垂直位移(格,正值向上)
2008
+ ticks: 飞行时间(tick)
2009
+ returns: 初始 Y 速度 ×10000;ticks ≤ 0 时返回 0
2010
+ parabola_vz:
2011
+ desc: 计算在 ticks 个 tick 内水平移动 dz 格所需的初始 Z 速度(×10000)
2012
+ params:
2013
+ dz: Z 方向位移(格)
2014
+ ticks: 飞行时间(tick)
2015
+ returns: 初始 Z 速度 ×10000;ticks ≤ 0 时返回 0
2016
+ parabola_speed_xz:
2017
+ desc: 计算到达 (dx, dz) 所需的水平速度大小(×10000)
2018
+ params:
2019
+ dx: X 位移(格)
2020
+ dz: Z 位移(格)
2021
+ ticks: 飞行时间(tick)
2022
+ returns: 水平发射速度 ×10000;ticks ≤ 0 时返回 0
2023
+ parabola_x:
2024
+ desc: 在 t tick 时的 X 位置(格)
2025
+ params:
2026
+ vx0: 初始 X 速度 ×10000
2027
+ t: 已过 tick 数
2028
+ returns: X 位移(格)
2029
+ parabola_y:
2030
+ desc: 在 t tick 时的 Y 位置(格)
2031
+ params:
2032
+ vy0: 初始 Y 速度 ×10000
2033
+ t: 已过 tick 数
2034
+ returns: Y 位移(格,正值向上)
2035
+ parabola_z:
2036
+ desc: 在 t tick 时的 Z 位置(格)
2037
+ params:
2038
+ vz0: 初始 Z 速度 ×10000
2039
+ t: 已过 tick 数
2040
+ returns: Z 位移(格)
2041
+ parabola_flight_time:
2042
+ desc: 估算抛体返回发射高度时的 tick 数
2043
+ params:
2044
+ vy0: 初始 Y 速度 ×10000
2045
+ returns: 飞行时间(tick);vy0 ≤ 0 时返回 0
2046
+ parabola_max_height:
2047
+ desc: 抛体高出发射点的最大高度(格)
2048
+ params:
2049
+ vy0: 初始 Y 速度 ×10000
2050
+ returns: 顶点高度(格);vy0 ≤ 0 时返回 0
2051
+ parabola_step_vx:
2052
+ desc: 对 X 速度施加一 tick 阻力
2053
+ params:
2054
+ vx: 当前 X 速度 ×10000
2055
+ drag: 阻力系数 ×10000(如 9900 = 0.99 箭矢)
2056
+ returns: 新 X 速度 ×10000
2057
+ parabola_step_vy:
2058
+ desc: 对 Y 速度先施加重力再施加阻力(一 tick)
2059
+ params:
2060
+ vy: 当前 Y 速度 ×10000
2061
+ drag: 阻力系数 ×10000
2062
+ returns: 新 Y 速度 ×10000
2063
+ parabola_step_vz:
2064
+ desc: 对 Z 速度施加一 tick 阻力
2065
+ params:
2066
+ vz: 当前 Z 速度 ×10000
2067
+ drag: 阻力系数 ×10000
2068
+ returns: 新 Z 速度 ×10000
2069
+ parabola_ticks_for_range:
2070
+ desc: 根据水平距离估算飞行 tick 数(启发式,约 0.8 格/tick 水平速度)
2071
+ params:
2072
+ range: 水平距离(格)
2073
+ returns: 估算 tick 数(最小为 1)
2074
+ parabola_in_range:
2075
+ desc: 检查目标是否在水平射程内
2076
+ params:
2077
+ dx: 到目标的 X 位移(格)
2078
+ dz: 到目标的 Z 位移(格)
2079
+ max_range: 最大射程(格)
2080
+ returns: dist(dx,dz) ≤ max_range 返回 1,否则返回 0
2081
+
2082
+ quaternion:
2083
+ quat_identity_w:
2084
+ desc: 单位四元数 (0,0,0,1) 的 W 分量
2085
+ returns: "10000"
2086
+ quat_identity_x:
2087
+ desc: 单位四元数的 X 分量
2088
+ returns: "0"
2089
+ quat_identity_y:
2090
+ desc: 单位四元数的 Y 分量
2091
+ returns: "0"
2092
+ quat_identity_z:
2093
+ desc: 单位四元数的 Z 分量
2094
+ returns: "0"
2095
+ quat_axis_x_x:
2096
+ desc: 绕 X 轴旋转 angle_deg° 的四元数 X 分量
2097
+ params:
2098
+ angle_deg: 旋转角度(整数,度)
2099
+ returns: sin(angle/2) ×10000
2100
+ quat_axis_x_y:
2101
+ desc: 绕 X 轴旋转 angle_deg° 的四元数 Y 分量
2102
+ params:
2103
+ angle_deg: 旋转角度(度)
2104
+ returns: "0"
2105
+ quat_axis_x_z:
2106
+ desc: 绕 X 轴旋转 angle_deg° 的四元数 Z 分量
2107
+ params:
2108
+ angle_deg: 旋转角度(度)
2109
+ returns: "0"
2110
+ quat_axis_x_w:
2111
+ desc: 绕 X 轴旋转 angle_deg° 的四元数 W 分量
2112
+ params:
2113
+ angle_deg: 旋转角度(度)
2114
+ returns: cos(angle/2) ×10000
2115
+ quat_axis_y_x:
2116
+ desc: 绕 Y 轴旋转 angle_deg° 的四元数 X 分量
2117
+ params:
2118
+ angle_deg: 旋转角度(度)
2119
+ returns: "0"
2120
+ quat_axis_y_y:
2121
+ desc: 绕 Y 轴旋转 angle_deg° 的四元数 Y 分量
2122
+ params:
2123
+ angle_deg: 旋转角度(度)
2124
+ returns: sin(angle/2) ×10000
2125
+ quat_axis_y_z:
2126
+ desc: 绕 Y 轴旋转 angle_deg° 的四元数 Z 分量
2127
+ params:
2128
+ angle_deg: 旋转角度(度)
2129
+ returns: "0"
2130
+ quat_axis_y_w:
2131
+ desc: 绕 Y 轴旋转 angle_deg° 的四元数 W 分量
2132
+ params:
2133
+ angle_deg: 旋转角度(度)
2134
+ returns: cos(angle/2) ×10000
2135
+ quat_axis_z_x:
2136
+ desc: 绕 Z 轴旋转 angle_deg° 的四元数 X 分量
2137
+ params:
2138
+ angle_deg: 旋转角度(度)
2139
+ returns: "0"
2140
+ quat_axis_z_y:
2141
+ desc: 绕 Z 轴旋转 angle_deg° 的四元数 Y 分量
2142
+ params:
2143
+ angle_deg: 旋转角度(度)
2144
+ returns: "0"
2145
+ quat_axis_z_z:
2146
+ desc: 绕 Z 轴旋转 angle_deg° 的四元数 Z 分量
2147
+ params:
2148
+ angle_deg: 旋转角度(度)
2149
+ returns: sin(angle/2) ×10000
2150
+ quat_axis_z_w:
2151
+ desc: 绕 Z 轴旋转 angle_deg° 的四元数 W 分量
2152
+ params:
2153
+ angle_deg: 旋转角度(度)
2154
+ returns: cos(angle/2) ×10000
2155
+ quat_mul_x:
2156
+ desc: 四元数乘积 a×b 的 X 分量(所有分量 ×10000)
2157
+ params:
2158
+ returns: (a×b) 的 X 分量 ×10000
2159
+ quat_mul_y:
2160
+ desc: 四元数乘积 a×b 的 Y 分量
2161
+ returns: (a×b) 的 Y 分量 ×10000
2162
+ quat_mul_z:
2163
+ desc: 四元数乘积 a×b 的 Z 分量
2164
+ returns: (a×b) 的 Z 分量 ×10000
2165
+ quat_mul_w:
2166
+ desc: 四元数乘积 a×b 的 W 分量
2167
+ returns: (a×b) 的 W 分量 ×10000
2168
+ quat_conj_x:
2169
+ desc: 四元数共轭的 X 分量
2170
+ params:
2171
+ returns: -qx
2172
+ quat_conj_y:
2173
+ desc: 四元数共轭的 Y 分量
2174
+ returns: -qy
2175
+ quat_conj_z:
2176
+ desc: 四元数共轭的 Z 分量
2177
+ returns: -qz
2178
+ quat_conj_w:
2179
+ desc: 四元数共轭的 W 分量(不变)
2180
+ returns: qw
2181
+ quat_mag_sq:
2182
+ desc: 四元数的模平方(×10000);单位四元数应等于 10000
2183
+ params:
2184
+ returns: qx²/10000 + qy²/10000 + qz²/10000 + qw²/10000
2185
+ quat_dot:
2186
+ desc: 两个四元数的点积(×10000)
2187
+ params:
2188
+ returns: ax*bx/10000 + ay*by/10000 + az*bz/10000 + aw*bw/10000
2189
+ quat_slerp_x:
2190
+ desc: 两个四元数在 t/1000 处球面线性插值的 X 分量(LERP + 归一化近似)
2191
+ params:
2192
+ t: 插值系数 ×1000(0=a,1000=b)
2193
+ returns: 插值四元数的 X 分量 ×10000
2194
+ quat_slerp_y:
2195
+ desc: 两个四元数在 t/1000 处球面线性插值的 Y 分量
2196
+ params:
2197
+ returns: 插值四元数的 Y 分量 ×10000
2198
+ quat_slerp_z:
2199
+ desc: 两个四元数在 t/1000 处球面线性插值的 Z 分量
2200
+ params:
2201
+ returns: 插值四元数的 Z 分量 ×10000
2202
+ quat_slerp_w:
2203
+ desc: 两个四元数在 t/1000 处球面线性插值的 W 分量
2204
+ params:
2205
+ returns: 插值四元数的 W 分量 ×10000
2206
+ quat_euler_x:
2207
+ desc: 欧拉角(YXZ 顺序,MC 约定)转换为四元数的 X 分量
2208
+ params:
2209
+ yaw: Y 轴旋转(度)
2210
+ pitch: X 轴旋转(度)
2211
+ roll: Z 轴旋转(度)
2212
+ returns: X 分量 ×10000
2213
+ quat_euler_y:
2214
+ desc: 欧拉角(YXZ 顺序)转换为四元数的 Y 分量
2215
+ params:
2216
+ yaw: Y 轴旋转(度)
2217
+ pitch: X 轴旋转(度)
2218
+ roll: Z 轴旋转(度)
2219
+ returns: Y 分量 ×10000
2220
+ quat_euler_z:
2221
+ desc: 欧拉角(YXZ 顺序)转换为四元数的 Z 分量
2222
+ params:
2223
+ yaw: Y 轴旋转(度)
2224
+ pitch: X 轴旋转(度)
2225
+ roll: Z 轴旋转(度)
2226
+ returns: Z 分量 ×10000
2227
+ quat_euler_w:
2228
+ desc: 欧拉角(YXZ 顺序)转换为四元数的 W 分量
2229
+ params:
2230
+ yaw: Y 轴旋转(度)
2231
+ pitch: X 轴旋转(度)
2232
+ roll: Z 轴旋转(度)
2233
+ returns: W 分量 ×10000
2234
+
2235
+ math_hp:
2236
+ init_trig:
2237
+ desc: 初始化 sin_hp/cos_hp 使用的 Marker 实体(rs_trig 标签)。可多次调用(内有 unless entity 保护),必须在 @load 中调用。
2238
+ returns: 无返回值
2239
+ sin_hp:
2240
+ desc: 利用 MC Marker 实体旋转技巧实现高精度正弦(~15 位有效数字)。
2241
+ params:
2242
+ angle: 角度 ×10000(如 450000 = 45°,900000 = 90°)
2243
+ returns: sin(angle/10000°) ×10000
2244
+ cos_hp:
2245
+ desc: 利用 MC Marker 实体旋转技巧实现高精度余弦(~15 位有效数字)。
2246
+ params:
2247
+ angle: 角度 ×10000
2248
+ returns: cos(angle/10000°) ×10000
2249
+ init_div:
2250
+ desc: 初始化 SVD 除法运算使用的 block_display 实体(rs_div 标签)。需在 @load 中单独调用(与 init_trig 独立)。
2251
+ returns: 无返回值
2252
+ div_hp:
2253
+ desc: 利用 Display Entity SVD 技巧实现高精度除法 a/b(~15 位有效数字)。b 不能为零。
2254
+ params:
2255
+ a: 被除数 ×10000
2256
+ b: 除数 ×10000(不能为零)
2257
+ returns: (a/b) ×10000
2258
+ div3_hp:
2259
+ desc: 同时用同一除数对三个值做高精度除法。结果写入计分板 $div3_x/$div3_y/$div3_z。
2260
+ params:
2261
+ a: 第一个被除数 ×10000
2262
+ b: 第二个被除数 ×10000
2263
+ c: 第三个被除数 ×10000
2264
+ d: 公共除数 ×10000(不能为零)
2265
+ returns: a/d ×10000(b/d、c/d 写入 $div3_y/$div3_z)
2266
+ sqrt_hp:
2267
+ desc: 高精度平方根,通过 Newton 迭代配合 div_hp 精化。
2268
+ params:
2269
+ x: 输入值 ×10000(必须 ≥ 0)
2270
+ returns: √(x/10000) ×10000
2271
+ norm3_hp:
2272
+ desc: 高精度三维向量模长 √(x²+y²+z²),使用 sqrt_hp 实现。
2273
+ params:
2274
+ x: X 分量 ×10000
2275
+ y: Y 分量 ×10000
2276
+ z: Z 分量 ×10000
2277
+ returns: 向量模长 ×10000
2278
+ double_mul_fixed:
2279
+ desc: 使用宏技巧将双精度值 d 乘以定点整数 f(×10000),全程保持 IEEE 754 双精度精度。
2280
+ params:
2281
+ d: 双精度操作数(NBT 存储)
2282
+ f: 定点乘数 ×10000(如 15000 = 1.5)
2283
+ returns: d × (f/10000) 的双精度结果
2284
+ init_double_add:
2285
+ desc: 初始化 double_add/double_sub 使用的 area_effect_cloud 标记实体。由 @require_on_load 自动调用。
2286
+ returns: 无返回值
2287
+ double_add:
2288
+ desc: 利用 MC 实体坐标技巧,在真正的 IEEE 754 双精度下计算 a + b。
2289
+ params:
2290
+ a: 第一个加数(双精度)
2291
+ b: 第二个加数(双精度)
2292
+ returns: a + b(双精度)
2293
+ double_sub:
2294
+ desc: 双精度减法 a − b(对 b 取反后调用 double_add)。
2295
+ params:
2296
+ a: 被减数(双精度)
2297
+ b: 减数(双精度)
2298
+ returns: a − b(双精度)
2299
+ double_mul:
2300
+ desc: 通过计分板整数近似实现双精度乘法(约 4 位有效小数)。|a|×|b| > ~21474 时会溢出。
2301
+ params:
2302
+ a: 第一个因数(双精度)
2303
+ b: 第二个因数(双精度)
2304
+ returns: a × b(近似,约 4 位精度)
2305
+ double_div:
2306
+ desc: 利用 Display Entity SVD 技巧实现真正的 IEEE 754 双精度除法。b 不能为零。
2307
+ params:
2308
+ a: 被除数(双精度)
2309
+ b: 除数(双精度,不能为零)
2310
+ returns: a / b(双精度)
2311
+ ln_hp:
2312
+ desc: 高精度自然对数,通过对 5 项 atanh 级数结果进行一次 Newton 修正(~8–9 位精度)。有效范围 x ∈ [100, 1000000]。
2313
+ params:
2314
+ x: 输入值 ×10000(如 10000 = 1.0,27183 ≈ e)
2315
+ returns: ln(x/10000) ×10000
2316
+ ln_5term:
2317
+ desc: 使用 5 项 atanh 级数计算自然对数(比 3 项 ln() 精度高 2 倍,最大误差 ≈ 0.000002)。
2318
+ params:
2319
+ x: 输入值 ×10000
2320
+ returns: ln(x/10000) ×10000
2321
+ double_sqrt:
2322
+ desc: 双精度平方根,内部转换为定点数后用 isqrt 计算,再转回双精度。
2323
+ params:
2324
+ x: 输入双精度值(必须 ≥ 0)
2325
+ returns: √x(双精度)
2326
+ pow_real:
2327
+ desc: 实数幂次方 base^exp_val,通过 a^b = e^(b·ln(a)) 实现(~8–9 位精度)。base 必须 > 0。
2328
+ params:
2329
+ base: 底数(双精度,必须 > 0)
2330
+ exp_val: 指数(双精度)
2331
+ returns: base^exp_val(双精度)
2332
+ pow_fast:
2333
+ desc: 双精度底数的整数次方,使用二进制快速幂(O(log n)),支持负指数。
2334
+ params:
2335
+ base: 底数(双精度)
2336
+ exp_val: 整数指数(可以为负)
2337
+ returns: base^exp_val(双精度)
2338
+
2339
+ calculus:
2340
+ deriv_forward:
2341
+ desc: 前向差分导数:(f(x+h) − f(x)) / h。
2342
+ params:
2343
+ f1: f(x+h) ×10000
2344
+ f0: f(x) ×10000
2345
+ h_fx: 步长 ×10000(不能为零)
2346
+ returns: df/dx ×10000;h_fx==0 时返回 0
2347
+ deriv_central:
2348
+ desc: 中心差分导数:(f(x+h) − f(x−h)) / (2h),比前向差分更精确。
2349
+ params:
2350
+ f_plus: f(x+h) ×10000
2351
+ f_minus: f(x−h) ×10000
2352
+ h_fx: 步长 ×10000
2353
+ returns: df/dx ×10000
2354
+ second_deriv:
2355
+ desc: 二阶中心差分导数:(f(x+h) − 2f(x) + f(x−h)) / h²。
2356
+ params:
2357
+ f_plus: f(x+h) ×10000
2358
+ f0: f(x) ×10000
2359
+ f_minus: f(x−h) ×10000
2360
+ h_fx: 步长 ×10000
2361
+ returns: d²f/dx² ×10000
2362
+ integrate_trapezoid:
2363
+ desc: 梯形法则数值积分,适用于等间距采样点数组。
2364
+ params:
2365
+ vals: n 个函数值 ×10000 的数组
2366
+ n: 采样点个数(须 ≥ 2)
2367
+ h_fx: 采样步长 ×10000
2368
+ returns: 积分近似值 ×10000
2369
+ integrate_simpson:
2370
+ desc: Simpson 1/3 法则数值积分,比梯形法则更精确(平滑函数适用)。n 应为奇数且 ≥ 3。
2371
+ params:
2372
+ vals: n 个函数值 ×10000 的数组
2373
+ n: 采样点个数(建议为奇数且 ≥ 3)
2374
+ h_fx: 采样步长 ×10000
2375
+ returns: 积分近似值 ×10000
2376
+ riemann_left:
2377
+ desc: 左黎曼和:∑ f(xᵢ) × h,i = 0 … n−2。
2378
+ params:
2379
+ vals: n 个函数值 ×10000 的数组
2380
+ n: 采样点个数
2381
+ h_fx: 步长 ×10000
2382
+ returns: 积分近似值 ×10000
2383
+ riemann_right:
2384
+ desc: 右黎曼和:∑ f(xᵢ) × h,i = 1 … n−1。
2385
+ params:
2386
+ vals: n 个函数值 ×10000 的数组
2387
+ n: 采样点个数
2388
+ h_fx: 步长 ×10000
2389
+ returns: 积分近似值 ×10000
2390
+ riemann_mid:
2391
+ desc: 中点黎曼和,使用预先计算的中点值。
2392
+ params:
2393
+ vals: n 个区间中点函数值 ×10000 的数组
2394
+ n: 区间(中点)个数
2395
+ h_fx: 步长 ×10000
2396
+ returns: 积分近似值 ×10000
2397
+ curve_length_2d:
2398
+ desc: 通过逐段欧几里得距离近似计算二维折线弧长。
2399
+ params:
2400
+ xs: n 个点的 X 坐标 ×10000 数组
2401
+ ys: n 个点的 Y 坐标 ×10000 数组
2402
+ n: 点的数量(须 ≥ 2)
2403
+ returns: 近似弧长 ×10000
2404
+ running_mean:
2405
+ desc: Welford 在线算法:用新样本更新滚动均值。
2406
+ params:
2407
+ prev_mean: 上一次均值 ×10000
2408
+ new_val: 新样本值 ×10000
2409
+ n: 加入新样本后的总计数(n ≥ 1)
2410
+ returns: 更新后的均值 ×10000
2411
+ running_m2:
2412
+ desc: Welford 在线算法:更新用于计算方差的 M2 累加器。方差 = M2 / (n−1)。
2413
+ params:
2414
+ prev_m2: 上一次 M2 累加器 ×10000
2415
+ prev_mean: 加入新样本前的均值 ×10000
2416
+ new_mean: 加入新样本后的均值 ×10000
2417
+ new_val: 新样本值 ×10000
2418
+ returns: 更新后的 M2 累加器 ×10000
2419
+ variance_from_m2:
2420
+ desc: 从 Welford M2 累加器和样本数计算样本方差。
2421
+ params:
2422
+ m2: running_m2 的 M2 累加器 ×10000
2423
+ n: 已收集样本数
2424
+ returns: 样本方差 ×10000;n ≤ 1 时返回 0
2425
+ std_dev_approx:
2426
+ desc: 对方差取整数平方根,近似得到标准差。
2427
+ params:
2428
+ variance_fx: 方差 ×10000(如来自 variance_from_m2)
2429
+ returns: √variance ×10000;非正输入返回 0
2430
+
2431
+ advanced:
2432
+ fib:
2433
+ desc: 迭代法计算斐波那契数 F(n)。n ≤ 46(F(46) ≈ INT_MAX)。
2434
+ params:
2435
+ n: 索引(n ≥ 0)
2436
+ returns: F(n)
2437
+ is_prime:
2438
+ desc: 通过试除法(除到 √n)判断素数。
2439
+ params:
2440
+ n: 待测整数(n ≥ 0)
2441
+ returns: 1 表示素数,0 表示合数
2442
+ collatz_steps:
2443
+ desc: 计算从 n 出发的 Collatz 序列到达 1 所需的步数。
2444
+ params:
2445
+ n: 起始值(n ≥ 1)
2446
+ returns: 步数
2447
+ digit_sum:
2448
+ desc: 各十进制位数字之和,负数取绝对值后计算。
2449
+ params:
2450
+ n: 输入整数
2451
+ returns: 各位数字之和
2452
+ count_digits:
2453
+ desc: 统计整数的十进制位数,0 有 1 位,负数统计绝对值的位数。
2454
+ params:
2455
+ n: 输入整数
2456
+ returns: 位数
2457
+ reverse_int:
2458
+ desc: 翻转整数各十进制位,符号保留。
2459
+ params:
2460
+ n: 输入整数
2461
+ returns: 翻转后的整数
2462
+ mod_pow:
2463
+ desc: 快速模幂:(base^exp) mod m,使用 O(log exp) 二进制快速幂。m 须 ≤ 46340。
2464
+ params:
2465
+ base: 底数
2466
+ exp: 指数(≥ 0)
2467
+ m: 模数(1 < m ≤ 46340)
2468
+ returns: (base^exp) mod m
2469
+ hash_int:
2470
+ desc: 确定性整数哈希,输出非负 [0, ~2×10⁹),同输入始终产生同输出,适合程序化生成的种子随机值。
2471
+ params:
2472
+ n: 输入整数
2473
+ returns: 非负哈希值
2474
+ noise1d:
2475
+ desc: 1D 值噪声,通过 smoothstep 插值实现 C¹ 连续性。输入 ×1000,输出 [0, 999]。
2476
+ params:
2477
+ x: 坐标 ×1000
2478
+ returns: 平滑插值噪声值 [0, 999]
2479
+ bezier_quad:
2480
+ desc: 二次贝塞尔曲线(De Casteljau 算法),t ∈ [0, 1000]。
2481
+ params:
2482
+ p0: 起始控制点
2483
+ p1: 中间控制点
2484
+ p2: 终止控制点
2485
+ t: 参数 ×1000(0 = 起点,1000 = 终点)
2486
+ returns: t 处的曲线值
2487
+ bezier_cubic:
2488
+ desc: 三次贝塞尔曲线(De Casteljau 算法),t ∈ [0, 1000]。
2489
+ params:
2490
+ p0: 控制点 0(起点)
2491
+ p1: 控制点 1
2492
+ p2: 控制点 2
2493
+ p3: 控制点 3(终点)
2494
+ t: 参数 ×1000
2495
+ returns: t 处的曲线值
2496
+ mandelbrot_iter:
2497
+ desc: Mandelbrot 集迭代次数,c = cx/1000 + i·cy/1000。返回逃逸迭代次数,可用于方块着色。
2498
+ params:
2499
+ cx: 实部 ×1000(范围 −2000..1000)
2500
+ cy: 虚部 ×1000(范围 −1000..1000)
2501
+ max_iter: 最大迭代次数
2502
+ returns: 逃逸前的迭代次数,或 max_iter(在集合内)
2503
+ julia_iter:
2504
+ desc: Julia 集迭代次数,固定常数 c,可变起点 z₀。
2505
+ params:
2506
+ z0r: 起点实部 ×1000
2507
+ z0i: 起点虚部 ×1000
2508
+ cr: 常数 c 实部 ×1000
2509
+ ci: 常数 c 虚部 ×1000
2510
+ max_iter: 最大迭代次数
2511
+ returns: 逃逸前的迭代次数,或 max_iter
2512
+ angle_between:
2513
+ desc: 两个二维整数向量之间的无符号夹角(0–180°)。
2514
+ params:
2515
+ x1: 向量 1 的 X 分量
2516
+ y1: 向量 1 的 Y 分量
2517
+ x2: 向量 2 的 X 分量
2518
+ y2: 向量 2 的 Y 分量
2519
+ returns: 夹角(整数度数,0–180)
2520
+ clamp_circle_x:
2521
+ desc: 将点 (x, y) 约束到以原点为圆心、半径为 r 的圆内,返回 X 分量。
2522
+ params:
2523
+ x: X 坐标
2524
+ y: Y 坐标
2525
+ r: 圆半径(与 x/y 同单位)
2526
+ returns: 约束后的 X 分量
2527
+ clamp_circle_y:
2528
+ desc: 将点 (x, y) 约束到以原点为圆心、半径为 r 的圆内,返回 Y 分量。
2529
+ params:
2530
+ x: X 坐标
2531
+ y: Y 坐标
2532
+ r: 圆半径
2533
+ returns: 约束后的 Y 分量
2534
+ newton_sqrt:
2535
+ desc: Newton 迭代法求整数平方根(isqrt 的替代方案,二次收敛)。
2536
+ params:
2537
+ n: 非负整数
2538
+ returns: ⌊√n⌋
2539
+ bezier_quartic:
2540
+ desc: 四次(5 控制点)贝塞尔曲线(De Casteljau 算法),t ∈ [0, 1000]。
2541
+ params:
2542
+ p0: 控制点 0(起点)
2543
+ p1: 控制点 1
2544
+ p2: 控制点 2
2545
+ p3: 控制点 3
2546
+ p4: 控制点 4(终点)
2547
+ t: 参数 ×1000
2548
+ returns: t 处的曲线值
2549
+ bezier_n:
2550
+ desc: 任意阶贝塞尔曲线(De Casteljau 算法)。⚠ 会修改 pts 数组,如需保留原数组请用 bezier_n_safe。
2551
+ params:
2552
+ pts: n 个控制点数组(会被原地修改)
2553
+ n: 控制点数量
2554
+ t: 参数 ×1000
2555
+ returns: t 处的曲线值
2556
+ bezier_n_safe:
2557
+ desc: 非破坏性任意阶贝塞尔曲线,将 pts 复制到 work 后再求值,pts 不被修改。
2558
+ params:
2559
+ pts: 控制点数组(不被修改)
2560
+ work: 工作缓冲区(长度 ≥ n,会被覆写)
2561
+ n: 控制点数量
2562
+ t: 参数 ×1000
2563
+ returns: t 处的曲线值
2564
+ digital_root:
2565
+ desc: 数字根:反复对各位求和直到得到单个数字。
2566
+ params:
2567
+ n: 非负整数
2568
+ returns: 数字根(1–9);0 返回 0
2569
+ spiral_ring:
2570
+ desc: Ulam 螺旋环号:n 位于哪个同心正方形环上(环 0 = n=1,环 1 = n=2..9,以此类推)。
2571
+ params:
2572
+ n: 正整数
2573
+ returns: 环号
2574
+ median:
2575
+ desc: n 个整数的中位数(×1000 定点数)。奇数 n 返回中间值 ×1000,偶数 n 返回两中间值均值 ×1000。不修改原数组。
2576
+ params:
2577
+ arr: 输入数组(不被修改)
2578
+ work: 工作缓冲区(长度 ≥ n)
2579
+ n: 元素个数(≥ 1)
2580
+ returns: 中位数 ×1000
2581
+ mode:
2582
+ desc: 出现频率最高的元素(众数),平局时取最小值。
2583
+ params:
2584
+ arr: 输入数组(不被修改)
2585
+ work: 工作缓冲区(长度 ≥ n)
2586
+ n: 元素个数(≥ 1)
2587
+ returns: 众数值
2588
+ mean_fx:
2589
+ desc: 算术均值,返回定点数 ×1000。
2590
+ params:
2591
+ arr: 输入整数数组
2592
+ n: 元素个数(≥ 1)
2593
+ returns: sum(arr) ×1000 / n;空数组返回 0
2594
+ std_dev_fx:
2595
+ desc: 总体标准差,返回定点数 ×1000(使用整数算术)。
2596
+ params:
2597
+ arr: 输入整数数组
2598
+ n: 元素个数(≥ 2)
2599
+ returns: √(Σ(xᵢ−mean)²/n) ×1000;n ≤ 1 返回 0
2600
+ hermite_spline:
2601
+ desc: 三次 Hermite 样条插值,使用显式切线。
2602
+ params:
2603
+ p0: 起始值
2604
+ p1: 终止值
2605
+ m0: p0 处的切线
2606
+ m1: p1 处的切线
2607
+ t: 参数 ×1000(0 = p0,1000 = p1)
2608
+ returns: 插值结果(与 p0/p1 同单位)
2609
+ catmull_rom:
2610
+ desc: Catmull-Rom 样条,在 p1 到 p2 之间插值,切线由相邻点自动推导。
2611
+ params:
2612
+ p0: 段起点前的点
2613
+ p1: 段起点
2614
+ p2: 段终点
2615
+ p3: 段终点后的点
2616
+ t: 参数 ×1000(0 = p1,1000 = p2)
2617
+ returns: p1 到 p2 之间的插值结果
2618
+
2619
+ expr:
2620
+ expr_eval:
2621
+ desc: 求值 RPN(逆波兰表达式)令牌流,支持单变量替换。正整数为字面量,-10000 为变量 x,-1~-8 为运算符。栈深度 16。
2622
+ params:
2623
+ tokens: 长度为 n 的 RPN 令牌数组
2624
+ n: 令牌数量
2625
+ x: 替换令牌 -10000 的变量值 ×10000
2626
+ returns: 求值后栈顶值 ×10000
2627
+
2628
+ cooldown:
2629
+ cooldown_start:
2630
+ desc: 启动(或重启)指定槽位的冷却计时,持续 ticks 游戏刻。
2631
+ params:
2632
+ name: 冷却槽位标识符(保留,供未来多槽位使用)
2633
+ ticks: 冷却持续时间(游戏刻,20 刻 = 1 秒)
2634
+ returns: 无返回值
2635
+ cooldown_ready:
2636
+ desc: 检查冷却是否已到期(可再次触发)。
2637
+ params:
2638
+ name: 冷却槽位标识符
2639
+ returns: 1 表示已就绪(非活跃或剩余刻数 ≤ 0),0 表示仍在冷却
2640
+ cooldown_tick:
2641
+ desc: 冷却计时推进一刻,须在 @tick 函数中每刻调用。剩余刻数归零时自动标记为非活跃。
2642
+ params:
2643
+ name: 冷却槽位标识符
2644
+ returns: 无返回值
2645
+
2646
+ list:
2647
+ sort2_min:
2648
+ desc: 返回两个整数中较小的一个。
2649
+ params:
2650
+ a: 第一个值
2651
+ b: 第二个值
2652
+ returns: a ≤ b 则返回 a,否则返回 b
2653
+ sort2_max:
2654
+ desc: 返回两个整数中较大的一个。
2655
+ params:
2656
+ a: 第一个值
2657
+ b: 第二个值
2658
+ returns: a ≥ b 则返回 a,否则返回 b
2659
+ list_min3:
2660
+ desc: 三个整数中的最小值。
2661
+ params:
2662
+ a: 值 1
2663
+ b: 值 2
2664
+ c: 值 3
2665
+ returns: a、b、c 中的最小值
2666
+ list_max3:
2667
+ desc: 三个整数中的最大值。
2668
+ params:
2669
+ a: 值 1
2670
+ b: 值 2
2671
+ c: 值 3
2672
+ returns: a、b、c 中的最大值
2673
+ list_min5:
2674
+ desc: 五个整数中的最小值。
2675
+ params:
2676
+ a: 值 1
2677
+ b: 值 2
2678
+ c: 值 3
2679
+ d: 值 4
2680
+ e: 值 5
2681
+ returns: 五个输入中的最小值
2682
+ list_max5:
2683
+ desc: 五个整数中的最大值。
2684
+ params:
2685
+ a: 值 1
2686
+ b: 值 2
2687
+ c: 值 3
2688
+ d: 值 4
2689
+ e: 值 5
2690
+ returns: 五个输入中的最大值
2691
+ list_sum5:
2692
+ desc: 五个整数之和。
2693
+ params:
2694
+ a: 值 1
2695
+ b: 值 2
2696
+ c: 值 3
2697
+ d: 值 4
2698
+ e: 值 5
2699
+ returns: a + b + c + d + e
2700
+ list_sum4:
2701
+ desc: 四个整数之和。
2702
+ params:
2703
+ a: 值 1
2704
+ b: 值 2
2705
+ c: 值 3
2706
+ d: 值 4
2707
+ returns: a + b + c + d
2708
+ list_sum3:
2709
+ desc: 三个整数之和。
2710
+ params:
2711
+ a: 值 1
2712
+ b: 值 2
2713
+ c: 值 3
2714
+ returns: a + b + c
2715
+ avg3:
2716
+ desc: 三个值的整数均值(向零截断)。
2717
+ params:
2718
+ a: 值 1
2719
+ b: 值 2
2720
+ c: 值 3
2721
+ returns: (a + b + c) / 3
2722
+ avg5:
2723
+ desc: 五个值的整数均值(向零截断)。
2724
+ params:
2725
+ a: 值 1
2726
+ b: 值 2
2727
+ c: 值 3
2728
+ d: 值 4
2729
+ e: 值 5
2730
+ returns: (a + b + c + d + e) / 5
2731
+ sort3:
2732
+ desc: 对三个值排序,返回指定位置的值(0 = 最小,1 = 中间,2 = 最大)。
2733
+ params:
2734
+ a: 值 1
2735
+ b: 值 2
2736
+ c: 值 3
2737
+ pos: 排序后的位置(0、1 或 2)
2738
+ returns: 指定排序位置的值
2739
+ weighted2:
2740
+ desc: 利用 LCG 种子在两个选项(0 或 1)间做加权随机选择。
2741
+ params:
2742
+ seed: LCG 种子(任意整数)
2743
+ w0: 选项 0 的权重
2744
+ w1: 选项 1 的权重
2745
+ returns: 以概率 w0/(w0+w1) 返回 0,否则返回 1
2746
+ weighted3:
2747
+ desc: 利用 LCG 种子在三个选项(0、1 或 2)间做加权随机选择。
2748
+ params:
2749
+ seed: LCG 种子
2750
+ w0: 选项 0 的权重
2751
+ w1: 选项 1 的权重
2752
+ w2: 选项 2 的权重
2753
+ returns: 按权重比例返回 0、1 或 2
2754
+ sort4:
2755
+ desc: 使用 5 次比较的最优排序网络对四个值排序,返回指定位置的值。
2756
+ params:
2757
+ a: 值 1
2758
+ b: 值 2
2759
+ c: 值 3
2760
+ d: 值 4
2761
+ pos: 排序后的位置(0 = 最小,3 = 最大)
2762
+ returns: 指定排序位置的值
2763
+ sort5:
2764
+ desc: 使用 9 次比较的 Batcher 奇偶归并排序网络对五个值排序,返回指定位置的值。
2765
+ params:
2766
+ a: 值 1
2767
+ b: 值 2
2768
+ c: 值 3
2769
+ d: 值 4
2770
+ e: 值 5
2771
+ pos: 排序后的位置(0 = 最小,4 = 最大)
2772
+ returns: 指定排序位置的值
2773
+ list_sort_asc:
2774
+ desc: 原地升序冒泡排序(任意长度)。需要 RedScript ≥ 2.4.0(数组引用传参)。
2775
+ params:
2776
+ arr: 待排序数组(原地修改)
2777
+ len: 要排序的元素数量
2778
+ returns: 无返回值
2779
+ list_sort_desc:
2780
+ desc: 原地降序冒泡排序(任意长度)。需要 RedScript ≥ 2.4.0。
2781
+ params:
2782
+ arr: 待排序数组(原地修改)
2783
+ len: 要排序的元素数量
2784
+ returns: 无返回值
2785
+ list_sum:
2786
+ desc: 数组所有元素之和。
2787
+ params:
2788
+ arr: 输入数组
2789
+ len: 元素数量
2790
+ returns: arr[0..len) 的总和
2791
+ list_avg:
2792
+ desc: 数组算术均值,返回定点数 ×10000。
2793
+ params:
2794
+ arr: 输入数组
2795
+ len: 元素数量(须 > 0)
2796
+ returns: (sum ×10000) / len;空数组返回 0
2797
+ list_min:
2798
+ desc: 数组中的最小元素(数组至少有一个元素)。
2799
+ params:
2800
+ arr: 输入数组
2801
+ len: 元素数量
2802
+ returns: arr[0..len) 中的最小值
2803
+ list_max:
2804
+ desc: 数组中的最大元素(数组至少有一个元素)。
2805
+ params:
2806
+ arr: 输入数组
2807
+ len: 元素数量
2808
+ returns: arr[0..len) 中的最大值
2809
+ list_contains:
2810
+ desc: 检查数组中是否存在某个值。
2811
+ params:
2812
+ arr: 输入数组
2813
+ len: 元素数量
2814
+ val: 要搜索的值
2815
+ returns: 找到返回 1,否则返回 0
2816
+ list_index_of:
2817
+ desc: 查找值在数组中第一次出现的索引。
2818
+ params:
2819
+ arr: 输入数组
2820
+ len: 元素数量
2821
+ val: 要搜索的值
2822
+ returns: 第一个索引,未找到返回 -1
2823
+ list_shuffle:
2824
+ desc: Fisher-Yates 原地随机打乱,使用线性同余生成器。
2825
+ params:
2826
+ arr: 待打乱数组(原地修改)
2827
+ len: 元素数量
2828
+ seed: 初始 LCG 种子(任意整数)
2829
+ returns: 打乱后的数组(与 arr 相同引用)
2830
+ list_dedup_count:
2831
+ desc: 统计数组中唯一值的数量(O(n²),适合小数组)。
2832
+ params:
2833
+ arr: 输入数组
2834
+ len: 元素数量
2835
+ returns: arr[0..len) 中不同值的个数
2836
+
2837
+ events:
2838
+ __events_load:
2839
+ desc: 内部加载函数:注册 rs.deaths/rs.kills/rs.item_use 计分板目标。勿直接调用。
2840
+ returns: 无返回值
2841
+ __events_tick:
2842
+ desc: 内部每刻函数:检测玩家加入/死亡/击杀/物品使用事件并分发到对应函数标签。勿直接调用。
2843
+ returns: 无返回值
2844
+
2845
+ sets:
2846
+ set_new:
2847
+ desc: 创建一个新的空集合并返回唯一集合 ID(字符串句柄)。
2848
+ returns: 集合 ID(字符串句柄)
2849
+ set_add:
2850
+ desc: 若值不存在则将其加入集合(已存在则无操作)。
2851
+ params:
2852
+ set: set_new 返回的集合 ID
2853
+ value: 要添加的值
2854
+ returns: 无返回值
2855
+ set_contains:
2856
+ desc: 检查集合中是否存在某个值。
2857
+ params:
2858
+ set: 集合 ID
2859
+ value: 要查找的值
2860
+ returns: 存在返回 1,否则返回 0
2861
+ set_remove:
2862
+ desc: 从集合中移除某个值(不存在则无操作)。
2863
+ params:
2864
+ set: 集合 ID
2865
+ value: 要移除的值
2866
+ returns: 无返回值
2867
+ set_clear:
2868
+ desc: 清空集合中的所有值。
2869
+ params:
2870
+ set: 集合 ID
2871
+ returns: 无返回值
2872
+
2873
+ queue:
2874
+ queue_push:
2875
+ desc: 将一个整数入队到 storage rs:arrays Queue 末尾。
2876
+ params:
2877
+ val: 要入队的整数值
2878
+ queue_pop:
2879
+ desc: 出队并返回队头元素;队列为空时返回 -1。
2880
+ returns: 队头整数值,若为空则返回 -1
2881
+ queue_peek:
2882
+ desc: 查看队头元素但不移除;队列为空时返回 -1。
2883
+ returns: 队头整数值,若为空则返回 -1
2884
+ queue_size:
2885
+ desc: 返回队列中尚未出队的元素数量。
2886
+ returns: 队列长度(整数)
2887
+ queue_empty:
2888
+ desc: 检查队列是否为空。
2889
+ returns: 队列为空返回 1,否则返回 0
2890
+ queue_clear:
2891
+ desc: "清空队列:将 storage rs:arrays Queue 重置为空列表并将头指针归零。"