Dynamic Billboard Advertising
All settings live in rs_ad_agency/shared/config.lua, in the AgencyConfig table. The examples below use the existing defaults. Change the matching fields in your full configuration instead of replacing whole tables with shortened examples.
General Settings
Section titled โGeneral SettingsโAgencyConfig.Debug = falseAgencyConfig.OpenTestAccess = falseAgencyConfig.AdminAce = 'command.rsadagency'| Option | Description |
|---|---|
AgencyConfig.Debug | Additional diagnostic output; normally false on live servers |
AgencyConfig.OpenTestAccess | Test mode: every player is an admin and rentals are free. Private test servers only |
AgencyConfig.AdminAce | The ACE that marks a player as an agency admin |
Access Points and Interaction
Section titled โAccess Points and InteractionโAgencyConfig.Access = {Points = 'both', -- kiosk | npc | bothInteraction = 'auto', -- key | target | autoTargetResource = 'auto', -- auto | ox_target | qb-targetTargetDistance = 2.5,KioskLabel = 'Rent a billboard',AgentLabel = 'Talk to the Ad Agency rep',}Points chooses how players reach the agency: the touchscreen kiosk, the NPC rep, or both. With Interaction = 'auto', the script uses your target resource when ox_target or qb-target is running, and the Press E prompt otherwise.
Agency Kiosks
Section titled โAgency KiosksโAgencyConfig.Kiosk.Enabled = trueAgencyConfig.Kiosk.Model = 'rs_ad_agency_kiosk'AgencyConfig.Kiosk.SpawnDistance = 120.0AgencyConfig.Kiosk.InteractDistance = 1.6AgencyConfig.Kiosk.ScreenDistance = 30.0AgencyConfig.Kiosk.WatchDistance = 25.0AgencyConfig.Kiosk.MaxWatchers = 24AgencyConfig.Kiosk.PreviewControl = 74 -- HAgencyConfig.Kiosk.Locations = {}| Setting | Default | What it controls |
|---|---|---|
SpawnDistance | 120.0 | Distance at which the kiosk prop appears |
InteractDistance | 1.6 | How close a player must stand to use the kiosk |
ScreenDistance | 30.0 | Distance at which the kiosk screen comes alive |
WatchDistance | 25.0 | Players this close watch a kiosk session live (OneSync) |
MaxWatchers | 24 | Most players watching one kiosk at once |
PreviewControl | 74 | Key that previews the ad on the billboard while editing (74 = H) |
Kiosks are normally placed in game with /rsad_kiosk place and saved in the database. Fixed kiosks can also be listed in Locations.
Starter Kiosks
Section titled โStarter KiosksโAgencyConfig.Kiosk.StarterLocations holds six kiosks (Rockford Hills, Maze Bank Arena, Tataviam, Harmony, Paleto Bay, and Chumash). They are placed once, on the first start with a new database, as ordinary placed kiosks. Admins can move or remove them in game, and removed ones never come back. Empty this list before the first start to begin with no kiosks.
Agency Reps
Section titled โAgency RepsโAgencyConfig.AgencyAgent.Enabled = trueAgencyConfig.AgencyAgent.Model = 'a_m_y_business_01'AgencyConfig.AgencyAgent.Scenario = 'WORLD_HUMAN_CLIPBOARD'AgencyConfig.AgencyAgent.SpawnDistance = 60.0AgencyConfig.AgencyAgent.InteractDistance = 2.2AgencyConfig.AgencyAgent.Locations = {}Talking to a rep opens the same agency manager as a kiosk, so the agency works anywhere without a kiosk prop. Reps are placed in game with /rsad_npc place; fixed ones can be added to Locations.
Rental Terms and Payment
Section titled โRental Terms and PaymentโAgencyConfig.DefaultBasePrice = 500
AgencyConfig.Rental = {Terms = { [1] = { key = 'day', label = '1 day', price_multiplier = 1.0 }, [7] = { key = 'week', label = '7 days', price_multiplier = 6.0 }, [30] = { key = 'month', label = '30 days', price_multiplier = 24.0 },},PaymentAccount = 'bank', -- bank | cash | cryptoAllowUnchargedStandalone = false,}Each board has a daily base price (DefaultBasePrice unless changed for that board in the admin panel). A term multiplies it. With the defaults and no traffic, a board costs:
| Term | Multiplier | Price |
|---|---|---|
| 1 day | 1.0 | $500 |
| 7 days | 6.0 | $3,000 |
| 30 days | 24.0 | $12,000 |
PaymentAccount selects the framework account rent is taken from. crypto works with Qbox and QBCore; ESX has no crypto account, so renting is refused rather than charging another account. AllowUnchargedStandalone = true lets servers without a framework rent for free.
AgencyConfig.Slides = {Max = 5,ExtraSlidePercent = 0.25,}A rental includes one slide. Each extra slide adds ExtraSlidePercent of the rental price (0.25 = +25% per slide), up to Max slides that rotate on the board. Slides are chosen when renting; adding one later in the editor charges its share for the time left on the rental.
Traffic-Based Pricing
Section titled โTraffic-Based PricingโAgencyConfig.AnalyticsViewDistance = 100.0AgencyConfig.AnalyticsViewCooldownMs = 1800000 -- 30 minutesAgencyConfig.TrafficViewsPerPriceStep = 25AgencyConfig.TrafficPriceStep = 0.10AgencyConfig.TrafficMaxMultiplier = 3.0A player within AnalyticsViewDistance of a board counts as a view, and is counted again for the same board only after the cooldown. Every TrafficViewsPerPriceStep views in the last 7 days add TrafficPriceStep to the boardโs price, up to TrafficMaxMultiplier.
rent = daily base price ร traffic multiplier -- 1.0 up to 3.0 ร term multiplier -- 1.0, 6.0 or 24.0 ร (1 + extra slides ร 0.25)House Ads
Section titled โHouse AdsโAgencyConfig.HouseAds = {Count = 50,Brand = 'AD NAUSEAM',VariantsPerBucket = 3,}AgencyConfig.DecalRenderer.BakedHouseAds = trueUnrented boards show the built-in Ad Nauseam house ads. VariantsPerBucket sets how many different house ads appear per board shape; each distinct ad on screen uses one render slot, so lower it if boards start popping in dense areas. Keep BakedHouseAds = true: unrented boards then use pre-baked textures and cost almost nothing to render.
Ad Size Limits
Section titled โAd Size LimitsโAgencyConfig.MaxAdAssetBytes = 32 * 1024 * 1024AgencyConfig.MaxAdDesignBytes = 750 * 1024| Setting | Default | What it controls |
|---|---|---|
MaxAdAssetBytes | 32 MB | Largest media file an ad can use |
MaxAdDesignBytes | 750 KB | Largest saved ad design |
Rendering and Performance
Section titled โRendering and PerformanceโAgencyConfig.RenderDistance = 275.0AgencyConfig.RenderMaxVisiblePanels = 96AgencyConfig.PanelResolution = { width = 1024, height = 1024 }AgencyConfig.PanelResolutionMin = 256AgencyConfig.PanelResolutionMax = 2048AgencyConfig.DecalRenderer.MaxLiveCreatives = 55AgencyConfig.DecalRenderer.AddMaxDistance = 250.0Only boards near the player render. AddMaxDistance is the range at which an ad is placed on a board, and RenderDistance the range at which it is kept. MaxLiveCreatives is the number of different ads that can be on screen at once, and RenderMaxVisiblePanels the number of boards.
Permissions
Section titled โPermissionsโAgencyConfig.AdminAce = 'command.rsadagency'
AgencyConfig.Framework = {qbPermissions = { 'god', 'admin' },qboxGroups = { 'god', 'admin' },esxGroups = { 'superadmin', 'admin' },}A player is an agency admin with the AdminAce, the general command ACE, or one of the listed framework groups. For a different staff system, adapt AgencyServer.isAdmin in server/bridge.lua (see Development).
Map Blips
Section titled โMap BlipsโAgencyConfig.Kiosk.Blip = {Enabled = true, sprite = 605, color = 46, scale = 0.75,shortRange = true, label = 'Ad Agency Kiosk',}AgencyConfig.AgencyAgent.Blip = {Enabled = true, sprite = 605, color = 46, scale = 0.8, shortRange = true,}Every kiosk and rep gets a map blip. Set Enabled = false to hide them, or set label = nil on the kiosk blip to use each kioskโs own label.