Add mission designer guide and Eden assets
- Document Eden object, garage, and task setup for playable missions - Add the new getting-started page and update navigation links - Rename store actor variable to `isStore` in the docs
@ -51,7 +51,7 @@ mission object variables:
|
||||
|
||||
| Variable | Action |
|
||||
| --- | --- |
|
||||
| `storeType` | store |
|
||||
| `isStore` | store |
|
||||
| `isAtm` | ATM |
|
||||
| `isBank` | bank |
|
||||
| `isGarage` | garage |
|
||||
|
||||
402
docs/MISSION_DESIGNER_GUIDE.md
Normal file
@ -0,0 +1,402 @@
|
||||
# Mission Designer Guide
|
||||
|
||||
Build playable Forge missions in Eden with the required interaction objects,
|
||||
garage markers, and CAD-compatible task modules.
|
||||
|
||||
This guide focuses on editor placement and mission validation. Framework
|
||||
internals, extension commands, and persistence details are covered in the
|
||||
developer-oriented module guides.
|
||||
|
||||
## Core Rule
|
||||
|
||||
Most Forge systems become available to players through nearby Eden objects.
|
||||
Place the object, give it the correct variable name in Eden, and the server
|
||||
initializer marks it with the runtime variable the actor menu scans for.
|
||||
|
||||
Players must be within 5 meters of the object for the actor menu to offer the
|
||||
action.
|
||||
|
||||
## Interaction Objects
|
||||
|
||||
Use the object's Eden variable name, not its display name. The matching is
|
||||
case-sensitive in some initializers, so use lower-case names.
|
||||
|
||||

