For the complete documentation index, see llms.txt. This page is also available as Markdown.

Configurations


General

Option
Type
Default
Description

Debug

boolean

false

Enable extra logs in F8 / server console. Set false on production.

Locale

string

"en"

Language code. Options: "en", "pt". Must match a file in public/shared/locales/.

Theme

string

"default"

NUI theme key from public/shared/themes.json (default | custom).


Bridge

Option
Type
Options
Description

Bridge.Framework

string

"auto" | "qb-core" | "qbx_core" | "es_extended"

Framework to use. "auto" detects automatically.

Bridge.Inventory

string

"auto" | "ox_inventory" | "qb-inventory" | "qs-inventory"

Inventory system.

Bridge.Interaction

string

"drawtext" | "target"

How players interact with placed boards. Default is "target".

Bridge.Target

string

"auto" | "ox_target" | "qb-target"

Target system when Interaction = "target".

Bridge.Notify

string

"auto" | "ox_lib" | "qbcore" | "esx" | "native"

Notification system.

Notify Options (ox_lib)

Option
Type
Default
Description

NotifyOptions.position

string

"top-right"

ox_lib toast position (top-right, top-left, top, bottom-right, …).

NotifyOptions.duration

number

4500

Toast duration (ms).

Toasts use a single path: Api.Notify → cdev_citytour:clientNotify → Notify bridge.


Interaction Options

DrawText (when Bridge.Interaction = "drawtext")

World text floats above the nearest board. Two actions:

On screen
Default key
Action

[E] Play City Tour

E

Interact (create / join lobby / open / spectate)

[G] Pick up board

G

Pick up idle board (owner or admin) — item returned

Option
Type
Default
Description

keyDisplay

string

"E"

Letter shown for play (must match the bound control).

controlId

number

38

FiveM control ID for play. 38 = E (controls list).

pickupKeyDisplay

string

"G"

Letter shown for pickup.

pickupControlId

number

47

FiveM control ID for pickup. 47 = G.

You may add optional label / pickupLabel strings. If omitted, locales citytour.interact_board and citytour.pickup_board are used.

Performance: watcher sleeps at 500ms when far; a Wait(0) draw thread runs only while a board is in range, then exits.

Target (when Bridge.Interaction = "target")

Option
Type
Default
Description

label

string

"City Tour Table"

Text shown on target option.

icon

string

"fas fa-building"

Icon (Font Awesome for ox_target).

distance

number

3.5

Aim distance to show the option.


ACE & Commands

Option
Type
Default
Description

ACE.Admin

string

"cdev_citytour.admin"

ACE permission for admin features.

Commands.Admin

string

"citytouradmin"

Admin panel command.

Commands.Place

string

"citytourplace"

Admin place command.

Commands.Delete

string

"citytourdelete"

Admin delete nearest board.

Commands.Gaming

string

"citytourgaming"

Gaming hub (profile / rank / history).

Commands.Balance

string

"citytourbalance"

Layout calibrator.


Item

Option
Type
Default
Description

Item.enabled

boolean

true

Enable item placement.

Item.name

string

"citytour_board"

Item name in inventory (must match).

The display name in the inventory UI comes from your items.lua, not from this config.


Props

Board, dice, pawns, buildings, and cash stacks. Must match stream files unless you replace models.

Option
Default / notes
Description

Props.board

"cdev_citygame_board"

Board model.

Props.die

"cdev_citygame_player_dice_small"

Fallback dice model.

Props.dieSmall

"cdev_citygame_player_dice_small"

In-match dice model.

Props.DieAnim.spinMs

950

Spin duration (ms).

Props.DieAnim.bounceHeight

0.11

Bounce height (m).

Props.DieAnim.pairSpread

0.028

Pair spacing.

Props.DieAnim.faces[1..6]

See config

Face-up attach rotations.

Props.pawns.*

cdev_citygame_player_red/blue/green/yellow

Pawn models per color.

Props.Buildings.city[1..4]

houses 1–3 + hotel

City upgrade models.

Props.Buildings.paradise[1]

"cdev_citygame_beach_house"

Beach house (level 1 only).

Props.Buildings.hotel

"cdev_citygame_hotel"

Used if city[4] is missing.

Props.Buildings.height

