CityRP Documentation Repository

New Map Checklist

Last updated

This document outlines the steps and configurations required when adding a new map to CityRP. Use this as a comprehensive checklist to ensure all map-specific features are properly set up.

Server Configuration

LLServer Value

The server's LLServer value determines which map-specific configuration is loaded. This is automatically derived from the hostname tags and map name.

  • Update changelog gm_starts fields
  • Configure sv_remote changelog notifier

Permanent Entities

The permanent entities system spawns static entities when the map loads. These are defined in gamemode/core/plugins/perma_ents/maps/{mapname}.lua.

World Props to Remove

  • Identify and register world props to remove via DeleteMapEntity(mapCreationID)

Vending Machines

  • Spawn cityrp_nommachine entities at appropriate locations

Tesla Chargers

  • Spawn Tesla EV charging stations at designated parking areas

Phone Booths

  • Spawn ent_phonebooth entities throughout the map

ID Terminals

  • Spawn cityrp_idterminal entities at government buildings

Government Lockers

  • Spawn cityrp_govlocker entities in police stations and government buildings

Resupply Boxes

  • Place resupply boxes for emergency services

Sales NPCs

Configure NPC merchants for various job systems:

  • Weed - Drug dealer NPC (cityrp_drugsdealer)
  • Meth - Meth man NPC (cityrp_methman) - Configure random spawn locations in methSpawns table
  • Lumberjack - Lumberjack supplies NPC
  • Construction - Construction supplies NPC
  • Trashman - Trashman job NPC

Lootables

Configure harvestable resources:

  • Trees - Harvestable tree locations
  • Rocks - Mining ore locations (cityrp_coalore, cityrp_metalore)
  • Bins - Trash bins (cityrp_rubbish_bin)

Fuel Station Hint Entities

  • Spawn cityrp_hint_trig_fuel at fuel stations

Areas

The area system defines named regions on the map. Areas are stored in data/cityrp/plugins/areas/{mapname}.txt.

  • Define all major areas using /addarea, /addareapos, or /addareasky commands
  • Ensure fire alarm areas are properly mapped
  • Test vehicle location reporting
  • Flag areas where vehicles should be allowed to deploy despite failing the outside check (e.g. a covered garage or car park) with !areameta vehiclespawn true
  • Flag the event box area with !areameta eventbox true so /event can travel to it and contraband is refused there
  • Flag soundproofed indoor areas (e.g. a Nexus/Presidential Office) with !areameta noweather true so rain/wind ambience is silenced for players inside regardless of whether the room happens to have a skylight or other opening

Doors

Door configuration is critical for the property system.

Unownable Doors

Configure doors that cannot be purchased via the unownable plugin:

  • Mark public access doors as unownable via /unownable <name>
  • Mark abandoned buildings with /unownable Abandoned
  • Save via data files at data/cityrp/plugins/unownable/{mapname}.txt

Property System

Properties are stored in the database and link multiple doors together:

  • Create properties using /property create <name>
  • Add doors with /property add
  • Set rent with /property rent <amount>
  • Save properties to database

Peepholes

Players fit their own peepholes to doors they own, but staff can fit permanent ones that survive restarts (government buildings, landmark doors, anywhere a peephole should always exist):

  • Fit permanent peepholes with /peephole, aiming at the face of the door
  • Remove them with /peephole remove
  • Shot-out lenses are repaired with /peephole repair, or by using a peephole item on the door. Permanent ones can be repaired by anyone, since they belong to the map rather than to a player
  • Saved automatically to data/cityrp/plugins/Peepholes/{mapname}/peepholes.txt, where {mapname} is always lowercased, whatever case the map file itself uses
  • The side you are standing on when fitting becomes the interior — fit from inside the property

Government Door Access

Configure secure doors that require government team access:

  • Set up government-only doors
  • Configure keypad access for secure areas

Jail Points

Jail points determine where arrested players are teleported:

  • Add jail points using /jailpoint add at cell locations
  • Save jail points via /jailpoint save
  • Stored at data/cityrp/plugins/jailpoints/{mapname}.txt

Map Web Service

The HTML map overlay system requires map data:

  • Register map with web service at limelightgaming.net/services/map/
  • Provide map bounds and coordinates

PoliceDB Allowed Areas