|
||||
|
||||
| System | Eden Object Variable Name | Runtime Variable | Player Action | Notes |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Bank | name contains `bank` | `isBank = true` | Full bank UI | Allows full banking workflows, including PIN changes. |
|
||||
| ATM | name contains `atm` | `isAtm = true` | ATM bank UI | ATM mode requires PIN authorization and does not allow PIN changes. |
|
||||
| Store | name contains `store` | `isStore = true` | Store UI | Store catalog and checkout behavior are configured server-side. |
|
||||
| Garage | name contains `garage` | `isGarage = true` | Garage UI and virtual garage | Include a garage category in the name or set `garageType` manually. |
|
||||
| Locker | name contains `locker` | local `isLocker = true` | Virtual arsenal action | The server hides the editor object; each client creates a local locker at the same position. |
|
||||
|
||||
Recommended object names:
|
||||
|
||||
```text
|
||||
atm
|
||||
bank
|
||||
store
|
||||
locker
|
||||
garage_hq
|
||||
garage_hq_2
|
||||
```
|
||||
|
||||
The example mission uses short lower-case names. Keep single-use objects simple,
|
||||
add an index when there may be multiple copies, and include a site label for
|
||||
garage objects so related spawn markers can share the same prefix.
|
||||
|
||||
Avoid using `forge_locker_box` as an editor-placed locker variable name. That
|
||||
name is reserved by the client-side virtual arsenal box.
|
||||
|
||||
## Manual Object Variables
|
||||
|
||||
The automatic initializers are the normal path. If a mission script creates
|
||||
interaction objects dynamically, set the same variables manually:
|
||||
|
||||
```sqf
|
||||
_bankLaptop setVariable ["isBank", true, true];
|
||||
_atmTerminal setVariable ["isAtm", true, true];
|
||||
_storeCounter setVariable ["isStore", true, true];
|
||||
_garageTerminal setVariable ["isGarage", true, true];
|
||||
_garageTerminal setVariable ["garageType", "cars", true];
|
||||
```
|
||||
|
||||
Supported garage types are:
|
||||
|
||||
- `cars`
|
||||
- `armor`
|
||||
- `helis`
|
||||
- `planes`
|
||||
- `naval`
|
||||
- `other`
|
||||
|
||||
## Garage Markers
|
||||
|
||||
Garage interaction objects open the garage UI. Vehicle spawn positions come
|
||||
from Eden markers.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Additional garage sites use the same pattern: place another garage interaction
|
||||
object, give it a `garage` variable name that identifies the site, then place
|
||||
matching category spawn markers near that garage.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Create empty markers near each garage site. Marker names must contain `garage`
|
||||
and one supported garage category:
|
||||
|
||||
```text
|
||||
garage_hq_cars
|
||||
garage_hq_armor
|
||||
garage_hq_helis
|
||||
garage_hq_helis_1
|
||||
garage_hq_planes
|
||||
garage_hq_naval
|
||||
garage_hq_other
|
||||
```
|
||||
|
||||
This convention keeps the site and category visible in the marker name:
|
||||
`garage_hq_planes` is the planes spawn marker for `garage_hq`, while
|
||||
`garage_hq_2` can use another nearby set of `garage_hq_*` category markers for
|
||||
the second HQ garage area. If two garage objects of the same category are close
|
||||
to each other, include the full object name in the marker prefix, such as
|
||||
`garage_hq_2_planes`.
|
||||
|
||||
Use these rules:
|
||||
|
||||
1. Put the marker where the vehicle should spawn.
|
||||
2. Rotate the marker to control spawn heading.
|
||||
3. Keep the marker close to the matching garage object.
|
||||
4. Include the garage object's variable name when multiple garages exist at
|
||||
different sites.
|
||||
5. Do not allow parked vehicles to block the marker. If a vehicle is within 5
|
||||
meters of the spawn position, the virtual garage blocks the session.
|
||||
|
||||
Vehicle spawning is strict by category. A garage without a matching category
|
||||
marker cannot spawn that vehicle category.
|
||||
|
||||
## Store Setup
|
||||
|
||||
Store objects only unlock the store UI. The actual item catalog, prices,
|
||||
payment source handling, locker grants, and garage unlocks are server-owned.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Minimum Eden setup:
|
||||
|
||||
1. Place a terminal, table, NPC, or other object players can stand near.
|
||||
2. Set its Eden variable name to something containing `store`.
|
||||
3. Test that the actor menu shows the store action within 5 meters.
|
||||
|
||||
## Bank and ATM Setup
|
||||
|
||||
Bank and ATM objects intentionally expose different workflows.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Use a `bank` object for the full bank interface:
|
||||
|
||||
- account view
|
||||
- transfers
|
||||
- earnings deposit
|
||||
- PIN change
|
||||
|
||||
Use an `atm` object for ATM access:
|
||||
|
||||
- PIN-gated account access
|
||||
- ATM-mode banking actions
|
||||
- no PIN change
|
||||
|
||||
Minimum Eden setup:
|
||||
|
||||
1. Place one or more bank laptops or terminals with variable names containing
|
||||
`bank`.
|
||||
2. Place one or more ATM objects with variable names containing `atm`.
|
||||
3. Keep the object accessible so players can stand within 5 meters.
|
||||
|
||||
## Locker Setup
|
||||
|
||||
Locker objects are slightly different from other interaction objects. The
|
||||
server finds editor-placed objects whose variable names contain `locker`, hides
|
||||
those global objects, and each client creates a local locker object at the same
|
||||
position.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Minimum Eden setup:
|
||||
|
||||
1. Place a container object where the locker should appear.
|
||||
2. Set its Eden variable name to something containing `locker`.
|
||||
3. Do not use `forge_locker_box`.
|
||||
4. Test that the local locker appears and opens the virtual arsenal action.
|
||||
|
||||
## Medical Spawn Setup
|
||||
|
||||
The medical economy store discovers up to eleven medical spawn objects by exact
|
||||
mission namespace variable name:
|
||||
|
||||
- `med_spawn`
|
||||
- `med_spawn_1`
|
||||
- `med_spawn_2`
|
||||
- continuing through `med_spawn_10`
|
||||
|
||||
These objects are used for medical respawn placement and occupancy checks.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Minimum Eden setup:
|
||||
|
||||
1. Place an object at each medical respawn position.
|
||||
2. Set the first object's Eden variable name to `med_spawn`.
|
||||
3. Set additional medical spawns to `med_spawn_1`, `med_spawn_2`, and so on.
|
||||
4. Keep each spawn position clear enough for a revived player to occupy.
|
||||
|
||||
## CAD Access
|
||||
|
||||
The CAD UI is currently opened from the actor menu action path, but there is no
|
||||
server initializer that marks Eden objects as dedicated CAD terminals. If a
|
||||
mission needs a CAD terminal object, wire it through mission script or a custom
|
||||
interaction that calls:
|
||||
|
||||
```sqf
|
||||
[] spawn forge_client_cad_fnc_openUI;
|
||||
```
|
||||
|
||||
Tasks show in CAD only when they are created through a CAD-compatible task
|
||||
creation path.
|
||||
|
||||
## CEO and Dispatch Slots
|
||||
|
||||
Forge grants dispatch-board permissions from the player's Eden unit variable
|
||||
name when that player belongs to the default organization.
|
||||
|
||||
Use these exact lower-case variable names:
|
||||
|
||||
| Slot | Eden Unit Variable Name | Permissions |
|
||||
| --- | --- | --- |
|
||||
| CEO | `ceo` | Can administer the default organization, use default organization funds where supported, and use the CAD dispatch board. |
|
||||
| Dispatch | `dispatch` | Can use the CAD dispatch board. |
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
The CEO slot is intentionally broader than the dispatch slot. Use it for the
|
||||
player who should administrate the default organization. Use the dispatch slot
|
||||
for players who need dispatcher tools without default organization
|
||||
administration rights.
|
||||
|
||||
## Task and CAD Setup
|
||||
|
||||
Mission designers should use Forge Eden task modules for CAD-visible work.
|
||||
Those modules delegate to `forge_server_task_fnc_startTask`, which creates the
|
||||
BIS task, registers the Forge task catalog entry, sets active task state, and
|
||||
dispatches the task handler.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
CAD-compatible task creation paths:
|
||||
|
||||
| Path | CAD Compatible | Use When |
|
||||
| --- | --- | --- |
|
||||
| Forge Eden task modules | Yes | Normal mission-designer workflow. |
|
||||
| `forge_server_task_fnc_startTask` | Yes | Scripted or generated mission content. |
|
||||
| Dynamic mission manager attack tasks | Yes | Server-generated attack missions. |
|
||||
| `forge_server_task_fnc_handler` directly | Only if catalog and BIS task already exist | Advanced scripted flows. |
|
||||
| Direct task function calls | No by default | Custom server-owned flows that do not need CAD assignment. |
|
||||
|
||||
General task rules:
|
||||
|
||||
1. Give every task a unique `TaskID`.
|
||||
2. Set success and fail limits explicitly.
|
||||
3. Use area markers for zone fields.
|
||||
4. Use Forge grouping modules where required.
|
||||
5. Sync task modules to real world objects, units, vehicles, or grouping
|
||||
modules.
|
||||
6. Test that the task appears in CAD before relying on dispatch assignment.
|
||||
|
||||
Zone fields that must reference area markers:
|
||||
|
||||

