Common workflows

Step-by-step recipes for the most-used host operations. Each recipe ends with a verification step you can run in game.

Tweak weed balance

  1. Open /config.
  2. Select Economy / drugs or search drugs.
  3. Open configs/economy/drugs.json.
  4. Edit weed fields such as seedPurchaseQuantity, waterDosesPerBottle, harvestYield, and growthDurationSeconds.
  5. Save.
  6. Confirm the config reload.
  7. Buy seeds and water in game.
  8. Verify the number of spawned seed units and water doses.
  9. Grow a full plant and verify harvest yield.

Add an emergency service

  1. Open /config.
  2. Select Emergency services.
  3. Add a row under dispatch.services.
  4. Set a stable id, such as fire.
  5. Set name, icon, accentColor, and targetJobIds.
  6. Add localization keys if using nameKey and descriptionKey.
  7. Save and test from the emergency call dialog.
1{
2 "id": "fire",
3 "name": "Fire Department",
4 "nameKey": "ui.emergency.service.fire.name",
5 "description": "Report fires, explosions, and hazardous scenes.",
6 "descriptionKey": "ui.emergency.service.fire.desc",
7 "icon": "local_fire_department",
8 "accentColor": "#ff7a45",
9 "targetJobIds": [ "firefighter" ]
10}
Match real job ids

targetJobIds must match real job ids. A service with no valid target jobs is ignored.

Add a fine preset

  1. Open /config.
  2. Select Justice / Fines.
  3. Add a row in configs/economy/fines.json.
  4. Set a stable id, label, amount, and icon.
  5. Optionally set relatedLawId to a real law id from configs/government.json.
  6. Save and test issuing the fine with a police job.

Add a GPS location

  1. Open /config.
  2. Select Phone.
  3. Add a row in GPS Locations.
  4. Set a stable id.
  5. Set the world position as x y z.
  6. Save and open the phone GPS app to verify.

Add an RP name

  1. Open /config.
  2. Select RP names.
  3. Add first names or last names to the relevant list.
  4. Save.
  5. Test the RP name randomizer.

Add a shop entity

  1. Open /config.
  2. Select Shop.
  3. Add a tab if needed.
  4. Add an entity item.
  5. Set source.type.
  6. Set the correct source path or cloud ident.
  7. Add requiredJobIds if the item is restricted.
  8. Set maxPerPlayer when the item is a world entity.
  9. Save and buy the item in game.

Add an NPC

  1. Open /config.
  2. Select NPCs.
  3. Add a global NPC.
  4. Set type, position, yaw, model, label, and vendor fields.
  5. Save.
  6. Restart or reload the map to confirm placement.

Add a runtime map door

  1. Give the operator map.doors.manage.
  2. Equip the Toolgun and select Map Door.
  3. Pick a model preset, or choose Custom and select a local .vmdl or an s&box cloud model package.
  4. Set AccessType to Buyable or JobRestricted.
  5. For buyable doors, set Price and an optional PropertyGroupId.
  6. For job doors, fill AllowedJobs with comma-separated job ids such as police,mayor.
  7. Check the yellow hinge preview marker. If it appears on the handle side, swap HingeSide; if it is still using the wrong edge on a custom model, override HingeAxis from Auto to X or Y.
  8. Aim at the bottom-center placement point and primary fire.
  9. Open /configMap doors to confirm the generated id, map, position, yaw, size multipliers, hingeAxis, and modelPath.
  10. Save edits or run litherarp.map_doors_reload.
  11. Test opening, locking, buying, lockpicking, and removal with real player jobs.

To edit an existing runtime door, aim at it with the Map Door tool and press reload (R). The tool loads that door's title, access mode, price/job list, size multipliers, hinge side, hinge axis, timing, lockpick flag, and model. Change the settings, then primary fire to update that same door in place. Press reload while not aiming at a runtime door to clear the current edit selection.

To replace a native scene door, aim at it with the tool and press reload. Primary fire saves a runtime replacement and hides the original through disabledSceneDoors. Restore native doors via /configMap doorsRestore Defaults or litherarp.map_doors_restore_scene_defaults.

