Pulse Phone docs

Supported integrations

7. Other scripts it connects to automatically

Nothing to set up. The start-up line lists what was found. phone:diag shows every script the phone considered and why it used or skipped each one. To force one, set Config.Providers.<area> in config/config.lua to the resource name, or 'none' to switch that area off.

Area Supported scripts
Company accounts Renewed-Banking, qb-banking, qb-management, okokBanking, qs-banking, fd_banking, snipe-banking, tgg-banking, tgiann-bank, wasabi_banking, esx_addonaccount
Bank history in Wallet Renewed-Banking, qb-banking, ps-banking, okokBanking, tgiann-bank, esx_banking
Shared accounts in Wallet Renewed-Banking, qb-banking
Bills in Wallet esx_billing, okokBilling, QBCore's phone_invoices table
Garage app jg-advancedgarages, cd_garage, okokGarage, vms_garagesv2, qs-advancedgarages, qbx_garages, qb-garages, esx_garage, esx_advancedgarage, codem-garage, rcore_garage, loaf_garage
Home app qb-houses, qb-apartments, qbx_properties, qs-housing, loaf_housing, vms_housing, rtx_housing, ps-housing, bcs_housing, nolag_properties, esx_property
Dispatch (Smart 911, Services) ps-dispatch, cd_dispatch, core_dispatch, qs-dispatch, rcore_dispatch, linden_outlawalert. Without one, alerts arrive as phone notifications.
Vehicle keys qbx_vehiclekeys, qb-vehiclekeys, qs-vehiclekeys, Renewed-Vehiclekeys, wasabi_carlock, MrNewbVehicleKeys, vehicles_keys, ak47_vehiclekeys, ak47_qb_vehiclekeys, t1ger_keys, cd_garage and okokGarage keys
Fuel ox_fuel, Renewed-Fuel, lc_fuel, qs-fuelstations, cdn-fuel, ps-fuel, BigDaddy-Fuel, okokGasStation, x-fuel, LegacyFuel
Door locks ox_doorlock, qb-doorlock, cd_doorlock
Jobs your framework's jobs; ps-multijob on QBCore
Interaction ox_target or qb-target for the store clerk and payphones, else an E prompt
Weather and time any weather sync script

Scripts written for other phones (police, EMS, job and boss-menu scripts) keep working when they send mail, texts or notifications through events: the phone answers the common event names other phones use. A script that calls another phone's exports needs one change (see "No such export" in section 11).

  • A script that starts after the phone, or restarts, is picked up within about two seconds.
  • When a supported script is running but its exports differ from the ones the phone knows (an older or newer version), a yellow line names the script and what is missing, and the phone uses the next option.
  • Each area in Config.Providers has a comment beside it in config/config.lua: bank, voice, housing, garage, inventory, dispatch, keys, vehiclelock, fuel, doorlock, society (company accounts), statement (bank history), accounts (shared accounts) and more. For a script that isn't listed, write a provider: developers/custom_provider_template.lua.
  • Every script, and exactly how the phone talks to each one, is in Integrations.
  • These integrations are covered by automated tests built from each script's published API. They have not all been run on live servers with every one of these scripts.

Not supported

Not supported, and why: nui_doorlock (no server-side way to read or change a door, and no longer maintained); Chezza's inventory (no published documentation; on ESX it still works through ESX's own item functions); ak47_qb_inventory's own export (not documented, so QBCore's item functions are used). loaf_housing publishes no exports page, so its adapter could not be checked again: it stays in, and lists nothing if its exports have changed.

Housing, by script:

Housing script List and waypoint Lock Keys
qb-houses yes (needs oxmysql) yes give / take
qbx_properties yes (needs oxmysql) no list only
qs-housing yes no no
loaf_housing yes yes, with loaf_keysystem running give / take / list
vms_housing yes no give / take / list
rtx_housing yes yes give / take / list
ps-housing yes (needs oxmysql) no (its door lock script handles the doors) give / take / list
bcs_housing yes yes take / list (give in its own menu)
nolag_properties yes yes give / take / list
esx_property yes, with lock state in its own menu list

Company management (the Services app)

Every employee of a Config.Services company gets a duty switch. Boss grades also get the employee list, and can offer jobs, promote, demote, fire and use the company account. Every action is checked on the server, and a boss can only manage grades below their own.

Hiring is an offer the player accepts. Nobody gets a job they didn't agree to, and nobody can be hired from across the map:

  1. The boss opens Services > Your Company > Hire. Players within 8 m who are not in the company are listed; Offer Job sends the offer. A typed player ID must also be within 8 m.
  2. The player gets a notification that opens the offer, with Accept and Decline. The starting grade is the company's lowest.
  3. On Accept the server checks again that the boss still manages the company and that the two are still within 8 m, then sets the job. The boss is told either way.

A player has one open offer at a time. An offer lapses after 2 minutes, or when either player leaves. Offers and hires go to the activity log.

Garage: car photos, locks, positions

  • Photos of every car, add-on cars included: in game, with the phone.admin ace, run /phonecarphotos (cars with no photo yet), /phonecarphotos all (every car again) or /phonecarphotos <model>. Every vehicle is photographed against the sky, cut out and saved through the phone's media store (needs screenshot-basic), about a second each. Backspace or Esc stops it. Without a photo, players see the official picture (Config.Garage.imageUrl), then a drawing. Run it again after adding cars.
  • Lock / Unlock from the app (Config.Garage.remoteLock) uses qbx_vehiclekeys or Renewed-Vehiclekeys when running, and the game's own lock otherwise, which is what qb-vehiclekeys, wasabi_carlock, MrNewbVehicleKeys, cd_garage and similar read. For another lock script, register a provider in bridge/server/vehiclelock.lua (example inside).
  • Directions to a garage need its position: from your garage script, or Config.Garage.garages. Impound lots: Config.Garage.impounds.
  • Config.Providers.garage forces one garage script. For an in-house one, see Custom Garage.

Switching from another phone

  1. Remove the old phone first: take its folder out of resources and delete its ensure line.
  2. Scripts that use the common phone events (mail, texts, notifications, invoices) need nothing: the phone answers those event names itself.
  3. Scripts that call another phone's exports by name get No such export in the console. Switch those calls to exports.phone:.... The matching calls (SendMail, SendMessage, Notify, SendBill, DispatchAlert ...) are in Exports, usually one line per call.
  4. Bring your players' data across with phoneimport in the server console. Run phoneimport --dry-run first to see what would be copied, then phoneimport. Players keep their phone numbers, and contacts, calls, chats, photos and more come across where the old phone had them. The old tables are only read, and a second run never duplicates anything. Which old phones it reads, and exactly what comes across from each, is in Importing Data.

The old phone's tables that share a name with this phone's are renamed to old_<name> at first start (section 2). Nothing is deleted. What does not carry over: direct writes into another phone's own tables, mail and notification buttons, texts from a script to a player who is offline (delivered live only), attachments on script texts, and opening apps by script.

Other scripts: HUD and dispatch scripts that read the common state bag names (phoneOpen, phoneNumber, onCallWith, speakerphone, flashlight ...) keep working. phone_api in the server console prints the add-on API; Custom Apps shows how to add your own app.