|
||||
|
||||
| Field | Used By | Marker Requirement |
|
||||
| --- | --- | --- |
|
||||
| `DefenseZone` | Defend Task | Rectangle or ellipse area marker. |
|
||||
| `DeliveryZone` | Delivery Task | Rectangle or ellipse area marker. |
|
||||
| `ExtZone` | Hostage and HVT capture tasks | Rectangle or ellipse area marker. |
|
||||
| `CBRNZone` | Hostage CBRN variant | Rectangle or ellipse area marker. |
|
||||
|
||||
## Task Module Quick Reference
|
||||
|
||||
| Task Module | Sync Target | Required Marker |
|
||||
| --- | --- | --- |
|
||||
| `FORGE_Module_Attack` | Target units or vehicles | None |
|
||||
| `FORGE_Module_Destroy` | Target objects, vehicles, or units | None |
|
||||
| `FORGE_Module_Defuse` | `FORGE_Module_Explosives`, optionally `FORGE_Module_Protected` | None |
|
||||
| `FORGE_Module_Delivery` | `FORGE_Module_Cargo` | `DeliveryZone` |
|
||||
| `FORGE_Module_Hostage` | `FORGE_Module_Hostages` and `FORGE_Module_Shooters` | `ExtZone`, optional `CBRNZone` |
|
||||
| `FORGE_Module_HVT` | HVT units | `ExtZone` when capture mode is enabled |
|
||||
| `FORGE_Module_Defend` | Optional enemy units as wave templates | `DefenseZone` |
|
||||
|
||||
## Mission Manager Blacklist Markers
|
||||
|
||||
The dynamic mission generator avoids rectangle and ellipse area markers whose
|
||||
marker name or marker text starts with `blklist`.
|
||||
|
||||
Use blacklist area markers to keep generated missions out of bases, spawn
|
||||
areas, training zones, or protected set pieces.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Setup:
|
||||
|
||||
1. Create a rectangle or ellipse area marker over the area to exclude.
|
||||
2. Set the marker variable name or marker text to start with `blklist`.
|
||||
3. Give the marker real size so the generator can test candidate positions
|
||||
against the area.
|
||||
|
||||
## Task Setup Checklist
|
||||
|
||||
Before publishing a mission, verify:
|
||||
|
||||
- Every task has a unique `TaskID`.
|
||||
- Every configured marker name exists in Eden.
|
||||
- Zone markers are area markers, not icon-only markers.
|
||||
- Grouping modules are synced in the correct direction.
|
||||
- Success and fail limits match the number of required entities.
|
||||
- Reward funds and rating changes are intentional.
|
||||
- The task appears in CAD when created.
|
||||
- Assigned CAD tasks can be acknowledged, declined, and completed.
|
||||
|
||||
## Mission Validation Checklist
|
||||
|
||||
Run this checklist in a local multiplayer test:
|
||||
|
||||
- Stand within 5 meters of each bank object and verify the full bank action.
|
||||
- Stand within 5 meters of each ATM and verify ATM mode.
|
||||
- Confirm PIN changes are only available from the full bank interface.
|
||||
- Stand near each store object and complete a test checkout.
|
||||
- Stand near each locker and verify the local locker/arsenal opens.
|
||||
- Open each garage and retrieve/store a vehicle.
|
||||
- Open each virtual garage category and confirm the correct spawn marker is
|
||||
used.
|
||||
- Block a garage spawn marker with a vehicle and confirm the warning appears.
|
||||
- Create each mission task and confirm CAD visibility.
|
||||
- Assign a task in CAD and verify the player flow through completion or failure.
|
||||
|
||||
## Eden Screenshot Set
|
||||
|
||||
The live docs should include real Eden screenshots for mission designers. When
|
||||
capturing them, save the images under `docus/public/images/eden/` and use these
|
||||
filenames so the docs can reference stable assets:
|
||||
|
||||
| File | Capture |
|
||||
| --- | --- |
|
||||
| `bank_obj.jpg`, `bank_obj_var.jpg` | Bank object placement and variable name. |
|
||||
| `atm_obj.jpg`, `atm_obj_var.jpg` | ATM object placement and variable name. |
|
||||
| `store_obj.jpg`, `store_obj_var.jpg` | Store object placement and variable name. |
|
||||
| `locker_obj.jpg`, `locker_obj_var.jpg` | Locker container placement and variable name. |
|
||||
| `garage_obj.jpg`, `garage_obj_var.jpg` | Garage interaction object placement and variable name. |
|
||||
| `garage_spawn_mrkrs.jpg`, `garage_spawn_1_mrkr_var.jpg` | Garage category spawn markers and marker variable naming. |
|
||||
| `garage_obj_2.jpg`, `garage_obj_2_var.jpg`, `garage_spawn_2_mrkrs.jpg` | Additional garage site placement, variable name, and spawn markers. |
|
||||
| `med_spawn_obj.jpg`, `med_spawn_obj_var.jpg` | Medical spawn object placement and variable name. |
|
||||
| `ceo_unit.jpg`, `ceo_unit_var.jpg` | CEO playable unit placement and variable name. |
|
||||
| `dispatch_unit.jpg`, `dispatch_unit_var.jpg` | Dispatch playable unit placement and variable name. |
|
||||
| `blacklist_mrkr.jpg`, `blacklist_mrkr_var.jpg` | Mission-manager blacklist marker placement and marker variable naming. |
|
||||
| `create_task_mod.jpg`, `create_task_mod_params.jpg` | Generic Forge task module placement and parameters. |
|
||||
| `attack_task_mod.jpg`, `attack_task_mod_params.jpg`, `attack_task_tgts.jpg` | Attack task module placement, parameters, and target sync. |
|
||||
| `cad-visible-task.jpg` | In-game CAD showing a task created from the Eden module. |
|
||||
|
||||
Use screenshots that show the Eden left-side entity list, the selected object's
|
||||
attributes panel, and the map placement where possible. Crop only enough to
|
||||
remove unrelated mission content.
|
||||
|
||||
## Related Guides
|
||||
|
||||
- [Task Usage Guide](./TASK_USAGE_GUIDE.md)
|
||||
- [Client Actor Usage Guide](./CLIENT_ACTOR_USAGE_GUIDE.md)
|
||||
- [Client Garage Usage Guide](./CLIENT_GARAGE_USAGE_GUIDE.md)
|
||||
- [Client Locker Usage Guide](./CLIENT_LOCKER_USAGE_GUIDE.md)
|
||||
- [Store Usage Guide](./STORE_USAGE_GUIDE.md)
|
||||
- [Bank Usage Guide](./BANK_USAGE_GUIDE.md)
|
||||
- [Client CAD Usage Guide](./CLIENT_CAD_USAGE_GUIDE.md)
|
||||
@ -13,6 +13,9 @@ collects framework-level documentation for those pieces.
|
||||
crates.
|
||||
- [Development Guide](./DEVELOPMENT_GUIDE.md): how to add or change a module
|
||||
without breaking the framework boundaries.
|
||||
- [Mission Designer Guide](./MISSION_DESIGNER_GUIDE.md): how to place Eden
|
||||
objects, garage markers, and CAD-compatible task modules for playable
|
||||
missions.
|
||||
- [SurrealDB Setup](./surrealdb-setup.md): where to get SurrealDB or
|
||||
Surrealist and how to connect Forge to it for local or live use.
|
||||
|
||||
|
||||
@ -49,6 +49,16 @@ npm run build:webui
|
||||
See the rules for adding modules and changing boundaries without regressions.
|
||||
:::
|
||||
|
||||
:::u-page-card
|
||||
---
|
||||
icon: i-lucide-map
|
||||
title: Mission Designer Guide
|
||||
to: /getting-started/mission-designer
|
||||
---
|
||||
Place Eden interaction objects, garage markers, and Forge task modules for
|
||||
playable missions.
|
||||
:::
|
||||
|
||||
:::u-page-card
|
||||
---
|
||||
icon: i-lucide-database
|
||||
|
||||
402
docus/content/1.getting-started/4.mission-designer.md
Normal file
@ -0,0 +1,402 @@
|
||||
---
|
||||
title: "Mission Designer Guide"
|
||||
description: "Build playable Forge missions in Eden with the required interaction objects, garage markers, and CAD-compatible task modules."
|
||||
---
|
||||
|
||||
This guide focuses on editor placement and mission validation. Framework
|
||||
internals, extension commands, and persistence details are covered in the
|
||||
developer-oriented module guides.
|
||||
|
||||
## Core Rule
|
||||
|
||||
Most Forge systems become available to players through nearby Eden objects.
|
||||
Place the object, give it the correct variable name in Eden, and the server
|
||||
initializer marks it with the runtime variable the actor menu scans for.
|
||||
|
||||
Players must be within 5 meters of the object for the actor menu to offer the
|
||||
action.
|
||||
|
||||
## Interaction Objects
|
||||
|
||||
Use the object's Eden variable name, not its display name. The matching is
|
||||
case-sensitive in some initializers, so use lower-case names.
|
||||
|
||||

