Compare commits

...

4 Commits

Author SHA1 Message Date
Infuseting b8228a73be feat(skill): add local Blender asset workflow 2026-10-13 20:27:21 +02:00
Infuseting c0b6256a44 docs: document template setup and dependencies 2026-10-13 20:27:01 +02:00
Infuseting 5a7f646a8b chore(mcp): configure Blender and Roblox Studio clients 2026-10-13 20:26:40 +02:00
Infuseting 3a850924ca feat(template): initialize Roblox TypeScript tooling 2026-10-13 20:26:21 +02:00
32 changed files with 3065 additions and 41 deletions

16
.agents/mcp_config.json Normal file
View File

@ -0,0 +1,16 @@
{
"mcpServers": {
"roblox_studio": {
"command": "cmd.exe",
"args": ["/c", "%LOCALAPPDATA%\\Roblox\\mcp.bat"]
},
"blender": {
"command": "uvx",
"args": [
"--from",
"git+https://projects.blender.org/lab/blender_mcp.git@v1.0.3#subdirectory=mcp",
"blender-mcp"
]
}
}
}

View File

@ -0,0 +1,28 @@
---
name: blender-game-asset
description: Créer ou modifier avec Blender un modèle 3D texturé pour ce jeu Roblox et ranger les livrables dans assets/. À utiliser pour les armes, personnages, décors, objets et leurs textures ; les scripts de fabrication ne sont pas conservés.
---
# Asset 3D Blender pour Roblox
Produire un asset utilisable dans le jeu, avec une source Blender modifiable, un export adapté à Roblox Studio et les textures nécessaires. Adapter le style, les dimensions et la complexité à la demande et aux assets déjà présents.
## Rangement
- Modèle et source : `assets/models/<nom>/<nom>.blend` et `assets/models/<nom>/<nom>.fbx`. Utiliser un nom court en kebab-case et garder les fichiers liés à un même modèle dans ce dossier.
- Textures finales : `assets/textures/<nom>/`, par exemple `<nom>_albedo.png`. Garder aussi une copie empaquetée dans le `.blend` pour que la source reste autonome.
- Si la demande comprend des effets, sons, animations ou images d'interface, les ranger respectivement dans `assets/vfx/`, `assets/sfx/`, `assets/animations/` ou `assets/ui/`. Ne pas créer ces éléments par défaut pour un simple modèle 3D.
- Un export `.gltf` et son `.bin` peuvent accompagner le `.fbx` si utiles ; vérifier que leurs chemins de texture fonctionnent depuis le rangement final. Roblox Studio accepte `.fbx`, `.gltf` et `.obj` pour les maillages selon la [documentation de l'Importer](https://create.roblox.com/docs/studio/importer).
## Création
1. Examiner les références fournies, les assets voisins et la place prévue dans le jeu. Sans cahier des charges détaillé, choisir une échelle et un niveau de détail raisonnables pour Roblox et expliquer les choix importants.
2. Créer et texturer dans Blender. Utiliser le MCP Blender s'il est connecté et adapté à l'opération, ou l'exécutable Blender avec `bpy` pour une génération reproductible. Ne pas présenter le MCP comme utilisé si le travail est passé par la ligne de commande.
3. Si du code temporaire sert à construire le modèle, dessiner la texture, exporter ou valider, le créer dans un répertoire temporaire hors du dépôt. Ne placer aucun `generate.py`, script de texture, notebook ou autre code de fabrication dans `assets/` ou dans ce skill. Supprimer uniquement ces fichiers temporaires créés pour la tâche une fois les livrables vérifiés. Préserver tout script préexistant appartenant à l'utilisateur.
4. Conserver le `.blend`, l'export et les textures finales. Une image d'aperçu est utile pour la revue ; la ranger avec le modèle si elle est créée. Nettoyer seulement les sauvegardes et rendus intermédiaires issus de la tâche.
## Vérification et livraison
- Ouvrir ou réimporter l'export dans Blender ; vérifier géométrie, UV, orientation, échelle, matériau et présence effective des textures. Inspecter visuellement un rendu ou une capture du modèle final.
- Si Roblox Studio est disponible, tester l'import dans Studio. Un contrôle Blender seul ne prouve pas que l'asset est utilisable dans Studio ; indiquer clairement ce qui a été testé. Ne pas publier ou téléverser sur un compte Roblox sans demande explicite.
- Donner les liens vers la source, l'export, les textures et l'aperçu. Préciser si un MCP a été utilisé et confirmer que les scripts temporaires de fabrication n'ont pas été conservés.

7
.codex/config.toml Normal file
View File

@ -0,0 +1,7 @@
[mcp_servers.roblox_studio]
command = "cmd.exe"
args = ["/c", "%LOCALAPPDATA%\\Roblox\\mcp.bat"]
[mcp_servers.blender]
command = "uvx"
args = ["--from", "git+https://projects.blender.org/lab/blender_mcp.git@v1.0.3#subdirectory=mcp", "blender-mcp"]

16
.cursor/mcp.json Normal file
View File

@ -0,0 +1,16 @@
{
"mcpServers": {
"roblox_studio": {
"command": "cmd.exe",
"args": ["/c", "%LOCALAPPDATA%\\Roblox\\mcp.bat"]
},
"blender": {
"command": "uvx",
"args": [
"--from",
"git+https://projects.blender.org/lab/blender_mcp.git@v1.0.3#subdirectory=mcp",
"blender-mcp"
]
}
}
}

11
.gitignore vendored Normal file
View File

@ -0,0 +1,11 @@
node_modules/
out/
include/
build.rbxlx
game.rbxl
.rbxts-build/
*.rbxl.lock
*.rbxlx.lock
.env
.env.*
!.env.example

1
.husky/pre-commit Normal file
View File

@ -0,0 +1 @@
pnpm lint

16
.mcp.json Normal file
View File

@ -0,0 +1,16 @@
{
"mcpServers": {
"roblox_studio": {
"command": "cmd.exe",
"args": ["/c", "%LOCALAPPDATA%\\Roblox\\mcp.bat"]
},
"blender": {
"command": "uvx",
"args": [
"--from",
"git+https://projects.blender.org/lab/blender_mcp.git@v1.0.3#subdirectory=mcp",
"blender-mcp"
]
}
}
}

2
.npmrc Normal file
View File

@ -0,0 +1,2 @@
node-linker=hoisted
shamefully-hoist=true

1
.prettierignore Normal file
View File

@ -0,0 +1 @@
assets/**/*.gltf

4
.prettierrc.json Normal file
View File

@ -0,0 +1,4 @@
{
"printWidth": 100,
"trailingComma": "all"
}

20
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,20 @@
{
"files.exclude": {
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/.jj": true,
"**/.DS_Store": true,
"**/Thumbs.db": true,
"**/node_modules": true,
"**/out": true,
"**/include": true,
"**/build.rbxlx": true,
"**/game.rbxl": true,
"**/.rbxts-build": true,
"**/*.rbxl.lock": true,
"**/*.rbxlx.lock": true,
"**/.env": true,
"**/.env.*": true
}
}

View File

0
assets/models/.gitkeep Normal file
View File

0
assets/sfx/.gitkeep Normal file
View File

0
assets/textures/.gitkeep Normal file
View File

0
assets/ui/.gitkeep Normal file
View File

0
assets/vfx/.gitkeep Normal file
View File

31
default.project.json Normal file
View File

@ -0,0 +1,31 @@
{
"name": "CrownStudioTemplate",
"globIgnorePaths": ["**/package.json", "**/tsconfig.json"],
"tree": {
"$className": "DataModel",
"ServerScriptService": {
"$className": "ServerScriptService",
"TS": { "$path": "out/server" }
},
"ReplicatedStorage": {
"$className": "ReplicatedStorage",
"rbxts_include": {
"$path": "include",
"node_modules": {
"$className": "Folder",
"@rbxts": { "$path": "node_modules/@rbxts" },
"@rbxts-js": { "$path": "node_modules/@rbxts-js" },
"@flamework": { "$path": "node_modules/@flamework" }
}
},
"TS": { "$path": "out/shared" }
},
"StarterPlayer": {
"$className": "StarterPlayer",
"StarterPlayerScripts": {
"$className": "StarterPlayerScripts",
"TS": { "$path": "out/client" }
}
}
}
}

14
eslint.config.mjs Normal file
View File

@ -0,0 +1,14 @@
import js from "@eslint/js";
import prettier from "eslint-config-prettier";
import tseslint from "typescript-eslint";
export default tseslint.config(
{ ignores: ["node_modules/**", "out/**", "include/**", "build.rbxlx"] },
js.configs.recommended,
...tseslint.configs.recommended,
{
files: ["src/**/*.ts", "src/**/*.tsx"],
rules: { "no-undef": "off" },
},
prettier,
);

8
flamework.build Normal file
View File

@ -0,0 +1,8 @@
{
"version": 1,
"flameworkVersion": "1.3.2",
"identifiers": {
"crownstudio-roblox-ts-template:out/server/services/startup-service@StartupService": "server/services/startup-service@StartupService"
},
"metadata": {}
}

4
mise.toml Normal file
View File

@ -0,0 +1,4 @@
[tools]
node = "24.16.0"
pnpm = "11.21.0"
uv = "0.13.0"

72
package.json Normal file
View File

@ -0,0 +1,72 @@
{
"name": "crownstudio-roblox-ts-template",
"version": "0.1.0",
"private": true,
"packageManager": "pnpm@11.21.0",
"engines": {
"node": ">=24"
},
"scripts": {
"compile": "rbxtsc",
"watch": "rbxts-build watch",
"build": "pnpm compile && pnpm build:rojo",
"build:rojo": "rbxts-build build",
"start": "rbxts-build start",
"open": "rbxts-build open",
"stop": "rbxts-build stop",
"serve": "rojo serve default.project.json",
"lint": "eslint .",
"format:check": "prettier --check .",
"format": "prettier --write .",
"check": "pnpm lint && pnpm compile",
"prepare": "husky"
},
"rbxts-build": {
"names": {
"build": "build:rojo"
},
"rojoBuildArgs": [
"default.project.json",
"--output",
"game.rbxl"
]
},
"dependencies": {
"@flamework/components": "1.3.2",
"@flamework/core": "1.3.2",
"@flamework/networking": "1.3.2",
"@rbxts-js/roblox-lua-promise": "3.5.0-ts.2",
"@rbxts/cmdr": "1.12.1",
"@rbxts/gamejoy": "1.1.4",
"@rbxts/lapis": "0.3.8",
"@rbxts/log": "0.6.3",
"@rbxts/net": "3.0.10",
"@rbxts/object-cache": "1.4.5",
"@rbxts/react": "17.3.13-ts.1",
"@rbxts/react-roblox": "17.3.13-ts.1",
"@rbxts/reflex": "4.3.1",
"@rbxts/ripple": "0.10.2",
"@rbxts/services": "1.6.0",
"@rbxts/sift": "0.0.11",
"@rbxts/sound-manager": "2.3.4",
"@rbxts/t": "3.2.1",
"@rbxts/timer": "0.0.9",
"@rbxts/trove": "1.3.0",
"@rbxts/tween": "1.0.5",
"@rbxts/ui-labs": "2.4.2"
},
"devDependencies": {
"@eslint/js": "10.0.1",
"@rbxts/compiler-types": "3.0.0-types.0",
"@rbxts/types": "1.0.957",
"eslint": "10.12.0",
"eslint-config-prettier": "10.1.8",
"husky": "9.1.7",
"prettier": "3.9.10",
"rbxts-build": "2.6.0",
"rbxts-transformer-flamework": "1.3.2",
"roblox-ts": "3.0.0",
"typescript": "5.5.3",
"typescript-eslint": "8.71.2"
}
}

2650
pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

12
pnpm-workspace.yaml Normal file
View File

@ -0,0 +1,12 @@
minimumReleaseAgeExclude:
- "@typescript-eslint/eslint-plugin@8.71.2"
- "@typescript-eslint/parser@8.71.2"
- "@typescript-eslint/project-service@8.71.2"
- "@typescript-eslint/scope-manager@8.71.2"
- "@typescript-eslint/tsconfig-utils@8.71.2"
- "@typescript-eslint/type-utils@8.71.2"
- "@typescript-eslint/types@8.71.2"
- "@typescript-eslint/typescript-estree@8.71.2"
- "@typescript-eslint/utils@8.71.2"
- "@typescript-eslint/visitor-keys@8.71.2"
- typescript-eslint@8.71.2

116
readme.md
View File

@ -1,48 +1,82 @@
# Roblox Libs
# CrownStudio Roblox TS Template
@flamework/core
@flamework/components
@flamework/networking
@rbxts/ripple
@rbxts/react-roblox
@rbxts/services
@rbxts/react
@rbxts/reflex
@rbxts/lapis
@rbxts/trove
@rbxts/log
@csqrl/sift
@rbxts/t
@rbxts/cmdr
@rbxts/sound
@rbxts/gamejoy
@rbxts/tween
@rbxts/part-cache
@rbxts/timer
@rbxts/cross-server
@rbxts/promise
@rbxts/ui-labs
Template Roblox TypeScript avec Flamework, Rojo et une sélection de bibliothèques prêtes à importer. Les versions exactes sont dans [`package.json`](package.json), [`pnpm-lock.yaml`](pnpm-lock.yaml), [`rokit.toml`](rokit.toml) et [`mise.toml`](mise.toml). Pour un agent, ces fichiers et les statuts ci-dessous sont la source de vérité : une référence dans ce README ne signifie pas qu'une fonction de jeu est déjà implémentée.
# Roblox Tools
## Démarrage
Asphalt
Darklua
Mantle
Mise
Rojo
rbxts-build
roblox-ts
Prérequis : [Roblox Studio](https://create.roblox.com/docs/studio/setup), [mise](https://mise.jdx.dev/getting-started.html) et [Rokit](https://github.com/rojo-rbx/rokit#readme). Sous Windows, rouvrir le terminal après leur installation pour actualiser `PATH`.
# Development Tools
```powershell
mise install
rokit install
pnpm install --frozen-lockfile
pnpm check
pnpm build
pnpm serve
```
ESLint config
ESLint
Husky
Renovate
pnpm
`mise` épingle Node.js 24.16.0, pnpm 11.21.0 et uv 0.13.0. `rokit` installe Rojo 7.7.1, Asphalt 2.0.2, darklua 0.19.0 et Mantle 0.11.18. `pnpm build` compile le TypeScript et crée `game.rbxl` avec Rojo. Ouvrir ce fichier dans Studio, ou utiliser `pnpm start` pour le flux [`rbxts-build`](https://github.com/osyrisrblx/rbxts-build#readme). `pnpm watch` lance la compilation et le serveur Rojo en continu. Le projet Rojo est [`default.project.json`](default.project.json) et les entrées client/serveur sont sous [`src`](src/).
# MCP
Autres commandes : `pnpm lint`, `pnpm format:check` et `pnpm format`. [Husky](https://typicode.github.io/husky/) installe un hook local `pre-commit` qui exécute `pnpm lint`. [Renovate](https://docs.renovatebot.com/) lit [`renovate.json`](renovate.json) une fois son application activée sur le dépôt distant.
https://www.blender.org/lab/mcp-server/
https://create.roblox.com/docs/studio/mcp
https://create.roblox.com/docs/fr-fr/cloud/reference/features/creator-store
## Bibliothèques installées
Chaque paquet de cette section est une dépendance directe. Les liens mènent à la documentation du projet ou à son README actuel ; les versions exécutables sont épinglées dans le lockfile. Les paquets ne sont pas automatiquement utilisés par le code de démarrage.
- `@flamework/core` ([documentation](https://flamework.fireboltofdeath.dev/docs/introduction/)) — services, contrôleurs et injection ; le service de démarrage en donne un exemple.
- `@flamework/components` ([documentation](https://flamework.fireboltofdeath.dev/docs/additional-modules/components/creating-a-component/)) — composants d'instances.
- `@flamework/networking` ([documentation](https://flamework.fireboltofdeath.dev/docs/additional-modules/networking/introduction/)) — réseau typé.
- `@rbxts/react` ([documentation React Lua](https://github.com/jsdotlua/react-lua/blob/main/docs/api-reference/react.md), [liaison roblox-ts](https://github.com/littensy/rbxts-react#readme)) — interface React.
- `@rbxts/react-roblox` ([documentation ReactRoblox](https://github.com/jsdotlua/react-lua/blob/main/docs/api-reference/react-roblox.md), [liaison roblox-ts](https://github.com/littensy/rbxts-react#readme)) — rendu React dans Roblox.
- `@rbxts/reflex` ([documentation](https://littensy.github.io/reflex/docs/)) — état applicatif.
- `@rbxts/ripple` ([README et API](https://github.com/littensy/ripple#readme)) — animations.
- `@rbxts/services` ([README](https://github.com/roblox-ts/services#readme)) — accès typé aux services Roblox.
- `@rbxts/lapis` ([documentation](https://github.com/nezuo/lapis/tree/master/docs)) — persistance de données.
- `@rbxts/trove` ([README et API](https://github.com/Sleitnick/rbxts-trove#readme)) — nettoyage des ressources.
- `@rbxts/log` ([README](https://github.com/roblox-aurora/rbx-log#readme)) — journalisation.
- `@rbxts/sift` ([documentation](https://cxmeel.github.io/sift/)) — collections immuables ; l'ancien libellé `@csqrl/sift` n'est pas le nom npm utilisé ici.
- `@rbxts/t` ([README et API](https://github.com/osyrisrblx/t#readme)) — validation de valeurs à l'exécution.
- `@rbxts/cmdr` ([documentation](https://eryn.io/Cmdr/), [types roblox-ts](https://github.com/sasial-dev/Cmdr#readme)) — commandes de développement.
- `@rbxts/gamejoy` ([README](https://github.com/Rimuy/GameJoy#readme)) — contrôles de jeu.
- `@rbxts/tween` ([README et API](https://github.com/Validark/Roblox-TS-Libraries/blob/master/tween/README.md)) — interpolations.
- `@rbxts/timer` ([README](https://github.com/Bytebit-Org/roblox-Timer#readme)) — temporisation.
- `@rbxts/ui-labs` ([documentation](https://ui-labs.luau.page/docs/getstarted.html)) — prévisualisation d'interface.
- `@rbxts/sound-manager` ([documentation du projet](https://github.com/xelnae-r/Sound-Manager#readme)) — gestion des sons ; le README de la version 2.3.4 est dans `node_modules/@rbxts/sound-manager/README.md`.
- `@rbxts/object-cache` ([documentation amont](https://github.com/Pyseph/ObjectCache#readme)) — cache de pièces/objets ; le README de la version 1.4.5 est dans `node_modules/@rbxts/object-cache/README.md`.
- `@rbxts/net` ([README](https://github.com/roblox-aurora/rbx-net#readme)) — contient `ExperienceBroadcastEvent` pour les messages entre serveurs.
- `@rbxts-js/roblox-lua-promise` ([README](https://github.com/evaera/roblox-lua-promise#readme)) — implémentation de promesses ; les types globaux `Promise` sont fournis par `@rbxts/compiler-types`.
## Outils initialisés
- [roblox-ts](https://roblox-ts.com/docs/) : `roblox-ts`, `@rbxts/types`, `@rbxts/compiler-types` et le transformer Flamework sont configurés dans [`tsconfig.json`](tsconfig.json).
- [Rojo](https://rojo.space/docs/) : manifeste [`default.project.json`](default.project.json), `pnpm build` et `pnpm serve`.
- [rbxts-build](https://github.com/osyrisrblx/rbxts-build#readme) : commandes `pnpm start`, `pnpm watch`, `pnpm open`, `pnpm stop` et construction `game.rbxl`.
- [Asphalt](https://github.com/jackTabsCode/asphalt#readme) : binaire épinglé avec Rokit ; aucun asset à synchroniser dans ce template vierge.
- [darklua](https://darklua.com/docs/) : binaire épinglé avec Rokit ; aucune transformation de Lua requise pour le démarrage.
- [Mantle](https://mantledeploy.vercel.app/) : binaire épinglé avec Rokit ; le déploiement exige une expérience Roblox et des identifiants propres au projet. Son [dépôt](https://github.com/blake-mealey/mantle#readme) indique qu'il n'est plus maintenu.
- [mise](https://mise.jdx.dev/) et [pnpm](https://pnpm.io/) : versions du runtime et gestion reproductible des dépendances.
- [ESLint](https://eslint.org/docs/latest/) : configuration flat dans [`eslint.config.mjs`](eslint.config.mjs), avec [typescript-eslint](https://typescript-eslint.io/) et [Prettier](https://prettier.io/docs/).
- [Husky](https://typicode.github.io/husky/) : vérification Git locale.
- [Renovate](https://docs.renovatebot.com/) : règles de mise à jour des dépendances ; l'activation du bot sur l'hébergeur reste à faire.
## MCP : Codex, Claude, Cursor et Antigravity
Les deux serveurs sont définis dans les fichiers de projet suivants. Chaque client lit son propre fichier, et les processus sont lancés à la demande :
| Client | Configuration dans ce dépôt | Référence du client |
| ----------- | ---------------------------------------------------- | ------------------------------------------------------------------ |
| Codex | [`.codex/config.toml`](.codex/config.toml) | [MCP Codex](https://learn.chatgpt.com/docs/extend/mcp?surface=cli) |
| Claude Code | [`.mcp.json`](.mcp.json) | [MCP Claude Code](https://code.claude.com/docs/en/mcp) |
| Cursor | [`.cursor/mcp.json`](.cursor/mcp.json) | [MCP Cursor](https://prod.cursor.com/help/customization/mcp) |
| Antigravity | [`.agents/mcp_config.json`](.agents/mcp_config.json) | [MCP Antigravity](https://www.antigravity.google/docs/mcp) |
- **Roblox Studio MCP** ([documentation officielle](https://create.roblox.com/docs/studio/mcp)) : les configurations lancent `%LOCALAPPDATA%\Roblox\mcp.bat` via `cmd.exe`. Ce lanceur est fourni par Studio sous Windows. Démarrer Studio, activer son serveur MCP dans les paramètres Assistant/MCP, puis redémarrer le client d'agent si nécessaire. Le fichier `mcp.bat` est présent sur la machine d'initialisation ; une connexion à une session Studio ouverte reste à vérifier.
- **Blender MCP** ([documentation officielle](https://www.blender.org/lab/mcp-server/)) : les configurations lancent `blender-mcp` depuis le dépôt officiel Blender Lab, épinglé sur `v1.0.3`, au moyen de `uvx`. Blender 5.1+ et l'extension MCP doivent être installés et actifs. Sur la machine d'initialisation, Blender 5.2.2 LTS et l'extension 1.0.3 ont été installés ; le serveur se lance et le pont de l'extension a été vu à l'écoute sur `localhost:9876`. Un appel MCP complet depuis un client reste à vérifier. Rouvrir les clients après installation de `uvx` pour qu'ils héritent du nouveau `PATH`.
Le serveur Blender peut exécuter du code Python dans Blender : utiliser uniquement des projets de confiance. Les configurations n'incluent aucun secret.
L'[API Cloud Creator Store](https://create.roblox.com/docs/cloud/reference/features/creator-store) est une API Roblox distincte des serveurs MCP ci-dessus. Elle n'est pas activée ici : son usage nécessite une clé et un cas d'utilisation précis.
## Vérification du template
Sur Windows, l'installation verrouillée, `pnpm check`, `pnpm format:check`, `pnpm build` et `pnpm start -- --no-watch` ont réussi. `pnpm build` produit `game.rbxl` et `pnpm start` a lancé Roblox Studio. `codex mcp list` reconnaît les deux serveurs. Un test de jeu dans Studio et un appel MCP complet restent à effectuer.

20
renovate.json Normal file
View File

@ -0,0 +1,20 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"rangeStrategy": "pin",
"packageRules": [
{
"matchPackageNames": [
"@flamework/core",
"@flamework/components",
"@flamework/networking",
"rbxts-transformer-flamework"
],
"groupName": "Flamework"
},
{
"matchPackageNames": ["roblox-ts", "@rbxts/compiler-types"],
"groupName": "roblox-ts compiler"
}
]
}

10
rokit.toml Normal file
View File

@ -0,0 +1,10 @@
# This file lists tools managed by Rokit, a toolchain manager for Roblox projects.
# For more information, see https://github.com/rojo-rbx/rokit
# New tools can be added by running `rokit add <tool>` in a terminal.
[tools]
rojo = "rojo-rbx/rojo@7.7.1"
asphalt = "jackTabsCode/asphalt@2.0.2"
darklua = "seaofvoices/darklua@0.19.0"
mantle = "blake-mealey/mantle@0.11.18"

View File

@ -0,0 +1,5 @@
import { Flamework } from "@flamework/core";
import { TEMPLATE_NAME } from "shared/template-name";
Flamework.ignite();
print(`${TEMPLATE_NAME} ready (client)`);

View File

@ -0,0 +1,6 @@
import { Flamework } from "@flamework/core";
import { TEMPLATE_NAME } from "shared/template-name";
Flamework.addPaths("src/server/services");
Flamework.ignite();
print(`${TEMPLATE_NAME} ready (server)`);

View File

@ -0,0 +1,8 @@
import { OnStart, Service } from "@flamework/core";
@Service()
export class StartupService implements OnStart {
public onStart(): void {
print("CrownStudio template ready (server)");
}
}

View File

@ -0,0 +1 @@
export const TEMPLATE_NAME = "CrownStudio template";

27
tsconfig.json Normal file
View File

@ -0,0 +1,27 @@
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"downlevelIteration": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"incremental": true,
"jsx": "react",
"jsxFactory": "React.createElement",
"jsxFragmentFactory": "React.Fragment",
"module": "commonjs",
"moduleDetection": "force",
"moduleResolution": "Node",
"noLib": true,
"outDir": "out",
"baseUrl": "src",
"resolveJsonModule": true,
"rootDir": "src",
"strict": true,
"target": "ESNext",
"tsBuildInfoFile": "out/tsconfig.tsbuildinfo",
"typeRoots": ["node_modules/@rbxts", "node_modules/@flamework"],
"types": ["types", "compiler-types"],
"plugins": [{ "transform": "rbxts-transformer-flamework" }]
},
"include": ["src/**/*.ts", "src/**/*.tsx"]
}