Acquisition
Following purchase on Tebex, retrieve your asset files from Keymaster → Purchased Assets
Official technical documentation for the City Hall MLO & integrated elevator system. Issued by Molo Modding for authorized FiveM server administrators.
The following presentation has been approved for public viewing by the Office of Municipal Affairs. It provides a comprehensive tour of the City Hall premises and all its facilities.
The City Hall resource is distributed under CFX Asset Escrow protection. Server administrators must comply with the following procedure to deploy the municipal building. Server build 4752 or above is required.
Following purchase on Tebex, retrieve your asset files from Keymaster → Purchased Assets
Transfer the molo-cityhall folder into your server's resources/[maps]/ directory
Append ensure molo-cityhall to your server.cfg file
Deploy the cityhall_lift script separately and add ensure cityhall_lift
Municipal Ordinance: Texture files (.ytd) are fully editable. 3D models are secured under Escrow protection. Vanilla models and custom logos remain unlocked for modification.
The City Hall is located in central Los Santos, positioned for optimal accessibility by all citizens. The building serves as the seat of municipal government.
-- City Hall main entrance local cityhall = vector3(254.347961, -391.184265, 44.3782234) -- Elevator endpoints local upperFloor = vector3(205.4865, -408.65802, 54.9856148) local groundFloor = vector3(205.4865, -408.65802, 36.53539)
The City Hall provides a comprehensive suite of facilities designed to support all branches of municipal governance and enhance the roleplay experience.
Fully operational lift with network synchronization, fall protection, and smooth eased movement between floors.
Reception hall, private offices, conference rooms, and fully furnished administrative spaces.
All .ytd texture files are accessible for full customization of signs, logos, and surface materials.
Adaptive tick system with distance-based polling ensures consistent 60+ FPS for all players.
The elevator system operates on a client-server architecture with network synchronization through FiveM StateBags. A single controller client manages the physical movement while all other clients observe.
Conflict Prevention: All events and state keys use the unique prefix cityhall_lift: to prevent interference with other lift systems (e.g., Atlantis Bay).
All parameters are defined in config.lua through the CityhallConfig table.
| Parameter | Value | Description |
|---|---|---|
| PropName | 'molo_cityhall_lift' | YMAP prop name for the elevator platform |
| PointA.z | 54.9856 | Upper floor altitude (TOP) |
| PointB.z | 36.5354 | Ground floor altitude (BOTTOM) |
| AnchorX / AnchorY | 205.49 / -408.66 | Fixed X/Y during vertical travel |
| Parameter | Value | Description |
|---|---|---|
| InteractDistance | 3.0 | Interaction radius in meters |
| InteractZTolerance | 3.5 | Vertical tolerance for proximity detection |
| Key | 38 | Activation key (E by default) |
| DrawMarker | false | Display a visual marker at interaction zone |
| Use2DDistance | true | 2D distance calculation (ignoring Z) |
| Parameter | Value | Description |
|---|---|---|
| Speed | 3 | Base movement speed |
| SnapTolerance | 0.01 | Precision threshold for arrival snap |
| EaseZone | 0.30 | Deceleration zone near destination |
| EaseMinFactor | 0.25 | Minimum speed factor in ease zone |
| MaxDT | 0.05 | Max delta-time for smooth movement |
| SettleFrames | 10 | Stabilization frames after arrival |
| Parameter | Value | Description |
|---|---|---|
| UseAttachDuringRide | true | Attach citizen to platform during transit |
| AttachXYTolerance | 1.0 | Horizontal attachment radius |
| AttachZTolerance | 2.0 | Vertical attachment tolerance |
| DetachDelayMs | 120 | Delay before detachment (ms) |
| AdoptSearchRadius | 20.0 | YMAP prop search radius |
| Locale | 'fr' | Display language (fr / en) |
Client-server communication is handled through prefixed events, namespaced to prevent cross-resource interference.
| Event Name | Direction | Purpose |
|---|---|---|
| cityhall_lift:requestActivate | Client → Server | Request activation with target destination |
| cityhall_lift:start | Server → All | Broadcast movement start |
| cityhall_lift:stop | Server → All | Force stop / completion notification |
| cityhall_lift:busy | Server → Client | Elevator is occupied |
| cityhall_lift:finished | Client → Server | Controller reports completion |
| State Key | Type | Purpose |
|---|---|---|
| cityhall_lift_moving | boolean | Whether the elevator is in transit |
| cityhall_lift_targetZ | number | Current destination altitude |
The client manages citizen interaction, YMAP prop adoption, physical movement, and fall protection.
| Distance | Polling | Operations |
|---|---|---|
| > 60m | 500ms | Passive standby |
| 30 – 60m | 200ms | Prop adoption only |
| < 30m (outside) | 100ms | Adoption + proximity check |
| < 30m (in zone) | 0ms | Full interaction + input |
The elevator decelerates progressively near its destination. Within the deceleration zone, speed reduces to a minimum of 25% of base speed for a realistic arrival.
local function easedStep(absRemaining, dt) local base = Speed * math.min(dt, 0.05) if absRemaining < 0.30 then return math.max(0.0001, base * math.max(0.25, absRemaining / 0.30)) end return base end
Citizens are attached to the platform via AttachEntityToEntity during transit. Ragdoll is disabled. A safety thread monitors every 500ms, detaching automatically if deceased or displaced beyond 8 meters.
The server acts as central authority — managing state locks, rate limiting, watchdog timers, and destination validation.
Global 600ms cooldown between activations to prevent request flooding.
10-minute timeout: if the controller freezes, the elevator is automatically released.
If the controller disconnects mid-transit, the elevator is immediately stopped and unlocked.
All values sanitized server-side — only Point A and Point B altitudes accepted.
-- Only trusts configured Point A and Point B altitudes local function sanitizeDestZ(z) local a = CityhallConfig.PointA.z local b = CityhallConfig.PointB.z local closest = (math.abs(z - a) <= math.abs(z - b)) and a or b return closest end
Elevator not responding: Verify the prop name in config.lua matches your YMAP. Enable CityhallConfig.Debug = true and check F8 console.
Script conflict: This system uses cityhall_lift: prefix. Ensure other elevators use separate prefixes.
Citizen falling during transit: Ensure UseAttachDuringRide = true. Increase AttachZTolerance to 3.0 if needed.
Minimum Server Build: 4752 or above required. Verify with version in server console.
For technical assistance regarding this municipal asset, citizens are directed to the official Molo Modding support channels.