|
||||
|
||||
| System | Eden Object Variable Name | Runtime Variable | Player Action | Notes |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Bank | name contains `bank` | `isBank = true` | Full bank UI | Allows full banking workflows, including PIN changes. |
|
||||
| ATM | name contains `atm` | `isAtm = true` | ATM bank UI | ATM mode requires PIN authorization and does not allow PIN changes. |
|
||||
| Store | name contains `store` | `isStore = true` | Store UI | Store catalog and checkout behavior are configured server-side. |
|
||||
| Garage | name contains `garage` | `isGarage = true` | Garage UI and virtual garage | Include a garage category in the name or set `garageType` manually. |
|
||||
| Locker | name contains `locker` | local `isLocker = true` | Virtual arsenal action | The server hides the editor object; each client creates a local locker at the same position. |
|
||||
|
||||
Recommended object names:
|
||||
|
||||
```text
|
||||
atm
|
||||
bank
|
||||
store
|
||||
locker
|
||||
garage_hq
|
||||
garage_hq_2
|
||||
```
|
||||
|
||||
The example mission uses short lower-case names. Keep single-use objects simple,
|
||||
add an index when there may be multiple copies, and include a site label for
|
||||
garage objects so related spawn markers can share the same prefix.
|
||||
|
||||
Avoid using `forge_locker_box` as an editor-placed locker variable name. That
|
||||
name is reserved by the client-side virtual arsenal box.
|
||||
|
||||
## Manual Object Variables
|
||||
|
||||
The automatic initializers are the normal path. If a mission script creates
|
||||
interaction objects dynamically, set the same variables manually:
|
||||
|
||||
```sqf
|
||||
_bankLaptop setVariable ["isBank", true, true];
|
||||
_atmTerminal setVariable ["isAtm", true, true];
|
||||
_storeCounter setVariable ["isStore", true, true];
|
||||
_garageTerminal setVariable ["isGarage", true, true];
|
||||
_garageTerminal setVariable ["garageType", "cars", true];
|
||||
```
|
||||
|
||||
Supported garage types are:
|
||||
|
||||
- `cars`
|
||||
- `armor`
|
||||
- `helis`
|
||||
- `planes`
|
||||
- `naval`
|
||||
- `other`
|
||||
|
||||
## Garage Markers
|
||||
|
||||
Garage interaction objects open the garage UI. Vehicle spawn positions come
|
||||
from Eden markers.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Additional garage sites use the same pattern: place another garage interaction
|
||||
object, give it a `garage` variable name that identifies the site, then place
|
||||
matching category spawn markers near that garage.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Create empty markers near each garage site. Marker names must contain `garage`
|
||||
and one supported garage category:
|
||||
|
||||
```text
|
||||
garage_hq_cars
|
||||
garage_hq_armor
|
||||
garage_hq_helis
|
||||
garage_hq_helis_1
|
||||
garage_hq_planes
|
||||
garage_hq_naval
|
||||
garage_hq_other
|
||||
```
|
||||
|
||||
This convention keeps the site and category visible in the marker name:
|
||||
`garage_hq_planes` is the planes spawn marker for `garage_hq`, while
|
||||
`garage_hq_2` can use another nearby set of `garage_hq_*` category markers for
|
||||
the second HQ garage area. If two garage objects of the same category are close
|
||||
to each other, include the full object name in the marker prefix, such as
|
||||
`garage_hq_2_planes`.
|
||||
|
||||
Use these rules:
|
||||
|
||||
1. Put the marker where the vehicle should spawn.
|
||||
2. Rotate the marker to control spawn heading.
|
||||
3. Keep the marker close to the matching garage object.
|
||||
4. Include the garage object's variable name when multiple garages exist at
|
||||
different sites.
|
||||
5. Do not allow parked vehicles to block the marker. If a vehicle is within 5
|
||||
meters of the spawn position, the virtual garage blocks the session.
|
||||
|
||||
Vehicle spawning is strict by category. A garage without a matching category
|
||||
marker cannot spawn that vehicle category.
|
||||
|
||||
## Store Setup
|
||||
|
||||
Store objects only unlock the store UI. The actual item catalog, prices,
|
||||
payment source handling, locker grants, and garage unlocks are server-owned.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Minimum Eden setup:
|
||||
|
||||
1. Place a terminal, table, NPC, or other object players can stand near.
|
||||
2. Set its Eden variable name to something containing `store`.
|
||||
3. Test that the actor menu shows the store action within 5 meters.
|
||||
|
||||
## Bank and ATM Setup
|
||||
|
||||
Bank and ATM objects intentionally expose different workflows.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Use a `bank` object for the full bank interface:
|
||||
|
||||
- account view
|
||||
- transfers
|
||||
- earnings deposit
|
||||
- PIN change
|
||||
|
||||
Use an `atm` object for ATM access:
|
||||
|
||||
- PIN-gated account access
|
||||
- ATM-mode banking actions
|
||||
- no PIN change
|
||||
|
||||
Minimum Eden setup:
|
||||
|
||||
1. Place one or more bank laptops or terminals with variable names containing
|
||||
`bank`.
|
||||
2. Place one or more ATM objects with variable names containing `atm`.
|
||||
3. Keep the object accessible so players can stand within 5 meters.
|
||||
|
||||
## Locker Setup
|
||||
|
||||
Locker objects are slightly different from other interaction objects. The
|
||||
server finds editor-placed objects whose variable names contain `locker`, hides
|
||||
those global objects, and each client creates a local locker object at the same
|
||||
position.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Minimum Eden setup:
|
||||
|
||||
1. Place a container object where the locker should appear.
|
||||
2. Set its Eden variable name to something containing `locker`.
|
||||
3. Do not use `forge_locker_box`.
|
||||
4. Test that the local locker appears and opens the virtual arsenal action.
|
||||
|
||||
## Medical Spawn Setup
|
||||
|
||||
The medical economy store discovers up to eleven medical spawn objects by exact
|
||||
mission namespace variable name:
|
||||
|
||||
- `med_spawn`
|
||||
- `med_spawn_1`
|
||||
- `med_spawn_2`
|
||||
- continuing through `med_spawn_10`
|
||||
|
||||
These objects are used for medical respawn placement and occupancy checks.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Minimum Eden setup:
|
||||
|
||||
1. Place an object at each medical respawn position.
|
||||
2. Set the first object's Eden variable name to `med_spawn`.
|
||||
3. Set additional medical spawns to `med_spawn_1`, `med_spawn_2`, and so on.
|
||||
4. Keep each spawn position clear enough for a revived player to occupy.
|
||||
|
||||
## CAD Access
|
||||
|
||||
The CAD UI is currently opened from the actor menu action path, but there is no
|
||||
server initializer that marks Eden objects as dedicated CAD terminals. If a
|
||||
mission needs a CAD terminal object, wire it through mission script or a custom
|
||||
interaction that calls:
|
||||
|
||||
```sqf
|
||||
[] spawn forge_client_cad_fnc_openUI;
|
||||
```
|
||||
|
||||
Tasks show in CAD only when they are created through a CAD-compatible task
|
||||
creation path.
|
||||
|
||||
## CEO and Dispatch Slots
|
||||
|
||||
Forge grants dispatch-board permissions from the player's Eden unit variable
|
||||
name when that player belongs to the default organization.
|
||||
|
||||
Use these exact lower-case variable names:
|
||||
|
||||
| Slot | Eden Unit Variable Name | Permissions |
|
||||
| --- | --- | --- |
|
||||
| CEO | `ceo` | Can administer the default organization, use default organization funds where supported, and use the CAD dispatch board. |
|
||||
| Dispatch | `dispatch` | Can use the CAD dispatch board. |
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
The CEO slot is intentionally broader than the dispatch slot. Use it for the
|
||||
player who should administrate the default organization. Use the dispatch slot
|
||||
for players who need dispatcher tools without default organization
|
||||
administration rights.
|
||||
|
||||
## Task and CAD Setup
|
||||
|
||||
Mission designers should use Forge Eden task modules for CAD-visible work.
|
||||
Those modules delegate to `forge_server_task_fnc_startTask`, which creates the
|
||||
BIS task, registers the Forge task catalog entry, sets active task state, and
|
||||
dispatches the task handler.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
CAD-compatible task creation paths:
|
||||
|
||||
| Path | CAD Compatible | Use When |
|
||||
| --- | --- | --- |
|
||||
| Forge Eden task modules | Yes | Normal mission-designer workflow. |
|
||||
| `forge_server_task_fnc_startTask` | Yes | Scripted or generated mission content. |
|
||||
| Dynamic mission manager attack tasks | Yes | Server-generated attack missions. |
|
||||
| `forge_server_task_fnc_handler` directly | Only if catalog and BIS task already exist | Advanced scripted flows. |
|
||||
| Direct task function calls | No by default | Custom server-owned flows that do not need CAD assignment. |
|
||||
|
||||
General task rules:
|
||||
|
||||
1. Give every task a unique `TaskID`.
|
||||
2. Set success and fail limits explicitly.
|
||||
3. Use area markers for zone fields.
|
||||
4. Use Forge grouping modules where required.
|
||||
5. Sync task modules to real world objects, units, vehicles, or grouping
|
||||
modules.
|
||||
6. Test that the task appears in CAD before relying on dispatch assignment.
|
||||
|
||||
Zone fields that must reference area markers:
|
||||
|
||||