0.0

Extra Z on buildings.

Props.Buildings.maxLevel

4

City max (hotel).

Props.Buildings.scale

w/h per type

Visual scale.

Props.CashStacks.enabled

true

Spawn cash piles at seats.

Props.CashStacks.seatFactor

0.55

Distance toward seat (0–1).

Props.CashStacks.height

-0.008

Local Z (calibrate with /citytourbalance).

Props.CashStacks.spread

0.035

Lateral spacing.

Props.CashStacks.model

"prop_cash_pile_02"

Cash pile model.

Props.CashStacks.tiers

in-match cash → count

Visual tier by capital.


Furniture (kit mode)

Option
Type
Default
Description

Furniture.tableModel

string

"prop_table_02"

Table under the board.

Furniture.chairModel

string

"prop_chair_02"

Chair per seat.

Furniture.spawnTable

boolean

true

Spawn table + chairs with the board.

Furniture.boardLift

number

-0.048

Extra Z after the board bottom is aligned to the tabletop.

Furniture.boardGroundZ

number

-0.035

Extra Z when the board sits on world ground (no kit).

Furniture.boardOffset

table

{x=0,y=0}

Fine XY if board pivot is off-center.

Furniture.chairFaceOffset

number

180.0

Extra yaw so chairs face the table.

Furniture.chairs

table

4 cardinal seats

Kit chair ring offsets.

Furniture.colorSeats

table

per color

Seat side mapping for sit / cash.


Placement Mode

Option
Type
Default
Description

Placement.raycastDistance

number

20.0

Raycast distance (m).

Placement.maxDistanceFromPlayer

number

6.0

Max place distance (m).

Placement.minDistanceFromPlayer

number

1.4

Min place distance (m).

Placement.ghostAlpha

number

180

Ghost prop alpha (0–255).

Placement.smooth

number

0.35

Ghost smoothing (0–1).

Placement.heightStep

number

0.03

Height nudge per PageUp / PageDown.

Placement.Keybinds.place

number

38

Confirm place (E).

Placement.Keybinds.cancel

number

73

Cancel (X). ESC still cancels too.

Placement.Keybinds.scrollUp/Down

number

15/14

Rotate board.

Placement.Keybinds.fineRotate

number

21

Shift for fine rotation.

Placement.Keybinds.rotateLeft/Right

number

174/175

Arrow rotate.

Placement.Keybinds.toggleKit

number

47

Toggle furniture kit (G).

Placement.Keybinds.ground

number

22

Snap to ground (SPACE).

Placement.Keybinds.heightUp/Down

number

10/11

PageUp / PageDown.


Sit Animation

Option
Type
Default
Description

Sit.Enable

boolean

true

Sit ped when joining lobby / match.

Sit.Chair.*

table

See config

Kit mode: chair anim + ped offset.

Sit.Floor.seatDistance

number

1.15

Board-only seat distance from board center (m).

Sit.Floor.Anims

table

jetski owner idle

Board-only floor sit anim.


Cinema Camera

Option
Type
Default
Description

Camera.defaultDistance

number

1.75

Default orbit distance.

Camera.minDistance

number

0.42

Min zoom.

Camera.maxDistance

number

4.5

Max zoom.

Camera.minHeight

number

0.12

Min height above board.

Camera.maxHeight

number

2.8

Max height above board.

Camera.defaultHeight

number

1.05

Default height.

Camera.lookAtZ

number

0.08

Look-at height on board.

Camera.rotateSpeed

number

90.0

A/D orbit speed (deg/sec).

Camera.elevateSpeed

number

1.6

W/S elevate speed (m/sec).

Camera.zoomStep

number

0.12

Zoom step per scroll.

Camera.fov

number

42.0

Cinema FOV.

Camera.Controls

table

W/S/A/D

Elevate / rotate control IDs.

Mouse wheel zooms the camera. Lobby and match windows use header arrows + scrollbar (no wheel). Gaming Hub and admin still use mouse-wheel scroll.


Sync (spectators)

Option
Type
Default
Description

Sync.interestRadius

number

6.0

Players inside receive table FX / spectator sync.

Sync.leaveHysteresis

number

1.0

Extra meters before leave (anti-flicker).

Sync.idleWaitMs

number

750

