@weppy/roblox-mcp 0.1.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 (293) hide show
  1. package/.claude-plugin/marketplace.json +39 -0
  2. package/CHANGELOG.md +37 -0
  3. package/LICENSE +53 -0
  4. package/README.md +162 -0
  5. package/assets/screenshots/connection_guide.png +3 -0
  6. package/assets/screenshots/connection_popup.png +3 -0
  7. package/assets/screenshots/plugin_main.png +3 -0
  8. package/assets/screenshots/settings.png +3 -0
  9. package/dist/http-bridge.d.ts +65 -0
  10. package/dist/http-bridge.d.ts.map +1 -0
  11. package/dist/http-bridge.js +1 -0
  12. package/dist/index.d.ts +3 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +2 -0
  15. package/dist/server.d.ts +13 -0
  16. package/dist/server.d.ts.map +1 -0
  17. package/dist/server.js +1 -0
  18. package/dist/tools/asset-tools.d.ts +10 -0
  19. package/dist/tools/asset-tools.d.ts.map +1 -0
  20. package/dist/tools/asset-tools.js +1 -0
  21. package/dist/tools/bulk-tools.d.ts +11 -0
  22. package/dist/tools/bulk-tools.d.ts.map +1 -0
  23. package/dist/tools/bulk-tools.js +1 -0
  24. package/dist/tools/camera-tools.d.ts +5 -0
  25. package/dist/tools/camera-tools.d.ts.map +1 -0
  26. package/dist/tools/camera-tools.js +1 -0
  27. package/dist/tools/connection-tools.d.ts +5 -0
  28. package/dist/tools/connection-tools.d.ts.map +1 -0
  29. package/dist/tools/connection-tools.js +1 -0
  30. package/dist/tools/environment-tools.d.ts +8 -0
  31. package/dist/tools/environment-tools.d.ts.map +1 -0
  32. package/dist/tools/environment-tools.js +1 -0
  33. package/dist/tools/index.d.ts +21 -0
  34. package/dist/tools/index.d.ts.map +1 -0
  35. package/dist/tools/index.js +1 -0
  36. package/dist/tools/instance-tools.d.ts +16 -0
  37. package/dist/tools/instance-tools.d.ts.map +1 -0
  38. package/dist/tools/instance-tools.js +1 -0
  39. package/dist/tools/log-tools.d.ts +6 -0
  40. package/dist/tools/log-tools.d.ts.map +1 -0
  41. package/dist/tools/log-tools.js +1 -0
  42. package/dist/tools/property-tools.d.ts +13 -0
  43. package/dist/tools/property-tools.d.ts.map +1 -0
  44. package/dist/tools/property-tools.js +1 -0
  45. package/dist/tools/raycast-tools.d.ts +11 -0
  46. package/dist/tools/raycast-tools.d.ts.map +1 -0
  47. package/dist/tools/raycast-tools.js +1 -0
  48. package/dist/tools/script-tools.d.ts +13 -0
  49. package/dist/tools/script-tools.d.ts.map +1 -0
  50. package/dist/tools/script-tools.js +1 -0
  51. package/dist/tools/search-tools.d.ts +11 -0
  52. package/dist/tools/search-tools.d.ts.map +1 -0
  53. package/dist/tools/search-tools.js +1 -0
  54. package/dist/tools/selection-tools.d.ts +16 -0
  55. package/dist/tools/selection-tools.d.ts.map +1 -0
  56. package/dist/tools/selection-tools.js +1 -0
  57. package/dist/tools/spatial-tools.d.ts +8 -0
  58. package/dist/tools/spatial-tools.d.ts.map +1 -0
  59. package/dist/tools/spatial-tools.js +1 -0
  60. package/dist/tools/state-tools.d.ts +12 -0
  61. package/dist/tools/state-tools.d.ts.map +1 -0
  62. package/dist/tools/state-tools.js +1 -0
  63. package/dist/tools/tag-tools.d.ts +8 -0
  64. package/dist/tools/tag-tools.d.ts.map +1 -0
  65. package/dist/tools/tag-tools.js +1 -0
  66. package/dist/tools/terrain-tools.d.ts +15 -0
  67. package/dist/tools/terrain-tools.d.ts.map +1 -0
  68. package/dist/tools/terrain-tools.js +1 -0
  69. package/dist/tools/visualization-tools.d.ts +9 -0
  70. package/dist/tools/visualization-tools.d.ts.map +1 -0
  71. package/dist/tools/visualization-tools.js +1 -0
  72. package/dist/types/index.d.ts +143 -0
  73. package/dist/types/index.d.ts.map +1 -0
  74. package/dist/types/index.js +1 -0
  75. package/dist/utils/logger.d.ts +16 -0
  76. package/dist/utils/logger.d.ts.map +1 -0
  77. package/dist/utils/logger.js +1 -0
  78. package/dist/utils/quota-checker.d.ts +46 -0
  79. package/dist/utils/quota-checker.d.ts.map +1 -0
  80. package/dist/utils/quota-checker.js +1 -0
  81. package/dist/utils/type-converter.d.ts +33 -0
  82. package/dist/utils/type-converter.d.ts.map +1 -0
  83. package/dist/utils/type-converter.js +1 -0
  84. package/dist/utils/validation.d.ts +17 -0
  85. package/dist/utils/validation.d.ts.map +1 -0
  86. package/dist/utils/validation.js +1 -0
  87. package/docs/ko/README.md +174 -0
  88. package/docs/ko/faq.md +188 -0
  89. package/docs/ko/installation/claude-code.md +110 -0
  90. package/docs/ko/installation/claude-desktop.md +145 -0
  91. package/docs/ko/installation/codex-cli.md +120 -0
  92. package/docs/ko/installation/cursor.md +122 -0
  93. package/docs/ko/installation/gemini-cli.md +136 -0
  94. package/docs/ko/installation/other-clients.md +180 -0
  95. package/docs/ko/installation/plugin.md +98 -0
  96. package/docs/ko/tools/overview.md +270 -0
  97. package/package.json +46 -0
  98. package/plugins/weppy-roblox-mcp/.claude-plugin/plugin.json +53 -0
  99. package/plugins/weppy-roblox-mcp/agents/roblox-engineer.md +65 -0
  100. package/plugins/weppy-roblox-mcp/dist/dist/http-bridge.d.ts +65 -0
  101. package/plugins/weppy-roblox-mcp/dist/dist/http-bridge.d.ts.map +1 -0
  102. package/plugins/weppy-roblox-mcp/dist/dist/http-bridge.js +1 -0
  103. package/plugins/weppy-roblox-mcp/dist/dist/index.d.ts +3 -0
  104. package/plugins/weppy-roblox-mcp/dist/dist/index.d.ts.map +1 -0
  105. package/plugins/weppy-roblox-mcp/dist/dist/index.js +2 -0
  106. package/plugins/weppy-roblox-mcp/dist/dist/server.d.ts +13 -0
  107. package/plugins/weppy-roblox-mcp/dist/dist/server.d.ts.map +1 -0
  108. package/plugins/weppy-roblox-mcp/dist/dist/server.js +1 -0
  109. package/plugins/weppy-roblox-mcp/dist/dist/tools/asset-tools.d.ts +10 -0
  110. package/plugins/weppy-roblox-mcp/dist/dist/tools/asset-tools.d.ts.map +1 -0
  111. package/plugins/weppy-roblox-mcp/dist/dist/tools/asset-tools.js +1 -0
  112. package/plugins/weppy-roblox-mcp/dist/dist/tools/bulk-tools.d.ts +11 -0
  113. package/plugins/weppy-roblox-mcp/dist/dist/tools/bulk-tools.d.ts.map +1 -0
  114. package/plugins/weppy-roblox-mcp/dist/dist/tools/bulk-tools.js +1 -0
  115. package/plugins/weppy-roblox-mcp/dist/dist/tools/camera-tools.d.ts +5 -0
  116. package/plugins/weppy-roblox-mcp/dist/dist/tools/camera-tools.d.ts.map +1 -0
  117. package/plugins/weppy-roblox-mcp/dist/dist/tools/camera-tools.js +1 -0
  118. package/plugins/weppy-roblox-mcp/dist/dist/tools/connection-tools.d.ts +5 -0
  119. package/plugins/weppy-roblox-mcp/dist/dist/tools/connection-tools.d.ts.map +1 -0
  120. package/plugins/weppy-roblox-mcp/dist/dist/tools/connection-tools.js +1 -0
  121. package/plugins/weppy-roblox-mcp/dist/dist/tools/environment-tools.d.ts +8 -0
  122. package/plugins/weppy-roblox-mcp/dist/dist/tools/environment-tools.d.ts.map +1 -0
  123. package/plugins/weppy-roblox-mcp/dist/dist/tools/environment-tools.js +1 -0
  124. package/plugins/weppy-roblox-mcp/dist/dist/tools/index.d.ts +21 -0
  125. package/plugins/weppy-roblox-mcp/dist/dist/tools/index.d.ts.map +1 -0
  126. package/plugins/weppy-roblox-mcp/dist/dist/tools/index.js +1 -0
  127. package/plugins/weppy-roblox-mcp/dist/dist/tools/instance-tools.d.ts +16 -0
  128. package/plugins/weppy-roblox-mcp/dist/dist/tools/instance-tools.d.ts.map +1 -0
  129. package/plugins/weppy-roblox-mcp/dist/dist/tools/instance-tools.js +1 -0
  130. package/plugins/weppy-roblox-mcp/dist/dist/tools/log-tools.d.ts +6 -0
  131. package/plugins/weppy-roblox-mcp/dist/dist/tools/log-tools.d.ts.map +1 -0
  132. package/plugins/weppy-roblox-mcp/dist/dist/tools/log-tools.js +1 -0
  133. package/plugins/weppy-roblox-mcp/dist/dist/tools/property-tools.d.ts +13 -0
  134. package/plugins/weppy-roblox-mcp/dist/dist/tools/property-tools.d.ts.map +1 -0
  135. package/plugins/weppy-roblox-mcp/dist/dist/tools/property-tools.js +1 -0
  136. package/plugins/weppy-roblox-mcp/dist/dist/tools/raycast-tools.d.ts +11 -0
  137. package/plugins/weppy-roblox-mcp/dist/dist/tools/raycast-tools.d.ts.map +1 -0
  138. package/plugins/weppy-roblox-mcp/dist/dist/tools/raycast-tools.js +1 -0
  139. package/plugins/weppy-roblox-mcp/dist/dist/tools/script-tools.d.ts +13 -0
  140. package/plugins/weppy-roblox-mcp/dist/dist/tools/script-tools.d.ts.map +1 -0
  141. package/plugins/weppy-roblox-mcp/dist/dist/tools/script-tools.js +1 -0
  142. package/plugins/weppy-roblox-mcp/dist/dist/tools/search-tools.d.ts +11 -0
  143. package/plugins/weppy-roblox-mcp/dist/dist/tools/search-tools.d.ts.map +1 -0
  144. package/plugins/weppy-roblox-mcp/dist/dist/tools/search-tools.js +1 -0
  145. package/plugins/weppy-roblox-mcp/dist/dist/tools/selection-tools.d.ts +16 -0
  146. package/plugins/weppy-roblox-mcp/dist/dist/tools/selection-tools.d.ts.map +1 -0
  147. package/plugins/weppy-roblox-mcp/dist/dist/tools/selection-tools.js +1 -0
  148. package/plugins/weppy-roblox-mcp/dist/dist/tools/spatial-tools.d.ts +8 -0
  149. package/plugins/weppy-roblox-mcp/dist/dist/tools/spatial-tools.d.ts.map +1 -0
  150. package/plugins/weppy-roblox-mcp/dist/dist/tools/spatial-tools.js +1 -0
  151. package/plugins/weppy-roblox-mcp/dist/dist/tools/state-tools.d.ts +12 -0
  152. package/plugins/weppy-roblox-mcp/dist/dist/tools/state-tools.d.ts.map +1 -0
  153. package/plugins/weppy-roblox-mcp/dist/dist/tools/state-tools.js +1 -0
  154. package/plugins/weppy-roblox-mcp/dist/dist/tools/tag-tools.d.ts +8 -0
  155. package/plugins/weppy-roblox-mcp/dist/dist/tools/tag-tools.d.ts.map +1 -0
  156. package/plugins/weppy-roblox-mcp/dist/dist/tools/tag-tools.js +1 -0
  157. package/plugins/weppy-roblox-mcp/dist/dist/tools/terrain-tools.d.ts +15 -0
  158. package/plugins/weppy-roblox-mcp/dist/dist/tools/terrain-tools.d.ts.map +1 -0
  159. package/plugins/weppy-roblox-mcp/dist/dist/tools/terrain-tools.js +1 -0
  160. package/plugins/weppy-roblox-mcp/dist/dist/tools/visualization-tools.d.ts +9 -0
  161. package/plugins/weppy-roblox-mcp/dist/dist/tools/visualization-tools.d.ts.map +1 -0
  162. package/plugins/weppy-roblox-mcp/dist/dist/tools/visualization-tools.js +1 -0
  163. package/plugins/weppy-roblox-mcp/dist/dist/types/index.d.ts +143 -0
  164. package/plugins/weppy-roblox-mcp/dist/dist/types/index.d.ts.map +1 -0
  165. package/plugins/weppy-roblox-mcp/dist/dist/types/index.js +1 -0
  166. package/plugins/weppy-roblox-mcp/dist/dist/utils/logger.d.ts +16 -0
  167. package/plugins/weppy-roblox-mcp/dist/dist/utils/logger.d.ts.map +1 -0
  168. package/plugins/weppy-roblox-mcp/dist/dist/utils/logger.js +1 -0
  169. package/plugins/weppy-roblox-mcp/dist/dist/utils/quota-checker.d.ts +46 -0
  170. package/plugins/weppy-roblox-mcp/dist/dist/utils/quota-checker.d.ts.map +1 -0
  171. package/plugins/weppy-roblox-mcp/dist/dist/utils/quota-checker.js +1 -0
  172. package/plugins/weppy-roblox-mcp/dist/dist/utils/type-converter.d.ts +33 -0
  173. package/plugins/weppy-roblox-mcp/dist/dist/utils/type-converter.d.ts.map +1 -0
  174. package/plugins/weppy-roblox-mcp/dist/dist/utils/type-converter.js +1 -0
  175. package/plugins/weppy-roblox-mcp/dist/dist/utils/validation.d.ts +17 -0
  176. package/plugins/weppy-roblox-mcp/dist/dist/utils/validation.d.ts.map +1 -0
  177. package/plugins/weppy-roblox-mcp/dist/dist/utils/validation.js +1 -0
  178. package/plugins/weppy-roblox-mcp/dist/http-bridge.d.ts +45 -0
  179. package/plugins/weppy-roblox-mcp/dist/http-bridge.d.ts.map +1 -0
  180. package/plugins/weppy-roblox-mcp/dist/http-bridge.js +434 -0
  181. package/plugins/weppy-roblox-mcp/dist/http-bridge.js.map +1 -0
  182. package/plugins/weppy-roblox-mcp/dist/index.d.ts +3 -0
  183. package/plugins/weppy-roblox-mcp/dist/index.d.ts.map +1 -0
  184. package/plugins/weppy-roblox-mcp/dist/index.js +59 -0
  185. package/plugins/weppy-roblox-mcp/dist/index.js.map +1 -0
  186. package/plugins/weppy-roblox-mcp/dist/server.d.ts +13 -0
  187. package/plugins/weppy-roblox-mcp/dist/server.d.ts.map +1 -0
  188. package/plugins/weppy-roblox-mcp/dist/server.js +260 -0
  189. package/plugins/weppy-roblox-mcp/dist/server.js.map +1 -0
  190. package/plugins/weppy-roblox-mcp/dist/tools/asset-tools.d.ts +10 -0
  191. package/plugins/weppy-roblox-mcp/dist/tools/asset-tools.d.ts.map +1 -0
  192. package/plugins/weppy-roblox-mcp/dist/tools/asset-tools.js +127 -0
  193. package/plugins/weppy-roblox-mcp/dist/tools/asset-tools.js.map +1 -0
  194. package/plugins/weppy-roblox-mcp/dist/tools/bulk-tools.d.ts +11 -0
  195. package/plugins/weppy-roblox-mcp/dist/tools/bulk-tools.d.ts.map +1 -0
  196. package/plugins/weppy-roblox-mcp/dist/tools/bulk-tools.js +225 -0
  197. package/plugins/weppy-roblox-mcp/dist/tools/bulk-tools.js.map +1 -0
  198. package/plugins/weppy-roblox-mcp/dist/tools/environment-tools.d.ts +8 -0
  199. package/plugins/weppy-roblox-mcp/dist/tools/environment-tools.d.ts.map +1 -0
  200. package/plugins/weppy-roblox-mcp/dist/tools/environment-tools.js +93 -0
  201. package/plugins/weppy-roblox-mcp/dist/tools/environment-tools.js.map +1 -0
  202. package/plugins/weppy-roblox-mcp/dist/tools/index.d.ts +18 -0
  203. package/plugins/weppy-roblox-mcp/dist/tools/index.d.ts.map +1 -0
  204. package/plugins/weppy-roblox-mcp/dist/tools/index.js +59 -0
  205. package/plugins/weppy-roblox-mcp/dist/tools/index.js.map +1 -0
  206. package/plugins/weppy-roblox-mcp/dist/tools/instance-tools.d.ts +15 -0
  207. package/plugins/weppy-roblox-mcp/dist/tools/instance-tools.d.ts.map +1 -0
  208. package/plugins/weppy-roblox-mcp/dist/tools/instance-tools.js +252 -0
  209. package/plugins/weppy-roblox-mcp/dist/tools/instance-tools.js.map +1 -0
  210. package/plugins/weppy-roblox-mcp/dist/tools/log-tools.d.ts +6 -0
  211. package/plugins/weppy-roblox-mcp/dist/tools/log-tools.d.ts.map +1 -0
  212. package/plugins/weppy-roblox-mcp/dist/tools/log-tools.js +53 -0
  213. package/plugins/weppy-roblox-mcp/dist/tools/log-tools.js.map +1 -0
  214. package/plugins/weppy-roblox-mcp/dist/tools/property-tools.d.ts +13 -0
  215. package/plugins/weppy-roblox-mcp/dist/tools/property-tools.d.ts.map +1 -0
  216. package/plugins/weppy-roblox-mcp/dist/tools/property-tools.js +213 -0
  217. package/plugins/weppy-roblox-mcp/dist/tools/property-tools.js.map +1 -0
  218. package/plugins/weppy-roblox-mcp/dist/tools/raycast-tools.d.ts +11 -0
  219. package/plugins/weppy-roblox-mcp/dist/tools/raycast-tools.d.ts.map +1 -0
  220. package/plugins/weppy-roblox-mcp/dist/tools/raycast-tools.js +420 -0
  221. package/plugins/weppy-roblox-mcp/dist/tools/raycast-tools.js.map +1 -0
  222. package/plugins/weppy-roblox-mcp/dist/tools/script-tools.d.ts +13 -0
  223. package/plugins/weppy-roblox-mcp/dist/tools/script-tools.d.ts.map +1 -0
  224. package/plugins/weppy-roblox-mcp/dist/tools/script-tools.js +229 -0
  225. package/plugins/weppy-roblox-mcp/dist/tools/script-tools.js.map +1 -0
  226. package/plugins/weppy-roblox-mcp/dist/tools/search-tools.d.ts +11 -0
  227. package/plugins/weppy-roblox-mcp/dist/tools/search-tools.d.ts.map +1 -0
  228. package/plugins/weppy-roblox-mcp/dist/tools/search-tools.js +196 -0
  229. package/plugins/weppy-roblox-mcp/dist/tools/search-tools.js.map +1 -0
  230. package/plugins/weppy-roblox-mcp/dist/tools/selection-tools.d.ts +16 -0
  231. package/plugins/weppy-roblox-mcp/dist/tools/selection-tools.d.ts.map +1 -0
  232. package/plugins/weppy-roblox-mcp/dist/tools/selection-tools.js +185 -0
  233. package/plugins/weppy-roblox-mcp/dist/tools/selection-tools.js.map +1 -0
  234. package/plugins/weppy-roblox-mcp/dist/tools/spatial-tools.d.ts +8 -0
  235. package/plugins/weppy-roblox-mcp/dist/tools/spatial-tools.d.ts.map +1 -0
  236. package/plugins/weppy-roblox-mcp/dist/tools/spatial-tools.js +155 -0
  237. package/plugins/weppy-roblox-mcp/dist/tools/spatial-tools.js.map +1 -0
  238. package/plugins/weppy-roblox-mcp/dist/tools/state-tools.d.ts +153 -0
  239. package/plugins/weppy-roblox-mcp/dist/tools/state-tools.d.ts.map +1 -0
  240. package/plugins/weppy-roblox-mcp/dist/tools/state-tools.js +481 -0
  241. package/plugins/weppy-roblox-mcp/dist/tools/state-tools.js.map +1 -0
  242. package/plugins/weppy-roblox-mcp/dist/tools/tag-tools.d.ts +8 -0
  243. package/plugins/weppy-roblox-mcp/dist/tools/tag-tools.d.ts.map +1 -0
  244. package/plugins/weppy-roblox-mcp/dist/tools/tag-tools.js +99 -0
  245. package/plugins/weppy-roblox-mcp/dist/tools/tag-tools.js.map +1 -0
  246. package/plugins/weppy-roblox-mcp/dist/tools/terrain-tools.d.ts +15 -0
  247. package/plugins/weppy-roblox-mcp/dist/tools/terrain-tools.d.ts.map +1 -0
  248. package/plugins/weppy-roblox-mcp/dist/tools/terrain-tools.js +549 -0
  249. package/plugins/weppy-roblox-mcp/dist/tools/terrain-tools.js.map +1 -0
  250. package/plugins/weppy-roblox-mcp/dist/types/index.d.ts +111 -0
  251. package/plugins/weppy-roblox-mcp/dist/types/index.d.ts.map +1 -0
  252. package/plugins/weppy-roblox-mcp/dist/types/index.js +8 -0
  253. package/plugins/weppy-roblox-mcp/dist/types/index.js.map +1 -0
  254. package/plugins/weppy-roblox-mcp/dist/utils/logger.d.ts +16 -0
  255. package/plugins/weppy-roblox-mcp/dist/utils/logger.d.ts.map +1 -0
  256. package/plugins/weppy-roblox-mcp/dist/utils/logger.js +87 -0
  257. package/plugins/weppy-roblox-mcp/dist/utils/logger.js.map +1 -0
  258. package/plugins/weppy-roblox-mcp/dist/utils/type-converter.d.ts +33 -0
  259. package/plugins/weppy-roblox-mcp/dist/utils/type-converter.d.ts.map +1 -0
  260. package/plugins/weppy-roblox-mcp/dist/utils/type-converter.js +203 -0
  261. package/plugins/weppy-roblox-mcp/dist/utils/type-converter.js.map +1 -0
  262. package/plugins/weppy-roblox-mcp/dist/utils/validation.d.ts +17 -0
  263. package/plugins/weppy-roblox-mcp/dist/utils/validation.d.ts.map +1 -0
  264. package/plugins/weppy-roblox-mcp/dist/utils/validation.js +26 -0
  265. package/plugins/weppy-roblox-mcp/dist/utils/validation.js.map +1 -0
  266. package/plugins/weppy-roblox-mcp/package.json +43 -0
  267. package/plugins/weppy-roblox-mcp/skills/roblox-game-dev/SKILL.md +548 -0
  268. package/plugins/weppy-roblox-mcp/skills/roblox-mcp-guide/SKILL.md +680 -0
  269. package/plugins/weppy-roblox-mcp/skills/roblox-mcp-guide/scripts/check-mcp.sh +86 -0
  270. package/plugins/weppy-roblox-mcp/skills/roblox-planner/SKILL.md +588 -0
  271. package/plugins/weppy-roblox-mcp/skills/roblox-planner/scripts/verify-plan.sh +134 -0
  272. package/plugins/weppy-roblox-mcp/skills/roblox-sync/SKILL.md +389 -0
  273. package/plugins/weppy-roblox-mcp/skills/roblox-sync/scripts/post-verify.sh +160 -0
  274. package/plugins/weppy-roblox-mcp/skills/roblox-sync/scripts/pre-check.sh +304 -0
  275. package/plugins/weppy-roblox-mcp/skills/roblox-sync/scripts/update-metadata.sh +27 -0
  276. package/plugins/weppy-roblox-mcp/skills/roblox-task-tracker/SKILL.md +349 -0
  277. package/plugins/weppy-roblox-mcp/skills/roblox-task-tracker/scripts/validate.sh +28 -0
  278. package/plugins/weppy-roblox-mcp/skills/roblox-templates/SKILL.md +244 -0
  279. package/plugins/weppy-roblox-mcp/skills/roblox-templates/assets/effects.json +118 -0
  280. package/plugins/weppy-roblox-mcp/skills/roblox-templates/assets/items.json +169 -0
  281. package/plugins/weppy-roblox-mcp/skills/roblox-templates/assets/maps/maps.json +763 -0
  282. package/plugins/weppy-roblox-mcp/skills/roblox-templates/assets/maps/sources/decorations.json +137 -0
  283. package/plugins/weppy-roblox-mcp/skills/roblox-templates/assets/maps/sources/standalone-maps.json +331 -0
  284. package/plugins/weppy-roblox-mcp/skills/roblox-templates/assets/maps/sources/terrain-presets.json +272 -0
  285. package/plugins/weppy-roblox-mcp/skills/roblox-templates/assets/monsters.json +132 -0
  286. package/plugins/weppy-roblox-mcp/skills/roblox-templates/assets/npcs.json +50 -0
  287. package/plugins/weppy-roblox-mcp/skills/roblox-templates/assets/weapons.json +140 -0
  288. package/plugins/weppy-roblox-mcp/skills/roblox-templates/references/animations.json +40 -0
  289. package/plugins/weppy-roblox-mcp/skills/roblox-templates/references/rpg-balance.json +236 -0
  290. package/plugins/weppy-roblox-mcp/skills/roblox-templates/references/rpg.md +304 -0
  291. package/plugins/weppy-roblox-mcp/skills/roblox-templates/references/terrain-generation.json +192 -0
  292. package/plugins/weppy-roblox-mcp/skills/roblox-templates/samples/SpawnConfig.luau +152 -0
  293. package/roblox-plugin/WeppyRobloxMCP-Free.rbxm +3 -0
