Files
red-valley/resources/[framework]/[addons]/qs-smartphone-pro/config/config.lua

2108 lines
103 KiB
Lua
Raw Normal View History

2026-03-29 21:41:17 +03:00
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] Safe for users to modify. Adjust these values as needed.
-- • [INFO] Informational note describing what the variable or block does.
-- • [ADV] Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] Core functionality. Do not modify unless you are a developer.
-- • [AUTO] Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
PHONE_PATH = 'https://cfx-nui-qs-smartphone-pro/' -- [CORE] Absolute NUI path to phone assets (HTML/JS/CSS). Do not modify.
Config = Config or {} -- [CORE] Main configuration table (preserved across imports).
Locales = Locales or {} -- [CORE] Multilanguage container; populated by the selected locale file.
--──────────────────────────────────────────────────────────────────────────────
-- Language Selection [EDIT]
-- [INFO] Pick the primary language loaded from locales/*. Add your own file if missing.
-- [INFO] Available: 'ar','bg','ca','cs','da','de','el','en','es','fr','he','hu','it','ja','ko',
-- 'nl','no','pl','pt','ro','ru','sl','sv','tr','zh-CN','zh-TW'
--──────────────────────────────────────────────────────────────────────────────
Config.Language = 'ro' -- [EDIT] Two-letter (or zh-*) code of the language to load.
--──────────────────────────────────────────────────────────────────────────────
-- Fetch Limits [EDIT]
-- [INFO] Max items requested from server (posts, messages…). Higher = more SQL load.
-- [INFO] UI uses virtualization for Instagram/Messages; others will be added later.
--──────────────────────────────────────────────────────────────────────────────
Config.FetchLimit = 200 -- [EDIT] Safe range: 100500 depending on DB performance.
--──────────────────────────────────────────────────────────────────────────────
-- Framework & Dependency Autodetection [AUTO]
-- [INFO] Detects running framework/billing/inventory/housing by resource name.
-- [ADV] If youve renamed resources, add your mapping below instead of editing core code.
--──────────────────────────────────────────────────────────────────────────────
---[CORE] Generic detector: returns mapped alias of the first dependency found.
---@param data table<string,string> -- resourceName -> alias
---@return string|false
local function dependencyCheck(data)
for k, v in pairs(data) do
if GetResourceState(k) == 'started' then
return v
end
end
return false
end
-- Frameworks -----------------------------------------------------------------
local frameworks = { -- [CORE] resourceName -> internal alias
['es_extended'] = 'esx',
['qbx_core'] = 'qb',
['qb-core'] = 'qb',
['l2s-core'] = 'qb'
}
Config.Framework = dependencyCheck(frameworks) or 'standalone' -- [AUTO]
-- Billing Systems -------------------------------------------------------------
local billing = { -- [CORE]
['qs-billing'] = 'qs',
['okokBilling'] = 'okok',
['esx_billing'] = 'esx_billing',
['codem-billingv2'] = 'codemv2',
['RxBilling'] = 'RxBilling'
}
Config.Billing = dependencyCheck(billing) or 'standalone' -- [AUTO]
-- Inventories (metadata support) ---------------------------------------------
-- [INFO] Non-metadata inventories force UniquePhone off (item wont carry phone data).
local inventories = { -- [CORE]
['qs-inventory'] = 'qs-inventory',
['qb-inventory'] = 'qb-inventory',
['l2s-inventory'] = 'qb-inventory',
['origen_inventory'] = 'origen_inventory',
['ps-inventory'] = 'ps-inventory',
['ox_inventory'] = 'ox_inventory',
['core_inventory'] = 'core_inventory',
['codem-inventory'] = 'codem-inventory',
['tgiann-inventory'] = 'tgiann-inventory',
['ak47_inventory'] = 'ak47_inventory',
['ak47_qb_inventory'] = 'ak47_qb_inventory'
}
Config.Inventory = dependencyCheck(inventories) or 'default' -- [AUTO]
Config.Inventory = Config.Framework == 'standalone' and 'default' or Config.Inventory -- [AUTO]
Config.UniquePhone = (Config.Inventory ~= 'default') and (Config.Framework ~= 'standalone') -- [AUTO]
Config.SoundAsset = 'demo' -- [EDIT] Interact-sound asset bank. Use string name or false to disable.
-- Housing (integration hints) -------------------------------------------------
local houses = { -- [CORE]
['qs-housing'] = 'qs-housing',
['qb-houses'] = 'qb-houses'
}
Config.Houses = dependencyCheck(houses) or 'default' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Phone Access & Ownership [EDIT]
-- [INFO] Control how the phone is opened and whether only the owner can open via keybind.
--──────────────────────────────────────────────────────────────────────────────
Config.OpenPhoneByPress = true -- [EDIT] true: enable RegisterKeyMapping to open.
Config.KeyOpenOnlyOwnedPhone = true -- [EDIT] true: F1 only opens if you own the item/metadata.
--──────────────────────────────────────────────────────────────────────────────
-- Default Item Metadata [EDIT]
-- [INFO] Per-phone default flags saved to item metadata (if metadata inventory is used).
--──────────────────────────────────────────────────────────────────────────────
Config.DefaultMetaData = {
blur_disabled = false, -- [EDIT] true: less visual blur (better for low-end PCs).
lockscreen = true -- [EDIT] true: enable lockscreen by default for new phones.
}
--──────────────────────────────────────────────────────────────────────────────
-- Numbering & Mail [EDIT]
-- [INFO] Phone number composition and default mail domain.
--──────────────────────────────────────────────────────────────────────────────
Config.Prefix = '07' -- [EDIT] Number prefix (string).
Config.NumberDigits = 8 -- [EDIT] Digits after prefix (int).
Config.MailDomain = '@qcloud.com' -- [EDIT] Default email domain suffix.
--──────────────────────────────────────────────────────────────────────────────
-- Auto Backup [EDIT]
-- [INFO] If enabled, backs up phone data automatically when the device is turned off.
--──────────────────────────────────────────────────────────────────────────────
Config.AutoBackup = true -- [EDIT] true | false
--──────────────────────────────────────────────────────────────────────────────
-- UI Menus & Targeting [EDIT]
-- [INFO] Choose context menu provider and targeting system usage.
--──────────────────────────────────────────────────────────────────────────────
Config.Menu = 'ox_lib' -- [EDIT] 'ox_lib' | 'nh-context'
Config.UseTarget = false -- [EDIT] true to use ox_target/qb-target when available.
-- Keybind (RegisterKeyMapping) -----------------------------------------------
-- [INFO] Key used to open the phone from keyboard/controller.
Config.OpenPhone = '' -- [EDIT] Disabled - phone is used from inventory action button.
--──────────────────────────────────────────────────────────────────────────────
-- Voice System Selection [EDIT]
-- [INFO] Pick your in-server voice solution. Custom adapters live in client/server/custom/voice.
--──────────────────────────────────────────────────────────────────────────────
Config.Voice = 'pma' -- [EDIT] Options: 'pma' | 'mumble' | 'toko' | 'salty'
Config.RepeatTimeout = 2000 -- [ADV] Min ms between repeated actions to avoid spam.
Config.CallRepeats = 999999 -- [ADV] Max ring repeats before auto-stop.
--──────────────────────────────────────────────────────────────────────────────
-- Ringtones [EDIT]
-- [INFO] Default ringtone and list. Add as many as you want (ensure copyright safety).
--──────────────────────────────────────────────────────────────────────────────
local ringtone_path = PHONE_PATH .. '/html/sounds/ringtones/' -- [CORE]
Config.Ringtones = { -- [EDIT]
defaultRingtone = ringtone_path .. 'default.mp3',
ringtones = {
{ url = ringtone_path .. 'default.mp3', name = 'Pear' },
{ url = ringtone_path .. 'classic.mp3', name = 'Classic' },
{ url = ringtone_path .. 'XianNomi.mp3', name = 'XianNomi' },
{ url = ringtone_path .. 'yourphone.mp3', name = 'Your Phone Linging' },
{ url = ringtone_path .. 'osito.mp3', name = 'Osito Gominola' },
{ url = ringtone_path .. 'faded.mp3', name = 'Faded' },
{ url = ringtone_path .. 'missyou.mp3', name = 'Miss You' },
{ url = ringtone_path .. 'brainrot.mp3', name = 'Brainrot' },
{ url = ringtone_path .. 'lifegoes.mp3', name = 'Life Goes On' }
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Audio Backend Integration [AUTO]
-- [INFO] Works out of the box with xsound. If 'mx-surround' is running, 3D panner is used.
--──────────────────────────────────────────────────────────────────────────────
Config.MXSurround = GetResourceState('mx-surround') == 'started' -- [AUTO]
Config.MXSurroundPanner = { -- [ADV] Custom 3D panner (mx-surround only).
panningModel = 'HRTF', -- [INFO] Spatialization model.
refDistance = 1.5, -- [INFO] Start distance for volume falloff.
rolloffFactor = 3.0, -- [INFO] Falloff curve intensity (avoid 0.1).
distanceModel = 'exponential', -- [INFO] 'linear' | 'inverse' | 'exponential'
}
--──────────────────────────────────────────────────────────────────────────────
-- Phone Catalog (Styles, Wallpapers, Props) [EDIT]
-- [INFO] Visual CSS presets, default wallpapers and world props for each model.
--──────────────────────────────────────────────────────────────────────────────
Config.Phones = { -- [EDIT] CSS shadow + button gradient per model.
['phone'] = {
phone = 'rgb(57, 51, 77) 0px 0px 0.1em 0.25em, rgb(211, 205, 228) 0px 0px 0px 0.4em',
buttons = 'linear-gradient(90deg, #fff, #2a2a35)'
},
['white_phone'] = {
phone = 'rgb(202, 201, 207) 0px 0px 0.1em 0.25em, rgb(128, 127, 131) 0px 0px 0px 0.4em',
buttons = 'linear-gradient(90deg, #fff, #2a2a35)'
},
['yellow_phone'] = {
phone = 'rgb(202, 199, 166) 0px 0px 0.1em 0.25em, rgb(114, 107, 97) 0px 0px 0px 0.4em',
buttons = 'linear-gradient(90deg, #fff, #2a2a35)'
},
['red_phone'] = {
phone = 'rgb(194, 84, 84) 0px 0px 0.1em 0.25em, rgb(87, 31, 31) 0px 0px 0px 0.4em',
buttons = 'linear-gradient(90deg, #fff, #b14040)'
},
['green_phone'] = {
phone = 'rgb(73, 129, 70) 0px 0px 0.1em 0.25em, rgb(40, 90, 39) 0px 0px 0px 0.4em',
buttons = 'linear-gradient(90deg, #d5f1cc, #57a865)'
},
['black_phone'] = {
phone = 'rgb(82, 82, 82) 0px 0px 0.1em 0.25em, rgb(51, 51, 51) 0px 0px 0px 0.4em',
buttons = 'linear-gradient(90deg, #747474, #424242)'
},
}
Config.PhonesCustomWallpaper = { -- [EDIT] Default wallpaper file per model (html/assets/img/wallpapers).
['phone'] = 'b2.jpg',
['white_phone'] = 'b1.jpg',
['yellow_phone'] = 'b3.jpg',
['red_phone'] = 'b4.jpg',
['green_phone'] = 'b6.jpg',
['black_phone'] = 'b5.jpg',
}
Config.PhonesProps = { -- [EDIT] World prop model hashes for each phone.
['phone'] = `ks_qsphone_01`,
['white_phone'] = `ks_qsphone_02`,
['yellow_phone'] = `ks_qsphone_03`,
['red_phone'] = `ks_qsphone_04`,
['green_phone'] = `ks_qsphone_05`,
['black_phone'] = `ks_qsphone_06`,
}
--──────────────────────────────────────────────────────────────────────────────
-- Signal Blackout Zones (Low/No Coverage) [EDIT]
-- [INFO] Areas that simulate weak cell signal using ox_lib zones. Inside these
-- zones, specific apps (configured in UI config.js → Config.WorkWithWifiApps)
-- require Wi-Fi or are blocked. Tweak boxes to match your map/MLOs.
-- [ADV] Each entry is a box zone: center coords, XYZ size, rotation (degrees),
-- and a friendly name for debugging/logs. Names need not be unique but it helps.
--──────────────────────────────────────────────────────────────────────────────
Config.Mountains = {
{ -- Chiliad Ridge
coords = vec3(1849.0, 362.0, 113.0), -- [EDIT] Box center
size = vec3(1081.0, 1994.0, 2023.0), -- [EDIT] Box size (X/Y/Z)
rotation = 0.0, -- [EDIT] Heading rotation of the box
name = 'Mount Chiliad 1', -- [EDIT] Debug label
},
{ -- East Chiliad Cliffs
coords = vec3(1954.219727, -1600.285767, 380.278320),
size = vec3(581.0, 1394.0, 2023.0),
rotation = 0.0,
name = 'Mount Chiliad 2',
},
{ -- Raton Canyon Peaks
coords = vec3(747.758240, 1232.281372, 512.465088),
size = vec3(900.0, 900.0, 2023.0),
rotation = 0.0,
name = 'Mount Chiliad 3',
},
{ -- Banham Highlands
coords = vec3(-890.030762, 1260.052734, 490.257080),
size = vec3(1900.0, 700.0, 2023.0),
rotation = 0.0,
name = 'Mount Chiliad 4',
},
{ -- Zancudo Ridge
coords = vec3(-697.740662, 2372.030762, 340.428589),
size = vec3(1500.0, 1520.0, 2023.0),
rotation = 0.0,
name = 'Mount Chiliad 5',
},
{ -- Tongva Wilderness West
coords = vec3(-2601.098877, 1386.118652, 340.428589),
size = vec3(800.0, 2520.0, 2023.0),
rotation = 0.0,
name = 'Mount Chiliad 6',
},
{ -- Procopio Foothills
coords = vec3(-960.778015, 4467.547363, 560.807373),
size = vec3(1800.0, 2300.0, 2023.0),
rotation = 0.0,
name = 'Mount Chiliad 7',
},
{ -- North San Chianski
coords = vec3(758.518677, 5517.468262, 856.268799),
size = vec3(1800.0, 1800.0, 2023.0),
rotation = 0.0,
name = 'Mount Chiliad 8',
},
{ -- Cape Catfish Ridge
coords = vec3(3204.184570, 4860.448242, 504.562744),
size = vec3(700.0, 4000.0, 2023.0),
rotation = 15.0,
name = 'Mount Chiliad 9',
},
{ -- Alamo Sea East
coords = vec3(1560.158203, 3230.914307, 181.113525),
size = vec3(2500.0, 500.0, 2023.0),
rotation = 20.0,
name = 'Mount Chiliad 10',
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Battery & Charging System [EDIT]
-- [INFO] Global battery drain/charge behavior. Each app may consume extra
-- battery while in foreground. Players can recharge via powerbanks
-- (item: 'powerbank') or world charge points. qs-housing chargers supported.
--──────────────────────────────────────────────────────────────────────────────
-- Powerbank behavior ----------------------------------------------------------
Config.PowerbankSpeed = 1.0 -- [EDIT] Charge units gained every 3 seconds while using a powerbank (e.g., 1.0 = +1/3s).
Config.HousingChargers = false -- [EDIT] true: enable wall/room chargers integrated with qs-housing.
Config.ReturnPowerbank = false -- [EDIT] true: return the 'powerbank' item to inventory after use; false: consume it.
-- Battery drain profile -------------------------------------------------------
Config.Battery = {
enabled = true, -- [EDIT] Master toggle for battery system.
interval = 1000, -- [ADV] Tick interval in ms (how often drain/charge applies).
default = 0.001, -- [EDIT] Base drain applied regardless of app focus.
apps = { -- [EDIT] Foreground app extra drain. Increase for heavier apps.
['phone'] = 0.002,
['whatsapp'] = 0.002,
['twitter'] = 0.002,
['settings'] = 0.002,
['mail'] = 0.002,
['state'] = 0.002,
['weather'] = 0.002,
['spotify'] = 0.002,
['gallery'] = 0.002,
['camera'] = 0.002,
['notes'] = 0.002,
['calculator'] = 0.002,
['youtube'] = 0.002,
['store'] = 0.002,
['crypto'] = 0.002,
['bank'] = 0.002,
['help'] = 0.002,
['messages'] = 0.002,
['tinder'] = 0.002,
['clock'] = 0.002,
['houses'] = 0.002,
['yellowpages'] = 0.002,
['rentel'] = 0.002,
['tetris'] = 0.002,
['uber'] = 0.002,
['darkweb'] = 0.002,
['racing'] = 0.002,
['darkchat'] = 0.002,
['uberRider'] = 0.002,
['tiktok'] = 0.002,
['market'] = 0.002
}
}
-- Safe defaulting (if battery disabled) --------------------------------------
-- [AUTO] Ensures arrays are normalized if someone toggles battery off elsewhere.
if not Config.Battery.enabled then
Config.Battery.enabled = true -- [AUTO]
Config.Battery.default = 0.0 -- [AUTO]
for k in pairs(Config.Battery.apps) do
Config.Battery.apps[k] = 0.0 -- [AUTO]
end
end
--──────────────────────────────────────────────────────────────────────────────
-- Charging Stations (World) [EDIT]
-- [INFO] Marker style and per-location charge points. Players near these coords
-- gain battery periodically based on chargeSpeed (units per 3 seconds).
--──────────────────────────────────────────────────────────────────────────────
Config.ChargeCoordsMarker = {
marker = 2, -- [EDIT] Marker type (native id).
color = { 255, 255, 255, 255 } -- [EDIT] RGBA color (0255).
}
Config.ChargeCoords = {
{
coords = vec3(25.882116, -1341.416138, 29.397023), -- [EDIT] Charger position.
isAvailable = true, -- [EDIT] Toggle this station on/off.
chargeSpeed = 3.0 -- [EDIT] +3 every 3s while charging.
},
{
coords = vec3(-42.846802, -1755.070435, 29.34313),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(1129.596680, -981.305786, 46.315859),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(19.335779, -1103.538940, 29.697037),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-666.523926, -934.613037, 21.729231),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-704.892212, -908.886719, 19.115588),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-1220.993774, -912.881836, 12.226359),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(1164.968506, -317.935669, 69.10504),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(255.742645, -47.225620, 69.841032),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-1302.567993, -391.261780, 36.595755),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-1481.958374, -376.235596, 40.063452),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(375.456482, 331.734283, 103.466353),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(2571.713379, 291.965973, 108.634848),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(2551.379639, 382.528137, 108.522986),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(2673.661621, 3283.618896, 55.141119),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(1701.339600, 4919.229980, 41.96369),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(1731.790039, 6419.871582, 34.937209),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-334.757660, 6082.848633, 31.35476),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-3175.626709, 1085.157104, 20.738764),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-3248.010742, 1002.042542, 12.730703),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-3044.983887, 584.189758, 7.808927),
isAvailable = true,
chargeSpeed = 3.0
},
{
coords = vec3(-2962.195801, 388.839691, 14.943318),
isAvailable = true,
chargeSpeed = 3.0
},
}
--──────────────────────────────────────────────────────────────────────────────
-- Public Phone Booths [EDIT]
-- [INFO] Players can place paid calls from booths. Includes cinematic use and blips.
--──────────────────────────────────────────────────────────────────────────────
Config.PhoneBoothBlip = {
active = true, -- [EDIT] Show blips for booths on the map.
sprite = 459, -- [EDIT] Blip sprite id.
color = 0, -- [EDIT] Blip color id.
scale = 0.6, -- [EDIT] Blip scale.
name = 'Phone Booth', -- [EDIT] Blip label.
}
Config.ShowNearestBooths = true -- [EDIT] true: show helper for nearest booths.
Config.PhoneBooths = { -- [EDIT] World positions/headings of phone booths.
{ coords = vec4(128.940659, -2009.749390, 17.013823, 75.118103) },
{ coords = vec4(461.042816, -1852.384643, 26.57, 223.70495605) },
{ coords = vec4(252.936264, -2076.553955, 16.012837, 138.645660) },
{ coords = vec4(378.593414, -2147.301025, 14.601123, 29.094498) },
{ coords = vec4(406.918671, -1613.696655, 27.99307, 141.732285) },
{ coords = vec4(313.621979, -1691.129639, 28.044136, 141.732285) },
{ coords = vec4(38.676926, -1698.527466, 27.999007, 192.755920) },
{ coords = vec4(12.606594, -1532.162598, 27.989907, 48.188972) },
{ coords = vec4(209.723083, -1408.984619, 27.989907, 150.236221) },
{ coords = vec4(48.052750, -1379.274780, 27.979907, 2.834646) },
{ coords = vec4(-342.356049, -1471.872559, 29.465728, 87.874016) },
{ coords = vec4(-37.753845, -1115.314331, 25.132251, 246.614166) },
{ coords = vec4(-227.169220, -943.239563, 27.981307, 68.031494) },
{ coords = vec4(197.261536, -846.659363, 29.513232, 340.157471) },
{ coords = vec4(-53.419781, -721.846130, 42.959399, 153.070862) },
{ coords = vec4(-282.817566, -646.008789, 31.905811, 192.755920) },
{ coords = vec4(168.131866, -427.846161, 39.757861, 73.700790) },
{ coords = vec4(-359.419769, -267.929657, 32.343921, 51.023624) },
{ coords = vec4(-0.079117, -152.334061, 55.057544, 342.992126) },
{ coords = vec4(322.628571, -236.795593, 52.698535, 342.992126) },
{ coords = vec4(549.613159, 85.674728, 94.721973, 155.905502) },
{ coords = vec4(93.652756, 252.118683, 107.190845, 161.574799) },
{ coords = vec4(-64.602196, 180.949448, 86.044360, 221.102371) },
{ coords = vec4(240.342865, 83.947258, 91.149829, 158.740158) },
{ coords = vec4(-35.723076, -243.652740, 44.711719, 158.740158) },
{ coords = vec4(478.562653, 263.274719, 101.815723, 161.574799) },
{ coords = vec4(466.720886, -665.670349, 25.823047, 0.000000) },
{ coords = vec4(418.958252, -990.751648, 28.013599, 269.291351) },
{ coords = vec4(378.593414, -1125.257202, 28.097827, 175.748032) },
{ coords = vec4(759.599976, -889.107666, 23.852766, 90.708656) },
{ coords = vec4(809.789001, -1417.134033, 25.907275, 90.708656) },
{ coords = vec4(812.492310, -1968.909912, 27.912402, 257.952759) },
{ coords = vec4(723.626404, -2377.186768, 20.700732, 266.456696) },
{ coords = vec4(-1026.250488, -2743.833008, 18.864062, 240.944885) },
{ coords = vec4(-1205.103271, -1394.334106, 2.772510, 294.803162) },
{ coords = vec4(-1288.008789, -1092.514282, 5.805469, 204.094498) },
{ coords = vec4(-940.193420, -1199.314331, 3.817188, 212.598419) },
{ coords = vec4(-1099.846191, -806.043945, 16.9293823, 223.937012) },
{ coords = vec4(-687.032959, -675.336243, 29.631152, 181.417328) },
{ coords = vec4(-885.665955, -848.861511, 17.819385, 102.047249) },
{ coords = vec4(-1047.665894, -2084.070312, 12.157886, 229.606293) },
{ coords = vec4(1036.839600, -2249.960449, 30.574756, 87.874016) },
{ coords = vec4(1705.028564, -1639.424194, 111.167407, 99.212593) },
{ coords = vec4(948.3318481, -1740.544189, 29.8673049, 81.908905029) },
{ coords = vec4(1210.639404, -1282.588989, 34.0762893, 355.61618041) },
{ coords = vec4(-161.025924, -2632.566405, 4.73147220, 180.7557830) },
{ coords = vec4(1174.21386, -420.926635, 65.8176223, 73.64119720459) },
{ coords = vec4(1074.07434, -776.59481, 56.946246, 180.815017) },
{ coords = vec4(-694.045105, -278.991913, 34.991885, 122.858719) },
{ coords = vec4(-501.531799, -179.227325, 36.470996, 299.185577) },
{ coords = vec4(-616.994324, -420.016479, 33.463351, 85.884285) },
{ coords = vec4(-1002.513611, -391.252991, 36.660812, 115.867989) },
{ coords = vec4(-1252.519287, -538.408691, 29.098666, 131.531464) },
{ coords = vec4(-1470.224731, -708.601074, 24.366431, 139.815094) },
{ coords = vec4(-1541.711182, -467.244110, 34.132556, 31.676353) },
{ coords = vec4(553.173401, -2974.109619, 4.744457, 266.889771) },
{ coords = vec4(565.620667, -2722.715332, 4.75601, 2.830631) },
{ coords = vec4(754.894714, -3048.252197, 4.859356, 93.493866) },
{ coords = vec4(-1432.962769, -262.947510, 44.964626, 308.605591) },
{ coords = vec4(-1683.513306, -384.245758, 46.872443, 50.254704) },
{ coords = vec4(-1103.391113, -143.627167, 36.973937, 152.198273) },
{ coords = vec4(-464.103973, 144.347794, 63.170215, 2.164905) },
{ coords = vec4(811.837402, -173.348846, 71.396304, 336.024445) },
{ coords = vec4(-2289.707764, 419.038330, 173.301517, 153.477661) },
{ coords = vec4(-2958.663086, 447.199615, 13.995901, 359.032166) },
{ coords = vec4(-3037.492920, 587.248047, 6.511921, 111.270958) },
{ coords = vec4(-3146.152344, 1119.066895, 19.544858, 61.374123) },
{ coords = vec4(-1515.575806, 1499.105347, 113.837917, 78.183487) },
{ coords = vec4(2588.658447, 431.040131, 107.313152, 270.350830) },
{ coords = vec4(936.932983, 102.091782, 78.268443, 53.319496) },
{ coords = vec4(2745.979980, 3458.693115, 54.52346, 68.488243) },
{ coords = vec4(1692.605713, 3740.936035, 32.642169, 33.795506) },
{ coords = vec4(1937.438965, 3897.668213, 31.172103, 116.251793) },
{ coords = vec4(903.353943, 3656.837891, 31.289413, 275.263306) },
{ coords = vec4(595.806091, 2745.105957, 40.721877, 6.903358) },
{ coords = vec4(-1129.925537, 2677.800781, 17.0526, 311.245636) },
{ coords = vec4(-112.213196, 6306.829590, 30.204498, 134.958008) },
{ coords = vec4(1692.239746, 6432.220215, 31.462497, 334.389343) },
{ coords = vec4(1654.029785, 4888.356445, 40.742793, 102.488831) },
{ coords = vec4(2465.498047, 4949.440430, 43.957549, 183.070557) },
{ coords = vec4(-1878.619507, 2091.767334, 139.693729, 345.417999) },
}
--──────────────────────────────────────────────────────────────────────────────
-- Password Reset Service [EDIT]
-- [INFO] NPC service that resets a phones lock password for a fee.
--──────────────────────────────────────────────────────────────────────────────
Config.ResetPassword = {
active = true, -- [EDIT] Enable/disable service.
coords = vec3(1000.32, -103.89, 73.95), -- [EDIT] Service location (blip/interaction).
ped = { -- [EDIT] NPC definition.
coords = vec4(1000.32, -103.89, 73.95, 121.65),
model = `a_m_m_afriamer_01`
},
blip = { -- [EDIT] Map marker for the service.
coords = vec3(1000.32, -103.89, 73.95),
name = 'Technical',
sprite = 89,
color = 1,
scale = 0.5,
active = true
},
money = 500 -- [EDIT] Price to reset password.
}
--──────────────────────────────────────────────────────────────────────────────
-- Phone Plans (“Recipe”) [EDIT]
-- [INFO] Optional balance/plan requirement to place calls. Two plan types:
-- daily (renews/charges per day) and moment (single-use/temporary).
--──────────────────────────────────────────────────────────────────────────────
Config.EnableRecipe = false -- [EDIT] true: require an active plan to make calls.
Config.BuyRecipe = {
coords = { vec3(324.93, -229.56, 54.22) }, -- [EDIT] Plan purchase locations.
prices = {
daily = 100000, -- [EDIT] Price of daily plan.
moment = 1000, -- [EDIT] Price of one-time plan.
},
blip = {
sprite = 52, -- [EDIT] Blip sprite id.
color = 2, -- [EDIT] Blip color id.
scale = 0.8, -- [EDIT] Blip scale.
name = 'Recipe Shop', -- [EDIT] Blip label.
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Job Integrations [EDIT]
-- [INFO] Define which jobs can post news, issue bills, receive SOS, appear in
-- duty systems, and their public phone numbers/labels.
--──────────────────────────────────────────────────────────────────────────────
-- News app: jobs allowed to publish posts.
Config.WeazelJob = { 'police', 'weazel' } -- [EDIT]
-- Billing: jobs allowed to use /sendbill.
Config.BillJobs = { 'police', 'ambulance' } -- [EDIT]
-- SOS: automatic distress message under health threshold.
Config.SOSMessage = true -- [EDIT] Toggle SOS.
Config.SOSJob = 'ambulance' -- [EDIT] Job receiving SOS messages.
Config.SOSHealth = 25 -- [EDIT] Health threshold (0200 depending on framework).
-- Duty-capable jobs (Settings app → Duty).
Config.Jobs = { 'police', 'ambulance', 'mechanic', 'taxi' } -- [EDIT]
-- Public service numbers shown in contacts/calls.
Config.jobNumbers = { -- [EDIT] Job → phone number mapping.
['police'] = '911',
['ambulance'] = '912',
['mechanic'] = '913',
}
-- Display labels used in UI lists.
Config.JobLabels = { -- [EDIT] Job → label mapping.
['police'] = 'Police',
['ambulance'] = 'Ambulance',
['mechanic'] = 'Mechanic',
['taxi'] = 'Taxi'
}
-- Job Center listings (players can apply here).
Config.JobCenter = { -- [EDIT] id-indexed list of available jobs and map coords.
[1] = { job = 'builder', label = 'Constructor', Coords = { 926.47, -1560.25 } },
[2] = { job = 'deliverer', label = 'Livrator', Coords = { 78.66, 111.75 } },
[3] = { job = 'electrician', label = 'Electrician', Coords = { 751.06, 222.85 } },
[4] = { job = 'garbage', label = 'Gunoier', Coords = { -321.56, -1545.74 } },
[5] = { job = 'lumberjack', label = 'Taietor de lemne', Coords = { -552.9, 5348.58 } },
[6] = { job = 'miner', label = 'Miner', Coords = { 2445.14, 1532.14 } },
[7] = { job = 'oilrig', label = 'Lucrator pe platforma petroliera', Coords = { 1395.79, -3278.07 } },
[8] = { job = 'postman', label = 'Postas', Coords = { -232.16, -915.15 } },
[9] = { job = 'hunter', label = 'Vanator de comori', Coords = { 167.82, -2222.7 } },
[10] = { job = 'windowcleaner', label = 'Spalator de geamuri', Coords = { -1243.98, -1240.71 } },
[11] = { job = 'bus', label = 'Sofer de autobuz', Coords = { 462.22, -641.15 } },
}
--──────────────────────────────────────────────────────────────────────────────
-- Vehicle / Keys / Valet / iCar / Colors [EDIT]
-- [INFO] Settings used by Uber & Garages apps. Keys are auto-detected; if none
-- is found, system falls back to 'none' (no key checks).
--──────────────────────────────────────────────────────────────────────────────
-- Garage detection ------------------------------------------------------------ [AUTO]
-- [INFO] Detects a supported garage script by resource name. If none is running,
-- 'default' disables deep integration and uses basic fallbacks.
local garages = { -- [CORE] resourceName -> alias
['qs-advancedgarages'] = 'qs-advancedgarages',
['jg-advancedgarages'] = 'jg-advancedgarages',
['cd_garage'] = 'cd_garage',
['loaf_garage'] = 'loaf_garage',
['okokGarage'] = 'okokGarage',
['codem-garage'] = 'codem-garage',
['vms_garagesv2'] = 'vms_garagesv2',
['lunar_garage'] = 'lunar_garage',
['RxGarages'] = 'RxGarages'
}
Config.Garage = dependencyCheck(garages) or 'default' -- [AUTO]
-- Vehicle keys detection ------------------------------------------------------ [AUTO]
-- [INFO] Integrates with common vehicle key/lock scripts. If none is running,
-- value becomes 'none' and lock checks are skipped.
local keys = { -- [CORE]
['mono_carkeys'] = 'mono_carkeys',
['qb-vehiclekeys'] = 'qb-vehiclekeys',
['qs-vehiclekeys'] = 'qs-vehiclekeys',
['vehicle_keys'] = 'vehicle_keys',
['wasabi_carlock'] = 'wasabi_carlock',
['mk_vehiclekeys'] = 'mk_vehiclekeys',
['okokGarage'] = 'okokGarage'
}
Config.Vehiclekeys = dependencyCheck(keys) or 'none' -- [AUTO]
-- Valet service --------------------------------------------------------------- [EDIT]
-- [INFO] Simple valet spawn/delivery service billed to the player.
Config.Valet = false -- [EDIT] true: enable valet UI/button & service.
Config.ValetPrice = 1000 -- [EDIT] Cost per valet request (framework currency).
-- iCar / Vehicleshop waypoint ------------------------------------------------- [EDIT]
-- [INFO] Map location used by the iCar app button (SetWaypoint). Use vec2 (x,y) only.
Config.VehicleShopLocation = vec2(-33.784615, -1102.021973) -- [EDIT]
-- Color names (UI palette) ---------------------------------------------------- [EDIT]
-- [INFO] Index → display name used in color pickers/lists. Extend as needed.
Config.Colors = {
[0] = 'Metallic Black',
[1] = 'Metallic Graphite Black',
[2] = 'Metallic Black Steel',
[3] = 'Metallic Dark Silver',
[4] = 'Metallic Silver',
[5] = 'Metallic Blue Silver',
[6] = 'Metallic Steel Grey',
[7] = 'Metallic Shadow Silver',
[8] = 'Metallic Stone Silver',
[9] = 'Metallic Midnight Silver',
[10] = 'Metallic Weapon Metal',
[11] = 'Metallic Anthracite Grey',
[12] = 'Matte Black',
[13] = 'Matte Grey',
[14] = 'Matte Light Grey',
[15] = 'Util Black',
[16] = 'Util Black Poly',
[17] = 'Util Dark silver',
[18] = 'Util Silver',
[19] = 'Util Gun Metal',
[20] = 'Util Shadow Silver',
[21] = 'Worn Black',
[22] = 'Worn Graphite',
[23] = 'Worn Silver Grey',
[24] = 'Worn Silver',
[25] = 'Worn Blue Silver',
[26] = 'Worn Shadow Silver',
[27] = 'Metallic Red',
[28] = 'Turin Red Metallic',
[29] = 'Metallic Formula Red',
[30] = 'Metallic Blaze Red',
[31] = 'Metallic Elegant Red',
[32] = 'Metallic Garnet Red',
[33] = 'Metallic Desert Red',
[34] = 'Cabernet Red Metallic',
[35] = 'Metallic Candy Red',
[36] = 'Metallic Sunrise Orange',
[37] = 'Metallic Classic Gold',
[38] = 'Metallic Orange',
[39] = 'Matte Red',
[40] = 'Matte Dark Red',
[41] = 'Matte Orange',
[42] = 'Matte Yellow',
[43] = 'Util Red',
[44] = 'Util Brilliant Red',
[45] = 'Util Garnet Red',
[46] = 'Worn Red',
[47] = 'Golden Red Worn',
[48] = 'Dark Red Worn',
[49] = 'Metallic Dark Green',
[50] = 'Race Green Metallic',
[51] = 'Metallic Sea Green',
[52] = 'Metallic Olive Green',
[53] = 'Metallic Green',
[54] = 'Metallic Petrol Blue Green',
[55] = 'Matte Lime Green',
[56] = 'Util Dark Green',
[57] = 'Util Green',
[58] = 'Dark Worn Green',
[59] = 'Weathered Green',
[60] = 'Worn Sea Wash',
[61] = 'Metallic Midnight Blue',
[62] = 'Metallic Dark Blue',
[63] = 'Saxon Blue Metallic',
[64] = 'Metallic Blue',
[65] = 'Metallic Marine Blue',
[66] = 'Port Metallic Blue',
[67] = 'Metallic Diamond Blue',
[68] = 'Metallic Surf Blue',
[69] = 'Metallic Teal',
[70] = 'Metallic Brilliant Blue',
[71] = 'Metallic Purple Blue',
[72] = 'Metallic Spinnaker Blue',
[73] = 'Metallic Ultra Blue',
[74] = 'Metallic Brilliant Blue',
[75] = 'Util Dark Blue',
[76] = 'Util Midnight Blue',
[77] = 'Util Blue',
[78] = 'Util Sea Foam Blue',
[79] = 'Util Light blue',
[80] = 'Util Maui Blue Poly',
[81] = 'Util Brilliant Blue',
[82] = 'Matte Dark Blue',
[83] = 'Matte Blue',
[84] = 'Matte Midnight Blue',
[85] = 'Worn Dark blue',
[86] = 'Worn Blue',
[87] = 'Worn Light blue',
[88] = 'Metallic Taxi Yellow',
[89] = 'Race Metallic Yellow',
[90] = 'Metallic Bronze',
[91] = 'Metallic Yellow Bird',
[92] = 'Metallic Lime',
[93] = 'Metallic Champagne',
[94] = 'Metallic Pueblo Beige',
[95] = 'Metallic Dark Ivory',
[96] = 'Metallic Choco Brown',
[97] = 'Metallic Gold Brown',
[98] = 'Metallic Light Brown',
[99] = 'Metallic Mesh Beige',
[100] = 'Metallic Moss Brown',
[101] = 'Metallic Biston Brown',
[102] = 'Metallic Beech Wood',
[103] = 'Metallic Dark Beech',
[104] = 'Metallic Choco Orange',
[105] = 'Metallic Beach Sand',
[106] = 'Metallic Sun Bleeched Sand',
[107] = 'Metallic Cream',
[108] = 'Util Coffee',
[109] = 'Util Medium Brown',
[110] = 'Util Light Brown',
[111] = 'Metallic White',
[112] = 'Metallic Frost White',
[113] = 'Weathered Honey Beige',
[114] = 'Worn Brown',
[115] = 'Worn Dark Brown',
[116] = 'Worn straw beige',
[117] = 'Brushed Steel',
[118] = 'Brushed Black steel',
[119] = 'Brushed Aluminum',
[120] = 'Chrome',
[121] = 'Worn White',
[122] = 'Util Off-White',
[123] = 'Worn Orange',
[124] = 'Worn Light Orange',
[125] = 'Metallic Securicor Green',
[126] = 'Worn Taxi Yellow',
[127] = 'police car blue',
[128] = 'Matte Green',
[129] = 'Matte Brown',
[130] = 'Worn Orange',
[131] = 'Matte White',
[132] = 'Worn White',
[133] = 'Worn Olive Army Green',
[134] = 'Pure White',
[135] = 'Hot Pink',
[136] = 'Salmon pink',
[137] = 'Metallic Vermillion Pink',
[138] = 'Orange',
[139] = 'Green',
[140] = 'Blue',
[141] = 'Metallic Black Blue',
[142] = 'Metallic Black Purple',
[143] = 'Metallic Black Red',
[144] = 'hunter green',
[145] = 'Metallic Purple',
[146] = 'Metallic V Dark Blue',
[147] = 'MODSHOP BLACK',
[148] = 'Matte Purple',
[149] = 'Matte Dark Purple',
[150] = 'Metallic Lava Red',
[151] = 'Matte Forest Green',
[152] = 'Matte Olive Green',
[153] = 'Matte Desert Brown',
[154] = 'Matte Desert Tan',
[155] = 'Matte Foilage Green',
[156] = 'DEFAULT ALLOY COLOR',
[157] = 'Epsilon Blue',
[158] = 'Pure Gold',
[159] = 'Brushed Gold',
[160] = 'Red',
[161] = 'Anod Red',
[162] = 'Anod Wine',
[163] = 'Anod Purple',
[164] = 'Anod Blue',
[165] = 'Anod Green',
[166] = 'Anod Lime',
[167] = 'Anod Copper',
[168] = 'Anod Bronze',
[169] = 'Anod Champagne',
[170] = 'Anod Gold',
[171] = 'Green Blue Flip',
[172] = 'Green Red Flip',
[173] = 'Green Brow Flip',
[174] = 'Green Turq Flip',
[175] = 'Green Purp Flip',
[176] = 'Teal Red Flip',
[177] = 'Turq Red Flip',
[178] = 'Turq Purp Flip',
[179] = 'Cyan Puro Flip',
[180] = 'Blue Pink Flip',
[181] = 'Blue Green Flip',
[182] = 'Purp Red Flip',
[183] = 'Purp Green Flip',
[184] = 'Magen Gree Flip',
[185] = 'Magen Yell Flip',
[186] = 'Burg Green Flip',
[187] = 'Magen Cyan Flip',
[188] = 'Coppe Purp Flip',
[189] = 'Magen Orange Flip',
[190] = 'Red Orange Flip',
[191] = 'Orange Purp Flip',
[192] = 'Orange Blue Flip',
[193] = 'White Purp Flip',
[194] = 'Red Rainbow Flip',
[195] = 'Blue Rainbow Flip',
[196] = 'Dark Green Pearl',
[197] = 'Dark Teal Pearl',
[198] = 'Dark Blue Pearl',
[199] = 'Dar Purple Pearl',
[200] = 'Oil Slick Pearl',
[201] = 'Lit Green Pearl',
[202] = 'Lit Blue Pearl',
[203] = 'Lit Purp Pearl',
[204] = 'Lit Pink Pearl',
[205] = 'Offwhite Prisma',
[206] = 'Pink Pearl',
[207] = 'Yellow Pearl',
[208] = 'Green Pearl',
[209] = 'Blue Pearl',
[210] = 'Cream Pearl',
[211] = 'White Prisma',
[212] = 'Graphite Prisma',
[213] = 'Dark Blue Prisma',
[214] = 'Dark Purple Prisma',
[215] = 'Hot Pink Prisma',
[216] = 'Red Prisma',
[217] = 'Green Prisma',
[218] = 'Black Prisma',
[219] = 'Oil Slic Prisma',
[220] = 'Rainbow Prisma',
[221] = 'Black Holo',
[222] = 'White Holo',
}
--──────────────────────────────────────────────────────────────────────────────
-- Vehicle Classes [EDIT]
-- [INFO] UI/logic class labels indexed by GTA class id. Used in filters/lists.
--──────────────────────────────────────────────────────────────────────────────
Config.Classes = {
[0] = 'COMPACT', -- [INFO] Compacts
[1] = 'SEDAN', -- [INFO] Sedans
[2] = 'SUV', -- [INFO] SUVs
[3] = 'COUPE', -- [INFO] Coupes
[4] = 'MUSCLE', -- [INFO] Muscle
[5] = 'SPORT CLASSIC', -- [INFO] Sports Classics
[6] = 'SPORT', -- [INFO] Sports
[7] = 'SUPER', -- [INFO] Super
[8] = 'MOTOR', -- [INFO] Motorcycles
[9] = 'OFFROAD', -- [INFO] Off-road
}
--──────────────────────────────────────────────────────────────────────────────
-- Uber / Uber Eats [EDIT]
-- [INFO] Pricing & tips for ride/delivery services used by Uber apps.
--──────────────────────────────────────────────────────────────────────────────
Config.UberTipMin = 30 -- [EDIT] Minimum tip a client may give.
Config.UberTipMax = 50 -- [EDIT] Maximum tip a client may give.
Config.UberPriceMultiplier = 1.5 -- [EDIT] Fare multiplier applied to base distance/time.
-- [INFO] Security deposit required to request an Uber.
-- If the customer cancels a pending trip, driver receives this amount.
Config.RequestSecureUber = 5000 -- [EDIT] Currency units (framework money).
--──────────────────────────────────────────────────────────────────────────────
-- Uber Delivery Drop Points [EDIT]
-- [INFO] World positions for delivery endpoints. Keep z roughly at ground level.
--──────────────────────────────────────────────────────────────────────────────
Config.UberDelivery = {
[1] = { x = 8.69, y = -243.09, z = 47.66 },
[2] = { x = 113.74, y = -277.95, z = 54.51 },
[3] = { x = 201.56, y = -148.76, z = 61.47 },
[4] = { x = -206.84, y = 159.49, z = 74.08 },
[5] = { x = 38.83, y = -71.64, z = 63.83 },
[6] = { x = 47.84, y = -29.16, z = 73.71 },
[7] = { x = -264.41, y = 98.82, z = 69.27 },
[8] = { x = -419.34, y = 221.12, z = 83.60 },
[9] = { x = -998.43, y = 158.42, z = 62.31 },
[10] = { x = -1026.57, y = 360.64, z = 71.36 },
[11] = { x = -967.06, y = 510.76, z = 82.07 },
[12] = { x = -1009.64, y = 478.93, z = 79.41 },
[13] = { x = -1308.05, y = 448.59, z = 100.86 },
[14] = { x = 557.39, y = -1759.57, z = 29.31 },
[15] = { x = 325.10, y = -229.59, z = 54.22 },
[16] = { x = 414.82, y = -217.57, z = 59.91 },
[17] = { x = 430.85, y = -941.91, z = 29.19 },
[18] = { x = -587.79, y = -783.53, z = 25.40 },
[19] = { x = -741.54, y = -982.28, z = 17.44 },
[20] = { x = -668.23, y = -971.58, z = 22.34 },
[21] = { x = -664.21, y = -1218.25, z = 11.81 },
[22] = { x = 249.99, y = -1730.79, z = 29.67 },
[23] = { x = 405.77, y = -1751.18, z = 29.71 },
[24] = { x = 454.96, y = -1580.25, z = 32.82 },
[25] = { x = 278.81, y = -1117.96, z = 29.42 },
[26] = { x = 101.82, y = -819.49, z = 31.31 },
[27] = { x = -416.72, y = -186.79, z = 37.45 },
}
--──────────────────────────────────────────────────────────────────────────────
-- Uber Shop Items [EDIT]
-- [INFO] Items purchasable via Uber Eats. Integrate with your inventory items.
--──────────────────────────────────────────────────────────────────────────────
Config.UberItems = {
[1] = { item = 'phone', name = 'Phone', price = 300 },
[2] = { item = 'sandwich', name = 'Sandwich', price = 200 },
[3] = { item = 'water_bottle', name = 'Water Bottle', price = 120 },
[4] = { item = 'repairkit', name = 'Repair kit', price = 200 },
}
--──────────────────────────────────────────────────────────────────────────────
-- Marketplace [EDIT]
-- [INFO] App that lets orgs/companies manage clients, staff, and finances.
--──────────────────────────────────────────────────────────────────────────────
Config.Market = { Management = {} } -- [CORE] Container
-- Management capabilities ----------------------------------------------------- [EDIT]
Config.Market.Management.Deposit = true -- [INFO] Allow org funds deposit.
Config.Market.Management.Withdraw = true -- [INFO] Allow org funds withdrawal.
Config.Market.Management.Hire = true -- [INFO] Allow hiring via app.
Config.Market.Management.Fire = true -- [INFO] Allow firing via app.
Config.Market.Management.Promote = true -- [INFO] Allow promotions/demotions.
-- Organizations listing ------------------------------------------------------- [EDIT]
-- [INFO] Each market defines: id, name, image, description, allowed jobs, boss ranks, and HQ coords.
Config.Markets = {
{
id = 1,
name = 'Los Santos Police Department',
image = 'https://static.wikia.nocookie.net/gtawiki/images/d/dc/MissionRowPoliceStation-GTAV.png',
description = 'The city police, always willing to help you, let us know if you have any problems in Los Santos.',
job = { 'police', 'sheriff' },
bossRanks = { 'boss', 'lieutenant' },
coords = vec3(452.12, -980.55, 30.69)
},
{
id = 2,
name = 'Pillbox Medical Center',
image = 'https://static.wikia.nocookie.net/esgta/images/e/e7/PillboxHillMedicalCenterGTAV.png',
description = 'If you need a doctor, contact the Los Santos Emergency Center!',
job = { 'ambulance' },
bossRanks = { 'boss', 'lieutenant' },
coords = vec3(335.12, -584.55, 43.69)
},
{
id = 3,
name = 'Bean Machine',
image = 'https://cdnb.artstation.com/p/assets/images/images/062/724/785/large/synced3d-unbenannt.jpg',
description = 'The best coffee shop in the city now with home delivery—order your coffee, cappuccino, with milk, or whatever you want!',
job = { 'beanmachine', 'deliver' },
bossRanks = { 'boss', 'lieutenant' },
coords = vec3(280.799988, -963.982422, 29.414673)
},
{
id = 4,
name = 'Jamaican Roast',
image = 'https://pbs.twimg.com/media/D3KNTUcW4AAQwRQ.jpg',
description = 'Home delivery and in-store sales. Try the best cappuccino in Los Santos—toast, meals, grill!',
job = { 'jamaican', 'deliver' },
bossRanks = { 'boss', 'lieutenant' },
coords = vec3(273.468140, -832.971436, 29.397827)
},
{
id = 5,
name = 'Pizza This',
image = 'https://img.gta5-mods.com/q95/images/foodworks-food-delivery-pack/20d2bc-7.jpg',
description = 'Since 1988 bringing the best Italian pizza to LS. Choose your flavor and contact us!',
job = { 'pizzajob', 'deliver' },
bossRanks = { 'boss', 'lieutenant' },
coords = vec3(287.736267, -963.969238, 29.414673)
},
{
id = 6,
name = 'Bennys Original Motor Works',
image = 'https://static.wikia.nocookie.net/esgta/images/6/64/GTAOnlineLowrider5.jpg',
description = 'Top mechanic company with home orders or direct contact through Marketplace—repairs and tuning.',
job = { 'mechanic' },
bossRanks = { 'boss', 'lieutenant' },
coords = vec3(-206.004395, -1310.281372, 31.285034)
},
{
id = 7,
name = 'Premium Deluxe Motorsport',
image = 'https://i.ytimg.com/vi/M6ZNvc7dpR4/maxresdefault.jpg',
description = 'Order your new car, ask for prices, and schedule delivery—your next sports car awaits!',
job = { 'dealership' },
bossRanks = { 'boss', 'lieutenant' },
coords = vec3(-45.362637, -1107.309937, 26.432251)
},
{
id = 8,
name = 'Vanilla Unicorn',
image = 'https://static.wikia.nocookie.net/esgta/images/a/ae/VanillaUnicornfrente.png',
description = 'Drinks, shows, and reservations. Place your order or book your favorite performer.',
job = { 'unicornjob' },
bossRanks = { 'boss', 'lieutenant' },
coords = vec3(128.795609, -1297.265869, 29.145020)
},
-- [EDIT] Add more markets here following the same structure.
}
--──────────────────────────────────────────────────────────────────────────────
-- Darkweb [EDIT]
-- [INFO] Seller NPC, access points, and catalog. deliveryTime in ms per item.
--──────────────────────────────────────────────────────────────────────────────
Config.ChatSeller = 'csb_sol' -- [EDIT] Ped model used as seller in chat/cinematics.
Config.SellerLocation = vector4(328.14, -940.16, 29.41, 182.57) -- [EDIT] Seller position/heading (or set to false to disable static seller).
-- Entry points where the Darkweb app becomes available / stronger signal, etc.
Config.DarkWebCoords = {
vec3(93.45, -1928.67, 20.79),
vec3(1134.81, -416.30, 67.05),
}
-- Catalog -------------------------------------------------------------------- [EDIT]
-- [INFO] isWeapon toggles special handling (license, metadata). Note: one label has a typo (“Sticky Bomd”) preserved intentionally.
Config.Darkweb = {
List = {
[1] = { item = 'weapon_snspistol', label = 'SNS Pistol', price = 2500, isWeapon = true, deliveryTime = 1 * 60 * 1000 },
[2] = { item = 'weapon_minismg', label = 'Mini SMG', price = 2800, isWeapon = true, deliveryTime = 1 * 60 * 1000 },
[3] = { item = 'weapon_microsmg', label = 'Micro SMG', price = 3000, isWeapon = true, deliveryTime = 1 * 60 * 1000 },
[4] = { item = 'weapon_bullpuprifle', label = 'Bullpup Rifle', price = 4000, isWeapon = true, deliveryTime = 1 * 60 * 1000 },
[5] = { item = 'weapon_carbinerifle', label = 'Carbine Rifle', price = 9000, isWeapon = true, deliveryTime = 1 * 60 * 1000 },
[6] = { item = 'weapon_sawnoffshotgun', label = 'Shotgun', price = 12000, isWeapon = true, deliveryTime = 1 * 60 * 1000 },
[7] = { item = 'weapon_sniperrifle', label = 'Sniper Rifle', price = 28000, isWeapon = true, deliveryTime = 1 * 60 * 1000 },
[8] = { item = 'url_weapontint', label = 'Custom Weapon Tint', price = 2000, isWeapon = false, deliveryTime = 1 * 60 * 1000 },
[9] = { item = 'weapon_molotov', label = 'Molotov', price = 500, isWeapon = false, deliveryTime = 1 * 60 * 1000 },
[10] = { item = 'weapon_stickybomb', label = 'Sticky Bomd', price = 900, isWeapon = false, deliveryTime = 1 * 60 * 1000 }, -- [INFO] label typo kept
},
}
--──────────────────────────────────────────────────────────────────────────────
-- Default Phone Map Blips [EDIT]
-- [INFO] Predefined waypoints for the Map app. Add as many as you want.
--──────────────────────────────────────────────────────────────────────────────
Config.DefaultPhoneMapBlips = {
{
name = 'Hell Yeah', -- [EDIT] Display name.
x = 0,
y = 0, -- [EDIT] Map coordinates (Z not required).
icon = 'https://cdn-icons-png.flaticon.com/512/0/619.png', -- [EDIT] URL to icon used in UI.
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Vehicle Rental [EDIT]
-- [INFO] Rent points, vehicles and blip settings for the Rentel system.
-- Key name “Rentel” is intentional for backward compatibility.
--──────────────────────────────────────────────────────────────────────────────
Config.FixedBlipName = true -- [EDIT] true: all rental spots use Config.RentelBlips.name; false: each spot uses its own key name.
Config.RentelBlips = { -- [EDIT] Global blip style for rental spots (used when FixedBlipName = true).
name = 'Vehicle Rental',
sprite = 379,
display = 4,
scale = 0.65,
color = 3,
}
Config.RentelVehicles = { -- [EDIT] Spawnable rental vehicles with price per session.
['tribike3'] = { model = 'tribike3', label = 'Classic ARO 26', price = 100 },
['bmx'] = { model = 'bmx', label = 'BMX Zprinter Myland', price = 120 },
['panto'] = { model = 'panto', label = 'Smark Fortwo', price = 250 },
['felon'] = { model = 'felon', label = 'Merced Benz E', price = 400 },
}
-- [INFO] Rental kiosks/terminals. Name keys are used when FixedBlipName = false.
Config.RentelLocations = {
-- ['Courthouse Paystation'] = { coords = vector4(129.93887, -898.53260, 30.148599, 166.04177) },
-- ['Train Station'] = { coords = vector4(-213.40040, -1003.3420, 29.144016, 345.36584) },
-- ['Bus Station'] = { coords = vector4(416.98699, -641.60240, 28.500173, 90.011344) },
-- ['Morningwood Blvd'] = { coords = vector4(-1274.6310, -419.16560, 34.215377, 209.44560) },
-- ['South Rockford Drive'] = { coords = vector4(-682.92620, -1112.9280, 14.525076, 37.729667) },
-- ['Tinsel Towers Street'] = { coords = vector4(-716.93380, -58.314390, 37.472839, 297.83691) },
}
--──────────────────────────────────────────────────────────────────────────────
-- Crypto App [EDIT]
-- [INFO] Simulated crypto market with periodic price changes. Adjust bounds,
-- volatility, and timers carefully to avoid destabilizing your economy.
--──────────────────────────────────────────────────────────────────────────────
Crypto = {
Lower = 500, -- [EDIT] Absolute lower bound for coin value.
Upper = 5000, -- [EDIT] Absolute upper bound for coin value.
History = { -- [CORE] Runtime price history buffer per coin.
['btc'] = {}
},
Worth = { -- [EDIT] Initial price per coin.
['btc'] = 1000
},
Labels = { -- [EDIT] Display labels per coin.
['btc'] = 'BTC'
},
Exchange = { -- [EDIT] In-world exchange terminal coordinates.
coords = vector3(1276.21, -1709.88, 54.57),
RebootInfo = { -- [ADV] Simulated maintenance/reboot state.
state = false,
percentage = 0
},
},
-- Auto update controls ---------------------------------------------------- [EDIT]
Coin = 'btc', -- [EDIT] Ticker symbol to auto-refresh.
RefreshTimer = 10, -- [EDIT] Minutes between updates.
-- Event chances (crash/luck spikes) -------------------------------------- [EDIT]
ChanceOfCrashOrLuck = 2, -- [EDIT] % chance any tick triggers a spike.
Crash = { 20, 80 }, -- [EDIT] If crash: % drop range.
Luck = { 20, 45 }, -- [EDIT] If luck: % rise range.
-- Normal drift probabilities --------------------------------------------- [EDIT]
-- [INFO] If no spike, decide down/up by these thresholds (out of 100).
ChanceOfDown = 30, -- [EDIT] ≤ this → price goes down.
ChanceOfUp = 60, -- [EDIT] ≥ this → price goes up.
CasualDown = { 1, 10 }, -- [EDIT] % drop range when drifting down.
CasualUp = { 1, 10 }, -- [EDIT] % rise range when drifting up.
}
--──────────────────────────────────────────────────────────────────────────────
-- SIM Card Vendor [EDIT]
-- [INFO] Enable SIM card purchases to change phone numbers/metadata.
--──────────────────────────────────────────────────────────────────────────────
Config.EnableSimCard = false
Config.SimCardLocations = { -- [EDIT] Vendor(s) that sell SIMs.
{
coords = vec4(461.31878662109375, -1457.707763671875, 29.30237960815429, 23.81533050537109),
model = 'a_m_m_beach_01', -- [EDIT] Ped model string.
price = 5000, -- [EDIT] Price per SIM.
blip = { -- [EDIT] Map marker config.
sprite = 89,
color = 1,
scale = 0.5,
name = 'Sim Card',
}
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Real-World Price Ticker (Optional) [EDIT]
-- [INFO] Pulls live crypto price from CryptoCompare. Keep interval ≥ 2 minutes
-- to avoid rate-limits. Add an API key to stabilize requests.
--──────────────────────────────────────────────────────────────────────────────
Ticker = {
Enabled = true, -- [EDIT] true: show real-world price ticker.
tick_time = 2, -- [EDIT] Minutes between fetches (min 2).
--- Error handle (do not touch) ------------------------------------------- [CORE]
Error_handle = {
['fsym is a required param.'] = 'Config error: Invalid / Missing coin name',
['tsyms is a required param.'] = 'Config error: Invalid / Missing currency',
['cccagg_or_exchange'] = 'Config error: Invalid currency / coin combination',
},
}
--──────────────────────────────────────────────────────────────────────────────
-- Racing App Whitelist [EDIT]
-- [INFO] Admins or whitelisted identifiers can create races.
--──────────────────────────────────────────────────────────────────────────────
Config.RaceSetupAllowed = false
Config.WhitelistedCreators = {
'PUTCID', -- [EDIT] Add license/identifier strings here.
}
--──────────────────────────────────────────────────────────────────────────────
-- Instagram Privacy [EDIT]
-- [INFO] Toggle global visibility of posts.
--──────────────────────────────────────────────────────────────────────────────
Config.InstagramShowAllPostsEveryone = true -- [EDIT] true: public feed; false: followers-only.
--──────────────────────────────────────────────────────────────────────────────
-- App Store · “Today” Panels [EDIT]
-- [INFO] Featured banners on the App Store home.
--──────────────────────────────────────────────────────────────────────────────
Config.StoreAppToday = {
{
header = 'Arcade Games',
head = 'Download and play the most bizarre games you will find!',
image = 'https://media.istockphoto.com/id/1196066633/vector/retro-arcade-slot-machine-with-pixel-game.jpg?s=612x612&w=0&k=20&c=eOvAvSLE88KimO3y5qYH78OZhmKZRDTMnN-VPRBiJVU=',
footer = 'Discover our new games in the App Store, play with your friends but dont forget to enjoy Roleplay!'
},
{
header = 'Music everywhere',
head = 'With Soundfy you can enjoy your favorite music everywhere!',
image = 'https://images-om.imgix.net/9wut1wqkxjto/music-sheet-mockup-dark.jpg?auto=format&fit=max&q=90&w=1500&s=0d71895e030dbde00e0a333395074ee8',
footer = 'Search for your favorite hits, create playlists and show your friends the real music, enjoy all this with Soundfy'
}
}
--──────────────────────────────────────────────────────────────────────────────
-- App Store · Catalog [EDIT]
-- [INFO] Register apps/games. `label` is the display name. `job` restricts by job,
-- `blockedJobs` excludes jobs, `timeout` is mock download time (ms).
--──────────────────────────────────────────────────────────────────────────────
Config.StoreApps = {
{
app = 'instagram', -- [CORE] Internal app id.
image = 'img/apps/instagram.png', -- [EDIT] App icon path (NUI).
label = 'Instagraph', -- [EDIT] Display name.
job = false, -- [EDIT] false or { 'ambulance', ... }
blockedJobs = {}, -- [EDIT] Jobs that cannot use.
timeout = 10000, -- [EDIT] Download/install time (ms).
creator = 'Instagraph, Inc', -- [EDIT] Publisher.
category = 'Social', -- [EDIT] Category name.
isGame = false, -- [EDIT] true for games.
description = 'Photo and video application', -- [EDIT] Short description.
age = '16+', -- [EDIT] Age rating string.
extraDescription = { -- [EDIT] Extra panels inside detail page.
{
header = 'Instagraph',
head = 'Share unique images and stories with Instagraph',
image = 'https://i.ibb.co/0DWsBDf/instagram.webp',
footer = 'Connect with friends, share what you do, or check out whats new from people around the world'
},
}
},
{
app = 'garage',
image = 'img/apps/garage.png',
label = 'iCar',
job = false, -- or { 'ambulance' }
timeout = 15000,
blockedJobs = {}, -- or { 'ambulance' }
creator = 'Los Santos',
category = 'Other',
isGame = false,
description = 'Check and manage the garages of all Los Santos!',
age = '16+',
extraDescription = {
{
header = 'Los Santos Garages',
head = 'Specialized application to control your vehicles or garages for all saints',
image = 'https://i.ibb.co/4t8q7M1/garage.webp',
footer = 'What are you waiting for to manage all your vehicles in the most comfortable way?'
},
}
},
{
app = 'twitter',
image = 'img/apps/twitter.png',
label = 'Tweedle',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 15000,
creator = 'X Corp',
category = 'social',
isGame = false,
description = 'Post about your day and enjoy with your friends',
age = '16+',
extraDescription = {
{
header = 'Tweedle',
head = 'The Tweedle app is the trusted global digital marketplace for everyone',
image = 'https://i.ibb.co/bK1jp0q/twitter.webp',
footer = 'Post content for everyone to see and participate in public conversations'
}
}
},
{
app = 'bank',
image = 'img/apps/bank.png',
label = 'C. Banking',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 15000,
creator = 'C. Banking',
category = 'Productivity & Finance',
isGame = false,
description = 'Post about your day and enjoy with your friends',
age = '18+',
extraDescription = {
{
header = 'Central Banking',
head = 'Manage your money through Central Banking',
image = 'https://i.ibb.co/sQRx7Yb/bank.webp',
footer = 'Your money is always safe, we know you, we love you at Central Banking'
}
}
},
{
app = 'whatsapp',
image = 'img/apps/whatsapp.png',
label = 'ChitChat',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 17000,
creator = 'ChitChat Inc',
category = 'social',
isGame = false,
description = 'Chat with your friends now!',
age = '16+',
extraDescription = {
{
header = 'ChitChat',
head = 'Enjoy group chats and calls with your friends!',
image = 'https://i.ibb.co/dcPPG7h/whatsapp.webp',
footer = 'Contact your friends through your contacts and talk to them at any time'
}
}
},
{
app = 'state',
image = 'img/apps/state.png',
label = 'State',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 14000,
creator = 'Los Santos',
category = 'Information & Reading',
isGame = false,
description = 'Search for workers online',
age = '9+',
extraDescription = {
{
header = 'State',
head = 'Are you looking to communicate with a specific worker?',
image = 'https://i.ibb.co/sKFvrmW/state.webp',
footer = 'Call the most sought-after workers with the best reputation in Los Santos'
}
}
},
{
app = 'spotify',
image = 'img/apps/spotify.png',
label = 'Soundfy',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 14000,
creator = 'Soundfy Inc',
category = 'Entertainment',
isGame = false,
description = 'Listen and play albums',
age = '3+',
extraDescription = {
{
header = 'Soundfy',
head = 'With Soundfy, listening to the radio or songs from your artists with their lyrics or downloading music and podcasts is very simple',
image = 'https://i.ibb.co/bztwrsJ/spotify.webp',
footer = 'Soundfy is the perfect platform to listen to your favorite music, radio and podcasts on your mobile, tablet, computer and more'
}
}
},
{
app = 'youtube',
image = 'img/apps/youtube.png',
label = 'YouLink',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 19000,
creator = 'Link Inc',
category = 'Entertainment',
isGame = false,
description = 'Watch videos online',
age = '8+',
extraDescription = {
{
header = 'YouLink',
head = 'Get the official YouLink application on your Phone',
image = 'https://i.ibb.co/rm1cz8Y/youtube.webp',
footer = 'Discover what topics are sweeping the world!'
}
}
},
{
app = 'tinder',
image = 'img/apps/tinder.png',
label = 'Finder',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 19000,
creator = '4Love',
category = 'Social',
isGame = false,
description = 'Find a partner and meet people',
age = '18+',
extraDescription = {
{
header = 'Finder',
head = 'Are you looking for a partner? An open relationship?',
image = 'https://i.ibb.co/yh8F0GS/tinder.webp',
footer = 'With over 70 billion matches to date, Finder is the number one free dating app and the best place to meet people'
}
}
},
{
app = 'yellowpages',
image = 'img/apps/yellowpages.png',
label = 'Yellow Posts',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 11000,
creator = 'Los Santos',
category = 'Information & Reading',
isGame = false,
description = 'Buying and selling items online',
age = '18+',
extraDescription = {
{
header = 'Yellow Posts',
head = 'Find and sell items online',
image = 'https://i.ibb.co/RvLkNJK/yellowpages.webp',
footer = 'Find your favorite product or sell your belongings at Yellow Posts Los Santos'
}
}
},
{
app = 'rentel',
image = 'img/apps/rentel.png',
label = 'Aventon',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 12000,
creator = 'Aventon Tech',
category = 'Other',
isGame = false,
description = 'Rent a car now!',
age = '16+',
extraDescription = {
{
header = 'Aventon',
head = 'Find your ideal vehicle and rent it',
image = 'https://i.ibb.co/bPgfgd4/rental.webp',
footer = 'Rent vehicles and pick them up at the Aventon spot in Los Santos'
}
}
},
{
app = 'uber',
image = 'img/apps/uber.png',
label = 'Door Run',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 18000,
creator = 'doorRun SLU',
category = 'Other',
isGame = false,
description = 'Work with us by placing orders',
age = '6+',
extraDescription = {
{
header = 'Door Run',
head = 'Work at Door Run with just one click!',
image = 'https://i.ibb.co/sy9PGfR/ubereats.webp',
footer = 'Visit the most hidden places in Los Santos delivering orders for Door Run'
}
}
},
{
app = 'darkweb',
image = 'img/apps/darkweb.png',
label = 'Onion Browser',
job = false, -- or { 'ambulance' }
blockedJobs = { 'police' }, -- or { 'ambulance' }
timeout = 12000,
creator = 'Thor',
category = 'Other',
isGame = false,
description = 'The deepest of the internet',
age = '18+',
extraDescription = {
{
header = 'Onion Browser',
head = 'Discover the darkest stores on the internet',
image = 'https://i.ibb.co/J2v1nnZ/darkweb.webp',
footer = 'Buying and selling anonymous weapons with unique serial numbers'
}
}
},
{
app = 'racing',
image = 'img/apps/racing.png',
label = 'Racing',
job = false, -- or { 'ambulance' }
blockedJobs = { 'police' }, -- or { 'ambulance' }
timeout = 21000,
creator = 'Insane Team',
category = 'Other',
isGame = false,
description = 'Urban racing in a single app',
age = '18+',
extraDescription = {
{
header = 'Racing',
head = 'Join street racing in Los Santos',
image = 'https://i.ibb.co/2cynM0k/racing.webp',
footer = 'Compete for the prize, participate in races and appear at the top of Los Santos Racing'
}
}
},
{
app = 'darkchat',
image = 'img/apps/darkchat.png',
label = 'D-Chat',
job = false, -- or { 'ambulance' }
blockedJobs = { 'police' }, -- or { 'ambulance' }
timeout = 12000,
creator = 'Thor',
category = 'Other',
isGame = false,
description = 'Private chats without registrations',
age = '18+',
extraDescription = {
{
header = 'D-Chat',
head = 'Create your forum and chat with other people without any fear of data disclosure',
image = 'https://i.ibb.co/K2qznvW/darkchat.png',
footer = 'D-Chat works hosted by each user, so there is no way to recover or track messages'
}
}
},
{
app = 'uberRider',
image = 'img/apps/uberRider.png',
label = 'Drive Now',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 22000,
creator = 'Drive Tech',
category = 'Other',
isGame = false,
description = 'Tax-free travel',
age = '18+',
extraDescription = {
{
header = 'Drive Now',
head = 'Request your trips or even sign up among our drivers',
image = 'https://i.ibb.co/wd5BPJ4/uber.webp',
footer = 'The safest website for your trips in all Los Santos'
}
}
},
{
app = 'tiktok',
image = 'img/apps/tiktok.png',
label = 'TickTock',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 29000,
creator = 'TickTock Inc',
category = 'Social',
isGame = false,
description = 'Upload videos with your friends',
age = '12+',
extraDescription = {
{
header = 'TickTock',
head = 'Be number one by posting the funniest videos',
image = 'https://i.ibb.co/kKJqbyn/tiktok.webp',
footer = 'Upload videos, listen to music, compete with your friends for the best post'
}
}
},
{
app = 'market',
image = 'img/apps/market.png',
label = 'Marketplace',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 29000,
creator = 'Los Santos',
category = 'Other',
isGame = false,
description = 'Your favorite shops',
age = '9+',
extraDescription = {
{
header = 'Marketplace',
head = 'The best shops in Los Santos have arrived',
image = 'https://i.ibb.co/cJ1yPjL/market.webp',
footer = 'Place your orders or even manage your business with Marketplace'
}
}
},
{
app = 'discord',
image = 'img/apps/discord.png',
label = 'Catcord',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 13000,
creator = 'Catcord Inc',
category = 'Social',
isGame = false,
description = 'Channels to chat',
age = '12+',
extraDescription = {
{
header = 'Catcord',
head = 'Channels to chat with your friends',
image = 'https://i.ibb.co/vmtL0MK/discord.webp',
footer = 'Create and manage your own channels with Catcord!'
}
}
},
{
app = 'jobcenter',
image = 'img/apps/jobcenter.png',
label = 'Centru de Locuri de Munca',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 16000,
creator = 'Jobs SLU',
category = 'Other',
isGame = false,
description = 'Gaseste un loc de munca rapid',
age = '18+',
extraDescription = {
{
header = 'Centru de Locuri de Munca',
head = 'Cauta locuri de munca online cu Likedin',
image = 'https://i.ibb.co/dMmQJqS/jobcenter.webp',
footer = 'Fii angajat de cele mai bune companii din Los Santos cu Likedin!'
}
}
},
-- Games
{
app = 'fruitchop',
image = 'https://cdn.jim-nielsen.com/ios/512/fruit-ninja-2020-08-31.png',
label = 'Fruit Chop',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 28000,
creator = 'Gamezop Inc',
category = 'Games',
description = 'Slide cutting fruits',
age = '3+',
isGame = true,
game = {
name = 'fruitchop',
iframe = 'https://cdn-factory.marketjs.com/en/fruit-slice-frenzy/index.html',
css = {
-- If you make it with css, you can use it like this .fruitchop-app iframe { css values },
width = '215%',
height = '50%',
transform = 'rotate(90deg)', -- Required for rotate
border = 'none',
position = 'absolute',
left = '-60%',
top = '25%',
},
rotate = true
},
extraDescription = {
{
header = 'Fruit Chop',
head = 'Cut the fruits in time to win!',
image = 'https://assets1.ignimgs.com/2016/05/20/fruit-ninjajpg-6da9b1_160w.jpg?width=1280',
footer = 'Intuitive game that allows you to cut fruits and earn many rewards'
}
}
},
{
app = 'chikenblast',
image = 'https://i.ibb.co/tBbDWqL/3.webp',
label = 'Chiken Blast',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 28000,
creator = 'Gamezop Inc',
category = 'Games',
description = 'Collect colorful chickens and complete the game',
age = '16+',
isGame = true,
game = {
name = 'chikenblast',
iframe = 'https://cdn-factory.marketjs.com/en/chicken-blast/index.html',
css = {
-- If you make it with css, you can use it like this .chikenblast-app iframe { css values },
width = '215%',
height = '50%',
transform = 'rotate(90deg)', -- Required for rotate
border = 'none',
position = 'absolute',
left = '-60%',
top = '25%',
},
rotate = true
},
extraDescription = {
{
header = 'Chiken Blast',
head = 'Collect colorful chickens and complete the game',
image = 'https://www.marketjs.com/item/chicken-blast/chicken-blast.jpg',
footer = 'The most played chicken game this 2024'
}
}
},
{
app = 'kingkongracing',
image = 'https://i.ibb.co/p0Xp9DS/2.webp',
label = 'Kong Kong Racing',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 28000,
creator = 'Gamezop Inc',
category = 'Games',
description = 'Epic monkey races',
age = '3+',
isGame = true,
game = {
name = 'kingkongracing',
iframe = 'https://cdn-factory.marketjs.com/en/king-kong-kart-racing/index.html',
css = {
-- If you make it with css, you can use it like this .kingkongracing-app iframe { css values },
width = '215%',
height = '50%',
transform = 'rotate(90deg)', -- Required for rotate
border = 'none',
position = 'absolute',
left = '-60%',
top = '25%',
},
rotate = true
},
extraDescription = {
{
header = 'Kong Kong Racing',
head = 'Epic monkey races',
image = 'https://a.silvergames.com/screenshots/king-kong-kart-racing/2_kart-race.jpg',
footer = 'Be the champion of the world of monkeys!'
}
}
},
{
app = 'mmacitybrawl',
image = 'https://i.ibb.co/pvQpJHp/1.webp',
label = 'MMA City Brawl',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
timeout = 28000, --28000,
creator = 'Gamezop Inc',
category = 'Games',
description = 'Online street fights!',
age = '18+',
isGame = true,
game = {
name = 'mmacitybrawl',
iframe = 'https://cdn-factory.marketjs.com/en/mma-city-brawl/index.html',
css = {
-- If you make it with css, you can use it like this .mmacitybrawl-app iframe { css values },
width = '215%',
height = '50%',
transform = 'rotate(90deg)', -- Required for rotate
border = 'none',
position = 'absolute',
left = '-60%',
top = '25%',
},
rotate = true
},
extraDescription = {
{
header = 'MMA City Brawl',
head = 'Online street fights!',
image = 'https://www.marketjs.com/item/mma-city-brawl/mma-city-brawl.jpg',
footer = 'Fight with other players to be the champion!'
}
}
},
}
Config.CustomApplications = {}
--──────────────────────────────────────────────────────────────────────────────
-- Auto-append custom apps into the App Store [AUTO]
-- [INFO] Everything you place in Config.CustomApplications will appear in the
-- App Store (Config.StoreApps) without touching core code.
for _, v in pairs(Config.CustomApplications) do
table.insert(Config.StoreApps, v)
end
--──────────────────────────────────────────────────────────────────────────────
-- Installed Phone Applications [EDIT]
-- [INFO] Defines which apps are installed/visible on the device by default.
-- Fields:
-- • app [CORE] Internal id (must match the app implementation name)
-- • image [EDIT] NUI icon path
-- • label [EDIT] Display name (translatable)
-- • job [EDIT] false or { 'job1','job2',... } to restrict access
-- • blockedJobs [EDIT] jobs that cannot use/open app
-- • category [EDIT] Grouping for App Store / UI
-- • hideInSettingsNotifications [EDIT] hide this app from Notification Settings UI
-- • notificationSound [EDIT] override sound ('' or nil → default)
--──────────────────────────────────────────────────────────────────────────────
Config.PhoneApplications = {
{
app = 'phone', -- [CORE]
image = 'img/apps/phone.png', -- [EDIT]
label = 'Phone', -- [EDIT]
job = false, -- [EDIT] or { 'ambulance' }
blockedJobs = {}, -- [EDIT] or { 'ambulance' }
category = 'Social', -- [EDIT]
hideInSettingsNotifications = true, -- [EDIT] true: not listed in Settings → Notifications
notificationSound = '', -- [EDIT] set to '' or remove line to use default sound
},
{
app = 'messages',
image = 'img/apps/messages.png',
label = 'Messages',
job = false, -- or { 'ambulance' }
category = 'Social',
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'settings',
image = 'img/apps/settings.png',
label = 'Settings',
job = false, -- or { 'ambulance' }
category = 'Utilities',
blockedJobs = {}, -- or { 'ambulance' }
blockBadge = true
},
{
app = 'camera',
image = 'img/apps/camera.png',
label = 'Camera',
category = 'Creativity',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'contacts',
image = 'img/apps/contacts.png',
label = 'Contacts',
job = false, -- or { 'ambulance' }
category = 'Social',
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'mail',
image = 'img/apps/mail.png',
label = 'Mail',
category = 'Productivity & Finance',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'weather',
image = 'img/apps/weather.png',
label = 'Weather',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
category = 'Information & Reading',
},
{
app = 'calendar',
image = 'img/apps/calendar.png',
label = 'Calendar',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
category = 'Productivity & Finance',
},
{
app = 'reminder',
image = 'img/apps/reminders.png',
label = 'Reminders',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
category = 'Productivity & Finance',
},
{
app = 'gallery',
image = 'img/apps/gallery.png',
label = 'Gallery',
job = false, -- or { 'ambulance' }
category = 'Creativity',
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'health',
image = 'img/apps/health.png',
label = 'Health',
job = false, -- or { 'ambulance' }
category = 'Creativity',
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'notes',
image = 'img/apps/notes.png',
label = 'Notes',
category = 'Productivity & Finance',
job = false, -- or { 'ambulance' }
blockedJobs = {}, -- or { 'ambulance' }
hideInSettingsNotifications = true
},
{
app = 'calculator',
image = 'img/apps/calculator.png',
label = 'Calculator',
job = false, -- or { 'ambulance' }
category = 'Utilities',
blockedJobs = {}, -- or { 'ambulance' }
hideInSettingsNotifications = true
},
{
app = 'store',
image = 'img/apps/store.png',
label = 'App Store',
job = false, -- or { 'ambulance' }
category = 'Utilities',
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'crypto',
image = 'img/apps/stock.png',
label = 'Stock',
job = false, -- or { 'ambulance' }
category = 'Productivity & Finance',
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'clock',
image = 'img/apps/clock.png',
label = 'Clock',
job = false, -- or { 'ambulance' }
category = 'Utilities',
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'houses',
image = 'img/apps/houses.png',
label = 'Home',
job = false, -- or { 'ambulance' }
category = 'Utilities',
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'weazel',
image = 'img/apps/news.png',
label = 'News',
job = false, -- or { 'ambulance' }
category = 'Other',
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'map',
image = 'img/apps/maps.png',
label = 'Maps',
category = 'Utilities',
job = nil,
blockedJobs = {}, -- or { 'ambulance' }
},
{
app = 'safari',
category = 'Utilities',
label = 'Safari',
game = {
iframe = 'https://yep.com',
rotate = false,
name = 'safari',
css = {
top = '0',
border = 'none',
height = '100%',
position = 'absolute',
width = '100%'
}
},
image = 'img/apps/safari.png',
blockedJobs = {}
},
{
app = 'facetime',
image = 'img/apps/facetime.png',
label = 'FaceTime',
category = 'Social',
job = false, -- or { 'ambulance' }
blockedJobs = {}
},
}
--──────────────────────────────────────────────────────────────────────────────
-- Debug & Developer Tools [ADV]
-- [INFO] Use only during testing or development. Enabling these options will
-- generate frequent console logs, performance data, and internal info.
-- Avoid enabling on production servers to prevent spam and overhead.
--──────────────────────────────────────────────────────────────────────────────
Config.Debug = false -- [EDIT] Enables global debug mode (prints/logs most events).
Config.ZoneDebug = false -- [EDIT] Shows zone/region checks (e.g., signal zones).
Config.DeleteStoriesAndNotifies = false -- [EDIT] Deletes all stories and notifications upon script reload/start.
Config.DeleteNotificationsAutomatically = false -- [EDIT] Automatically deletes notifications after timeout (set false to disable).
-- [INFO] Safety override: if phones are not unique (shared metadata),
-- ownership restriction on F1 open is disabled automatically.
if not Config.UniquePhone then
Config.KeyOpenOnlyOwnedPhone = false
end