redscript-mc 3.0.1 → 3.0.2

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 (225) hide show
  1. package/.github/workflows/ci.yml +1 -0
  2. package/README.md +119 -313
  3. package/README.zh.md +118 -314
  4. package/ROADMAP.md +5 -5
  5. package/dist/data/impl_test/function/counter/get.mcfunction +5 -0
  6. package/dist/data/impl_test/function/counter/inc.mcfunction +7 -0
  7. package/dist/data/impl_test/function/counter/new.mcfunction +4 -0
  8. package/dist/data/impl_test/function/load.mcfunction +1 -0
  9. package/dist/data/impl_test/function/test_impl.mcfunction +10 -0
  10. package/dist/data/minecraft/tags/function/load.json +5 -0
  11. package/dist/data/playground/function/load.mcfunction +1 -0
  12. package/dist/data/playground/function/start.mcfunction +4 -0
  13. package/dist/data/playground/function/start__say_macro_t1.mcfunction +1 -0
  14. package/dist/data/playground/function/stop.mcfunction +5 -0
  15. package/dist/data/playground/function/stop__say_macro_t0.mcfunction +1 -0
  16. package/dist/data/stdlib_queue8_test/function/__queue_append_apply.mcfunction +4 -0
  17. package/dist/data/stdlib_queue8_test/function/__queue_peek_apply.mcfunction +4 -0
  18. package/dist/data/stdlib_queue8_test/function/__queue_size_raw_apply.mcfunction +4 -0
  19. package/dist/data/stdlib_queue8_test/function/load.mcfunction +1 -0
  20. package/dist/data/stdlib_queue8_test/function/queue_clear.mcfunction +6 -0
  21. package/dist/data/stdlib_queue8_test/function/queue_empty__merge_1.mcfunction +5 -0
  22. package/dist/data/stdlib_queue8_test/function/queue_empty__then_0.mcfunction +5 -0
  23. package/dist/data/stdlib_queue8_test/function/queue_peek__merge_1.mcfunction +13 -0
  24. package/dist/data/stdlib_queue8_test/function/queue_peek__then_0.mcfunction +5 -0
  25. package/dist/data/stdlib_queue8_test/function/queue_pop__merge_1.mcfunction +15 -0
  26. package/dist/data/stdlib_queue8_test/function/queue_pop__then_0.mcfunction +5 -0
  27. package/dist/data/stdlib_queue8_test/function/queue_push__const_11.mcfunction +6 -0
  28. package/dist/data/stdlib_queue8_test/function/queue_push__const_22.mcfunction +6 -0
  29. package/dist/data/stdlib_queue8_test/function/queue_size.mcfunction +13 -0
  30. package/dist/data/stdlib_queue8_test/function/test_queue_push_and_size.mcfunction +13 -0
  31. package/dist/data/test/function/load.mcfunction +1 -0
  32. package/dist/data/test/function/say_at.mcfunction +6 -0
  33. package/dist/data/test/function/test.mcfunction +4 -0
  34. package/dist/pack.mcmeta +6 -0
  35. package/dist/package.json +1 -1
  36. package/dist/src/__tests__/formatter-extra.test.d.ts +7 -0
  37. package/dist/src/__tests__/formatter-extra.test.js +123 -0
  38. package/dist/src/__tests__/global-vars.test.d.ts +13 -0
  39. package/dist/src/__tests__/global-vars.test.js +156 -0
  40. package/dist/src/__tests__/lint/new-rules.test.d.ts +9 -0
  41. package/dist/src/__tests__/lint/new-rules.test.js +402 -0
  42. package/dist/src/__tests__/lsp-rename.test.d.ts +8 -0
  43. package/dist/src/__tests__/lsp-rename.test.js +157 -0
  44. package/dist/src/__tests__/mc-integration/say-fstring.test.d.ts +11 -0
  45. package/dist/src/__tests__/mc-integration/say-fstring.test.js +220 -0
  46. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +1 -1
  47. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1 -1
  48. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1 -1
  49. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1 -1
  50. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +1 -1
  51. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +1 -1
  52. package/dist/src/__tests__/mc-integration/stdlib-coverage-8.test.js +1 -1
  53. package/dist/src/__tests__/mc-syntax.test.js +4 -1
  54. package/dist/src/__tests__/monomorphize-coverage.test.d.ts +9 -0
  55. package/dist/src/__tests__/monomorphize-coverage.test.js +204 -0
  56. package/dist/src/__tests__/optimizer-cse.test.d.ts +7 -0
  57. package/dist/src/__tests__/optimizer-cse.test.js +226 -0
  58. package/dist/src/__tests__/parser.test.js +4 -13
  59. package/dist/src/__tests__/repl-server-extra.test.js +6 -7
  60. package/dist/src/__tests__/repl-server.test.js +5 -7
  61. package/dist/src/__tests__/stdlib/queue.test.js +6 -6
  62. package/dist/src/cli.js +0 -0
  63. package/dist/src/lexer/index.js +2 -1
  64. package/dist/src/lint/index.d.ts +12 -5
  65. package/dist/src/lint/index.js +730 -5
  66. package/dist/src/lsp/main.js +0 -0
  67. package/dist/src/mc-test/client.d.ts +21 -0
  68. package/dist/src/mc-test/client.js +34 -0
  69. package/dist/src/mir/lower.js +108 -6
  70. package/dist/src/optimizer/interprocedural.js +37 -2
  71. package/dist/src/parser/decl-parser.d.ts +19 -0
  72. package/dist/src/parser/decl-parser.js +323 -0
  73. package/dist/src/parser/expr-parser.d.ts +46 -0
  74. package/dist/src/parser/expr-parser.js +759 -0
  75. package/dist/src/parser/index.d.ts +8 -129
  76. package/dist/src/parser/index.js +13 -2262
  77. package/dist/src/parser/stmt-parser.d.ts +28 -0
  78. package/dist/src/parser/stmt-parser.js +577 -0
  79. package/dist/src/parser/type-parser.d.ts +20 -0
  80. package/dist/src/parser/type-parser.js +257 -0
  81. package/dist/src/parser/utils.d.ts +34 -0
  82. package/dist/src/parser/utils.js +141 -0
  83. package/docs/dev/README-mc-integration-tests.md +141 -0
  84. package/docs/lint-rules.md +162 -0
  85. package/docs/stdlib/bigint.md +2 -0
  86. package/editors/vscode/README.md +63 -41
  87. package/editors/vscode/out/extension.js +1881 -1776
  88. package/editors/vscode/out/lsp-server.js +4257 -3651
  89. package/editors/vscode/package-lock.json +3 -3
  90. package/editors/vscode/package.json +1 -1
  91. package/examples/loops-demo.mcrs +87 -0
  92. package/package.json +1 -1
  93. package/redscript-docs/docs/en/stdlib/advanced.md +629 -0
  94. package/redscript-docs/docs/en/stdlib/bigint.md +316 -0
  95. package/redscript-docs/docs/en/stdlib/bits.md +292 -0
  96. package/redscript-docs/docs/en/stdlib/bossbar.md +177 -0
  97. package/redscript-docs/docs/en/stdlib/calculus.md +289 -0
  98. package/redscript-docs/docs/en/stdlib/color.md +353 -0
  99. package/redscript-docs/docs/en/stdlib/combat.md +88 -0
  100. package/redscript-docs/docs/en/stdlib/cooldown.md +82 -0
  101. package/redscript-docs/docs/en/stdlib/dialog.md +155 -0
  102. package/redscript-docs/docs/en/stdlib/easing.md +558 -0
  103. package/redscript-docs/docs/en/stdlib/ecs.md +475 -0
  104. package/redscript-docs/docs/en/stdlib/effects.md +324 -0
  105. package/redscript-docs/docs/en/stdlib/events.md +3 -0
  106. package/redscript-docs/docs/en/stdlib/expr.md +45 -0
  107. package/redscript-docs/docs/en/stdlib/fft.md +141 -0
  108. package/redscript-docs/docs/en/stdlib/geometry.md +430 -0
  109. package/redscript-docs/docs/en/stdlib/graph.md +259 -0
  110. package/redscript-docs/docs/en/stdlib/heap.md +185 -0
  111. package/redscript-docs/docs/en/stdlib/interactions.md +179 -0
  112. package/redscript-docs/docs/en/stdlib/inventory.md +97 -0
  113. package/redscript-docs/docs/en/stdlib/linalg.md +557 -0
  114. package/redscript-docs/docs/en/stdlib/list.md +559 -0
  115. package/redscript-docs/docs/en/stdlib/map.md +140 -0
  116. package/redscript-docs/docs/en/stdlib/math.md +193 -0
  117. package/redscript-docs/docs/en/stdlib/math_hp.md +149 -0
  118. package/redscript-docs/docs/en/stdlib/matrix.md +403 -0
  119. package/redscript-docs/docs/en/stdlib/mobs.md +965 -0
  120. package/redscript-docs/docs/en/stdlib/noise.md +244 -0
  121. package/redscript-docs/docs/en/stdlib/ode.md +253 -0
  122. package/redscript-docs/docs/en/stdlib/parabola.md +342 -0
  123. package/redscript-docs/docs/en/stdlib/particles.md +311 -0
  124. package/redscript-docs/docs/en/stdlib/pathfind.md +255 -0
  125. package/redscript-docs/docs/en/stdlib/physics.md +493 -0
  126. package/redscript-docs/docs/en/stdlib/player.md +78 -0
  127. package/redscript-docs/docs/en/stdlib/quaternion.md +673 -0
  128. package/redscript-docs/docs/en/stdlib/queue.md +134 -0
  129. package/redscript-docs/docs/en/stdlib/random.md +223 -0
  130. package/redscript-docs/docs/en/stdlib/result.md +143 -0
  131. package/redscript-docs/docs/en/stdlib/scheduler.md +183 -0
  132. package/redscript-docs/docs/en/stdlib/set_int.md +190 -0
  133. package/redscript-docs/docs/en/stdlib/sets.md +101 -0
  134. package/redscript-docs/docs/en/stdlib/signal.md +400 -0
  135. package/redscript-docs/docs/en/stdlib/sort.md +104 -0
  136. package/redscript-docs/docs/en/stdlib/spawn.md +147 -0
  137. package/redscript-docs/docs/en/stdlib/state.md +142 -0
  138. package/redscript-docs/docs/en/stdlib/strings.md +154 -0
  139. package/redscript-docs/docs/en/stdlib/tags.md +3451 -0
  140. package/redscript-docs/docs/en/stdlib/teams.md +153 -0
  141. package/redscript-docs/docs/en/stdlib/timer.md +246 -0
  142. package/redscript-docs/docs/en/stdlib/vec.md +158 -0
  143. package/redscript-docs/docs/en/stdlib/world.md +298 -0
  144. package/redscript-docs/docs/zh/stdlib/advanced.md +615 -0
  145. package/redscript-docs/docs/zh/stdlib/bigint.md +316 -0
  146. package/redscript-docs/docs/zh/stdlib/bits.md +292 -0
  147. package/redscript-docs/docs/zh/stdlib/bossbar.md +170 -0
  148. package/redscript-docs/docs/zh/stdlib/calculus.md +287 -0
  149. package/redscript-docs/docs/zh/stdlib/color.md +353 -0
  150. package/redscript-docs/docs/zh/stdlib/combat.md +88 -0
  151. package/redscript-docs/docs/zh/stdlib/cooldown.md +84 -0
  152. package/redscript-docs/docs/zh/stdlib/dialog.md +152 -0
  153. package/redscript-docs/docs/zh/stdlib/easing.md +558 -0
  154. package/redscript-docs/docs/zh/stdlib/ecs.md +472 -0
  155. package/redscript-docs/docs/zh/stdlib/effects.md +324 -0
  156. package/redscript-docs/docs/zh/stdlib/events.md +3 -0
  157. package/redscript-docs/docs/zh/stdlib/expr.md +37 -0
  158. package/redscript-docs/docs/zh/stdlib/fft.md +128 -0
  159. package/redscript-docs/docs/zh/stdlib/geometry.md +430 -0
  160. package/redscript-docs/docs/zh/stdlib/graph.md +259 -0
  161. package/redscript-docs/docs/zh/stdlib/heap.md +185 -0
  162. package/redscript-docs/docs/zh/stdlib/interactions.md +160 -0
  163. package/redscript-docs/docs/zh/stdlib/inventory.md +94 -0
  164. package/redscript-docs/docs/zh/stdlib/linalg.md +543 -0
  165. package/redscript-docs/docs/zh/stdlib/list.md +561 -0
  166. package/redscript-docs/docs/zh/stdlib/map.md +132 -0
  167. package/redscript-docs/docs/zh/stdlib/math.md +193 -0
  168. package/redscript-docs/docs/zh/stdlib/math_hp.md +143 -0
  169. package/redscript-docs/docs/zh/stdlib/matrix.md +396 -0
  170. package/redscript-docs/docs/zh/stdlib/mobs.md +965 -0
  171. package/redscript-docs/docs/zh/stdlib/noise.md +244 -0
  172. package/redscript-docs/docs/zh/stdlib/ode.md +243 -0
  173. package/redscript-docs/docs/zh/stdlib/parabola.md +337 -0
  174. package/redscript-docs/docs/zh/stdlib/particles.md +307 -0
  175. package/redscript-docs/docs/zh/stdlib/pathfind.md +255 -0
  176. package/redscript-docs/docs/zh/stdlib/physics.md +493 -0
  177. package/redscript-docs/docs/zh/stdlib/player.md +78 -0
  178. package/redscript-docs/docs/zh/stdlib/quaternion.md +669 -0
  179. package/redscript-docs/docs/zh/stdlib/queue.md +124 -0
  180. package/redscript-docs/docs/zh/stdlib/random.md +222 -0
  181. package/redscript-docs/docs/zh/stdlib/result.md +147 -0
  182. package/redscript-docs/docs/zh/stdlib/scheduler.md +173 -0
  183. package/redscript-docs/docs/zh/stdlib/set_int.md +180 -0
  184. package/redscript-docs/docs/zh/stdlib/sets.md +107 -0
  185. package/redscript-docs/docs/zh/stdlib/signal.md +373 -0
  186. package/redscript-docs/docs/zh/stdlib/sort.md +104 -0
  187. package/redscript-docs/docs/zh/stdlib/spawn.md +142 -0
  188. package/redscript-docs/docs/zh/stdlib/state.md +134 -0
  189. package/redscript-docs/docs/zh/stdlib/strings.md +107 -0
  190. package/redscript-docs/docs/zh/stdlib/tags.md +3451 -0
  191. package/redscript-docs/docs/zh/stdlib/teams.md +150 -0
  192. package/redscript-docs/docs/zh/stdlib/timer.md +254 -0
  193. package/redscript-docs/docs/zh/stdlib/vec.md +158 -0
  194. package/redscript-docs/docs/zh/stdlib/world.md +289 -0
  195. package/src/__tests__/formatter-extra.test.ts +139 -0
  196. package/src/__tests__/global-vars.test.ts +171 -0
  197. package/src/__tests__/lint/new-rules.test.ts +437 -0
  198. package/src/__tests__/lsp-rename.test.ts +171 -0
  199. package/src/__tests__/mc-integration/say-fstring.test.ts +211 -0
  200. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +1 -1
  201. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1 -1
  202. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1 -1
  203. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1 -1
  204. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +1 -1
  205. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +1 -1
  206. package/src/__tests__/mc-integration/stdlib-coverage-8.test.ts +1 -1
  207. package/src/__tests__/mc-syntax.test.ts +3 -0
  208. package/src/__tests__/monomorphize-coverage.test.ts +220 -0
  209. package/src/__tests__/optimizer-cse.test.ts +250 -0
  210. package/src/__tests__/parser.test.ts +4 -13
  211. package/src/__tests__/repl-server-extra.test.ts +6 -6
  212. package/src/__tests__/repl-server.test.ts +5 -6
  213. package/src/__tests__/stdlib/queue.test.ts +6 -6
  214. package/src/lexer/index.ts +2 -1
  215. package/src/lint/index.ts +713 -5
  216. package/src/mc-test/client.ts +40 -0
  217. package/src/mir/lower.ts +111 -2
  218. package/src/optimizer/interprocedural.ts +40 -2
  219. package/src/parser/decl-parser.ts +349 -0
  220. package/src/parser/expr-parser.ts +838 -0
  221. package/src/parser/index.ts +17 -2558
  222. package/src/parser/stmt-parser.ts +585 -0
  223. package/src/parser/type-parser.ts +276 -0
  224. package/src/parser/utils.ts +173 -0
  225. package/src/stdlib/queue.mcrs +19 -6
