@adiholick/nvstudio-mcp 2.2.3 โ†’ 2.4.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 (42) hide show
  1. package/README.md +57 -47
  2. package/agent-plugin/mcp_config.json +8 -0
  3. package/agent-plugin/plugin.json +6 -0
  4. package/agent-plugin/rules/AGENTS.md +118 -0
  5. package/agent-plugin/skills/nvstudio-animation-vfx/SKILL.md +120 -0
  6. package/agent-plugin/skills/nvstudio-assets-terrain-guide/SKILL.md +27 -0
  7. package/agent-plugin/skills/nvstudio-gui-standards/SKILL.md +419 -0
  8. package/agent-plugin/skills/nvstudio-mcp-guide/SKILL.md +83 -0
  9. package/agent-plugin/skills/nvstudio-rig-engine/SKILL.md +170 -0
  10. package/agent-plugin/skills/nvstudio-roblox-sync-guide/SKILL.md +16 -0
  11. package/dist/build-plugin.js +55 -0
  12. package/dist/index.js +841 -3
  13. package/dist/luau-validator.js +99 -34
  14. package/dist/roblox-bridge.js +152 -4
  15. package/dist/roblox-docs.js +264 -0
  16. package/dist/vfx-database.js +507 -0
  17. package/package.json +6 -4
  18. package/public/index.html +1590 -180
  19. package/studio-plugin/Main.server.lua +1 -1
  20. package/studio-plugin/animate_character.lua +36 -0
  21. package/studio-plugin/apply_vfx.lua +59 -0
  22. package/studio-plugin/batch_create_instances.lua +128 -0
  23. package/studio-plugin/batch_set_properties.lua +69 -0
  24. package/studio-plugin/edit_rig.lua +35 -0
  25. package/studio-plugin/insert_asset.lua +85 -12
  26. package/studio-plugin/nv_anim_dispatcher.lua +239 -0
  27. package/studio-plugin/nv_auto_rigger.lua +392 -0
  28. package/studio-plugin/nv_curves.lua +260 -0
  29. package/studio-plugin/nv_joint_math.lua +138 -0
  30. package/studio-plugin/nv_kinematics.lua +248 -0
  31. package/studio-plugin/nv_motion_generator.lua +279 -0
  32. package/studio-plugin/nv_rig_dispatcher.lua +319 -0
  33. package/studio-plugin/nv_vfx_serializer.lua +363 -0
  34. package/studio-plugin/nvstudio_mcp.rbxmx +3824 -60
  35. package/studio-plugin/preview_asset.lua +99 -0
  36. package/studio-plugin/scan_security.lua +81 -0
  37. package/studio-plugin/scan_vfx.lua +85 -0
  38. package/studio-plugin/scrub_timeline.lua +122 -0
  39. package/studio-plugin/security_scanner.lua +346 -0
  40. package/studio-plugin/set_properties.lua +83 -0
  41. package/studio-plugin/solve_limb_ik.lua +63 -0
  42. package/studio-plugin/ui_manager.lua +1 -1
package/README.md CHANGED
@@ -1,11 +1,46 @@
1
1
  # nvstudio-mcp ๐Ÿš€
2
2
 
3
- **nvstudio-mcp** adalah jembatan pintar (*Model Context Protocol Bridge*) yang menghubungkan Asisten AI Anda (seperti Antigravity IDE, Cursor, Claude Desktop, atau Windsurf) secara langsung ke dalam **Roblox Studio**. Dengan plugin ini, AI Anda dapat membaca, mengedit script, men-generate terrain, dan berinteraksi dengan API Roblox Studio layaknya seorang asisten *Co-Pilot* sejati.
3
+ **nvstudio-mcp** adalah jembatan pintar (*Model Context Protocol Bridge*) yang menghubungkan Asisten AI Anda (seperti Antigravity IDE, Cursor, Claude Desktop, atau Windsurf) secara langsung ke dalam **Roblox Studio**. Dengan plugin ini, AI Anda dapat membaca dan mengedit skrip, membangun hierarki GUI massal, memindai keamanan model 3D, mencari dokumentasi engine resmi, men-generate terrain, dan berinteraksi dengan API Roblox Studio layaknya seorang asisten *Co-Pilot* sejati.
4
4
 
5
5
  Sistem ini didesain menggunakan **Hybrid Architecture** yang memisahkan logika Engine (*Studio Plugin*) dan aturan anti-halusinasi (*Agent Plugin*).
6
6
 
7
7
  ---
8
8
 
