diff --git a/docs/OWNED_STORAGE_USAGE_GUIDE.md b/docs/OWNED_STORAGE_USAGE_GUIDE.md index 1cc5223..b9310bd 100644 --- a/docs/OWNED_STORAGE_USAGE_GUIDE.md +++ b/docs/OWNED_STORAGE_USAGE_GUIDE.md @@ -80,6 +80,25 @@ New owned garages are created with default unlocks from the Rust model. | `owned:garage:delete` | `uid` | `OK`. | | `owned:garage:exists` | `uid` | `true` or `false`. | +## Starting Equipment And Unlocks + +Missions can include `CfgStartingEquipment.hpp` from `description.ext` to set +new-player loadout and initial virtual arsenal or garage unlocks without +recompiling the framework. + +```cpp +#include "CfgStartingEquipment.hpp" +``` + +`loadout[]` uses the standard Arma loadout array shape. `Unlocks.Locker` +supports `items[]`, `weapons[]`, `magazines[]`, and `backpacks[]`. +`Unlocks.Garage` supports `cars[]`, `armor[]`, `helis[]`, `planes[]`, +`naval[]`, and `other[]`. + +The extension defaults are intentionally empty. The server seeds mission +starting unlocks only when a player does not already have persistent owned +locker or garage records. + ## Add Virtual Arsenal Unlocks ```sqf diff --git a/docs/STORE_USAGE_GUIDE.md b/docs/STORE_USAGE_GUIDE.md index e8095ce..e1bf619 100644 --- a/docs/STORE_USAGE_GUIDE.md +++ b/docs/STORE_USAGE_GUIDE.md @@ -34,6 +34,22 @@ Include `CfgStore.hpp` from `description.ext`: ```cpp class CfgStore { mode = "allowlist"; // dynamic, allowlist, or denylist + modMode = "dynamic"; // dynamic, allowlist, or denylist + mods[] = {}; // ModSources child class names used when modMode is not dynamic + + class ModSources { + class rhs { + patches[] = {"rhs_main", "rhsusf_main"}; + addons[] = {"rhs_", "rhsusf_", "rhsgref_", "rhsafrf_"}; + prefixes[] = {"rhs_", "rhsusf_", "rhsgref_", "rhsafrf_"}; + }; + + class ace3 { + patches[] = {"ace_main"}; + addons[] = {"ace_"}; + prefixes[] = {"ace_"}; + }; + }; class Categories { primary[] = {"arifle_MX_F", "arifle_MXC_F"}; @@ -56,6 +72,13 @@ listed for each category. `denylist` removes listed classnames. Overrides are server-side and are used by both the UI payload and checkout validation. `units[]` uses the same filter behavior as every other category. +`modMode` applies before category filtering. `allowlist` only keeps generated +entries that match one of the configured `mods[]`; `denylist` removes matching +entries. Each `ModSources` child can define `patches[]` to detect whether the +mod is loaded, `addons[]` for config source addon/source mod names or classname +prefixes, and `prefixes[]` for classname prefixes. If a mod source defines no +patches, it is treated as available and only the source/prefix checks are used. + The current filter is global for the mission. Revisit per-store profile support if individual vendors need different inventories.