Add runtime map glass

  1. Give the operator map.glass.manage.
  2. Equip the Toolgun and select Glass.
  3. Enable or disable Breakable.
  4. Set Thickness, Material, and breakable auto-repair values.
  5. Primary fire at corner 1.
  6. Aim at corner 2 and primary fire again.
  7. Open /configMap glass to confirm the generated id, map, center, axes, size, material, and repair options.
  8. Save edits or run litherarp.map_glass_reload.
  9. Test collision, bullets, breakage, repair, and visibility labels from both sides.

Install a LitheraRP addon

  1. Confirm the package was published as a .litrpaddon manifest from an s&box Addon Project targeting LitheraRP.
  2. Give the operator addons.manage.
  3. Open /config.
  4. Select Addons.
  5. Add an entry.
  6. Set id to a stable local id, for example police_pack.
  7. Set packageIdent to the published package ident, for example creator.police_pack.
  8. Save configs/addons.json.
  9. Press Apply Enabled.
  10. Read lastStatus and lastMessage.
  11. Review changed configs and test the imported content in game.

The importer backs up changed files under configs/addon_backups/. If any touched config reports a validation error or fallback, the importer restores the previous contents and marks the addon entry as error.

Create a LitheraRP addon manifest

  1. Create an s&box Addon Project.
  2. Set the target game to LitheraRP in project settings.
  3. Restart the editor after changing the target game.
  4. Create a Lithera RP Addon Manifest custom resource.
  5. Fill AddonId, DisplayName, Version, Author, and Summary.
  6. Add every cloud asset package needed by the pack to RequiredPackages.
  7. Add config patches.
  8. Prefer UpsertArrayById with stable ids for repeatable installs.
  9. Publish the manifest asset.
  10. Give server operators the package ident.
  • Start with one manifest resource and one UpsertArrayById patch.
  • Use ids prefixed with your creator or server name, for example northside_notice_board.
  • Patch only the data your addon owns; do not overwrite unrelated server policy.
  • Test install, apply, reload, uninstall, then apply again to confirm the patch is repeatable.
  • If the addon needs models, materials, prefabs, or sounds, import them into the s&box Addon Project before publishing and reference their package-local paths from config.

For a weapon addon, publish the weapon prefab and assets in the Addon Project, then patch configs/shop.json to add a dealer stock entry that points at that prefab. The prefab can use gamemode-provided components such as Sandbox.ConfigurableFirearmWeapon, but addons cannot add new C# weapon logic by themselves.

1{
2 "TargetPath": "configs/social.json",
3 "JsonPath": "extraLinks",
4 "Mode": "UpsertArrayById",
5 "IdField": "id",
6 "PayloadJson": "{ \"enabled\": true, \"id\": \"northside_discord\", \"label\": \"Discord\", \"icon\": \"discord\", \"url\": \"https://discord.gg/example\", \"accentColor\": \"#5865F2\" }"
7}

Example: GPS point patch

1{
2 "TargetPath": "configs/phone.json",
3 "JsonPath": "gps.locations",
4 "Mode": "UpsertArrayById",
5 "IdField": "id",
6 "PayloadJson": "{ \"id\": \"northside_notice_board\", \"name\": \"Community Notice Board\", \"icon\": \"campaign\", \"category\": \"Community\", \"position\": \"-650 300 64\" }"
7}
Do not override unrelated server policy

Packs should add or update their own stable ids and leave server-owner choices intact.

Create a custom language pack

  1. Copy Data/Localization/en to Data/Localization/<code>.
  2. Translate values.
  3. Keep placeholders.
  4. Set the active language with litherarp.lang_set <code>.
  5. Run litherarp.lang_status.
  6. QA every major UI screen.

Create a custom theme

  1. Copy the Data folder configs/themes/default to a new folder.
  2. Name the folder with the final theme id, for example configs/themes/my-theme.
  3. Edit the copied theme.json.
  4. Change token colors under colors first.
  5. Switch configs/theme.jsonactiveTheme to the new folder id.
  6. Run litherarp.theme_reload.
  7. Add advanced SCSS only after tokens are validated.