diff --git a/README.md b/README.md index 22edce8..981b863 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,16 @@ -# gregWiki — gregFramework documentation +# gregWiki -This repository contains the **Docusaurus site** (`docusaurus.config.js`, `src/`, `sidebars.js`) and all **Markdown/MDX content** under [`docs/`](./docs/). Published docs use the route base path **`/wiki`**. +Docusaurus site for **gregFramework** / Data Center modding: configuration (`docusaurus.config.js`, `sidebars.js`), React under `src/`, content under [`docs/`](./docs/). Published route base path: **`/wiki`**. + +--- + +## Part of gregFramework + +This directory is part of the **[gregFramework](https://github.com/mleem97/gregFramework)** workspace. Clone sibling repositories side by side so each project lives at `gregFramework//`. See the workspace [README](https://github.com/mleem97/gregFramework/blob/master/README.md) for the full layout and migration notes. + +**Remote:** [`mleem97/gregWiki`](https://github.com/mleem97/gregWiki) — on-disk path: `gregFramework/gregWiki/`. + +--- ## Local development @@ -15,24 +25,50 @@ Production build: npm run build ``` -Optional: refresh the legacy GitHub Wiki mirror from a sibling `../.wiki/` clone under `gregFramework/` — see [`docs/getting-started/documentation-layout.md`](./docs/getting-started/documentation-layout.md) and `npm run wiki:sync` / `wiki:normalize-i18n`. +Optional: mirror the legacy GitHub Wiki — see [`docs/getting-started/documentation-layout.md`](./docs/getting-started/documentation-layout.md) and scripts `wiki:sync` / `wiki:normalize-i18n`. + +--- ## Deployment (Coolify / CI) - **Default branch:** `main` — use this for new work and PRs. -- **`master`:** kept in sync with `main` for hosts that still clone `master` (e.g. older Coolify defaults). Prefer setting the deployment **branch to `main`** in Coolify → Application → **Git** → Branch. +- **`master`:** may still exist for older deployments; in Coolify, set the branch to **`main`** when possible. -## Docker +### Coolify (Dockerfile) — missing `/app/package.json` -Build context **must** be this repository root (the folder that contains `package.json`): +The image expects **`package.json` at the image root `/app`**. That only works if the **Docker build context** is this repository (gregWiki), not a parent monorepo folder without adjustments. + +| Setting | Value | +|---------|--------| +| **Dockerfile** | `Dockerfile` at the gregWiki root | +| **Base directory** | **`.`** when only `gregWiki` is cloned. If gregWiki sits **next to** gregCore in the same clone, often set **`gregWiki`** as the subdirectory. | +| **Volumes** | Do not use an empty host mount over `/app` that hides `package.json`. | + +Symptom: `docker-entrypoint: ERROR: /app/package.json not found` → wrong context or volume. + +--- + +## Docker (local) + +Build context = **this** repository (folder that contains `package.json`): ```bash +cd path/to/gregWiki docker compose up --build -# or -docker build -t gregwiki-docs . -docker run --rm -p 3000:3000 gregwiki-docs ``` -## Related repositories +If gregWiki lives inside **gregFramework**, from the workspace root: -The [`gregFramework`](https://github.com/mleem97/gregFramework) workspace groups **gregCore**, **gregMods**, **gregExtensions**, **gregWiki**, and related tools. Source-of-truth code paths for hooks and builds live in those repos, not only in this documentation tree. +```bash +cd path/to/gregFramework +docker compose -f docker-compose.gregwiki.yml up --build +``` + +(`docker-compose.gregwiki.yml` sets `build.context: ./gregWiki`.) + +--- + +## See also + +- [gregFramework README](../README.md) — flat layout `gregFramework/{RepoName}/` +- Source code and builds: **gregCore**, **gregMod.*** , **gregExt.*** as separate repositories (not only this documentation) diff --git a/docs/contributors/repo-inventory.md b/docs/contributors/repo-inventory.md index aca9bff..ddc6911 100644 --- a/docs/contributors/repo-inventory.md +++ b/docs/contributors/repo-inventory.md @@ -19,8 +19,14 @@ These folders typically sit **next to each other** in a developer workspace (see | **Mods (split repos)** | `gregMod./` (directly under `gregFramework/`) | Standalone gameplay mods (`FMF.*` assemblies); **not** nested under a `gregMods/` umbrella | | **Extensions / framework plugins (split repos)** | `gregExt./` (directly under `gregFramework/`) | FFM framework plugins (`FFM.Plugin.*`); **not** under legacy `StandaloneMods/` paths | | **Documentation** | `gregWiki/` ([`mleem97/gregWiki`](https://github.com/mleem97/gregWiki)) | **This site**: Docusaurus app at repo root, all authored pages under `docs/` | -| **Tools** | `gregModmanager/` (WorkshopManager), `gregDataCenterExporter/`, etc. | Supporting apps and templates | -| **Other** | `gregIPAM/`, `gregReferences/`, … | Side projects and references | +| **Workshop / Modmanager** | `gregModmanager/` | **Gregtools Modmanager** (MAUI; `WorkshopUploader.csproj` → `WorkshopUploader.exe`) | +| **Exporter & templates** | `gregDataCenterExporter/` | DC exporter, `FrikaModFramework/` assets, shared templates | +| **Mod store (optional clone)** | `gregStore/` | Web/modstore stack when the private repo is present | +| **IPAM / DHCP tooling** | `gregIPAM/` | e.g. `DHCPSwitches.csproj` | +| **References** | `gregReferences/` | IL2CPP unpack, baseline refs | +| **Meta / internal** | `gregMeta/`, `gregInternalDocs/` | Notes and non-public docs | +| **Examples** | `exGregFramework/` | Sample workspace layout | +| **Other** | `siblingRepos/`, … | Helper scripts and side repos | ## Canonical code locations (split repos) diff --git a/docs/getting-started.md b/docs/getting-started.md index 37f2623..92953a3 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -6,13 +6,14 @@ description: "Split-repo workspace: gregFramework layout, building the core, and The workspace is **multi-repo** with a local `gregFramework/` folder containing standalone repositories, for example: -- `gregCore/` — **framework core**: translations, hooks, Harmony/event runtime, templates, bridges, and related core features -- `gregMod./` (per-mod repositories, directly under `gregFramework/`) -- `gregExt./` (per-extension repositories, directly under `gregFramework/`) -- `gregWiki/` (this documentation site) -- `gregStore/` (**Gregweb**, private repository — modstore web + infra; Next.js under `web/`) +- `gregCore/` — core SDK (`gregCore/framework/FrikaMF.csproj`), MCP server under `gregCore/mcp-server/` +- `gregMod./` — gameplay mods (`FMF.*`), **flat** next to `gregCore/` (legacy umbrella `gregMods/` is deprecated) +- `gregExt./` — framework plugins (`FFM.Plugin.*`), same flat layout (legacy `gregExtensions/` deprecated) +- `gregModmanager/` — **Gregtools Modmanager** (WorkshopManager; `WorkshopUploader.csproj`) +- `gregDataCenterExporter/` — exporter, templates, hook JSON mirrors +- `gregWiki/` — this documentation site -The upstream **DataCenter-RustBridge** project is integrated into the core tree at: +The **Rust** bridge lives under: - `gregCore/bridges/gregSta.RustBridge/` @@ -24,20 +25,16 @@ dotnet build gregCore/FrikaMF.sln -c Release Or open `gregCore/FrikaMF.sln` in your IDE. -## Language (mods / plugins / extensions) - -**Mandatory:** implement **all** gameplay and integration logic for mods, MelonLoader plugins, and extensions in **C#**. See [Modding language (C# only)](./reference/modding-language-requirement.md). - ## Hook naming -- **Target convention:** `FMF..` (see [`CONTRIBUTING.md`](https://github.com/mleem97/gregFramework/blob/master/CONTRIBUTING.md)). -- **Registry:** [`FrikaModFramework/fmf_hooks.json`](https://github.com/mleem97/gregFramework/blob/master/FrikaModFramework/fmf_hooks.json) (path may vary by branch). -- **Legacy runtime strings** may still use `FFM.*` in [`HookNames`](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF/HookNames.cs) until migrated. +- **Target convention:** `FMF..` (see [`CONTRIBUTING.md`](https://github.com/mleem97/gregFramework/blob/main/CONTRIBUTING.md)). +- **Registry (example path in workspace):** [`gregDataCenterExporter/FrikaModFramework/fmf_hooks.json`](https://github.com/mleem97/gregFramework/blob/main/gregDataCenterExporter/FrikaModFramework/fmf_hooks.json) (exact copy may exist in other repos). +- **Legacy runtime strings** may still use `FFM.*` in [`HookNames.cs`](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/FrikaMF/HookNames.cs) until migrated. ## Start a mod -1. Create a new mod repo folder `gregMod./` under `gregFramework/` using the `gregMod.` pattern. -2. Use templates from `gregCore/Templates/`. +1. Add a new mod repo as `gregMod./` under `gregFramework/` (clone or create next to `gregCore/`). +2. Use templates from `gregCore/Templates/` (and mirrored templates under `gregDataCenterExporter/Templates/` where applicable). 3. Maintain hook metadata and version the mod in its own repository. ## Documentation site @@ -51,4 +48,4 @@ From the `gregWiki` root: `docker build -t gregwiki-docs .` then `docker run --r ### MCP -See [`reference/mcp-server`](./reference/mcp-server.md) — the server lives next to the core sources (`gregCore/mcp-server/`). +See [`reference/mcp-server`](./reference/mcp-server.md) — implementation under **`gregCore/mcp-server/`** (install and `--data-root` per that folder’s `README.md`). diff --git a/docs/guides/contributors/contributor-workshop.md b/docs/guides/contributors/contributor-workshop.md index fe95ae6..e817a1b 100644 --- a/docs/guides/contributors/contributor-workshop.md +++ b/docs/guides/contributors/contributor-workshop.md @@ -115,7 +115,7 @@ After publishing, the app re-downloads the item from Steam and replaces your loc ## Extending the service layer -The `SteamWorkshopService` in `WorkshopUploader/Services/SteamWorkshopService.cs` wraps the Facepunch.Steamworks 2.3.3 API. Key methods: +The `SteamWorkshopService` in `gregModmanager/Services/SteamWorkshopService.cs` wraps the Facepunch.Steamworks 2.3.3 API. Key methods: | Method | Purpose | |--------|---------| diff --git a/docs/guides/players/enduser-workshop.md b/docs/guides/players/enduser-workshop.md index e2007c2..eb98e9e 100644 --- a/docs/guides/players/enduser-workshop.md +++ b/docs/guides/players/enduser-workshop.md @@ -21,7 +21,7 @@ This guide is for players who want to **install and manage mods** for Data Cente ## Installation -You can run WorkshopManager from **any folder you prefer** (for example `Program Files`, Desktop, Downloads, or `/WorkshopUploader/`). +You can run WorkshopManager from **any folder you prefer** (for example `Program Files`, Desktop, Downloads, or a folder next to the game). **Source code** for the app lives in the repo folder **`gregModmanager/`** (release ZIPs ship `WorkshopUploader.exe` / **Gregtools Modmanager**). ### Option A — Installer setup (recommended) diff --git a/docs/intro.md b/docs/intro.md index 76fd52c..c86be82 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -21,9 +21,11 @@ This documentation describes the **current split layout**: a local `gregFramewor ## Repository hub - [Workspace map](./workspace/index.mdx) — how folders map to repos -- Core: `gregCore/FrikaMF-StandaloneRepo/` +- Core: `gregCore/` (`framework/FrikaMF`, `mcp-server/`, `bridges/gregSta.RustBridge/`) - Mods: `gregMod./` (split repos, directly under `gregFramework/`) - Extensions (FFM plugins): `gregExt./` (split repos, directly under `gregFramework/`) +- Workshop app: `gregModmanager/` (Gregtools Modmanager — `WorkshopUploader.exe`) +- Exporter / templates: `gregDataCenterExporter/` - Wiki: `gregWiki/` (this site) ## Hooks and releases @@ -36,10 +38,10 @@ This documentation describes the **current split layout**: a local `gregFramewor ## Layout (contributors) - [Repo inventory](./contributors/repo-inventory.md) — project and repository overview -- Split naming: `gregMod.`, `gregExt.`, `gregSta.` +- Split naming: `gregMod.`, `gregExt.`, `gregSta.` (Rust bridge repo), plus apps like `gregModmanager/`, `gregDataCenterExporter/`, `gregIPAM/`, `gregStore/` ## Source model - **Authoring:** Markdown/MDX lives in the **gregWiki** repository. - **Technical source of truth:** runtime and bridge details come from **gregCore**. -- **Rust bridge:** integrated in the core tree under `FrikaMF-StandaloneRepo/bridges/gregSta.RustBridge/`. +- **Rust bridge:** `gregCore/bridges/gregSta.RustBridge/`. diff --git a/docs/meta/Steam-Workshop-and-Tooling.md b/docs/meta/Steam-Workshop-and-Tooling.md index a6a401d..bea4df6 100644 --- a/docs/meta/Steam-Workshop-and-Tooling.md +++ b/docs/meta/Steam-Workshop-and-Tooling.md @@ -27,7 +27,7 @@ Do **not** commit `*.dll` from `lib/references/` (see `.gitignore`). Official upload and item layout for *Data Center* Workshop content may be undocumented by the developer. Until documented: - Treat Workshop delivery as **game-defined** (often content under game data / `StreamingAssets`; MelonLoader mods remain **DLLs in `Mods/`**). -- The **WorkshopUploader** desktop app (see `WorkshopUploader/`) is the supported path for authors to manage Workshop items and DevServer betas once Steamworks is configured. +- The **WorkshopUploader** / **Gregtools Modmanager** desktop app (repo folder `gregModmanager/`) is the supported path for authors to manage Workshop items and DevServer betas once Steamworks is configured. ## Legal @@ -36,4 +36,4 @@ Do not redistribute game binaries or extracted assets. Workshop packages should ## CI / agents - `FrikaMF.csproj` builds on Windows agents that have either a Steam *Data Center* install **or** a populated `lib/references/MelonLoader/` (from `refresh_refs.py`). -- `WorkshopUploader` targets `net6.0-windows`; build it on Windows (not Linux-hosted runners unless cross-compilation is configured). +- `gregModmanager/WorkshopUploader.csproj` targets **.NET 9** MAUI (`net9.0-windows…`); build it on Windows (not Linux-hosted runners unless cross-compilation is configured). diff --git a/docs/reference/mcp-server.md b/docs/reference/mcp-server.md index 73cfb5e..6b194b3 100644 --- a/docs/reference/mcp-server.md +++ b/docs/reference/mcp-server.md @@ -6,7 +6,7 @@ description: Model Context Protocol server bundled with the docs Docker image fo # MCP server (FrikaMF modding) -The repository ships a **Model Context Protocol (MCP)** server (`mcp-server/`) that exposes: +The **gregCore** repository ships a **Model Context Protocol (MCP)** server at **`gregCore/mcp-server/`** that exposes: - **Docs search & read** — Markdown under `docs/` (same source as Docusaurus). - **Hook registry** — `fmf_hooks.json` (and the same registry path in the monorepo). @@ -42,14 +42,9 @@ Binding to `0.0.0.0` exposes the MCP endpoint on your network. Use only on trust ## Local (stdio) for Cursor -From `mcp-server/` with the repo root as data (so `docs/`, `CONTRIBUTING.md`, and `FrikaModFramework/fmf_hooks.json` resolve): +Source: **`gregCore/mcp-server/`** (see **`README.md`** in that folder). Install dependencies with `npm install`, then run `node src/index.mjs --stdio --data-root `, where `` is a directory that contains **`docs/`**, **`CONTRIBUTING.md`**, and **`FrikaModFramework/fmf_hooks.json`** (or a flat `fmf_hooks.json`). The README’s example uses `--data-root ..` relative to `mcp-server/`; in a **split-repo** workspace you may need a different `` or `FMF_MCP_DATA_ROOT` so all three paths resolve. -```bash -cd mcp-server -node src/index.mjs --stdio --data-root .. -``` - -Point your MCP client at this command (stdio transport). Adjust `--data-root` if your layout differs. +Point your MCP client at this command (stdio transport). ## Tools (summary) diff --git a/docs/reference/modding-language-requirement.md b/docs/reference/modding-language-requirement.md index e1f64d0..406a83e 100644 --- a/docs/reference/modding-language-requirement.md +++ b/docs/reference/modding-language-requirement.md @@ -20,7 +20,7 @@ That applies to anything shipped as a **`gregMod.*`**, **`gregExt.*`**, or **`FF ## What this does *not* restrict -- **Framework core** (`gregCore`) may still contain **non-C#** components maintained by core maintainers (for example the **Rust** FFI bridge under `bridges/gregSta.RustBridge/`, build scripts, or tooling). Those are **not** substitutes for implementing mod/plugin/extension behavior outside C#. +- **Framework core** (`gregCore`) may still contain **non-C#** components maintained by core maintainers (for example the **Rust** FFI bridge under `gregCore/bridges/gregSta.RustBridge/`, build scripts, or tooling). Those are **not** substitutes for implementing mod/plugin/extension behavior outside C#. - **Documentation**, **config** (JSON/YAML), and **assets** are not “logic” in this sense. - **gregStore**, **gregWiki**, and other non–in-game stacks may use other languages as appropriate. diff --git a/docs/releases/tools/gregtools-modmanager-1.0-release.mdx b/docs/releases/tools/gregtools-modmanager-1.0-release.mdx index 20b3e3a..2c6fcdc 100644 --- a/docs/releases/tools/gregtools-modmanager-1.0-release.mdx +++ b/docs/releases/tools/gregtools-modmanager-1.0-release.mdx @@ -35,7 +35,7 @@ Push tag **`gregtools-modmanager-v1.0.0`** on `main` (or run the workflow manual - [Workshop uploader (full guide)](/wiki/tools/workshop-uploader) - [End-user Workshop guide](/wiki/guides/players/enduser-workshop) -- Open-source and third-party components: [`WorkshopUploader/EXTERNAL_DEPENDENCIES.md`](https://github.com/mleem97/gregFramework/blob/main/WorkshopUploader/EXTERNAL_DEPENDENCIES.md) in the repository +- Open-source and third-party components: [`gregModmanager/EXTERNAL_DEPENDENCIES.md`](https://github.com/mleem97/gregFramework/blob/main/gregModmanager/EXTERNAL_DEPENDENCIES.md) in the repository ## Scope of 1.0 diff --git a/docs/tools/workshop-uploader.md b/docs/tools/workshop-uploader.md index e594f51..4b5eef1 100644 --- a/docs/tools/workshop-uploader.md +++ b/docs/tools/workshop-uploader.md @@ -11,7 +11,6 @@ description: Windows desktop app for managing Steam Workshop content, browsing m ## Features ### Author tools (Projects / Editor / My Uploads) - - Create workshop projects from templates (vanilla assets, MelonLoader mods, FMF plugins). - Edit **title**, **description** (with BBCode toolbar), **visibility**, **tags**, and **preview image**; stored in `metadata.json`. - **BBCode formatting toolbar** — insert Steam-compatible formatting (bold, italic, headings, URL, image, list, code, quote, spoiler, horizontal rule, table) directly in the description editor. @@ -26,7 +25,6 @@ description: Windows desktop app for managing Steam Workshop content, browsing m - **Per-item stats** — subscriptions, votes, score, size. ### Mod Store (integrated in Mod Manager) - - **Browse** all Workshop items for Data Center with tag filtering and sort options (last updated, newest, top rated, trending, most subscribed, title A-Z). - **Search** mods by text. - **Subscribe / Unsubscribe** to mods directly from the store. @@ -35,20 +33,17 @@ description: Windows desktop app for managing Steam Workshop content, browsing m - **Item detail view** — full statistics, description, tags, gallery images, action buttons, and links to changelog/comments. ### Mod Manager / Health - - **Dependency health** checks: game installed, MelonLoader, Il2Cpp assemblies, FMF core, FMF plugins directory, ModCfg directory. - **MelonLoader** download page link and game folder access. - **FMF Plugin channels** — stable (local scan) and beta (server, TODO). ### Settings - - **Workspace path** — change where projects are stored (defaults to `/workshop`). - **Language** — switch between EN, DE, RU, ES, IT, JP, PL, CN (defaults to system language). Restart button applies the change instantly. - **Mod Store toggle** — enable/disable the Mod Store tab (disabled by default). Restart button included. - **Community links** — quick access to Discord, Modding Channel, and GregFramework.eu. ### FMF dependency notice - - Projects can be marked as **"Needs FrikaModFramework"** in the editor. When uploading, a notice is automatically appended to the Steam description telling users to install FMF. ## Requirements @@ -56,7 +51,7 @@ description: Windows desktop app for managing Steam Workshop content, browsing m - **Windows 10** (version 1809+). - **Steam** with a signed-in account that **owns Data Center** (App ID **4170200**). - **No additional dependencies** — the release is fully self-contained (includes .NET runtime and Windows App SDK). -- `steam_appid.txt` must be next to the executable (included in the release build). The app loads `**steam_api64.dll`** from `**Data Center_Data/Plugins/x86_64/**` in the Data Center install when possible; otherwise it uses the copy shipped next to the uploader. +- `steam_appid.txt` must be next to the executable (included in the release build). The app loads **`steam_api64.dll`** from **`Data Center_Data/Plugins/x86_64/`** in the Data Center install when possible; otherwise it uses the copy shipped next to the uploader. ## Paths and directories {#paths} @@ -114,22 +109,21 @@ Data Center has a **built-in mod system** (`ModLoader`) that loads mods from `co The game's `ModLoader` (a Unity `MonoBehaviour`) runs the following on startup: -1. `**SyncWorkshopThenLoadAll()`** — a coroutine that: - - Queries all subscribed Steam Workshop items (`PublishedFileId_t[]`) - - Waits for downloads to complete (with timeout) - - Copies each Workshop item folder into `StreamingAssets/Mods/workshop_` via `CopyDirectory()` -2. `**LoadAllMods()**` — scans all subdirectories in the mods path: - - Calls `LoadModPack(folderPath)` for each mod folder - - Reads `config.json`, then for each entry calls: - - `LoadShopItem()` → `CreateShopTemplate()` + `CreateShopButton()` for purchasable items - - `LoadStaticItem()` → `CreateStaticInstance()` for fixed-position decorations +1. **`SyncWorkshopThenLoadAll()`** — a coroutine that: + - Queries all subscribed Steam Workshop items (`PublishedFileId_t[]`) + - Waits for downloads to complete (with timeout) + - Copies each Workshop item folder into `StreamingAssets/Mods/workshop_` via `CopyDirectory()` +2. **`LoadAllMods()`** — scans all subdirectories in the mods path: + - Calls `LoadModPack(folderPath)` for each mod folder + - Reads `config.json`, then for each entry calls: + - `LoadShopItem()` → `CreateShopTemplate()` + `CreateShopButton()` for purchasable items + - `LoadStaticItem()` → `CreateStaticInstance()` for fixed-position decorations :::warning DLL loading timing The `LoadDll()` method exists in the `ModLoader` but **object assets (shopItems, staticItems) are loaded at game startup**. DLL-based mods (`dlls[]` in config.json) are loaded later at **SaveLoad runtime**, not during the initial `LoadAllMods` pass. This means DLL plugins are not available until a save is loaded. ::: Internal state tracked by `ModLoader`: - - `modTemplates` — `Dictionary` of loaded shop item prefabs by mod ID - `modTemplatesByFolder` — `Dictionary` of prefabs by folder name - `staticInstances` — `List` of instantiated static decorations @@ -202,61 +196,53 @@ The `workshop_` prefix distinguishes Workshop-downloaded mods from manually inst ### config.json fields - -| Field | Description | -| --------------- | ------------------------------------------------------------------------- | -| `modName` | Display name of the mod | -| `shopItems[]` | Purchasable objects that appear in the in-game shop | -| `staticItems[]` | Decorations placed at fixed world positions | -| `dlls[]` | Native plugin DLLs (see [DLL mods without MelonLoader](#native-dll-mods)) | - +| Field | Description | +|-------|-------------| +| `modName` | Display name of the mod | +| `shopItems[]` | Purchasable objects that appear in the in-game shop | +| `staticItems[]` | Decorations placed at fixed world positions | +| `dlls[]` | Native plugin DLLs (see [DLL mods without MelonLoader](#native-dll-mods)) | ### shopItems fields - -| Field | Type | Description | -| ---------------- | ----------- | --------------------------------------------------------- | -| `itemName` | `string` | Display name in the shop | -| `price` | `int` | Purchase price | -| `xpToUnlock` | `int` | XP threshold to unlock (0 = immediately available) | -| `sizeInU` | `int` | Rack unit size of the object | -| `mass` | `float` | Object mass | -| `modelScale` | `float` | Scale multiplier for the 3D model | -| `colliderSize` | `[x, y, z]` | Physics collider dimensions | -| `colliderCenter` | `[x, y, z]` | Physics collider offset | -| `modelFile` | `string` | Path to `.obj` model file (loaded via `LoadMesh`) | -| `textureFile` | `string` | Path to `.png` texture file (loaded via `CreateMaterial`) | -| `iconFile` | `string` | Path to `.png` shop icon (loaded via `LoadIcon`) | -| `objectType` | `int` | `0` = passive object | - +| Field | Type | Description | +|-------|------|-------------| +| `itemName` | `string` | Display name in the shop | +| `price` | `int` | Purchase price | +| `xpToUnlock` | `int` | XP threshold to unlock (0 = immediately available) | +| `sizeInU` | `int` | Rack unit size of the object | +| `mass` | `float` | Object mass | +| `modelScale` | `float` | Scale multiplier for the 3D model | +| `colliderSize` | `[x, y, z]` | Physics collider dimensions | +| `colliderCenter` | `[x, y, z]` | Physics collider offset | +| `modelFile` | `string` | Path to `.obj` model file (loaded via `LoadMesh`) | +| `textureFile` | `string` | Path to `.png` texture file (loaded via `CreateMaterial`) | +| `iconFile` | `string` | Path to `.png` shop icon (loaded via `LoadIcon`) | +| `objectType` | `int` | `0` = passive object | The `ModShopItem` UI component displays each shop item with `itemIcon`, `txtName`, and `txtPrice`. Purchasing calls `ButtonBuyItem()`. ### staticItems fields - -| Field | Type | Description | -| ---------------- | ----------- | --------------------------- | -| `itemName` | `string` | Display name | -| `modelFile` | `string` | Path to `.obj` model file | -| `textureFile` | `string` | Path to `.png` texture file | -| `modelScale` | `float` | Scale multiplier | -| `colliderSize` | `[x, y, z]` | Physics collider dimensions | -| `colliderCenter` | `[x, y, z]` | Physics collider offset | -| `position` | `[x, y, z]` | World position | -| `rotation` | `[x, y, z]` | Euler rotation in degrees | - +| Field | Type | Description | +|-------|------|-------------| +| `itemName` | `string` | Display name | +| `modelFile` | `string` | Path to `.obj` model file | +| `textureFile` | `string` | Path to `.png` texture file | +| `modelScale` | `float` | Scale multiplier | +| `colliderSize` | `[x, y, z]` | Physics collider dimensions | +| `colliderCenter` | `[x, y, z]` | Physics collider offset | +| `position` | `[x, y, z]` | World position | +| `rotation` | `[x, y, z]` | Euler rotation in degrees | ### Asset loading pipeline - -| Method | Input | Output | -| ----------------------------------------- | ----------- | ----------------- | -| `LoadMesh(folderPath, modelFile)` | `.obj` file | Unity `Mesh` | -| `CreateMaterial(folderPath, textureFile)` | `.png` file | Unity `Material` | -| `LoadIcon(folderPath, iconFile)` | `.png` file | Unity `Sprite` | -| `LoadTexture(path)` | `.png` file | Unity `Texture2D` | - +| Method | Input | Output | +|--------|-------|--------| +| `LoadMesh(folderPath, modelFile)` | `.obj` file | Unity `Mesh` | +| `CreateMaterial(folderPath, textureFile)` | `.png` file | Unity `Material` | +| `LoadIcon(folderPath, iconFile)` | `.png` file | Unity `Sprite` | +| `LoadTexture(path)` | `.png` file | Unity `Texture2D` | - **3D models**: Wavefront OBJ format (`.obj`) - **Textures**: PNG format (`.png`) @@ -282,9 +268,8 @@ The game's `ModLoader` has **built-in DLL loading** — no MelonLoader required. ``` **How it works internally:** - 1. `ModLoader.LoadDll(folderPath, DllEntry)` loads the DLL from the mod folder -2. The `entryClass` must reference a class that implements the `**IModPlugin`** interface +2. The `entryClass` must reference a class that implements the **`IModPlugin`** interface 3. Loaded plugins are stored in `ModLoader.loadedPlugins` (`List`) :::warning Loading timing @@ -293,25 +278,21 @@ Unlike asset objects (`shopItems`, `staticItems`) which are loaded at game start **DLL entry requirements:** - -| Field | Description | -| ------------ | ------------------------------------------------------------------------------------- | -| `fileName` | The `.dll` file in the mod folder | +| Field | Description | +|-------|-------------| +| `fileName` | The `.dll` file in the mod folder | | `entryClass` | Fully qualified class name (e.g. `MyNamespace.MyPlugin`) that implements `IModPlugin` | - :::caution Experimental feature The developer has marked DLL loading as **untested**. The `LoadDll` method and `IModPlugin` interface exist in the game code, but stability is not guaranteed. A mod that uses only `shopItems` and `staticItems` (asset-only) is the safest approach. ::: **Advantages over MelonLoader:** - - No external framework needed — works with the vanilla game - Distributed via Workshop like any other mod (just include the DLL in the mod folder) - The game manages loading/unloading through its own lifecycle **Limitations:** - - The `IModPlugin` interface contract is not publicly documented — you need to reference the game's IL2CPP assemblies to implement it - Less flexibility than MelonLoader's Harmony patching - Only the entry class specified in `entryClass` is instantiated @@ -327,15 +308,13 @@ For now, only **passive objects** are supported for shop items (`objectType: 0`) The game loads native mods from `Data Center_Data\StreamingAssets\Mods\`. Workshop items are copied into subfolders named `workshop_` under that path (see [Steam install path](#steam-install-path)). -**ModPathRedirector** is a **MelonLoader plugin** (not a MelonMod): install the DLL under `**{GameRoot}/Plugins/`**. It does **not** change native mod paths. It calls `**steam_api64.dll`** directly (Steam flat API: `SteamAPI_ISteamUGC_*`). The game ships this DLL under `**Data Center_Data/Plugins/x86_64/**`; the plugin loads it from there first, then falls back next to the executable. After the Il2Cpp assembly step (see MelonLoader log: `Il2CppAssemblyGenerator`), `**OnPreModsLoaded**` blocks loading MelonMods until each subscribed Workshop item reports installed in Steam and a matching `**Data Center_Data/StreamingAssets/Mods/workshop_/**` folder exists (per-item `**DownloadItem**`, `**SteamAPI_RunCallbacks**`, timeouts). If the game has not copied Workshop content into `StreamingAssets/Mods` yet, the plugin continues after a short grace period and logs a warning — restart once if mods are missing. +**ModPathRedirector** is a **MelonLoader plugin** (not a MelonMod): install the DLL under **`{GameRoot}/Plugins/`**. It does **not** change native mod paths. It calls **`steam_api64.dll`** directly (Steam flat API: `SteamAPI_ISteamUGC_*`). The game ships this DLL under **`Data Center_Data/Plugins/x86_64/`**; the plugin loads it from there first, then falls back next to the executable. After the Il2Cpp assembly step (see MelonLoader log: `Il2CppAssemblyGenerator`), **`OnPreModsLoaded`** blocks loading MelonMods until each subscribed Workshop item reports installed in Steam and a matching **`Data Center_Data/StreamingAssets/Mods/workshop_/`** folder exists (per-item **`DownloadItem`**, **`SteamAPI_RunCallbacks`**, timeouts). If the game has not copied Workshop content into `StreamingAssets/Mods` yet, the plugin continues after a short grace period and logs a warning — restart once if mods are missing. **What it does:** - -- On each frame (from `OnApplicationStarted`), waits for `SteamAPI_IsSteamRunning` and resolves `SteamAPI_SteamUGC_v0xx` → `ISteamUGC`*, then calls the native UGC APIs (no Il2Cpp Steamworks wrapper) +- On each frame (from `OnApplicationStarted`), waits for `SteamAPI_IsSteamRunning` and resolves `SteamAPI_SteamUGC_v0xx` → `ISteamUGC*`, then calls the native UGC APIs (no Il2Cpp Steamworks wrapper) - Leaves `ModLoader.LoadAllMods` / `CopyDirectory` unchanged — Workshop sync still uses `Data Center_Data/StreamingAssets/Mods/workshop_/` **Installation:** - 1. Copy `FMF.ModPathRedirector.dll` into `/Plugins/` (MelonLoader **Plugins** folder next to the executable) 2. Start the game — subscribed Workshop content is requested early; manual native mods still go under `Data Center_Data/StreamingAssets/Mods//` (each folder with a `config.json`) @@ -364,9 +343,9 @@ For each Workshop project: 1. Create a **folder** under the workspace (the folder name appears in the list). 2. Add a `content/` subfolder with files to ship: - - For **vanilla mods**: `config.json` + `.obj` models + `.png` textures directly in `content/` - - For **MelonLoader mods**: `content/Mods/` with `.dll` files - - For **FMF plugins**: `content/FMF/Plugins/` with `.dll` files + - For **vanilla mods**: `config.json` + `.obj` models + `.png` textures directly in `content/` + - For **MelonLoader mods**: `content/Mods/` with `.dll` files + - For **FMF plugins**: `content/FMF/Plugins/` with `.dll` files 3. Optionally create `metadata.json` yourself or fill it in the app. 4. Optionally add `preview.png` (or `.jpg`, `.jpeg`, `.gif`, `.webp`) at the project root. 5. Optionally add gallery screenshots under `screenshots/` — these are uploaded as additional preview images. @@ -412,31 +391,27 @@ workshop/ ### metadata.json schema - -| Field | Type | Description | -| -------------------------- | ---------- | -------------------------------------------------------------- | -| `publishedFileId` | `number` | Steam file ID (0 if unpublished) | -| `title` | `string` | Workshop item title (max 128 chars) | -| `description` | `string` | Description, supports [Steam BBCode](#bbcode) (max 8000 chars) | -| `visibility` | `string` | `"Public"`, `"FriendsOnly"`, or `"Private"` | -| `previewImageRelativePath` | `string` | Relative path to preview image (default `"preview.png"`) | -| `tags` | `string[]` | Up to 20 tags for discoverability | -| `needsFmf` | `boolean` | Appends FMF dependency notice on upload | -| `additionalPreviews` | `string[]` | Relative paths to gallery screenshot images | - +| Field | Type | Description | +|-------|------|-------------| +| `publishedFileId` | `number` | Steam file ID (0 if unpublished) | +| `title` | `string` | Workshop item title (max 128 chars) | +| `description` | `string` | Description, supports [Steam BBCode](#bbcode) (max 8000 chars) | +| `visibility` | `string` | `"Public"`, `"FriendsOnly"`, or `"Private"` | +| `previewImageRelativePath` | `string` | Relative path to preview image (default `"preview.png"`) | +| `tags` | `string[]` | Up to 20 tags for discoverability | +| `needsFmf` | `boolean` | Appends FMF dependency notice on upload | +| `additionalPreviews` | `string[]` | Relative paths to gallery screenshot images | ## Using the app ### Tabs - -| Tab | Purpose | -| -------------- | ------------------------------------------------- | -| **Projects** | Local workshop projects; search, open editor | -| **New** | Create from template (vanilla, MelonLoader, FMF) | +| Tab | Purpose | +|-----|---------| +| **Projects** | Local workshop projects; search, open editor | +| **New** | Create from template (vanilla, MelonLoader, FMF) | | **My Uploads** | Paginated list of your published items with stats | -| **Mod Store** | Browse, search, subscribe, vote, and manage mods | - +| **Mod Store** | Browse, search, subscribe, vote, and manage mods | ### Publish workflow @@ -446,11 +421,11 @@ workshop/ 4. Write a **version changelog** (required for first publish). 5. Click **Save and upload to Steam**. 6. The app: - - Validates all required fields (upload readiness check). - - Saves `metadata.json`. - - Uploads `content/` and preview to Steam. - - Uploads additional gallery screenshots (if any). - - **Syncs back** — re-downloads Steam's version of content, preview image, and gallery screenshots into your local project folder. + - Validates all required fields (upload readiness check). + - Saves `metadata.json`. + - Uploads `content/` and preview to Steam. + - Uploads additional gallery screenshots (if any). + - **Syncs back** — re-downloads Steam's version of content, preview image, and gallery screenshots into your local project folder. ### Import from Steam @@ -466,7 +441,6 @@ WorkshopUploader.exe --mode publish --path ``` Optional flags: - - `--autocommit` — writes a status JSON for external tools. ## Steam BBCode reference {#bbcode} @@ -577,32 +551,28 @@ Subscribe to this Workshop item — the game loads it automatically. Before uploading, the editor runs automated checks: - -| Check | Error condition | Warning condition | -| ------------------ | --------------------------- | ------------------- | -| **Content folder** | `content/` missing or empty | — | -| **Title** | Empty or > 128 characters | — | -| **Description** | > 8000 characters | Empty (recommended) | -| **Visibility** | — | Unknown value | -| **Preview image** | — | Missing or > 1 MB | -| **Tags** | — | No tags set | -| **Content size** | — | > 100 MB | -| **Changelog** | Empty on first publish | Empty on update | - +| Check | Error condition | Warning condition | +|-------|----------------|-------------------| +| **Content folder** | `content/` missing or empty | — | +| **Title** | Empty or > 128 characters | — | +| **Description** | > 8000 characters | Empty (recommended) | +| **Visibility** | — | Unknown value | +| **Preview image** | — | Missing or > 1 MB | +| **Tags** | — | No tags set | +| **Content size** | — | > 100 MB | +| **Changelog** | Empty on first publish | Empty on update | Items with **errors** cannot be uploaded. **Warnings** are informational — upload is still possible. ## Preview images {#preview-images} ### Main preview image - - Supports **PNG**, **JPG**, **JPEG**, **GIF**, and **WebP**. - Auto-detected by filename: `preview.png`, `preview.jpg`, etc. - Recommended size: under **1 MB**. - The app auto-detects the format from the file's magic bytes when syncing from Steam. ### Gallery screenshots - - Up to **9** additional images per item. - Stored in `screenshots/` under the project root. - Uploaded in a separate pass after the main content publish. @@ -615,10 +585,10 @@ Items with **errors** cannot be uploaded. **Warnings** are informational — upl The app is published as a **self-contained** Windows executable — no .NET runtime or Windows App SDK install required on the target machine. ```bash -dotnet publish WorkshopUploader/WorkshopUploader.csproj -c Release -p:SelfContained=true -p:RuntimeIdentifier=win10-x64 +dotnet publish gregModmanager/WorkshopUploader.csproj -c Release -p:SelfContained=true -p:RuntimeIdentifier=win10-x64 ``` -Output: `WorkshopUploader/bin/Release/net9.0-windows10.0.19041.0/win10-x64/publish/` +Output: `gregModmanager/bin/Release/net9.0-windows10.0.19041.0/win10-x64/publish/` ### Deploy all mods + Gregtools Modmanager to Workshop folders @@ -665,7 +635,6 @@ Yes. Use **My Uploads** → select the item → **Import**. The app downloads ev **Q: Why can't I upload? The button is greyed out / shows errors.** The upload readiness checker found issues. Common blockers: - - `content/` folder is missing or empty. - Title is empty. - No changelog provided on first publish. @@ -675,7 +644,6 @@ Check the readiness panel at the bottom of the editor for details. Yes for the **first publish** (error if empty). For updates it's recommended but not enforced (warning only). **Q: What happens after I click "Save and upload to Steam"?** - 1. Metadata is saved locally. 2. Content and preview are uploaded to Steam. 3. Gallery screenshots are uploaded (if any). @@ -722,20 +690,17 @@ Yes. After publishing and during import, gallery screenshots are downloaded from **Q: How does the game load Workshop mods?** At startup, the game's `ModLoader.SyncWorkshopThenLoadAll()` queries all subscribed items from Steam, waits for downloads to complete, and copies each into `Data Center_Data/StreamingAssets/Mods/workshop_/`. Then `LoadAllMods()` scans that folder. Asset objects (shopItems, staticItems) load immediately; DLL mods load later at SaveLoad time. The content structure determines what kind of mod it is: - - **Native mods** (vanilla): `config.json` + OBJ/PNG assets directly in `content/` — no extra tools needed. - **MelonLoader mods**: `content/Mods/` with `.dll` files — requires MelonLoader. - **FMF plugins**: `content/FMF/Plugins/` with `.dll` files — requires MelonLoader + FMF. **Q: What are the three mod types?** - -| Type | Requirements | Content structure | Use case | -| -------------------- | ----------------- | ------------------------------- | --------------------------------------- | -| **Vanilla (native)** | None | `config.json` + `.obj` + `.png` | Custom objects, decorations, shop items | -| **MelonLoader** | MelonLoader | `Mods/*.dll` | Code mods (IL2CPP) | -| **FMF plugin** | MelonLoader + FMF | `FMF/Plugins/*.dll` | FrikaModFramework plugins | - +| Type | Requirements | Content structure | Use case | +|------|-------------|-------------------|----------| +| **Vanilla (native)** | None | `config.json` + `.obj` + `.png` | Custom objects, decorations, shop items | +| **MelonLoader** | MelonLoader | `Mods/*.dll` | Code mods (IL2CPP) | +| **FMF plugin** | MelonLoader + FMF | `FMF/Plugins/*.dll` | FrikaModFramework plugins | **Q: What model format does the native mod system use?** Wavefront OBJ (`.obj`) for 3D models and PNG (`.png`) for textures and icons. @@ -763,33 +728,28 @@ Yes. Browse or search for mods, then click **Subscribe**. Steam will download th ### Troubleshooting **Q: The app won't start / crashes on launch.** - - Ensure `steam_appid.txt` is next to the executable; `steam_api64.dll` should resolve from the Data Center install (`Data Center_Data/Plugins/x86_64/`) or from the uploader folder. - Steam must be running and logged in. - Check the Windows Event Viewer (Application log) for .NET crash details. - On Windows 10 < 1809, the app may not work due to WinUI requirements. **Q: "Steam init failed" error in the app.** - - Make sure Steam is running and you are logged in. - Verify you own Data Center (App ID 4170200). - Check that `steam_appid.txt` contains `4170200`. **Q: My content doesn't show up after subscribing.** - - Restart the game — Workshop content is loaded at startup. - Check `steamapps/workshop/content/4170200/` to verify the download exists. - If the folder is empty, try unsubscribing and re-subscribing. **Q: The preview image doesn't load in the Mod Store.** - - The image is loaded from Steam's CDN. Check your internet connection. - Very large images may take a moment to appear. ## See also -- Repository README: `[WorkshopUploader/README.md](https://github.com/mleem97/gregFramework/blob/master/WorkshopUploader/README.md)` +- Repository README: [`gregModmanager/README.md`](https://github.com/mleem97/gregFramework/blob/main/gregModmanager/README.md) (product **Gregtools Modmanager**; `WorkshopUploader.csproj`) - [End-User Guide](/wiki/guides/players/enduser-workshop) - [Contributor Guide](/wiki/guides/contributors/contributor-workshop) - [Release](/wiki/guides/contributors/release) - diff --git a/docs/workspace/index.mdx b/docs/workspace/index.mdx index 059e783..018d381 100644 --- a/docs/workspace/index.mdx +++ b/docs/workspace/index.mdx @@ -10,13 +10,19 @@ The **gregFramework** folder groups several repositories (split layout). Use thi | Area | Folder | Role | |------|--------|------| -| Framework core | `gregCore/` | **Framework core**: translations, hooks, runtime (Harmony/events), MelonLoader host, plugins (`FFM.Plugin.*`), templates, bridges | -| Mods | `gregMod./` (direkt unter `gregFramework/`) | Standalone gameplay mods (`FMF.*`) | -| Extensions | `gregExt./` (direkt unter `gregFramework/`) | Extension modules (e.g. player models) | -| Documentation | `gregWiki/` | This Docusaurus site (`docs/`) | -| Legacy / tools | `gregDataCenterExporter/` | Historical monolith; migration staging | -| Modstore / infra | `gregStore/` | **Gregweb** (private repo): Next.js app (`web/`), Docker stack (`infra/`, compose at repo root) | -| IPAM / DHCP | `gregIPAM/` | **DHCP** and **IPAM** gameplay mod (MelonLoader; in-repo project still `DHCPSwitches` / `DHCPSwitches.csproj`) | -| Misc | `gregReferences/`, `gregMeta/`, `gregInternalDocs/` | Supporting repos and notes | +| **Framework core** | `gregCore/` | MelonLoader host (`gregCore/framework/FrikaMF.csproj`), templates, **`gregCore/mcp-server/`**, optional `gregCore/plugins/` mirrors | +| **Gameplay mods** | `gregMod./` | Standalone mods (`FMF.*`) — **directly under `gregFramework/`** (the `gregMods/` umbrella is deprecated) | +| **Framework plugins** | `gregExt./` | FFM plugins (`FFM.Plugin.*`) — **directly under `gregFramework/`** (the `gregExtensions/` umbrella is deprecated) | +| **Workshop desktop app** | `gregModmanager/` | **Gregtools Modmanager** (MAUI); project file `WorkshopUploader.csproj`, executable **`WorkshopUploader.exe`** | +| **Data Center exporter / assets** | `gregDataCenterExporter/` | Templates, exporter tooling, `FrikaModFramework/fmf_hooks.json` (among copies) | +| **Documentation** | `gregWiki/` | This Docusaurus site (`docs/`) | +| **Mod store / web (if cloned)** | `gregStore/` | Private Next.js modstore stack (`web/`, …) — optional sibling repo | +| **IPAM / DHCP mod** | `gregIPAM/` | Gameplay tooling (e.g. `DHCPSwitches.csproj`) | +| **References & IL2CPP** | `gregReferences/` | Unpacked assemblies, tooling baselines | +| **Meta / internal docs** | `gregMeta/`, `gregInternalDocs/` | Notes and internal documentation | +| **Examples** | `exGregFramework/` | Example / bootstrap layout | +| **Helper** | `siblingRepos/` | Scripts to clone related repos | + +**Rust FFI bridge:** `gregCore/bridges/gregSta.RustBridge/` (not under a separate `DataCenter-RustBridge` top-level folder). **Detailed inventory** (paths, `.csproj`, hooks): [Repository inventory](../contributors/repo-inventory). diff --git a/i18n/de/docusaurus-plugin-content-docs/current/getting-started.md b/i18n/de/docusaurus-plugin-content-docs/current/getting-started.md index d976b3a..1ead518 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/getting-started.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/getting-started.md @@ -4,15 +4,16 @@ sidebar_label: Erste Schritte description: "Split-Repo-Workspace: gregFramework-Layout, Core bauen und wo die Doku liegt." --- -Die Struktur ist **Multi-Repo** mit `gregFramework/` als lokalem Wrapper-Ordner. Darin liegen die eigenständigen Repositories, z. B.: +Die Struktur ist **Multi-Repo** mit `gregFramework/` als lokalem Wrapper-Ordner. Darin liegen die eigenständigen Repositories, z. B.: -- `gregCore/` — **Framework-Kern**: Übersetzung, Hooks, Harmony-/Event-Laufzeit, Templates, Bridges und übrige Kernfunktionen -- `gregMod./` (einzelne Mod-Repos, direkt unter `gregFramework/`) -- `gregExt./` (einzelne Extension-Repos, direkt unter `gregFramework/`) -- `gregWiki/` (Dokumentation) -- `gregStore/` (**Gregweb**, privates Repository — Modstore Web + Infra; Next.js unter `web/`) +- `gregCore/` — Core-SDK (`gregCore/framework/FrikaMF.csproj`), MCP unter `gregCore/mcp-server/` +- `gregMod./` — Gameplay-Mods (`FMF.*`), **flach** neben `gregCore/` (älteres `gregMods/` ist obsolet) +- `gregExt./` — Framework-Plugins (`FFM.Plugin.*`), ebenfalls flach (älteres `gregExtensions/` obsolet) +- `gregModmanager/` — **Gregtools Modmanager** (WorkshopManager; `WorkshopUploader.csproj`) +- `gregDataCenterExporter/` — Exporter, Templates, Hook-JSON-Spiegel +- `gregWiki/` — diese Dokumentation -Das Upstream-Projekt **DataCenter-RustBridge** wird in den Core integriert und liegt unter: +Die **Rust**-Bridge liegt unter: - `gregCore/bridges/gregSta.RustBridge/` @@ -24,20 +25,16 @@ dotnet build gregCore/FrikaMF.sln -c Release Alternativ in der IDE: `gregCore/FrikaMF.sln` öffnen. -## Sprache (Mods / Plugins / Extensions) - -**Pflicht:** Gameplay- und Integrationslogik für Mods, MelonLoader-Plugins und Extensions ausschließlich in **C#**. Siehe [Modding-Sprache (nur C#)](/wiki/reference/modding-language-requirement). - ## Hook-Naming -- **Zielkonvention:** `FMF..` (siehe [`CONTRIBUTING.md`](https://github.com/mleem97/gregFramework/blob/master/CONTRIBUTING.md)). -- **Registry:** [`FrikaModFramework/fmf_hooks.json`](https://github.com/mleem97/gregFramework/blob/master/FrikaModFramework/fmf_hooks.json). -- **Legacy-Runtime-Strings** können noch `FFM.*` in [`HookNames`](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF/HookNames.cs) nutzen, bis migriert. +- **Zielkonvention:** `FMF..` (siehe [`CONTRIBUTING.md`](https://github.com/mleem97/gregFramework/blob/main/CONTRIBUTING.md)). +- **Registry (Beispielpfad):** [`gregDataCenterExporter/FrikaModFramework/fmf_hooks.json`](https://github.com/mleem97/gregFramework/blob/main/gregDataCenterExporter/FrikaModFramework/fmf_hooks.json). +- **Legacy-Runtime-Strings** können noch `FFM.*` in [`HookNames.cs`](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/FrikaMF/HookNames.cs) nutzen, bis migriert. ## Mod starten -1. Neues Mod-Repo als Ordner `gregMod./` unter `gregFramework/` anlegen. -2. Templates aus `gregCore/Templates/` nutzen. +1. Neues Mod-Repo als `gregMod./` unter `gregFramework/` anlegen (neben `gregCore/` klonen oder anlegen). +2. Templates aus `gregCore/Templates/` nutzen (Spiegel unter `gregDataCenterExporter/Templates/` wo vorhanden). 3. Hook-Metadaten pflegen und Mod im eigenen Repo versionieren. ## Dokumentations-Site @@ -51,4 +48,4 @@ Im `gregWiki`-Root: `docker build -t gregwiki-docs .` und `docker run --rm -p 30 ### MCP -Siehe [`reference/mcp-server`](/wiki/reference/mcp-server) im Core (`gregCore/mcp-server/`). +Siehe [`reference/mcp-server`](/wiki/reference/mcp-server) — Implementierung unter **`gregCore/mcp-server/`** (Installation und `--data-root` laut `README.md` dort). diff --git a/i18n/de/docusaurus-plugin-content-docs/current/intro.md b/i18n/de/docusaurus-plugin-content-docs/current/intro.md index 63a4f40..3e526c6 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/intro.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/intro.md @@ -21,9 +21,11 @@ Diese Dokumentation beschreibt den **aktuellen Split-Stand**: `gregFramework/` a ## Repository-Hub - [Workspace-Karte](/wiki/workspace/) — Ordner → Repos -- Core: `gregCore/FrikaMF-StandaloneRepo/` +- Core: `gregCore/` (`framework/FrikaMF`, `mcp-server/`, `bridges/gregSta.RustBridge/`) - Mods: `gregMod./` (Split-Repos, direkt unter `gregFramework/`) - Extensions (FFM-Plugins): `gregExt./` (Split-Repos, direkt unter `gregFramework/`) +- Workshop-App: `gregModmanager/` (Gregtools Modmanager — `WorkshopUploader.exe`) +- Exporter/Templates: `gregDataCenterExporter/` - Wiki: `gregWiki/` ## Hooks und Releases @@ -36,10 +38,10 @@ Diese Dokumentation beschreibt den **aktuellen Split-Stand**: `gregFramework/` a ## Layout (Contributors) - [Repo-Inventar](/wiki/contributors/repo-inventory) — Projekt- und Repo-Übersicht -- Split-Konvention: `gregMod.`, `gregExt.`, `gregSta.` +- Split-Konvention: `gregMod.`, `gregExt.`, `gregSta.` (Rust-Bridge-Repo), plus Apps wie `gregModmanager/`, `gregDataCenterExporter/`, `gregIPAM/`, `gregStore/` ## Quellenmodell - **Authoring:** Inhalte liegen im **gregWiki**-Repo. - **Technische Wahrheit:** Runtime/Bridge-Details kommen aus **gregCore**. -- **RustBridge:** im Core unter `FrikaMF-StandaloneRepo/bridges/gregSta.RustBridge/`. +- **RustBridge:** `gregCore/bridges/gregSta.RustBridge/`. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/reference/modding-language-requirement.md b/i18n/de/docusaurus-plugin-content-docs/current/reference/modding-language-requirement.md index 48b7260..21478c3 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/reference/modding-language-requirement.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/reference/modding-language-requirement.md @@ -20,7 +20,7 @@ Das gilt für alles, was als **`gregMod.*`**, **`gregExt.*`** oder **`FFM.Plugin ## Was hiervon *nicht* betroffen ist -- Der **Framework-Kern** (`gregCore`) kann weiterhin **Nicht-C#**-Bestandteile enthalten (z. B. **Rust**-FFI unter `bridges/gregSta.RustBridge/`, Build-Skripte, Tools). Das ersetzt **nicht** Mod-/Plugin-/Extension-Logik außerhalb von C#. +- Der **Framework-Kern** (`gregCore`) kann weiterhin **Nicht-C#**-Bestandteile enthalten (z. B. **Rust**-FFI unter `gregCore/bridges/gregSta.RustBridge/`, Build-Skripte, Tools). Das ersetzt **nicht** Mod-/Plugin-/Extension-Logik außerhalb von C#. - **Dokumentation**, **Konfiguration** (JSON/YAML) und **Assets** zählen hier nicht als „Logik“. - **gregStore**, **gregWiki** und andere Nicht-In-Game-Stacks dürfen andere Sprachen nutzen. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/wiki/tools/workshop-uploader.md b/i18n/de/docusaurus-plugin-content-docs/current/wiki/tools/workshop-uploader.md index e31d39b..207f1d9 100644 --- a/i18n/de/docusaurus-plugin-content-docs/current/wiki/tools/workshop-uploader.md +++ b/i18n/de/docusaurus-plugin-content-docs/current/wiki/tools/workshop-uploader.md @@ -100,10 +100,10 @@ WorkshopUploader.exe --mode publish --path Die App wird als **eigenständige** Windows-Executable veröffentlicht — auf dem Zielrechner ist keine Installation von .NET-Runtime oder Windows App SDK erforderlich. ```bash -dotnet publish WorkshopUploader/WorkshopUploader.csproj -c Release -p:SelfContained=true -p:RuntimeIdentifier=win10-x64 +dotnet publish gregModmanager/WorkshopUploader.csproj -c Release -p:SelfContained=true -p:RuntimeIdentifier=win10-x64 ``` -Ausgabe: `WorkshopUploader/bin/Release/net9.0-windows10.0.19041.0/win10-x64/publish/` +Ausgabe: `gregModmanager/bin/Release/net9.0-windows10.0.19041.0/win10-x64/publish/` ### Alle Mods + Gregtools Modmanager in Workshop-Ordner bereitstellen @@ -121,7 +121,7 @@ pwsh -File scripts/Deploy-Release-ToDataCenter.ps1 -IncludeWorkshopUploader ## See also -- Repository README: [`WorkshopUploader/README.md`](https://github.com/mleem97/gregFramework/blob/master/WorkshopUploader/README.md) +- Repository-README: [`gregModmanager/README.md`](https://github.com/mleem97/gregFramework/blob/main/gregModmanager/README.md) (Produkt **Gregtools Modmanager**; `WorkshopUploader.csproj`) - [End-User Guide](/wiki/guides/players/enduser-workshop) - [Contributor Guide](/wiki/guides/contributors/contributor-workshop) - [Release](/wiki/guides/contributors/release)