mirror of
https://github.com/mleem97/gregWiki.git
synced 2026-04-10 19:19:18 +02:00
docs: update docusaurus configuration and documentation structure
- Revised the tagline in `docusaurus.config.js` for improved clarity on the documentation's focus. - Removed German localization support from the configuration to streamline the user experience. - Updated navigation items in the sidebar to better reflect the current structure, emphasizing player and developer resources. - Enhanced the README and various documentation files to clarify the repository layout and improve accessibility for users. - Adjusted links and descriptions throughout the documentation to ensure consistency and accuracy. This commit aims to enhance the overall clarity and usability of the documentation.
This commit is contained in:
57
README.md
57
README.md
@@ -1,16 +1,6 @@
|
|||||||
# gregWiki
|
# gregWiki — gregFramework documentation
|
||||||
|
|
||||||
Docusaurus site for **gregFramework** / Data Center modding: `docusaurus.config.js`, `sidebars.js`, React under `src/`, content under [`docs/`](./docs/). Published route base path: **`/wiki`**.
|
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`**.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 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/<RepoName>/`. 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
|
## Local development
|
||||||
|
|
||||||
@@ -25,50 +15,47 @@ Production build:
|
|||||||
npm run build
|
npm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
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`.
|
Content is edited directly under [`docs/`](./docs/). **Canonical architecture & doc rules:** [`docs/meta/system-architecture-principles.md`](./docs/meta/system-architecture-principles.md) (ModManager → Framework → Plugins → Mods). The old GitHub Wiki bulk-import scripts (`wiki:sync`, `wiki:normalize-i18n`) are no-ops; see [`docs/getting-started/documentation-layout.md`](./docs/getting-started/documentation-layout.md).
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Deployment (Coolify / CI)
|
## Deployment (Coolify / CI)
|
||||||
|
|
||||||
- **Default branch:** `main` — use this for new work and PRs.
|
- **Default branch:** `main` — use this for new work and PRs.
|
||||||
- **`master`:** may still exist for older deployments; in Coolify, set the branch to **`main`** when possible.
|
- **`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.
|
||||||
|
|
||||||
### Coolify (Dockerfile) — missing `/app/package.json`
|
### Coolify (Dockerfile) — avoid `/app/package.json` missing
|
||||||
|
|
||||||
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.
|
The image expects **`package.json` at the image root `/app`**. That only happens if the **Docker build context** is this repo (gregWiki), not a parent monorepo folder.
|
||||||
|
|
||||||
| Setting | Value |
|
| Setting | Value |
|
||||||
|---------|--------|
|
|--------|--------|
|
||||||
| **Dockerfile** | `Dockerfile` at the gregWiki root |
|
| **Dockerfile location** | `Dockerfile` (or `gregWiki/Dockerfile` if the Git repo is the parent workspace) |
|
||||||
| **Base directory** | **`.`** when only `gregWiki` is cloned. If gregWiki sits **next to** gregCore in the same clone, often set **`gregWiki`** as the subdirectory. |
|
| **Base directory / Root directory** | **`gregWiki`** when the cloned repo contains `gregCore/`, `gregWiki/`, … next to each other. If Coolify only clones **`mleem97/gregWiki`**, base directory is **`.`** (repo root). |
|
||||||
| **Volumes** | Do not use an empty host mount over `/app` that hides `package.json`. |
|
| **Do not** | Set build context to the parent `gregFramework` folder unless Dockerfile uses `COPY gregWiki/…` (this Dockerfile does not). |
|
||||||
|
| **Volumes** | Do **not** bind-mount an empty host path over `/app` — that hides `package.json` from the image. |
|
||||||
|
|
||||||
Symptom: `docker-entrypoint: ERROR: /app/package.json not found` → wrong context or volume.
|
Symptom: `docker-entrypoint: ERROR: /app/package.json not found` → wrong build context or a bad volume on `/app`.
|
||||||
|
|
||||||
---
|
## Docker
|
||||||
|
|
||||||
## Docker (local)
|
Build context **must** be this repository root (the folder that contains `package.json`):
|
||||||
|
|
||||||
Build context = **this** repository (folder that contains `package.json`):
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd path/to/gregWiki
|
cd path/to/gregWiki # directory that contains package.json
|
||||||
docker compose up --build
|
docker compose up --build
|
||||||
|
# or
|
||||||
|
docker build -t gregwiki-docs .
|
||||||
|
docker run --rm -p 3000:3000 gregwiki-docs
|
||||||
```
|
```
|
||||||
|
|
||||||
If gregWiki lives inside **gregFramework**, from the workspace root:
|
If the wiki lives inside a **gregFramework** workspace, run Compose from the parent folder:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd path/to/gregFramework
|
cd path/to/gregFramework
|
||||||
docker compose -f docker-compose.gregwiki.yml up --build
|
docker compose -f docker-compose.gregwiki.yml up --build
|
||||||
```
|
```
|
||||||
|
|
||||||
(`docker-compose.gregwiki.yml` sets `build.context: ./gregWiki`.)
|
(`docker-compose.gregwiki.yml` sets `build.context: ./gregWiki` and mounts `./gregWiki` to `/app` for dev.)
|
||||||
|
|
||||||
---
|
## Related repositories
|
||||||
|
|
||||||
## See also
|
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.
|
||||||
|
|
||||||
- [gregFramework README](../README.md) — flat layout `gregFramework/{RepoName}/`
|
|
||||||
- Source code and builds: **gregCore**, **gregMod.*** , **gregExt.*** as separate repositories (not only this documentation)
|
|
||||||
|
|||||||
36
docs/README.md
Normal file
36
docs/README.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Documentation layout (`docs/`)
|
||||||
|
|
||||||
|
This folder is the **single source of truth** for the public Docusaurus site. The app lives in the **gregWiki** repository root next to `docs/`; built pages are served under the **`/wiki`** base path.
|
||||||
|
|
||||||
|
## How content is organized
|
||||||
|
|
||||||
|
| Area | Path | Purpose |
|
||||||
|
|------|------|--------|
|
||||||
|
| **Landing** | [`intro` → `/wiki/docs`](/wiki/docs) | Site home (`/wiki/docs`). |
|
||||||
|
| **Topics hub** | [`topics/`](./topics/index.md) | Cross-cutting overviews (security, FFI, multiplayer, assets, meta). |
|
||||||
|
| **Mods & plugins** | [`mods/`](./mods/), [`plugins/`](./plugins/) | Gameplay mods (`FMF.*`) and framework plugins (`FFM.Plugin.*`). |
|
||||||
|
| **Releases** | [`releases/`](./releases/) | Per-artifact release notes. |
|
||||||
|
| **Reference** | [`reference/`](./reference/) | Hooks, naming, MCP, generated catalogs. |
|
||||||
|
| **Contributors** | [`contributors/`](./contributors/) | Repo layout, Docusaurus workflow, design system. |
|
||||||
|
| **Guides** | [`guides/`](./guides/players/overview.md) | Role-based paths (players, mod developers, contributors, sponsors). |
|
||||||
|
| **Roadmap** | [`roadmap/`](./roadmap/) | Planning docs. |
|
||||||
|
| **Meta** | [`meta/`](./meta/) | Workshop, devserver, backlog; [architecture principles](./meta/system-architecture-principles.md) (ModManager → Framework → Plugins → Mods). |
|
||||||
|
|
||||||
|
## URLs
|
||||||
|
|
||||||
|
- Doc id `intro` → `/wiki/docs` (see front matter).
|
||||||
|
- Most docs → `/wiki/<doc-path>` (e.g. `mods/framework` → `/wiki/mods/framework`).
|
||||||
|
|
||||||
|
## Scripts (repository root)
|
||||||
|
|
||||||
|
| Script | Role |
|
||||||
|
|--------|------|
|
||||||
|
| `wiki:sync` | **No-op** (legacy GitHub Wiki mirror removed). |
|
||||||
|
| `wiki:normalize-i18n` | **No-op** (same). |
|
||||||
|
| `wiki:refresh` | Runs both no-ops; safe for old CI hooks. |
|
||||||
|
|
||||||
|
Author new pages under `docs/`; use **git history** if you need text from the former bulk import.
|
||||||
|
|
||||||
|
## Locales
|
||||||
|
|
||||||
|
- **Language:** English only — files under `docs/`.
|
||||||
84
docs/developers.md
Normal file
84
docs/developers.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
id: developers
|
||||||
|
title: Developers & contributors
|
||||||
|
sidebar_label: Developers (hub)
|
||||||
|
slug: /developers
|
||||||
|
description: Technical documentation for mod authors, plugin authors, and repo contributors — hooks, workspace, releases, and internals.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Developers & contributors
|
||||||
|
|
||||||
|
Use this hub if you **build mods or plugins**, work on **framework** code, or contribute to **repositories and docs**.
|
||||||
|
|
||||||
|
**Players** should start with **[Play & mods](/wiki/guides/players/overview)** (sidebar above) — install, Workshop, troubleshooting.
|
||||||
|
|
||||||
|
**Architecture:** read **[System architecture & documentation principles](/wiki/meta/system-architecture-principles)** first — canonical **ModManager → Framework → Plugins → Mods** model, priorities (stability, maintainability, DX), and wiki writing rules.
|
||||||
|
|
||||||
|
## Workspace & onboarding
|
||||||
|
|
||||||
|
- [Getting started](/wiki/getting-started) — split-repo layout, build core, hook naming
|
||||||
|
- [Documentation layout](/wiki/getting-started/documentation-layout) — how `docs/` is organized
|
||||||
|
- [Workspace map](/wiki/workspace/) — folders on disk
|
||||||
|
|
||||||
|
## Framework
|
||||||
|
|
||||||
|
- [Architecture](/wiki/framework/architecture)
|
||||||
|
- [FMF hooks](/wiki/framework/fmf-hooks)
|
||||||
|
- [Hexmod](/wiki/framework/hexmod)
|
||||||
|
|
||||||
|
## Plugins (`FFM.Plugin.*`) & mods (`FMF.*`)
|
||||||
|
|
||||||
|
- [Plugins overview](/wiki/plugins/)
|
||||||
|
- [Mods overview](/wiki/mods/) — gameplay mods and [Framework](/wiki/mods/framework) article
|
||||||
|
|
||||||
|
## Guides (authors & repo)
|
||||||
|
|
||||||
|
- [Mod developers](/wiki/guides/mod-developers/overview)
|
||||||
|
- [Contributors (workflow)](/wiki/guides/contributors/topics-overview)
|
||||||
|
- [Contributor workshop](/wiki/guides/contributors/contributor-workshop)
|
||||||
|
- [Release guide](/wiki/guides/contributors/release)
|
||||||
|
- [Sponsors](/wiki/guides/sponsors/overview)
|
||||||
|
- [By audience (paths)](/wiki/guides/players/audiences-overview) · [Newbies](/wiki/audiences/newbies) · [Intermediates](/wiki/audiences/intermediates) · [Professionals](/wiki/audiences/professionals)
|
||||||
|
|
||||||
|
## Tools & meta (advanced)
|
||||||
|
|
||||||
|
- [Steam Workshop & tooling](/wiki/meta/Steam-Workshop-and-Tooling)
|
||||||
|
- [Devserver betas](/wiki/meta/devserver-betas)
|
||||||
|
- [IDEA backlog](/wiki/meta/IDEA_BACKLOG)
|
||||||
|
|
||||||
|
## Releases
|
||||||
|
|
||||||
|
- [Releases index](/wiki/releases)
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
- [Wiki mapping](/wiki/reference/wiki-mapping)
|
||||||
|
- [Mod store vision](/wiki/reference/mod-store-vision)
|
||||||
|
- [FMF hook naming](/wiki/reference/fmf-hook-naming)
|
||||||
|
- [FMF hooks catalog](/wiki/reference/fmf-hooks-catalog)
|
||||||
|
- [MCP server](/wiki/reference/mcp-server)
|
||||||
|
- [Release channels](/wiki/reference/release-channels) — also linked under **Play & mods**
|
||||||
|
- [Reference data files](/wiki/reference/reference-data-files)
|
||||||
|
- [Modding language requirement](/wiki/reference/modding-language-requirement)
|
||||||
|
|
||||||
|
## Topics
|
||||||
|
|
||||||
|
- [Topics hub](/wiki/topics/)
|
||||||
|
|
||||||
|
## Contributors (workflow)
|
||||||
|
|
||||||
|
- [Repo inventory](/wiki/contributors/repo-inventory)
|
||||||
|
- [Monorepo target layout](/wiki/contributors/monorepo-target-layout)
|
||||||
|
- [Design system](/wiki/contributors/luminescent-design-system)
|
||||||
|
- [Docusaurus workflow](/wiki/contributors/docusaurus-workflow)
|
||||||
|
- [Plugin submission audit](/wiki/contributors/plugin-submission-audit)
|
||||||
|
- [Sponsorship automation](/wiki/contributors/sponsorship-automation)
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
- [Unified roadmap](/wiki/roadmap/unified-roadmap)
|
||||||
|
- [Mod store stages](/wiki/roadmap/mod-store-stages)
|
||||||
|
|
||||||
|
## Sponsors
|
||||||
|
|
||||||
|
- [SPONSORS](/wiki/SPONSORS)
|
||||||
@@ -1,34 +1,45 @@
|
|||||||
---
|
---
|
||||||
title: Repository architecture
|
title: Repository architecture
|
||||||
sidebar_label: Repository architecture
|
sidebar_label: Repository architecture
|
||||||
description: Aktuelle Multi-Repo-Architektur mit `gregFramework` als Wrapper und klarer Repo-Trennung.
|
description: Current multi-repo layout with `gregFramework` as a local wrapper and clear repository boundaries.
|
||||||
---
|
---
|
||||||
|
|
||||||
## Modding language
|
## Modding language
|
||||||
|
|
||||||
Mods, MelonLoader-Plugins und Extensions liefern ihre **Logik ausschließlich in C#** (MelonLoader / .NET). Details und Abgrenzung zum Framework-Kern (z. B. Rust-Bridge): [Modding language (C# only)](/wiki/reference/modding-language-requirement).
|
Mods, MelonLoader plugins, and extensions ship their **logic in C# only** (MelonLoader / .NET). Scope vs framework core (e.g. Rust bridge): [Modding language (C# only)](/wiki/reference/modding-language-requirement).
|
||||||
|
|
||||||
## Layers
|
## Target runtime layers
|
||||||
|
|
||||||
|
Above the raw repositories, the **logical** model is **ModManager → Framework → Plugins → Mods** (see [System architecture & documentation principles](/wiki/meta/system-architecture-principles)):
|
||||||
|
|
||||||
|
| Layer | Role | Repo / folder |
|
||||||
|
|--------|--------|----------------|
|
||||||
|
| **ModManager** | MAUI front-end: manage mods/plugins, surface game status; talks to the framework through defined interfaces. | `gregModmanager/` |
|
||||||
|
| **Framework (SDK)** | Hooks, events, versioning, logging; bridge to IL2CPP / MelonLoader. | `gregCore/` |
|
||||||
|
| **Plugins** | Framework extensions (`FFM.Plugin.*`). | `gregExt.<Name>/` |
|
||||||
|
| **Mods** | User mods (`FMF.*`). | `gregMod.<Name>/` |
|
||||||
|
|
||||||
|
## On-disk repositories
|
||||||
|
|
||||||
| Layer | Role |
|
| Layer | Role |
|
||||||
| ------ | ------ |
|
| ------ | ------ |
|
||||||
| **Wrapper** | `gregFramework/` enthält lokal alle Einzel-Repositories. |
|
| **Wrapper** | `gregFramework/` holds local checkouts of individual repositories. |
|
||||||
| **Core** | `gregCore/` — **Framework-Kern**: Übersetzung, Hooks, Harmony/Event-Laufzeit, MCP, Templates und zugehörige Kernfunktionen. |
|
| **Core** | `gregCore/` — **framework core**: translation, hooks, Harmony/event runtime, MCP, templates, and related core features. |
|
||||||
| **Rust bridge** | In Core integriert unter `gregCore/bridges/gregSta.RustBridge/`. |
|
| **Rust bridge** | Integrated in core under `gregCore/bridges/gregSta.RustBridge/`. |
|
||||||
| **Mods** | `gregMod.<Name>/` — jeweils eigenes Repo direkt unter `gregFramework/`. |
|
| **Mods** | `gregMod.<Name>/` — one repo each, directly under `gregFramework/`. |
|
||||||
| **Extensions** | `gregExt.<Name>/` — jeweils eigenes Repo direkt unter `gregFramework/`. |
|
| **Extensions** | `gregExt.<Name>/` — one repo each, directly under `gregFramework/`. |
|
||||||
| **Docs** | `gregWiki/` als eigenes Repo für Dokumentation. |
|
| **Docs** | `gregWiki/` — documentation site repository. |
|
||||||
|
|
||||||
## Hook registry
|
## Hook registry
|
||||||
|
|
||||||
Hook-Naming und Registry bleiben fachlich im Core verankert; bei Split-Änderungen gilt immer der Core-Stand als Referenz.
|
Hook naming and the registry are owned by core; when repos split, **core** remains the source of truth.
|
||||||
|
|
||||||
## Tools
|
## Tools
|
||||||
|
|
||||||
- **Core tools:** `gregCore/tools/`
|
- **Core tools:** `gregCore/tools/`
|
||||||
- **MCP runtime:** `gregCore/mcp-server/`
|
- **MCP runtime:** `gregCore/mcp-server/`
|
||||||
- **Hook-/Mapping-Utilities:** ebenfalls unter Core-Tools, versioniert mit dem Core-Repo.
|
- **Hook / mapping utilities:** also under core tools, versioned with the core repo.
|
||||||
|
|
||||||
## Steam & Workshop
|
## Steam & Workshop
|
||||||
|
|
||||||
Workshop-Templates und Deployment-Skripte liegen im Core-Repo unter `gregCore/Templates/` und `gregCore/scripts/`.
|
Workshop templates and deployment scripts live in the core repo under `gregCore/Templates/` and `gregCore/scripts/`.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ sidebar_label: Getting started
|
|||||||
description: "Split-repo workspace: gregFramework layout, building the core, and where docs live."
|
description: "Split-repo workspace: gregFramework layout, building the core, and where docs live."
|
||||||
---
|
---
|
||||||
|
|
||||||
The workspace is **multi-repo** with a local `gregFramework/` folder containing standalone repositories, for example:
|
The workspace is **multi-repo** with a local `gregFramework/` folder containing standalone repositories. **Logical stack:** **ModManager → framework / SDK → plugins → mods** — see [System architecture & documentation principles](/wiki/meta/system-architecture-principles).
|
||||||
|
|
||||||
- `gregCore/` — core SDK (`gregCore/framework/FrikaMF.csproj`), MCP server under `gregCore/mcp-server/`
|
- `gregCore/` — core SDK (`gregCore/framework/FrikaMF.csproj`), MCP server under `gregCore/mcp-server/`
|
||||||
- `gregMod.<Name>/` — gameplay mods (`FMF.*`), **flat** next to `gregCore/` (legacy umbrella `gregMods/` is deprecated)
|
- `gregMod.<Name>/` — gameplay mods (`FMF.*`), **flat** next to `gregCore/` (legacy umbrella `gregMods/` is deprecated)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
id: documentation-layout
|
id: documentation-layout
|
||||||
title: Documentation layout (`docs/`)
|
title: Documentation layout (`docs/`)
|
||||||
sidebar_label: Documentation layout
|
sidebar_label: Documentation layout
|
||||||
description: How curated docs, guides, and the legacy GitHub Wiki mirror are organized under docs/.
|
description: How curated docs, guides, and reference material are organized under docs/.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Documentation layout (`docs/`)
|
# Documentation layout (`docs/`)
|
||||||
@@ -26,34 +26,17 @@ This folder is the **single source of truth** for the public Docusaurus site. Th
|
|||||||
| **Contributors** | [`contributors/`](../contributors/repo-inventory.md) | Repo inventory, Docusaurus workflow, design system. |
|
| **Contributors** | [`contributors/`](../contributors/repo-inventory.md) | Repo inventory, Docusaurus workflow, design system. |
|
||||||
| **Roadmap** | [`roadmap/`](../roadmap/unified-roadmap.md) | Planning docs. |
|
| **Roadmap** | [`roadmap/`](../roadmap/unified-roadmap.md) | Planning docs. |
|
||||||
| **Topics hub** | [`topics/`](../topics/index.md) | Cross-cutting overviews (assets, multiplayer, security, …). |
|
| **Topics hub** | [`topics/`](../topics/index.md) | Cross-cutting overviews (assets, multiplayer, security, …). |
|
||||||
| **Meta** | [`meta/`](../meta/Steam-Workshop-and-Tooling.md) | Workshop tooling notes, devserver API, backlog. |
|
| **Meta** | [`meta/`](../meta/Steam-Workshop-and-Tooling.md) | Workshop tooling notes, devserver API, backlog; **[architecture principles](../meta/system-architecture-principles.md)** (stack model & doc rules). |
|
||||||
| **Legacy** | [`legacy/`](../legacy/index.md) | GitHub Wiki mirror under `legacy/wiki-import/`. |
|
|
||||||
|
|
||||||
## Legacy GitHub Wiki (`docs/legacy/wiki-import/`)
|
|
||||||
|
|
||||||
Long-form pages mirrored from the **GitHub Wiki** live here (synced from `.wiki/`).
|
|
||||||
|
|
||||||
1. Clone the wiki working tree as **`../.wiki/`** under `gregFramework/` (same level as sibling repos).
|
|
||||||
2. From **gregWiki** root: `npm run wiki:refresh` (or `wiki:sync` → `wiki:normalize-i18n`).
|
|
||||||
3. German paired pages live under `i18n/de/docusaurus-plugin-content-docs/current/legacy/wiki-import/` after normalization.
|
|
||||||
4. Prefer **new curated docs** under `guides/`, `reference/`, or `framework/`; keep bulk legacy material in `legacy/wiki-import/` until migrated.
|
|
||||||
|
|
||||||
Details: [`topics/wiki-import/overview`](../topics/wiki-import/overview.md).
|
|
||||||
|
|
||||||
## URLs
|
## URLs
|
||||||
|
|
||||||
- Doc id `intro` → `/wiki/docs`.
|
- Doc id `intro` → `/wiki/docs`.
|
||||||
- Typical doc → `/wiki/<doc-id-path>` (e.g. `mods/framework` → `/wiki/mods/framework`).
|
- Typical doc → `/wiki/<doc-id-path>` (e.g. `mods/framework` → `/wiki/mods/framework`).
|
||||||
|
|
||||||
## Scripts (gregWiki root)
|
|
||||||
|
|
||||||
| Script | Role |
|
|
||||||
|--------|------|
|
|
||||||
| `wiki:sync` | Copies `.wiki/` → `docs/legacy/wiki-import/`. |
|
|
||||||
| `wiki:normalize-i18n` | Splits DE/EN pairs into default locale + `i18n/de/...`. |
|
|
||||||
| `write-wiki-import-category-keys` | Refreshes `_category_.json` keys under imported trees. |
|
|
||||||
|
|
||||||
## Locales
|
## Locales
|
||||||
|
|
||||||
- **Default:** `en` — files under `docs/`.
|
- **Language:** English only — all curated content lives under `docs/`.
|
||||||
- **Deutsch (`de`):** overrides under `i18n/de/docusaurus-plugin-content-docs/current/` mirroring `docs/` paths where translated files exist; otherwise Docusaurus falls back to English.
|
|
||||||
|
## Historical note
|
||||||
|
|
||||||
|
The former GitHub Wiki bulk import under `docs/legacy/wiki-import/` has been **removed**. Author new material under the folders above; use Git history if you need obsolete text.
|
||||||
|
|||||||
@@ -6,14 +6,14 @@ description: Monorepo layout, design system, Docusaurus workflow, plugin audits.
|
|||||||
|
|
||||||
# Contributors (workflow)
|
# Contributors (workflow)
|
||||||
|
|
||||||
**Mitwirkende am Repository** — Framework, Website, CI, Plugins. Überblick über alle Rollen (inkl. Spieler, Moddevs, Sponsoren): [By audience](/wiki/guides/players/audiences-overview).
|
**Repository contributors** — framework, website, CI, plugins. Role overview (including players, mod developers, sponsors): [By audience](/wiki/guides/players/audiences-overview).
|
||||||
|
|
||||||
Operational docs for people changing the framework, site, or release pipeline.
|
Operational docs for people changing the framework, site, or release pipeline.
|
||||||
|
|
||||||
|
- [System architecture & documentation principles](/wiki/meta/system-architecture-principles) — layer model, priorities, wiki rules (**required reading** for substantive doc changes).
|
||||||
- [Repository inventory](/wiki/contributors/repo-inventory) — current layout snapshot.
|
- [Repository inventory](/wiki/contributors/repo-inventory) — current layout snapshot.
|
||||||
- [Monorepo target layout](/wiki/contributors/monorepo-target-layout) — intended structure.
|
- [Monorepo target layout](/wiki/contributors/monorepo-target-layout) — intended structure.
|
||||||
- [Luminescent design system](/wiki/contributors/luminescent-design-system) — UI tokens for the site.
|
- [Luminescent design system](/wiki/contributors/luminescent-design-system) — UI tokens for the site.
|
||||||
- [Docusaurus workflow](/wiki/contributors/docusaurus-workflow) — edit/build the wiki site.
|
- [Docusaurus workflow](/wiki/contributors/docusaurus-workflow) — edit/build the wiki site.
|
||||||
- [Plugin submission audit](/wiki/contributors/plugin-submission-audit) — checklist for new plugins.
|
- [Plugin submission audit](/wiki/contributors/plugin-submission-audit) — checklist for new plugins.
|
||||||
|
|
||||||
- [Contributor workshop](./contributor-workshop) — branching, reviews, and release expectations.
|
- [Contributor workshop](./contributor-workshop) — branching, reviews, and release expectations.
|
||||||
|
|||||||
@@ -6,8 +6,9 @@ description: Getting started, mod config, debugging — curated docs for FMF mod
|
|||||||
|
|
||||||
# Mod developers
|
# Mod developers
|
||||||
|
|
||||||
**Mod-Autorinnen und -Autoren** — eigene Mods bauen (Hooks, Konfiguration, Debug). Überblick über alle Rollen: [By audience](/wiki/guides/players/audiences-overview).
|
**Mod authors** — build your own mods (hooks, configuration, debugging). Role overview: [By audience](/wiki/guides/players/audiences-overview).
|
||||||
|
|
||||||
|
- [System architecture & documentation principles](/wiki/meta/system-architecture-principles) — layer model **ModManager → Framework → Plugins → Mods**, priorities, wiki rules
|
||||||
- [By audience — intermediates](/wiki/audiences/intermediates) and [professionals](/wiki/audiences/professionals)
|
- [By audience — intermediates](/wiki/audiences/intermediates) and [professionals](/wiki/audiences/professionals)
|
||||||
- [Framework overview](/wiki/mods/framework) — runtime capabilities and repo layout
|
- [Framework overview](/wiki/mods/framework) — runtime capabilities and repo layout
|
||||||
- [FMF hooks](/wiki/framework/fmf-hooks) — hook surface (generated article)
|
- [FMF hooks](/wiki/framework/fmf-hooks) — hook surface (generated article)
|
||||||
|
|||||||
@@ -2,28 +2,28 @@
|
|||||||
id: audiences-overview
|
id: audiences-overview
|
||||||
title: By audience
|
title: By audience
|
||||||
sidebar_label: By audience
|
sidebar_label: By audience
|
||||||
description: Vier Rollen — Spieler, Moddevs, Contributor, Sponsoren — plus Erfahrungsstufen (Newbies bis Pros).
|
description: Four roles — players, mod developers, contributors, sponsors — plus experience levels (newbies through pros).
|
||||||
---
|
---
|
||||||
|
|
||||||
# By audience
|
# By audience
|
||||||
|
|
||||||
Die Dokumentation richtet sich an **vier Hauptrollen** (und an Erfahrungsstufen darunter). Die meisten Seiten sind **Englisch**; ausgewählte Einstiege gibt es auch auf **Deutsch** (z. B. in dieser Übersicht und in `i18n/de`).
|
Documentation is aimed at **four primary roles** (and experience levels under each). All curated pages are **English**.
|
||||||
|
|
||||||
## Die vier Rollen
|
## The four roles
|
||||||
|
|
||||||
| Rolle | Für wen? | Einstieg |
|
| Role | Who | Start here |
|
||||||
|--------|----------|----------|
|
|--------|----------|----------|
|
||||||
| **Spieler** (End users) | Installation, Mods nutzen, Troubleshooting | [End users (hub)](./overview) · [End-user workshop](./enduser-workshop) |
|
| **Players** (end users) | Install, use mods, troubleshooting | [End users (hub)](./overview) · [End-user workshop](./enduser-workshop) |
|
||||||
| **Mod-Entwickler** (Mod developers) | Mods bauen, Hooks, Konfiguration, Debug | [Mod developers (hub)](../mod-developers/overview) · [Framework](/wiki/mods/framework) |
|
| **Mod developers** | Build mods, hooks, configuration, debugging | [Mod developers (hub)](../mod-developers/overview) · [Framework](/wiki/mods/framework) |
|
||||||
| **Contributor** (Repo & Framework) | PRs, Doku, Plugins, CI | [Contributors (workflow)](../contributors/topics-overview) · [Repo inventory](/wiki/contributors/repo-inventory) |
|
| **Contributors** (repo & framework) | PRs, docs, plugins, CI | [Contributors (workflow)](../contributors/topics-overview) · [Repo inventory](/wiki/contributors/repo-inventory) |
|
||||||
| **Sponsorinnen & Sponsoren** | Unterstützung, Transparenz | [Sponsors (hub)](../sponsors/overview) |
|
| **Sponsors** | Support, transparency | [Sponsors (hub)](../sponsors/overview) |
|
||||||
|
|
||||||
## Erfahrungsstufen (alle Rollen)
|
## Experience levels (all roles)
|
||||||
|
|
||||||
- [Newbies](/wiki/audiences/newbies) — erste Schritte, Begriffe, sichere Defaults.
|
- [Newbies](/wiki/audiences/newbies) — first steps, terminology, safe defaults.
|
||||||
- [Intermediates](/wiki/audiences/intermediates) — Workflows, Tooling, typische Stolpersteine.
|
- [Intermediates](/wiki/audiences/intermediates) — workflows, tooling, common pitfalls.
|
||||||
- [Professionals](/wiki/audiences/professionals) — Architektur, FFI, Performance, Release-Kanäle.
|
- [Professionals](/wiki/audiences/professionals) — architecture, FFI, performance, release channels.
|
||||||
|
|
||||||
## Thematische Übersicht
|
## Thematic overview
|
||||||
|
|
||||||
- [Topics hub](/wiki/topics/) — Security, Multiplayer, Assets, FFI, Roadmap, Meta.
|
- [Topics hub](/wiki/topics/) — security, multiplayer, assets, FFI, roadmap, meta.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: FAQs, install paths, troubleshooting — entry point for players us
|
|||||||
|
|
||||||
# End users
|
# End users
|
||||||
|
|
||||||
**Spielerinnen und Spieler** — Mods installieren und spielen, ohne am Framework mitzuentwickeln. Überblick über alle Rollen: [By audience](/wiki/guides/players/audiences-overview).
|
**Players** — install and play with mods without developing the framework. Role overview: [By audience](/wiki/guides/players/audiences-overview).
|
||||||
|
|
||||||
- [By audience — newbies](/wiki/audiences/newbies)
|
- [By audience — newbies](/wiki/audiences/newbies)
|
||||||
- [End-user workshop](/wiki/guides/players/enduser-workshop) — install, updates, Workshop
|
- [End-user workshop](/wiki/guides/players/enduser-workshop) — install, updates, Workshop
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
---
|
---
|
||||||
title: Sponsors & support
|
title: Sponsors & support
|
||||||
sidebar_label: Sponsors (hub)
|
sidebar_label: Sponsors (hub)
|
||||||
description: Für Unterstützerinnen und Unterstützer — Sponsoring, Transparenz, Anlaufstellen.
|
description: For supporters — sponsorship, transparency, where to start.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Sponsors & support
|
# Sponsors & support
|
||||||
|
|
||||||
Die Community finanziert u. a. Infrastruktur, Tools und Zeit für Pflege der Doku und des Frameworks. Hier startest du als **potenzielle Sponsorin oder Sponsor** (oder als Spielerin, die nur informieren möchte, wohin Unterstützung fließt).
|
The community funds infrastructure, tools, and time to maintain documentation and the framework. Use this page if you are a **potential sponsor** (or a player who wants to see where support goes).
|
||||||
|
|
||||||
## Kurzüberblick
|
## At a glance
|
||||||
|
|
||||||
- **GitHub:** [mleem97/gregFramework](https://github.com/mleem97/gregFramework) — Sponsoring- und Community-Richtlinien stehen in `README`, `LICENSE` und `CONTRIBUTING`.
|
- **GitHub:** [mleem97/gregFramework](https://github.com/mleem97/gregFramework) — sponsorship and community policies are in `README`, `LICENSE`, and `CONTRIBUTING`.
|
||||||
- **Transparenz:** Release-Notes und [Release-Kanäle](/wiki/reference/release-channels) beschreiben, wie Builds verteilt werden.
|
- **Transparency:** Release notes and [Release channels](/wiki/reference/release-channels) describe how builds are distributed.
|
||||||
- **Rechtliches:** [Security & legal](/wiki/topics/security-legal/overview) — verbindliche Texte liegen im Repository, nicht nur im Wiki.
|
- **Legal:** [Security & legal](/wiki/topics/security-legal/overview) — binding text lives in the repository, not only in the wiki.
|
||||||
|
|
||||||
:::note Zielgruppe
|
:::note Audience
|
||||||
Diese Seite richtet sich an **Sponsorinnen, Sponsoren und Fördernde**. Spielerinnen und Spieler finden den Einstieg unter [End users](/wiki/guides/players/overview); Mod-Autoren unter [Mod developers](/wiki/guides/mod-developers/overview); Mitwirkende am Repo unter [Contributors (workflow)](/wiki/guides/contributors/topics-overview).
|
This page is for **sponsors and supporters**. Players start at [End users](/wiki/guides/players/overview); mod authors at [Mod developers](/wiki/guides/mod-developers/overview); repo contributors at [Contributors (workflow)](/wiki/guides/contributors/topics-overview).
|
||||||
:::
|
:::
|
||||||
|
|||||||
@@ -1,47 +1,29 @@
|
|||||||
---
|
---
|
||||||
id: intro
|
id: intro
|
||||||
title: gregFramework documentation
|
title: Documentation
|
||||||
slug: /docs
|
slug: /docs
|
||||||
description: Entry point for the split-repo workspace — core, mods, extensions, and this wiki.
|
description: Help for Data Center players using mods — install, Workshop, troubleshooting. Technical docs for authors are separated.
|
||||||
---
|
---
|
||||||
|
|
||||||
This documentation describes the **current split layout**: a local `gregFramework/` workspace with separate repositories for **core**, **mods**, **extensions**, and **wiki**. It is written for **players**, **mod developers**, **contributors**, and **sponsors**.
|
# Welcome
|
||||||
|
|
||||||
## Who is this for?
|
**gregFramework** is the modding stack for *Data Center*. If you **play with mods**, you only need a short path: install, browse the Workshop, and fix common issues.
|
||||||
|
|
||||||
| Audience | Start here |
|
## Players — start here
|
||||||
|----------|------------|
|
|
||||||
| **Players** — install, play, troubleshoot | [End users (hub)](./guides/players/overview.md) · [End-user workshop](./guides/players/enduser-workshop.md) |
|
|
||||||
| **Mod developers** — build mods, hooks, debugging | [Mod developers (hub)](./guides/mod-developers/overview.md) · [Framework](./mods/framework.md) · [FMF hooks](/wiki/framework/fmf-hooks) |
|
|
||||||
| **Contributors** — PRs, docs, plugins, CI | [Contributors (workflow)](./guides/contributors/topics-overview.md) · [Contributor workshop](./guides/contributors/contributor-workshop.md) |
|
|
||||||
| **Sponsors** — support & transparency | [Sponsors (hub)](./guides/sponsors/overview.md) · [GitHub Sponsors](https://github.com/sponsors) (project policies in repo `LICENSE` / `CONTRIBUTING`) |
|
|
||||||
|
|
||||||
**Experience tracks** (newbies → pros): [By audience](./guides/players/audiences-overview.md) → [Newbies](/wiki/audiences/newbies), [Intermediates](/wiki/audiences/intermediates), [Professionals](/wiki/audiences/professionals).
|
1. **[End users](/wiki/guides/players/overview)** — install, update, troubleshooting
|
||||||
|
2. **[WorkshopManager guide](/wiki/guides/players/enduser-workshop)** — browse and install mods
|
||||||
|
3. **[Release channels](/wiki/reference/release-channels)** — Steam Workshop vs GitHub
|
||||||
|
4. **[WorkshopManager (tool)](/wiki/tools/workshop-uploader)** — desktop app for Workshop content
|
||||||
|
|
||||||
## Repository hub
|
[**Mod catalog**](/mods) lists modules with links to docs and downloads.
|
||||||
|
|
||||||
- [Workspace map](./workspace/index.mdx) — how folders map to repos
|
## Mod authors, plugins, and repo work
|
||||||
- Core: `gregCore/` (`framework/FrikaMF`, `mcp-server/`, `bridges/gregSta.RustBridge/`)
|
|
||||||
- Mods: `gregMod.<Name>/` (split repos, directly under `gregFramework/`)
|
|
||||||
- Extensions (FFM plugins): `gregExt.<Name>/` (split repos, directly under `gregFramework/`)
|
|
||||||
- Workshop app: `gregModmanager/` (Gregtools Modmanager — `WorkshopUploader.exe`)
|
|
||||||
- Exporter / templates: `gregDataCenterExporter/`
|
|
||||||
- Wiki: `gregWiki/` (this site)
|
|
||||||
|
|
||||||
## Hooks and releases
|
Everything for **building mods**, **FFM plugins**, hooks, CI, and **contributing** lives in one place:
|
||||||
|
|
||||||
- [FMF hook naming](./reference/fmf-hook-naming.md) — `FMF.<Domain>.…` and legacy `FFM.*`
|
**[Developers & contributors →](/wiki/developers)**
|
||||||
- [FMF hooks catalog](./reference/fmf-hooks-catalog.md) — generated from core `HookNames.cs`
|
|
||||||
- [Release channels](./reference/release-channels.md) — Steam Workshop vs GitHub (beta)
|
|
||||||
- [MCP server](./reference/mcp-server.md) — optional LLM/IDE tooling over docs + `fmf_hooks.json`
|
|
||||||
|
|
||||||
## Layout (contributors)
|
Technical docs follow one stack model: **ModManager (MAUI) → framework / SDK → plugins → mods** — explained in **[System architecture & documentation principles](/wiki/meta/system-architecture-principles)**.
|
||||||
|
|
||||||
- [Repo inventory](./contributors/repo-inventory.md) — project and repository overview
|
Do not use the sidebar’s technical sections unless you are developing — the default view stays short on purpose.
|
||||||
- Split naming: `gregMod.<Name>`, `gregExt.<Name>`, `gregSta.<Name>` (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:** `gregCore/bridges/gregSta.RustBridge/`.
|
|
||||||
|
|||||||
67
docs/meta/system-architecture-principles.md
Normal file
67
docs/meta/system-architecture-principles.md
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
title: System architecture & documentation principles
|
||||||
|
sidebar_label: Architecture principles
|
||||||
|
description: Canonical stack model (ModManager → Framework → Plugins → Mods), priorities, and how wiki pages should align.
|
||||||
|
---
|
||||||
|
|
||||||
|
# System architecture & documentation principles
|
||||||
|
|
||||||
|
This page is the **canonical reference** for how gregFramework documentation describes the stack: **ModManager (MAUI) → modding framework / SDK → plugins → mods**, plus priorities (stability first), the hook-proxy idea, and **authoring rules**. All wiki content must be written in **English** only.
|
||||||
|
|
||||||
|
Detail pages (individual mods, plugins, releases) should align with this model without repeating the full narrative each time — **link here** for the big picture.
|
||||||
|
|
||||||
|
## Layer model (target architecture)
|
||||||
|
|
||||||
|
Describe the runtime as a **layered system**, not a flat list of DLLs:
|
||||||
|
|
||||||
|
| Layer | Role | Typical workspace artifacts |
|
||||||
|
|--------|--------|------------------------------|
|
||||||
|
| **1. ModManager (front-end)** | UI to enable/disable mods and plugins, ordering, configuration, game state (e.g. no save loaded, level loading). Talks to the framework through **well-defined** interfaces (shared library, config files, IPC, named pipes, HTTP — depending on implementation). | `gregModmanager/` — **Gregtools Modmanager** (MAUI, e.g. `WorkshopUploader.csproj`). |
|
||||||
|
| **2. Modding framework / SDK** | Stable API surface for plugins and mods: lifecycle, events, versioning, dependencies, logging, error handling. Hooks Unity / MelonLoader / IL2CPP and **maps** low-level events to **framework events** (hook proxy). | `gregCore/` — e.g. `FrikaMF`, Harmony integration, bridges (e.g. Rust), hook registry. |
|
||||||
|
| **3. Plugins** | Extend the framework (new services, hook types, optional ModManager UI). Clear extension points. | `FFM.Plugin.*`, repos **`gregExt.<Name>/`**. |
|
||||||
|
| **4. Mods** | User extensions via the **documented** framework API; avoid direct IL2CPP details where possible; load in isolation; soft-fail on errors. | `FMF.*`, repos **`gregMod.<Name>/`**. |
|
||||||
|
|
||||||
|
**Mnemonic:** `ModManager → Framework → Plugins → Mods`.
|
||||||
|
|
||||||
|
### Hook proxy and hotloading (concept)
|
||||||
|
|
||||||
|
- The framework should map **Unity / IL2CPP events** (MelonLoader hooks, patches) to **stable, named framework events** (e.g. level loaded, scene changed, update) so mods do not couple to concrete Unity signatures.
|
||||||
|
- **Hotloading** mods is a target state: load only in **safe** states (e.g. no active save, menu), re-bind on level change — exact rules live in framework code and should appear in technical articles **only** when anchored in the repo.
|
||||||
|
|
||||||
|
These wiki pages do **not** mandate a specific implementation; they **align** authors and readers on the same vocabulary.
|
||||||
|
|
||||||
|
## Technical context (expertise areas)
|
||||||
|
|
||||||
|
Documentation and reviews in the gregFramework space typically assume:
|
||||||
|
|
||||||
|
- **C# / .NET** (modern language features, best practices)
|
||||||
|
- **Unity with IL2CPP**
|
||||||
|
- **MelonLoader** and modular **FMF** / **FFM** stacks
|
||||||
|
- **.NET MAUI** for the ModManager (deployment, installer, release vs debug issues)
|
||||||
|
- Debugging, logging, tracing, crash analysis (including outside the IDE)
|
||||||
|
|
||||||
|
## Priorities (when trade-offs arise)
|
||||||
|
|
||||||
|
When documentation or API design must choose, use this **order**:
|
||||||
|
|
||||||
|
1. **Stability and fault tolerance** — faulty mods must not tear down the whole system arbitrarily; clear error paths and logging.
|
||||||
|
2. **Clean architecture and maintainability** — clear layers, documented interfaces.
|
||||||
|
3. **Developer experience** — understandable APIs, hooks, logging for mod authors.
|
||||||
|
4. **Performance and low invasiveness** toward the game.
|
||||||
|
5. **Extensibility and long-term compatibility** — versioning, dependency rules.
|
||||||
|
|
||||||
|
## Rules for wiki authors
|
||||||
|
|
||||||
|
- **Terminology:** Always name the layer (ModManager, framework, plugin, mod). Do not conflate “plugin” and “mod” without context.
|
||||||
|
- **Language:** **English only** for all user-facing documentation in `docs/`, the homepage, and UI strings in this site.
|
||||||
|
- **Repos:** Keep paths such as `gregCore/`, `gregMod.*`, `gregExt.*`, `gregModmanager/` consistent with the [Workspace map](/wiki/workspace) and [Repository architecture](/wiki/framework/architecture).
|
||||||
|
- **No invented APIs:** New pages must not promise hooks or events that are not evidenced in core/registry — link to [FMF hooks](/wiki/framework/fmf-hooks) and the [Hooks catalog](/wiki/reference/fmf-hooks-catalog).
|
||||||
|
- **Cross-links:** Entry [Developers & contributors](/wiki/developers), architecture [Repository architecture](/wiki/framework/architecture), language rule [Modding language (C# only)](/wiki/reference/modding-language-requirement).
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [Repository architecture](/wiki/framework/architecture) — multi-repo layout, core, bridges
|
||||||
|
- [Getting started](/wiki/getting-started) — workspace and build
|
||||||
|
- [Mods — Framework](/wiki/mods/framework) — runtime from mod authors’ perspective
|
||||||
|
- [Plugins overview](/wiki/plugins/) — `FFM.Plugin.*`
|
||||||
|
- [Mod developers](/wiki/guides/mod-developers/overview)
|
||||||
@@ -101,4 +101,4 @@ Output lands in the standard MelonLoader `Mods/` folder as configured in the `.c
|
|||||||
## Sources
|
## Sources
|
||||||
|
|
||||||
- Module path: `gregMod.HexLabelMod/`
|
- Module path: `gregMod.HexLabelMod/`
|
||||||
- Relatedocs: [`Standalone Mods`](/wiki/legacy/wiki-import/StandaloneMods)
|
- See also: [Mods overview](/wiki/mods/)
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ sidebar_label: Framework
|
|||||||
|
|
||||||
**Language:** mod, plugin, and extension **logic must be written in C#** — see [Modding language (C# only)](/wiki/reference/modding-language-requirement).
|
**Language:** mod, plugin, and extension **logic must be written in C#** — see [Modding language (C# only)](/wiki/reference/modding-language-requirement).
|
||||||
|
|
||||||
|
**Stack position:** gameplay **mods** sit on top of **plugins** and the **framework SDK**; the **ModManager** (MAUI) is the out-of-game front-end — see [System architecture & documentation principles](/wiki/meta/system-architecture-principles).
|
||||||
|
|
||||||
The core `FrikaMF` runtime provides:
|
The core `FrikaMF` runtime provides:
|
||||||
|
|
||||||
- Harmony patch integration for gameplay hooks
|
- Harmony patch integration for gameplay hooks
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: Standalone MelonLoader gameplay mods (FMF.*) — separate from FFM
|
|||||||
|
|
||||||
# Gameplay mods
|
# Gameplay mods
|
||||||
|
|
||||||
These pages document **gameplay mods** (`FMF.*` assemblies). **Source of truth** on disk: split-repo folders **`gregMod.<Name>/`** directly under the gregFramework workspace root (not under a legacy `gregMods/` umbrella). They are **not** the same as [FFM plugins](../plugins/index.md), which extend the framework inside the game process.
|
These pages document **gameplay mods** (`FMF.*` assemblies) — **layer 4** in **ModManager → Framework → Plugins → Mods** ([architecture principles](/wiki/meta/system-architecture-principles)). **Source of truth** on disk: split-repo folders **`gregMod.<Name>/`** directly under the gregFramework workspace root (not under a legacy `gregMods/` umbrella). They are **not** the same as [FFM plugins](../plugins/index.md), which extend the framework inside the game process.
|
||||||
|
|
||||||
## Mods
|
## Mods
|
||||||
|
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ Provides export-focused tooling for asset-related workflows.
|
|||||||
## Sources
|
## Sources
|
||||||
|
|
||||||
- Module path: `gregExt.AssetExporter/`
|
- Module path: `gregExt.AssetExporter/`
|
||||||
- Overview: [`Standalone Mods`](/wiki/legacy/wiki-import/StandaloneMods)
|
- See also: [Mods overview](/wiki/mods/)
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ Contains **multiplayer / networking** runtime (bridge, sync). **Not** the same a
|
|||||||
## Sources
|
## Sources
|
||||||
|
|
||||||
- Module path: `gregExt.Multiplayer/`
|
- Module path: `gregExt.Multiplayer/`
|
||||||
- Roadmap context: [`Steamworks P2P Multiplayer Roadmap`](/wiki/legacy/wiki-import/Steamworks-P2P-Multiplayer-Roadmap)
|
- Roadmap: [Unified roadmap](/wiki/roadmap/unified-roadmap) · [Multiplayer topic](/wiki/topics/multiplayer-and-networking/overview)
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ Hosts standalone player-model specific behavior and integration.
|
|||||||
## Sources
|
## Sources
|
||||||
|
|
||||||
- Module path: `gregExt.PlayerModels/`
|
- Module path: `gregExt.PlayerModels/`
|
||||||
- Debug docs: [`Mod Developer Debug`](/wiki/legacy/wiki-import/Mod-Developer-Debug)
|
- Debug: [Mod developers (hub)](/wiki/guides/mod-developers/overview)
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ Contains **sysadmin-oriented UI** features (Unity UI modernization, mod settings
|
|||||||
## Sources
|
## Sources
|
||||||
|
|
||||||
- Module path: `gregExt.Sysadmin/`
|
- Module path: `gregExt.Sysadmin/`
|
||||||
- Framework context: [`Framework Features & Use Cases`](/wiki/legacy/wiki-import/Framework-Features-Use-Cases)
|
- Framework context: [Framework](/wiki/mods/framework)
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ Focuses on standalone web UI bridge integration flows.
|
|||||||
## Sources
|
## Sources
|
||||||
|
|
||||||
- Module path: `gregExt.WebUIBridge/`
|
- Module path: `gregExt.WebUIBridge/`
|
||||||
- Reference: [`Web UI Bridge (DC2WEB)`](/wiki/legacy/wiki-import/Web-UI-Bridge)
|
- Related: [Multiplayer & networking hub](/wiki/topics/multiplayer-and-networking/overview)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: FFM.Plugin.* modules that extend the framework runtime — distinct
|
|||||||
|
|
||||||
# Framework plugins (`FFM.Plugin.*`)
|
# Framework plugins (`FFM.Plugin.*`)
|
||||||
|
|
||||||
These **plugins** ship as `FFM.Plugin.*` assemblies and extend the **framework runtime**. **Source of truth** on disk: one split-repo folder per plugin under the workspace root, named **`gregExt.<Name>/`** (for example `gregExt.AssetExporter/`). Mirrored copies may also exist under `gregCore/plugins/` for solution builds. Deploy built DLLs under the game’s FMF plugin path (see [Game folder layout](/wiki/topics/meta/game-folder-layout)).
|
These **plugins** ship as `FFM.Plugin.*` assemblies and extend the **framework runtime** (layer **3** in **ModManager → Framework → Plugins → Mods** — [architecture principles](/wiki/meta/system-architecture-principles)). **Source of truth** on disk: one split-repo folder per plugin under the workspace root, named **`gregExt.<Name>/`** (for example `gregExt.AssetExporter/`). Mirrored copies may also exist under `gregCore/plugins/` for solution builds. Deploy built DLLs under the game’s FMF plugin path (see [Game folder layout](/wiki/topics/meta/game-folder-layout)).
|
||||||
|
|
||||||
Gameplay mods (`FMF.*`) are documented under **[Mods](../mods/index.md)** — not here.
|
Gameplay mods (`FMF.*`) are documented under **[Mods](../mods/index.md)** — not here.
|
||||||
|
|
||||||
|
|||||||
@@ -26,5 +26,6 @@ That applies to anything shipped as a **`gregMod.*`**, **`gregExt.*`**, or **`FF
|
|||||||
|
|
||||||
## See also
|
## See also
|
||||||
|
|
||||||
|
- [System architecture & documentation principles](/wiki/meta/system-architecture-principles) — stack model and documentation rules
|
||||||
- [Framework](/wiki/mods/framework) — runtime surface for mod authors
|
- [Framework](/wiki/mods/framework) — runtime surface for mod authors
|
||||||
- [FMF hook naming](/wiki/reference/fmf-hook-naming)
|
- [FMF hook naming](/wiki/reference/fmf-hook-naming)
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ description: FFI, hook lists, naming — curated reference for mod and plugin au
|
|||||||
|
|
||||||
# FFI, hooks & Lua
|
# FFI, hooks & Lua
|
||||||
|
|
||||||
|
The framework is intended to act as a **hook proxy**: Unity / IL2CPP events are surfaced as **stable framework events** for mods — see [System architecture & documentation principles](/wiki/meta/system-architecture-principles).
|
||||||
|
|
||||||
- [FMF hooks](/wiki/framework/fmf-hooks) — generated hook surface
|
- [FMF hooks](/wiki/framework/fmf-hooks) — generated hook surface
|
||||||
- [FMF hooks catalog](/wiki/reference/fmf-hooks-catalog) — strings from core sources
|
- [FMF hooks catalog](/wiki/reference/fmf-hooks-catalog) — strings from core sources
|
||||||
- [FMF hook naming](/wiki/reference/fmf-hook-naming) — `FMF.*` vs legacy `FFM.*`
|
- [FMF hook naming](/wiki/reference/fmf-hook-naming) — `FMF.*` vs legacy `FFM.*`
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ description: Thematic index — cross-cutting overviews (assets, multiplayer, se
|
|||||||
|
|
||||||
Documentation is **curated** in this repository: guides, framework articles, reference data (hook catalogs), and contributor workflow — versioned with **gregFramework** and **gregWiki**.
|
Documentation is **curated** in this repository: guides, framework articles, reference data (hook catalogs), and contributor workflow — versioned with **gregFramework** and **gregWiki**.
|
||||||
|
|
||||||
|
**Stack model:** [System architecture & documentation principles](/wiki/meta/system-architecture-principles) — **ModManager → Framework → Plugins → Mods**, priorities, and author guidelines.
|
||||||
|
|
||||||
## Quick map
|
## Quick map
|
||||||
|
|
||||||
| Area | Start here |
|
| Area | Start here |
|
||||||
|
|||||||
@@ -10,39 +10,39 @@ This page is the **single reference** for where mod-related files live next to t
|
|||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
| Inhalt | Pfad | Format / Hinweis |
|
| Content | Path | Format / notes |
|
||||||
|--------|------|------------------|
|
|--------|------|----------------|
|
||||||
| **Mod-Konfiguration & Sidecars** | `{GameRoot}/UserData/ModCfg/` | **JSON** für Konfigurationsdateien; weitere Sidecar-Dateien (z. B. `custom_employees_hired.txt`) liegen ebenfalls hier, damit alles Mod-Bezogene an einem Ort liegt. |
|
| **Mod configuration & sidecars** | `{GameRoot}/UserData/ModCfg/` | **JSON** config files; additional sidecar files (e.g. `custom_employees_hired.txt`) live here so mod-related files stay in one place. |
|
||||||
| **FMF Framework-Plugins** (FFM.Plugin.*) | `{GameRoot}/FMF/Plugins/` | DLLs; **MelonLoader** lädt standardmäßig nur `{GameRoot}/Mods` — siehe unten. |
|
| **FMF framework plugins** (FFM.Plugin.*) | `{GameRoot}/FMF/Plugins/` | DLLs; **MelonLoader** only scans `{GameRoot}/Mods` by default — see below. |
|
||||||
| **Plugins** (MelonLoader, z. B. ModPathRedirector) | `{GameRoot}/Plugins/` | MelonLoader `Plugins`-Ordner — nur **MelonPlugin**-DLLs. |
|
| **Plugins** (MelonLoader, e.g. ModPathRedirector) | `{GameRoot}/Plugins/` | MelonLoader `Plugins` folder — **MelonPlugin** DLLs only. |
|
||||||
| **Mods** (MelonLoader, z. B. FMF.Mod.*) | `{GameRoot}/Mods/` | MelonLoader `Mods`-Ordner — **MelonMod**-DLLs. |
|
| **Mods** (MelonLoader, e.g. FMF.Mod.*) | `{GameRoot}/Mods/` | MelonLoader `Mods` folder — **MelonMod** DLLs. |
|
||||||
|
|
||||||
## UserData/ModCfg
|
## UserData/ModCfg
|
||||||
|
|
||||||
- Alle **mod-relevanten** Konfigurationen und JSON-Sidecars werden unter **`UserData/ModCfg`** geführt.
|
- All **mod-related** configuration and JSON sidecars live under **`UserData/ModCfg`**.
|
||||||
- Beim ersten Start werden fehlende Dateien angelegt; bei bestehenden Installationen werden ältere Dateien aus **`UserData/`** (Root) nach **`ModCfg/`** übernommen, sofern noch vorhanden.
|
- On first start, missing files are created; on existing installs, older files may be migrated from **`UserData/`** (root) into **`ModCfg/`** when still present.
|
||||||
- Beispiele: `multiplayer-sync.config.json`, `pluginsync.config.json`.
|
- Examples: `multiplayer-sync.config.json`, `pluginsync.config.json`.
|
||||||
- Framework-Metadaten (z. B. Save-Compat-Stamp) liegen unter **`UserData/ModCfg/FrikaFM/`** (Migration von `UserData/FrikaFM`).
|
- Framework metadata (e.g. save-compat stamp) lives under **`UserData/ModCfg/FrikaFM/`** (migrated from `UserData/FrikaFM`).
|
||||||
|
|
||||||
## FMF/Plugins und MelonLoader
|
## FMF/Plugins and MelonLoader
|
||||||
|
|
||||||
**FFM-Plugin-DLLs** liegen kanonisch unter **`{GameRoot}/FMF/Plugins`**. MelonLoader enumeriert **standardmäßig** nur **`Mods/`**. Praktische Optionen:
|
**FFM plugin DLLs** canonically live under **`{GameRoot}/FMF/Plugins`**. MelonLoader enumerates **`Mods/`** by default. Practical options:
|
||||||
|
|
||||||
1. **DLLs zusätzlich** (oder verlinkt) **`Mods/`** ablegen — üblicher Weg für automatisches Laden.
|
1. **Also place** (or link) DLLs under **`Mods/`** — common path for automatic loading.
|
||||||
2. **Unterordner** von `Mods` nutzen, falls eure MelonLoader-Version Mods in Unterverzeichnissen lädt (Version je nach Release prüfen).
|
2. Use **subfolders** under `Mods` if your MelonLoader version loads mods from subdirectories (check your ML version).
|
||||||
3. **PluginSync**-Downloads des Frameworks landen unter **`FMF/Plugins/PluginSync/...`**.
|
3. **PluginSync** downloads from the framework land under **`FMF/Plugins/PluginSync/...`**.
|
||||||
|
|
||||||
## Mods (FMF-basiert)
|
## Mods (FMF-based)
|
||||||
|
|
||||||
Normale **MelonLoader-Mods** (einschließlich FMF-Mods) werden wie gewohnt in **`{GameRoot}/Mods/`** installiert.
|
Standard **MelonLoader mods** (including FMF-based mods) install under **`{GameRoot}/Mods/`** as usual.
|
||||||
|
|
||||||
## Steam Workshop (Spiel) vs. MelonLoader
|
## Steam Workshop (game) vs MelonLoader
|
||||||
|
|
||||||
Das Spiel legt abonnierte Workshop-Inhalte unter **`{GameRoot}/{ExeName}_Data/StreamingAssets/mods/workshop_<PublishedFileId>/WorkshopUploadContent`** ab (nativer `ModLoader`, nicht MelonLoader).
|
The game stores subscribed Workshop content under **`{GameRoot}/{ExeName}_Data/StreamingAssets/mods/workshop_<PublishedFileId>/WorkshopUploadContent`** (native `ModLoader`, not MelonLoader).
|
||||||
|
|
||||||
- **MelonLoader** durchsucht **`{GameRoot}/Mods`** (inkl. Unterordner, je nach Einstellung), **nicht** beliebige Pfade über `Loader.cfg`.
|
- **MelonLoader** scans **`{GameRoot}/Mods`** (including subfolders, depending on settings), **not** arbitrary paths via `Loader.cfg`.
|
||||||
- **UserData:** MelonLoader-Konfiguration liegt unter **`{GameRoot}/UserData/`** (z. B. **`MelonLoader.cfg`** / je nach Version **`UserData/MelonLoader/Loader.cfg`** — bei Install prüfen). Relevant für Unterordner-Laden: **`disable_subfolder_load = false`**, optional **`disable_subfolder_manifest = true`**.
|
- **UserData:** MelonLoader config lives under **`{GameRoot}/UserData/`** (e.g. **`MelonLoader.cfg`** or, depending on version, **`UserData/MelonLoader/Loader.cfg`** — verify on install). For subfolder loading: **`disable_subfolder_load = false`**, optionally **`disable_subfolder_manifest = true`**.
|
||||||
- **Workshop-DLLs in den Melon-Scan einbinden:** Junction (oder Symlink) von einem Ordner unter **`Mods/`** auf den **`WorkshopUploadContent`**-Pfad desselben Items, z. B. (PowerShell, Pfade anpassen):
|
- **Point Workshop DLLs into Melon’s scan:** use a junction (or symlink) from a folder under **`Mods/`** to the item’s **`WorkshopUploadContent`** path, e.g. (PowerShell, adjust paths):
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$game = "C:\Path\To\Data Center"
|
$game = "C:\Path\To\Data Center"
|
||||||
@@ -52,11 +52,11 @@ $link = Join-Path $game "Mods\workshop_$id"
|
|||||||
cmd /c mklink /J "$link" "$target"
|
cmd /c mklink /J "$link" "$target"
|
||||||
```
|
```
|
||||||
|
|
||||||
Ohne Junction müssen MelonMods weiter physisch unter **`Mods/`** liegen oder über eure Verteilung dort landen.
|
Without a junction, Melon mods must still live physically under **`Mods/`** or be deployed there by your distribution.
|
||||||
|
|
||||||
**WorkshopUploader-Vorlagen (modded):** Unter **`content/`** werden **`Mods/`**, **`Plugins/`** und ein **`ModFramework/`**-Baum angelegt — **`ModFramework/FMF/Plugins`** entspricht dabei **`{GameRoot}/FMF/Plugins`**, wenn ihr **`FMF`** per Junction auf **`…/WorkshopUploadContent/ModFramework/FMF`** zeigen lasst. Weitere Framework-Dateien (Konfiguration, Assets) können unter **`ModFramework/`** gebündelt werden.
|
**WorkshopUploader templates (modded):** Under **`content/`**, **`Mods/`**, **`Plugins/`**, and a **`ModFramework/`** tree are created — **`ModFramework/FMF/Plugins`** maps to **`{GameRoot}/FMF/Plugins`** if you junction **`FMF`** to **`…/WorkshopUploadContent/ModFramework/FMF`**. Additional framework files (config, assets) can be bundled under **`ModFramework/`**.
|
||||||
|
|
||||||
## Siehe auch
|
## See also
|
||||||
|
|
||||||
- [Meta & operations](/wiki/topics/meta/overview)
|
- [Meta & operations](/wiki/topics/meta/overview)
|
||||||
- Mod configuration contracts are described alongside runtime docs in [Framework](/wiki/mods/framework) and core `README` in **gregFramework** (paths under **`UserData/ModCfg/`** follow the game + framework conventions above).
|
- Mod configuration contracts are described with runtime docs in [Framework](/wiki/mods/framework) and the core `README` in **gregFramework** (paths under **`UserData/ModCfg/`** follow the conventions above).
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ The **gregFramework** folder groups several repositories (split layout). Use thi
|
|||||||
| **Framework core** | `gregCore/` | MelonLoader host (`gregCore/framework/FrikaMF.csproj`), templates, **`gregCore/mcp-server/`**, optional `gregCore/plugins/` mirrors |
|
| **Framework core** | `gregCore/` | MelonLoader host (`gregCore/framework/FrikaMF.csproj`), templates, **`gregCore/mcp-server/`**, optional `gregCore/plugins/` mirrors |
|
||||||
| **Gameplay mods** | `gregMod.<Name>/` | Standalone mods (`FMF.*`) — **directly under `gregFramework/`** (the `gregMods/` umbrella is deprecated) |
|
| **Gameplay mods** | `gregMod.<Name>/` | Standalone mods (`FMF.*`) — **directly under `gregFramework/`** (the `gregMods/` umbrella is deprecated) |
|
||||||
| **Framework plugins** | `gregExt.<Name>/` | FFM plugins (`FFM.Plugin.*`) — **directly under `gregFramework/`** (the `gregExtensions/` umbrella is deprecated) |
|
| **Framework plugins** | `gregExt.<Name>/` | 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`** |
|
| **ModManager (MAUI)** | `gregModmanager/` | **Gregtools Modmanager** — grafisches Frontend zur Verwaltung von Mods/Plugins; `WorkshopUploader.csproj`, **`WorkshopUploader.exe`**. Siehe [Architecture principles](/wiki/meta/system-architecture-principles). |
|
||||||
| **Data Center exporter / assets** | `gregDataCenterExporter/` | Templates, exporter tooling, `FrikaModFramework/fmf_hooks.json` (among copies) |
|
| **Data Center exporter / assets** | `gregDataCenterExporter/` | Templates, exporter tooling, `FrikaModFramework/fmf_hooks.json` (among copies) |
|
||||||
| **Documentation** | `gregWiki/` | This Docusaurus site (`docs/`) |
|
| **Documentation** | `gregWiki/` | This Docusaurus site (`docs/`) |
|
||||||
| **Mod store / web (if cloned)** | `gregStore/` | Private Next.js modstore stack (`web/`, …) — optional sibling repo |
|
| **Mod store / web (if cloned)** | `gregStore/` | Private Next.js modstore stack (`web/`, …) — optional sibling repo |
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
title: 'gregFramework',
|
title: 'gregFramework',
|
||||||
tagline: 'Community docs for gregFramework — Data Center mods, FMF plugins, hooks, and split-repo layout',
|
tagline: 'Player-first help for Data Center mods; full technical docs for authors under Developers.',
|
||||||
favicon: 'img/logo.svg',
|
favicon: 'img/logo.svg',
|
||||||
url: 'https://frikadellental.de',
|
url: 'https://frikadellental.de',
|
||||||
baseUrl: '/',
|
baseUrl: '/',
|
||||||
@@ -24,10 +24,9 @@ const config = {
|
|||||||
],
|
],
|
||||||
i18n: {
|
i18n: {
|
||||||
defaultLocale: 'en',
|
defaultLocale: 'en',
|
||||||
locales: ['en', 'de'],
|
locales: ['en'],
|
||||||
localeConfigs: {
|
localeConfigs: {
|
||||||
en: {label: 'English', htmlLang: 'en-GB'},
|
en: {label: 'English', htmlLang: 'en-GB'},
|
||||||
de: {label: 'Deutsch', htmlLang: 'de-DE'},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
presets: [
|
presets: [
|
||||||
@@ -204,23 +203,15 @@ const config = {
|
|||||||
items: [
|
items: [
|
||||||
{to: '/', label: 'Home', position: 'left'},
|
{to: '/', label: 'Home', position: 'left'},
|
||||||
{
|
{
|
||||||
label: 'Docs Hub',
|
label: 'Docs',
|
||||||
position: 'left',
|
position: 'left',
|
||||||
items: [
|
items: [
|
||||||
{to: '/wiki', label: 'Overview'},
|
{to: '/wiki', label: 'Overview'},
|
||||||
{to: '/wiki/mods/framework', label: 'Framework'},
|
{to: '/wiki/guides/players/overview', label: 'For players'},
|
||||||
{to: '/wiki/plugins/', label: 'Plugins'},
|
{to: '/wiki/developers', label: 'Developers'},
|
||||||
{to: '/wiki/mods/', label: 'Mods'},
|
{to: '/mods', label: 'Mod catalog'},
|
||||||
{to: '/wiki/roadmap/unified-roadmap', label: 'Roadmap'},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type: 'localeDropdown',
|
|
||||||
className: 'nav-locale nav-right-icon nav-icon-only',
|
|
||||||
position: 'right',
|
|
||||||
dropdownItemsBefore: [],
|
|
||||||
dropdownItemsAfter: [],
|
|
||||||
},
|
|
||||||
{to: '/mods', label: 'Mods', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-mods', 'aria-label': 'Mods'},
|
{to: '/mods', label: 'Mods', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-mods', 'aria-label': 'Mods'},
|
||||||
{href: 'https://discord.gg/greg', label: 'Discord', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-discord', 'aria-label': 'Discord'},
|
{href: 'https://discord.gg/greg', label: 'Discord', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-discord', 'aria-label': 'Discord'},
|
||||||
{href: 'https://github.com/mleem97/gregFramework/issues', label: 'Support', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-support', 'aria-label': 'Support'},
|
{href: 'https://github.com/mleem97/gregFramework/issues', label: 'Support', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-support', 'aria-label': 'Support'},
|
||||||
@@ -230,6 +221,14 @@ const config = {
|
|||||||
footer: {
|
footer: {
|
||||||
style: 'dark',
|
style: 'dark',
|
||||||
links: [
|
links: [
|
||||||
|
{
|
||||||
|
title: 'Wiki',
|
||||||
|
items: [
|
||||||
|
{label: 'Home', to: '/wiki'},
|
||||||
|
{label: 'For players', to: '/wiki/guides/players/overview'},
|
||||||
|
{label: 'Developers', to: '/wiki/developers'},
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: 'Community',
|
title: 'Community',
|
||||||
items: [
|
items: [
|
||||||
@@ -251,7 +250,7 @@ const config = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
copyright: `Copyright ${new Date().getFullYear()} <a href="https://meyermedia.eu" target="_blank" rel="noopener noreferrer">Meyer Media</a><br/>Dieses Wiki ist ein Community-Projekt und steht in keiner Verbindung zu WASEKU oder dem Spiel selbst.`,
|
copyright: `Copyright ${new Date().getFullYear()} <a href="https://meyermedia.eu" target="_blank" rel="noopener noreferrer">Meyer Media</a><br/>This wiki is a community project and is not affiliated with WASEKU or the game.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
---
|
|
||||||
title: Erste Schritte
|
|
||||||
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.:
|
|
||||||
|
|
||||||
- `gregCore/` — Core-SDK (`gregCore/framework/FrikaMF.csproj`), MCP unter `gregCore/mcp-server/`
|
|
||||||
- `gregMod.<Name>/` — Gameplay-Mods (`FMF.*`), **flach** neben `gregCore/` (älteres `gregMods/` ist obsolet)
|
|
||||||
- `gregExt.<Name>/` — Framework-Plugins (`FFM.Plugin.*`), ebenfalls flach (älteres `gregExtensions/` obsolet)
|
|
||||||
- `gregModmanager/` — **Gregtools Modmanager** (WorkshopManager; `WorkshopUploader.csproj`)
|
|
||||||
- `gregDataCenterExporter/` — Exporter, Templates, Hook-JSON-Spiegel
|
|
||||||
- `gregWiki/` — diese Dokumentation
|
|
||||||
|
|
||||||
Die **Rust**-Bridge liegt unter:
|
|
||||||
|
|
||||||
- `gregCore/bridges/gregSta.RustBridge/`
|
|
||||||
|
|
||||||
## Core bauen
|
|
||||||
|
|
||||||
```text
|
|
||||||
dotnet build gregCore/FrikaMF.sln -c Release
|
|
||||||
```
|
|
||||||
|
|
||||||
Alternativ in der IDE: `gregCore/FrikaMF.sln` öffnen.
|
|
||||||
|
|
||||||
## Hook-Naming
|
|
||||||
|
|
||||||
- **Zielkonvention:** `FMF.<DOMAIN>.<Event>` (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 `gregMod.<Name>/` 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
|
|
||||||
|
|
||||||
- **Repo:** `gregWiki/`
|
|
||||||
- **Inhalt:** Markdown/MDX in diesem Repo, angepasst an den Split-Stand.
|
|
||||||
|
|
||||||
### Docker
|
|
||||||
|
|
||||||
Im `gregWiki`-Root: `docker build -t gregwiki-docs .` und `docker run --rm -p 3000:3000 gregwiki-docs`.
|
|
||||||
|
|
||||||
### MCP
|
|
||||||
|
|
||||||
Siehe [`reference/mcp-server`](/wiki/reference/mcp-server) — Implementierung unter **`gregCore/mcp-server/`** (Installation und `--data-root` laut `README.md` dort).
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
---
|
|
||||||
id: intro
|
|
||||||
title: gregFramework Dokumentation
|
|
||||||
slug: /docs
|
|
||||||
description: Einstieg für den Split-Repo-Workspace — Core, Mods, Extensions und dieses Wiki.
|
|
||||||
---
|
|
||||||
|
|
||||||
Diese Dokumentation beschreibt den **aktuellen Split-Stand**: `gregFramework/` als Wrapper mit Einzel-Repositories für **Core**, **Mods**, **Extensions** und **Wiki**. Sie richtet sich an **Spieler**, **Mod-Developer**, **Contributors** und **Sponsoren**.
|
|
||||||
|
|
||||||
## Für wen?
|
|
||||||
|
|
||||||
| Zielgruppe | Einstieg |
|
|
||||||
|------------|----------|
|
|
||||||
| **Spieler** — installieren, spielen, Troubleshooting | [Endnutzer (Hub)](/wiki/guides/players/overview) · [Endnutzer-Workshop](/wiki/guides/players/enduser-workshop) |
|
|
||||||
| **Moddevs** — Mods bauen, Hooks, Debugging | [Mod-Entwickler (Hub)](/wiki/guides/mod-developers/overview) · [Framework](/wiki/mods/framework) · [FMF-Hooks](/wiki/framework/fmf-hooks) |
|
|
||||||
| **Contributor** — PRs, Doku, Plugins, CI | [Contributors (Workflow)](/wiki/guides/contributors/topics-overview) · [Contributor-Workshop](/wiki/guides/contributors/contributor-workshop) |
|
|
||||||
| **Sponsorinnen & Sponsoren** | [Sponsors (Hub)](/wiki/guides/sponsors/overview) · Lizenz & Richtlinien im GitHub-Repo (`LICENSE` / `CONTRIBUTING`) |
|
|
||||||
|
|
||||||
**Erfahrungspfade** (Einsteiger → Profis): [Nach Zielgruppe](/wiki/guides/players/audiences-overview) → [Newbies](/wiki/audiences/newbies), [Intermediates](/wiki/audiences/intermediates), [Professionals](/wiki/audiences/professionals).
|
|
||||||
|
|
||||||
## Repository-Hub
|
|
||||||
|
|
||||||
- [Workspace-Karte](/wiki/workspace/) — Ordner → Repos
|
|
||||||
- Core: `gregCore/` (`framework/FrikaMF`, `mcp-server/`, `bridges/gregSta.RustBridge/`)
|
|
||||||
- Mods: `gregMod.<Name>/` (Split-Repos, direkt unter `gregFramework/`)
|
|
||||||
- Extensions (FFM-Plugins): `gregExt.<Name>/` (Split-Repos, direkt unter `gregFramework/`)
|
|
||||||
- Workshop-App: `gregModmanager/` (Gregtools Modmanager — `WorkshopUploader.exe`)
|
|
||||||
- Exporter/Templates: `gregDataCenterExporter/`
|
|
||||||
- Wiki: `gregWiki/`
|
|
||||||
|
|
||||||
## Hooks und Releases
|
|
||||||
|
|
||||||
- [FMF Hook-Naming](/wiki/reference/fmf-hook-naming) — `FMF.<Domain>.…` und Legacy `FFM.*`
|
|
||||||
- [FMF-Hooks-Katalog](/wiki/reference/fmf-hooks-catalog) — generiert aus Core-`HookNames.cs`
|
|
||||||
- [Release-Kanäle](/wiki/reference/release-channels) — Steam Workshop vs GitHub (Beta)
|
|
||||||
- [MCP-Server](/wiki/reference/mcp-server) — optionale LLM/IDE-Tools über Doku + `fmf_hooks.json`
|
|
||||||
|
|
||||||
## Layout (Contributors)
|
|
||||||
|
|
||||||
- [Repo-Inventar](/wiki/contributors/repo-inventory) — Projekt- und Repo-Übersicht
|
|
||||||
- Split-Konvention: `gregMod.<Name>`, `gregExt.<Name>`, `gregSta.<Name>` (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:** `gregCore/bridges/gregSta.RustBridge/`.
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
---
|
|
||||||
id: modding-language-requirement
|
|
||||||
title: Modding-Sprache (nur C#)
|
|
||||||
slug: /reference/modding-language-requirement
|
|
||||||
description: Verpflichtende Sprache für Mods, MelonLoader-Plugins und Extensions — ausschließlich C#.
|
|
||||||
---
|
|
||||||
|
|
||||||
# Modding-Sprache (nur C#)
|
|
||||||
|
|
||||||
## Vorgabe
|
|
||||||
|
|
||||||
**Die gesamte Logik von Mods, MelonLoader-Plugins und Framework-Extensions muss in C# implementiert sein.**
|
|
||||||
|
|
||||||
Das gilt für alles, was als **`gregMod.*`**, **`gregExt.*`** oder **`FFM.Plugin.*`** / **`FMF.*`** über MelonLoader / IL2CPP geladen wird: Gameplay, Harmony-Patches, UI, Netzwerk-Hooks und Datenverarbeitung liegen in **C#** (üblicherweise **.NET** passend zur MelonLoader-Version).
|
|
||||||
|
|
||||||
## Begründung
|
|
||||||
|
|
||||||
- **MelonLoader** lädt verwaltete **.NET**-Assemblies; Harmony und Interop sind auf C# ausgelegt.
|
|
||||||
- Eine Sprache vereinfacht Review, Debugging und CI für Contributor.
|
|
||||||
|
|
||||||
## Was hiervon *nicht* betroffen ist
|
|
||||||
|
|
||||||
- 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.
|
|
||||||
|
|
||||||
## Siehe auch
|
|
||||||
|
|
||||||
- [Framework](/wiki/mods/framework)
|
|
||||||
- [FMF Hook-Naming](/wiki/reference/fmf-hook-naming)
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
---
|
|
||||||
title: WorkshopManager
|
|
||||||
sidebar_label: WorkshopManager
|
|
||||||
description: Windows desktop app for managing Steam Workshop content, browsing mods, and publishing for Data Center (FrikaMF).
|
|
||||||
---
|
|
||||||
|
|
||||||
# WorkshopManager
|
|
||||||
|
|
||||||
**WorkshopManager** is a **.NET MAUI** desktop app for **Windows** that serves as a full-featured Steam Workshop client for *Data Center*. It combines content authoring (publish/update), a **Mod Store** for browsing and installing community mods, and a **Mod Manager** for dependency health checks.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
### Author tools (Projects / Editor / My Uploads)
|
|
||||||
- Create workshop projects from templates (vanilla assets, MelonLoader mods, FMF plugins).
|
|
||||||
- Edit **title**, **description**, **visibility**, **tags**, and **preview image**; stored in `metadata.json`.
|
|
||||||
- **Save and upload to Steam** — saves metadata, publishes `content/` to Steam Workshop, then **syncs** your local folder with Steam's version (like a `git pull` after push).
|
|
||||||
- **Change notes** — when updating an existing item, describe what changed; shown on the Workshop changelog tab.
|
|
||||||
- **View on Steam** — open your published item in the browser.
|
|
||||||
- **Pagination** across all list views (My Uploads, Browse, Subscribed, Favorites).
|
|
||||||
- **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.
|
|
||||||
- **Favorites** — bookmark mods for quick access.
|
|
||||||
- **Vote** (up/down) on workshop items.
|
|
||||||
- **Item detail view** — full statistics, description, tags, 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).
|
|
||||||
|
|
||||||
### Einstellungen
|
|
||||||
- **Arbeitsbereichspfad** — legt fest, wo Projekte gespeichert werden (Standard: `<GameRoot>/workshop`).
|
|
||||||
- **Sprache** — Umschalten zwischen EN, DE, RU, ES, IT, JP, PL, CN (Standard: Systemsprache). Der Neustart-Button wendet die Änderung sofort an.
|
|
||||||
- **Mod-Store-Umschaltung** — Mod-Store-Tab ein-/ausblenden (standardmäßig aus). Neustart-Button enthalten.
|
|
||||||
- **Community-Links** — Schnellzugriff auf Discord, Modding-Kanal und GregFramework.eu.
|
|
||||||
|
|
||||||
### Hinweis zur FMF-Abhängigkeit
|
|
||||||
- Projekte können im Editor als **„Benötigt FrikaModFramework“** markiert werden. Beim Hochladen wird der Steam-Beschreibung automatisch ein Hinweis angehängt, der Nutzer zum Installieren von FMF auffordert.
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
- **Windows 10** (Version 1809+).
|
|
||||||
- **Steam** mit angemeldetem Konto, das **Data Center** besitzt (App-ID **4170200**).
|
|
||||||
- **Keine weiteren Abhängigkeiten** — die Release-Version ist vollständig eigenständig (enthält .NET-Runtime und Windows App SDK).
|
|
||||||
- `steam_api64.dll` und `steam_appid.txt` müssen neben der exe liegen (im Release-Build enthalten).
|
|
||||||
|
|
||||||
## Workspace path
|
|
||||||
|
|
||||||
The workspace is resolved from Steam: `<Data Center install>/workshop`.
|
|
||||||
|
|
||||||
Fallback (no Steam): `%USERPROFILE%\DataCenterWS`.
|
|
||||||
|
|
||||||
On first launch the app creates the structure and places a sample `metadata.sample.json` under `.templates/`.
|
|
||||||
|
|
||||||
## Project layout
|
|
||||||
|
|
||||||
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:
|
|
||||||
- `content/Mods/` for MelonLoader mods
|
|
||||||
- `content/FMF/Plugins/` for FMF plugins
|
|
||||||
- `content/Object/` and `content/Decoration/` for vanilla assets
|
|
||||||
3. Optionally create `metadata.json` yourself or fill it in the app.
|
|
||||||
4. Optionally add `preview.png` at the project root.
|
|
||||||
|
|
||||||
## Using the app
|
|
||||||
|
|
||||||
### Tabs
|
|
||||||
|
|
||||||
| 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 |
|
|
||||||
|
|
||||||
### Publish workflow
|
|
||||||
|
|
||||||
1. Open a project from the **Projects** tab.
|
|
||||||
2. Fill in title, description, tags, visibility, preview image.
|
|
||||||
3. Optionally write **change notes** (visible on Steam's changelog).
|
|
||||||
4. Click **Save and upload to Steam**.
|
|
||||||
5. The app saves `metadata.json`, uploads `content/` to Steam, then **syncs** by re-downloading Steam's version into your local `content/` folder.
|
|
||||||
|
|
||||||
### Headless / CI publish
|
|
||||||
|
|
||||||
```bash
|
|
||||||
WorkshopUploader.exe --mode publish --path <project-folder>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Build and deploy {#build-deploy}
|
|
||||||
|
|
||||||
### Eigenständiges Release
|
|
||||||
|
|
||||||
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 gregModmanager/WorkshopUploader.csproj -c Release -p:SelfContained=true -p:RuntimeIdentifier=win10-x64
|
|
||||||
```
|
|
||||||
|
|
||||||
Ausgabe: `gregModmanager/bin/Release/net9.0-windows10.0.19041.0/win10-x64/publish/`
|
|
||||||
|
|
||||||
### Alle Mods + Gregtools Modmanager in Workshop-Ordner bereitstellen
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pwsh -File scripts/Deploy-Release-ToWorkshop.ps1
|
|
||||||
```
|
|
||||||
|
|
||||||
Dies baut alle Frameworks/Plugins/Mods **und** den WorkshopUploader selbst und packt jedes in einen Steamworks-kompatiblen Projektordner unter `<GameRoot>/workshop/`. Der WorkshopUploader wird als **„Gregtools Modmanager“** verpackt.
|
|
||||||
|
|
||||||
### Im Spieleverzeichnis bereitstellen (lokales Testen)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pwsh -File scripts/Deploy-Release-ToDataCenter.ps1 -IncludeWorkshopUploader
|
|
||||||
```
|
|
||||||
|
|
||||||
## See also
|
|
||||||
|
|
||||||
- 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)
|
|
||||||
@@ -11,8 +11,8 @@
|
|||||||
"wiki:sync": "node ./scripts/sync-wiki-to-docs.mjs",
|
"wiki:sync": "node ./scripts/sync-wiki-to-docs.mjs",
|
||||||
"wiki:normalize-i18n": "node ./scripts/normalize-wiki-import-i18n.mjs",
|
"wiki:normalize-i18n": "node ./scripts/normalize-wiki-import-i18n.mjs",
|
||||||
"wiki:refresh": "node ./scripts/sync-wiki-to-docs.mjs && node ./scripts/normalize-wiki-import-i18n.mjs",
|
"wiki:refresh": "node ./scripts/sync-wiki-to-docs.mjs && node ./scripts/normalize-wiki-import-i18n.mjs",
|
||||||
"format": "prettier --write src scripts docusaurus.config.js sidebars.js README.md docs/getting-started/documentation-layout.md package.json .prettierrc.json docker-compose.yml",
|
"format": "prettier --write src scripts docusaurus.config.js sidebars.js README.md docs/README.md docs/getting-started/documentation-layout.md package.json .prettierrc.json docker-compose.yml",
|
||||||
"format:check": "prettier --check src scripts docusaurus.config.js sidebars.js README.md docs/getting-started/documentation-layout.md package.json .prettierrc.json docker-compose.yml"
|
"format:check": "prettier --check src scripts docusaurus.config.js sidebars.js README.md docs/README.md docs/getting-started/documentation-layout.md package.json .prettierrc.json docker-compose.yml"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@docusaurus/core": "^3.10.0",
|
"@docusaurus/core": "^3.10.0",
|
||||||
|
|||||||
@@ -24,13 +24,7 @@ function walk(dir) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const roots = [
|
const roots = [path.resolve(import.meta.dirname, '../docs/legacy/wiki-import')];
|
||||||
path.resolve(import.meta.dirname, '../docs/legacy/wiki-import'),
|
|
||||||
path.resolve(
|
|
||||||
import.meta.dirname,
|
|
||||||
'../i18n/de/docusaurus-plugin-content-docs/current/legacy/wiki-import',
|
|
||||||
),
|
|
||||||
];
|
|
||||||
for (const r of roots) {
|
for (const r of roots) {
|
||||||
if (fs.existsSync(r)) walk(r);
|
if (fs.existsSync(r)) walk(r);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,164 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Split legacy wiki-import pairs (Base.md = DE, Base-en.md = EN) into:
|
* Legacy: split DE/EN wiki-import pairs. Retired together with docs/legacy/wiki-import/.
|
||||||
* - docs/legacy/wiki-import/** → default locale (en), Docusaurus
|
|
||||||
* - i18n/de/.../current/legacy/wiki-import/** → Deutsch
|
|
||||||
*
|
|
||||||
* German-only pages (no Base-en.md) → DE in i18n/de, EN stub in docs/legacy/wiki-import.
|
|
||||||
*
|
|
||||||
* Usage (from gregWiki repo root):
|
|
||||||
* node scripts/normalize-wiki-import-i18n.mjs
|
|
||||||
* node scripts/normalize-wiki-import-i18n.mjs --dry-run
|
|
||||||
*/
|
*/
|
||||||
|
console.log(
|
||||||
import {
|
'[wiki:normalize-i18n] Skipped: legacy wiki-import i18n split is no longer used.\n' +
|
||||||
existsSync,
|
'Curated docs are English-only under docs/.',
|
||||||
mkdirSync,
|
|
||||||
readFileSync,
|
|
||||||
readdirSync,
|
|
||||||
rmSync,
|
|
||||||
statSync,
|
|
||||||
writeFileSync,
|
|
||||||
} from 'node:fs';
|
|
||||||
import {basename, dirname, join, relative, resolve} from 'node:path';
|
|
||||||
|
|
||||||
const repoRoot = resolve(import.meta.dirname, '..');
|
|
||||||
const docsWikiImport = join(repoRoot, 'docs', 'legacy', 'wiki-import');
|
|
||||||
const deWikiImport = join(
|
|
||||||
repoRoot,
|
|
||||||
'i18n',
|
|
||||||
'de',
|
|
||||||
'docusaurus-plugin-content-docs',
|
|
||||||
'current',
|
|
||||||
'legacy',
|
|
||||||
'wiki-import',
|
|
||||||
);
|
);
|
||||||
|
process.exit(0);
|
||||||
const dryRun = process.argv.includes('--dry-run');
|
|
||||||
|
|
||||||
function englishStub(title) {
|
|
||||||
return `---
|
|
||||||
title: ${title}
|
|
||||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
|
||||||
---
|
|
||||||
|
|
||||||
:::note
|
|
||||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under \`docs/legacy/wiki-import\`.
|
|
||||||
:::
|
|
||||||
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ensureDir(p) {
|
|
||||||
mkdirSync(p, {recursive: true});
|
|
||||||
}
|
|
||||||
|
|
||||||
function walkMarkdownFiles(root, base = root) {
|
|
||||||
const out = [];
|
|
||||||
for (const name of readdirSync(root)) {
|
|
||||||
const full = join(root, name);
|
|
||||||
const st = statSync(full);
|
|
||||||
if (st.isDirectory()) {
|
|
||||||
out.push(...walkMarkdownFiles(full, base));
|
|
||||||
} else if (st.isFile() && name.toLowerCase().endsWith('.md')) {
|
|
||||||
out.push(relative(base, full).replace(/\\/g, '/'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toEnSibling(rel) {
|
|
||||||
if (!rel.endsWith('.md')) return null;
|
|
||||||
const d = dirname(rel);
|
|
||||||
const base = basename(rel, '.md');
|
|
||||||
return d === '.' ? `${base}-en.md` : `${d}/${base}-en.md`;
|
|
||||||
}
|
|
||||||
|
|
||||||
function main() {
|
|
||||||
if (!existsSync(docsWikiImport)) {
|
|
||||||
console.error(`Missing ${docsWikiImport}`);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const allRel = new Set(walkMarkdownFiles(docsWikiImport));
|
|
||||||
const pairBases = new Set();
|
|
||||||
const germanOnly = [];
|
|
||||||
|
|
||||||
for (const rel of allRel) {
|
|
||||||
const file = basename(rel);
|
|
||||||
if (file.endsWith('-en.md')) continue;
|
|
||||||
|
|
||||||
const enRel = toEnSibling(rel);
|
|
||||||
if (enRel && allRel.has(enRel)) {
|
|
||||||
pairBases.add(rel);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
germanOnly.push(rel);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Paired: Base.md + Base-en.md
|
|
||||||
for (const relBase of pairBases) {
|
|
||||||
const enRel = toEnSibling(relBase);
|
|
||||||
const pathBase = join(docsWikiImport, relBase);
|
|
||||||
const pathEn = join(docsWikiImport, enRel);
|
|
||||||
const german = readFileSync(pathBase, 'utf8');
|
|
||||||
const english = readFileSync(pathEn, 'utf8');
|
|
||||||
const deTarget = join(deWikiImport, relBase);
|
|
||||||
const enTarget = join(docsWikiImport, relBase);
|
|
||||||
|
|
||||||
if (dryRun) {
|
|
||||||
console.log(`[pair] ${relBase} + ${enRel} → EN docs + DE i18n`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ensureDir(dirname(deTarget));
|
|
||||||
writeFileSync(deTarget, german, 'utf8');
|
|
||||||
writeFileSync(enTarget, english, 'utf8');
|
|
||||||
rmSync(pathEn);
|
|
||||||
console.log(`[pair] ${relBase}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// English-only sibling (Home-en.md without Home.md) — rare
|
|
||||||
for (const rel of allRel) {
|
|
||||||
if (!rel.endsWith('-en.md')) continue;
|
|
||||||
const baseRel = rel.replace(/-en\.md$/, '.md');
|
|
||||||
if (pairBases.has(baseRel)) continue;
|
|
||||||
|
|
||||||
const pathEn = join(docsWikiImport, rel);
|
|
||||||
const pathBase = join(docsWikiImport, baseRel);
|
|
||||||
const english = readFileSync(pathEn, 'utf8');
|
|
||||||
|
|
||||||
if (dryRun) {
|
|
||||||
console.log(`[en-only] ${rel} → ${baseRel}`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ensureDir(dirname(pathBase));
|
|
||||||
writeFileSync(pathBase, english, 'utf8');
|
|
||||||
rmSync(pathEn);
|
|
||||||
console.log(`[en-only] ${rel} → ${baseRel}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// German-only: no Base-en.md (pair bases are excluded from germanOnly)
|
|
||||||
for (const rel of germanOnly) {
|
|
||||||
const pathBase = join(docsWikiImport, rel);
|
|
||||||
const german = readFileSync(pathBase, 'utf8');
|
|
||||||
const deTarget = join(deWikiImport, rel);
|
|
||||||
const titleMatch = german.match(/^title:\s*(.+)$/m);
|
|
||||||
const title = titleMatch ? titleMatch[1].trim().replace(/"/g, '\\"') : basename(rel, '.md');
|
|
||||||
|
|
||||||
if (dryRun) {
|
|
||||||
console.log(`[de-only] ${rel} → i18n/de + EN stub`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ensureDir(dirname(deTarget));
|
|
||||||
writeFileSync(deTarget, german, 'utf8');
|
|
||||||
writeFileSync(pathBase, englishStub(title), 'utf8');
|
|
||||||
console.log(`[de-only] ${rel}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(dryRun ? 'Dry run complete.' : 'Done. Next: npm run build');
|
|
||||||
}
|
|
||||||
|
|
||||||
main();
|
|
||||||
|
|||||||
@@ -1,50 +1,9 @@
|
|||||||
import {existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync} from 'node:fs';
|
/**
|
||||||
import {join, resolve} from 'node:path';
|
* Legacy GitHub Wiki → docs/ mirror. Removed: content now lives only under docs/ (curated).
|
||||||
|
* Keep this script as a no-op so old CI or docs do not reference a missing file.
|
||||||
const projectRoot = resolve(process.cwd());
|
*/
|
||||||
const gregFrameworkRoot = resolve(projectRoot, '..');
|
console.log(
|
||||||
const wikiDir = join(gregFrameworkRoot, '.wiki');
|
'[wiki:sync] Skipped: the bulk wiki-import under docs/legacy/wiki-import/ was retired.\n' +
|
||||||
const outDir = join(projectRoot, 'docs', 'legacy', 'wiki-import');
|
'Author and edit Markdown under docs/ in gregWiki; use git history for old mirror text.',
|
||||||
|
);
|
||||||
if (!existsSync(wikiDir)) {
|
process.exit(0);
|
||||||
console.error(
|
|
||||||
`Missing ${wikiDir}. Clone or restore the GitHub Wiki working tree there, then re-run this script.\n` +
|
|
||||||
'Existing files under docs/legacy/wiki-import/ are left unchanged.',
|
|
||||||
);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
mkdirSync(outDir, {recursive: true});
|
|
||||||
|
|
||||||
function collectMarkdownFiles(rootDir, prefix = '') {
|
|
||||||
const entries = readdirSync(join(rootDir, prefix), {withFileTypes: true});
|
|
||||||
const results = [];
|
|
||||||
|
|
||||||
for (const entry of entries) {
|
|
||||||
const relativePath = prefix ? join(prefix, entry.name) : entry.name;
|
|
||||||
if (entry.isDirectory()) {
|
|
||||||
results.push(...collectMarkdownFiles(rootDir, relativePath));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entry.isFile() && entry.name.toLowerCase().endsWith('.md')) {
|
|
||||||
results.push(relativePath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
const files = collectMarkdownFiles(wikiDir);
|
|
||||||
|
|
||||||
for (const file of files) {
|
|
||||||
const source = join(wikiDir, file);
|
|
||||||
const sanitizedRelative = file.replace(/\s+/g, '-');
|
|
||||||
const target = join(outDir, sanitizedRelative);
|
|
||||||
const targetDir = resolve(target, '..');
|
|
||||||
mkdirSync(targetDir, {recursive: true});
|
|
||||||
const raw = readFileSync(source, 'utf8');
|
|
||||||
writeFileSync(target, raw, 'utf8');
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(`Synced ${files.length} wiki files to ${outDir}`);
|
|
||||||
|
|||||||
@@ -17,13 +17,7 @@ const pairs = [
|
|||||||
['TechnicalReference/Troubleshooting', 'wiki-import-techref-troubleshooting'],
|
['TechnicalReference/Troubleshooting', 'wiki-import-techref-troubleshooting'],
|
||||||
];
|
];
|
||||||
|
|
||||||
const bases = [
|
const bases = [path.resolve(import.meta.dirname, '../docs/legacy/wiki-import')];
|
||||||
path.resolve(import.meta.dirname, '../docs/legacy/wiki-import'),
|
|
||||||
path.resolve(
|
|
||||||
import.meta.dirname,
|
|
||||||
'../i18n/de/docusaurus-plugin-content-docs/current/legacy/wiki-import',
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
for (const base of bases) {
|
for (const base of bases) {
|
||||||
if (!fs.existsSync(base)) continue;
|
if (!fs.existsSync(base)) continue;
|
||||||
|
|||||||
335
sidebars.js
335
sidebars.js
@@ -4,184 +4,191 @@ const sidebars = {
|
|||||||
'intro',
|
'intro',
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
label: 'Getting started',
|
label: 'Play & mods',
|
||||||
items: ['getting-started', 'getting-started/documentation-layout'],
|
collapsed: false,
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Workspace',
|
|
||||||
items: ['workspace/index'],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Framework',
|
|
||||||
items: ['framework/architecture', 'framework/fmf-hooks', 'framework/hexmod'],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Plugins (FFM)',
|
|
||||||
items: [
|
items: [
|
||||||
'plugins/index',
|
'guides/players/overview',
|
||||||
'plugins/ffm-plugin-asset-exporter',
|
'guides/players/enduser-workshop',
|
||||||
'plugins/ffm-plugin-multiplayer',
|
|
||||||
'plugins/ffm-plugin-player-models',
|
|
||||||
'plugins/ffm-plugin-sysadmin',
|
|
||||||
'plugins/ffm-plugin-web-ui-bridge',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Mods (FMF)',
|
|
||||||
link: {type: 'doc', id: 'mods/index'},
|
|
||||||
items: [
|
|
||||||
'mods/index',
|
|
||||||
'mods/framework',
|
|
||||||
'mods/fmf-console-input-guard',
|
|
||||||
'mods/fmf-gregify-employees',
|
|
||||||
'mods/fmf-hex-label-mod',
|
|
||||||
'mods/fmf-lang-compat-bridge',
|
|
||||||
'mods/fmf-ui-replacement-mod',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Tools & operations',
|
|
||||||
items: [
|
|
||||||
'tools/workshop-uploader',
|
|
||||||
'meta/Steam-Workshop-and-Tooling',
|
|
||||||
'meta/devserver-betas',
|
|
||||||
'meta/IDEA_BACKLOG',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Guides',
|
|
||||||
items: [
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Players',
|
|
||||||
key: 'guides-players',
|
|
||||||
items: [
|
|
||||||
'guides/players/overview',
|
|
||||||
'guides/players/audiences-overview',
|
|
||||||
'guides/players/newbies',
|
|
||||||
'guides/players/intermediates',
|
|
||||||
'guides/players/professionals',
|
|
||||||
'guides/players/enduser-workshop',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Mod developers',
|
|
||||||
key: 'guides-mod-developers',
|
|
||||||
items: ['guides/mod-developers/overview'],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Contributors',
|
|
||||||
key: 'guides-contributors',
|
|
||||||
items: [
|
|
||||||
'guides/contributors/topics-overview',
|
|
||||||
'guides/contributors/contributor-workshop',
|
|
||||||
'guides/contributors/release',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Sponsors',
|
|
||||||
key: 'guides-sponsors',
|
|
||||||
items: ['guides/sponsors/overview'],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Releases',
|
|
||||||
link: {type: 'doc', id: 'releases/index'},
|
|
||||||
items: [
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Plugin releases',
|
|
||||||
items: [
|
|
||||||
'releases/plugins/ffm-plugin-asset-exporter-release',
|
|
||||||
'releases/plugins/ffm-plugin-multiplayer-release',
|
|
||||||
'releases/plugins/ffm-plugin-player-models-release',
|
|
||||||
'releases/plugins/ffm-plugin-sysadmin-release',
|
|
||||||
'releases/plugins/ffm-plugin-web-ui-bridge-release',
|
|
||||||
'releases/plugins/fmf-modpathredirector-release',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Tool releases',
|
|
||||||
items: ['releases/tools/gregtools-modmanager-1.0-release'],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Mod releases',
|
|
||||||
items: [
|
|
||||||
'releases/mods/fmf-console-input-guard-release',
|
|
||||||
'releases/mods/fmf-gregify-employees-release',
|
|
||||||
'releases/mods/fmf-hex-label-mod-release',
|
|
||||||
'releases/mods/fmf-lang-compat-bridge-release',
|
|
||||||
'releases/mods/fmf-ui-replacement-mod-release',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Reference',
|
|
||||||
items: [
|
|
||||||
'reference/wiki-mapping',
|
|
||||||
'reference/mod-store-vision',
|
|
||||||
'reference/fmf-hook-naming',
|
|
||||||
'reference/fmf-hooks-catalog',
|
|
||||||
'reference/mcp-server',
|
|
||||||
'reference/release-channels',
|
'reference/release-channels',
|
||||||
'reference/reference-data-files',
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
'tools/workshop-uploader',
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
label: 'Contributors (workflow)',
|
label: 'Developers & contributors',
|
||||||
|
collapsed: true,
|
||||||
|
link: {type: 'doc', id: 'developers'},
|
||||||
items: [
|
items: [
|
||||||
'contributors/repo-inventory',
|
'developers',
|
||||||
'contributors/monorepo-target-layout',
|
'meta/system-architecture-principles',
|
||||||
'contributors/luminescent-design-system',
|
'getting-started',
|
||||||
'contributors/docusaurus-workflow',
|
'getting-started/documentation-layout',
|
||||||
'contributors/plugin-submission-audit',
|
'workspace/index',
|
||||||
'contributors/sponsorship-automation',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Roadmap',
|
|
||||||
items: ['roadmap/unified-roadmap', 'roadmap/mod-store-stages'],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Topics hub',
|
|
||||||
link: {type: 'doc', id: 'topics/index'},
|
|
||||||
items: [
|
|
||||||
'topics/index',
|
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
label: 'Cross-cutting topics',
|
label: 'Framework',
|
||||||
|
items: ['framework/architecture', 'framework/fmf-hooks', 'framework/hexmod'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Plugins (FFM)',
|
||||||
items: [
|
items: [
|
||||||
'topics/assets-and-export/overview',
|
'plugins/index',
|
||||||
'topics/multiplayer-and-networking/overview',
|
'plugins/ffm-plugin-asset-exporter',
|
||||||
'topics/ffi-and-hooks/overview',
|
'plugins/ffm-plugin-multiplayer',
|
||||||
'topics/security-legal/overview',
|
'plugins/ffm-plugin-player-models',
|
||||||
'topics/reference/overview',
|
'plugins/ffm-plugin-sysadmin',
|
||||||
'topics/roadmap/overview',
|
'plugins/ffm-plugin-web-ui-bridge',
|
||||||
'topics/meta/overview',
|
|
||||||
'topics/meta/game-folder-layout',
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Mods (FMF)',
|
||||||
|
link: {type: 'doc', id: 'mods/index'},
|
||||||
|
items: [
|
||||||
|
'mods/index',
|
||||||
|
'mods/framework',
|
||||||
|
'mods/fmf-console-input-guard',
|
||||||
|
'mods/fmf-gregify-employees',
|
||||||
|
'mods/fmf-hex-label-mod',
|
||||||
|
'mods/fmf-lang-compat-bridge',
|
||||||
|
'mods/fmf-ui-replacement-mod',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Tools & operations',
|
||||||
|
items: [
|
||||||
|
'meta/Steam-Workshop-and-Tooling',
|
||||||
|
'meta/devserver-betas',
|
||||||
|
'meta/IDEA_BACKLOG',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Guides',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Players (extra)',
|
||||||
|
items: [
|
||||||
|
'guides/players/audiences-overview',
|
||||||
|
'guides/players/newbies',
|
||||||
|
'guides/players/intermediates',
|
||||||
|
'guides/players/professionals',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Mod developers',
|
||||||
|
items: ['guides/mod-developers/overview'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Contributors',
|
||||||
|
items: [
|
||||||
|
'guides/contributors/topics-overview',
|
||||||
|
'guides/contributors/contributor-workshop',
|
||||||
|
'guides/contributors/release',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Sponsors',
|
||||||
|
items: ['guides/sponsors/overview'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Releases',
|
||||||
|
link: {type: 'doc', id: 'releases/index'},
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Plugin releases',
|
||||||
|
items: [
|
||||||
|
'releases/plugins/ffm-plugin-asset-exporter-release',
|
||||||
|
'releases/plugins/ffm-plugin-multiplayer-release',
|
||||||
|
'releases/plugins/ffm-plugin-player-models-release',
|
||||||
|
'releases/plugins/ffm-plugin-sysadmin-release',
|
||||||
|
'releases/plugins/ffm-plugin-web-ui-bridge-release',
|
||||||
|
'releases/plugins/fmf-modpathredirector-release',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Tool releases',
|
||||||
|
items: ['releases/tools/gregtools-modmanager-1.0-release'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Mod releases',
|
||||||
|
items: [
|
||||||
|
'releases/mods/fmf-console-input-guard-release',
|
||||||
|
'releases/mods/fmf-gregify-employees-release',
|
||||||
|
'releases/mods/fmf-hex-label-mod-release',
|
||||||
|
'releases/mods/fmf-lang-compat-bridge-release',
|
||||||
|
'releases/mods/fmf-ui-replacement-mod-release',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Reference',
|
||||||
|
items: [
|
||||||
|
'reference/wiki-mapping',
|
||||||
|
'reference/mod-store-vision',
|
||||||
|
'reference/fmf-hook-naming',
|
||||||
|
'reference/fmf-hooks-catalog',
|
||||||
|
'reference/mcp-server',
|
||||||
|
'reference/reference-data-files',
|
||||||
|
'reference/modding-language-requirement',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Contributors (workflow)',
|
||||||
|
items: [
|
||||||
|
'contributors/repo-inventory',
|
||||||
|
'contributors/monorepo-target-layout',
|
||||||
|
'contributors/luminescent-design-system',
|
||||||
|
'contributors/docusaurus-workflow',
|
||||||
|
'contributors/plugin-submission-audit',
|
||||||
|
'contributors/sponsorship-automation',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Roadmap',
|
||||||
|
items: ['roadmap/unified-roadmap', 'roadmap/mod-store-stages'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Topics hub',
|
||||||
|
link: {type: 'doc', id: 'topics/index'},
|
||||||
|
items: [
|
||||||
|
'topics/index',
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
label: 'Cross-cutting topics',
|
||||||
|
items: [
|
||||||
|
'topics/assets-and-export/overview',
|
||||||
|
'topics/multiplayer-and-networking/overview',
|
||||||
|
'topics/ffi-and-hooks/overview',
|
||||||
|
'topics/security-legal/overview',
|
||||||
|
'topics/reference/overview',
|
||||||
|
'topics/roadmap/overview',
|
||||||
|
'topics/meta/overview',
|
||||||
|
'topics/meta/game-folder-layout',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'SPONSORS',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'SPONSORS',
|
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -431,7 +431,11 @@ body {
|
|||||||
|
|
||||||
/* Doc canvas — editorial bleed (wiki layout alignment); no hard section borders */
|
/* Doc canvas — editorial bleed (wiki layout alignment); no hard section borders */
|
||||||
.theme-doc-wrapper {
|
.theme-doc-wrapper {
|
||||||
background: linear-gradient(180deg, var(--color-surface-container-low) 0%, var(--color-background) 42%);
|
background: linear-gradient(
|
||||||
|
180deg,
|
||||||
|
var(--color-surface-container-low) 0%,
|
||||||
|
var(--color-background) 42%
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-doc-root .theme-doc-sidebar-container {
|
.theme-doc-root .theme-doc-sidebar-container {
|
||||||
@@ -576,7 +580,9 @@ body {
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
opacity: 0.85;
|
opacity: 0.85;
|
||||||
color: rgba(192, 252, 246, 0.45);
|
color: rgba(192, 252, 246, 0.45);
|
||||||
transition: color 0.2s ease, opacity 0.2s ease;
|
transition:
|
||||||
|
color 0.2s ease,
|
||||||
|
opacity 0.2s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer__link-item:hover .footer-icon-svg {
|
.footer__link-item:hover .footer-icon-svg {
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ export const moduleCatalog: ModuleEntry[] = [
|
|||||||
name: 'FMF.ModPathRedirector',
|
name: 'FMF.ModPathRedirector',
|
||||||
repoFolder: 'gregMod.PathRedirector',
|
repoFolder: 'gregMod.PathRedirector',
|
||||||
type: 'plugin',
|
type: 'plugin',
|
||||||
description: 'MelonLoader plugin: waits for each subscribed Workshop item (Steam + StreamingAssets/Mods/workshop_*) before MelonMods load.',
|
description:
|
||||||
|
'MelonLoader plugin: waits for each subscribed Workshop item (Steam + StreamingAssets/Mods/workshop_*) before MelonMods load.',
|
||||||
version: '1.5.0',
|
version: '1.5.0',
|
||||||
author: 'DataCenterExporter / gregFramework Community',
|
author: 'DataCenterExporter / gregFramework Community',
|
||||||
languages: ['C#'],
|
languages: ['C#'],
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
import type { HomepageContent } from './types';
|
|
||||||
import { homepageShellDe } from './sharedLinks';
|
|
||||||
|
|
||||||
export const de: HomepageContent = {
|
|
||||||
...homepageShellDe,
|
|
||||||
heroLine1: 'DATACENTER MODDING HUB.',
|
|
||||||
heroLine2: 'SEI SMART WIE GREG.',
|
|
||||||
heroSub1: 'Klar. Flexibel. Community-getrieben.',
|
|
||||||
heroSub2: 'gregFramework, Rust-Stacks, Multiplayer und Plugins.',
|
|
||||||
ctaStart: 'MODDING STARTEN',
|
|
||||||
ctaMods: 'VERFÜGBARE STANDALONE MODS & PLUGINS',
|
|
||||||
docsPaths: 'Dokumentationspfade',
|
|
||||||
featureTitles: ['Dual-Track Modding', 'Runtime Hook Bridge', 'Wiki-basierte Doku', 'Community-Ökosystem'],
|
|
||||||
featureDescriptions: [
|
|
||||||
'Baue Mods direkt in C# oder nativ in Rust via C-ABI/FFI.',
|
|
||||||
'Harmony-Patches, Event-IDs und deterministische Hook-Weiterleitung.',
|
|
||||||
'Source of truth aus .wiki mit Enduser- und Moddev-Pfaden.',
|
|
||||||
'Core-Framework-Doku plus Standalone-Plugin- und Ökosystem-Doku.',
|
|
||||||
],
|
|
||||||
comingSoon: 'Kommt bald',
|
|
||||||
comingSoonText: '`datacentermods.com` wird gerade vorbereitet. Bis zum Launch findest du alles unter `Docs Hub → Standalone Mods`.',
|
|
||||||
communityTitle: 'Community & Maintainer',
|
|
||||||
communityText: 'Dieses Portal bündelt gregFramework-Doku und Community-Plugins für das Data-Center-Ökosystem.',
|
|
||||||
docsEndUserTitle: 'Endnutzer',
|
|
||||||
docsEndUserDescription: 'Installation, Updates, FAQ und Fehlerbehebung.',
|
|
||||||
docsModDevsTitle: 'Mod-Entwickler',
|
|
||||||
docsModDevsDescription: 'Debug-Workflows, Setup, Hooks und Referenzen.',
|
|
||||||
docsContributorsTitle: 'Mitwirkende',
|
|
||||||
docsContributorsDescription: 'Konventionen, CI-Checks und Contribution-Workflow.',
|
|
||||||
docsCapabilityTitle: 'Capability Matrix',
|
|
||||||
docsCapabilityDescription: 'Komplette Feature-Übersicht und konkrete Use Cases.',
|
|
||||||
ecosystemTitle: 'Ecosystem Coverage',
|
|
||||||
ecosystemCoreTitle: 'gregFramework Core',
|
|
||||||
ecosystemCoreDescription: 'Hook-System, FFI-Bridge, Event-Verträge und Runtime-Architektur.',
|
|
||||||
ecosystemCoreCta: 'Core-Doku öffnen →',
|
|
||||||
ecosystemRustTitle: 'Standalone Rust',
|
|
||||||
ecosystemRustDescription: 'Rust/FFI-Implementierungsleitfäden für externe und standalone Runtimes.',
|
|
||||||
ecosystemRustCta: 'Rust/FFI-Doku öffnen →',
|
|
||||||
ecosystemMultiplayerTitle: 'Multiplayer & Plugins',
|
|
||||||
ecosystemMultiplayerDescription: 'Multiplayer-Roadmap, Plugin-Doku und Community-Modul-Referenzen.',
|
|
||||||
ecosystemMultiplayerCta: 'Multiplayer-Doku öffnen →',
|
|
||||||
gregTitle: 'Die Legende von Greg',
|
|
||||||
gregText1:
|
|
||||||
'Greg ist der unermüdliche Server-Techniker des Projekts. Er wirkt zwar so, als hätte er seit Monaten nicht mehr geschlafen, und er ist meistens still — aber sobald ein Rack ausfällt oder ein Mod zickt, ist Greg schon da.',
|
|
||||||
gregText2:
|
|
||||||
'Unterwürfig erfüllt er all deine Wünsche: mehr Uptime, sauberere Configs, bessere Logs und weniger Drama im Deployment. Er fragt nicht viel, er liefert einfach.',
|
|
||||||
gregQuote: '"Be smart. Be like Greg."',
|
|
||||||
supportTitle: 'Support',
|
|
||||||
supportText: 'Melde Bugs, fordere Doku für neue Community-Plugins an und verfolge Workstreams.',
|
|
||||||
supportCta: 'GitHub Issues öffnen',
|
|
||||||
availableModsLabel: 'Verfügbare Mods',
|
|
||||||
repositoryLabel: 'Repository',
|
|
||||||
joinLabel: 'BEITRETEN',
|
|
||||||
};
|
|
||||||
@@ -5,20 +5,21 @@ export const en: HomepageContent = {
|
|||||||
...homepageShellEn,
|
...homepageShellEn,
|
||||||
heroLine1: 'DATACENTER MODDING HUB.',
|
heroLine1: 'DATACENTER MODDING HUB.',
|
||||||
heroLine2: 'SMART LIKE GREG.',
|
heroLine2: 'SMART LIKE GREG.',
|
||||||
heroSub1: 'Streamlined. Flexible. Community-curated.',
|
heroSub1: 'Install mods, use the Workshop, fix common issues — without digging through engine docs.',
|
||||||
heroSub2: 'gregFramework, Rust stacks, multiplayer, and plugins.',
|
heroSub2: 'Technical reference for authors lives under Developers in the wiki.',
|
||||||
ctaStart: 'START MODDING',
|
ctaStart: 'HELP FOR PLAYERS',
|
||||||
ctaMods: 'AVAILABLE STANDALONE MODS & PLUGINS',
|
ctaMods: 'MOD CATALOG',
|
||||||
docsPaths: 'Documentation paths',
|
docsPaths: 'Documentation paths',
|
||||||
featureTitles: ['Dual-track modding', 'Runtime hook bridge', 'Wiki-driven docs', 'Community ecosystem'],
|
featureTitles: ['Play with mods', 'Workshop & updates', 'Clear docs', 'Community'],
|
||||||
featureDescriptions: [
|
featureDescriptions: [
|
||||||
'Build mods in C# or natively in Rust via C-ABI/FFI.',
|
'Step-by-step paths for installing and troubleshooting — no repo jargon on day one.',
|
||||||
'Harmony patches, event IDs, and deterministic hook forwarding.',
|
'WorkshopManager and release channels explain where builds come from.',
|
||||||
'Source of truth from .wiki with end-user and mod-dev paths.',
|
'Player pages are short; author pages stay under one Developers section.',
|
||||||
'Core framework docs plus standalone plugin and ecosystem docs.',
|
'Discord and GitHub for help — framework internals only when you need them.',
|
||||||
],
|
],
|
||||||
comingSoon: 'Coming soon',
|
comingSoon: 'Coming soon',
|
||||||
comingSoonText: '`datacentermods.com` is in preparation. Until launch, use `Docs Hub → Standalone Mods`.',
|
comingSoonText:
|
||||||
|
'`datacentermods.com` is in preparation. Until launch, use the wiki **For players** and the **Mod catalog**.',
|
||||||
communityTitle: 'Community & maintainers',
|
communityTitle: 'Community & maintainers',
|
||||||
communityText: 'This portal is designed for gregFramework docs and community-built plugins across the Data Center ecosystem.',
|
communityText: 'This portal is designed for gregFramework docs and community-built plugins across the Data Center ecosystem.',
|
||||||
docsEndUserTitle: 'End-user',
|
docsEndUserTitle: 'End-user',
|
||||||
|
|||||||
@@ -1,25 +1,8 @@
|
|||||||
import { de } from './de';
|
import {en} from './en';
|
||||||
import { en } from './en';
|
import type {HomepageContent} from './types';
|
||||||
import type { HomepageContent, LocaleKey } from './types';
|
|
||||||
|
|
||||||
const homepageByLocale: Record<LocaleKey, HomepageContent> = {
|
export type {HomepageContent, LocaleKey} from './types';
|
||||||
en,
|
|
||||||
de,
|
|
||||||
};
|
|
||||||
|
|
||||||
export type { HomepageContent, LocaleKey } from './types';
|
export function getHomepageContent(_locale: string): HomepageContent {
|
||||||
|
return en;
|
||||||
export function getHomepageContent(locale: string): HomepageContent {
|
|
||||||
const normalizedLocale = (locale || 'en').toLowerCase();
|
|
||||||
const languageOnly = normalizedLocale.split('-')[0] as LocaleKey;
|
|
||||||
|
|
||||||
if (normalizedLocale in homepageByLocale) {
|
|
||||||
return homepageByLocale[normalizedLocale as LocaleKey];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (languageOnly in homepageByLocale) {
|
|
||||||
return homepageByLocale[languageOnly];
|
|
||||||
}
|
|
||||||
|
|
||||||
return homepageByLocale.en;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,122 +1,81 @@
|
|||||||
import type { HomepageContent, HomepageDocLink } from './types';
|
import type {HomepageContent, HomepageDocLink} from './types';
|
||||||
|
|
||||||
/** English link hub — reused for locales without dedicated translations. */
|
/** Player-first links — technical docs live under /wiki/developers */
|
||||||
export const sharedKnowledgeLinksEn: HomepageDocLink[] = [
|
export const sharedKnowledgeLinksEn: HomepageDocLink[] = [
|
||||||
{ title: 'Wiki Overview', description: 'Canonical docs entry under /wiki.', link: '/wiki' },
|
{title: 'Wiki home', description: 'Short entry — players vs developers.', link: '/wiki'},
|
||||||
{
|
{
|
||||||
title: 'Framework Core',
|
title: 'For players',
|
||||||
description: 'Runtime hooks, bridge, events, and architecture.',
|
description: 'Install, update, troubleshooting.',
|
||||||
link: '/wiki/mods/framework',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Plugins (FFM)',
|
|
||||||
description: 'FFM.Plugin.* docs and release pages.',
|
|
||||||
link: '/wiki/plugins/',
|
|
||||||
},
|
|
||||||
{ title: 'Mods (FMF)', description: 'Gameplay mods, releases, and module docs.', link: '/wiki/mods/' },
|
|
||||||
{
|
|
||||||
title: 'FMF Hooks Catalog',
|
|
||||||
description: 'Hook strings and event IDs generated from core sources.',
|
|
||||||
link: '/wiki/reference/fmf-hooks-catalog',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Release Channels',
|
|
||||||
description: 'Steam Workshop vs GitHub for discovery and betas.',
|
|
||||||
link: '/wiki/reference/release-channels',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Unified Roadmap',
|
|
||||||
description: 'Consolidated planning with duplicate tracks removed.',
|
|
||||||
link: '/wiki/roadmap/unified-roadmap',
|
|
||||||
},
|
|
||||||
{ title: 'Mods Catalog', description: 'Dynamic /mods page with wiki and download links.', link: '/mods' },
|
|
||||||
];
|
|
||||||
|
|
||||||
export const sharedWorkflowLinksEn: HomepageDocLink[] = [
|
|
||||||
{
|
|
||||||
title: 'End-user docs',
|
|
||||||
description: 'Install, update, and troubleshooting paths.',
|
|
||||||
link: '/wiki/guides/players/overview',
|
link: '/wiki/guides/players/overview',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Mod developer docs',
|
title: 'WorkshopManager',
|
||||||
description: 'Setup, debugging, and hook integration.',
|
description: 'Browse and install Workshop mods.',
|
||||||
|
link: '/wiki/guides/players/enduser-workshop',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Release channels',
|
||||||
|
description: 'Steam Workshop vs GitHub for builds.',
|
||||||
|
link: '/wiki/reference/release-channels',
|
||||||
|
},
|
||||||
|
{title: 'Mod catalog', description: 'Modules with docs and download links.', link: '/mods'},
|
||||||
|
];
|
||||||
|
|
||||||
|
/** Authors & contributors — one hop to the full technical tree */
|
||||||
|
export const sharedWorkflowLinksEn: HomepageDocLink[] = [
|
||||||
|
{
|
||||||
|
title: 'Developers (hub)',
|
||||||
|
description: 'Framework, mods, plugins, reference, roadmap — all technical links.',
|
||||||
|
link: '/wiki/developers',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Mod developer guide',
|
||||||
|
description: 'Hooks, setup, and workflow entry.',
|
||||||
link: '/wiki/guides/mod-developers/overview',
|
link: '/wiki/guides/mod-developers/overview',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
title: 'Repo inventory',
|
|
||||||
description: 'Split-repo layout and drift notes for contributors.',
|
|
||||||
link: '/wiki/contributors/repo-inventory',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: 'Contributor workflow',
|
title: 'Contributor workflow',
|
||||||
description: 'Standards, CI, and documentation workflow.',
|
description: 'Docs site and repo conventions.',
|
||||||
link: '/wiki/contributors/docusaurus-workflow',
|
link: '/wiki/contributors/docusaurus-workflow',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
title: 'Plugin security audit',
|
|
||||||
description: 'Submission and malicious-code review process.',
|
|
||||||
link: '/wiki/contributors/plugin-submission-audit',
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
|
|
||||||
export const sharedKnowledgeLinksDe: HomepageDocLink[] = [
|
export const sharedKnowledgeLinksDe: HomepageDocLink[] = [
|
||||||
{ title: 'Wiki-Übersicht', description: 'Einstieg unter /wiki.', link: '/wiki' },
|
{title: 'Wiki-Start', description: 'Kurzüberblick — Spieler vs. Entwickler.', link: '/wiki'},
|
||||||
{
|
{
|
||||||
title: 'Framework-Core',
|
title: 'Für Spieler',
|
||||||
description: 'Runtime-Hooks, Bridge, Events und Architektur.',
|
description: 'Installation, Updates, Fehlerbehebung.',
|
||||||
link: '/wiki/mods/framework',
|
link: '/wiki/guides/players/overview',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Plugins (FFM)',
|
title: 'WorkshopManager',
|
||||||
description: 'FFM.Plugin.*-Doku und Release-Seiten.',
|
description: 'Workshop-Mods suchen und installieren.',
|
||||||
link: '/wiki/plugins/',
|
link: '/wiki/guides/players/enduser-workshop',
|
||||||
},
|
|
||||||
{ title: 'Mods (FMF)', description: 'Gameplay-Mods, Releases und Modul-Doku.', link: '/wiki/mods/' },
|
|
||||||
{
|
|
||||||
title: 'FMF-Hooks-Katalog',
|
|
||||||
description: 'Hook-Strings und Event-IDs aus den Core-Quellen.',
|
|
||||||
link: '/wiki/reference/fmf-hooks-catalog',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Release-Kanäle',
|
title: 'Release-Kanäle',
|
||||||
description: 'Steam Workshop vs GitHub für Discovery und Betas.',
|
description: 'Steam Workshop vs GitHub.',
|
||||||
link: '/wiki/reference/release-channels',
|
link: '/wiki/reference/release-channels',
|
||||||
},
|
},
|
||||||
{
|
{title: 'Mod-Katalog', description: 'Module mit Doku- und Download-Links.', link: '/mods'},
|
||||||
title: 'Einheitliche Roadmap',
|
|
||||||
description: 'Zusammengeführte Planung ohne doppelte Tracks.',
|
|
||||||
link: '/wiki/roadmap/unified-roadmap',
|
|
||||||
},
|
|
||||||
{ title: 'Mods-Katalog', description: 'Dynamische /mods-Seite mit Wiki- und Download-Links.', link: '/mods' },
|
|
||||||
];
|
];
|
||||||
|
|
||||||
export const sharedWorkflowLinksDe: HomepageDocLink[] = [
|
export const sharedWorkflowLinksDe: HomepageDocLink[] = [
|
||||||
{
|
{
|
||||||
title: 'Endnutzer-Doku',
|
title: 'Entwickler (Hub)',
|
||||||
description: 'Installation, Updates und Fehlerbehebung.',
|
description: 'Framework, Mods, Plugins, Referenz — alle technischen Links.',
|
||||||
link: '/wiki/guides/players/overview',
|
link: '/wiki/developers',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Mod-Entwickler-Doku',
|
title: 'Mod-Entwickler-Guide',
|
||||||
description: 'Setup, Debugging und Hook-Integration.',
|
description: 'Hooks, Setup, Einstieg.',
|
||||||
link: '/wiki/guides/mod-developers/overview',
|
link: '/wiki/guides/mod-developers/overview',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
title: 'Repo-Inventar',
|
|
||||||
description: 'Split-Repo-Layout und Drift-Hinweise.',
|
|
||||||
link: '/wiki/contributors/repo-inventory',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: 'Contributor-Workflow',
|
title: 'Contributor-Workflow',
|
||||||
description: 'Standards, CI und Doku-Workflow.',
|
description: 'Doku-Site und Repo-Konventionen.',
|
||||||
link: '/wiki/contributors/docusaurus-workflow',
|
link: '/wiki/contributors/docusaurus-workflow',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
title: 'Plugin-Security-Audit',
|
|
||||||
description: 'Einreichung und Review auf Schadcode.',
|
|
||||||
link: '/wiki/contributors/plugin-submission-audit',
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
|
|
||||||
export const homepageShellEn: Pick<
|
export const homepageShellEn: Pick<
|
||||||
@@ -137,13 +96,13 @@ export const homepageShellEn: Pick<
|
|||||||
heroBadge: 'gregFramework · docs live',
|
heroBadge: 'gregFramework · docs live',
|
||||||
heroBrandLine1: 'greg',
|
heroBrandLine1: 'greg',
|
||||||
heroBrandLine2Gradient: 'Framework',
|
heroBrandLine2Gradient: 'Framework',
|
||||||
knowledgeSectionTitle: 'Knowledge architecture',
|
knowledgeSectionTitle: 'Players — start here',
|
||||||
workflowSectionTitle: 'Workflows',
|
workflowSectionTitle: 'Authors & contributors',
|
||||||
codeSectionTitle: 'Engineered for mod authors',
|
codeSectionTitle: 'Building on gregFramework',
|
||||||
codeSectionLead:
|
codeSectionLead:
|
||||||
'C# mods on MelonLoader, FMF plugins, and optional Rust FFI bridges — one documentation hub, versioned with the split repos.',
|
'C# mods on MelonLoader, FFM plugins, and optional Rust bridges — details for authors are under Developers.',
|
||||||
ctaDiscordTitle: 'Build with the community',
|
ctaDiscordTitle: 'Community',
|
||||||
ctaDiscordLead: 'Ask questions, share mods, and follow framework releases alongside core development.',
|
ctaDiscordLead: 'Questions about playing or building — ask in Discord.',
|
||||||
ctaDiscordButton: 'Join Discord',
|
ctaDiscordButton: 'Join Discord',
|
||||||
knowledgeLinks: sharedKnowledgeLinksEn,
|
knowledgeLinks: sharedKnowledgeLinksEn,
|
||||||
workflowLinks: sharedWorkflowLinksEn,
|
workflowLinks: sharedWorkflowLinksEn,
|
||||||
@@ -167,13 +126,13 @@ export const homepageShellDe: Pick<
|
|||||||
heroBadge: 'gregFramework · Live-Dokumentation',
|
heroBadge: 'gregFramework · Live-Dokumentation',
|
||||||
heroBrandLine1: 'greg',
|
heroBrandLine1: 'greg',
|
||||||
heroBrandLine2Gradient: 'Framework',
|
heroBrandLine2Gradient: 'Framework',
|
||||||
knowledgeSectionTitle: 'Wissensarchitektur',
|
knowledgeSectionTitle: 'Spieler — Einstieg',
|
||||||
workflowSectionTitle: 'Arbeitsabläufe',
|
workflowSectionTitle: 'Autoren & Contributors',
|
||||||
codeSectionTitle: 'Für Mod-Autoren gebaut',
|
codeSectionTitle: 'Auf gregFramework aufbauen',
|
||||||
codeSectionLead:
|
codeSectionLead:
|
||||||
'C#-Mods auf MelonLoader, FMF-Plugins und optionale Rust-FFI-Brücken — ein Dokumentations-Hub, versioniert mit den Split-Repos.',
|
'C#-Mods auf MelonLoader, FFM-Plugins, optionale Rust-Brücken — Details für Autoren unter Entwickler.',
|
||||||
ctaDiscordTitle: 'Mit der Community bauen',
|
ctaDiscordTitle: 'Community',
|
||||||
ctaDiscordLead: 'Fragen stellen, Mods teilen und Releases parallel zur Core-Entwicklung verfolgen.',
|
ctaDiscordLead: 'Fragen zum Spielen oder Bauen — im Discord.',
|
||||||
ctaDiscordButton: 'Discord beitreten',
|
ctaDiscordButton: 'Discord beitreten',
|
||||||
knowledgeLinks: sharedKnowledgeLinksDe,
|
knowledgeLinks: sharedKnowledgeLinksDe,
|
||||||
workflowLinks: sharedWorkflowLinksDe,
|
workflowLinks: sharedWorkflowLinksDe,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export type LocaleKey = 'en' | 'de';
|
export type LocaleKey = 'en';
|
||||||
|
|
||||||
export type HomepageDocLink = {
|
export type HomepageDocLink = {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import type { LocaleKey } from './homepage/types';
|
|
||||||
|
|
||||||
export type ModsPageStrings = {
|
export type ModsPageStrings = {
|
||||||
title: string;
|
title: string;
|
||||||
description: string;
|
description: string;
|
||||||
@@ -13,36 +11,20 @@ export type ModsPageStrings = {
|
|||||||
legacyNoSplitRepo: string;
|
legacyNoSplitRepo: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const byLocale: Record<LocaleKey, ModsPageStrings> = {
|
const strings: ModsPageStrings = {
|
||||||
en: {
|
title: 'Mods & plugins catalog',
|
||||||
title: 'Mods & plugins catalog',
|
description:
|
||||||
description:
|
'Generated from the module catalog. Each entry links to its wiki article, release page, and download route.',
|
||||||
'Generated from the module catalog. Each entry links to its wiki article, release page, and download route.',
|
pluginsHeading: 'Plugins',
|
||||||
pluginsHeading: 'Plugins',
|
modsHeading: 'Mods',
|
||||||
modsHeading: 'Mods',
|
wiki: 'Wiki',
|
||||||
wiki: 'Wiki',
|
release: 'Release',
|
||||||
release: 'Release',
|
download: 'Download DLL',
|
||||||
download: 'Download DLL',
|
notReleased: 'Not released yet',
|
||||||
notReleased: 'Not released yet',
|
repoFolder: 'gregFramework folder',
|
||||||
repoFolder: 'gregFramework folder',
|
legacyNoSplitRepo: 'Legacy — no split repo in workspace',
|
||||||
legacyNoSplitRepo: 'Legacy — no split repo in workspace',
|
|
||||||
},
|
|
||||||
de: {
|
|
||||||
title: 'Mods- & Plugin-Katalog',
|
|
||||||
description:
|
|
||||||
'Aus dem Modul-Katalog erzeugt. Jeder Eintrag verweist auf Wiki, Release-Seite und Download-Route.',
|
|
||||||
pluginsHeading: 'Plugins',
|
|
||||||
modsHeading: 'Mods',
|
|
||||||
wiki: 'Wiki',
|
|
||||||
release: 'Release',
|
|
||||||
download: 'DLL laden',
|
|
||||||
notReleased: 'Noch nicht veröffentlicht',
|
|
||||||
repoFolder: 'Ordner unter gregFramework',
|
|
||||||
legacyNoSplitRepo: 'Legacy — kein Split-Repo im Workspace',
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export function getModsPageStrings(locale: string): ModsPageStrings {
|
export function getModsPageStrings(_locale: string): ModsPageStrings {
|
||||||
const languageOnly = (locale || 'en').toLowerCase().split('-')[0] as LocaleKey;
|
return strings;
|
||||||
return byLocale[languageOnly] ?? byLocale.en;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ export default function HomePage(): JSX.Element {
|
|||||||
return (
|
return (
|
||||||
<Layout
|
<Layout
|
||||||
title="Home"
|
title="Home"
|
||||||
description="Community documentation for gregFramework — Data Center modding, plugins, and hooks."
|
description="Help for Data Center players using mods — plus developer docs under /wiki/developers."
|
||||||
>
|
>
|
||||||
<main className="bg-background text-on-surface font-sans min-h-screen editorial-bleed bg-hero-gradient">
|
<main className="bg-background text-on-surface font-sans min-h-screen editorial-bleed bg-hero-gradient">
|
||||||
<section className="hero-motion-wrap relative flex min-h-[72vh] flex-col items-center justify-center overflow-hidden px-4 py-24 text-center">
|
<section className="hero-motion-wrap relative flex min-h-[72vh] flex-col items-center justify-center overflow-hidden px-4 py-24 text-center">
|
||||||
@@ -138,7 +138,7 @@ export default function HomePage(): JSX.Element {
|
|||||||
transition={{delay: reducedMotion ? 0 : 0.22}}
|
transition={{delay: reducedMotion ? 0 : 0.22}}
|
||||||
>
|
>
|
||||||
<Link
|
<Link
|
||||||
to="/wiki/mods/framework"
|
to="/wiki/guides/players/overview"
|
||||||
className="btn-primary hero-glow rounded-lg px-10 py-4 text-lg"
|
className="btn-primary hero-glow rounded-lg px-10 py-4 text-lg"
|
||||||
>
|
>
|
||||||
{t.ctaStart}
|
{t.ctaStart}
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ export default function FooterLinkItem({item}: Props): ReactNode {
|
|||||||
: {
|
: {
|
||||||
to: toUrl,
|
to: toUrl,
|
||||||
})}
|
})}
|
||||||
{...props}>
|
{...props}
|
||||||
|
>
|
||||||
{icon ? (
|
{icon ? (
|
||||||
<span className="footer-link-with-icon">
|
<span className="footer-link-with-icon">
|
||||||
{icon}
|
{icon}
|
||||||
|
|||||||
@@ -25,9 +25,7 @@ function useLocaleDropdownUtils() {
|
|||||||
const getLocaleConfig = (locale: string) => {
|
const getLocaleConfig = (locale: string) => {
|
||||||
const localeConfig = localeConfigs[locale];
|
const localeConfig = localeConfigs[locale];
|
||||||
if (!localeConfig) {
|
if (!localeConfig) {
|
||||||
throw new Error(
|
throw new Error(`Docusaurus bug, no locale config found for locale=${locale}`);
|
||||||
`Docusaurus bug, no locale config found for locale=${locale}`,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return localeConfig;
|
return localeConfig;
|
||||||
};
|
};
|
||||||
@@ -49,10 +47,7 @@ function useLocaleDropdownUtils() {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
getURL: (locale: string, options: {queryString: string | undefined}) => {
|
getURL: (locale: string, options: {queryString: string | undefined}) => {
|
||||||
const finalSearch = mergeSearchStrings(
|
const finalSearch = mergeSearchStrings([search, options.queryString], 'append');
|
||||||
[search, options.queryString],
|
|
||||||
'append',
|
|
||||||
);
|
|
||||||
return `${getBaseURLForLocale(locale)}${finalSearch}${hash}`;
|
return `${getBaseURLForLocale(locale)}${finalSearch}${hash}`;
|
||||||
},
|
},
|
||||||
getLabel: (locale: string) => {
|
getLabel: (locale: string) => {
|
||||||
@@ -85,11 +80,7 @@ export default function LocaleDropdownNavbarItem({
|
|||||||
target: '_self',
|
target: '_self',
|
||||||
autoAddBaseUrl: false,
|
autoAddBaseUrl: false,
|
||||||
className:
|
className:
|
||||||
locale === currentLocale
|
locale === currentLocale ? (mobile ? 'menu__link--active' : 'dropdown__link--active') : '',
|
||||||
? mobile
|
|
||||||
? 'menu__link--active'
|
|
||||||
: 'dropdown__link--active'
|
|
||||||
: '',
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -103,15 +94,11 @@ export default function LocaleDropdownNavbarItem({
|
|||||||
})
|
})
|
||||||
: utils.getLabel(currentLocale);
|
: utils.getLabel(currentLocale);
|
||||||
|
|
||||||
const iconOnlyDesktop =
|
const iconOnlyDesktop = !mobile && String(className ?? '').includes('nav-icon-only');
|
||||||
!mobile && String(className ?? '').includes('nav-icon-only');
|
|
||||||
|
|
||||||
const label: ReactNode = (
|
const label: ReactNode = (
|
||||||
<>
|
<>
|
||||||
<IoLanguage
|
<IoLanguage className={iconOnlyDesktop ? styles.iconOnly : styles.iconLanguage} aria-hidden />
|
||||||
className={iconOnlyDesktop ? styles.iconOnly : styles.iconLanguage}
|
|
||||||
aria-hidden
|
|
||||||
/>
|
|
||||||
{mobile || !iconOnlyDesktop ? (
|
{mobile || !iconOnlyDesktop ? (
|
||||||
dropdownLabel
|
dropdownLabel
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@@ -80,9 +80,7 @@ export default function NavbarNavLink({
|
|||||||
<>
|
<>
|
||||||
{label}
|
{label}
|
||||||
{isExternalLink && (
|
{isExternalLink && (
|
||||||
<IconExternalLink
|
<IconExternalLink {...(isDropdownLink && {width: 12, height: 12})} />
|
||||||
{...(isDropdownLink && {width: 12, height: 12})}
|
|
||||||
/>
|
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user