Agency Docs
QBESX

Agency-Pad Configuration

Tablet resource for FiveM running AgencyOS with a full app ecosystem.

v26.5Paid4 Pages

01Configuration

Quick Installation · config.lua · Agency-Pad

Download config.lua

--[[ Agency Pad - Configuration (c) Agency Scripts Framework Options: - 'auto' : Automatically detect QBCore or ESX (default) - 'qb' : Force QBCore - 'esx' : Force ESX - 'oxide-banking' : Alias for QBCore + Oxide banking mode Banking Options: - 'framework' : Use native framework money handling (default) - 'oxide-banking' : Use Oxide Banking integration mode (QBCore only) ]] AgencyPadConfig = {} ------------------------------------------------------------------------------- -- FRAMEWORK ------------------------------------------------------------------------------- AgencyPadConfig.Framework = 'auto' ------------------------------------------------------------------------------- -- BANKING ------------------------------------------------------------------------------- AgencyPadConfig.Banking = 'framework' -- 'framework' | 'oxide-banking' AgencyPadConfig.InvoiceProvider = 'builtin' -- 'builtin' (default - works on both Phone + Pad) | 'auto' | 'okokBilling' ------------------------------------------------------------------------------- -- GENERAL ------------------------------------------------------------------------------- AgencyPadConfig.PadItem = 'tablet' -- Item name that the player needs in inventory AgencyPadConfig.PadOpenKey = 'K' -- Keybind to open the tablet (FiveM key name, e.g. 'UP', 'M', 'F1') AgencyPadConfig.PadAgencyAIKey = 'I' -- Keybind to open AgencyAI directly (e.g. 'I', 'F2', etc.) AgencyPadConfig.EnableAgencyAI = true -- Set to false to completely disable AgencyAI (removes app and keybind) AgencyPadConfig.EnableAIPickupApp = true -- Driverless pickup app toggle (true = app enabled by default) AgencyPadConfig.EnableAIPickupViaAgencyAI = true -- AgencyAI pickup intent toggle (independent from app availability) AgencyPadConfig.EnableMoneyGames = true -- Toggle paid gambling-style apps (Dice, Coin Flip, Lucky Slots, Roulette) AgencyPadConfig.EnableSmartHomeApp = true -- Smart Home app (needs qs-housing). Auto-hides if qs-housing is not running. AgencyPadConfig.UseAgencyHUD = true -- Enable Agency-HUD integration hooks (events/state sync) AgencyPadConfig.SyncAgencyHUD = true -- Sync phone open/close state to Agency-HUD (events + statebag + exports) AgencyPadConfig.PerformanceModeDefault = false -- Performance mode default (true/false) AgencyPadConfig.PadAnswerKey = 'Y' AgencyPadConfig.PadDeclineKey = 'J' AgencyPadConfig.AllowMovement = false AgencyPadConfig.DefaultLanguage = 'en' -- Default language: 'en', 'de', 'fr', 'es', 'tr', 'pl' AgencyPadConfig.PadDataStorageMode = 'phone' -- 'phone' = scoped by phone number, 'person' = scoped by identifier AgencyPadConfig.AutoApplySqlSchema = true -- Auto-create the SQL schema from agency-pad.sql on resource start ------------------------------------------------------------------------------- -- MDT SYSTEM ------------------------------------------------------------------------------- AgencyPadConfig.EnableMDT = true -- Set to false to disable the entire MDT system for Police/EMS ------------------------------------------------------------------------------- -- CRYPTO MARKET SETTINGS ------------------------------------------------------------------------------- -- Configure cryptocurrency markets (prices update dynamically in-game) -- basePrice: Starting price in dollars -- volatility: Price fluctuation rate (0.05 = 5% change per update) -- realCrypto: Real-world cryptocurrency this is based on (for display) AgencyPadConfig.CryptoMarkets = { { id = 'digicoin', name = 'DigiCoin', symbol = 'DGC', icon = '₿', color = '#f7931a', basePrice = 45000, volatility = 0.05, realCrypto = 'Bitcoin' }, { id = 'etherchain', name = 'EtherChain', symbol = 'ETC', icon = '⟠', color = '#627eea', basePrice = 2800, volatility = 0.08, realCrypto = 'Ethereum' }, { id = 'litemark', name = 'LiteMark', symbol = 'LTM', icon = 'Ł', color = '#345d9d', basePrice = 150, volatility = 0.12, realCrypto = 'Litecoin' }, { id = 'ripplenet', name = 'RippleNet', symbol = 'RPN', icon = '✕', color = '#00aae4', basePrice = 0.85, volatility = 0.15, realCrypto = 'XRP' }, { id = 'cardania', name = 'Cardania', symbol = 'CDA', icon = '₳', color = '#0033ad', basePrice = 1.25, volatility = 0.13, realCrypto = 'Cardano' } } -- Crypto update interval (milliseconds) - how often prices update AgencyPadConfig.CryptoUpdateInterval = 10000 -- 10 seconds (also used for stocks) -- Default buy/sell amount per transaction AgencyPadConfig.CryptoTradeAmount = 0.1 ------------------------------------------------------------------------------- -- AGENCY AI SUPER MODE -- Enable enhanced AI responses by connecting to a real AI API. -- Supported providers: 'openrouter', 'grok' (alias: 'qrok') -- Users activate Super Mode inside the AgencyAI app via the ⚡ button. -- If no key is set, AgencyAI uses built-in offline responses. ------------------------------------------------------------------------------- AgencyPadConfig.AIProvider = 'openrouter' -- 'openrouter' | 'grok' | 'qrok' AgencyPadConfig.AIFallbackProvider = 'grok' -- Optional fallback provider when primary key is missing -- OpenRouter (recommended for free models) AgencyPadConfig.AIOpenRouterKey = '' -- https://openrouter.ai/keys AgencyPadConfig.AIOpenRouterModel = '' -- Grok / xAI AgencyPadConfig.AIGrokKey = '' -- https://console.x.ai/ AgencyPadConfig.AIGrokModel = 'grok-3-mini-beta' -- Legacy key (still supported as fallback for compatibility) AgencyPadConfig.AIApiKey = '' -- Rate Limiting: max tokens a single player can use per day. -- Set to 0 for UNLIMITED usage (no daily cap). -- Example: 10000 = roughly 30-50 AI messages per day per player. AgencyPadConfig.AIMaxTokensPerDay = 0 -- 0 = unlimited AgencyPadConfig.AIMaxTokensPerMessage = 300 -- max tokens per single AI response ------------------------------------------------------------------------------- -- MUSIC LIBRARY -- The music app plays only direct audio files that YOU provide. Nothing is -- shipped with the resource and the library starts empty. -- -- How songs get in: -- 1. A player submits a link in the Music app (Submit tab). -- 2. A music admin approves it (Review tab). Then everyone can play it. -- -- Make someone a music admin with: musicadmin <serverId> -- (console, or any player with the ace permission 'command.musicadmin') -- A player with the ace permission 'agency.musicadmin' is always an admin. -- -- Accepted links: https only, and the URL must end in one of -- .mp3 .ogg .oga .wav .m4a .aac .flac .opus -- Links to streaming platforms are rejected by the server. ------------------------------------------------------------------------------- AgencyPadConfig.MusicAutoApprove = false -- true = submissions skip the review step AgencyPadConfig.MusicMaxOpenSubmissions = 5 -- max pending submissions per player -- Own hosts that serve audio without a file extension (e.g. your own CDN). -- Leave empty unless you know you need it. Example: { 'cdn.myserver.com' } AgencyPadConfig.MusicAllowedHosts = { } AgencyPadConfig.MusicSyncRadius = 30.0 -- Radius (meters) for nearby players to hear music AgencyPadConfig.MusicMaxVolume = 0.5 -- Max volume for synced music (0.0-1.0) -- Accept links to external media sites as well, not just direct audio files. -- Off by default. Turning this on is your decision as the server owner and it -- is your responsibility to make sure you may use that content on your server. -- Submissions still go through the review step unless MusicAutoApprove is on. -- TESTWERT: steht auf dem Testserver an, im Verkauf auf false lassen AgencyPadConfig.MusicAllowExternalLinks = true ------------------------------------------------------------------------------- -- MUSIC — DISCORD NOTIFICATION -- Every submission is posted to Discord so your admins see it right away. -- Leave the webhook empty to turn this off. ------------------------------------------------------------------------------- -- Alter Schluessel, wird vom Script nicht mehr gelesen. -- TESTWERT: vor dem Verkauf leeren! AgencyPadConfig.YouTubeAPIKey = '' -- TESTWERT: vor dem Verkauf leeren! AgencyPadConfig.MusicDiscordWebhook = '' -- Optional: role that gets pinged with every submission. Role ID only. AgencyPadConfig.MusicDiscordMentionRoleId = '' -- Approve / reject straight from Discord. -- Set this to the address your server is reachable at from the outside, -- WITHOUT a trailing slash, including the port. Examples: -- 'http://123.45.67.89:30120' -- 'https://fivem.myserver.com' -- The Discord post then contains an Approve and a Reject link. Each link -- carries a one-time token and stops working after the decision. -- Leave empty and the post only tells admins to use the phone (Music -> Review). -- TESTWERT: vor dem Verkauf leeren! AgencyPadConfig.MusicReviewCallbackUrl = 'http://80.136.34.11:30110' ------------------------------------------------------------------------------- -- CALL SETTINGS ------------------------------------------------------------------------------- AgencyPadConfig.CallTimeout = 30 AgencyPadConfig.CallRingInterval = 4000 AgencyPadConfig.CallMaxRings = 10 ------------------------------------------------------------------------------- -- VOICE SYSTEM -- Controls which voice resource is used for phone call audio. -- 'auto' = Automatically detect running voice resource (recommended) -- 'pma-voice' = Force pma-voice -- 'saltychat' = Force SaltyChat -- 'mumble-voip' = Force mumble-voip (FiveM built-in Mumble wrapper) -- 'tokovoip' = Force TokoVOIP ------------------------------------------------------------------------------- AgencyPadConfig.VoiceSystem = 'auto' ------------------------------------------------------------------------------- -- REAL-TIME STREAMING / VIDEO CALLS -- Cloudflare TURN is the default transport for Pictogram live streams and -- FaceZoom video sessions. -- -- The API token is used server-side to generate short-lived TURN credentials. -- Do not expose the token to the browser or to public client-side scripts. -- Sign up here: https://dash.cloudflare.com/sign-up/realtime/turn -- Create your TURN app / token here after signup: -- https://dash.cloudflare.com/?to=/:account/realtime/turn -- You need the TURN Token ID and the API Token from the Cloudflare dashboard. ------------------------------------------------------------------------------- AgencyPadConfig.StreamTransport = 'cloudflare-turn' -- 'cloudflare-turn' AgencyPadConfig.CloudflareTurnEnabled = true AgencyPadConfig.CloudflareTurnName = 'tight-hall-3dd2' AgencyPadConfig.CloudflareTurnTokenId = '' AgencyPadConfig.CloudflareTurnApiToken = '' AgencyPadConfig.CloudflareTurnApiUrl = 'https://rtc.live.cloudflare.com/v1/turn/keys/%s/credentials/generate-ice-servers' AgencyPadConfig.CloudflareTurnCredentialTTL = 43200 -- Seconds ------------------------------------------------------------------------------- -- NOTIFICATION ------------------------------------------------------------------------------- AgencyPadConfig.NotifyDuration = 5000 -- Use Agency-Notify as the default notification system -- Free download: https://agency-script.tebex.io/package/6937769 AgencyPadConfig.UseAgencyNotify = true ------------------------------------------------------------------------------- -- AGENCY REPORTS (Report App) -- Integrates Agency Reports providers to let players submit reports from the phone -- Free download: https://agency-script.tebex.io/package/6959744 ------------------------------------------------------------------------------- AgencyPadConfig.UseAgencyReports = true AgencyPadConfig.AgencyReportsProvider = 'v2' -- 'v2' | 'v2_ad_free' | 'legacy' | 'auto' AgencyPadConfig.AgencyReportsCommand = 'areport' -- Opens the external Agency-LifeInvaderV2 UI instead of the internal phone app. AgencyPadConfig.EnableLifeInvaderV2Integration = false -- Fast navigation categories used inside the Maps app. -- Each entry can point to one or more GTA blip sprites and is used to find the nearest matching destination. AgencyPadConfig.MapFastNavEntries = { { id = 'gas', labelKey = 'maps_gas_station', icon = 'fa-gas-pump', color = '#0a84ff', sprites = { 361 } }, { id = 'market', labelKey = 'maps_market', icon = 'fa-basket-shopping', color = '#ff9500', sprites = { 52, 77, 102 } }, { id = 'atm', labelKey = 'maps_atm', icon = 'fa-credit-card', color = '#30d158', sprites = { 277 } }, { id = 'clothing', labelKey = 'maps_clothing_store', icon = 'fa-shirt', color = '#bf5af2', sprites = { 73 } }, { id = 'tattoo', labelKey = 'maps_tattoo_parlor', icon = 'fa-wand-magic-sparkles', color = '#ff9f0a', sprites = { 75 } }, { id = 'barber', labelKey = 'maps_barber', icon = 'fa-scissors', color = '#5e72eb', sprites = { 71 } }, { id = 'bar', labelKey = 'maps_bar', icon = 'fa-martini-glass-citrus', color = '#ff7a00', sprites = { 93 } }, } ------------------------------------------------------------------------------- -- SECURITY (Face Unlock / Lock Screen) ------------------------------------------------------------------------------- AgencyPadConfig.FaceIdDefault = false -- Default Face Unlock state for new players AgencyPadConfig.FaceIdAnimDuration = 2600 -- Face Unlock animation duration (ms) AgencyPadConfig.LockScreenEnabled = true -- Allow lock screen feature ------------------------------------------------------------------------------- -- DIALER (Phone / Calls) ------------------------------------------------------------------------------- AgencyPadConfig.DialerEmergencyNumber = '911' -- Emergency number AgencyPadConfig.DialerTestNumber = '511' -- Always-answered local test line for call checks (set empty string to disable) AgencyPadConfig.DialerShowRecents = true -- Show recent calls tab AgencyPadConfig.DialerMaxRecents = 20 -- Max recent calls to display ------------------------------------------------------------------------------- -- DISPATCH SYSTEM (MDT Integration) -- Controls how emergency calls/SMS are routed to police/EMS. -- 'internal' = Use the phone's built-in dispatch system (default) -- 'cd_dispatch' = cd_dispatch by Codesign -- 'ps-dispatch' = ps-dispatch by Project Sloth -- 'qs-dispatch' = qs-dispatch by Quasar -- 'core_dispatch' = core_dispatch -- 'custom' = Custom dispatch (fires event: agency-pad:dispatch:custom) ------------------------------------------------------------------------------- AgencyPadConfig.DispatchSystem = 'internal' -- Dispatch categories for internal system AgencyPadConfig.DispatchCodes = { ['911'] = { type = 'emergency', priority = 'high', label = 'Emergency Call', departments = {'police', 'ems'} }, ['110'] = { type = 'police', priority = 'high', label = 'Police Emergency', departments = {'police'} }, ['112'] = { type = 'ems', priority = 'high', label = 'Medical Emergency', departments = {'ems'} }, } -- How long dispatches stay active (seconds, 0 = until manually cleared) AgencyPadConfig.DispatchTimeout = 300 -- Store dispatch history in database (requires oxmysql) AgencyPadConfig.DispatchSaveHistory = true ------------------------------------------------------------------------------- -- BUZZ (Messages) ------------------------------------------------------------------------------- AgencyPadConfig.BuzzMaxMessages = 50 -- Max messages per chat to load AgencyPadConfig.BuzzAllowDelete = true -- Allow deleting messages AgencyPadConfig.BuzzShowTimestamps = true -- Show timestamps on messages ------------------------------------------------------------------------------- -- CONTACTS ------------------------------------------------------------------------------- AgencyPadConfig.ContactsMaxCount = 100 -- Max contacts per player AgencyPadConfig.ContactsAllowShare = true -- Allow sharing contact info AgencyPadConfig.ContactsDefaultSort = 'name' -- Sort by: 'name' or 'recent' ------------------------------------------------------------------------------- -- SNAP (Camera) ------------------------------------------------------------------------------- -- Media storage provider used by the phone camera uploads. -- Available values: -- 'fivemanage' = uploads to FiveManage (recommended) -- 'discord' = uploads directly to a Discord webhook -- -- Discord webhook attachments can expire, be deleted, or become unavailable over time. -- That means older phone photos may disappear from gallery, posts, or stories later on. -- For long-term media storage you should use FiveManage. AgencyPadConfig.MediaStorageProvider = 'fivemanage' -- FiveManage upload configuration. -- Default upload endpoint: https://api.fivemanage.com/api/v3/file -- The phone camera uploads the screenshot and stores the returned public URL in the database. AgencyPadConfig.FiveManageApiUrl = 'https://api.fivemanage.com/api/v3/file' AgencyPadConfig.FiveManageApiKey = '' -- Discord webhook upload configuration. -- Create a Discord webhook in your server: -- 1. Go to your Discord server → Channel Settings → Integrations → Webhooks -- 2. Click "New Webhook", name it (e.g. "Phone Screenshots"), choose a channel -- 3. Copy the Webhook URL and paste it below -- The phone camera will POST screenshots as image attachments to this webhook when -- AgencyPadConfig.MediaStorageProvider = 'discord'. -- Leave empty ('') to disable Discord uploads. -- Example: 'https://discord.com/api/webhooks/1234567890/abcdefg...' AgencyPadConfig.ScreenshotWebhook = '' AgencyPadConfig.CameraMaxPhotos = 50 -- Max photos in gallery AgencyPadConfig.CameraQuality = 0.85 -- Screenshot JPEG quality (0-1) ------------------------------------------------------------------------------- -- POSTBOX (Mail) ------------------------------------------------------------------------------- AgencyPadConfig.PostboxLoadHours = 72 AgencyPadConfig.PostboxMaxMails = 50 -- Max mails to display AgencyPadConfig.PostboxAllowDelete = true -- Allow deleting mails AgencyPadConfig.PostboxMaxAccounts = 5 -- Max mailbox accounts per player AgencyPadConfig.PostboxDefaultDomain = 'agencyg.de' -- Default mailbox domain (players choose the local part themselves) ------------------------------------------------------------------------------- -- WALLET (Bank) ------------------------------------------------------------------------------- AgencyPadConfig.WalletMinTransfer = 1 -- Minimum transfer amount AgencyPadConfig.WalletMaxTransfer = 1000000 -- Maximum transfer amount AgencyPadConfig.WalletShowHistory = false -- Show transaction history (future) AgencyPadConfig.WalletCurrency = '$' -- Currency symbol -- Agency Pay fixed-term deposits (2-5% configurable rates) AgencyPadConfig.WalletFixedTerms = { { id = 'fd_7', label = '7 Days', days = 7, interest = 2.0 }, { id = 'fd_14', label = '14 Days', days = 14, interest = 3.0 }, { id = 'fd_30', label = '30 Days', days = 30, interest = 5.0 }, } ------------------------------------------------------------------------------- -- AGENCY PAY TERMINALS -- Configurable nearby payment terminals used by Agency Pay quick launch, -- quick-key detection and Agency Pay checkout. -- coords: x, y, z, w (w optional heading) -- amount: charged via Agency Pay / bank -- reward: optional test reward granted after a validated successful payment ------------------------------------------------------------------------------- AgencyPadConfig.AgencyPayTerminals = { { id = 'agency_water_terminal_1', coords = { x = 27.5543, y = -1343.0767, z = 29.4970, w = 0.6853 }, radius = 2.6, merchant = 'Agency Water Terminal', title = 'Agency Pay', subtitle = 'Tap to buy a bottle of water', label = 'Water Bottle', amount = 1.00, currency = '$', icon = 'fa-solid fa-bottle-water', accent = '#5ac8fa', manualConfirm = true, autoStart = false, showMarker = true, markerDistance = 18.0, textDistance = 6.0, markerType = 1, markerScale = 0.34, markerColor = { r = 90, g = 200, b = 250, a = 185 }, markerBob = true, showBlip = false, metadata = { terminalId = 'agency_water_terminal_1', rewardLabel = 'Water', }, reward = { item = 'water', amount = 1, }, serverEvent = 'agency-pad:server:handleAgencyPayTerminalPurchase', }, } ------------------------------------------------------------------------------- -- GALLERY (Photos) ------------------------------------------------------------------------------- AgencyPadConfig.GalleryMaxPhotos = 50 -- Max photos per player AgencyPadConfig.GalleryColumnsCount = 3 -- Grid columns (2, 3, or 4) ------------------------------------------------------------------------------- -- AGENCY CLOUD ------------------------------------------------------------------------------- AgencyPadConfig.AgencyCloud = { Enabled = true, GalleryAutoSyncDefault = false, Personal = { Label = 'Personal Cloud', BaseStorageMB = 200, BaseAssetLimit = 50, PurchaseStorageMB = 250, PurchaseAssetCount = 25, PurchasePrice = 5000, MaxStorageMB = 5000, MaxAssetLimit = 1000, GallerySavePrice = 150, DocumentSavePrice = 60, AllowGalleryAssets = true, AllowDocuments = true, StorageTiers = { { id = 'plus', label = 'Plus', storageMb = 250, assetCount = 25, price = 5000 }, { id = 'pro', label = 'Pro', storageMb = 750, assetCount = 75, price = 12000 }, { id = 'vault', label = 'Vault', storageMb = 1500, assetCount = 160, price = 22000 }, }, }, Company = { Label = 'Company Cloud', BossOnly = true, BaseStorageMB = 1000, BaseAssetLimit = 150, PurchaseStorageMB = 1000, PurchaseAssetCount = 100, PurchasePrice = 25000, MaxStorageMB = 20000, MaxAssetLimit = 5000, GallerySavePrice = 350, DocumentSavePrice = 180, AllowGalleryAssets = true, AllowDocuments = true, StorageTiers = { { id = 'team', label = 'Team', storageMb = 1000, assetCount = 100, price = 25000 }, { id = 'division', label = 'Division', storageMb = 2500, assetCount = 280, price = 52000 }, { id = 'enterprise', label = 'Enterprise', storageMb = 5000, assetCount = 650, price = 95000 }, }, }, DefaultGalleryStorageBytes = 2000000, DefaultDocumentStorageBytes = 102400, } ------------------------------------------------------------------------------- -- DARKNET MARKET -- Items available on the darknet marketplace. -- btcPrice: Price in BTC (DigiCoin equivalent) -- item: Item name to give player (framework item) -- amount: How many of the item to give -- desc: Description shown in the app -- pickupLocations: Random locations where the dead drop can spawn. -- The server picks one at random and sets a GPS waypoint for the buyer. -- Add/remove locations as needed for your server map. ------------------------------------------------------------------------------- AgencyPadConfig.DarknetItems = { { id = 'lockpick', label = 'Advanced Lockpick', desc = 'Military-grade lockpick. Untraceable.', btcPrice = 0.002, item = 'advancedlockpick', amount = 1, }, { id = 'vpn', label = 'Burner VPN', desc = 'Anonymous VPN tunnel. Single use.', btcPrice = 0.001, item = 'vpn', amount = 1, }, { id = 'radio', label = 'Encrypted Radio', desc = 'Frequency-hopping encrypted radio device.', btcPrice = 0.003, item = 'radio', amount = 1, }, { id = 'armor', label = 'Kevlar Vest', desc = 'Level III body armor. No serial numbers.', btcPrice = 0.005, item = 'armor', amount = 1, }, } -- Pickup (dead drop) locations where purchased items can be collected. -- The server randomly picks one of these for each purchase. -- Players get a GPS waypoint and must go there to pick up the item from a dumpster/trash can. AgencyPadConfig.DarknetPickupLocations = { { x = 126.42, y = -1282.71, z = 29.27, label = 'Strawberry Alley' }, { x = -587.53, y = -1064.37, z = 22.34, label = 'La Mesa Backstreet' }, { x = 373.24, y = -826.52, z = 29.30, label = 'Mission Row Dumpster' }, { x = -1205.42, y = -906.28, z = 12.33, label = 'Vespucci Canal' }, { x = 1137.86, y = -982.34, z = 46.42, label = 'Murrieta Heights' }, { x = -46.83, y = -1758.64, z = 29.42, label = 'Davis Industrial' }, } ------------------------------------------------------------------------------- -- GARAGE -- GarageSystem: Which garage script to use for vehicle data. -- 'auto' = Auto-detect (tries okokGarage, cd_garage, md-garage, qb-garages, qbx_garages, -- jg-advancedgarages, qs-advancedgarages, renewed-garage, loaf_garage, then DB fallback) -- 'md-garage' = Force md-garage -- 'okokGarage' = Force okokGarage (also accepts okokgarage) -- 'cd_garage' = Force cd_garage -- 'qb-garages' = Force qb-garages -- 'qbx_garages' = Force qbx_garages -- 'jg-advancedgarages' = Force jg-advancedgarages -- 'qs-advancedgarages' = Force qs-advancedgarages / qs-garages -- 'renewed-garage' = Force Renewed-Garage -- 'loaf_garage' = Force loaf_garage ------------------------------------------------------------------------------- AgencyPadConfig.GarageSystem = 'auto' -- Garage script to use ('auto' or script name) AgencyPadConfig.GarageSpawnCost = 200 -- Cost to spawn a vehicle ($) AgencyPadConfig.GarageMaxSpawned = 3 -- Max vehicles out at once per player AgencyPadConfig.GarageCooldown = 120 -- Cooldown in seconds between vehicle requests (0 = disabled) -- Autonomous pickup ride settings (driverless visual taxi) AgencyPadConfig.AIPickupVehicleModel = 'stretch' -- GTA limousine look AgencyPadConfig.AIPickupVehicleOptions = { { model = 'stretch', label = 'Agency Limo' }, { model = 'neon', label = 'AgencyAI E-Sport 4S' }, { model = 'raiden', label = 'AgencyAI Executive EV' }, } AgencyPadConfig.AIPickupCruiseSpeed = 22.0 AgencyPadConfig.AIPickupPickupSpeed = 34.0 -- Faster approach speed while coming to player AgencyPadConfig.AIPickupArrivalRadius = 18.0 AgencyPadConfig.AIPickupDropoffRadius = 22.0 AgencyPadConfig.AIPickupBoardingRadius = 12.0 -- Radius to press E and enter rear seats AgencyPadConfig.AIPickupUseInvisibleDriver = true AgencyPadConfig.AIPickupIgnoreTrafficToPickup = true -- Ignore traffic rules while driving to pickup AgencyPadConfig.AIPickupBaseFare = 500 -- Minimum order cost (charged on request) AgencyPadConfig.AIPickupCostPerKm = 100 -- Live billing per started kilometer during trip ------------------------------------------------------------------------------- -- eSIM CARRIER PLANS -- Players must choose a carrier to download apps, make calls, and send messages. -- Each carrier has different speeds (affects app downloads, Buzz latency, mail sending, and social posting delays), call/message limits. -- speed: 1-5 (1=slowest, 5=fastest) - used as the full simulated network profile for the phone, no antenna / zone system required -- calls: 'unlimited' or number (max calls per restart) -- messages: 'unlimited' or number (max messages per restart) -- price: monthly cost deducted from bank (for RP display only) ------------------------------------------------------------------------------- AgencyPadConfig.CarrierPlans = { { id = 'fleeca_mobile', name = 'Fleeca Mobile', icon = 'fa-solid fa-signal', color = '#34c759', speed = 2, calls = 50, messages = 100, price = 30, }, { id = 'maze_telecom', name = 'Maze Telecom', icon = 'fa-solid fa-tower-cell', color = '#007aff', speed = 3, calls = 'unlimited', messages = 200, price = 50, }, { id = 'lifeinvader_net', name = 'LifeInvader Net', icon = 'fa-solid fa-wifi', color = '#5856d6', speed = 4, calls = 'unlimited', messages = 'unlimited', price = 80, }, { id = 'lossantos_5g', name = 'LS 5G Ultra', icon = 'fa-solid fa-bolt', color = '#ff9500', speed = 5, calls = 'unlimited', messages = 'unlimited', price = 120, }, } -- Dedicated Agency Pad games platform loaded as an exclusive fullscreen app. AgencyPadConfig.GamesHubUrl = 'https://games.agencyg.de' ------------------------------------------------------------------------------- -- DISCORD WEBHOOKS (Logging) ------------------------------------------------------------------------------- -- Discord webhooks for logging phone activity to your Discord server. -- Create a webhook for each log type you want to track: -- Discord Server → Channel Settings → Integrations → Webhooks → New Webhook -- Leave empty ('') to disable that specific log. -- Each webhook will receive embedded messages with player info and action details. AgencyPadConfig.Webhooks = { -- Phone activity logs Calls = '', -- Logs all phone calls (caller, receiver, duration) Messages = '', -- Logs sent messages (sender, receiver, content) Transfers = '', -- Logs bank transfers (sender, receiver, amount) Reports = '', -- Logs player reports (reporter, reason, details) -- Social activity logs Mail = '', -- Logs sent mail (sender, receiver, subject) -- App activity logs AppInstalls = '', -- Logs app installs/uninstalls (player, app name) Screenshots = '', -- Logs camera screenshots (player, image URL) — uses ScreenshotWebhook above if this is empty Gambling = '', -- Logs game results (player, game, bet, win/loss, amount) -- Vehicle / Garage logs Garage = '', -- Logs vehicle spawns (player, model, plate, cost) -- Agency Drop logs AirDrop = '', -- Logs Agency Drop shares (sender, receiver, item/contact) } ------------------------------------------------------------------------------- -- AGENCY EATS (Delivery App) -- Restaurant pickup locations for the delivery job. -- Players must drive to these coords to pick up orders. ------------------------------------------------------------------------------- AgencyPadConfig.EatsRestaurants = { { name = 'Burger Shot', x = -1196.42, y = -891.35, z = 14.0 }, { name = "Cluckin' Bell", x = -72.68, y = 6253.11, z = 31.09 }, { name = 'Pizza This', x = 540.66, y = 101.25, z = 96.44 }, { name = 'Bean Machine', x = -628.16, y = 236.60, z = 81.97 }, { name = 'Up-n-Atom', x = 89.95, y = 289.42, z = 110.21 }, { name = 'Taco Bomb', x = 12.04, y = -1605.57, z = 29.37 }, } -- Delivery pay: distance-based ($ per kilometer driven) AgencyPadConfig.EatsPayPerKm = 20 -- Minimum / maximum delivery pay (caps) AgencyPadConfig.EatsPayMin = 15 AgencyPadConfig.EatsPayMax = 200 -- Pickup radius: how close the player must be to mark order as picked up (meters) AgencyPadConfig.EatsPickupRadius = 15.0 ------------------------------------------------------------------------------- -- JOB-SPECIFIC APPS -- Configure which framework job names correspond to each job app. -- Players with these jobs can see and download the respective apps. -- Add or remove job names as needed for your server. ------------------------------------------------------------------------------- -- MDT Discord links (leave empty to hide the button) AgencyPadConfig.PoliceMDTDiscord = 'https://discord.gg/RTax3aBMUs' AgencyPadConfig.EMSMDTDiscord = 'https://discord.gg/RTax3aBMUs' -- Department Organization Management -- Each department has its own email, bank account, ranks with salaries AgencyPadConfig.DepartmentOrgs = { police = { label = 'Police Department', email = '[email protected]', bankUnlimited = true, bankStartBalance = 0, ranks = { { grade = 0, label = 'Cadet', salary = 1500 }, { grade = 1, label = 'Officer', salary = 2500 }, { grade = 2, label = 'Sergeant', salary = 3500 }, { grade = 3, label = 'Lieutenant', salary = 4500 }, { grade = 4, label = 'Captain', salary = 5500 }, { grade = 5, label = 'Chief', salary = 7000, isBoss = true }, }, }, ems = { label = 'Emergency Medical Services', email = '[email protected]', bankUnlimited = true, bankStartBalance = 0, ranks = { { grade = 0, label = 'Trainee', salary = 1200 }, { grade = 1, label = 'Paramedic', salary = 2200 }, { grade = 2, label = 'Doctor', salary = 3200 }, { grade = 3, label = 'Supervisor', salary = 4200 }, { grade = 4, label = 'Chief Doctor', salary = 5500, isBoss = true }, }, }, mechanic = { label = 'Mechanic Shop', email = '[email protected]', bankUnlimited = false, bankStartBalance = 50000, ranks = { { grade = 0, label = 'Apprentice', salary = 1000 }, { grade = 1, label = 'Mechanic', salary = 2000 }, { grade = 2, label = 'Senior', salary = 3000 }, { grade = 3, label = 'Manager', salary = 4000, isBoss = true }, }, }, } AgencyPadConfig.JobApps = { police = { appId = 'police_mdt', jobNames = {'police', 'pd', 'lspd', 'bcso', 'sheriff'}, }, ems = { appId = 'ems_mdt', jobNames = {'ambulance', 'ems', 'doctor', 'medic', 'fire'}, }, mechanic = { appId = 'mechanic_mdt', jobNames = {'mechanic', 'adac', 'bennys', 'lscustoms', 'tuner'}, }, } ------------------------------------------------------------------------------- -- JOBS APP LISTINGS -- Used by the "Jobs" app (employment). -- You can fully edit/remove/add entries here. -- Fields: -- id, title, company, location, salary, type, description, color, x, y, phone ------------------------------------------------------------------------------- -- Employment listings are now dynamically populated from the Business App. -- Players can post job listings through their businesses. -- You can still add static listings below if needed (they will appear alongside business listings). AgencyPadConfig.EmploymentListings = { -- Static listings (optional, add your own here) -- Business-created listings are loaded dynamically from the database } ------------------------------------------------------------------------------- -- BUSINESS MANAGEMENT APP -- Allows players to create and manage their own companies. -- Backend options: -- 'default' : Built-in Agency business system (standalone, DB-based) -- 'qb-management' : Integrates with qb-management -- 'ren-businesses' : Integrates with ren-businesses -- 'qb-businesses' : Integrates with qb-businesses (Renewed) ------------------------------------------------------------------------------- AgencyPadConfig.EnableBusinessApp = true AgencyPadConfig.EnableGangsApp = true AgencyPadConfig.BusinessBackend = 'default' -- 'default' | 'qb-management' | 'ren-businesses' | 'qb-businesses' AgencyPadConfig.BusinessCreationCost = 50000 -- Cost ($) to register a new business AgencyPadConfig.BusinessMaxPerPlayer = 3 -- Max businesses a player can own AgencyPadConfig.BusinessMaxEmployees = 20 -- Max employees per business AgencyPadConfig.BusinessCategories = { { id = 'retail', label = 'Retail Store', icon = 'fa-store', color = '#ff9500' }, { id = 'food', label = 'Food & Drink', icon = 'fa-utensils', color = '#ff3b30' }, { id = 'services', label = 'Services', icon = 'fa-briefcase', color = '#007aff' }, { id = 'automotive', label = 'Automotive', icon = 'fa-car', color = '#5856d6' }, { id = 'nightlife', label = 'Nightlife', icon = 'fa-champagne-glasses', color = '#af52de' }, { id = 'realestate', label = 'Real Estate', icon = 'fa-building', color = '#30d158' }, { id = 'tech', label = 'Technology', icon = 'fa-microchip', color = '#5ac8fa' }, { id = 'other', label = 'Other', icon = 'fa-ellipsis', color = '#8e8e93' }, } -- Family/Gang settings AgencyPadConfig.FamilyCreationCost = 25000 -- Cost ($) to create a family AgencyPadConfig.GangCreationCost = 35000 -- Cost ($) to create a gang AgencyPadConfig.FamilyMaxPerPlayer = 1 -- Max families a player can lead AgencyPadConfig.GangMaxPerPlayer = 1 -- Max gangs a player can lead AgencyPadConfig.FamilyMaxMembers = 30 -- Max members per family (base, level 1) AgencyPadConfig.GangMaxMembers = 25 -- Max members per gang (base, level 1) -- ═══════════════════════════════════════════════════════════════ -- LEVEL SYSTEM (Businesses, Gangs, Families) -- Every organization starts at level 1. Leaders can pay a one-time -- upgrade fee (deducted from the organization bank) to advance to -- the next level, which unlocks more member slots and perks. -- ═══════════════════════════════════════════════════════════════ AgencyPadConfig.EnableLevelSystem = true -- Business level tiers AgencyPadConfig.BusinessLevels = { { level = 1, label = 'Startup', upgradeCost = 0, maxMembers = 20, perks = { 'Basic business features' } }, { level = 2, label = 'Growing', upgradeCost = 100000, maxMembers = 30, perks = { '+10 employee slots', 'Extended product catalog' } }, { level = 3, label = 'Established', upgradeCost = 250000, maxMembers = 45, perks = { '+15 employee slots', 'Advanced analytics', 'Featured in Yellow Pages' } }, { level = 4, label = 'Corporate', upgradeCost = 500000, maxMembers = 65, perks = { '+20 employee slots', 'Multi-location POS', 'Priority support' } }, { level = 5, label = 'Empire', upgradeCost = 1000000, maxMembers = 100, perks = { '+35 employee slots', 'Custom branding', 'VIP listings', 'Max prestige' } }, } -- Gang level tiers AgencyPadConfig.GangLevels = { { level = 1, label = 'Street Crew', upgradeCost = 0, maxMembers = 25, perks = { 'Basic gang features' } }, { level = 2, label = 'Rising Crew', upgradeCost = 75000, maxMembers = 35, perks = { '+10 member slots', '+1 active mission slot' } }, { level = 3, label = 'Syndicate', upgradeCost = 200000, maxMembers = 50, perks = { '+15 member slots', 'Higher mission rewards (+10%)' } }, { level = 4, label = 'Cartel', upgradeCost = 450000, maxMembers = 70, perks = { '+20 member slots', 'Priority darknet listings', '+25% mission rewards' } }, { level = 5, label = 'Kingpin', upgradeCost = 900000, maxMembers = 100, perks = { '+30 member slots', 'All missions unlocked', '+50% mission rewards' } }, } -- Family level tiers AgencyPadConfig.FamilyLevels = { { level = 1, label = 'Associates', upgradeCost = 0, maxMembers = 30, perks = { 'Basic family features' } }, { level = 2, label = 'Crew', upgradeCost = 80000, maxMembers = 40, perks = { '+10 member slots', '+1 active mission slot' } }, { level = 3, label = 'Regime', upgradeCost = 220000, maxMembers = 55, perks = { '+15 member slots', 'Advanced ranks unlocked' } }, { level = 4, label = 'Dynasty', upgradeCost = 475000, maxMembers = 75, perks = { '+20 member slots', 'Priority darknet listings' } }, { level = 5, label = 'Cosa Nostra', upgradeCost = 950000, maxMembers = 110, perks = { '+35 member slots', 'Elite mission pool', '+50% mission rewards' } }, } -- Mission reward multipliers per level (used by server when computing rewards) AgencyPadConfig.LevelMissionRewardMultipliers = { 1.0, 1.0, 1.1, 1.25, 1.5 } -- ═══════════════════════════════════════════════════════════════ -- HOURLY PAYROLL -- Salaries are defined PER HOUR (not per day). Employees with a -- salary are auto-paid every hour of in-game time. Payroll is -- deducted from the org bank balance; if the balance is too low -- the payout is skipped until funds are available. -- ═══════════════════════════════════════════════════════════════ AgencyPadConfig.EnableHourlyPayroll = true AgencyPadConfig.PayrollIntervalSeconds = 3600 -- Pay every 3600s (1 hour) -- Admin: ACE permission required to use admin functions (create for others, manage all orgs) AgencyPadConfig.BusinessAdminAce = 'command' -- Players with this ACE can use admin panel -- ═══════════════════════════════════════════════════════════════ -- RANKS & PERMISSIONS SYSTEM -- Each business/gang/family has configurable ranks with individual permissions -- Owners automatically get all permissions -- Players can create custom ranks in the Business App -- ═══════════════════════════════════════════════════════════════ -- All available permissions (used by the UI to show checkboxes) -- Permission keys are also checked server-side for every action AgencyPadConfig.AvailablePermissions = { -- Member management { id = 'hire_members', label = 'Hire Members', category = 'members', icon = 'fa-user-plus' }, { id = 'fire_members', label = 'Fire Members', category = 'members', icon = 'fa-user-minus' }, { id = 'promote_members', label = 'Promote Members', category = 'members', icon = 'fa-angles-up' }, { id = 'edit_ranks', label = 'Manage Ranks', category = 'members', icon = 'fa-user-gear' }, -- Finances { id = 'view_balance', label = 'View Balance', category = 'finances', icon = 'fa-eye' }, { id = 'deposit_money', label = 'Deposit Money', category = 'finances', icon = 'fa-arrow-down' }, { id = 'withdraw_money', label = 'Withdraw Money', category = 'finances', icon = 'fa-arrow-up' }, { id = 'view_history', label = 'View Transaction History', category = 'finances', icon = 'fa-clock-rotate-left' }, -- Products & POS (business only) { id = 'manage_products', label = 'Manage Products', category = 'business', icon = 'fa-box' }, { id = 'use_pos', label = 'Use Cash Register', category = 'business', icon = 'fa-cash-register' }, { id = 'create_invoices', label = 'Create Invoices', category = 'business', icon = 'fa-file-invoice-dollar' }, -- Settings { id = 'edit_settings', label = 'Edit Settings', category = 'settings', icon = 'fa-gear' }, { id = 'edit_logo', label = 'Change Logo', category = 'settings', icon = 'fa-image' }, { id = 'delete_org', label = 'Delete Organization', category = 'settings', icon = 'fa-trash' }, -- Job listings { id = 'manage_listings', label = 'Manage Job Listings', category = 'jobs', icon = 'fa-bullhorn' }, { id = 'review_applications', label = 'Review Applications', category = 'jobs', icon = 'fa-file-circle-check' }, -- Gang/Family specific { id = 'start_missions', label = 'Start Missions', category = 'gang', icon = 'fa-crosshairs' }, { id = 'complete_missions', label = 'Complete Missions', category = 'gang', icon = 'fa-circle-check' }, { id = 'darknet_services', label = 'Manage Darknet Services', category = 'gang', icon = 'fa-user-secret' }, -- Services (business) { id = 'manage_services', label = 'Manage Services', category = 'business', icon = 'fa-briefcase' }, } -- ═══════════════════════════════════════════════════════════════ -- Default Rank Templates (applied when a new org is created) -- Each org gets these starter ranks; owners can add/edit/remove ranks -- The first rank is the "entry" rank for new members (grade 0) -- The last rank (with isLeader=true) gets ALL permissions -- ═══════════════════════════════════════════════════════════════ AgencyPadConfig.DefaultBusinessRanks = { { id = 'trainee', label = 'Trainee', grade = 0, isLeader = false, color = '#8e8e93', salary = 0, permissions = { 'view_balance', 'use_pos' } }, { id = 'employee', label = 'Employee', grade = 1, isLeader = false, color = '#64d2ff', salary = 0, permissions = { 'view_balance', 'use_pos', 'create_invoices' } }, { id = 'senior', label = 'Senior', grade = 2, isLeader = false, color = '#30d158', salary = 0, permissions = { 'view_balance', 'use_pos', 'create_invoices', 'manage_products', 'view_history' } }, { id = 'manager', label = 'Manager', grade = 3, isLeader = false, color = '#af52de', salary = 0, permissions = { 'hire_members', 'promote_members', 'view_balance', 'deposit_money', 'withdraw_money', 'view_history', 'manage_products', 'use_pos', 'create_invoices', 'manage_listings', 'review_applications', 'manage_services' } }, { id = 'owner', label = 'Owner', grade = 4, isLeader = true, color = '#ffd60a', salary = 0, permissions = { '*' } }, -- '*' = all permissions } AgencyPadConfig.DefaultGangRanks = { { id = 'hang_around', label = 'Hang Around', grade = 0, isLeader = false, color = '#8e8e93', salary = 0, permissions = { 'view_balance' } }, { id = 'prospect', label = 'Prospect', grade = 1, isLeader = false, color = '#ff9500', salary = 0, permissions = { 'view_balance', 'start_missions' } }, { id = 'member', label = 'Member', grade = 2, isLeader = false, color = '#ff453a', salary = 0, permissions = { 'view_balance', 'start_missions', 'complete_missions' } }, { id = 'enforcer', label = 'Enforcer', grade = 3, isLeader = false, color = '#bf5af2', salary = 0, permissions = { 'view_balance', 'start_missions', 'complete_missions', 'darknet_services', 'hire_members' } }, { id = 'underboss', label = 'Underboss', grade = 4, isLeader = false, color = '#64d2ff', salary = 0, permissions = { 'hire_members', 'fire_members', 'promote_members', 'view_balance', 'deposit_money', 'withdraw_money', 'view_history', 'start_missions', 'complete_missions', 'darknet_services', 'manage_listings' } }, { id = 'boss', label = 'Boss', grade = 5, isLeader = true, color = '#ffd60a', salary = 0, permissions = { '*' } }, } AgencyPadConfig.DefaultFamilyRanks = { { id = 'associate', label = 'Associate', grade = 0, isLeader = false, color = '#8e8e93', salary = 0, permissions = { 'view_balance' } }, { id = 'soldier', label = 'Soldier', grade = 1, isLeader = false, color = '#ff9500', salary = 0, permissions = { 'view_balance', 'start_missions' } }, { id = 'caporegime', label = 'Caporegime', grade = 2, isLeader = false, color = '#ff453a', salary = 0, permissions = { 'view_balance', 'start_missions', 'complete_missions', 'darknet_services' } }, { id = 'consigliere', label = 'Consigliere', grade = 3, isLeader = false, color = '#bf5af2', salary = 0, permissions = { 'hire_members', 'promote_members', 'view_balance', 'view_history', 'start_missions', 'complete_missions', 'darknet_services', 'manage_listings' } }, { id = 'underboss', label = 'Underboss', grade = 4, isLeader = false, color = '#64d2ff', salary = 0, permissions = { 'hire_members', 'fire_members', 'promote_members', 'view_balance', 'deposit_money', 'withdraw_money', 'view_history', 'start_missions', 'complete_missions', 'darknet_services', 'manage_listings', 'review_applications' } }, { id = 'don', label = 'Don', grade = 5, isLeader = true, color = '#ffd60a', salary = 0, permissions = { '*' } }, } -- Gang Missions: tasks that gang members can start and complete for rewards -- Set to false to disable the missions system entirely AgencyPadConfig.EnableGangMissions = true AgencyPadConfig.GangMaxActiveMissions = 2 -- Max concurrent missions per gang AgencyPadConfig.GangMissionsPerDay = 3 -- How many missions are offered per day (from the pool) -- Daily mission reset hour (0–23, server local time). Missions rotate every day -- at this hour. Default: 6 (6 AM). Same rotation applies to gangs AND families. AgencyPadConfig.GangMissionResetHour = 6 -- ═══════════════════════════════════════════════════════════════ -- GANG MISSIONS (20 unique missions for Gangs) -- Each mission has objectives, reward, difficulty, and timing -- Players get 3 random missions per day from this pool -- ═══════════════════════════════════════════════════════════════ AgencyPadConfig.GangMissions = { { id = 'supply_run', label = 'Supply Run', description = 'Hit a weapons dealer\'s warehouse and steal crates of merchandise.', icon = 'fa-truck-fast', color = '#ff9500', difficulty = 'easy', reward = 8000, xp = 50, cooldown = 1800, duration = 900, objectives = { 'Locate warehouse', 'Steal 5 crates', 'Deliver to stash' }, minMembers = 2, }, { id = 'territory_takeover', label = 'Territory Takeover', description = 'Push out a rival crew from their block and claim it for your gang.', icon = 'fa-map-location-dot', color = '#ff453a', difficulty = 'medium', reward = 15000, xp = 100, cooldown = 5400, duration = 1500, objectives = { 'Eliminate 10 rivals', 'Hold zone for 10 minutes', 'Tag 3 walls' }, minMembers = 3, }, { id = 'heist_prep', label = 'Heist Preparation', description = 'Gather intel, weapons and a getaway vehicle for a major operation.', icon = 'fa-binoculars', color = '#af52de', difficulty = 'medium', reward = 18000, xp = 120, cooldown = 7200, duration = 1800, objectives = { 'Photograph security (3 locations)', 'Acquire weapons cache', 'Steal getaway vehicle' }, minMembers = 2, }, { id = 'street_race', label = 'Street Race', description = 'Organize a high-stakes underground street race and place first.', icon = 'fa-flag-checkered', color = '#5ac8fa', difficulty = 'easy', reward = 6500, xp = 40, cooldown = 1200, duration = 720, objectives = { 'Recruit 3 racers', 'Complete circuit', 'Finish 1st place' }, minMembers = 1, }, { id = 'protection_racket', label = 'Protection Racket', description = 'Collect "protection fees" from 5 local businesses.', icon = 'fa-hand-holding-dollar', color = '#30d158', difficulty = 'easy', reward = 10000, xp = 60, cooldown = 3600, duration = 1200, objectives = { 'Visit 5 businesses', 'Intimidate owners', 'Collect $10.000' }, minMembers = 2, }, { id = 'smuggling_run', label = 'Smuggling Run', description = 'Smuggle contraband across the city without being caught by police.', icon = 'fa-box', color = '#ff375f', difficulty = 'medium', reward = 14000, xp = 90, cooldown = 5400, duration = 1500, objectives = { 'Pick up package', 'Avoid police (max 1 star)', 'Deliver to buyer' }, minMembers = 2, }, { id = 'chop_shop', label = 'Chop Shop Delivery', description = 'Steal 3 high-end vehicles and deliver them to the chop shop.', icon = 'fa-car-burst', color = '#ff6b35', difficulty = 'medium', reward = 22000, xp = 140, cooldown = 7200, duration = 2100, objectives = { 'Steal 3 luxury cars', 'Strip vehicles', 'Deliver parts' }, minMembers = 3, }, { id = 'drug_distribution', label = 'Drug Distribution', description = 'Distribute product to 8 street dealers across the city.', icon = 'fa-prescription-bottle', color = '#bf5af2', difficulty = 'hard', reward = 28000, xp = 180, cooldown = 9000, duration = 2700, objectives = { 'Pick up product (3 locations)', 'Deliver to 8 dealers', 'Return profits to stash' }, minMembers = 3, }, { id = 'arms_deal', label = 'Arms Deal', description = 'Broker a weapons deal with an out-of-town buyer.', icon = 'fa-gun', color = '#ff9f0a', difficulty = 'hard', reward = 35000, xp = 220, cooldown = 10800, duration = 3000, objectives = { 'Meet contact', 'Show merchandise', 'Complete transaction', 'Escape buyer location' }, minMembers = 3, }, { id = 'jewelry_heist', label = 'Jewelry Heist', description = 'Rob a high-end jewelry store during business hours.', icon = 'fa-gem', color = '#64d2ff', difficulty = 'hard', reward = 42000, xp = 260, cooldown = 14400, duration = 2400, objectives = { 'Enter store', 'Smash display cases', 'Grab 6 items', 'Escape with loot' }, minMembers = 4, }, { id = 'gas_station_robbery', label = 'Gas Station Robbery', description = 'Rob 3 gas stations in a single run.', icon = 'fa-gas-pump', color = '#ff6482', difficulty = 'easy', reward = 7500, xp = 45, cooldown = 2400, duration = 900, objectives = { 'Rob 3 gas stations', 'Evade police', 'Deliver cash' }, minMembers = 1, }, { id = 'bank_robbery', label = 'Bank Robbery', description = 'Full bank robbery — coordination, speed and firepower.', icon = 'fa-building-columns', color = '#ffd60a', difficulty = 'extreme', reward = 85000, xp = 500, cooldown = 21600, duration = 3600, objectives = { 'Breach vault', 'Neutralize security', 'Grab cash bags', 'Escape the city' }, minMembers = 4, }, { id = 'cargo_hijack', label = 'Cargo Hijack', description = 'Hijack an armored cargo truck and strip it of valuables.', icon = 'fa-truck', color = '#ff453a', difficulty = 'hard', reward = 32000, xp = 200, cooldown = 9000, duration = 2400, objectives = { 'Locate cargo truck', 'Disable driver', 'Crack cargo hold', 'Escape with goods' }, minMembers = 3, }, { id = 'diamond_exchange', label = 'Diamond Exchange', description = 'Trade stolen diamonds with a shady fence at multiple drop points.', icon = 'fa-diamond', color = '#5ac8fa', difficulty = 'medium', reward = 24000, xp = 150, cooldown = 7200, duration = 1800, objectives = { 'Meet fence', 'Visit 3 drop points', 'Complete exchange' }, minMembers = 2, }, { id = 'cartel_meeting', label = 'Cartel Meeting', description = 'Attend a dangerous meeting with a Mexican cartel representative.', icon = 'fa-skull', color = '#8e8e93', difficulty = 'extreme', reward = 55000, xp = 350, cooldown = 14400, duration = 3000, objectives = { 'Travel to meeting', 'Negotiate terms', 'Survive potential ambush', 'Return with contract' }, minMembers = 4, }, { id = 'street_fight', label = 'Underground Fight Club', description = 'Win 3 bare-knuckle fights at an underground fighting ring.', icon = 'fa-hand-fist', color = '#ff375f', difficulty = 'medium', reward = 12000, xp = 80, cooldown = 3600, duration = 1500, objectives = { 'Enter fight club', 'Win 3 matches', 'Collect winnings' }, minMembers = 1, }, { id = 'recruit_enforcer', label = 'Recruit Enforcer', description = 'Find and recruit a new enforcer for your gang.', icon = 'fa-user-plus', color = '#30d158', difficulty = 'easy', reward = 5000, xp = 30, cooldown = 1800, duration = 600, objectives = { 'Find candidate', 'Test loyalty', 'Recruit to gang' }, minMembers = 1, }, { id = 'sabotage_rival', label = 'Sabotage Rival', description = 'Sabotage a rival gang\'s operations by destroying their supply.', icon = 'fa-bomb', color = '#ff9500', difficulty = 'hard', reward = 30000, xp = 190, cooldown = 10800, duration = 2400, objectives = { 'Locate rival stash', 'Plant explosives', 'Destroy supply', 'Escape undetected' }, minMembers = 3, }, { id = 'prison_break', label = 'Prison Break', description = 'Break out a captured gang member from Bolingbroke Penitentiary.', icon = 'fa-jail', color = '#af52de', difficulty = 'extreme', reward = 65000, xp = 420, cooldown = 18000, duration = 3600, objectives = { 'Gather breakout gear', 'Infiltrate prison', 'Extract member', 'Escape manhunt' }, minMembers = 5, }, { id = 'assassination', label = 'Assassination Contract', description = 'Eliminate a high-profile target for an anonymous client.', icon = 'fa-crosshairs', color = '#ff3b30', difficulty = 'extreme', reward = 75000, xp = 450, cooldown = 18000, duration = 3000, objectives = { 'Identify target', 'Track movement', 'Eliminate target', 'Clean exit' }, minMembers = 2, }, } -- ═══════════════════════════════════════════════════════════════ -- FAMILY MISSIONS (20 unique missions for Families — more business-focused) -- Families operate more like organized crime, less street-level chaos -- ═══════════════════════════════════════════════════════════════ AgencyPadConfig.FamilyMissions = { { id = 'laundering_operation', label = 'Money Laundering', description = 'Launder $50k of dirty money through legitimate businesses.', icon = 'fa-money-bill-transfer', color = '#30d158', difficulty = 'medium', reward = 20000, xp = 130, cooldown = 5400, duration = 1800, objectives = { 'Deposit at 3 businesses', 'Collect clean money', 'Return to capo' }, minMembers = 2, }, { id = 'bribe_official', label = 'Bribe Official', description = 'Pay off a corrupt city official to look the other way.', icon = 'fa-user-tie', color = '#ffd60a', difficulty = 'easy', reward = 12000, xp = 75, cooldown = 3600, duration = 900, objectives = { 'Meet official', 'Hand over briefcase', 'Secure favor' }, minMembers = 1, }, { id = 'import_export', label = 'Import/Export Scheme', description = 'Coordinate a smuggling operation with shipping containers.', icon = 'fa-ship', color = '#0a84ff', difficulty = 'hard', reward = 38000, xp = 240, cooldown = 10800, duration = 2700, objectives = { 'Meet shipping contact', 'Inspect containers', 'Transport goods', 'Deliver to warehouse' }, minMembers = 3, }, { id = 'insurance_fraud', label = 'Insurance Fraud', description = 'Stage an accident to collect insurance payout.', icon = 'fa-file-contract', color = '#ff9f0a', difficulty = 'easy', reward = 9500, xp = 55, cooldown = 2400, duration = 1200, objectives = { 'Stage scene', 'File claim', 'Collect payout' }, minMembers = 2, }, { id = 'loan_shark_collection', label = 'Loan Shark Collection', description = 'Collect overdue debts from 6 delinquent clients.', icon = 'fa-sack-dollar', color = '#32ade6', difficulty = 'medium', reward = 16000, xp = 100, cooldown = 3600, duration = 1500, objectives = { 'Visit 6 debtors', 'Collect payments', 'Return with cash' }, minMembers = 2, }, { id = 'underground_casino', label = 'Underground Casino', description = 'Run an illegal high-stakes poker night.', icon = 'fa-dice', color = '#af52de', difficulty = 'medium', reward = 22000, xp = 140, cooldown = 5400, duration = 1800, objectives = { 'Set up venue', 'Recruit 6 players', 'Run the house', 'Collect profits' }, minMembers = 2, }, { id = 'forgery_ring', label = 'Forgery Ring', description = 'Produce and sell forged documents to clients.', icon = 'fa-stamp', color = '#64d2ff', difficulty = 'medium', reward = 18000, xp = 110, cooldown = 5400, duration = 1500, objectives = { 'Gather blank docs', 'Forge signatures', 'Sell to 4 buyers' }, minMembers = 2, }, { id = 'construction_extortion', label = 'Construction Extortion', description = 'Force a construction company to pay "safety fees".', icon = 'fa-helmet-safety', color = '#ff9500', difficulty = 'hard', reward = 28000, xp = 170, cooldown = 7200, duration = 2100, objectives = { 'Visit 3 sites', 'Demonstrate power', 'Collect protection fees' }, minMembers = 3, }, { id = 'art_theft', label = 'Art Theft', description = 'Steal a valuable painting from a private gallery.', icon = 'fa-palette', color = '#bf5af2', difficulty = 'hard', reward = 45000, xp = 280, cooldown = 10800, duration = 2400, objectives = { 'Study gallery security', 'Bypass alarms', 'Extract painting', 'Meet buyer' }, minMembers = 3, }, { id = 'yacht_party', label = 'Yacht Party', description = 'Host a high-end yacht party to network with VIP clients.', icon = 'fa-sailboat', color = '#5ac8fa', difficulty = 'easy', reward = 8000, xp = 50, cooldown = 3600, duration = 1500, objectives = { 'Book yacht', 'Invite 8 VIPs', 'Close 3 deals' }, minMembers = 2, }, { id = 'wine_smuggling', label = 'Wine Smuggling', description = 'Smuggle rare vintage wines through customs.', icon = 'fa-wine-bottle', color = '#ff375f', difficulty = 'medium', reward = 19000, xp = 120, cooldown = 5400, duration = 1800, objectives = { 'Meet supplier', 'Bribe customs', 'Deliver to cellars' }, minMembers = 2, }, { id = 'stock_manipulation', label = 'Stock Manipulation', description = 'Pump and dump a small cap stock for massive profits.', icon = 'fa-chart-line', color = '#30d158', difficulty = 'hard', reward = 50000, xp = 320, cooldown = 14400, duration = 3000, objectives = { 'Identify target stock', 'Coordinate buying', 'Pump price', 'Sell peak', 'Cover tracks' }, minMembers = 3, }, { id = 'political_blackmail', label = 'Political Blackmail', description = 'Gather compromising material on a politician.', icon = 'fa-envelope', color = '#ff9500', difficulty = 'extreme', reward = 70000, xp = 430, cooldown = 18000, duration = 3600, objectives = { 'Stake out target', 'Photograph meetings', 'Confront politician', 'Extract payment' }, minMembers = 3, }, { id = 'luxury_car_ring', label = 'Luxury Car Ring', description = 'Export stolen luxury cars through container shipping.', icon = 'fa-car-side', color = '#ff453a', difficulty = 'hard', reward = 48000, xp = 300, cooldown = 10800, duration = 2700, objectives = { 'Steal 4 luxury cars', 'Ship to container', 'Bribe dock workers', 'Confirm delivery' }, minMembers = 4, }, { id = 'diplomatic_favor', label = 'Diplomatic Favor', description = 'Complete a discreet task for a foreign diplomat.', icon = 'fa-briefcase', color = '#8e8e93', difficulty = 'medium', reward = 25000, xp = 160, cooldown = 7200, duration = 1800, objectives = { 'Meet diplomat', 'Retrieve package', 'Hand to contact' }, minMembers = 2, }, { id = 'casino_robbery', label = 'Casino Vault Heist', description = 'Hit the Diamond Casino vault during off-hours.', icon = 'fa-vault', color = '#ffd60a', difficulty = 'extreme', reward = 95000, xp = 600, cooldown = 21600, duration = 3600, objectives = { 'Infiltrate casino', 'Crack vault', 'Grab cash', 'Escape casino', 'Reach safehouse' }, minMembers = 5, }, { id = 'tax_fraud', label = 'Tax Fraud Scheme', description = 'File fraudulent tax returns through shell companies.', icon = 'fa-file-invoice-dollar', color = '#5ac8fa', difficulty = 'medium', reward = 26000, xp = 165, cooldown = 7200, duration = 2100, objectives = { 'Set up shell co.', 'Forge documents', 'File returns', 'Collect refunds' }, minMembers = 2, }, { id = 'witness_intimidation', label = 'Witness Intimidation', description = 'Silence a witness before they can testify.', icon = 'fa-user-secret', color = '#ff3b30', difficulty = 'hard', reward = 40000, xp = 250, cooldown = 10800, duration = 2400, objectives = { 'Locate witness', 'Send warning', 'Ensure silence' }, minMembers = 2, }, { id = 'black_market_auction', label = 'Black Market Auction', description = 'Host an invitation-only auction for stolen goods.', icon = 'fa-gavel', color = '#bf5af2', difficulty = 'hard', reward = 52000, xp = 340, cooldown = 14400, duration = 3000, objectives = { 'Secure venue', 'Invite 6 buyers', 'Run 5 auction lots', 'Collect payments' }, minMembers = 3, }, { id = 'federal_payoff', label = 'Federal Payoff', description = 'Pay off a federal agent to drop an investigation.', icon = 'fa-shield-halved', color = '#0a84ff', difficulty = 'extreme', reward = 80000, xp = 500, cooldown = 21600, duration = 3000, objectives = { 'Meet agent', 'Hand over cash', 'Confirm file destroyed', 'Disappear' }, minMembers = 3, }, } ------------------------------------------------------------------------------- -- APP STORE ------------------------------------------------------------------------------- AgencyPadConfig.AppStoreEnabled = true -- Enable the app store AgencyPadConfig.AppStorePersist = true -- Persist installs in localStorage ------------------------------------------------------------------------------- -- APPLICATIONS -- -- installed : true = pre-installed on home screen, false = available in Store -- enabled : true = visible (either on home or in store), false = hidden -- -- Users can add custom apps by creating files in the apps/ folder. -- See apps/README.md for documentation. ------------------------------------------------------------------------------- AgencyPadConfig.Apps = { -- ═══════════════════════════════════════════════════════════ -- PRE-INSTALLED APPS (on home screen by default) -- ═══════════════════════════════════════════════════════════ { id = "dialer", label = "Phone", icon = "fa-solid fa-phone", color = "#4cd964", colorDark = "#34c759", slot = 1, installed = true, enabled = true, }, { id = "smarthome", label = "Home", icon = "fa-solid fa-house-chimney-window", color = "#0a84ff", colorDark = "#0056cc", slot = 31, category = "utilities", installed = true, enabled = true, }, { id = "buzz", label = "Buzz", icon = "fa-solid fa-comment", color = "#34c759", colorDark = "#28a745", slot = 2, installed = true, enabled = true, }, { id = "contacts", label = "Contacts", icon = "fa-solid fa-user-group", color = "#ff9500", colorDark = "#e08600", slot = 3, installed = true, enabled = true, }, { id = "snap", label = "Camera", icon = "fa-solid fa-camera", color = "#8e8e93", colorDark = "#636366", slot = 4, installed = true, enabled = true, }, { id = "postbox", label = "Mail", icon = "fa-solid fa-envelope", color = "#5ac8fa", colorDark = "#32ade6", slot = 6, installed = true, enabled = true, }, { id = "wallet", label = "Wallet", icon = "fa-solid fa-wallet", color = "#007aff", colorDark = "#0056cc", slot = 7, installed = true, enabled = true, }, { id = "gallery", label = "Photos", icon = "fa-solid fa-images", color = "#ff2d55", colorDark = "#d6204a", slot = 8, installed = true, enabled = true, }, { id = "report", label = "Agency Reports", icon = "fa-solid fa-flag", color = "#ff3b30", colorDark = "#d63025", slot = 9, installed = true, enabled = true, }, { id = "settings", label = "Settings", icon = "fa-solid fa-gear", color = "#8e8e93", colorDark = "#636366", slot = 10, installed = true, enabled = true, }, { id = "agencyai", label = "AgencyAI", icon = "fa-solid fa-wand-magic-sparkles", color = "#af52de", colorDark = "#5856d6", slot = 11, installed = true, enabled = true, }, { id = "appstore", label = "Store", icon = "fa-solid fa-bag-shopping", color = "#007aff", colorDark = "#0056cc", slot = 12, installed = true, enabled = true, }, { id = "agencycloud", label = "AgencyCloud", icon = "fa-solid fa-cloud", color = "#4cc6ff", colorDark = "#0a84ff", category = "productivity", slot = 13, installed = true, enabled = true, storeDesc = "Your personal and company cloud storage. Sync files, photos, and documents across all your Agency devices.", features = {"Personal & company storage", "Cross-device sync", "Photo gallery backup", "Document management", "Storage tier upgrades"}, }, -- ═══════════════════════════════════════════════════════════ -- STORE APPS (must be installed via the Store app first) -- ═══════════════════════════════════════════════════════════ { id = "calculator", label = "Calculator", icon = "fa-solid fa-calculator", color = "#ff9500", colorDark = "#e08600", category = "productivity", slot = 13, installed = true, enabled = true, storeDesc = "A powerful calculator app for quick calculations on the go.", features = {"Basic arithmetic operations", "Percentage calculations", "AgencyOS26.5-style interface", "Instant results"}, }, { id = "clock", label = "Clock", icon = "fa-solid fa-clock", color = "#000000", colorDark = "#1c1c1e", category = "productivity", slot = 14, installed = true, enabled = true, storeDesc = "Keep track of time with world clocks, alarms, stopwatch, and timers.", features = {"World clock display", "Stopwatch with precision timing", "Multiple alarms", "Timer functionality"}, }, { id = "notes", label = "Notes", icon = "fa-solid fa-note-sticky", color = "#ffcc00", colorDark = "#e6b800", category = "productivity", slot = 15, installed = true, enabled = true, storeDesc = "Jot down ideas, tasks, and reminders instantly.", features = {"Quick note creation", "Persistent storage", "Easy organization", "Simple interface"}, }, { id = "weather", label = "Weather", icon = "fa-solid fa-cloud-sun", color = "#5ac8fa", colorDark = "#32ade6", category = "productivity", slot = 16, installed = true, enabled = true, storeDesc = "Stay informed about current weather conditions in Los Santos.", features = {"Real-time weather display", "Temperature info", "Current conditions", "Location-based data"}, }, { id = "compass", label = "Compass", icon = "fa-solid fa-compass", color = "#ff3b30", colorDark = "#d63025", category = "navigation", slot = 17, installed = true, enabled = false, storeDesc = "Navigate the city with an accurate digital compass.", features = {"Real-time heading direction", "Accurate navigation", "Always accessible", "Minimal interface"}, }, { id = "radio", label = "Radio", icon = "fa-solid fa-radio", color = "#ff6b6b", colorDark = "#d94848", category = "utilities", slot = 18, installed = false, enabled = false, -- Agency-Phone exclusive storeDesc = "Connect to various radio channels and communicate on the go.", features = {"Multiple frequency channels", "Quick channel switching", "Clear audio", "Emergency frequencies"}, }, -- Flashlight removed: now available in Quick Settings (swipe down top-right) { id = "gameshub", label = "GamesHub", category = "games", icon = "fa-solid fa-gamepad", color = "#7c5cff", colorDark = "#4f46e5", slot = 19, installed = true, enabled = true, storeDesc = "Agency Pad exclusive game platform with direct fullscreen access to the Agency arcade catalog.", features = {"Agency Pad exclusive", "Direct platform access", "Fullscreen launcher feel", "Built for the tablet display"}, }, { id = "speedometer", label = "Speedo", icon = "fa-solid fa-gauge-high", color = "#ff2d55", colorDark = "#d6204a", category = "navigation", slot = 20, installed = false, enabled = false, storeDesc = "Monitor your vehicle's speed with a digital speedometer.", features = {"Real-time speed display", "Multiple unit options", "GPS speed tracking", "Always visible"}, }, { id = "gps", label = "Maps", icon = "fa-solid fa-map-location-dot", color = "#34c759", colorDark = "#28a745", category = "navigation", slot = 21, installed = false, enabled = true, storeDesc = "Navigate Los Santos with GPS waypoints and route planning.", features = {"Set custom waypoints", "Route guidance", "Real-time navigation", "Location sharing"}, }, { id = "crypto", label = "Crypto", icon = "fa-brands fa-bitcoin", color = "#f7931a", colorDark = "#d97c0e", slot = 22, installed = false, enabled = true, storeDesc = "Buy, sell, and track cryptocurrency markets in real-time.", features = {"Live market prices", "Portfolio tracking", "Trading functionality", "Transaction history"}, }, { id = "stocks", label = "Stocks", icon = "fa-solid fa-chart-line", color = "#007aff", colorDark = "#0056cc", slot = 33, installed = false, enabled = true, storeDesc = "Trade stocks of Los Santos companies and build your portfolio.", features = {"8 Los Santos companies", "Real-time price updates", "Buy/sell shares", "Portfolio tracking"}, category = "finance", }, { id = "agency_tycoon", label = "Agency Tycoon", category = "games", icon = "fa-solid fa-building", color = "#1fb6ff", colorDark = "#0f7ac7", slot = 23, installed = false, enabled = true, storeDesc = "Pad-exclusive executive tycoon with contract chains, summit boosts, eight divisions and milestone rewards.", features = {"Agency Pad exclusive", "Eight expandable divisions", "Summits, campaigns and contract chains", "Offline revenue and milestone payouts"}, }, { id = "dice", label = "Dice Game", category = "games", icon = "fa-solid fa-dice", color = "#ff2d55", colorDark = "#d6204a", slot = 55, installed = false, enabled = false, storeDesc = "Roll dice against other players. Classic gambling game.", features = {"1v1 dice duels", "Customizable bet amounts", "Roll history", "Fair random rolls"}, }, { id = "darkweb", label = "Darknet", icon = "fa-solid fa-skull-crossbones", color = "#48484a", colorDark = "#1c1c1e", category = "darknet", slot = 24, installed = false, enabled = true, storeDesc = "Access the underground market. Anonymous and untraceable.", features = {"Anonymous browsing", "Encrypted transactions", "Black market access", "High-risk items"}, }, { id = "racing", label = "Races", icon = "fa-solid fa-flag-checkered", color = "#ff9500", colorDark = "#e08600", category = "services", slot = 25, installed = false, enabled = true, storeDesc = "Compete in street races and track your best times.", features = {"Create custom races", "Join active races", "Leaderboards", "Race statistics"}, }, -- Music app is defined in the MEDIA APPS section below { id = "services", label = "Services", icon = "fa-solid fa-book-open", color = "#ffd60a", colorDark = "#d4a800", category = "utilities", slot = 27, installed = false, enabled = true, storeDesc = "Request taxis, mechanics, and various city services.", features = {"Taxi services", "Mechanic calls", "Emergency services", "Quick booking"}, }, { id = "aipickup", label = "AutoRide", icon = "fa-solid fa-car-side", color = "#00c7be", colorDark = "#0a84ff", category = "services", slot = 26, installed = true, enabled = true, storeDesc = "AgencyAI-powered limousine pickup and autonomous dropoff service.", features = {"Driverless AgencyAI 4-seat limousine", "Pickup at your location", "Set waypoint before or during ride", "Autonomous routing to destination"}, }, { id = "food", label = "AgencyEats", icon = "fa-solid fa-burger", color = "#ff3b30", colorDark = "#d62020", category = "services", slot = 28, installed = false, enabled = false, -- Agency-Phone exclusive storeDesc = "Order food from local restaurants and get it delivered to your location.", features = {"Browse menus", "Place orders", "Track delivery", "Restaurant ratings"}, }, { id = "invoices", label = "Invoices", category = "finance", icon = "fa-solid fa-file-invoice-dollar", color = "#30d158", colorDark = "#28b54c", slot = 29, installed = false, enabled = true, storeDesc = "Manage and pay your invoices and outstanding bills.", features = {"View pending bills", "Pay invoices", "Transaction history", "Payment reminders"}, }, { id = "employment", label = "Jobs", category = "utilities", icon = "fa-solid fa-briefcase", color = "#007aff", colorDark = "#0056cc", slot = 30, installed = false, enabled = true, storeDesc = "Find employment opportunities and manage your career.", features = {"Job listings", "Application tracking", "Career information", "Salary details"}, }, { id = "garage", label = "Garage", category = "utilities", icon = "fa-solid fa-warehouse", color = "#5856d6", colorDark = "#4240b0", slot = 32, installed = true, enabled = true, storeDesc = "Access and manage your stored vehicles and garage.", features = {"Vehicle storage", "Quick spawn", "Vehicle information", "Garage locations"}, }, { id = "tictactoe", label = "Tic Tac Toe", category = "games", icon = "fa-solid fa-table-cells", color = "#7c5cff", colorDark = "#4d2dd1", slot = 37, installed = false, enabled = true, storeDesc = "A polished pad-exclusive Tic Tac Toe board with solo play, local duels and reactive AgencyAI opponents.", features = {"Agency Pad exclusive", "Solo and local duel modes", "Three AI difficulty levels", "Landscape tablet board layout"}, }, { id = "coinflip", label = "Coin Flip", category = "games", icon = "fa-solid fa-coins", color = "#ffcc00", colorDark = "#e6b800", slot = 56, installed = false, enabled = false, storeDesc = "Flip a coin and bet against other players. Heads or tails?", features = {"Heads or tails betting", "Fair coin flip", "Bet against players", "Flip history"}, }, { id = "slots", label = "Lucky Slots", category = "games", icon = "fa-solid fa-clover", color = "#34c759", colorDark = "#28a745", slot = 38, installed = false, enabled = true, storeDesc = "Try your luck at the slot machine. Match symbols to win big!", features = {"Classic slot machine", "Multiple symbol combos", "Win multipliers", "Jackpot system"}, }, { id = "roulette", label = "Roulette", category = "games", icon = "fa-solid fa-circle-dot", color = "#ff3b30", colorDark = "#d63025", slot = 39, installed = false, enabled = true, storeDesc = "Place your bets on the roulette wheel. Red, black, or green?", features = {"Red/Black/Green bets", "Number betting", "Realistic wheel spin", "Payout system"}, }, { id = "skyhopper", label = "Sky Hopper", icon = "fa-solid fa-dove", color = "#4cd964", colorDark = "#3bb54a", slot = 40, installed = false, enabled = true, category = "games", storeDesc = "A skyline glide challenge with precise taps, pipe runs and high-score chasing.", features = {"Classic gameplay", "High score tracking", "Smooth animations", "Addictive fun"}, }, { id = "gametilemerge", label = "Tile Merge", icon = "fa-solid fa-border-all", color = "#f59563", colorDark = "#e07840", slot = 41, installed = false, enabled = true, category = "games", storeDesc = "Slide numbered tiles to combine them and reach the highest score!", features = {"Number puzzle", "Swipe controls", "Score tracking", "Addictive gameplay"}, }, -- ═══════════════════════════════════════════════════════════ -- MEDIA APPS -- ═══════════════════════════════════════════════════════════ { id = "music", label = "Music", icon = "fa-solid fa-music", color = "#fc3c44", colorDark = "#d43039", category = "media", slot = 5, installed = true, enabled = true, storeDesc = "Play your server's own music library and share it with people nearby.", features = {"Your own music library", "Players submit, admins approve", "Nearby players hear your music", "Favorites, playlists & queue"}, }, -- ═══════════════════════════════════════════════════════════ -- JOB-SPECIFIC APPS (restricted by player job) -- ═══════════════════════════════════════════════════════════ { id = "police_mdt", label = "Police MDT", icon = "fa-solid fa-shield-halved", color = "#007aff", colorDark = "#0056cc", category = "utilities", slot = 50, installed = false, enabled = true, requiresJob = true, storeDesc = "Mobile Data Terminal for law enforcement. View dispatches, track units, and manage calls.", features = {"Live dispatch feed", "Unit GPS tracking", "Emergency call management", "Suspect database"}, }, { id = "ems_mdt", label = "EMS MDT", icon = "fa-solid fa-heart-pulse", color = "#ff3b30", colorDark = "#d63025", category = "utilities", slot = 51, installed = false, enabled = true, requiresJob = true, storeDesc = "Emergency Medical Services terminal. Respond to medical emergencies and coordinate with your team.", features = {"Medical emergency alerts", "Team GPS tracking", "Patient information", "Hospital routing"}, }, { id = "mechanic_mdt", label = "Mechanic MDT", icon = "fa-solid fa-wrench", color = "#ff9500", colorDark = "#e08600", category = "utilities", slot = 52, installed = false, enabled = true, requiresJob = true, storeDesc = "Mobile Data Terminal for mechanic shops. Manage dispatches, units, personnel, and create invoices with Agency-Pay.", features = {"Live dispatch feed", "Unit & personnel management", "Invoice creation with Agency-Pay", "Service history tracking", "Knowledge base"}, }, -- ═══════════════════════════════════════════════════════════ -- SOCIAL APPS (require login) -- ═══════════════════════════════════════════════════════════ { id = "pictogram", label = "Pictogram", category = "social", icon = "fa-solid fa-camera-retro", color = "#E1306C", colorDark = "#C13584", slot = 42, installed = false, enabled = true, requiresLogin = true, storeDesc = "Share photos and stories with your friends. The #1 photo sharing app.", features = {"Photo sharing", "Stories & Reels", "Direct messages", "Follow friends"}, }, { id = "bleeter", label = "Bleeter", category = "social", icon = "fa-solid fa-hashtag", color = "#1DA1F2", colorDark = "#0d8bd9", slot = 43, installed = false, enabled = false, requiresLogin = true, storeDesc = "What's happening in Los Santos? Follow trends and share your thoughts.", features = {"Trending topics", "Share bleets", "Follow people", "Real-time feed"}, }, { id = "lifeinvader", label = "Life Invader", category = "social", icon = "fa-solid fa-thumbs-up", color = "#4267B2", colorDark = "#365899", slot = 44, installed = false, enabled = false, requiresLogin = true, storeDesc = "Connect with friends, family, and the world around you.", features = {"Friend profiles", "Status updates", "Photo albums", "Event planning"}, }, { id = "facezoom", label = "FaceZoom", category = "social", icon = "fa-solid fa-video", color = "#2D8CFF", colorDark = "#1a6fcc", slot = 45, installed = false, enabled = true, requiresLogin = false, storeDesc = "Video calls and meetings with anyone, anywhere.", features = {"Video calls", "Group meetings", "Screen sharing", "Chat messaging"}, }, -- ═══════════════════════════════════════════════════════════ -- PASSWORD MANAGER -- ═══════════════════════════════════════════════════════════ { id = "keychain", label = "Keychain", category = "utilities", icon = "fa-solid fa-key", color = "#8e8e93", colorDark = "#636366", slot = 46, installed = true, enabled = true, storeDesc = "View and manage your saved passwords and app accounts.", features = {"Saved passwords", "App accounts", "Secure storage", "Face Unlock access"}, }, -- ═══════════════════════════════════════════════════════════ -- BUSINESS MANAGEMENT -- ═══════════════════════════════════════════════════════════ { id = "business", label = "Business", icon = "fa-solid fa-building-columns", color = "#30d158", colorDark = "#28a745", category = "productivity", slot = 47, installed = false, enabled = true, storeDesc = "Agency Pad exclusive business management platform. Create companies, hire teams and grow your empire.", features = {"Agency Pad exclusive", "Create your own company", "Hire and manage employees", "Sell products and services", "AgencyCloud integration", "Job listings for your business"}, }, { id = "gangs", label = "Gangs", icon = "fa-solid fa-skull-crossbones", color = "#ff453a", colorDark = "#d63025", category = "productivity", slot = 48, installed = false, enabled = true, storeDesc = "Agency Pad exclusive gang management app. Create your gang, recruit members, and run missions for rewards.", features = {"Agency Pad exclusive", "Create and manage gangs", "Recruit members via Agency-ID", "Gang missions with rewards", "Gang treasury and finances", "AgencyCloud integration"}, }, -- ═══════════════════════════════════════════════════════════ -- EXAMPLE CUSTOM APP (see apps/ folder for source code) -- Disabled by default. Enable to test custom app integration. -- ═══════════════════════════════════════════════════════════ { id = "testapp", label = "Test App", icon = "fa-solid fa-flask", color = "#5856d6", colorDark = "#4240b0", slot = 36, installed = false, enabled = false, storeDesc = "A demo app showing how custom apps work.", }, }

