Agency Docs
QBESXStandalone

Agency-Phone Configuración

Teléfono multi-framework moderno para FiveM: funciona con QBCore, ESX y de forma standalone.

v26.5De pago7 Páginas

01Configuración

Instalación rápida · config.lua · Agency-Phone

Descargar config.lua

--[[ Agency Phone - 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) ]] AgencyConfig = {} ------------------------------------------------------------------------------- -- FRAMEWORK ------------------------------------------------------------------------------- -- 'auto' | 'qb' | 'esx' | 'standalone' AgencyConfig.Framework = 'qb' ------------------------------------------------------------------------------- -- STANDALONE SETTINGS ------------------------------------------------------------------------------- -- Configure settings specifically used when running in framework-free mode AgencyConfig.Standalone = { DefaultBankBalance = 5000, -- Default bank account balance for new players } ------------------------------------------------------------------------------- -- BANKING ------------------------------------------------------------------------------- AgencyConfig.Banking = 'framework' -- 'framework' | 'oxide-banking' AgencyConfig.InvoiceProvider = 'auto' -- 'auto' | 'okokBilling' | 'builtin' ------------------------------------------------------------------------------- -- GENERAL ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- PHONE PROP (the model the character holds during a call) -- Ships with GTA's own prop_npc_phone_02 so the script stays clean to sell: -- no third-party model is bundled or required. -- -- model : model name of the prop. Point this at your own streamed model -- if you have one. The resource that ships it must start BEFORE -- agency-phone. Only use models you are licensed to use - -- ripped real-world phone models are a legal risk on a paid -- server and in a paid script. -- fallback : used when the model above is missing, so a call never ends up -- with an empty hand. Leave this on a vanilla prop. -- bone : ped bone the prop attaches to. 28422 = PH_R_Hand (right hand). -- pos/rot : nudge the prop if it sits wrong in the hand. Every model has its -- own pivot, so a custom model usually needs tuning here. ------------------------------------------------------------------------------- AgencyConfig.PhoneProp = { model = 'prop_npc_phone_02', fallback = 'prop_npc_phone_02', bone = 28422, pos = { x = 0.0, y = 0.0, z = 0.0 }, rot = { x = 0.0, y = 0.0, z = 0.0 }, } AgencyConfig.PhoneItem = 'phone' -- Item name that the player needs in inventory AgencyConfig.OpenKey = 'F1' -- Keybind to open phone (FiveM key name, e.g. 'UP', 'M', 'F1') AgencyConfig.AgencyAIKey = 'P' -- Keybind to open AgencyAI directly (e.g. 'P', 'F2', etc.) AgencyConfig.EnableAgencyAI = true -- Set to false to completely disable AgencyAI (removes app and keybind) AgencyConfig.EnableAIPickupApp = true -- Driverless pickup app toggle (true = app enabled by default) AgencyConfig.EnableAIPickupViaAgencyAI = true -- AgencyAI pickup intent toggle (independent from app availability) AgencyConfig.EnableMoneyGames = true -- Toggle paid gambling-style apps (Dice, Coin Flip, Lucky Slots, Roulette) AgencyConfig.UseAgencyHUD = true -- Enable Agency-HUD integration hooks (events/state sync) AgencyConfig.SyncAgencyHUD = true -- Sync phone open/close state to Agency-HUD (events + statebag + exports) AgencyConfig.PerformanceModeDefault = false -- Performance mode default (true/false) AgencyConfig.AnswerKey = 'Y' AgencyConfig.DeclineKey = 'J' AgencyConfig.AllowMovement = true AgencyConfig.DefaultLanguage = 'en' -- Default language: 'en', 'de', 'fr', 'es', 'tr', 'pl' AgencyConfig.DataStorageMode = 'phone' -- 'phone' = scoped by phone number, 'person' = scoped by identifier AgencyConfig.AutoApplySqlSchema = true -- Auto-create the SQL schema from agency-phone.sql on resource start ------------------------------------------------------------------------------- -- COMPANION APP (Settings > Companion App) ------------------------------------------------------------------------------- -- Pair the in-game phone with the Agency Phone companion app (iOS) by scanning -- a QR code, then control the phone from the app (messages, contacts, status). -- Works on every server with NO per-server setup: the server connects OUTBOUND -- to the Agency relay over HTTPS (no port forwarding) and auto-derives a stable -- unique id + secret (persisted in the database). -- Every player gets their own unique, short-lived pairing code. AgencyConfig.Companion = { Enable = true, -- Master toggle for the Companion App page + pairing EnableRemote = true, -- Allow paired devices to use the phone remotely via the relay RelayUrl = 'https://api.agencyg.de', -- Agency relay (Cloudflare). Do not change unless instructed. TokenTTL = 300, -- Seconds a pairing QR stays valid before it must be refreshed } ------------------------------------------------------------------------------- -- MDT SYSTEM ------------------------------------------------------------------------------- AgencyConfig.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) AgencyConfig.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 AgencyConfig.CryptoUpdateInterval = 10000 -- 10 seconds (also used for stocks) -- Default buy/sell amount per transaction AgencyConfig.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. ------------------------------------------------------------------------------- AgencyConfig.AIProvider = 'openrouter' -- 'openrouter' | 'grok' | 'qrok' AgencyConfig.AIFallbackProvider = 'grok' -- Optional fallback provider when primary key is missing -- OpenRouter (recommended for free models) AgencyConfig.AIOpenRouterKey = '' -- https://openrouter.ai/keys AgencyConfig.AIOpenRouterModel = '' -- Grok / xAI AgencyConfig.AIGrokKey = '' -- https://console.x.ai/ AgencyConfig.AIGrokModel = 'grok-3-mini-beta' -- Legacy key (still supported as fallback for compatibility) AgencyConfig.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. AgencyConfig.AIMaxTokensPerDay = 0 -- 0 = unlimited AgencyConfig.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. ------------------------------------------------------------------------------- AgencyConfig.MusicAutoApprove = false -- true = submissions skip the review step AgencyConfig.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' } AgencyConfig.MusicAllowedHosts = { } AgencyConfig.MusicSyncRadius = 30.0 -- Radius (meters) for nearby players to hear music AgencyConfig.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 AgencyConfig.MusicAllowExternalLinks = true --- -- GTA RADIO (Music App -> "Radio" tab) -- Plays the original in-game GTA V radio stations through the phone. -- Uses the game's own mobile-radio system, so no streaming/API is required -- and the audio keeps playing while the phone is put away. ------------------------------------------------------------------------------- AgencyConfig.EnableRadioTab = true -- false = hide the Radio tab completely AgencyConfig.RadioKeepStationInVehicle = true -- Carry the selected station over into a vehicle you enter -- Switching the phone radio on also hands the player GTA's radio wheel while ON -- FOOT, which would let them change stations behind the phone's back. With this -- on, the wheel is blocked while walking so the phone stays the only way to pick -- a station. Inside a vehicle the wheel is never touched - the car stereo always -- works exactly like vanilla GTA. AgencyConfig.RadioBlockWheelOnFoot = true -- Station list shown in the app. -- id = GTA radio station name (must match the game's internal name) -- name = Display name in the phone -- genre = Small subtitle under the name -- color = Accent colour of the station tile -- Remove or reorder entries freely. DLC stations only work if the client owns the DLC. AgencyConfig.RadioStations = { { id = 'RADIO_01_CLASS_ROCK', name = 'Los Santos Rock Radio', genre = 'Classic Rock', color = '#e2564a' }, { id = 'RADIO_02_POP', name = 'Non-Stop-Pop FM', genre = 'Pop', color = '#ff4fa3' }, { id = 'RADIO_03_HIPHOP_NEW', name = 'Radio Los Santos', genre = 'Modern Hip Hop', color = '#f5a623' }, { id = 'RADIO_04_PUNK', name = 'Channel X', genre = 'Punk', color = '#8e8e93' }, { id = 'RADIO_05_TALK_01', name = 'West Coast Talk Radio', genre = 'Talk', color = '#4a90d9' }, { id = 'RADIO_06_COUNTRY', name = 'Rebel Radio', genre = 'Country', color = '#c08a4a' }, { id = 'RADIO_07_DANCE_01', name = 'Soulwax FM', genre = 'Electronic', color = '#7b5cff' }, { id = 'RADIO_08_MEXICAN', name = 'East Los FM', genre = 'Mexican', color = '#2fbf71' }, { id = 'RADIO_09_HIPHOP_OLD', name = 'West Coast Classics', genre = 'Classic Hip Hop', color = '#d4a017' }, { id = 'RADIO_11_TALK_02', name = 'Blaine County Radio', genre = 'Talk', color = '#6b8e5a' }, { id = 'RADIO_12_REGGAE', name = 'The Blue Ark', genre = 'Reggae / Dub', color = '#3ec46d' }, { id = 'RADIO_13_JAZZ', name = 'Worldwide FM', genre = 'Jazz / World', color = '#00b7c3' }, { id = 'RADIO_14_DANCE_02', name = 'FlyLo FM', genre = 'Experimental', color = '#a855f7' }, { id = 'RADIO_15_MOTOWN', name = 'The Lowdown 91.1', genre = 'Motown / Soul', color = '#b5651d' }, { id = 'RADIO_16_SILVERLAKE', name = 'Radio Mirror Park', genre = 'Indie / Electro', color = '#5ac8fa' }, { id = 'RADIO_17_FUNK', name = 'Space 103.2', genre = 'Funk', color = '#ff6b35' }, { id = 'RADIO_18_90S_ROCK', name = 'Vinewood Boulevard Radio', genre = 'Alternative Rock', color = '#e0457b' }, { id = 'RADIO_20_THELAB', name = 'The Lab', genre = 'Original Score', color = '#00d4ff' }, { id = 'RADIO_21_DLC_XM17', name = 'Blonded Los Santos 97.8', genre = 'R&B / Hip Hop', color = '#f0c419' }, { id = 'RADIO_22_DLC_BATTLE_MIX1_RADIO', name = 'LS Underground Radio', genre = 'House / Techno', color = '#9b59b6' }, { id = 'RADIO_23_DLC_XM19_RADIO', name = 'iFruit Radio', genre = 'Hip Hop / Grime', color = '#31c48d' }, { id = 'RADIO_27_DLC_PRHEI4', name = 'Still Slipping Los Santos', genre = 'Downtempo', color = '#ff8a5b' }, { id = 'RADIO_34_DLC_HEI4_KULT', name = 'Kult FM', genre = 'Post-Punk / New Wave',color = '#6c7a89' }, { id = 'RADIO_35_DLC_HEI4_MLR', name = 'The Music Locker', genre = 'House', color = '#e84393' }, { id = 'RADIO_37_MOTOMAMI', name = 'MOTOMAMI Los Santos', genre = 'Latin / Reggaeton', color = '#ff3b6b' }, } ---------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- MUSIC — DISCORD NOTIFICATION -- Every submission is posted to Discord so your admins see it right away. -- Leave the webhook empty to turn this off. ------------------------------------------------------------------------------- -- TESTWERT: vor dem Verkauf leeren! AgencyConfig.MusicDiscordWebhook = '' -- Optional: role that gets pinged with every submission. Role ID only. AgencyConfig.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! AgencyConfig.MusicReviewCallbackUrl = 'http://80.136.34.11:30110' ------------------------------------------------------------------------------- -- CALL SETTINGS ------------------------------------------------------------------------------- AgencyConfig.CallTimeout = 30 AgencyConfig.CallRingInterval = 4000 AgencyConfig.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 ------------------------------------------------------------------------------- AgencyConfig.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. ------------------------------------------------------------------------------- AgencyConfig.StreamTransport = 'cloudflare-turn' -- 'cloudflare-turn' AgencyConfig.CloudflareTurnEnabled = true AgencyConfig.CloudflareTurnName = 'tight-hall-3dd2' AgencyConfig.CloudflareTurnTokenId = '' AgencyConfig.CloudflareTurnApiToken = '' AgencyConfig.CloudflareTurnApiUrl = 'https://rtc.live.cloudflare.com/v1/turn/keys/%s/credentials/generate-ice-servers' AgencyConfig.CloudflareTurnCredentialTTL = 43200 -- Seconds ------------------------------------------------------------------------------- -- NOTIFICATION ------------------------------------------------------------------------------- AgencyConfig.NotifyDuration = 5000 -- Use Agency-Notify as the default notification system -- Free download: https://agency-script.tebex.io/package/6937769 AgencyConfig.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 ------------------------------------------------------------------------------- AgencyConfig.UseAgencyReports = true AgencyConfig.AgencyReportsProvider = 'v2' -- 'v2' | 'v2_ad_free' | 'legacy' | 'auto' AgencyConfig.AgencyReportsCommand = 'areport' -- Opens the external Agency-LifeInvaderV2 UI instead of the internal phone app. AgencyConfig.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. AgencyConfig.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) ------------------------------------------------------------------------------- AgencyConfig.FaceIdDefault = false -- Default Face Unlock state for new players AgencyConfig.FaceIdAnimDuration = 2600 -- Face Unlock animation duration (ms) AgencyConfig.LockScreenEnabled = true -- Allow lock screen feature ------------------------------------------------------------------------------- -- DIALER (Phone / Calls) ------------------------------------------------------------------------------- AgencyConfig.EnableDeathEmergency = true -- Auto-show emergency overlay when player dies AgencyConfig.DialerEmergencyNumber = '911' -- Emergency number AgencyConfig.DialerTestNumber = '511' -- Always-answered local test line for call checks (set empty string to disable) AgencyConfig.DialerShowRecents = true -- Show recent calls tab AgencyConfig.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-phone:dispatch:custom) ------------------------------------------------------------------------------- AgencyConfig.DispatchSystem = 'internal' -- Dispatch categories for internal system AgencyConfig.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) AgencyConfig.DispatchTimeout = 300 -- Store dispatch history in database (requires oxmysql) AgencyConfig.DispatchSaveHistory = true ------------------------------------------------------------------------------- -- BUZZ (Messages) ------------------------------------------------------------------------------- AgencyConfig.BuzzMaxMessages = 50 -- Max messages per chat to load AgencyConfig.BuzzAllowDelete = true -- Allow deleting messages AgencyConfig.BuzzShowTimestamps = true -- Show timestamps on messages ------------------------------------------------------------------------------- -- CONTACTS ------------------------------------------------------------------------------- AgencyConfig.ContactsMaxCount = 100 -- Max contacts per player AgencyConfig.ContactsAllowShare = true -- Allow sharing contact info AgencyConfig.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. AgencyConfig.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. AgencyConfig.FiveManageApiUrl = 'https://api.fivemanage.com/api/v3/file' AgencyConfig.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 -- AgencyConfig.MediaStorageProvider = 'discord'. -- Leave empty ('') to disable Discord uploads. -- Example: 'https://discord.com/api/webhooks/1234567890/abcdefg...' AgencyConfig.ScreenshotWebhook = '' AgencyConfig.CameraMaxPhotos = 50 -- Max photos in gallery AgencyConfig.CameraQuality = 0.85 -- Screenshot JPEG quality (0-1) ------------------------------------------------------------------------------- -- CHIRPER (Social Feed) ------------------------------------------------------------------------------- AgencyConfig.PulseLoadHours = 12 AgencyConfig.PulseMaxLength = 280 -- Max chirp message length AgencyConfig.PulseAllowDelete = true -- Allow deleting own chirps AgencyConfig.PulseRefreshInterval = 30 -- Auto-refresh interval (seconds, 0=off) ------------------------------------------------------------------------------- -- POSTBOX (Mail) ------------------------------------------------------------------------------- AgencyConfig.PostboxLoadHours = 72 AgencyConfig.PostboxMaxMails = 50 -- Max mails to display AgencyConfig.PostboxAllowDelete = true -- Allow deleting mails AgencyConfig.PostboxMaxAccounts = 5 -- Max mailbox accounts per player AgencyConfig.PostboxDefaultDomain = 'agencyg.de' -- Default mailbox domain (players choose the local part themselves) ------------------------------------------------------------------------------- -- WALLET (Bank) ------------------------------------------------------------------------------- AgencyConfig.WalletMinTransfer = 1 -- Minimum transfer amount AgencyConfig.WalletMaxTransfer = 1000000 -- Maximum transfer amount AgencyConfig.WalletShowHistory = false -- Show transaction history (future) AgencyConfig.WalletCurrency = '$' -- Currency symbol -- Wallet fixed-term deposits (2-5% configurable rates) AgencyConfig.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, -- action button detection and Wallet checkout. -- coords: x, y, z, w (w optional heading) -- amount: charged via Wallet / bank -- reward: optional test reward granted after a validated successful payment ------------------------------------------------------------------------------- AgencyConfig.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-phone:server:handleAgencyPayTerminalPurchase', }, } ------------------------------------------------------------------------------- -- GALLERY (Photos) ------------------------------------------------------------------------------- AgencyConfig.GalleryMaxPhotos = 50 -- Max photos per player AgencyConfig.GalleryColumnsCount = 3 -- Grid columns (2, 3, or 4) ------------------------------------------------------------------------------- -- AGENCY CLOUD ------------------------------------------------------------------------------- AgencyConfig.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. ------------------------------------------------------------------------------- AgencyConfig.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. AgencyConfig.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 ------------------------------------------------------------------------------- AgencyConfig.GarageSystem = 'auto' -- Garage script to use ('auto' or script name) AgencyConfig.GarageSpawnCost = 200 -- Cost to spawn a vehicle ($) AgencyConfig.GarageMaxSpawned = 3 -- Max vehicles out at once per player AgencyConfig.GarageCooldown = 120 -- Cooldown in seconds between vehicle requests (0 = disabled) -- Autonomous pickup ride settings (driverless visual taxi) AgencyConfig.AIPickupVehicleModel = 'stretch' -- GTA limousine look AgencyConfig.AIPickupVehicleOptions = { { model = 'stretch', label = 'Agency Limo' }, { model = 'neon', label = 'AgencyAI E-Sport 4S' }, { model = 'raiden', label = 'AgencyAI Executive EV' }, } AgencyConfig.AIPickupCruiseSpeed = 22.0 AgencyConfig.AIPickupPickupSpeed = 34.0 -- Faster approach speed while coming to player AgencyConfig.AIPickupArrivalRadius = 18.0 AgencyConfig.AIPickupDropoffRadius = 22.0 AgencyConfig.AIPickupBoardingRadius = 12.0 -- Radius to press E and enter rear seats AgencyConfig.AIPickupUseInvisibleDriver = true AgencyConfig.AIPickupIgnoreTrafficToPickup = true -- Ignore traffic rules while driving to pickup AgencyConfig.AIPickupBaseFare = 500 -- Minimum order cost (charged on request) AgencyConfig.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) ------------------------------------------------------------------------------- AgencyConfig.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, }, } ------------------------------------------------------------------------------- -- 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. AgencyConfig.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 Chirps = '', -- Logs Pulse posts (author, content) 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. ------------------------------------------------------------------------------- AgencyConfig.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) AgencyConfig.EatsPayPerKm = 20 -- Minimum / maximum delivery pay (caps) AgencyConfig.EatsPayMin = 15 AgencyConfig.EatsPayMax = 200 -- Pickup radius: how close the player must be to mark order as picked up (meters) AgencyConfig.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. ------------------------------------------------------------------------------- AgencyConfig.JobApps = { police = { appId = 'police_mdt', jobNames = {'police', 'pd', 'lspd', 'bcso', 'sheriff'}, }, ems = { appId = 'ems_mdt', jobNames = {'ambulance', 'ems', 'doctor', 'medic', 'fire'}, }, mechanic = { appId = 'mechanic_app', jobNames = {'mechanic', '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 ------------------------------------------------------------------------------- AgencyConfig.EmploymentListings = { { id = 'ls-logistics', title = 'Delivery Driver', company = 'Los Santos Logistics', location = 'Mission Row, Los Santos', salary = '$3,200 / week', type = 'Full-Time', description = 'Deliver packages across the city with route bonuses and clean-driver rewards.', color = '#34c759', x = 121.4, y = -3031.9, phone = '310-555-0181', }, { id = 'dockyard-security', title = 'Night Security', company = 'Port Security Group', location = 'Elysian Island', salary = '$2,850 / week', type = 'Shift', description = 'Patrol restricted zones, report incidents, and coordinate with dispatch.', color = '#5ac8fa', x = -225.1, y = -2684.3, phone = '310-555-0172', }, { id = 'vinewood-cafe', title = 'Barista', company = 'Bean Machine', location = 'Vinewood', salary = '$2,100 / week', type = 'Part-Time', description = 'Prepare drinks, handle front desk orders, and keep service flowing during rush hours.', color = '#ff9f0a', x = -634.9, y = 236.1, phone = '310-555-0122', }, { id = 'city-maintenance', title = 'Street Maintenance', company = 'City Works', location = 'La Mesa', salary = '$3,000 / week', type = 'Contract', description = 'Repair public infrastructure and assist with emergency city maintenance tasks.', color = '#af52de', x = 727.7, y = -1079.7, phone = '310-555-0196', }, } ------------------------------------------------------------------------------- -- APP STORE ------------------------------------------------------------------------------- AgencyConfig.AppStoreEnabled = true -- Enable the app store AgencyConfig.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. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- DEVELOPER MODE -- When true, developer/example apps are shown on the phone (e.g. the built-in -- "Agency Demo" template app). Keep this false on a live server; set it to true -- while you are building or testing your own custom apps. ------------------------------------------------------------------------------- AgencyConfig.DeveloperMode = false -- default: false (demo app hidden). true = demo app visible. AgencyConfig.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 = "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 = "chirper", label = "Pulse", icon = "fa-solid fa-feather", color = "#af52de", colorDark = "#9b30d1", slot = 35, installed = false, enabled = false, }, { 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 = false, enabled = true, 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 = true, 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 Control Center (swipe down top-right) { id = "speedometer", label = "Speedo", icon = "fa-solid fa-gauge-high", color = "#ff2d55", colorDark = "#d6204a", category = "navigation", slot = 20, installed = false, enabled = true, 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 = "dice", label = "Dice Game", category = "games", icon = "fa-solid fa-dice", color = "#ff2d55", colorDark = "#d6204a", slot = 23, installed = false, enabled = true, 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 = "#1c1c1e", colorDark = "#000000", 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 = true, 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 = "coinflip", label = "Coin Flip", category = "games", icon = "fa-solid fa-coins", color = "#ffcc00", colorDark = "#e6b800", slot = 37, installed = false, enabled = true, 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 = "Tap to glide through the skyline, avoid the pipes and beat your best run.", 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) -- ═══════════════════════════════════════════════════════════ -- Police & EMS MDT are Agency-Pad exclusive { id = "mechanic_app", label = "Mechanic", icon = "fa-solid fa-wrench", color = "#ff9500", colorDark = "#e08600", category = "utilities", slot = 52, installed = false, enabled = true, requiresJob = true, storeDesc = "Manage repair orders and customer requests. Accept jobs and track your workload.", features = {"Incoming repair requests", "Job queue management", "Customer notifications", "Service history"}, }, -- ═══════════════════════════════════════════════════════════ -- 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 = true, 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 = true, 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"}, }, -- ═══════════════════════════════════════════════════════════ -- 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.", }, -- Health: Zustand aus dem Telefon, Bewegung aus der Agency Watch { id = "health", label = "Health", icon = "fa-solid fa-heart-pulse", color = "#ff375f", colorDark = "#c72b4a", slot = 38, installed = true, enabled = true, storeDesc = "Zustand, Schritte, Strecke und Puls. Am meisten zeigt sie mit der Agency Watch.", features = {"Leben und Panzerung", "Schritte und Strecke", "Puls mit Verlauf", "Sieben Tage Rueckblick"}, }, { id = "watch", label = "Watch", icon = "fa-solid fa-clock", color = "#00d4ff", colorDark = "#0090ad", slot = 39, installed = true, enabled = true, storeDesc = "Die Agency Watch vollstaendig einrichten: Zifferblatt, Gehaeuse, Sprache und Agency Pay.", features = {"Zifferblatt und Gehaeuse", "Agency Pay am Handgelenk", "Companion koppeln", "Softwareaktualisierung"}, }, -- Agency Demo (working custom-app template added by Claude) { id = "agencydemo", label = "Agency Demo", icon = "fa-solid fa-rocket", color = "#00d4ff", colorDark = "#0090cc", slot = 37, installed = AgencyConfig.DeveloperMode, -- only on the home screen in developer mode enabled = AgencyConfig.DeveloperMode, -- hidden entirely when DeveloperMode = false storeDesc = "Example custom app: identity, live server stats and notifications.", }, }

02Archivo SQL

Importa este archivo SQL en tu base de datos antes de iniciar el recurso:

-- Agency Phone 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;

¿Sigues atascado después de esta página? Nuestro soporte se encarga.