9
+ ## ๐ŸŒŸ Fitur Unggulan v2.4 (Animation, VFX & Rigging Suite)
10
+
11
+ - ๐Ÿ—๏ธ **NV-Rig Engine & Joint Kinematics (`inspect_rig`, `auto_rig`, `edit_rig_joint`, `weld_assembly`, `mirror_rig`)**:
12
+ - **Pure Headless Dispatcher**: Operasi rigging deterministik instan ($O(1)$) tanpa overhead render visual.
13
+ - **Hukum Non-Dislokasi Poros (*Non-Dislocation Law*)**: Menggeser/memutar titik engsel sendi di dunia nyata dengan kompensasi otomatis $C_1 = C_{1\text{old}} \times \text{diff}$ tanpa pernah mendislokasi part anak.
14
+ - **1-Click Auto-Rigging**: Membangun rig lengkap R6 (6 part), R15 (15 part), maupun penautan senjata (`WeaponGrip`) secara instan dengan auto-unanchor.
15
+ - **Bilateral X-Axis Mirroring & Assembly Welder**: Refleksi simetris sendi kiri $\leftrightarrow$ kanan dan pengelasan seluruh komponen armor/prop ke part jangkar utama.
16
+ - ๐Ÿƒ **NV-Animation Engine & Kinematics (`animate_character`, `solve_limb_ik`, `scrub_timeline`)**:
17
+ - **Human-like Motion Synthesis**: Menghasilkan animasi karakter berkualitas tinggi (Walk, Slash, Punch, Idle Breath) berbasis prinsip animasi alami (Anticipation, Follow-Through).
18
+ - **Interpolasi Kurva Halus**: Menggunakan kurva Cubic Bezier (`PoseEasingStyle.Cubic`) dan Quaternion SLERP 4D rotation interpolation bebas *Gimbal Lock*.
19
+ - **Analytical 2-Link LimbIK O(1)**: Penyelesaian sudut tekukan siku dan lutut menggunakan Hukum Cosinus sudut tertutup instan dan ekstensi SoftIK anti-snapping.
20
+ - **Official KeyframeSequence**: Animasi disimpan langsung ke instance resmi di `AnimSaves` karakter, bukan script loop runtime.
21
+ - โœจ **NV-VFX Subsystem & Cross-Project Database (`scan_vfx`, `apply_vfx`, `list_vfx_database`, `delete_vfx`)**:
22
+ - **1:1 Pure Table Serializer**: Mengonversi `ParticleEmitter`, `Beam`, `Trail`, `Light`, dan `Attachment` menjadi tabel data murni JSON dengan relasi pointer yang aman.
23
+ - **Database Lintas-Proyek**: Pindai VFX di Project A dan pasang kembali di Project B dengan faktor skala ukuran opsional (`scale`). Dilengkapi 5 preset bawaan (*Cyan Slash*, *Solar Burst*, *Dragon Aura*, *Arcane Rune*, *Emerald Beam*).
24
+ - **Web Category Browser**: Tab antarmuka web modern dengan filter kategori, pencarian real-time, preview JSON, dan aksi 1-klik.
25
+ - โšก **Batch Instance Builder (`batch_create_instances`, `batch_set_properties`)**:
26
+ - Membangun hierarki objek/UI bersarang puluhan tingkat secara instan dalam 1 putaran request (mengeliminasi 10โ€“20 latency roundtrips).
27
+ - Pembaruan properti massal secara atomik dengan dukungan penuh tipe data Roblox (`UDim`, `UDim2`, `Vector2`, `Vector3`, `NumberRange`, `Rect`, dll).
28
+ - ๐Ÿ›ก๏ธ **Asset Security Scanner (`preview_asset`, `scan_security`, safe `insert_asset`)**:
29
+ - Audit 10 jenis ancaman berbahaya (backdoor `require`, bytecode/hex obfuscation, `loadstring`, Discord webhook loggers, IP stealer, fake gamepass prompt, off-screen hidden padding).
30
+ - Pratinjau aset terisolasi sebelum dimasukkan ke game dan auto-sanitasi skrip (`strip_scripts = true` secara default).
31
+ - ๐Ÿ“š **Live Roblox Engine API & Docs Lookup (`get_roblox_docs`)**:
32
+ - Mengambil dokumentasi resmi terverifikasi langsung dari Roblox Creator Docs (Class, Datatype, Enum, Library, dan Service).
33
+ - Dilengkapi filter nama member spesifik dan caching disk lokal super cepat (~2 ms) untuk mencegah halusinasi kode Luau.
34
+ - ๐ŸŽจ **Standarisasi Desain GUI & Smart Responsive Scaling**:
35
+ - Panduan baku UI modern (*Dark Modern Theme* #1C1C1E, #191919, aksen Cyan #00AAFF).
36
+ - Deteksi perangkat responsif pintar (`GetDeviceType` memisahkan PC, Phone, Tablet, dan Console secara terisolasi).
37
+ - ๐Ÿ”„ **Real-Time Polling Stream & Visual Dashboard**:
38
+ - Komunikasi sub-detik yang sangat stabil dan bebas latensi. Buka [http://localhost:3055](http://localhost:3055) di browser Anda untuk memantau antrean perintah, status koneksi Studio, dan log eksekusi.
39
+ - ๐Ÿงน **Anti-Zombie Port & Auto-Connect**:
40
+ - Port `3055` dibersihkan secara otomatis jika terjadi force-close, dan plugin Studio otomatis terhubung tanpa perlu menekan tombol manual.
41
+
42
+ ---
43
+
9
44
  ## ๐Ÿ“ฅ Instalasi
10
45
 
11
46
  Langkah instalasi dirancang **sangat mudah dan otomatis!**
@@ -32,8 +67,8 @@ curl -fsSL https://raw.githubusercontent.com/Adiholick/nvstudio-mcp/main/install
32
67
  **Apa saja yang dilakukan installer ini secara otomatis?**
33
68
  1. ๐Ÿ“ฆ Mengunduh source code, memasang dependensi Node.js, dan mengkompilasi TypeScript (*Bridge Server*).
34
69
  2. ๐Ÿงฉ **Memasang Plugin Roblox Studio (`nvstudio_mcp.rbxmx`) otomatis** ke folder sistem Roblox Studio Anda (`%LOCALAPPDATA%\Roblox\Plugins` di Windows atau `~/Documents/ROBLOX/Plugins` di macOS).
35
- 3. ๐Ÿง  **Universal AI Skill Installer**: Secara cerdas memindai dan mengunduh library skill 29+ *roblox-brain* dan *nvstudio-mcp-guide*, lalu menginjeksinya langsung ke dalam struktur `skills/` dari **AI Agent apapun** yang Anda gunakan (mendukung **Antigravity IDE**, **Cursor**, **Claude Code**, **Codex**, **OpenCode**, dan **Roo Code**).
36
- 4. โš™๏ธ Melakukan auto-konfigurasi jika mendeteksi editor **Cursor** (`.cursor/mcp.json`) atau **Antigravity** (`mcp_config.json`).
70
+ 3. ๐Ÿง  **Universal AI Skill Installer**: Menginjeksi skill pemandu (*nvstudio-mcp-guide*, *nvstudio-gui-standards*, *nvstudio-animation-vfx*, *nvstudio-rig-engine*, *nvstudio-assets-terrain-guide*, *nvstudio-roblox-sync-guide*) dan aturan anti-halusinasi langsung ke struktur editor AI Anda (**Antigravity IDE**, **Cursor**, **Claude Code**, **Codex**, **OpenCode**, dan **Windsurf**).
71
+ 4. โš™๏ธ Melakukan auto-konfigurasi registrasi MCP server pada editor yang terdeteksi.
37
72
 
38
73
  ---
39
74
 
@@ -43,18 +78,18 @@ Karena pembatasan keamanan bawaan Roblox Studio, akses HTTP harus diizinkan seka
43
78
  1. Buka game/place Anda di **Roblox Studio**.
44
79
  2. Di toolbar atas, buka tab **Home** โž” **Game Settings** โž” pilih menu **Security**.
45
80
  3. Centang (aktifkan) **`Allow HTTP Requests`**, lalu klik **Save**.
46
- 4. **Auto-Detect Aktif!** Plugin Roblox Studio kini memiliki heartbeat pintar yang akan otomatis terhubung (*Auto-Connect*) segera setelah MCP server aktif โ€” Anda tidak perlu lagi repot menekan tombol connect secara manual.
81
+ 4. **Auto-Detect Aktif!** Plugin Roblox Studio akan otomatis terhubung (*Connected*) segera setelah server bridge aktif.
47
82
 
48
83
  ---
49
84
 
50
85
  ### ๐Ÿ“‚ Alternatif: Instalasi Plugin Secara Manual (Opsional)
51
86
 
52
87
  Jika Anda **tidak** menggunakan skrip installer otomatis di atas (misalnya hanya menambahkan server via `npx` di klien AI), pasang file plugin Roblox Studio secara manual:
53
- 1. Ambil file `nvstudio_mcp.rbxmx` dari folder [studio-plugin/nvstudio_mcp.rbxmx](file:///studio-plugin/nvstudio_mcp.rbxmx).
88
+ 1. Ambil file `nvstudio_mcp.rbxmx` dari folder `studio-plugin/nvstudio_mcp.rbxmx`.
54
89
  2. Pindahkan/salin file tersebut ke direktori plugin Roblox di komputer Anda:
55
- - **Windows:** `%LOCALAPPDATA%\Roblox\Plugins` (atau `C:\Users\<Username>\AppData\Local\Roblox\Plugins`)
90
+ - **Windows:** `%LOCALAPPDATA%\Roblox\Plugins`
56
91
  - **macOS:** `~/Documents/ROBLOX/Plugins`
57
- 3. Restart atau buka kembali Roblox Studio. Plugin akan muncul di tab **Plugins**.
92
+ 3. Buka atau buka kembali Roblox Studio. Plugin akan muncul di tab **Plugins**.
58
93
 
59
94
  ---
60
95
 
@@ -75,7 +110,6 @@ Tambahkan konfigurasi berikut ke file `mcp.json` Anda:
75
110
  }
76
111
  }
77
112
  ```
78
- *(AI Anda akan selalu menjalankan versi terbaru dari server Bridge langsung dari NPM!)*
79
113
 
80
114
  ### Klien Berbasis Instalasi Lokal (Antigravity IDE)
81
115
  Jika Anda menggunakan instalasi lokal via installer di `%USERPROFILE%\.nvstudio-mcp`, tambahkan ke `~/.gemini/config/mcp_config.json`:
@@ -94,47 +128,23 @@ Jika Anda menggunakan instalasi lokal via installer di `%USERPROFILE%\.nvstudio-
94
128
 
95
129
  ---
96
130
 
97
- ## ๐Ÿ–ฅ๏ธ Dashboard Visual & Fitur Unggulan v2.1
98
-
99
- - **High-Performance Polling Stream & SSE:** Komunikasi antara Roblox Studio dan Bridge Server menggunakan arsitektur snapshot stream sub-detik yang sangat responsif, stabil, dan bebas latensi.
100
- - **Clean Log Engine:** Log status pada Roblox Studio hanya diperbarui saat ada perubahan status koneksi sebenarnya (bebas dari log spam berulang).
101
- - **Visual Dashboard Real-time:** Buka [http://localhost:3055](http://localhost:3055) di browser Anda untuk melihat monitor antrean perintah, log aktivitas AI, status koneksi Studio, dan statistik eksekusi secara visual.
102
- - **Auto-Detect & Auto-Connect:** Plugin Roblox Studio otomatis menyambung ke server saat aktif dan kembali menunggu (*Waiting*) saat server mati tanpa perlu campur tangan manual.
103
- - **Anti-Zombie Port Handling:** Port `3055` dibersihkan secara otomatis jika terjadi penutupan atau restart IDE secara paksa.
104
-
105
- ---
106
-
107
131
  ## ๐Ÿ—‘๏ธ Cara Uninstall (Mencopot Pemasangan)
108
132
 
109
- Jika Anda ingin berhenti menggunakan `nvstudio-mcp`, Anda dapat membersihkannya dari sistem Anda secara menyeluruh dengan 4 langkah berikut:
110
-
111
- ### 1. Hapus Plugin dari Roblox Studio
112
- Hapus file plugin dari folder lokal Roblox Anda.
113
- - **Windows:** Buka folder `%LOCALAPPDATA%\Roblox\Plugins` (atau `AppData\Local\Roblox\Plugins`) dan hapus file `nvstudio_mcp.rbxmx` (atau `nvstudio_mcp.rbxm`).
114
- - **macOS:** Buka folder `~/Documents/ROBLOX/Plugins` dan hapus file `nvstudio_mcp.rbxmx` (atau `nvstudio_mcp.rbxm`).
115
-
116
- ### 2. Hapus Agen dari Antigravity (Jika Menggunakan AGY)
117
- Hapus *bundle* keterampilan *anti-halusinasi* dari memori AI Anda:
118
- ```bash
119
- rm -rf ~/.gemini/config/plugins/nvstudio-mcp
120
- ```
121
- *(Untuk pengguna Windows PowerShell, Anda bisa menghapus folder `C:\Users\NamaAnda\.gemini\config\plugins\nvstudio-mcp` secara manual).*
122
-
123
- ### 3. Hapus File Instalasi Node.js
124
- Installer `install.sh` sebelumnya mengkloning repositori dan menginstal Node.js di dalam direktori *Home* Anda (secara bawaan di `~/.nvstudio-mcp`). Hapus direktori tersebut:
125
- ```bash
126
- rm -rf ~/.nvstudio-mcp
127
- ```
128
-
129
- ### 4. Hapus Konfigurasi dan Skills dari Editor AI Anda
130
- Jika Anda memasukkan konfigurasi MCP secara otomatis ke Cursor atau secara manual ke Claude Desktop, buka file pengaturan `mcp.json` tersebut dan **hapus blok `"nvstudio-mcp"`** dari dalam objek `mcpServers`.
131
-
132
- **Untuk membersihkan skill bawaan (Universal Skill Installer):**
133
- Anda bisa menghapus manual symlink/folder shortcut (yang bernama awalan `roblox-`) dari dalam folder konfigurasi agen Anda:
134
- - **Cursor / Workspace Lokal**: Hapus isi `.cursor/skills` dan `.cursor/roblox-brain.md`
135
- - **Claude Code**: Hapus dari `~/.claude/skills`
136
- - **Codex / OpenCode**: Hapus dari direktori lokal atau global (`~/.codex/skills`, `~/.opencode/skills`).
133
+ Jika Anda ingin membersihkan `nvstudio-mcp` dari sistem Anda secara menyeluruh:
134
+
135
+ 1. **Hapus Plugin dari Roblox Studio:**
136
+ - Hapus file `nvstudio_mcp.rbxmx` dari `%LOCALAPPDATA%\Roblox\Plugins` (Windows) atau `~/Documents/ROBLOX/Plugins` (macOS).
137
+ 2. **Hapus AI Plugin Antigravity:**
138
+ ```bash
139
+ rm -rf ~/.gemini/config/plugins/nvstudio-mcp
140
+ ```
141
+ 3. **Hapus Direktori Instalasi Node.js:**
142
+ ```bash
143
+ rm -rf ~/.nvstudio-mcp
144
+ ```
145
+ 4. **Hapus Konfigurasi MCP:**
146
+ Hapus blok `"nvstudio-mcp"` dari file konfigurasi `mcp.json` editor AI Anda.
137
147
 
138
148
  ---
139
149
 
140
- **Selamat Menciptakan Game Impian Anda dengan AI! ๐ŸŽฎ๐Ÿค–**
150
+ **Selamat Menciptakan Game Impian Anda dengan AI! ๐ŸŽฎ๐Ÿค–**
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "nvstudio-mcp": {
4
+ "command": "npx",
5
+ "args": ["-y", "@adiholick/nvstudio-mcp@latest"]
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "nvstudio-mcp",
3
+ "version": "1.0.0",
4
+ "description": "Roblox Studio MCP plugin with AI Agent Skills for Claude/Antigravity",
5
+ "author": "Antigravity IDE User"
6
+ }
@@ -0,0 +1,118 @@
1
+ # NVStudio GUI Design Rules & Aesthetic Taste
2
+
3
+ Saat diminta membuat, memperbarui, atau merancang GUI di Roblox Studio (`StarterGui`), Anda WAJIB mematuhi aturan standar NV-Series (`NVMembership`, `NVMusic`, `NVSelfTitle`, `NVServer`, `NVDance`) di bawah ini:
4
+
5
+ ## 1. Instance Structure Rule (Bukan Script Murni)
6
+ - **MUTLAK:** Semua GUI dibuat dalam bentuk **Roblox Instance konkret di dalam `StarterGui`**, BUKAN script Luau murni yang membangun ratusan baris `Instance.new` saat runtime.
7
+ - Bangun hierarki instance menggunakan tool MCP (`create_instance`, `set_properties`, atau generator Luau studio).
8
+ - Script Luau (`LocalScript`) HANYA bertindak sebagai Controller / Listener event, animasi `TweenService`, state, dan komunikasi jaringan.
9
+
10
+ ## 2. Root & MainFrame Standard
11
+ - **ScreenGui Root:**
12
+ - Wajib menyetel `ResetOnSpawn = false`.
13
+ - Wajib menyetel `ZIndexBehavior = Enum.ZIndexBehavior.Sibling`.
14
+ - **MainFrame:**
15
+ - Setiap `ScreenGui` WAJIB memiliki child utama bertipe `Frame` bernama **`MainFrame`** (atau `ContainerFrame` pembungkus `MainFrame`).
16
+ - AnchorPoint standar: `Vector2.new(0.5, 0.5)` dengan Position di tengah layar `UDim2.new(0.5, 0, 0.5, 0)`.
17
+
18
+ ## 3. Frame Layout & Deterministic Order Rules
19
+ - **Wajib UIListLayout & UIPadding:**
20
+ - **Setiap `Frame`** (termasuk `MainFrame`, container, header, sub-frame, list container) WAJIB memiliki `UIListLayout` (dengan `SortOrder = Enum.SortOrder.LayoutOrder`) dan `UIPadding`.
21
+ - **Wajib LayoutOrder pada Setiap Item:**
22
+ - Semua child `GuiObject` di dalam Frame yang menggunakan layout WAJIB disetel properti `LayoutOrder`-nya secara eksplisit (0, 1, 2, 3...) agar tidak ada tumpang tindih acak.
23
+
24
+ ## 4. ScrollingFrame Spacer Rule
25
+ - **Wajib Frame Spacer:**
26
+ - Setiap `ScrollingFrame` WAJIB memiliki child Frame pembatas transparan bernama **`Spacer`** atau **`SPACER`**.
27
+ - Properti Spacer: `BackgroundTransparency = 1`, `BorderSizePixel = 0`, dan `LayoutOrder = 99999` (atau `999999999`).
28
+ - Spacer berfungsi sebagai margin penutup agar elemen list paling bawah tidak terpotong tepi scrolling frame.
29
+
30
+ ## 5. Smart Device Detection & Responsive Scaling
31
+ Setiap Controller GUI wajib menyertakan fungsi cerdas pendeteksi perangkat yang diadopsi dari `NVSelfTitle` dan `NVDance`:
32
+ ```lua
33
+ local function GetDeviceType(vw: number, vh: number, mainFrame: GuiObject): string
34
+ local forceDevice = mainFrame:GetAttribute("ForceDevice")
35
+ if forceDevice and (forceDevice == "Phone" or forceDevice == "Tablet" or forceDevice == "PC" or forceDevice == "Console") then
36
+ return forceDevice :: string
37
+ end
38
+
39
+ if game:GetService("GuiService"):IsTenFootInterface() then
40
+ return "Console"
41
+ end
42
+
43
+ local uis = game:GetService("UserInputService")
44
+ if uis.TouchEnabled and not uis.KeyboardEnabled then
45
+ local smaller = math.min(vw, vh)
46
+ if smaller > 0 and smaller < 550 then
47
+ return "Phone"
48
+ else
49
+ return "Tablet"
50
+ end
51
+ end
52
+
53
+ return "PC"
54
+ end
55
+ ```
56
+ - Skala responsif PC, Mobile (Phone), Tablet, dan Console dihitung secara terpisah agar perubahan skala HP tidak merusak tampilan PC.
57
+ - Berikan listener pada `Workspace.CurrentCamera:GetPropertyChangedSignal("ViewportSize")`.
58
+
59
+ ## 6. NV Dark Modern Taste & Design Tokens
60
+ - **Background Utama (MainFrame):** `Color3.fromRGB(28, 28, 30)` (`#1C1C1E`).
61
+ - **Background Card / Item / Container:** `Color3.fromRGB(25, 25, 25)` (`#191919`).
62
+ - **Background Sub-box / Search / Input:** `Color3.fromRGB(13, 13, 13)` (`#0D0D0D`).
63
+ - **Border / Outline:** Gunakan `UIStroke` dengan `Color = Color3.fromRGB(63, 63, 63)` (`#3F3F3F`), `Thickness = 1`, `ApplyStrokeMode = Enum.ApplyStrokeMode.Border`.
64
+ - **Aksen Aktif & Seleksi:** Cyan `Color3.fromRGB(0, 170, 255)` atau `Color3.fromRGB(0, 255, 255)`.
65
+ - **Corner Radius:** Selalu gunakan `UICorner` (`UDim.new(0, 8)` s/d `UDim.new(0, 10)` untuk Frame/Card, dan `UDim.new(0.2, 0)` atau `UDim.new(0.5, 0)` untuk tombol/chip).
66
+ - **Tipografi:** Wajib menggunakan `Enum.Font.GothamBold` untuk judul/header, `Enum.Font.Gotham` / `GothamMedium` untuk teks isi.
67
+
68
+ ## 7. Interactive Component Rules (Slider, Switch, Segment & Buttons)
69
+ Saat merancang komponen interaktif khusus, patuhi pola NV-Series:
70
+ - **Vertical Slider:**
71
+ - Bangun `SliderFrame` (track vertikal), `Button` (knob draggable), dan `ValueTextTarget`.
72
+ - Hitung ratio dari bawah ke atas: `ratio = 1 - (relativeY / frameH)`.
73
+ - **Horizontal Slider:**
74
+ - Bangun `SliderFrame` (track horizontal), `Fill` (bar progress), `Knob`/`Button`, dan `Trigger` (TextButton transparan full-size).
75
+ - Hitung ratio dari kiri ke kanan: `ratio = relativeX / frameW`.
76
+ - **Switch Button (Toggle):**
77
+ - Gunakan `SwitchContainer` (pill frame capsule), `SwitchFrame` (knob bulat), dan `SwitchButton` transparan overlay.
78
+ - State ON: Container warna Cyan `Color3.fromRGB(0, 170, 255)`, indikator bergeser ke kanan dengan warna putih.
79
+ - State OFF: Container warna gelap `Color3.fromRGB(20, 20, 20)`, indikator bergeser ke kiri dengan warna abu-abu.
80
+ - **Segment Frame (Tab Bar):**
81
+ - Bungkus tab di dalam `SegmentFrame` (background `Color3.fromRGB(25, 25, 25)`, `UICorner` kapsul, `UIListLayout` horizontal).
82
+ - **Active & Inactive Button Styling:**
83
+ - **Tab Segment:** Active = `Color3.fromRGB(55, 55, 60)`, Inactive = `Color3.fromRGB(25, 25, 25)`.
84
+ - **Item Seleksi:** Gunakan `UIStroke` bernama `SelectStroke`: Active = `Color3.fromRGB(0, 255, 255)` (Cyan), Inactive = `Color3.fromRGB(60, 60, 65)`.
85
+ - **Tombol Non-Aktif / Limit:** Set `AutoButtonColor = false` dan teks status (contoh: `"WAIT (Xs)"`, `"OUT OF QUOTA"`).
86
+
87
+ ## 8. NV-Animation Engine & Kinematics (Anti-Hallucination Ground Truth)
88
+ Saat diminta menganimasikan karakter di Roblox Studio, Anda WAJIB mematuhi ground truth berikut:
89
+ - **DILARANG MENGGUNAKAN LOOP RUNTIME**: Animasi karakter tidak boleh dibuat menggunakan script loop `while true do task.wait() ...`. Animasi wajib dibuat sebagai instance resmi `KeyframeSequence` di dalam `AnimSaves` rig (gunakan tool semantic `animate_character` atau `solve_limb_ik`).
90
+ - **SENSITIVITAS SPASI NAMA MOTOR6D**:
91
+ - Karakter R15: Menggunakan CamelCase TANPA SPASI (`LeftShoulder`, `LeftElbow`, `LeftWrist`, `LeftHip`, `LeftKnee`, `LeftAnkle`, `Waist`, `Neck`, `Root`).
92
+ - Karakter R6: WAJIB MENGGUNAKAN SPASI (`Left Shoulder`, `Right Shoulder`, `Left Hip`, `Right Hip`, `Neck`, `RootJoint`).
93
+ - **BATAS SUDUT ANATOMIS AMAN**:
94
+ - Siku (`LeftElbow`, `RightElbow`) dan Lutut (`LeftKnee`, `RightKnee`) adalah sendi engsel (hinge joint). Dilarang memutar sumbu Roll/Yaw. Sudut tekukan Pitch hanya $0^\circ \dots 145^\circ$ untuk siku dan $0^\circ \dots 135^\circ$ untuk lutut. Dilarang menekuk siku atau lutut ke arah berlawanan (dislokasi).
95
+ - Torso/Waist pitch dibatasi $-25^\circ \dots 35^\circ$, twist yaw $\pm 45^\circ$.
96
+ - **PRINSIP GERAKAN HALUS (Disney 12 Principles)**:
97
+ - Setiap gerakan wajib memiliki fase ancang-ancang (*Anticipation*), interpolasi pelambatan (*QuadInOut* atau *CubicInOut*), dan peredaman akhir (*Follow-Through*).
98
+
99
+ ## 9. NV-VFX Serializer & Cross-Project Database Protocols
100
+ Saat memindai, merekonstruksi, atau menerapkan efek visual antar-proyek:
101
+ - **ATTACHMENT HARUS VALID**: Properti `Attachment0` dan `Attachment1` pada `Beam` atau `Trail` HANYA BOLEH menunjuk ke instance bertipe `Attachment`. Dilarang keras menunjuk ke Part atau Model.
102
+ - **ATURAN URUTAN KEYPOINT**: Setiap `ColorSequence` dan `NumberSequence` WAJIB memiliki keypoint awal pada $t = 0.0$ dan keypoint akhir pada $t = 1.0$.
103
+ - **ALUR KERJA LINTAS-PROYEK**:
104
+ - Gunakan tool `scan_vfx` pada Project A untuk mengonversi partikel, beam, trail, dan light menjadi tabel data murni yang disimpan secara persisten di database MCP.
105
+ - Gunakan tool `apply_vfx` pada Project B untuk menginstansiasi efek dari database ke target objek dengan parameter `scale` opsional.
106
+ - Dokumentasi referensi lengkap: lihat `docs/NV_ANIMATION_AND_VFX_GUIDE.md`.
107
+
108
+ ## 10. NV-Rig Engine & Joint Kinematics Protocols (Anti-Hallucination Ground Truth)
109
+ Saat memeriksa, membuat, atau memodifikasi sendi karakter (`Motor6D` / `Weld`):
110
+ - **PERSAMAAN KESEIMBANGAN SAMBUNGAN**: Hubungan spasial sendi diatur oleh `Part0.CFrame * C0 = Part1.CFrame * C1`.
111
+ - **HUKUM NON-DISLOKASI PIVOT**: Saat menggeser atau memutar poros sendi, DILARANG hanya mengubah `C0` sepihak karena akan mendislokasi posisi fisik `Part1`. Nilai `C1` WAJIB dikompensasi secara simultan: `diff = C0_old:ToObjectSpace(C0_new); C1_new = C1_old * diff` (gunakan tool `edit_rig_joint`).
112
+ - **ATURAN WAJIB UNANCHOR**: Seluruh part anak (`Part1`) yang dihubungkan dengan `Motor6D` atau `Weld` WAJIB disetel `Anchored = false`. Part yang berstatus anchored tidak akan dapat bergerak dalam simulasi fisika atau animasi.
113
+ - **URUTAN KERJA RIGGING SEBELUM ANIMASI**: Dilarang memanggil `animate_character` pada model yang belum memiliki hierarki sendi valid. Selalu jalankan `inspect_rig` untuk diagnosa atau `auto_rig` untuk membuat kerangka standar.
114
+ - **PENGELASAN ASSEMBLY SENJATA/PROP**: Gunakan `weld_assembly` untuk menyatukan seluruh komponen prop/senjata secara kaku ke part pegangan sebelum ditautkan ke karakter.
115
+ - **DOKUMENTASI REFERENSI LENGKAP**: lihat `docs/NV_RIG_ENGINE_GUIDE.md`.
116
+
117
+
118
+
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: nvstudio-animation-vfx
3
+ description: Panduan AI Agent untuk membuat animasi karakter halus (Walk, Slash, Punch, Idle, Custom IK) menggunakan NV-Animation Engine dan mengelola efek visual lintas-proyek dengan NV-VFX Database di Roblox Studio.
4
+ ---
5
+
6
+ # NVStudio Animation Engine & VFX Subsystem Guide
7
+
8
+ Panduan resmi untuk AI Agent dalam memanfaatkan kemampuan pembuatan animasi karakter manusiawi (*Human-like Motion Synthesis*) dan sistem efek visual portabel lintas-proyek.
9
+
10
+ ---
11
+
12
+ ## 1. Pembuatan Animasi Karakter (`animate_character`)
13
+
14
+ Gunakan tool `animate_character` untuk menghasilkan animasi yang halus (*smooth*) dengan kurva interpolasi Bezier, pelambatan *easing*, dan *LimbIK* analitis tanpa perlu menghitung sudut CFrame secara manual.
15
+
16
+ ### Parameter Utama:
17
+ - `target`: Path ke Model karakter rig R6 atau R15 di Studio (contoh: `"Workspace.Dummy"`).
18
+ - `action`: Jenis gerakan yang ingin disintesis:
19
+ - `"walk_cycle"`: Siklus berjalan seimbang dengan pergeseran berat badan dan ayunan tangan berlawanan.
20
+ - `"melee_slash"`: Serangan tebasan pedang dengan ancang-ancang (*wind-up*), *acceleration snap*, dan *follow-through*.
21
+ - `"punch"`: Pukulan terarah dengan pemanfaatan LimbIK ke sasaran dan putaran bahu.
22
+ - `"idle_breath"`: Pernapasan lembut dengan ritme naik-turun dada dan sedikit kemiringan kepala.
23
+ - `"custom"`: Pose kunci kustom yang disediakan di parameter `key_poses`.
24
+ - `parameters` (opsional):
25
+ - `duration`: Durasi animasi dalam detik (contoh: `1.0`).
26
+ - `intensity`: Skala intensitas gerakan (contoh: `1.2`).
27
+ - `easing`: Jenis kurva interpolasi (`"QuadInOut"`, `"CubicInOut"`, `"BackOut"`, `"ElasticOut"`, dll).
28
+ - `loop`: Boolean apakah animasi berulang (default: `true` untuk walk/idle, `false` untuk serangan).
29
+ - `clipName`: Nama klip animasi di `AnimSaves`.
30
+
31
+ ### Contoh Pemanggilan Tool:
32
+ ```json
33
+ {
34
+ "target": "Workspace.Dummy",
35
+ "action": "melee_slash",
36
+ "parameters": {
37
+ "duration": 0.8,
38
+ "intensity": 1.2,
39
+ "easing": "CubicInOut",
40
+ "loop": false,
41
+ "clipName": "KatanaSlash"
42
+ }
43
+ }
44
+ ```
45
+
46
+ Hasilnya akan secara otomatis terkompilasi menjadi `KeyframeSequence` resmi di dalam folder `AnimSaves` karakter pada Studio.
47
+
48
+ ---
49
+
50
+ ## 2. Kalkulasi Kinematika Lengan / Kaki (`solve_limb_ik`)
51
+
52
+ Gunakan tool `solve_limb_ik` untuk mengarahkan telapak tangan atau kaki karakter ke target koordinat 3D secara instan menggunakan solver analitis sudut tertutup $O(1)$ (Hukum Cosinus).
53
+
54
+ ### Parameter:
55
+ - `target`: Path ke karakter rig (contoh: `"Workspace.Dummy"`).
56
+ - `limb`: Anggota tubuh (`"LeftArm"`, `"RightArm"`, `"LeftLeg"`, atau `"RightLeg"`).
57
+ - `goal`: Array posisi 3D `[X, Y, Z]` di world space.
58
+ - `pole`: Array arah tekukan siku/lutut `[X, Y, Z]` (opsional).
59
+ - `apply_to_rig`: Boolean apakah langsung diterapkan ke sendi karakter di Studio (default: `true`).
60
+
61
+ ---
62
+
63
+ ## 3. Scrubbing Timeline & Preview VFX (`scrub_timeline`)
64
+
65
+ Gunakan tool `scrub_timeline` untuk menggeser playhead waktu animasi dan memicu semburan (burst) partikel VFX pada timestamp tertentu langsung di Viewport Studio tanpa perlu memutar animasi secara penuh:
66
+
67
+ ### Parameter:
68
+ - `target`: Path model karakter rig atau folder VFX (contoh: `"Workspace.Dummy"`).
69
+ - `time`: Posisi timestamp waktu dalam detik (contoh: `0.35`).
70
+ - `action`: Aksi animasi yang di-scrub (`"melee_slash"`, `"walk_cycle"`, `"punch"`, `"idle_breath"`).
71
+ - `emit_vfx`: Boolean apakah memicu semburan partikel pada frame waktu ini (default: `true`).
72
+ - `emit_count`: Jumlah partikel yang disemburkan (default: `20`).
73
+
74
+ ---
75
+
76
+ ## 4. Modifikasi Properti Partikel & VFX (`set_properties` / `batch_set_properties`)
77
+
78
+ Gunakan `set_properties` untuk mengubah properti partikel VFX secara granular, termasuk `ColorSequence`, `NumberSequence`, `NumberRange`, dan `Rate`:
79
+ ```json
80
+ {
81
+ "target": "Workspace.FlameBurst.ParticleEmitter",
82
+ "properties": {
83
+ "Rate": 50,
84
+ "Speed": [15, 30],
85
+ "Size": [
86
+ [0, 1.5, 0],
87
+ [1, 0.2, 0]
88
+ ],
89
+ "Color": [
90
+ [0, [1, 0.8, 0.2]],
91
+ [1, [0.8, 0.1, 0]]
92
+ ]
93
+ }
94
+ }
95
+ ```
96
+
97
+ ---
98
+
99
+ ## 5. Pindai Efek Visual Lintas-Proyek (`scan_vfx`)
100
+
101
+ Gunakan tool `scan_vfx` pada Project A untuk mengekstrak seluruh hierarki partikel, beam, trail, dan light menjadi tabel data murni yang disimpan secara persisten di database MCP.
102
+
103
+ ### Parameter:
104
+ - `target`: Path objek di Studio (contoh: `"Workspace.FireSpell"`).
105
+ - `name`: Nama efek visual di database (contoh: `"FlameBurst_Ultimate"`).
106
+ - `category`: Kategori efek (`"Slash"`, `"Explosion"`, `"Aura"`, `"Projectile"`, `"Magic"`, `"Impact"`, `"Beam"`, atau `"Ambient"`).
107
+ - `tags`: Array kata kunci (contoh: `["fire", "orange", "anime"]`).
108
+
109
+ ---
110
+
111
+ ## 4. Terapkan Efek Visual di Proyek Lain (`apply_vfx`)
112
+
113
+ Buka proyek baru (Project B), lalu panggil `apply_vfx` untuk menginstansiasi efek visual yang tersimpan dengan fidelitas 100%.
114
+
115
+ ### Parameter:
116
+ - `vfx_id`: ID efek visual dari database (contoh: `"preset-cyan-slash"`).
117
+ - `target`: Path objek tujuan di Studio (contoh: `"Workspace.Boss.RightHand"`).
118
+ - `scale`: Skala ukuran efek (contoh: `1.5` untuk memperbesar 50%, `0.8` untuk mengecilkan 20%).
119
+ - `enabled`: Boolean opsional untuk menyalakan/mematikan seluruh emitter saat pertama dibuat.
120
+
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: nvstudio-assets-terrain-guide
3
+ description: Panduan untuk memasukkan aset aman, audit keamanan backdoor, dan membuat terrain di Roblox Studio.
4
+ ---
5
+ # nvstudio-assets-terrain-guide
6
+
7
+ ## Alur Kerja Aman Creator Store & Asset Security
8
+
9
+ ### 1. Pratinjau & Audit Keamanan (`preview_asset`)
10
+ Sebelum memasukkan model publik dari Creator Store, **selalu jalankan `preview_asset` terlebih dahulu**:
11
+ - Memuat aset di lingkungan terisolasi sementara untuk memeriksa struktur hierarki dan memindai skrip berbahaya (backdoor `require`, obfuscation byte/hex, webhook discord, loadstring, atau off-screen hidden code).
12
+ - Model sementara akan langsung dihapus dari memori secara otomatis.
13
+
14
+ ### 2. Memasukkan Aset Secara Aman (`insert_asset`)
15
+ - **Sanitasi Skrip Otomatis (`strip_scripts = true`):**
16
+ - Secara default bernilai `true`. Seluruh skrip di dalam model 3D/bangunan/furnitur akan otomatis dihapus sebelum model diletakkan di `Workspace`.
17
+ - Jika Anda memasukkan kit sistem yang terpercaya dan memang membutuhkan skrip untuk berfungsi, setel `strip_scripts = false`.
18
+ - **Target Parent:** Tentukan target tujuan (default: `game.Workspace`).
19
+
20
+ ### 3. Audit Keamanan Tempat Kerja (`scan_security`)
21
+ - Gunakan `scan_security` untuk memindai model, folder, atau seluruh `Workspace` yang sudah ada di game untuk mendeteksi virus lama atau infeksi terselubung.
22
+ - Opsi `clean_threats = true` dapat digunakan untuk secara otomatis memusnahkan skrip berbahaya yang terdeteksi.
23
+
24
+ ## Aturan generate_terrain
25
+ 1. Suplai parameter berupa string JSON ke argumen `data`.
26
+ 2. Parameter yang diperlukan: `Size` (array angka), `Position` (array angka), dan `Material` (string valid `Enum.Material` seperti "Grass", "Water", "Sand", dsb).
27
+ Contoh payload JSON: `{"Size": [100, 10, 100], "Position": [0, -5, 0], "Material": "Grass"}`