Loop sleep when far from tables.

Sync.nearWaitMs

number

100

Loop sleep when near a table.

Sync.debugDraw

boolean

false

Draw sync radius rings when Debug is on.


Distances

Option
Type
Default
Description

Distances.InteractionDistance

number

3.5

DrawText / interact prompt distance (m).

Distances.ActionMaxDistance

number

6.0

Server distance check for table actions.


Match

Option
Type
Default
Description

Match.MinPlayers

number

2

Minimum seats when creating a lobby (clamped 2–4).

Match.MaxPlayers

number

4

Maximum seats when creating a lobby (clamped 2–4).

Match.TurnTimeoutSec

number

60

Default turn timer when host enables it.

Match.TimerPresets

table

{30,45,60,90,120}

Lobby timer preset buttons (seconds).

Match.DisconnectPauseSec

number

90

Pause after disconnect before forfeit.

Match.Colors

table

red/blue/green/yellow

Playable colors.

Match.InitRollGapMs

number

1200

Delay between initiative dice reveals.

Match.InitRollLeadMs

number

500

Delay before first initiative roll.

Match.InitRollEndMs

number

900

Delay after last initiative roll.

Match.Controls.roll

number

38

Roll dice while cinema cam (E).

Turn timeout is clamped server-side when enabled. Disabled timer uses 0. On timeout the engine rolls and may buy empty land only (no houses, hotels, or repurchase) when Economy.AutoRollOnTimeout is true.


NPC / AI

Option
Type
Default
Description

Npc.enabled

boolean

true

Allow AI opponents. Required for Singleplayer.

Npc.DisplayNames

table

Tour Bot / City Dealer / Rival AI

Bot names.

Npc.PedModels

table

business peds

World ped models at seats.

Npc.ThinkDelayMs

table

{min=900, max=2400}

Think delay before an AI action.

Npc.BuyAggression

number

0.72

Chance the AI buys empty land (0–1).

Npc.UpgradeAggression

number

0.55

Chance the AI upgrades when it can.


In-match economy

These values are fictitious match capital, not GTA cash (except Real-mode entry / pot).

Option
Type
Default
Description

Economy.StartingCash

number

2000000

Cash each player starts with.

Economy.PassStartBonus

number

300000

Paid when passing Start.

Economy.IslandBail

number

200000

Cost to leave Lost Island by paying.

Economy.IslandTurns

number

3

Turns stuck on Lost Island.

Economy.BailRollSameTurn

boolean

true

Default for the host toggle. If the host turns it off, paying bail ends the turn. Freed from Lost Island still lets you roll this turn.

Economy.TaxPercent

number

10

% of cash + owned property value, paid to the bank on the Tax space (after São Paulo). Rounded down.

Economy.MaxPropertyLevel

number

4

City: land=0, houses 1–3, hotel=4. Paradise max is 1.

Economy.MaxRentMultiplier

number

10

Cap for fallback rent math.

Economy.HotelRequiresFullSet

boolean

false

If true, hotel needs a complete color group. Default Business Tour: houses and hotel without a full set. Full set still doubles rent.

Economy.HotelSameTurnBlocked

boolean

true

Cannot buy a hotel on the same turn you completed that country's set (including a doubles extra turn).

Economy.ThreeDoublesToIsland

boolean

true

Three doubles in a row send you to Lost Island (no walk), unless Freed from Lost Island was already played.

Economy.AutoRollOnTimeout

boolean

true

AFK timeout: roll + buy empty land only.

Property buy / rent / repurchase numbers live in public/shared/property_economy.lua. Change numbers only.


Property prices (public/shared/property_economy.lua)

Global table: CityTourPropertyPrices. Keys must match city / beach ids in public/shared/board.lua (madrid, bali, rome, …).

Field
Cities
Paradise beaches

buy

land, house1, house2, house3, hotel

land, house1 only

rent

same keys

land, house1

repurchase

2× invested buy total per level

Present in the file; beaches cannot be repurchased in play

Example (Spain city):

Groups in board.lua: Spain (Granada / Sevilla / Madrid) · Paradise (Bali, Cyprus, Dubai, Nice) · China · Italy · Germany · UK (London / Sydney) · USA · France · Brazil.


Modes (Fun / Real / Singleplayer)