@@ -0,0 +1,124 @@
1
+ # Queue
2
+
3
+ > 本文档由 `src/stdlib/queue.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [queue_push](#queue-push)
8
+ - [queue_pop](#queue-pop)
9
+ - [queue_peek](#queue-peek)
10
+ - [queue_size](#queue-size)
11
+ - [queue_empty](#queue-empty)
12
+ - [queue_clear](#queue-clear)
13
+
14
+ ---
15
+
16
+ ## `queue_push` <Badge type="info" text="v3.0.0" />
17
+
18
+ 将一个整数入队到 storage rs:arrays Queue 末尾。
19
+
20
+ ```redscript
21
+ fn queue_push(val: int)
22
+ ```
23
+
24
+ **参数**
25
+
26
+ | 参数 | 说明 |
27
+ |------|------|
28
+ | `val` | 要入队的整数值 |
29
+
30
+ **示例**
31
+
32
+ ```redscript
33
+ queue_push(42)
34
+ ```
35
+
36
+ ---
37
+
38
+ ## `queue_pop` <Badge type="info" text="v3.0.0" />
39
+
40
+ 出队并返回队头元素;队列为空时返回 -1。
41
+
42
+ ```redscript
43
+ fn queue_pop(): int
44
+ ```
45
+
46
+ **返回:** 队头整数值,若为空则返回 -1
47
+
48
+ **示例**
49
+
50
+ ```redscript
51
+ let v: int = queue_pop()
52
+ ```
53
+
54
+ ---
55
+
56
+ ## `queue_peek` <Badge type="info" text="v3.0.0" />
57
+
58
+ 查看队头元素但不移除;队列为空时返回 -1。
59
+
60
+ ```redscript
61
+ fn queue_peek(): int
62
+ ```
63
+
64
+ **返回:** 队头整数值,若为空则返回 -1
65
+
66
+ **示例**
67
+
68
+ ```redscript
69
+ let front: int = queue_peek()
70
+ ```
71
+
72
+ ---
73
+
74
+ ## `queue_size` <Badge type="info" text="v3.0.0" />
75
+
76
+ 返回队列中尚未出队的元素数量。
77
+
78
+ ```redscript
79
+ fn queue_size(): int
80
+ ```
81
+
82
+ **返回:** 队列长度(整数)
83
+
84
+ **示例**
85
+
86
+ ```redscript
87
+ let n: int = queue_size()
88
+ ```
89
+
90
+ ---
91
+
92
+ ## `queue_empty` <Badge type="info" text="v3.0.0" />
93
+
94
+ 检查队列是否为空。
95
+
96
+ ```redscript
97
+ fn queue_empty(): int
98
+ ```
99
+
100
+ **返回:** 队列为空返回 1,否则返回 0
101
+
102
+ **示例**
103
+
104
+ ```redscript
105
+ if (queue_empty() == 1) { }
106
+ ```
107
+
108
+ ---
109
+
110
+ ## `queue_clear` <Badge type="info" text="v3.0.0" />
111
+
112
+ 清空队列:将 storage rs:arrays Queue 重置为空列表并将头指针归零。
113
+
114
+ ```redscript
115
+ fn queue_clear()
116
+ ```
117
+
118
+ **示例**
119
+
120
+ ```redscript
121
+ queue_clear()
122
+ ```
123
+
124
+ ---
@@ -0,0 +1,222 @@
1
+ # Random
2
+
3
+ > 本文档由 `src/stdlib/random.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [next_lcg](#next-lcg)
8
+ - [random_range](#random-range)
9
+ - [random_bool](#random-bool)
10
+ - [pcg_next_lo](#pcg-next-lo)
11
+ - [pcg_next_hi](#pcg-next-hi)
12
+ - [pcg_output](#pcg-output)
13
+ - [binomial_sample](#binomial-sample)
14
+ - [hypergeometric_sample](#hypergeometric-sample)
15
+
16
+ ---
17
+
18
+ ## `next_lcg` <Badge type="info" text="v1.0.0" />
19
+
20
+ 推进 LCG 状态一步,返回下一个伪随机 int32
21
+
22
+ ```redscript
23
+ fn next_lcg(seed: int): int
24
+ ```
25
+
26
+ **参数**
27
+
28
+ | 参数 | 说明 |
29
+ |------|------|
30
+ | `seed` | 当前 LCG 状态(任意非零整数) |
31
+
32
+ **返回:** 下一个伪随机 int32(同时作为下次调用的种子)
33
+
34
+ **示例**
35
+
36
+ ```redscript
37
+ let seed: int = 12345
38
+ seed = next_lcg(seed)
39
+ seed = next_lcg(seed) // advance two steps
40
+ ```
41
+
42
+ ---
43
+
44
+ ## `random_range` <Badge type="info" text="v1.0.0" />
45
+
46
+ 生成 [lo, hi) 范围内的伪随机整数
47
+
48
+ ```redscript
49
+ fn random_range(seed: int, lo: int, hi: int): int
50
+ ```
51
+
52
+ **参数**
53
+
54
+ | 参数 | 说明 |
55
+ |------|------|
56
+ | `seed` | next_lcg 的输出值 |
57
+ | `lo` | 下界(含) |
58
+ | `hi` | 上界(不含,必须 > lo) |
59
+
60
+ **返回:** 范围 [lo, hi) 内的整数
61
+
62
+ **示例**
63
+
64
+ ```redscript
65
+ seed = next_lcg(seed)
66
+ let roll: int = random_range(seed, 1, 7) // dice roll: 1-6
67
+ ```
68
+
69
+ ---
70
+
71
+ ## `random_bool` <Badge type="info" text="v1.0.0" />
72
+
73
+ 以相等概率生成 0 或 1 的伪随机布尔值
74
+
75
+ ```redscript
76
+ fn random_bool(seed: int): int
77
+ ```
78
+
79
+ **参数**
80
+
81
+ | 参数 | 说明 |
82
+ |------|------|
83
+ | `seed` | next_lcg 的输出值 |
84
+
85
+ **返回:** 0 或 1,各约 50% 概率
86
+
87
+ **示例**
88
+
89
+ ```redscript
90
+ seed = next_lcg(seed)
91
+ let coin: int = random_bool(seed) // 0 or 1
92
+ ```
93
+
94
+ ---
95
+
96
+ ## `pcg_next_lo` <Badge type="info" text="v1.0.0" />
97
+
98
+ Advance the PCG low-word state by one step.
99
+ Call together with pcg_next_hi; use pcg_output to extract the random value.
100
+
101
+ ```redscript
102
+ fn pcg_next_lo(state_lo: int): int
103
+ ```
104
+
105
+ **参数**
106
+
107
+ | 参数 | 说明 |
108
+ |------|------|
109
+ | `state_lo` | Current low word of PCG state |
110
+
111
+ **返回:** New low word
112
+
113
+ **示例**
114
+
115
+ ```redscript
116
+ let lo: int = pcg_next_lo(state_lo)
117
+ ```
118
+
119
+ ---
120
+
121
+ ## `pcg_next_hi` <Badge type="info" text="v1.0.0" />
122
+
123
+ Advance the PCG high-word state by one step.
124
+
125
+ ```redscript
126
+ fn pcg_next_hi(state_hi: int, state_lo: int): int
127
+ ```
128
+
129
+ **参数**
130
+
131
+ | 参数 | 说明 |
132
+ |------|------|
133
+ | `state_hi` | Current high word of PCG state |
134
+ | `state_lo` | Current low word of PCG state (previous, before pcg_next_lo) |
135
+
136
+ **返回:** New high word
137
+
138
+ **示例**
139
+
140
+ ```redscript
141
+ let hi: int = pcg_next_hi(state_hi, state_lo)
142
+ ```
143
+
144
+ ---
145
+
146
+ ## `pcg_output` <Badge type="info" text="v1.0.0" />
147
+
148
+ Extract an output value from the PCG low word using XSH-RR permutation.
149
+
150
+ ```redscript
151
+ fn pcg_output(state_lo: int): int
152
+ ```
153
+
154
+ **参数**
155
+
156
+ | 参数 | 说明 |
157
+ |------|------|
158
+ | `state_lo` | Current low word of PCG state (after pcg_next_lo) |
159
+
160
+ **返回:** Pseudo-random output value (unsigned, any int)
161
+
162
+ **示例**
163
+
164
+ ```redscript
165
+ let rng: int = pcg_output(state_lo)
166
+ ```
167
+
168
+ ---
169
+
170
+ ## `binomial_sample` <Badge type="info" text="v1.0.0" />
171
+
172
+ 模拟 n 次伯努利试验并统计成功次数(二项分布)
173
+
174
+ ```redscript
175
+ fn binomial_sample(n: int, p_x10000: int, seed: int): int
176
+ ```
177
+
178
+ **参数**
179
+
180
+ | 参数 | 说明 |
181
+ |------|------|
182
+ | `n` | 试验次数 |
183
+ | `p_x10000` | 成功概率 ×10000(如 5000 = 50%) |
184
+ | `seed` | LCG 种子(任意非零整数) |
185
+
186
+ **返回:** 成功次数,范围 [0, n]
187
+
188
+ **示例**
189
+
190
+ ```redscript
191
+ let hits: int = binomial_sample(10, 5000, 99999) // ~5 successes on average
192
+ ```
193
+
194
+ ---
195
+
196
+ ## `hypergeometric_sample` <Badge type="info" text="v1.0.0" />
197
+
198
+ 无放回抽样并统计成功项数(超几何分布)
199
+
200
+ ```redscript
201
+ fn hypergeometric_sample(pop_size: int, success_states: int, draws: int, seed: int): int
202
+ ```
203
+
204
+ **参数**
205
+
206
+ | 参数 | 说明 |
207
+ |------|------|
208
+ | `pop_size` | 总体大小 |
209
+ | `success_states` | 总体中成功项数量 |
210
+ | `draws` | 抽取数量 |
211
+ | `seed` | LCG 种子 |
212
+
213
+ **返回:** 抽中的成功项数,范围 [0, min(draws, success_states)]
214
+
215
+ **示例**
216
+
217
+ ```redscript
218
+ // 52-card deck, 4 aces, draw 5 cards
219
+ let aces: int = hypergeometric_sample(52, 4, 5, 42)
220
+ ```
221
+
222
+ ---
@@ -0,0 +1,147 @@
1
+ # Result
2
+
3
+ > 本文档由 `src/stdlib/result.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [result_ok](#result-ok)
8
+ - [result_err](#result-err)
9
+ - [result_is_ok](#result-is-ok)
10
+ - [result_is_err](#result-is-err)
11
+ - [result_value](#result-value)
12
+ - [result_code](#result-code)
13
+ - [result_divide](#result-divide)
14
+
15
+ ---
16
+
17
+ ## `result_ok` <Badge type="info" text="v1.0.0" />
18
+
19
+ 构造一个携带成功值的 Result
20
+
21
+ ```redscript
22
+ fn result_ok(value: int): Result
23
+ ```
24
+
25
+ **参数**
26
+
27
+ | 参数 | 说明 |
28
+ |------|------|
29
+ | `value` | 成功值(任意整数) |
30
+
31
+ **返回:** Result::Ok(value)
32
+
33
+ **示例**
34
+
35
+ ```redscript
36
+ let r = result_ok(42) // Ok result carrying 42
37
+ ```
38
+
39
+ ---
40
+
41
+ ## `result_err` <Badge type="info" text="v1.0.0" />
42
+
43
+ 构造一个携带错误码的 Result
44
+
45
+ ```redscript
46
+ fn result_err(code: int): Result
47
+ ```
48
+
49
+ **参数**
50
+
51
+ | 参数 | 说明 |
52
+ |------|------|
53
+ | `code` | 错误码(按惯例使用负数:-1 通用错误,-2 除零) |
54
+
55
+ **返回:** Result::Err(code)
56
+
57
+ **示例**
58
+
59
+ ```redscript
60
+ let r = result_err(-2) // division-by-zero error
61
+ ```
62
+
63
+ ---
64
+
65
+ ## `result_is_ok` <Badge type="info" text="v1.0.0" />
66
+
67
+ 判断 Result 是否为 Ok
68
+
69
+ ```redscript
70
+ fn result_is_ok(r: Result): int
71
+ ```
72
+
73
+ **参数**
74
+
75
+ | 参数 | 说明 |
76
+ |------|------|
77
+ | `r` | 要检测的 Result |
78
+
79
+ **返回:** Ok 返回 1,Err 返回 0
80
+
81
+ **示例**
82
+
83
+ ```redscript
84
+ let ok = result_is_ok(result_ok(5)) // result: 1
85
+ ```
86
+
87
+ ---
88
+
89
+ ## `result_is_err`
90
+
91
+ 判断 Result 是否为 Err
92
+
93
+ ```redscript
94
+ fn result_is_err(r: Result): int
95
+ ```
96
+
97
+ **返回:** Err 返回 1,Ok 返回 0
98
+
99
+ ---
100
+
101
+ ## `result_value` <Badge type="info" text="v1.0.0" />
102
+
103
+ 从 Ok 结果中提取值(Err 时返回 0,请先调用 result_is_ok 检查)
104
+
105
+ ```redscript
106
+ fn result_value(r: Result): int
107
+ ```
108
+
109
+ **参数**
110
+
111
+ | 参数 | 说明 |
112
+ |------|------|
113
+ | `r` | 要解包的 Result |
114
+
115
+ **返回:** Ok 的值,或 0(Err 时)
116
+
117
+ **示例**
118
+
119
+ ```redscript
120
+ let v = result_value(result_ok(99)) // result: 99
121
+ ```
122
+
123
+ ---
124
+
125
+ ## `result_code`
126
+
127
+ 从 Err 结果中提取错误码(Ok 时返回 0)
128
+
129
+ ```redscript
130
+ fn result_code(r: Result): int
131
+ ```
132
+
133
+ **返回:** Err 的错误码,或 0(Ok 时)
134
+
135
+ ---
136
+
137
+ ## `result_divide`
138
+
139
+ 带安全检查的整数除法,除数为零时返回 Err(-2)
140
+
141
+ ```redscript
142
+ fn result_divide(a: int, b: int): Result
143
+ ```
144
+
145
+ **返回:** Ok(a/b) 或 Err(-2)(b == 0 时)
146
+
147
+ ---
@@ -0,0 +1,173 @@
1
+ # Scheduler
2
+
3
+ > 本文档由 `src/stdlib/scheduler.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [task_schedule](#task-schedule)
8
+ - [task_cancel](#task-cancel)
9
+ - [task_ready](#task-ready)
10
+ - [gtask_schedule](#gtask-schedule)
11
+ - [gtask_cancel](#gtask-cancel)
12
+ - [gtask_ready](#gtask-ready)
13
+ - [scheduler_tick](#scheduler-tick)
14
+
15
+ ---
16
+
17
+ ## `task_schedule` <Badge type="info" text="v1.0.0" />
18
+
19
+ 为玩家排程指定槽位的任务,在 delay 个 tick 后触发
20
+
21
+ ```redscript
22
+ fn task_schedule(p: selector, task_id: int, delay: int)
23
+ ```
24
+
25
+ **参数**
26
+
27
+ | 参数 | 说明 |
28
+ |------|------|
29
+ | `p` | 目标玩家或实体选择器 |
30
+ | `task_id` | 槽位索引 [0, 7] |
31
+ | `delay` | 等待的 tick 数 |
32
+
33
+ **示例**
34
+
35
+ ```redscript
36
+ task_schedule(@s, 0, 40)
37
+ ```
38
+
39
+ ---
40
+
41
+ ## `task_cancel` <Badge type="info" text="v1.0.0" />
42
+
43
+ 取消玩家指定槽位的任务(将计数器归零)
44
+
45
+ ```redscript
46
+ fn task_cancel(p: selector, task_id: int)
47
+ ```
48
+
49
+ **参数**
50
+
51
+ | 参数 | 说明 |
52
+ |------|------|
53
+ | `p` | 目标玩家或实体选择器 |
54
+ | `task_id` | 槽位索引 [0, 7] |
55
+
56
+ **示例**
57
+
58
+ ```redscript
59
+ task_cancel(@s, 0)
60
+ ```
61
+
62
+ ---
63
+
64
+ ## `task_ready` <Badge type="info" text="v1.0.0" />
65
+
66
+ 检查玩家指定槽位的任务是否在本 tick 触发;触发后自动清除
67
+
68
+ ```redscript
69
+ fn task_ready(p: selector, task_id: int) -> int
70
+ ```
71
+
72
+ **参数**
73
+
74
+ | 参数 | 说明 |
75
+ |------|------|
76
+ | `p` | 目标玩家或实体选择器 |
77
+ | `task_id` | 槽位索引 [0, 7] |
78
+
79
+ **返回:** 任务触发返回 1,否则返回 0
80
+
81
+ **示例**
82
+
83
+ ```redscript
84
+ if (task_ready(@s, 0) == 1) { /* handle event */ }
85
+ ```
86
+
87
+ ---
88
+
89
+ ## `gtask_schedule` <Badge type="info" text="v1.0.0" />
90
+
91
+ 排程全局槽位任务(绑定到
92
+
93
+ ```redscript
94
+ fn gtask_schedule(task_id: int, delay: int)
95
+ ```
96
+
97
+ **参数**
98
+
99
+ | 参数 | 说明 |
100
+ |------|------|
101
+ | `task_id` | 槽位索引 [0, 7] |
102
+ | `delay` | 等待的 tick 数 |
103
+
104
+ **示例**
105
+
106
+ ```redscript
107
+ gtask_schedule(0, 200)
108
+ ```
109
+
110
+ ---
111
+
112
+ ## `gtask_cancel` <Badge type="info" text="v1.0.0" />
113
+
114
+ 取消全局槽位任务
115
+
116
+ ```redscript
117
+ fn gtask_cancel(task_id: int)
118
+ ```
119
+
120
+ **参数**
121
+
122
+ | 参数 | 说明 |
123
+ |------|------|
124
+ | `task_id` | 槽位索引 [0, 7] |
125
+
126
+ **示例**
127
+
128
+ ```redscript
129
+ gtask_cancel(0)
130
+ ```
131
+
132
+ ---
133
+
134
+ ## `gtask_ready` <Badge type="info" text="v1.0.0" />
135
+
136
+ 检查全局槽位任务是否在本 tick 触发;触发后自动清除
137
+
138
+ ```redscript
139
+ fn gtask_ready(task_id: int) -> int
140
+ ```
141
+
142
+ **参数**
143
+
144
+ | 参数 | 说明 |
145
+ |------|------|
146
+ | `task_id` | 槽位索引 [0, 7] |
147
+
148
+ **返回:** 任务触发返回 1,否则返回 0
149
+
150
+ **示例**
151
+
152
+ ```redscript
153
+ if (gtask_ready(0) == 1) { /* handle global event */ }
154
+ ```
155
+
156
+ ---
157
+
158
+ ## `scheduler_tick` <Badge type="info" text="v1.0.0" />
159
+
160
+ 每 tick 将所有激活的玩家和全局计时器减 1;在 @tick 函数中调用
161
+
162
+ ```redscript
163
+ fn scheduler_tick()
164
+ ```
165
+
166
+ **示例**
167
+
168
+ ```redscript
169
+ // In your @tick mcfunction:
170
+ scheduler_tick()
171
+ ```
172
+
173
+ ---