mirror of
https://github.com/mleem97/gregWiki.git
synced 2026-04-11 03:29:19 +02:00
- Changed project title and tagline in docusaurus.config.js to reflect the new branding. - Updated package.json and package-lock.json to rename the project to gregwiki-docs-site. - Adjusted sidebar and documentation files to align with the new project structure and naming conventions. - Enhanced documentation content for clarity and consistency across various sections. - Added Prettier as a development dependency for code formatting. This commit aligns the project with the new branding and improves overall documentation quality.
4.4 KiB
4.4 KiB
id, title, sidebar_label, description, sidebar_position, tags
| id | title | sidebar_label | description | sidebar_position | tags | ||
|---|---|---|---|---|---|---|---|
| contributor-workshop | Contributor Guide — WorkshopManager | Contributor Guide | Development setup, building, publishing workflow, and release process for the WorkshopManager. | 20 |
|
Contributor Guide — WorkshopManager
This guide covers the development workflow for the WorkshopManager and how to publish mods to the Steam Workshop.
Prerequisites
- Visual Studio 2022 with .NET Multi-platform App UI and Windows App SDK workloads.
- .NET 9 SDK (for the WorkshopManager MAUI app).
- .NET 6 SDK (for framework, plugins, and mods targeting MelonLoader).
- Steam with Data Center installed (App ID 4170200).
Repository structure
| Path | Purpose |
|---|---|
framework/FrikaMF.csproj |
Core MelonLoader framework DLL |
plugins/FFM.Plugin.*/ |
FMF extension plugins (5 projects) |
mods/FMF.*/ |
Standalone mods (4 projects) |
WorkshopUploader/ |
WorkshopManager MAUI app |
scripts/Deploy-Release-ToWorkshop.ps1 |
Package all builds into Workshop folders |
scripts/Deploy-Release-ToDataCenter.ps1 |
Deploy to game for local testing |
Building
Build everything (solution)
dotnet build FrikaMF.sln -c Release
Build standalone mods (not in solution)
dotnet build mods/FMF.ConsoleInputGuard/FMF.ConsoleInputGuard.csproj -c Release
dotnet build mods/FMF.Mod.GregifyEmployees/FMF.GregifyEmployees.csproj -c Release
dotnet build mods/FMF.Mod.HexLabelMod/FMF.HexLabelMod.csproj -c Release
dotnet build mods/FMF.Plugin.LangCompatBridge/FMF.JoniMLCompatMod.csproj -c Release
Build WorkshopManager only
dotnet build WorkshopUploader/WorkshopUploader.csproj -c Release
Workshop project structure
Each mod/plugin gets its own folder under <GameRoot>/workshop/:
<GameRoot>/workshop/
├── FrikaModFramework/
│ ├── content/
│ │ └── Mods/
│ │ └── FrikaModdingFramework.dll
│ ├── metadata.json
│ └── preview.png
├── FFM.Plugin.Multiplayer/
│ ├── content/
│ │ └── FMF/
│ │ └── Plugins/
│ │ └── FFM.Plugin.Multiplayer.dll
│ ├── metadata.json
│ └── preview.png
└── ...
The content/ folder mirrors the game directory structure and is what Steam uploads.
Deploy to Workshop folders
pwsh -File scripts/Deploy-Release-ToWorkshop.ps1
This script:
- Builds all framework, plugin, and mod projects.
- Creates a Workshop project folder for each under
<GameRoot>/workshop/. - Copies the built DLL into
content/<target path>/. - Creates
metadata.jsonwith title, description, tags, and visibility.
Publishing workflow
GUI (recommended)
- Run the WorkshopManager app.
- Open a project from the Projects tab.
- Edit title, description, tags, visibility, and preview image.
- Write change notes describing what changed.
- Click Save and upload to Steam.
- After upload, the app syncs your local
content/with Steam's version.
CLI (headless)
WorkshopUploader.exe --mode publish --path <project-folder>
Post-upload sync
After publishing, the app re-downloads the item from Steam and replaces your local content/ folder. This ensures your working copy matches exactly what Steam has — similar to git pull after git push.
Extending the service layer
The SteamWorkshopService in WorkshopUploader/Services/SteamWorkshopService.cs wraps the Facepunch.Steamworks 2.3.3 API. Key methods:
| Method | Purpose |
|---|---|
PublishAsync |
Create or update a Workshop item with change notes |
SyncAfterPublishAsync |
Re-download from Steam to sync local content |
BrowseAsync |
Browse all Workshop items with sort/tag filters |
SearchAsync |
Text search across Workshop items |
ListSubscribedAsync |
List user's subscribed items |
ListFavoritedAsync |
List user's favorited items |
SubscribeAsync / UnsubscribeAsync |
Toggle subscription |
AddFavoriteAsync / RemoveFavoriteAsync |
Toggle favorite |
VoteAsync |
Vote up or down |
GetItemDetailsAsync |
Full item details with stats |
Adding a new mod to the release
- Create the mod project under
mods/. - Add it to the
$modsarray inDeploy-Release-ToWorkshop.ps1. - Run the deploy script.
- Open the new workshop project in the WorkshopManager and publish.