Option
Type
Default
Description

Modes.Fun.enabled

boolean

true

In-game capital only. Changes ranking.

Modes.Real.enabled

boolean

true

Entry fee → pot. Changes ranking.

Modes.Real.MinEntry

number

100

Minimum Real entry.

Modes.Real.MaxEntry

number

100000

Maximum Real entry.

Modes.Real.EntryPresets

table

{100,500,1000,5000}

Quick-select entry buttons.

Modes.Real.Accounts

table

cash / bank / vip

Allowed entry accounts. vip uses the VIP bridge.

Modes.Real.DefaultAccount

string

"cash"

Default selected account.

Modes.Real.DefaultSplit

table

70 / 20 / 10

1st / 2nd / 3rd % of the pot.

Modes.Real.OptionalRakePercent

number

0

% taken from the pot before split. 0 = off.

Modes.Singleplayer.enabled

boolean

true

1 human vs AI. No rank, no Real money.

Modes.Singleplayer.playerCount

number

4

Seats (1 human + 3 AI at default).


Luck cards

Option
Type
Default
Description

Luck.enabled

boolean

true

Enable Chance spaces.

Luck.MaxHeldCards

number

3

Max holdable cards in hand.

Luck.FineAmount

number

150000

Fine card amount.

Luck.BirthdayGift

number

80000

Birthday gift per other player.

Luck.BlackoutTurns

number

2

Electricity Outage duration (turn endings).

Luck.ScarTurns

number

1

Visual scar after sabotage / destroy.

Luck.RouletteMs

number

1800

Chance roulette spin (ms).

The host can switch Default (all cards) or Custom (pick cards) when creating the lobby. Enabled cards have equal chance. If every card is off, Chance skips the turn.

Deck ids live in public/shared/board.lua → CityTourBoard.LuckCards. Card titles / bodies are locales (citytour.card_*).

Id
Type
Effect

rent_x2

Holdable

Next rent you collect is doubled. Not used if that landing collects $0 (blackout).

rent_half

Holdable

Next rent you pay is halved.

free_island

Holdable

Play it. On the island: free now and roll this turn (bail-roll toggle does not apply). Off island: next island / three doubles does not trap you. Holding it unused does nothing.

protection

Holdable

Blocks the next sabotage / destroy / blackout / earthquake on your properties.

earthquake

Instant

Out of the draw until any house exists. Every building loses one level. Protection blocks the first hit.

go_to

Instant

Click a highlighted city and land there (buy / rent / upgrade).

sabotage

Instant

Out of the draw until an opponent city has a house. Click one city to drop one building level. Beaches cannot be chosen.

cut_power

Instant

Click a city: no rent for BlackoutTurns turn endings.

royal_gift

Instant

Click one of your cities; it goes to a random opponent (buildings stay).

world_championship

Instant

Teleport to World Championships. Each other player pays 50,000 if they can.

invitation

Instant

Teleport to World Tour, then pick any other space to travel to. No extra Start bonus for the teleport to World Tour.

fine

Instant

Pay Luck.FineAmount (default 150,000) to the bank.

happy_birthday

Instant

Each other player pays Luck.BirthdayGift (default 80,000) if they can.

start_over

Instant

Return to Start and collect Economy.PassStartBonus.

destroy_build

Instant

Out of the draw until an opponent city has a house. Flatten that city to empty land. Owner keeps the tile. Beaches cannot be chosen.

World Championships (50,000) and World Tour (100,000) amounts are engine values (also used when you land on those spaces). Fine / birthday / Start bonus are config.


Win conditions

Option
Type
Default
Description

WinConditions.OwnFullSide

boolean

true

Win by owning every purchasable tile on one board side. Always on.

WinConditions.OwnAllParadise

boolean

true

Default on; host can turn this off in the lobby. Four beaches (land is enough).

WinConditions.OwnCompleteGroup

boolean

true

