The handset runs here with sample data. Pick a colour, start serving from Hustle and answer the texts that come in. Nothing to install.
fivem.samueldev.shop/trapphone
sd-trapphone is a keypad burner phone for FiveM that runs a street business. Players serve corners, take drop-off orders, haggle by text, meet plugs and pay off crews, all from an early-2000s candybar handset with a colour screen, a d-pad and a full keypad. It comes in ten colours, each its own item with its own model in the hand, and it texts sd-phone both ways.
Download · Docs · Live demo · Store · Discord
Works together: sd-phone · sd-trapphone · sd-tablet · sd-computers
If you're enjoying sd-trapphone and want to support my work, consider picking up a script from Samuel's Development. Every purchase helps me keep building and improving free resources like this one.
The handset screens are captured from the page with sample data. Click an image for the full 1920×1080 version.
Tip
Running sd-phone? The two text each other. A burner's text lands in the smartphone's Messages under the burner's number, and a reply there comes back to the burner. Nothing to set up, and sd-phone is not required.
- A real handset. Messages, Contacts, Hustle, Turf, Status, a Worm game, ringtones and wallpapers, driven by a d-pad, two soft keys and a keypad. Mouse, keyboard and on-screen keys all work, and players can still walk and drive with it out.
- Corner sales. Start serving and customers text an offer while they walk over, or pull up in a car at a spot you mark. Accept, name your own price, or turn them down.
- Pitching and drop-offs. Walk up to anyone and offer, or take orders while driving and deliver to doors across the map.
- A name on the street. XP and levels per product are kept on the phone itself, so a stolen phone is a stolen business. Customers remember you, and good ones become named regulars.
- People. Plugs, a supplier, an informant, a launderer, a fixer and each crew's shot caller reach out as your name grows.
- Turf. Every area has money, a product it craves and often a crew. Sell on their block without paying and they come and ask. Kill enough of them and they riot.
- Back rooms. A money wash and a black market that open once you know the right person.
- Bagging up. Battery-powered scales break bricks and ounces into smaller bags.
- Heat. Snitches and witnesses bring the police through your dispatch resource.
Each colour is its own item. The item decides the faceplate on screen and the model in the hand.
| Item | Item | ||
|---|---|---|---|
trap_phone_graphite |
trap_phone_bubblegum |
||
trap_phone_chrome |
trap_phone_lime |
||
trap_phone_pearl |
trap_phone_cherry |
||
trap_phone_bling |
trap_phone_grape |
||
trap_phone_ice |
trap_phone_tangerine |
| Layer | Supported |
|---|---|
| Frameworks | QBCore, QBox, ESX (auto-detected) |
| Inventories | ox_inventory, qb-inventory, qs-inventory, tgiann-inventory and others through the bridge (auto-detected) |
| Target | ox_target, qb-target, qtarget |
| Dispatch | linden_outlawalert, cd_dispatch, fd_dispatch, ps-dispatch, qs-dispatch, core_dispatch, origen_police, codem-dispatch, tk_dispatch |
| Phone | sd-phone, optional: two-way texts |
| Languages | English, Simplified Chinese (Locale in configs/config.lua). Customer texts and names are set in configs/ |
Per-phone progress needs an inventory that can store item metadata. On one that cannot, progress is kept per character instead.
Download sd-trapphone.zip from the latest release and unzip it into your resources folder: it is the resource with its handset page already built, ready to drop in.
Important
Download the sd-trapphone.zip asset, not Source code (zip) or the green Code button. Those are the source, without the built handset: the phone would open to nothing until you build it yourself.
It needs ox_lib and oxmysql. Start them and your framework first:
ensure ox_lib
ensure oxmysql
ensure sd-trapphoneThe database tables create themselves. Then:
- Add the items from items.md to your inventory: the ten phones, scales, batteries, baggies and the product sizes. The icons are in
images/. - Go through
configs/. Prices, XP, stock and locations are inconfigs/server/, which never reaches a client.
Admins get /trapadmin (ace command.trapphone) to hand out phones, set XP, force a contact to reach out, set crew standing and reset a phone.
The full guide is at docs.samueldev.shop/resources/trapphone: installation, every config file, and the client and server exports with examples.
How the parts fit together, the page protocol and every payload shape are in docs/design.md.
The repository is the source: the built page (web/build) is not committed, and each release builds it into its zip. To run a clone, or to change the page, build it with Node.js (LTS):
cd web
npm ci
npm run dev # the handset in a browser, with sample data
npm run build # what the game serves (web/build)
npm run build:demo # the website's demo (web/build-demo): the handset alone, with a pretended streetA source zip unpacks to sd-trapphone-main: rename the folder to sd-trapphone, the name its exports are called by.
stream/ holds one model per colour (sd_trapphone_<colour>, about 4,700 triangles, texture embedded). They are built from the handset page itself, so the prop matches what is on screen:
- Capture
#prop=<colour>and#propback=<colour>from the page (seetools/make_textures.py). python tools/make_textures.pycomposes the textures and the inventory icons.blender --python tools/build_prop.py -- report.jsonbuilds and exports every colour. Needs Blender 5.x with the Sollumz extension.
lua tests/run.lua runs the offline checks for pricing, levels, zones, selling, drop-offs and dispatch under stock Lua 5.4.
GPL-3.0. The bundled typefaces are listed in THIRD_PARTY_NOTICES.md.