02SQL File

Import this SQL file into your database before starting the resource:

-- Agency Pad SQL Schema CREATE TABLE IF NOT EXISTS `agency_contacts` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `name` VARCHAR(100) NOT NULL, `number` VARCHAR(20) NOT NULL, `is_emergency` TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `identifier` (`identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_messages` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `number` VARCHAR(20) NOT NULL, `messages` LONGTEXT DEFAULT NULL, PRIMARY KEY (`id`), KEY `identifier` (`identifier`), KEY `number` (`number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_chirper` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) DEFAULT NULL, `firstname` VARCHAR(50) DEFAULT NULL, `lastname` VARCHAR(50) DEFAULT NULL, `message` TEXT DEFAULT NULL, `post_id` VARCHAR(30) NOT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `identifier` (`identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_mail` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `recipient_email` VARCHAR(120) DEFAULT NULL, `sender` VARCHAR(100) DEFAULT NULL, `sender_email` VARCHAR(120) DEFAULT NULL, `subject` VARCHAR(200) DEFAULT NULL, `message` TEXT DEFAULT NULL, `mail_id` INT(11) DEFAULT NULL, `is_read` TINYINT(4) DEFAULT 0, `button` TEXT DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `identifier` (`identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_mail_accounts` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `local_part` VARCHAR(64) NOT NULL, `email` VARCHAR(120) NOT NULL, `label` VARCHAR(100) DEFAULT NULL, `is_primary` TINYINT(4) DEFAULT 0, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), KEY `identifier` (`identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_gallery` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `device_kind` VARCHAR(20) NOT NULL DEFAULT 'phone', `image_url` VARCHAR(512) NOT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `identifier` (`identifier`), KEY `identifier_device` (`identifier`,`device_kind`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_phone_dispatches` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `dispatch_id` INT(11) NOT NULL, `type` VARCHAR(60) DEFAULT NULL, `priority` VARCHAR(20) DEFAULT NULL, `code` VARCHAR(20) DEFAULT NULL, `label` VARCHAR(120) DEFAULT NULL, `message` TEXT DEFAULT NULL, `caller` VARCHAR(120) DEFAULT NULL, `caller_phone` VARCHAR(40) DEFAULT NULL, `location_x` FLOAT DEFAULT NULL, `location_y` FLOAT DEFAULT NULL, `location_z` FLOAT DEFAULT NULL, `street` VARCHAR(160) DEFAULT NULL, `status` VARCHAR(20) DEFAULT 'pending', `timestamp` INT(11) DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `dispatch_id` (`dispatch_id`), KEY `status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_cloud_limits` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `scope_type` VARCHAR(20) NOT NULL, `scope_key` VARCHAR(80) NOT NULL, `storage_limit_mb` INT(11) NOT NULL DEFAULT 0, `storage_used_mb` DECIMAL(12,2) NOT NULL DEFAULT 0.00, `asset_limit` INT(11) NOT NULL DEFAULT 0, `asset_count` INT(11) NOT NULL DEFAULT 0, `purchased_storage_mb` INT(11) NOT NULL DEFAULT 0, `purchased_asset_count` INT(11) NOT NULL DEFAULT 0, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `scope_lookup` (`scope_type`, `scope_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_cloud_assets` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `asset_uid` VARCHAR(64) NOT NULL, `scope_type` VARCHAR(20) NOT NULL, `scope_key` VARCHAR(80) NOT NULL, `owner_identifier` VARCHAR(60) DEFAULT NULL, `job_name` VARCHAR(60) DEFAULT NULL, `asset_type` VARCHAR(30) NOT NULL DEFAULT 'document', `title` VARCHAR(200) DEFAULT NULL, `description` VARCHAR(255) DEFAULT NULL, `url` VARCHAR(512) NOT NULL, `mime_type` VARCHAR(100) DEFAULT NULL, `storage_bytes` INT(11) NOT NULL DEFAULT 0, `meta_json` LONGTEXT DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `asset_uid` (`asset_uid`), KEY `scope_lookup` (`scope_type`, `scope_key`), KEY `owner_identifier` (`owner_identifier`), KEY `job_name` (`job_name`), KEY `asset_type` (`asset_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_phone_emails` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `email` VARCHAR(120) NOT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `identifier` (`identifier`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_app_accounts` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `app_id` VARCHAR(60) NOT NULL, `email` VARCHAR(120) NOT NULL, `password` VARCHAR(60) NOT NULL, `display_name` VARCHAR(100) DEFAULT NULL, `faceid_enabled` TINYINT(4) DEFAULT 0, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `identifier_app` (`identifier`, `app_id`), KEY `identifier` (`identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_notes` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `note_id` VARCHAR(40) NOT NULL, `title` VARCHAR(200) DEFAULT NULL, `content` LONGTEXT DEFAULT NULL, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `identifier` (`identifier`), UNIQUE KEY `note_id` (`note_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_call_history` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `caller_number` VARCHAR(20) NOT NULL, `receiver_number` VARCHAR(20) NOT NULL, `call_type` ENUM('incoming','outgoing','missed') DEFAULT 'outgoing', `duration` INT(11) DEFAULT 0, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `identifier` (`identifier`), KEY `caller_number` (`caller_number`), KEY `receiver_number` (`receiver_number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_darknet_purchases` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `item_id` VARCHAR(60) NOT NULL, `item_label` VARCHAR(100) DEFAULT NULL, `price` DECIMAL(10,4) DEFAULT 0, `currency` VARCHAR(10) DEFAULT 'BTC', `status` ENUM('pending','collected','expired') DEFAULT 'pending', `pickup_x` FLOAT DEFAULT NULL, `pickup_y` FLOAT DEFAULT NULL, `pickup_z` FLOAT DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `identifier` (`identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_invoices` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `sender_identifier` VARCHAR(60) NOT NULL, `receiver_identifier` VARCHAR(60) NOT NULL, `sender_name` VARCHAR(100) DEFAULT NULL, `receiver_name` VARCHAR(100) DEFAULT NULL, `amount` DECIMAL(10,2) NOT NULL, `reason` VARCHAR(200) DEFAULT NULL, `status` ENUM('pending','paid','declined') DEFAULT 'pending', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `sender_identifier` (`sender_identifier`), KEY `receiver_identifier` (`receiver_identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_phone_settings` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `setting_key` VARCHAR(60) NOT NULL, `setting_value` TEXT DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `identifier_key` (`identifier`, `setting_key`), KEY `identifier` (`identifier`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `agency_housing` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(60) NOT NULL, `house_id` VARCHAR(100) NOT NULL, `house_label` VARCHAR(200) DEFAULT NULL, `housing_script` VARCHAR(60) DEFAULT NULL, `is_locked` TINYINT(4) DEFAULT 1, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `identifier` (`identifier`), UNIQUE KEY `house_id` (`house_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Still stuck after this page? Our support team takes it from here.