New Map Checklist
Last updated
May be stale
This page was last updated ago, on 19 September 2026. Check what it says against the code before relying on it.
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_startsfields - Configure
sv_remotechangelog 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_nommachineentities at appropriate locations
Tesla Chargers
- Spawn Tesla EV charging stations at designated parking areas
Phone Booths
- Spawn
ent_phoneboothentities throughout the map
ID Terminals
- Spawn
cityrp_idterminalentities at government buildings
Government Lockers
- Spawn
cityrp_govlockerentities 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 inmethSpawnstable - 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_fuelat 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/addareaskycommands - 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 trueso/eventcan travel to it and contraband is refused there - Flag soundproofed indoor areas (e.g. a Nexus/Presidential Office) with
!areameta noweather trueso 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 addat 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 inpolicedb/sv_init.luafor:- 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.luaandcarpaint/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_alland paste into the map file - Or migrate a legacy
data/zadkit/{mapname}_advertsigns.txtwith!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}.luaexists 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
-
Data Storage Convention: Most map-specific data is stored in
data/cityrp/plugins/{feature}/{mapname}.txtusingutil.KeyValuesToTable/util.TableToKeyValuesformat. -
Map Name Handling: The map name is typically retrieved via
game.GetMap()and may be lowercase normalized. Some systems use hyphens instead of underscores. -
Entity Optimization: Permanent entities can be flagged as "dumb" (no think function) via the
isDumbtable inperma_ents/sv_init.luato improve server performance. -
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 likerp_rockford_v1bandrp_rockford_v2b).
Recommendations
-
Test on Build Server First: Use the build server (
LLServer == "build") to test map configurations before deploying to live servers. -
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").
-
Coordinate with Map Variants: If the map has variants (e.g.,
_v1b,_v2b,_fl2), consider whether configurations should be shared or distinct. -
PoliceDB Area Checks: The PoliceDB allowed areas use bounding box checks - ensure boxes encompass all floors and don't accidentally include unintended areas.
-
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_v33xrp_evocity_v4b1rp_evocity_v4b1_fl2rp_evocity_v17xrp_evocity2_v2prp_evocity2_v5prp_rockford_v1brp_rockford_v2brp_floridarp_florida_v2rp_truenorth_v1arp_southside_day