[{"data":1,"prerenderedAt":1090},["ShallowReactive",2],{"/docs/scripts/free-phone/configuration":3,"/docs/scripts/free-phone/configuration-surround":1078,"/docs/scripts/free-phone/configuration-implemented-suggestions":1089},{"id":4,"title":5,"body":6,"description":1068,"extension":1069,"head":1070,"implementedSuggestions":1070,"meta":1071,"navigation":1072,"path":1073,"schemaOrg":1070,"seo":1074,"sitemap":1075,"stem":1076,"__hash__":1077},"docs/1.docs/scripts/4.free-phone/5.configuration.md","Configuration",{"type":7,"value":8,"toc":1055},"minimark",[9,14,32,46,51,61,164,184,191,195,297,300,305,348,359,362,366,373,380,384,394,408,431,441,452,462,669,694,697,706,716,730,737,741,762,770,777,781,797,808,894,897,908,933,937,943,960,964,1042,1051],[10,11,13],"h1",{"id":12},"configuration-and-permissions","Configuration and permissions",[15,16,17,18,22,23,27,28,31],"p",{},"Open ",[19,20,21],"code",{},"/phonepanel"," → ",[24,25,26],"strong",{},"Phone configurator → General"," to manage the main server settings.\nIn German, this page is named ",[24,29,30],{},"Allgemein",". These settings apply to the server; the Settings\napp on a player's phone manages that device's personal preferences.",[15,33,34,35,40,41,45],{},"For a new server, complete the ",[36,37,39],"a",{"href":38},"/docs/scripts/free-phone/installation","installation steps","\nand the ",[36,42,44],{"href":43},"#administrator-access","ACE setup below"," first.",[47,48,50],"h2",{"id":49},"choose-sql-or-file-configuration","Choose SQL or file configuration",[15,52,53,56,57,60],{},[19,54,55],{},"Config.PhoneConfigurator.Enabled = true"," is the default. Its switch is in Part 1 of\n",[19,58,59],{},"sky_phone/config/config.lua"," and always requires a resource restart after editing.",[62,63,64,85],"table",{},[65,66,67],"thead",{},[68,69,70,73,79],"tr",{},[71,72,5],"th",{},[71,74,75,76],{},"SQL mode: ",[19,77,78],{},"Enabled = true",[71,80,81,82],{},"File mode: ",[19,83,84],{},"Enabled = false",[86,87,88,109,124,137,151],"tbody",{},[68,89,90,104,107],{},[91,92,93,94,97,98,97,101],"td",{},"Part 1: ",[19,95,96],{},"PhoneConfigurator",", ",[19,99,100],{},"CommandPermissions",[19,102,103],{},"CustomTones",[91,105,106],{},"Edit the file and restart",[91,108,106],{},[68,110,111,114,117],{},[91,112,113],{},"Part 2: framework, inventory, phone, SIMs, voice, apps and other settings",[91,115,116],{},"Edit in Phone configurator and save",[91,118,119,120,123],{},"Edit Part 2 of ",[19,121,122],{},"config.lua"," and restart",[68,125,126,131,134],{},[91,127,128],{},[19,129,130],{},"config/media.lua",[91,132,133],{},"Edit the Media section in Phone configurator",[91,135,136],{},"Edit this server-only file and restart",[68,138,139,146,149],{},[91,140,141,142,145],{},"Locale files, ",[19,143,144],{},"config/functions.lua",", inventory definitions and custom assets",[91,147,148],{},"File-owned",[91,150,148],{},[68,152,153,158,161],{},[91,154,155],{},[19,156,157],{},"config/WebHooks.lua",[91,159,160],{},"Separate Webhooks editor with its own SQL overrides",[91,162,163],{},"Same separate Webhooks editor; unaffected by the Configurator switch",[165,166,169],"callout",{"color":167,"icon":168},"warning","i-lucide-triangle-alert",[15,170,171,172,175,176,179,180,183],{},"In SQL mode, editing Part 2 or ",[19,173,174],{},"media.lua"," does not change the active configuration, including\non the first start. The shipped ",[19,177,178],{},"source/shared/config_default.lua"," supplies initial defaults,\nand ",[19,181,182],{},"sky_phone_configurator"," stores the saved values. Do not edit generated defaults or delete\nthe SQL row to apply a setting.",[15,185,186,187,190],{},"Switching to file mode does not export SQL settings into Lua files. Review the file values\nbefore switching and restarting. The saved SQL values remain available when SQL mode is\nenabled again. File mode makes the Configurator read-only; other authorized Phonepanel tools\nremain available when ",[19,188,189],{},"AdminPanel.Enabled"," is on.",[47,192,194],{"id":193},"general-page","General page",[62,196,197,207],{},[65,198,199],{},[68,200,201,204],{},[71,202,203],{},"Group",[71,205,206],{},"Settings",[86,208,209,234,253,272],{},[68,210,211,214],{},[91,212,213],{},"Devices & SIM cards",[91,215,216,97,219,97,222,97,225,97,228,97,231],{},[19,217,218],{},"Phone.Unique",[19,220,221],{},"Sim.Enabled",[19,223,224],{},"Phone.Item",[19,226,227],{},"Phone.DeviceName",[19,229,230],{},"Sim.NumberPrefix",[19,232,233],{},"Sim.NumberLength",[68,235,236,239],{},[91,237,238],{},"Framework & integrations",[91,240,241,97,244,97,247,97,250],{},[19,242,243],{},"Bridge.Framework",[19,245,246],{},"Bridge.Inventory",[19,248,249],{},"Bridge.Locale",[19,251,252],{},"Calls.VoiceProvider",[68,254,255,258],{},[91,256,257],{},"Phone use",[91,259,260,97,263,97,266,97,269],{},[19,261,262],{},"Phone.BlockWhenDead",[19,264,265],{},"Phone.BlockWhenCuffed",[19,267,268],{},"Phone.AllowMovement",[19,270,271],{},"Phone.HoldToLook.Enabled",[68,273,274,277],{},[91,275,276],{},"Keyboard & commands",[91,278,279,97,282,97,285,97,288,97,291,97,294],{},[19,280,281],{},"Phone.Keybind",[19,283,284],{},"CrewLink.QuickPing.Enabled",[19,286,287],{},"CrewLink.QuickPing.DefaultKey",[19,289,290],{},"Phone.HoldToLook.Control",[19,292,293],{},"Command",[19,295,296],{},"Phone.DevelopmentCommand",[15,298,299],{},"General and the detail sections edit the same draft. Moving between them keeps your changes.\nUse the detail sections for the remaining settings, such as SIM item names, radio providers,\ncell towers, media and app limits. Search matches field labels, descriptions and paths.",[301,302,304],"h3",{"id":303},"device-identity-and-physical-sims","Device identity and physical SIMs",[62,306,307,320],{},[65,308,309],{},[68,310,311,314,317],{},[71,312,313],{},"Setting",[71,315,316],{},"Enabled",[71,318,319],{},"Disabled",[86,321,322,335],{},[68,323,324,329,332],{},[91,325,326,327],{},"Unique phones: ",[19,328,218],{},[91,330,331],{},"Every phone item has its own IMEI and device data. Giving away that item transfers the handset.",[91,333,334],{},"All phone items for one framework character open that character's persistent device.",[68,336,337,342,345],{},[91,338,339,340],{},"Physical SIMs: ",[19,341,221],{},[91,343,344],{},"Calls and messages require an inserted physical SIM. The phone itself can open without one.",[91,346,347],{},"Devices without a SIM receive a persistent automatic number. Physical SIM items are unnecessary.",[15,349,350,351,354,355,358],{},"The switches are independent. Unique phones need per-slot metadata and non-stackable phone\nitems. Physical SIMs need metadata-capable, non-stackable SIM items even when unique phones\nare disabled. Native ESX inventory and ",[19,352,353],{},"hex_4_inventory"," force both switches off because they\ncannot store that metadata, including when selected through ",[19,356,357],{},"auto",".",[15,360,361],{},"Test identity/SIM changes on a database copy before changing an established server, then\nrestart and verify item use, retained device data, calls and messages. Disabling physical\nSIMs does not bulk-replace existing numbers. Number prefix and length changes affect newly\ngenerated numbers; length includes the prefix, and the prefix accepts digits only.",[301,363,365],{"id":364},"save-and-restart","Save and restart",[15,367,368,369,372],{},"Changes do not autosave. Press the ",[24,370,371],{},"checkmark in the panel header"," and wait for confirmation.\nThe server checks permissions, field values and the configuration revision before storing\nboth payloads. A failed save retains the draft. After a revision conflict, compare the draft\nwith the current server values and reapply the intended changes.",[15,374,375,376,379],{},"Restart ",[19,377,378],{},"sky_phone"," after changing framework, inventory or voice providers, identity modes,\nor keyboard defaults. Saving does not restart the resource. Existing SQL settings remain\nin the same table and format; the General page requires no manual SQL migration.",[47,381,383],{"id":382},"administrator-access","Administrator access",[15,385,386,387,390,391,393],{},"Free Phone uses the same ",[19,388,389],{},"Config.CommandPermissions"," group convention as the Jobs resources,\nimplemented inside ",[19,392,378],{},". It has no runtime dependency on Sky Base or Jobs Base.",[15,395,396,397,400,401,407],{},"Add both lines to ",[19,398,399],{},"server.cfg"," ",[24,402,403,404],{},"before ",[19,405,406],{},"ensure sky_phone",":",[409,410,415],"pre",{"className":411,"code":412,"filename":399,"language":413,"meta":414,"style":414},"language-cfg shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","add_ace resource.sky_phone command.add_ace allow\nadd_ace resource.sky_phone command.remove_ace allow\n","cfg","",[19,416,417,425],{"__ignoreMap":414},[418,419,422],"span",{"class":420,"line":421},"line",1,[418,423,424],{},"add_ace resource.sky_phone command.add_ace allow\n",[418,426,428],{"class":420,"line":427},2,[418,429,430],{},"add_ace resource.sky_phone command.remove_ace allow\n",[15,432,433,434,437,438,358],{},"The first grant allows Phone to register its configured ACEs. The second removes grants\ninstalled by Phone when it stops, so removed groups do not retain those grants after a restart.\nIf either capability is missing, the console reports it and protected Phone actions are denied.\nGrants for ",[19,435,436],{},"resource.sky_base"," do not apply to ",[19,439,440],{},"resource.sky_phone",[15,442,443,444,447,448,451],{},"Phone does not need ",[19,445,446],{},"command.add_principal"," or ",[19,449,450],{},"command.remove_principal",". Player membership\nremains part of the server/framework permission setup.",[15,453,454,455,458,459,407],{},"Edit the existing table in ",[24,456,457],{},"Part 1"," of ",[19,460,461],{},"config/config.lua",[409,463,467],{"className":464,"code":465,"filename":461,"language":466,"meta":414,"style":414},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Config.CommandPermissions = {\n    phonepanel = { \"god\", \"superadmin\", \"admin\" },\n    phonetestdata = { \"god\", \"superadmin\", \"admin\" },\n    fliptokverify = { \"god\", \"superadmin\", \"admin\" },\n    picstagramverify = { \"god\", \"superadmin\", \"admin\" },\n    picstagramadmin = { \"god\", \"superadmin\", \"admin\" },\n}\n","lua",[19,468,469,485,527,561,595,629,663],{"__ignoreMap":414},[418,470,471,475,478,482],{"class":420,"line":421},[418,472,474],{"class":473},"sTEyZ","Config.",[418,476,100],{"class":477},"sBMFI",[418,479,481],{"class":480},"sMK4o"," =",[418,483,484],{"class":473}," {\n",[418,486,487,490,493,496,499,503,505,507,509,512,514,516,518,521,524],{"class":420,"line":427},[418,488,489],{"class":473},"    phonepanel ",[418,491,492],{"class":480},"=",[418,494,495],{"class":473}," { ",[418,497,498],{"class":480},"\"",[418,500,502],{"class":501},"sfazB","god",[418,504,498],{"class":480},[418,506,97],{"class":473},[418,508,498],{"class":480},[418,510,511],{"class":501},"superadmin",[418,513,498],{"class":480},[418,515,97],{"class":473},[418,517,498],{"class":480},[418,519,520],{"class":501},"admin",[418,522,523],{"class":480},"\" ",[418,525,526],{"class":473},"},\n",[418,528,530,533,535,537,539,541,543,545,547,549,551,553,555,557,559],{"class":420,"line":529},3,[418,531,532],{"class":473},"    phonetestdata ",[418,534,492],{"class":480},[418,536,495],{"class":473},[418,538,498],{"class":480},[418,540,502],{"class":501},[418,542,498],{"class":480},[418,544,97],{"class":473},[418,546,498],{"class":480},[418,548,511],{"class":501},[418,550,498],{"class":480},[418,552,97],{"class":473},[418,554,498],{"class":480},[418,556,520],{"class":501},[418,558,523],{"class":480},[418,560,526],{"class":473},[418,562,564,567,569,571,573,575,577,579,581,583,585,587,589,591,593],{"class":420,"line":563},4,[418,565,566],{"class":473},"    fliptokverify ",[418,568,492],{"class":480},[418,570,495],{"class":473},[418,572,498],{"class":480},[418,574,502],{"class":501},[418,576,498],{"class":480},[418,578,97],{"class":473},[418,580,498],{"class":480},[418,582,511],{"class":501},[418,584,498],{"class":480},[418,586,97],{"class":473},[418,588,498],{"class":480},[418,590,520],{"class":501},[418,592,523],{"class":480},[418,594,526],{"class":473},[418,596,598,601,603,605,607,609,611,613,615,617,619,621,623,625,627],{"class":420,"line":597},5,[418,599,600],{"class":473},"    picstagramverify ",[418,602,492],{"class":480},[418,604,495],{"class":473},[418,606,498],{"class":480},[418,608,502],{"class":501},[418,610,498],{"class":480},[418,612,97],{"class":473},[418,614,498],{"class":480},[418,616,511],{"class":501},[418,618,498],{"class":480},[418,620,97],{"class":473},[418,622,498],{"class":480},[418,624,520],{"class":501},[418,626,523],{"class":480},[418,628,526],{"class":473},[418,630,632,635,637,639,641,643,645,647,649,651,653,655,657,659,661],{"class":420,"line":631},6,[418,633,634],{"class":473},"    picstagramadmin ",[418,636,492],{"class":480},[418,638,495],{"class":473},[418,640,498],{"class":480},[418,642,502],{"class":501},[418,644,498],{"class":480},[418,646,97],{"class":473},[418,648,498],{"class":480},[418,650,511],{"class":501},[418,652,498],{"class":480},[418,654,97],{"class":473},[418,656,498],{"class":480},[418,658,520],{"class":501},[418,660,523],{"class":480},[418,662,526],{"class":473},[418,664,666],{"class":420,"line":665},7,[418,667,668],{"class":473},"}\n",[15,670,671,672,674,675,678,679,682,683,686,687,690,691,693],{},"Values are group suffixes: ",[19,673,520],{}," grants ",[19,676,677],{},"group.admin"," access to ",[19,680,681],{},"sky_phone.\u003Cpermission>",".\nFor QBCore, Phone also grants the corresponding ",[19,684,685],{},"qbcore.admin"," principal. ESX and Qbox use\n",[19,688,689],{},"group.*",". Do not enter ",[19,692,677],{}," or player identifiers as values in this table.",[15,695,696],{},"Your player must inherit an allowed ACE group. If your existing admin setup does not establish\nmembership, an example server configuration entry is:",[409,698,700],{"className":411,"code":699,"filename":399,"language":413,"meta":414,"style":414},"add_principal identifier.license:YOUR_LICENSE group.admin\n",[19,701,702],{"__ignoreMap":414},[418,703,704],{"class":420,"line":421},[418,705,699],{},[15,707,708,709,711,712,715],{},"Replace the placeholder with the actual identifier. This is server configuration, not a\nresource capability for Phone. A framework-only role, a job called ",[19,710,520],{},", or Qbox ",[19,713,714],{},"HasGroup","\ndoes not independently authorize Phone administration.",[15,717,718,719,721,722,725,726,729],{},"Every protected request checks ",[19,720,681],{}," again on the server. Explicit ACE\ndenies apply, and revocation takes effect on the next action even while the panel is open.\nMissing or empty permission lists deny player access. The ",[19,723,724],{},"phonetestdata"," group check applies\nwhen ",[19,727,728],{},"TestData.AdminOnly"," is enabled; keep test data disabled in production.",[15,731,732,733,736],{},"Permission keys stay fixed if you rename commands. Granting ",[19,734,735],{},"command.phonepanel"," alone does\nnot authorize the panel callbacks. The Configurator cannot edit its own permission table.",[301,738,740],{"id":739},"update-from-the-previous-permission-model","Update from the previous permission model",[742,743,744,748,751,756,759],"ol",{},[745,746,747],"li",{},"Add both Phone resource grants before starting the resource.",[745,749,750],{},"Verify administrator ACE membership; previous framework-role and Qbox role/job fallbacks no longer apply.",[745,752,753,754,358],{},"Review the existing Part 1 group lists and restart ",[19,755,378],{},[745,757,758],{},"Test an allowed user and an unprivileged user, then revoke access while the panel is open.",[745,760,761],{},"Check policy and inheritance separately in the server console:",[409,763,768],{"className":764,"code":766,"language":767,"meta":414},[765],"language-text","test_ace group.admin sky_phone.phonepanel\ntest_ace identifier.license:YOUR_LICENSE sky_phone.phonepanel\n","text",[19,769,766],{"__ignoreMap":414},[15,771,772,773,776],{},"A successful group test does not prove player membership. Effective grants that already\nexist before Phone starts are left in place and may still grant access independently of\nthe lists. Avoid manually duplicating Phone-managed principal/object allow pairs: Cfx\n",[19,774,775],{},"remove_ace"," removes all matching allow entries during cleanup. Deny entries remain untouched.",[47,778,780],{"id":779},"record-a-keyboard-shortcut","Record a keyboard shortcut",[15,782,783,784,786,787,789,790,793,794,358],{},"For ",[19,785,281],{}," and ",[19,788,287],{},", choose a key from the selector or click\n",[24,791,792],{},"Record key"," and press one key. Escape cancels recording without closing the panel; Tab leaves\ncapture. Choose those keys from the selector if needed. Modifier combinations and unknown input\nare rejected. The phone shortcut has a separate disable switch that stores ",[19,795,796],{},"false",[15,798,799,800,803,804,807],{},"The saved value is a FiveM ",[24,801,802],{},"KEYBOARD mapper ID",", not the character printed on the key, a\nbrowser ",[19,805,806],{},"KeyboardEvent.code",", or a numeric GTA control. German Windows layout examples:",[62,809,810,820],{},[65,811,812],{},[68,813,814,817],{},[71,815,816],{},"Key",[71,818,819],{},"Saved FiveM ID",[86,821,822,832,842,852,862,874,884],{},[68,823,824,827],{},[91,825,826],{},"Ü",[91,828,829],{},[19,830,831],{},"OEM_1",[68,833,834,837],{},[91,835,836],{},"Ö",[91,838,839],{},[19,840,841],{},"OEM_3",[68,843,844,847],{},[91,845,846],{},"Ä",[91,848,849],{},[19,850,851],{},"OEM_7",[68,853,854,857],{},[91,855,856],{},"ß",[91,858,859],{},[19,860,861],{},"OEM_4",[68,863,864,869],{},[91,865,866],{},[19,867,868],{},"\u003C",[91,870,871],{},[19,872,873],{},"OEM_102",[68,875,876,879],{},[91,877,878],{},"Main Enter",[91,880,881],{},[19,882,883],{},"RETURN",[68,885,886,889],{},[91,887,888],{},"NumPad Enter",[91,890,891],{},[19,892,893],{},"NUMPADENTER",[15,895,896],{},"Capture uses the Windows virtual-key value forwarded by FiveM CEF for OEM keys. A US physical-key\nmap would give incorrect results for German keys. If the event lacks a usable code, choose a\nverified ID from the selector. The server validates the saved ID too.",[15,898,899,900,903,904,907],{},"These are ",[24,901,902],{},"server defaults",". After saving and restarting, players with existing bindings may\nstill need to change/reset their own binding under ",[24,905,906],{},"FiveM Settings → Key Bindings → FiveM",".\nCapturing a key does not rebind the administrator's personal controls.",[15,909,910,786,912,915,916,919,920,923,924,926,927,358],{},[19,911,290],{},[19,913,914],{},"SkyPic.Camera.*Control"," remain numeric GTA control indices.\nFor example, ",[19,917,918],{},"19"," is ",[19,921,922],{},"INPUT_CHARACTER_WHEEL",", normally Left Alt. Do not paste ",[19,925,831],{}," or a\nbrowser virtual-key number into those fields. See the official\n",[36,928,932],{"href":929,"rel":930},"https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/",[931],"nofollow","FiveM keyboard IDs",[47,934,936],{"id":935},"secrets-and-backups","Secrets and backups",[15,938,939,940,942],{},"In SQL mode, enter API keys and peppers in the Media, RealtimeSecrets and Server detail\nsections. Existing values are masked; leave them unchanged to retain them. Preserve all four\nServer peppers during updates and back up ",[19,941,182],{}," with the rest of the database.\nChanging a pepper invalidates the existing credentials protected by it.",[15,944,945,946,948,949,952,953,955,956,959],{},"Clients download ",[19,947,122],{},", including blocks guarded by ",[19,950,951],{},"IsDuplicityVersion()",". File mode\ndoes not provide private pepper storage; use SQL mode for private peppers. In file mode, media\nkeys belong in server-only ",[19,954,130],{},", and Cloudflare credentials use the documented\nnon-replicated ",[19,957,958],{},"sky_phone_cf_*"," convars. Custom tones, Lua hooks, inventory definitions and\ncustom assets must also be backed up separately.",[47,961,963],{"id":962},"troubleshooting","Troubleshooting",[62,965,966,976],{},[65,967,968],{},[68,969,970,973],{},[71,971,972],{},"Symptom",[71,974,975],{},"What to check",[86,977,978,989,1010,1018,1026,1034],{},[68,979,980,983],{},[91,981,982],{},"Config file edits do nothing",[91,984,985,986,988],{},"Confirm the mode. SQL mode ignores Part 2 and ",[19,987,174],{},"; edit the panel and save.",[68,990,991,996],{},[91,992,993,995],{},[19,994,21],{}," is denied or unavailable",[91,997,998,999,1002,1003,1005,1006,1009],{},"Both Phone ACE grants, the player's actual ACE membership and denies, ",[19,1000,1001],{},"CommandPermissions.phonepanel",", and active ",[19,1004,189],{}," / ",[19,1007,1008],{},"AdminPanel.Command",". Read console diagnostics.",[68,1011,1012,1015],{},[91,1013,1014],{},"Unique phones or physical SIMs stay disabled",[91,1016,1017],{},"Verify the active inventory supports metadata; native ESX and hex force both off.",[68,1019,1020,1023],{},[91,1021,1022],{},"Save fails",[91,1024,1025],{},"Keep the draft for comparison. Resolve validation errors or reload the current revision after a conflict, reapply changes, then save.",[68,1027,1028,1031],{},[91,1029,1030],{},"The old hotkey still opens the phone",[91,1032,1033],{},"Restart after changing server defaults and check that player's saved FiveM binding.",[68,1035,1036,1039],{},[91,1037,1038],{},"An OEM key cannot be captured",[91,1040,1041],{},"Select the verified FiveM ID; do not enter the printed character or guess a US key position.",[15,1043,1044,1045,1050],{},"For implementation references and the separate live FiveM checks, see the repository's\n",[36,1046,1049],{"href":1047,"rel":1048},"https://github.com/sky-systems/sky_phone/blob/dev/docs/phone-configurator.md",[931],"configuration guide",".\nBrowser tests and successful builds do not verify actual CEF keyboard layouts or live server permissions.",[1052,1053,1054],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":414,"searchDepth":421,"depth":427,"links":1056},[1057,1058,1062,1065,1066,1067],{"id":49,"depth":427,"text":50},{"id":193,"depth":427,"text":194,"children":1059},[1060,1061],{"id":303,"depth":529,"text":304},{"id":364,"depth":529,"text":365},{"id":382,"depth":427,"text":383,"children":1063},[1064],{"id":739,"depth":529,"text":740},{"id":779,"depth":427,"text":780},{"id":935,"depth":427,"text":936},{"id":962,"depth":427,"text":963},"Configure Free Phone through the General page, separate SQL and file settings, set up ACE groups, and record valid FiveM keyboard bindings.","md",null,{},true,"/docs/scripts/free-phone/configuration",{"title":5,"description":1068},{"loc":1073},"1.docs/scripts/4.free-phone/5.configuration","X0fs5j_CiPg1taCw3yigeE51umgL5OOUw4ZBpXMCXEw",[1079,1084],{"title":1080,"path":1081,"stem":1082,"description":1083,"children":-1},"Events","/docs/scripts/free-phone/events","1.docs/scripts/4.free-phone/4.events","Public Free Phone observer events, custom-app bridge messages, lifecycle hooks, and internal event boundaries with examples.",{"title":1085,"path":1086,"stem":1087,"description":1088,"children":-1},"Overview","/docs/scripts/pets/overview","1.docs/scripts/5.pets/1.overview","Start here for Sky Pets installation, everyday play, configuration, features, and integration APIs.",[],1790635373352]