vMenu Docs

Repository Structure

How the vMenu source is laid out, what each part is responsible for.

Deze pagina is nog niet vertaald. De Engelse versie wordt getoond.

The vMenu repository holds two products in one codebase:

ProductBranchDocs
vMenu Enhanced (current)maindocs.vespura.com/vmenu/enhanced
vMenu Legacy (v3.9.2 and below, frozen)legacydocs.vespura.com/vmenu/legacy

main contains the full Enhanced source. The legacy branch is the old vMenu, kept for download and for the saved-data importer.

Top level

PathWhat it is
src/All C# source. Split into Enhanced, Legacy and Shared.
docs/The Astro + Starlight site that produces docs.vespura.com. The markdown in docs/src/content/docs is the source of the published docs.
assets/Images and branding: enhanced/, legacy/, shared/, txadmin/.
dependencies/Vendored dependencies for the legacy build.
tools/Helper projects: ConfigDefaults, LanguageTemplate, LegacyChecks, vMenu.Enhanced.Localization.Generator, vMenu.Enhanced.NativeHooks.Generator.
.github/workflows/combined.yml, dev-enhanced.yml, docs.yml — CI and the docs deploy.
vMenu.Enhanced.slnxThe solution.
LICENSE.mdGPL-3.0-or-later. Authoritative over anything else that says so.

src/

src/
├── Enhanced/          # vMenu Enhanced (GTA V Enhanced + Legacy FiveM)
│   ├── Client/        # client-side runtime, menus, native hooks
│   ├── Server/        # server-side runtime, permissions, config, webhooks
│   └── PluginApi/     # the public plugin surface (ClientAPI / ServerAPI)
├── Legacy/            # the original vMenu, kept building
│   ├── Client/
│   ├── Server/
│   └── PluginApi/
└── Shared/            # code both builds compile in
    ├── vMenu.Enhanced.Data          # data model, settings, permissions, catalogs
    ├── vMenu.Enhanced.PluginContracts  # the shared plugin protocol
    ├── vMenu.Enhanced.PluginAnalyzers  # Roslyn analyzers that validate plugins
    ├── vMenu.Enhanced.Localization   # translation files and the Loc.* accessors
    ├── vMenu.Enhanced.JsAPI         # the JavaScript plugin API (TypeScript source, built with npm)
    ├── vMenu.Enhanced.LuaAPI        # the Lua plugin API (vmenu.lua)
    ├── vMenu.Enhanced.Logging       # logging primitives
    └── vMenu.Enhanced.Polyfills     # polyfills for older runtimes

src/Enhanced/Client

ProjectResponsibility
vMenu.Enhanced.ActionsThe things a player can do (freeze, teleport, explode, …).
vMenu.Enhanced.BrokenNativesWorkarounds for natives that misbehave.
vMenu.Enhanced.ConfigurationClient-side reading of the server config.
vMenu.Enhanced.CoreClient entry point.
vMenu.Enhanced.EventsClient-side event plumbing.
vMenu.Enhanced.MenuFrameworkThe menu renderer, themes and layout.
vMenu.Enhanced.MenusEvery menu the player sees.
vMenu.Enhanced.NativeHooksHooks into GTA natives.
vMenu.Enhanced.NoClipThe noclip feature.
vMenu.Enhanced.PermissionsClient-side permission state and sync.
vMenu.Enhanced.PluginsClient-side plugin host.
vMenu.Enhanced.SerializationReading and writing saved data.
vMenu.Enhanced.StorageWhere saved data lives on disk.
vMenu.Enhanced.TicksThe tick scheduler.

src/Enhanced/Server

ProjectResponsibility
vMenu.Enhanced.Actions.ServerServer-side validation of player actions.
vMenu.Enhanced.BrokenNatives.ServerServer-side native workarounds.
vMenu.Enhanced.Configuration.ServerThe configuration.cfg writer and the example file.
vMenu.Enhanced.Core.ServerServer entry point.
vMenu.Enhanced.Http.ServerOutbound HTTP, used by webhooks and the integration API.
vMenu.Enhanced.Integration.ServerThe SnowstormBot / role-sync integration.
vMenu.Enhanced.Permissions.ServerThe permission registry and the permissions.cfg writer.
vMenu.Enhanced.Players.ServerPlayer state.
vMenu.Enhanced.Plugins.ServerServer-side plugin host.
vMenu.Enhanced.Serialization.ServerServer-side saved-data handling.
vMenu.Enhanced.Ticks.ServerServer-side tick scheduler.
vMenu.Enhanced.Updates.ServerUpdate checking.
vMenu.Enhanced.Webhooks.ServerDiscord webhook logging.
vMenu.Enhanced.World.ServerThe World API surface.

Where the reference material lives

WhatWhere in the source
Every configuration setting (name, type, default, description)src/Shared/vMenu.Enhanced.Data/Configuration/Settings/*.cs
The order settings are written into configuration.cfgsrc/Shared/vMenu.Enhanced.Data/Configuration/ConfigCatalog.cs
Every permission, grouped by categorysrc/Shared/vMenu.Enhanced.Data/Permissions/
How the dotted permission scheme resolves inheritancesrc/Shared/vMenu.Enhanced.Data/Permissions/PermissionPath.cs
The generated permissions.cfg examplesrc/Shared/vMenu.Enhanced.Data/Permissions/PermissionsExample.cs
The generated configuration.cfg examplesrc/Shared/vMenu.Enhanced.Data/Configuration/ConfigurationExample.cs
The plugin protocol shared by both sidessrc/Shared/vMenu.Enhanced.PluginContracts/
The public plugin surface for C# pluginssrc/Enhanced/PluginApi/vMenu.Enhanced.ClientAPI/ and .../vMenu.Enhanced.ServerAPI/
The JavaScript and Lua plugin surfacessrc/Shared/vMenu.Enhanced.JsAPI/src/ (TypeScript), src/Shared/vMenu.Enhanced.LuaAPI/vmenu.lua
The published documentation sourcedocs/src/content/docs/

Building

The solution targets .NET with a global.json pinning the SDK. nuget.config points at the package feeds. The legacy build pulls vendored binaries from dependencies/legacy.

The docs site is a separate npm project inside docs/ (npm install && npm run build), and docs.yml in CI deploys it to docs.vespura.com.

Op deze pagina