Define areas where the police database terminal can be accessed:

  • Configure IsInsideBox() checks in policedb/sv_init.lua for:
    • Police station
    • Town hall
    • Jail areas

Spawnpoints

Team-specific spawn locations:

  • Add spawnpoints for each team using /spawnpoint add <team>
  • Save spawnpoints via /spawnpoint save
  • Stored at data/cityrp/plugins/spawnpoints/{mapname}.txt

Worldprops

Persistent decorative props that survive map restarts:

  • Add world props via /worldprops add
  • Save via /worldprops save
  • Stored as per-map data files

Map Addons

Configure third-party addon integrations:

KFC

  • Set up KFC restaurant locations

Fishing

  • Configure fishing spots and zones

Refuel

  • Register fuel station locations

Repair

  • Set up vehicle repair locations

Car Parking

  • Configure parking lot boundaries and slots

Additional Map Features

Car Paint Shops

Location defined in plugins/carpaint/ - Configure spray booth locations per map.

  • Define paint shop coordinates in carpaint/sv_init.lua and carpaint/cl_init.lua

UniSec Keypads

Government security keypad system for restricted doors:

  • Configure secure door keypads via the unisec-keypads plugin
  • Map name should use hyphens instead of underscores for storage

HTML Map Integration

The map plugin provides an in-game HTML map interface:

  • Ensure map is registered with the web service URL format: https://limelightgaming.net/services/map/index.html?map={mapname}

Perma Ents Map File

Create a dedicated Lua file for permanent entities:

  • Create gamemode/core/plugins/perma_ents/maps/{mapname}.lua
  • Use SetDefaultMap("{mapname}") at the start
  • Register entities with RegisterPermanentEntity(class, pos, ang)
  • Register deletions with DeleteMapEntity(mapCreationID)

Permanent Billboards

Map-owned zad_adsign* signs persist via perma_ents (not !worldprops or data/zadkit):

  • Place and configure billboards in-game
  • Dump with !billboard_save / !billboard_save_all and paste into the map file
  • Or migrate a legacy data/zadkit/{mapname}_advertsigns.txt with !billboard_migrate
  • See gamemode/core/plugins/perma_ents/README_BILLBOARDS.md

Server Configuration Files

Map-specific server configuration may be required:

  • Check if gamemode/core/server/{llserver_value}.lua exists or needs creation
  • Configure map-specific ConVars or settings

Auto Restart Configuration

If using the auto-restart plugin, ensure map is properly handled:

  • Verify changelevel command targets the correct map

Reference Notes

Codebase Patterns

  1. Data Storage Convention: Most map-specific data is stored in data/cityrp/plugins/{feature}/{mapname}.txt using util.KeyValuesToTable/util.TableToKeyValues format.

  2. Map Name Handling: The map name is typically retrieved via game.GetMap() and may be lowercase normalized. Some systems use hyphens instead of underscores.

  3. Entity Optimization: Permanent entities can be flagged as "dumb" (no think function) via the isDumb table in perma_ents/sv_init.lua to improve server performance.

  4. Map Copy Feature: The CopyMap(source, dest) function in perma_ents allows copying all entity configurations from one map to another (useful for map variants like rp_rockford_v1b and rp_rockford_v2b).

Recommendations

  1. Test on Build Server First: Use the build server (LLServer == "build") to test map configurations before deploying to live servers.

  2. Document Custom Entity Positions: When adding permanent entities, consider documenting the Vector positions with comments describing the location (e.g., "Fish Avenue Docks", "Town Hall").

  3. Coordinate with Map Variants: If the map has variants (e.g., _v1b, _v2b, _fl2), consider whether configurations should be shared or distinct.

  4. PoliceDB Area Checks: The PoliceDB allowed areas use bounding box checks - ensure boxes encompass all floors and don't accidentally include unintended areas.

  5. Backup Configuration: Before making changes, consider backing up existing data files from the data folder.

Currently Supported Maps

The following maps have existing perma_ents configurations:

  • rp_evocity_v33x
  • rp_evocity_v4b1
  • rp_evocity_v4b1_fl2
  • rp_evocity_v17x
  • rp_evocity2_v2p
  • rp_evocity2_v5p
  • rp_rockford_v1b
  • rp_rockford_v2b
  • rp_florida
  • rp_florida_v2
  • rp_truenorth_v1a
  • rp_southside_day