|
||||
|
||||
| Field | Used By | Marker Requirement |
|
||||
| --- | --- | --- |
|
||||
| `DefenseZone` | Defend Task | Rectangle or ellipse area marker. |
|
||||
| `DeliveryZone` | Delivery Task | Rectangle or ellipse area marker. |
|
||||
| `ExtZone` | Hostage and HVT capture tasks | Rectangle or ellipse area marker. |
|
||||
| `CBRNZone` | Hostage CBRN variant | Rectangle or ellipse area marker. |
|
||||
|
||||
## Task Module Quick Reference
|
||||
|
||||
| Task Module | Sync Target | Required Marker |
|
||||
| --- | --- | --- |
|
||||
| `FORGE_Module_Attack` | Target units or vehicles | None |
|
||||
| `FORGE_Module_Destroy` | Target objects, vehicles, or units | None |
|
||||
| `FORGE_Module_Defuse` | `FORGE_Module_Explosives`, optionally `FORGE_Module_Protected` | None |
|
||||
| `FORGE_Module_Delivery` | `FORGE_Module_Cargo` | `DeliveryZone` |
|
||||
| `FORGE_Module_Hostage` | `FORGE_Module_Hostages` and `FORGE_Module_Shooters` | `ExtZone`, optional `CBRNZone` |
|
||||
| `FORGE_Module_HVT` | HVT units | `ExtZone` when capture mode is enabled |
|
||||
| `FORGE_Module_Defend` | Optional enemy units as wave templates | `DefenseZone` |
|
||||
|
||||
## Mission Manager Blacklist Markers
|
||||
|
||||
The dynamic mission generator avoids rectangle and ellipse area markers whose
|
||||
marker name or marker text starts with `blklist`.
|
||||
|
||||
Use blacklist area markers to keep generated missions out of bases, spawn
|
||||
areas, training zones, or protected set pieces.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Setup:
|
||||
|
||||
1. Create a rectangle or ellipse area marker over the area to exclude.
|
||||
2. Set the marker variable name or marker text to start with `blklist`.
|
||||
3. Give the marker real size so the generator can test candidate positions
|
||||
against the area.
|
||||
|
||||
## Task Setup Checklist
|
||||
|
||||
Before publishing a mission, verify:
|
||||
|
||||
- Every task has a unique `TaskID`.
|
||||
- Every configured marker name exists in Eden.
|
||||
- Zone markers are area markers, not icon-only markers.
|
||||
- Grouping modules are synced in the correct direction.
|
||||
- Success and fail limits match the number of required entities.
|
||||
- Reward funds and rating changes are intentional.
|
||||
- The task appears in CAD when created.
|
||||
- Assigned CAD tasks can be acknowledged, declined, and completed.
|
||||
|
||||
## Mission Validation Checklist
|
||||
|
||||
Run this checklist in a local multiplayer test:
|
||||
|
||||
- Stand within 5 meters of each bank object and verify the full bank action.
|
||||
- Stand within 5 meters of each ATM and verify ATM mode.
|
||||
- Confirm PIN changes are only available from the full bank interface.
|
||||
- Stand near each store object and complete a test checkout.
|
||||
- Stand near each locker and verify the local locker/arsenal opens.
|
||||
- Open each garage and retrieve/store a vehicle.
|
||||
- Open each virtual garage category and confirm the correct spawn marker is
|
||||
used.
|
||||
- Block a garage spawn marker with a vehicle and confirm the warning appears.
|
||||
- Create each mission task and confirm CAD visibility.
|
||||
- Assign a task in CAD and verify the player flow through completion or failure.
|
||||
|
||||
## Eden Screenshot Set
|
||||
|
||||
The live docs should include real Eden screenshots for mission designers. When
|
||||
capturing them, save the images under `docus/public/images/eden/` and use these
|
||||
filenames so the docs can reference stable assets:
|
||||
|
||||
| File | Capture |
|
||||
| --- | --- |
|
||||
| `bank_obj.jpg`, `bank_obj_var.jpg` | Bank object placement and variable name. |
|
||||
| `atm_obj.jpg`, `atm_obj_var.jpg` | ATM object placement and variable name. |
|
||||
| `store_obj.jpg`, `store_obj_var.jpg` | Store object placement and variable name. |
|
||||
| `locker_obj.jpg`, `locker_obj_var.jpg` | Locker container placement and variable name. |
|
||||
| `garage_obj.jpg`, `garage_obj_var.jpg` | Garage interaction object placement and variable name. |
|
||||
| `garage_spawn_mrkrs.jpg`, `garage_spawn_1_mrkr_var.jpg` | Garage category spawn markers and marker variable naming. |
|
||||
| `garage_obj_2.jpg`, `garage_obj_2_var.jpg`, `garage_spawn_2_mrkrs.jpg` | Additional garage site placement, variable name, and spawn markers. |
|
||||
| `med_spawn_obj.jpg`, `med_spawn_obj_var.jpg` | Medical spawn object placement and variable name. |
|
||||
| `ceo_unit.jpg`, `ceo_unit_var.jpg` | CEO playable unit placement and variable name. |
|
||||
| `dispatch_unit.jpg`, `dispatch_unit_var.jpg` | Dispatch playable unit placement and variable name. |
|
||||
| `blacklist_mrkr.jpg`, `blacklist_mrkr_var.jpg` | Mission-manager blacklist marker placement and marker variable naming. |
|
||||
| `create_task_mod.jpg`, `create_task_mod_params.jpg` | Generic Forge task module placement and parameters. |
|
||||
| `attack_task_mod.jpg`, `attack_task_mod_params.jpg`, `attack_task_tgts.jpg` | Attack task module placement, parameters, and target sync. |
|
||||
| `cad-visible-task.jpg` | In-game CAD showing a task created from the Eden module. |
|
||||
|
||||
Use screenshots that show the Eden left-side entity list, the selected object's
|
||||
attributes panel, and the map placement where possible. Crop only enough to
|
||||
remove unrelated mission content.
|
||||
|
||||
## Related Guides
|
||||
|
||||
- [Task Usage Guide](/server-modules/task)
|
||||
- [Client Actor Usage Guide](/client-addons/actor)
|
||||
- [Client Garage Usage Guide](/client-addons/garage)
|
||||
- [Client Locker Usage Guide](/client-addons/locker)
|
||||
- [Store Usage Guide](/server-modules/store)
|
||||
- [Bank Usage Guide](/server-modules/bank)
|
||||
- [Client CAD Usage Guide](/client-addons/cad)
|
||||
@ -50,7 +50,7 @@ mission object variables:
|
||||
|
||||
| Variable | Action |
|
||||
| --- | --- |
|
||||
| `storeType` | store |
|
||||
| `isStore` | store |
|
||||
| `isAtm` | ATM |
|
||||
| `isBank` | bank |
|
||||
| `isGarage` | garage |
|
||||
|
||||
@ -134,6 +134,18 @@ Documentation Areas
|
||||
Framework overview, architecture, module reference, and development rules.
|
||||
:::
|
||||
|
||||
:::u-page-feature
|
||||
---
|
||||
icon: i-lucide-map
|
||||
to: /getting-started/mission-designer
|
||||
---
|
||||
#title
|
||||
Mission [Designers]{.text-primary}
|
||||
|
||||
#description
|
||||
Eden object placement, garage markers, and CAD-compatible task setup.
|
||||
:::
|
||||
|
||||
:::u-page-feature
|
||||
---
|
||||
icon: i-lucide-server-cog
|
||||
|
||||
1
docus/public/images/eden/.gitkeep
Normal file
@ -0,0 +1 @@
|
||||
|
||||
BIN
docus/public/images/eden/atm_obj.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docus/public/images/eden/atm_obj_var.jpg
Normal file
|
After Width: | Height: | Size: 618 KiB |
BIN
docus/public/images/eden/attack_task_mod.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docus/public/images/eden/attack_task_mod_params.jpg
Normal file
|
After Width: | Height: | Size: 565 KiB |
BIN
docus/public/images/eden/attack_task_tgts.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docus/public/images/eden/bank_obj.jpg
Normal file
|
After Width: | Height: | Size: 443 KiB |
BIN
docus/public/images/eden/bank_obj_var.jpg
Normal file
|
After Width: | Height: | Size: 307 KiB |
BIN
docus/public/images/eden/blacklist_mrkr.jpg
Normal file
|
After Width: | Height: | Size: 680 KiB |
BIN
docus/public/images/eden/blacklist_mrkr_var.jpg
Normal file
|
After Width: | Height: | Size: 477 KiB |
BIN
docus/public/images/eden/cad-visible-task.jpg
Normal file
|
After Width: | Height: | Size: 827 KiB |
BIN
docus/public/images/eden/ceo_unit.jpg
Normal file
|
After Width: | Height: | Size: 560 KiB |
BIN
docus/public/images/eden/ceo_unit_var.jpg
Normal file
|
After Width: | Height: | Size: 352 KiB |
BIN
docus/public/images/eden/create_task_mod.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docus/public/images/eden/create_task_mod_params.jpg
Normal file
|
After Width: | Height: | Size: 564 KiB |
BIN
docus/public/images/eden/dispatch_unit.jpg
Normal file
|
After Width: | Height: | Size: 453 KiB |
BIN
docus/public/images/eden/dispatch_unit_var.jpg
Normal file
|
After Width: | Height: | Size: 294 KiB |
BIN
docus/public/images/eden/garage_obj.jpg
Normal file
|
After Width: | Height: | Size: 824 KiB |
BIN
docus/public/images/eden/garage_obj_1.jpg
Normal file
|
After Width: | Height: | Size: 840 KiB |
BIN
docus/public/images/eden/garage_obj_1_var.jpg
Normal file
|
After Width: | Height: | Size: 461 KiB |
BIN
docus/public/images/eden/garage_obj_2.jpg
Normal file
|
After Width: | Height: | Size: 738 KiB |
BIN
docus/public/images/eden/garage_obj_2_var.jpg
Normal file
|
After Width: | Height: | Size: 430 KiB |
BIN
docus/public/images/eden/garage_obj_var.jpg
Normal file
|
After Width: | Height: | Size: 443 KiB |
BIN
docus/public/images/eden/garage_spawn_1_mrkr.jpg
Normal file
|
After Width: | Height: | Size: 853 KiB |
BIN
docus/public/images/eden/garage_spawn_1_mrkr_var.jpg
Normal file
|
After Width: | Height: | Size: 463 KiB |
BIN
docus/public/images/eden/garage_spawn_2_mrkrs.jpg
Normal file
|
After Width: | Height: | Size: 738 KiB |
BIN
docus/public/images/eden/garage_spawn_mrkrs.jpg
Normal file
|
After Width: | Height: | Size: 827 KiB |
BIN
docus/public/images/eden/locker_obj.jpg
Normal file
|
After Width: | Height: | Size: 563 KiB |
BIN
docus/public/images/eden/locker_obj_var.jpg
Normal file
|
After Width: | Height: | Size: 366 KiB |
BIN
docus/public/images/eden/med_spawn_obj.jpg
Normal file
|
After Width: | Height: | Size: 695 KiB |
BIN
docus/public/images/eden/med_spawn_obj_var.jpg
Normal file
|
After Width: | Height: | Size: 412 KiB |
BIN
docus/public/images/eden/store_obj.jpg
Normal file
|
After Width: | Height: | Size: 588 KiB |
BIN
docus/public/images/eden/store_obj_var.jpg
Normal file
|
After Width: | Height: | Size: 393 KiB |
@ -19,9 +19,13 @@ const generatedPages = [
|
||||
source: 'docs/DEVELOPMENT_GUIDE.md',
|
||||
target: '1.getting-started/3.development.md'
|
||||
},
|
||||
{
|
||||
source: 'docs/MISSION_DESIGNER_GUIDE.md',
|
||||
target: '1.getting-started/4.mission-designer.md'
|
||||
},
|
||||
{
|
||||
source: 'docs/surrealdb-setup.md',
|
||||
target: '1.getting-started/4.surrealdb-setup.md'
|
||||
target: '1.getting-started/5.surrealdb-setup.md'
|
||||
},
|
||||
{
|
||||
source: 'arma/server/docs/README.md',
|
||||
@ -285,6 +289,18 @@ Documentation Areas
|
||||
Framework overview, architecture, module reference, and development rules.
|
||||
:::
|
||||
|
||||
:::u-page-feature
|
||||
---
|
||||
icon: i-lucide-map
|
||||
to: /getting-started/mission-designer
|
||||
---
|
||||
#title
|
||||
Mission [Designers]{.text-primary}
|
||||
|
||||
#description
|
||||
Eden object placement, garage markers, and CAD-compatible task setup.
|
||||
:::
|
||||
|
||||
:::u-page-feature
|
||||
---
|
||||
icon: i-lucide-server-cog
|
||||
@ -394,6 +410,16 @@ npm run build:webui
|
||||
See the rules for adding modules and changing boundaries without regressions.
|
||||
:::
|
||||
|
||||
:::u-page-card
|
||||
---
|
||||
icon: i-lucide-map
|
||||
title: Mission Designer Guide
|
||||
to: /getting-started/mission-designer
|
||||
---
|
||||
Place Eden interaction objects, garage markers, and Forge task modules for
|
||||
playable missions.
|
||||
:::
|
||||
|
||||
:::u-page-card
|
||||
---
|
||||
icon: i-lucide-database
|
||||
|
||||