--────────────────────────────────────────────────────────────────────────────── -- 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: 100–500 depending on DB performance. --────────────────────────────────────────────────────────────────────────────── -- Framework & Dependency Autodetection [AUTO] -- [INFO] Detects running framework/billing/inventory/housing by resource name. -- [ADV] If you’ve 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 -- 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 won’t 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 (0–255). } 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 phone’s 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 (0–200 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