Default on; host can turn this off. One full color group (e.g. Spain's three cities).

WinConditions.HighestValueFallback

boolean

true

Richest player wins once every city and paradise is owned. Always on.

Last standing (everyone else bankrupt / left) also ends the match.


Rating & Badges

Option
Type
Default
Description

Rating.DefaultPoints

number

1000

Starting points for new players.

Rating.MinPoints

number

1000

Floor points.

Rating.MaxPoints

number

6000

Ceiling points.

Rating.WinDelta

number

50

Points gained on win.

Rating.LossDelta

number

30

Points lost on loss.

Rating.ForfeitDelta

number

40

Points lost on forfeit.

Rating.PageSize

number

10

Ranking rows per page in hub.

Rating.Badges

table

See below

Rank badges by minimum points.

Default Badges

Min Points
Badge
Label

5500

GM

Grandmaster

4800

M

Master

4000

D

Diamond

3200

P

Platinum

2400

G

Gold

1800

S

Silver

1400

B

Bronze

1000

R

Rookie

Fun and Real change rating. Singleplayer does not.


Match History

Option
Type
Default
Description

MatchHistory.MaxEntriesPerPlayer

number

20

Max matches kept per player (FIFO trim).

MatchHistory.PageSize

number

10

History rows per page in hub.


Board layout (visual)

Option
Type
Default
Description

BoardLayout.spaceCount

number

32

Ring size.

BoardLayout.pawnHeight

number

0.0

Global pawn Z.

BoardLayout.stackFormation

number

2

0 line X · 1 line Y · 2 2×2 only when 4 pawns share a space. 2 and 3 pawns always sit in a line. Tune in /citytourbalance → Peões · pilha.

BoardLayout.stackSpacing

number

0.016

Pawn stack spacing.

BoardLayout.stackYaw

number

0.0

Extra rotation (degrees) of the stack around the sit point. /citytourbalance 8/2, R = 180°.

BoardLayout.stackScale

number

0.85

Stack scale.

BoardLayout.dieZ

number

0.0

Dice height.

BoardLayout.cashHeight

number

-0.022

Cash pile height.

BoardLayout.pawnScale

number

1.0

Base pawn scale.

BoardLayout.MoveAnimation

table

280ms / lift 0.035

Pawn hop timing / height.

BoardLayout.Outline

table

See config

Legal / blocked / hover outline.

Fine visual positions (cell size, house sit, die Z, cash height, etc.) live in public/shared/layout.lua and can be overridden by public/shared/layout_override.json (written by /citytourbalance).


Balance calibrator

Option
Type
Default
Description

Balance.step

number

0.005

Default nudge step (m).

Balance.stepFine

number

0.001

Fine nudge step (m).

Balance.autoMeshTrack

boolean

true

Seed track size from the board mesh on first run.

Balance.showOnlyActiveLayer

boolean

true

Draw only the active calibration layer.

Balance.groupMinGap

number

0.0015

Minimum gap between grouped cells.

Balance.guideArrowYawOffset

number

0.0

Extra yaw on guide arrows.

Balance.Keybinds

table

Numpad

Up/down/cycle/fine/save/cancel/propagate keys.


Game rules (what players actually do)

32-space ring, counter-clockwise from Start. One pawn per player. Two dice. Doubles grant an extra turn after decisions. Three doubles send you to Lost Island (you do not walk those spaces) unless Freed from Lost Island was already played.

Buy. Land on empty city or paradise → optional buy.

Rent. Land on a rival city or beach → pay rent. Full color group doubles rent. Rome (festival) can charge one house level higher if the owner has all of Italy and Rome is not a hotel.

Upgrade. Land on your city to buy the next building (no full-set required by default). Paradise: land, then house 1 only (the beach prop appears at house 1). You cannot buy a hotel on the same turn you completed that country.

Repurchase. After paying rent on a rival city, you may buy it for the repurchase total (2× invested). Buildings stay. Beaches cannot be repurchased. A city with a hotel cannot be repurchased.

Tax. One Tax space (after São Paulo). Pay TaxPercent (default 10%) of cash + current property value to the bank. Rounded down. If cash is short, sell to the bank at half value or go bankrupt.

Lost Island. Landing on the island space or three doubles. Stay IslandTurns turns. Leave with doubles, bail, or playing Freed from Lost Island. Host toggle “roll after bail” only affects paying bail. The card still lets you roll this turn.

World Championships. Collect 50,000 from each other player who can pay.

World Tour. Pick any other space on the board and go there now. Resolve that space as if you had landed on it (buy, rent, Chance, Tax, Lost Island, and so on). No bank payout.

Bankruptcy. Sell properties to the bank at half repurchase (invested buy total) until the debt is paid, or you are out.


Custom Themes

Cdev City Tour ships one official look and a documented custom template for buyers. Every UI color (backgrounds, text, borders, fills, accents, shadows, seats, board groups) is a token in public/shared/themes.json.

Themes Config (public/shared/config.lua)

  • default — Official production theme (dark panels #161619 + blue accent #7289da). Do not remove or empty this block.

  • custom — Empty overrides with _key comments describing each token. Fill only what you want to change; empty "" falls back to default.

Themes File (public/shared/themes.json)

Structure:

  • default — full color map applied when Theme = "default"

  • custom — pairs of _comment + empty value for each token

Example from custom:

✏️ How to create a custom theme

  1. Set Theme = "custom" in public/shared/config.lua.

  2. Open public/shared/themes.json.

  3. In the custom object, fill the color keys you want (leave others as "").

  4. Keys starting with _ are documentation only — never put a color there.

  5. Save and restart cdev_citytour.

Gold accent example (change only these; the rest stays default):

If you change text to a dark color (light theme), also set textOnAccent to a light color (#ffffff) so buttons on accent stay readable.

📋 Theme keys

Default values below are the official look. Leave a custom key as "" to keep that default.

Surfaces

Key
Default
What it changes

bg

#161619

Main / page background

bgPanel

#161619

Panel background (lobby, hub, match sidebar)

bgPanelSolid

#161619

Solid panel background (no transparency)

bgInput

#1f1f22

Input fields, chips, header-like surfaces

headerBg

#1f1f22

Panel header background

bgHover

#29292c

Hover fill (rows, icon buttons)

bgActive

rgba(114, 137, 218, 0.18)

Active / selected fill (tabs, toggles)

bgElevated

#1c1c20

Raised cards / floating match windows

bgInset

#111114

Inset wells / inner frames

bgDeep

#121214

Deep recessed surface

bgAlt

#1a1a1d

Alternate dark surface

bgRow

#252528

List / row surface

bgCard

#1f1f23

Secondary card surface

Borders and fills

Key
Default
What it changes

border

rgba(255, 255, 255, 0.07)

Default panel / card border

borderActive

rgba(114, 137, 218, 0.45)

Active / focused border

borderInput

#55595f

Input field border

borderSubtle

rgba(255, 255, 255, 0.08)

Subtle card border

borderFaint

rgba(255, 255, 255, 0.06)

Faint divider / header line

borderStrong

rgba(255, 255, 255, 0.12)

Stronger border

borderMuted

rgba(255, 255, 255, 0.1)

Muted border

borderHover

rgba(255, 255, 255, 0.22)

Hover border

fillSubtle

rgba(255, 255, 255, 0.03)

Very faint fill

fillMuted

rgba(255, 255, 255, 0.04)

Soft fill

fillSoft

rgba(255, 255, 255, 0.05)

Soft highlight fill

Accent (blue) and gold

Key
Default
What it changes

accent

#7289da

Primary accent (buttons, links, highlights)

accentHover

#6579c5

Primary accent hover

accentMuted

rgba(114, 137, 218, 0.28)

Soft accent fill

accentSoft

rgba(114, 137, 218, 0.16)

Accent selected fill

accentFill

rgba(114, 137, 218, 0.14)

Accent chip fill

accentGlow

rgba(114, 137, 218, 0.4)

Accent glow / hover wash

gold

#e8a038

Secondary gold (lobby toggles)

goldMuted

rgba(232, 160, 56, 0.28)

Gold muted fill

goldSoft

rgba(232, 160, 56, 0.18)

Gold selected fill

goldBorder

rgba(232, 160, 56, 0.45)

Gold selected border

goldFill

rgba(232, 160, 56, 0.08)

Gold faint fill

Text

Key
Default
What it changes

text

#ffffff

Primary text / headings

textSecondary

#c8c8d0

Secondary text

textMuted

#5f6369

Muted labels / hints

textDim

#5f6369

Dimmed / placeholder text

textOnAccent

#ffffff

Text on accent / colored buttons

textSoft

#e8e8ee

Softer body text

textBright

#eeeef2

Bright body text

textOnBadge

#1a1208

Ink on colored rank badges

Status, buttons, overlay, shadows

Key
Default
What it changes

success

#22c55e

Success / win / ready

successMuted

rgba(34, 197, 94, 0.16)

Success background wash

successBorder

rgba(34, 197, 94, 0.45)

Success border

successLight

#86efac

Light success text

error

#ef4444

Error / loss / danger

errorMuted

rgba(239, 68, 68, 0.12)

Error background wash

errorBorder

rgba(239, 68, 68, 0.3)

Error border

errorLight

#f87171

Light error text

errorSoft

#fca5a5

Softer error text

warning

#f59e0b

Warning / timer / pending

warningMuted

rgba(245, 158, 11, 0.16)

Warning background wash

warningBorder

rgba(245, 158, 11, 0.4)

Warning border

warningLight

#fde68a

Light warning text

scrollbarThumb

rgba(255, 255, 255, 0.28)

Scrollbar thumb

scrollbarThumbHover

rgba(114, 137, 218, 0.4)

Scrollbar thumb hover

btnSecondary

#29292c

Secondary button background

btnSecondaryHover

#353539

Secondary button hover

overlay

transparent

Overlay / backdrop

shadow

rgba(0, 0, 0, 0.45)

Default drop-shadow

shadowMid

rgba(0, 0, 0, 0.5)

Medium drop-shadow

shadowStrong

rgba(0, 0, 0, 0.55)

Strong drop-shadow

shadowSoft

rgba(0, 0, 0, 0.35)

Soft drop-shadow

Seats and board groups

Key
Default
What it changes

red

#e5484d

Red seat / pawn

blue

#3b82f6

Blue seat / pawn

green

#22c55e

Green seat / pawn

yellow

#eab308

Yellow seat / pawn

groupSpain

#fb7185

Board group Spain

groupChina

#f87171

Board group China

groupItaly

#4ade80

Board group Italy

groupGermany

#94a3b8

Board group Germany

groupUk

#60a5fa

Board group UK

groupUsa

#818cf8

Board group USA

groupFrance

#93c5fd

Board group France

groupBrazil

#34d399

Board group Brazil

groupParadise

#2dd4bf

Board group Paradise / beaches

⚠️ Important


Custom Framework, Inventory, Notify, Target & VIP

Cdev City Tour uses a bridge system for framework, inventory, notifications, target, and VIP. By default it auto-detects supported systems. If you use a custom or unsupported system, edit the bridge files under public/bridge/.

Bridge config (public/shared/config.lua)

Custom Framework

Edit public/bridge/framework/server.lua and public/bridge/framework/client.lua.

Add a new entry to FrameworkSystems with: getFrameworkName, notify, getPlayer, getCitizenId, money helpers (getCashOnHand, getBankBalance, addMoney, removeMoney), and init.

Set Bridge.Framework = "your_framework" in config.

Custom Inventory

Edit public/bridge/inventory/server.lua.

Implement addItem, removeItem, getItemCount, hasItem for your system, then set Bridge.Inventory = "your_inventory".

Custom Notify

Edit public/bridge/notify/client.lua.

Add a branch in send() for your notify system, then set Bridge.Notify = "your_notify" (or use "native").

Custom Target

Edit public/bridge/target/client.lua.

Add your target attach/detach logic for board (and kit furniture) entities.

Alternatively, set Bridge.Interaction = "drawtext" to avoid target entirely.

Custom VIP

Edit public/bridge/vip/server.lua. Implement Vip.GetBalance, Vip.Remove, Vip.Add.


Buyer-editable folders

Path
Role

public/shared/config.lua

All tunables

public/shared/property_economy.lua

Buy / rent / repurchase numbers

public/shared/board.lua

Spaces, groups, luck deck ids

public/shared/layout.lua + layout_override.json

Visual layout

public/shared/locales/*.json

Strings

public/shared/themes.json

UI themes

public/bridge/**

Framework / inventory / target / notify / VIP

public/server/api.lua

Admin / money / notify hooks

public/client/api.lua

Client helpers for other resources

sql/citytour.sql

Optional manual MySQL install

public/** is escrow-ignored. Core server logic still re-validates ACE, distance, money, and inventory.

Last updated