@@ -0,0 +1,86 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # check-mcp.sh - Check MCP/Studio connection status
4
+ # =============================================================================
5
+ # Quick check for MCP connection. Used by agent hooks.
6
+ #
7
+ # Exit codes:
8
+ # 0 = Connected or unknown (allow proceed)
9
+ # 1 = Definitely disconnected (block)
10
+ #
11
+ # Output (machine-readable):
12
+ # STATUS=connected|disconnected|unknown
13
+ # MESSAGE=<description>
14
+ # =============================================================================
15
+
16
+ SYNC_DIR="${1:-roblox-studio-sync}"
17
+ CONNECTION_FILE="$SYNC_DIR/connection-status.txt"
18
+ ACTIVITY_LOG="$SYNC_DIR/activity.log"
19
+ MAX_AGE=60 # Connection status valid for 60 seconds
20
+
21
+ # Ensure sync directory exists
22
+ mkdir -p "$SYNC_DIR"
23
+
24
+ # Method 1: Check for recent MCP activity (most reliable)
25
+ if [ -f "$ACTIVITY_LOG" ]; then
26
+ # Check if activity log was modified in last 5 minutes
27
+ if [ "$(find "$ACTIVITY_LOG" -mmin -5 2>/dev/null)" ]; then
28
+ echo "STATUS=connected"
29
+ echo "MESSAGE=Recent MCP activity detected"
30
+ exit 0
31
+ fi
32
+ fi
33
+
34
+ # Method 2: Check cached connection status
35
+ if [ -f "$CONNECTION_FILE" ]; then
36
+ LAST_STATUS=$(cat "$CONNECTION_FILE" 2>/dev/null | head -1)
37
+
38
+ # Get file age (macOS compatible)
39
+ FILE_MOD=$(stat -f %m "$CONNECTION_FILE" 2>/dev/null || stat -c %Y "$CONNECTION_FILE" 2>/dev/null || echo "0")
40
+ NOW=$(date +%s)
41
+ FILE_AGE=$((NOW - FILE_MOD))
42
+
43
+ if [ "$FILE_AGE" -lt "$MAX_AGE" ] && [ "$LAST_STATUS" = "connected" ]; then
44
+ echo "STATUS=connected"
45
+ echo "MESSAGE=Connection verified recently (${FILE_AGE}s ago)"
46
+ exit 0
47
+ fi
48
+ fi
49
+
50
+ # Method 3: Check if Studio plugin port is responding
51
+ MCP_PORT="${MCP_PORT:-21496}"
52
+
53
+ if command -v nc &> /dev/null; then
54
+ if nc -z -w 2 localhost "$MCP_PORT" 2>/dev/null; then
55
+ echo "connected" > "$CONNECTION_FILE"
56
+ echo "STATUS=connected"
57
+ echo "MESSAGE=Studio plugin responding on port $MCP_PORT"
58
+ exit 0
59
+ else
60
+ echo "disconnected" > "$CONNECTION_FILE"
61
+ echo "STATUS=disconnected"
62
+ echo "MESSAGE=Studio plugin not responding on port $MCP_PORT"
63
+ echo ""
64
+ echo "GUIDE=Please check:"
65
+ echo " 1. Roblox Studio is running"
66
+ echo " 2. MCP plugin is installed and enabled"
67
+ echo " 3. Plugin shows 'Connected' status"
68
+ exit 1
69
+ fi
70
+ fi
71
+
72
+ # Method 4: Try curl as fallback
73
+ if command -v curl &> /dev/null; then
74
+ if curl -s --connect-timeout 2 "http://localhost:$MCP_PORT" >/dev/null 2>&1; then
75
+ echo "connected" > "$CONNECTION_FILE"
76
+ echo "STATUS=connected"
77
+ echo "MESSAGE=Studio plugin responding"
78
+ exit 0
79
+ fi
80
+ fi
81
+
82
+ # Cannot verify - allow but warn
83
+ echo "STATUS=unknown"
84
+ echo "MESSAGE=Cannot verify connection (nc/curl not available)"
85
+ echo "GUIDE=Ensure Roblox Studio is open with MCP plugin installed"
86
+ exit 0
@@ -0,0 +1,588 @@
1
+ ---
2
+ name: roblox-planner
3
+ description: Plan Roblox game development projects. Use when starting a new game, planning features, breaking down development tasks, or creating roadmaps. Helps structure game development into actionable phases.
4
+ argument-hint: "[game-description or feature-request]"
5
+ user-invocable: false
6
+ ---
7
+
8
+ # Roblox Game Planner
9
+
10
+ This skill helps plan and structure Roblox game development projects by clarifying requirements, breaking down features into tasks, and creating actionable development plans.
11
+
12
+ ## Prerequisites
13
+
14
+ **This skill assumes sync is already complete.**
15
+
16
+ This skill is called internally by `/roblox-game-dev` orchestrator only.
17
+ Users cannot invoke this skill directly.
18
+
19
+ ## Project State Detection & Template Usage
20
+
21
+ ### Project State Detection
22
+
23
+ After sync completes, analyze `roblox-studio-sync/explorer/` data to determine project state:
24
+
25
+ **Empty Project Criteria:**
26
+ ```typescript
27
+ function isEmptyProject(syncData): boolean {
28
+ const workspace = syncData["Workspace/_index.json"];
29
+
30
+ // Only default instances present (Camera, Terrain, SpawnLocation)
31
+ if (workspace.childCount <= 3) return true;
32
+
33
+ // No folder structure exists
34
+ const hasFolders = workspace.children.some(c =>
35
+ ["Folder", "Model"].includes(c.className) && c.name !== "Camera"
36
+ );
37
+ if (!hasFolders) return true;
38
+
39
+ // No scripts present
40
+ const hasScripts = checkForScripts(syncData);
41
+ if (!hasScripts) return true;
42
+
43
+ return false;
44
+ }
45
+ ```
46
+
47
+ ### Template Usage Rules
48
+
49
+ | Project State | Template Usage | Description |
50
+ |--------------|----------------|-------------|
51
+ | **Empty** | **Active use** | Select assets from templates (maps, monsters, weapons) |
52
+ | **Existing content** | **User intent first** | Plan to match existing style, reference templates only when needed |
53
+ | **Extension/Feature add** | **Selective use** | Judge based on user request |
54
+
55
+ ### Empty Project Workflow
56
+
57
+ ```
58
+ 1. Analyze sync data → Determine project state
59
+ 2. If empty project:
60
+ - Read roblox-templates/references/{game-type}.md
61
+ - Reference asset concepts from roblox-templates/assets/*.json
62
+ - Specify asset concepts in tasks (no hardcoded IDs)
63
+ 3. If existing content:
64
+ - Analyze existing structure
65
+ - Plan extensions/modifications per user request
66
+ - Use templates for reference only
67
+ ```
68
+
69
+ ### Existing Project Workflow
70
+
71
+ ```
72
+ 1. Understand existing structure from sync data
73
+ - What folder structure is used?
74
+ - What code style is used?
75
+ - What existing assets/models are present?
76
+ 2. Analyze user request
77
+ - Modifying existing functionality?
78
+ - Adding new features?
79
+ 3. Plan according to existing style
80
+ - Do not force template usage
81
+ - Plan in the direction user wants
82
+ ```
83
+
84
+ ## Cache Directory
85
+
86
+ All plans stored in `.roblox-cache/`:
87
+
88
+ ```
89
+ .roblox-cache/
90
+ ├── plans/ # Development plans
91
+ │ └── {plan-id}.md
92
+ ├── tasks/ # Task lists with status
93
+ │ └── {plan-id}-tasks.md
94
+ └── current-plan.txt # Active plan ID
95
+ ```
96
+
97
+ ## Workflow
98
+
99
+ ### Phase 1: Gather Requirements
100
+
101
+ When user requests a game or feature:
102
+
103
+ **Essential Questions:**
104
+
105
+ 1. **Game Type**
106
+ - "What type of game? (Obby, Tycoon, Simulator, RPG, Battle Royale, etc.)"
107
+
108
+ 2. **Core Mechanics**
109
+ - "What are the main gameplay mechanics?"
110
+ - "What does the player do moment-to-moment?"
111
+
112
+ 3. **Multiplayer**
113
+ - "Single player, multiplayer, or both?"
114
+ - "How do players interact?"
115
+
116
+ 4. **Scope**
117
+ - "How large is the map/world?"
118
+ - "How many levels/areas?"
119
+
120
+ 5. **Visual Style**
121
+ - "What's the art style? (Realistic, cartoony, low-poly)"
122
+ - "What's the theme? (Medieval, futuristic, nature)"
123
+
124
+ 6. **Target Audience**
125
+ - "Who is this game for?"
126
+ - "What's the complexity level?"
127
+
128
+ **Example Clarification Dialog:**
129
+ ```
130
+ I'd like to understand your game better:
131
+
132
+ 1. Game Type: What genre is this? (Obby, Tycoon, Simulator, etc.)
133
+ 2. Core Loop: What does a player do in a typical session?
134
+ 3. Scale: How big should the world be?
135
+ 4. Theme: What visual style are you going for?
136
+ 5. Complexity: Beginner-friendly or advanced players?
137
+
138
+ Please share any reference games or inspirations!
139
+ ```
140
+
141
+ ### Phase 2: Create Plan Document
142
+
143
+ **Generate Plan ID:** `plan-{YYYYMMDD}-{short-name}`
144
+ Example: `plan-20250128-sky-obby`
145
+
146
+ **Plan Document Structure:**
147
+
148
+ ```markdown
149
+ # Plan: {Game Name}
150
+
151
+ **ID:** {plan-id}
152
+ **Created:** {date}
153
+ **Status:** draft
154
+
155
+ ## Vision
156
+
157
+ {2-3 sentence description of the game and what makes it unique}
158
+
159
+ ## Game Overview
160
+
161
+ ### Type
162
+ {Genre: Obby, Tycoon, Simulator, etc.}
163
+
164
+ ### Core Loop
165
+ 1. {Primary action}
166
+ 2. {Secondary action}
167
+ 3. {Reward/progression}
168
+
169
+ ### Target Audience
170
+ {Who will play this game}
171
+
172
+ ## Requirements
173
+
174
+ ### Must Have
175
+ - [ ] {Critical feature 1}
176
+ - [ ] {Critical feature 2}
177
+ - [ ] {Critical feature 3}
178
+
179
+ ### Should Have
180
+ - [ ] {Important feature 1}
181
+ - [ ] {Important feature 2}
182
+
183
+ ### Nice to Have
184
+ - [ ] {Optional feature 1}
185
+ - [ ] {Optional feature 2}
186
+
187
+ ## Technical Specifications
188
+
189
+ ### Map Size
190
+ {Approximate dimensions and structure}
191
+
192
+ ### Performance Targets
193
+ - Max parts: {estimate}
194
+ - Target FPS: 60
195
+ - Mobile support: {yes/no}
196
+
197
+ ### Services Used
198
+ - [ ] DataStoreService (saving)
199
+ - [ ] MarketplaceService (purchases)
200
+ - [ ] TeleportService (multiple places)
201
+
202
+ ## Development Phases
203
+
204
+ ### Phase 1: Foundation ({X} tasks)
205
+ Core infrastructure and basic setup
206
+
207
+ ### Phase 2: Core Mechanics ({Y} tasks)
208
+ Main gameplay implementation
209
+
210
+ ### Phase 3: Content ({Z} tasks)
211
+ Levels, items, environments
212
+
213
+ ### Phase 4: Polish ({W} tasks)
214
+ UI, effects, sounds, optimization
215
+
216
+ ### Phase 5: Launch ({V} tasks)
217
+ Testing, fixes, deployment
218
+
219
+ ## Risks & Mitigations
220
+
221
+ | Risk | Impact | Mitigation |
222
+ |------|--------|------------|
223
+ | {Risk 1} | {High/Med/Low} | {Strategy} |
224
+ | {Risk 2} | {High/Med/Low} | {Strategy} |
225
+
226
+ ## Success Criteria
227
+
228
+ - [ ] {Measurable outcome 1}
229
+ - [ ] {Measurable outcome 2}
230
+ - [ ] {Measurable outcome 3}
231
+ ```
232
+
233
+ ### Phase 3: Break Down Tasks
234
+
235
+ For each phase, create detailed task breakdown:
236
+
237
+ **Task Template:**
238
+ ```markdown
239
+ ### TASK-{NNN}: {Title}
240
+ - **Phase:** {Phase number}
241
+ - **Complexity:** simple | medium | complex
242
+ - **Executor:** roblox-engineer | manual
243
+ - **Dependencies:** none | TASK-XXX, TASK-YYY
244
+ - **Description:** {What needs to be done}
245
+ - **Acceptance Criteria:**
246
+ - [ ] {Criterion 1}
247
+ - [ ] {Criterion 2}
248
+ - **MCP Tools:** {Relevant tools to use}
249
+ ```
250
+
251
+ **Task Categories:**
252
+
253
+ | Category | Example Tasks |
254
+ |----------|--------------|
255
+ | **Structure** | Create folders, organize hierarchy |
256
+ | **Environment** | Terrain, lighting, atmosphere |
257
+ | **Building** | Platforms, obstacles, decorations |
258
+ | **Scripting** | Game logic, player systems |
259
+ | **UI** | Menus, HUD, popups |
260
+ | **Data** | Saving, leaderboards, stats |
261
+ | **Effects** | Particles, sounds, animations |
262
+ | **Testing** | Playtesting, bug fixes |
263
+
264
+ ### Phase 4: Present Plan
265
+
266
+ **Always get user confirmation before proceeding:**
267
+
268
+ ```markdown
269
+ ## Proposed Development Plan
270
+
271
+ ### {Game Name}
272
+ {Brief vision statement}
273
+
274
+ ### Scope Summary
275
+ - **Phases:** {count}
276
+ - **Total Tasks:** {count}
277
+ - **Estimated Complexity:** {Low/Medium/High}
278
+
279
+ ### Phase Breakdown
280
+
281
+ | Phase | Focus | Tasks |
282
+ |-------|-------|-------|
283
+ | 1. Foundation | Setup, structure | {count} |
284
+ | 2. Core | Main mechanics | {count} |
285
+ | 3. Content | Levels, items | {count} |
286
+ | 4. Polish | UI, effects | {count} |
287
+ | 5. Launch | Testing, deploy | {count} |
288
+
289
+ ### Key Features
290
+ 1. {Feature 1}
291
+ 2. {Feature 2}
292
+ 3. {Feature 3}
293
+
294
+ ### Risks Identified
295
+ - {Risk 1 and mitigation}
296
+ - {Risk 2 and mitigation}
297
+
298
+ ---
299
+
300
+ **Do you approve this plan?**
301
+ - Yes, start development
302
+ - Modify scope (tell me what to change)
303
+ - Add more detail to specific phase
304
+ ```
305
+
306
+ ### Phase 5: Save Plan
307
+
308
+ On approval:
309
+
310
+ ### Phase 6: Plan File Verification
311
+
312
+ **After saving plan files, verify they were created correctly:**
313
+
314
+ ```bash
315
+ ./.claude/skills/roblox-planner/scripts/verify-plan.sh <plan-id>
316
+
317
+ # Example
318
+ ./.claude/skills/roblox-planner/scripts/verify-plan.sh plan-20250128-rpg
319
+ ```
320
+
321
+ **Verification Checks:**
322
+ 1. Directory structure (`.roblox-cache/plans/`, `.roblox-cache/tasks/`)
323
+ 2. Plan file exists and has required sections (Vision, Requirements, Development Phases)
324
+ 3. Tasks file exists and has TASK entries with Phase/Complexity fields
325
+ 4. `current-plan.txt` points to the correct plan ID
326
+
327
+ **Exit codes:**
328
+ - `0` = All checks passed
329
+ - `1` = Verification failed (missing files or invalid content)
330
+
331
+ ---
332
+
333
+ On approval (continued):
334
+
335
+ ```bash
336
+ # 1. Create cache directories
337
+ mkdir -p .roblox-cache/plans .roblox-cache/tasks
338
+
339
+ # 2. Save plan document
340
+ # Write to .roblox-cache/plans/{plan-id}.md
341
+
342
+ # 3. Create task list
343
+ # Write to .roblox-cache/tasks/{plan-id}-tasks.md
344
+
345
+ # 4. Set as active plan
346
+ echo "{plan-id}" > .roblox-cache/current-plan.txt
347
+ ```
348
+
349
+ ---
350
+
351
+ ## Game Type Templates
352
+
353
+ ### Obby (Obstacle Course)
354
+
355
+ **Typical Structure:**
356
+ ```
357
+ Phase 1: Foundation
358
+ - TASK-001: Create spawn area
359
+ - TASK-002: Set up checkpoint system
360
+ - TASK-003: Configure respawn logic
361
+
362
+ Phase 2: Core Mechanics
363
+ - TASK-004: Build tutorial section
364
+ - TASK-005: Create obstacle types (jumps, moving, timed)
365
+ - TASK-006: Implement difficulty zones
366
+
367
+ Phase 3: Content
368
+ - TASK-007: Build easy levels (1-5)
369
+ - TASK-008: Build medium levels (6-10)
370
+ - TASK-009: Build hard levels (11-15)
371
+
372
+ Phase 4: Polish
373
+ - TASK-010: Add particle effects
374
+ - TASK-011: Create win celebration
375
+ - TASK-012: Add leaderboard
376
+ ```
377
+
378
+ ### Tycoon
379
+
380
+ **Typical Structure:**
381
+ ```
382
+ Phase 1: Foundation
383
+ - TASK-001: Create tycoon plot template
384
+ - TASK-002: Set up currency system
385
+ - TASK-003: Implement dropper/collector basics
386
+
387
+ Phase 2: Core Mechanics
388
+ - TASK-004: Build purchase buttons
389
+ - TASK-005: Create upgrade paths
390
+ - TASK-006: Implement rebirth system
391
+
392
+ Phase 3: Content
393
+ - TASK-007: Design 3 tycoon themes
394
+ - TASK-008: Create 20+ purchasable items
395
+ - TASK-009: Add premium upgrades
396
+
397
+ Phase 4: Polish
398
+ - TASK-010: Create tycoon UI
399
+ - TASK-011: Add money animations
400
+ - TASK-012: Implement data saving
401
+ ```
402
+
403
+ ### Simulator
404
+
405
+ **Typical Structure:**
406
+ ```
407
+ Phase 1: Foundation
408
+ - TASK-001: Create collection mechanics
409
+ - TASK-002: Set up stats system
410
+ - TASK-003: Implement inventory
411
+
412
+ Phase 2: Core Mechanics
413
+ - TASK-004: Build tool/pet system
414
+ - TASK-005: Create upgrade mechanics
415
+ - TASK-006: Implement zones/worlds
416
+
417
+ Phase 3: Content
418
+ - TASK-007: Design 5 zones
419
+ - TASK-008: Create 50+ collectibles
420
+ - TASK-009: Add rare items/pets
421
+
422
+ Phase 4: Polish
423
+ - TASK-010: Create progression UI
424
+ - TASK-011: Add VFX for collection
425
+ - TASK-012: Implement trading
426
+ ```
427
+
428
+ ### RPG (Role Playing Game)
429
+
430
+ **Map Theme Selection:**
431
+ RPG 맵은 다음 테마 중 랜덤으로 선택됩니다:
432
+ - `forest` - 숲 속 빈터 (beginner)
433
+ - `volcanic` - 화산 분화구 (intermediate)
434
+ - `island` - 열대 섬 (intermediate)
435
+ - `dungeon` - 던전/동굴 (intermediate)
436
+ - `desert` - 사막 오아시스 (intermediate)
437
+
438
+ **Typical Structure:**
439
+ ```
440
+ Phase 1: World Setup (맵 생성 우선)
441
+ - TASK-001: Create/insert map first (terrain_generate or insert_free_model)
442
+ - Select random theme from maps.json environments
443
+ - Focus camera on created world
444
+ - TASK-002: Configure player SpawnLocation based on map's spawnZones
445
+ - TASK-003: Create game folder structure (Monsters, NPCs, Items, Weapons)
446
+ - TASK-004: Configure lighting and atmosphere to match theme
447
+
448
+ Phase 2: Spawn Configuration (스폰 영역 설정)
449
+ - TASK-005: Analyze spawnable areas using find_spawn_positions/find_ground
450
+ - TASK-006: Define spawn zones in script (coordinates from maps.json spawnZones)
451
+ - TASK-007: Select monsters from assets/monsters.json based on theme/difficulty
452
+ - TASK-008: Create MonsterSpawner script with hardcoded zone coordinates
453
+ - TASK-009: Visualize spawn zones using visualization_create_area/visualization_create_marker (if available)
454
+
455
+ Phase 3: Core Mechanics
456
+ - TASK-010: Set up player stats system (HP, MP, Level, EXP)
457
+ - TASK-011: Implement combat system (attack, damage calculation)
458
+ - TASK-012: Create monster AI (patrol, chase, attack)
459
+ - TASK-013: Implement level/experience system
460
+ - TASK-014: Create death/respawn mechanics
461
+
462
+ Phase 4: Content & UI
463
+ - TASK-015: Create HP/MP/EXP UI (ScreenGui with bars)
464
+ - TASK-016: Place weapons/items (refer to assets/weapons.json, items.json)
465
+ - TASK-017: Place NPCs if needed (refer to assets/npcs.json)
466
+ - TASK-018: Add combat effects (hit, death particles)
467
+ - TASK-019: Implement damage numbers and sound effects
468
+
469
+ Phase 5: Data & Launch
470
+ - TASK-020: Implement data saving (player stats, inventory)
471
+ - TASK-021: Create leaderboard
472
+ - TASK-022: Playtesting and balance adjustments
473
+ - TASK-023: Clear visualization (visualization_clear) before publish
474
+ ```
475
+
476
+ **Spawn Configuration Workflow:**
477
+ ```
478
+ 1. Map Created
479
+
480
+ 2. Read spawnZones from maps.json for selected environment
481
+
482
+ 3. Verify each zone with find_ground (check for water/invalid terrain)
483
+
484
+ 4. Select monsters from monsters.json (match theme/difficulty)
485
+
486
+ 5. Write spawn script with SPAWN_ZONES table (hardcoded coordinates)
487
+
488
+ 6. (Optional) Visualize with visualization_create_marker/area for debugging
489
+
490
+ 7. Clear visualizations before game publish
491
+ ```
492
+
493
+ ---
494
+
495
+ ## Estimation Guidelines
496
+
497
+ ### Complexity Levels
498
+
499
+ | Level | Description | Typical Duration |
500
+ |-------|-------------|-----------------|
501
+ | **Simple** | Single instance, basic property | 5-10 min |
502
+ | **Medium** | Multiple parts, scripting | 15-30 min |
503
+ | **Complex** | Systems, multi-file | 30-60 min |
504
+
505
+ ### MCP Tool Mapping
506
+
507
+ | Task Type | Primary Tools |
508
+ |-----------|--------------|
509
+ | **Structure** | create_instance, move_instance, rename_instance |
510
+ | **Building** | create_instance_with_properties, mass_create_instances |
511
+ | **Terrain** | terrain_fill_*, terrain_generate |
512
+ | **Lighting** | set_lighting, set_atmosphere, set_sky |
513
+ | **Scripting** | create_script, set_script_source |
514
+ | **Properties** | set_property, set_multiple_properties |
515
+ | **Search** | search_by_*, find_first_descendant |
516
+
517
+ ---
518
+
519
+ ## Best Practices
520
+
521
+ ### Planning
522
+ - Start with MVP (minimum viable product)
523
+ - Break tasks into 15-30 minute chunks
524
+ - Make dependencies explicit
525
+ - Leave buffer for unexpected issues
526
+
527
+ ### Prioritization
528
+ - Core loop first, polish last
529
+ - Test early, test often
530
+ - Mobile compatibility from start if needed
531
+
532
+ ### Communication
533
+ - Confirm understanding before planning
534
+ - Get explicit approval before execution
535
+ - Report progress at phase boundaries
536
+
537
+ ---
538
+
539
+ ## Asset Selection Rule
540
+
541
+ **The planner does NOT hardcode asset IDs, names, or stats.**
542
+
543
+ Tasks requiring assets specify **concepts only**, and at execution time the `roblox-templates` skill selects matching assets.
544
+
545
+ ### Principles
546
+
547
+ 1. **Planner role**: Define concepts (theme, difficulty, category, quantity)
548
+ 2. **Templates role**: Provide assets (ID, name, stats, coordinates)
549
+ 3. **No dependencies**: Planner does not depend on specific asset IDs/names
550
+
551
+ ### Task Writing Format
552
+
553
+ ```markdown
554
+ # Correct example (concepts only)
555
+ ### TASK-009: Place monsters
556
+ - **Concept**: 3 beginner-difficulty monster types
557
+ - **Quantity**: 3-5 each
558
+ - **Asset source**: roblox-templates/assets/monsters.json → filter by difficulty "beginner"
559
+ - **Placement**: Determined by find_spawn_positions
560
+
561
+ ### TASK-001: Insert map
562
+ - **Concept**: RPG-suitable theme (randomly selected from: forest, volcanic, island, dungeon, desert)
563
+ - **Asset source**: roblox-templates/assets/maps/maps.json → filter by recommended.rpg_adventure OR random theme
564
+ - **Selection**: Randomly pick one environment from matched results
565
+
566
+ # Incorrect example (hardcoding)
567
+ ### TASK-009: Place monsters
568
+ - Slime (83110489) x5 ← ❌ Hardcoded ID
569
+ - Zombie (3375251681) x3 ← ❌ Hardcoded name/ID
570
+ ```
571
+
572
+ ### Asset Selection Workflow
573
+
574
+ ```
575
+ 1. Planner: Record concepts in task (theme, difficulty, category)
576
+ 2. Executor: Read roblox-templates/references/{game-type}.md
577
+ 3. Executor: Match concepts in roblox-templates/assets/{category}.json
578
+ 4. Executor: Randomly select from matched assets and insert via MCP
579
+ ```
580
+
581
+ ### Game Type → Reference Mapping
582
+
583
+ | Game Type | Reference File | Asset Categories |
584
+ |-----------|----------------|------------------|
585
+ | RPG | references/rpg.md | maps, monsters, weapons, npcs, items |
586
+ | Obby | references/obby.md | obstacles, checkpoints, effects |
587
+ | Tycoon | references/tycoon.md | droppers, buttons, upgraders |
588
+ | Simulator | references/simulator.md | tools, pets, zones |