Jixryo Computers

Desk computers placed anywhere and work laptops for every job and gang. Organizations with roles, hiring, laptops, payroll, doors, messages and files, and a City Hall that opens new ones.

Version 0.1.1 Updated See it on its script page

On this page

Jixryo Computers gives every job and gang in the city its computers: desk computers staff place anywhere, and work laptops issued to members. Every qbx_core job and gang is an organization run from them, with roles on top of the grades, hiring by offer, laptops, payroll, doors, messages and files, and City Hall opens new organizations as new qbx jobs. The server decides everything; the page only shows what the server sent, and every call is checked again.

What players get

  • Desk computers. Sit down on the chair, pull up to the desk (the chair rolls in), and the view moves onto the monitor itself. Its desktop is drawn on the glass with the room around it, and your mouse works on it. It plays GTA Online's CEO office desk set as a networked scene, so everyone sees you sit, the chair roll in and you lean back. Anyone may sit; only the organization's people and city staff get its desktop, anyone else a locked screen.
  • Laptops. A laptop is an item. Using it while facing a table, your character takes the bag off, sets the laptop on the table and opens it (the Pacific Standard hack set, as a networked scene), and its desktop comes up on the laptop's own screen at once, or the locked screen when it is not yours. Esc steps back, then E uses it again and G packs it away. Getting into a vehicle, ragdolling or dying packs it away at once, and so does the server when the laptop is revoked or given away. The table must be within 12 cm of the height the animation was made for. Its battery is only shown.
  • Organizations. Every qbx job and gang (not unemployed or none). Membership and grades are qbx_core's own, so every script that checks jobs keeps working. On top of the grade sits a role: the owner (the person City Hall named; until then whoever holds the top grade, if it is a boss grade), managers (qbx boss grades) and employees. The owner may do everything; a manager what the owner allows (hire, let go, laptops, doors, cameras and announcements by default; also change grades, run payroll and spend from the account when given); nobody acts on themselves or on the owner, managers act on employees only, and a manager gives grades below their own.
  • Hiring. By State ID, or someone standing beside you. Only those who may hire can look a State ID up. The person gets the offer on their own screen, now or the next time they come into the city, and joins when they accept. Someone with no job starts working there at once. An offer runs out after 7 days.
  • Laptops issued. One active laptop per member, within the organization's allowance (10 by default, set at City Hall). A new laptop goes into the holder's pockets if they stand beside you, else into yours; if they are away it waits for them. A revoked or lost laptop opens to a locked screen, as does someone else's. Letting someone go revokes theirs.
  • Staff and payroll. Hours on duty are counted from qbx_core's duty state; members see their own week. Payroll is off by default, since qbx_core already pays everyone on duty every paycheck. Turned on, it pays each member's hours this week at their grade's payment from the organization's account (Jixryo Bank); someone away is paid when they come back.
  • Doors. The organization's ox_doorlock doors (doors whose groups name it). You lock and unlock those your grade opens; managers with the doors power can do every one. A door changed from anywhere shows on every open screen.
  • Account. Jixryo Bank's balance and latest statement lines for the job or gang. Moving money is the Bank's; the Bank app opens from here when it is on the computer.
  • Messages. General, Announcements (posted by those who may) and Managers. The last 200 of each are kept.
  • Files. Folders and notes. A note's writer, managers and the owner change it, and a folder goes once it is empty.
  • Other apps. The Bank (everyone), Cameras (those with the cameras power) and the MDT (police organizations) open in a computer's window when their resources run, and any resource can add its own page.

What staff get

  • City Hall, for city staff (group.god and group.admin): every organization with its owner and counts. New opens a qbx job (a gang for gangs) with 5 grades from Config.newOrg, registered with CreateJobs on every start; qbx_core's jobs.lua is never written. The owner goes on the top grade and gets a manager laptop. Changing one: the owner (someone already in it), the mark, the colour, business or government, and the laptop allowance. Every City Hall change is audited.
  • Placing desk computers with /computers: look at a monitor and press E, or press G to bring one (pick the model, set it down where you look, scroll to turn it, E places it); the same for the chair; then whose computer it is and its name. Only models the computers know work: their glass and their seat were measured from the game files (30 monitors and 31 office chairs in shared/models.lua). The map's own chair at that spot is hidden and replaced by the computer's own. Computers near you changes whose a computer is, renames it or removes it.
  • Staff on any computer. City staff get any organization's desktop and act as its owner there; every such change is audited.
  • Version 0.1.1 runs what happens on login (the duty clock, payroll that waited, job offers, laptops made while away) from qbx_core's server-side QBCore:Server:PlayerLoaded. 0.1.0 listened to the event players' games send, which FiveM never passed to this resource, so none of it ran.
  • Known limits, from the README: the laptop's table height comes from the animation's own offsets, so laptops that float or sink in game need measuring there. Cameras opened on a computer cannot go live while you are on the screen (Jixryo Cameras refuses while another camera is showing); watch live from the tablet. Hosted pages like the MDT and the Bank work by request on a computer and do not push updates to it. On qbx_core 1.23.0, changing an offline member's grade or letting them go leaves one extra event handler in qbx_core each time; harmless at normal use, gone after a qbx_core restart.

Install

  1. What it replaces. Nothing by name. It sits on qbx_core's own jobs, gangs and grades, so every script that checks jobs keeps working beside it.

  2. Order. It depends on ox_lib, oxmysql, qbx_core, ox_inventory and Jixryo Core, and uses ox_target (the Jixryo fork, for the chair's Sit down), ox_doorlock (Doors), Jixryo Bank (Account and payroll), Jixryo Cameras (Cameras) and Jixryo MDT (the MDT at police computers) when they run. Start it after them all.

    server.cfg
    ensure ox_target
    ensure ox_doorlock
    ensure jixryo_core
    ensure jixryo_bank
    ensure jixryo_security
    ensure jixryo_mdt
    ensure jixryo_computers
  3. The laptop item. The Jixryo ox_inventory fork has it (data/items/jackson.lua); upload the fork with this resource. On any other ox_inventory, add it to an item file; each laptop's name and description come from its metadata (for example "LS Customs laptop" and "LS Customs · Jordan Hale · LT-0042").

    lua
    ['work_laptop'] = {
        label = 'Work Laptop',
        weight = 2500,
        stack = false,
        close = true,
        description = 'A work laptop. It opens only for the person it was issued to.',
        client = { image = 'laptop.png', export = 'jixryo_computers.useLaptop' },
    },
  4. Database. The tables make themselves on the first start, as one Jixryo Core migration step: jixryo_comp_orgs, _laptops, _invites, _log, _messages, _docs, _hours, _payouts and _stations.

  5. City staff are group.god and group.admin (Config.staff). They get City Hall and /computers.

  6. Restart the whole server the first time, so every resource sees the new item and the computers' jobs.

How other scripts' calls behave

  • It answers as itself only. Its exports live under jixryo_computers. Membership lives in qbx_core's player_groups, so a script that asks qbx_core about a player's job gets the same answer the computers work from.
  • qbx_core. It reads jobs, gangs and members, puts people on grades and takes them off (AddPlayerToJob, AddPlayerToGang, RemovePlayerFromJob, RemovePlayerFromGang, the primary job or gang for someone with none), registers City Hall's organizations with CreateJobs and CreateGangs without committing, and listens for its job, gang, duty and load events. When qbx_core restarts, City Hall's organizations are registered again.
  • ox_doorlock. Doors are read with getAllDoors and getDoor, switched with setDoorState, and ox_doorlock:stateChanged refreshes the screens of the organizations that own the door.
  • Jixryo Bank. The account's balance and payroll go through GetGroupBalance and RemoveGroupMoney; the statement's last 25 lines are read from the Bank's own tables, read only.
  • Hosted pages. Config.hosted puts other resources' pages on the desktop without a call from them: the Bank for everyone, Cameras for the cameras power, the MDT for police organizations. A page written for the tablet's app frame works here as it is.
  • Jixryo Phone reads this resource's stations table so every desk computer is a phone charger.
  • It uses Jixryo Core's permission, validation, rate limit, inventory, player, HUD and audit modules, ox_inventory's slots and ox_target's zones.
  • Who sits where is published to every game as the global state jxcSeats.

Its own API

Client exports:

ExportWhat it does
AddApp({ id, name, ui, icon?, orgs?, roles?, devices? })Puts your page on the computers' desktops. id is letters, digits, _ and - (up to 32), name 1 to 24 characters, ui and icon pages served from a resource (https://cfx-nui-<resource>/...). orgs limits it to those organizations, roles to owner, manager or employee, devices to desk or laptop. Returns true, or false and why. The page asks its own resource for everything, and that resource checks the player. Apps go when their resource stops.
RemoveApp(id)Takes it off; only the resource that added it.
SendAppMessage(id, payload)Pushes into your page while a desktop is up; only the resource that added it.
useLaptopThe laptop item's client export; ox_inventory calls it when the item is used.

Events:

EventDirectionWhat it carries
jixryo_computers:client:changedto the organization's open screenswhat changed (members, laptops, powers, messages, files, doors, account, org); each page fetches what it shows again
jixryo_computers:client:kickedto one playerthe screen was closed from the server, with why
jixryo_computers:client:offerto one playera job offer to answer on their own screen
jixryo_computers:client:stationsto every gamethe desk computers
jxcSeatsglobal statewhich chair is taken by whom

The screen's own calls go through one server callback (jixryo_computers:server:act, with the action's name), and the laptop, chair, station and offer calls have their own; they are not an API, and the server checks every one.

Commands and keybinds

Command or keyWhoWhat it does
/computerscity staffPlace a computer, or the computers near you (change whose it is, rename, remove)
E, G, Backspace while placingcity staffE uses the monitor or chair you look at, G brings one (scroll turns it, Shift for finer steps, E places it, Backspace goes back), Backspace cancels
Third eye on the chair, Sit downanyoneSits down; the pill shows "Sitting down…"
Seated: G, F, Ethe person in the chairStand up, fidget, pull up to the desk
Pulled up: G, E, Fthe person in the chairStand up, lean back, use the computer
On the screen: EscSteps back to the desk
Using the laptop itemits holder, facing a tableSets it up and opens it
Laptop away from the screen: Esc, E, Gits holderEsc steps back, E uses it again, G packs it away

Configuration

config.lua:

KeyDefaultWhat it does
item'work_laptop'The laptop item, one per person, bound to its organization and holder
staffgroup.god, group.adminCity staff: City Hall, the placer, any computer
skipunemployed, noneJobs and gangs that are no organization
governmenttypes leo, ems, gov, doj; jobs government, judgeWhich jobs are government offices; other jobs are businesses, gangs gangs
defaultPowershire, fire, laptops, doors, cameras, announceWhat managers may do until the owner changes it
laptopslimit 10, maxLimit 50, handRange 3.0Active laptops per organization, the most City Hall may allow, how close the holder stands to get it straight away
newOrg5 job grades (Trainee 50 to Owner 150, the top two boss grades), 5 gang grades (Associate to Boss), defaultDuty false, offDutyPay false, 8 coloursWhat City Hall opens
payrollenabled false, rate 1.0Payroll from the account; a grade's payment per hour on duty
messageskeep 200, length 400Messages kept per channel, and their length
fileskeep 300, name 40, text 4000Folders and notes per organization, name and text lengths
logkeep 300Log lines per organization
invitesdays 7An offer nobody answers goes away after this
stationsdrawDistance 30.0, sitDistance 2.2How near a desk computer gets its chair and props, and the server's check when someone sits
chairAnimsthe CEO office set (male and female), driver ex_prop_offchair_exec_01The sitting scene and the chair it was made for
laptopAnimthe Pacific Standard hack set, laptop hei_prop_hst_laptop, the heist bag, reach 1.4, tolerance 0.12The laptop scene, how far ahead a table is looked for, how far its height may differ
camerafov 42.0, fill 0.64, ease 650The camera in front of the glass: the screen's share of the view and the move's time
hostedBank (everyone), Cameras (cameras power), MDT (police, sheriff, bcso, sasp)Other resources' pages that open as apps

Security

  • One gate for every screen call. The session is re-checked (a laptop still in your pockets and still active; a desk computer with you still in its chair and at it), who you are in the organization is recomputed (grade and role), the call is rate limited and one runs at a time per player. An unknown action is refused, and a call that fails closes nothing and answers with an error.
  • A laptop's metadata is only a label. What it opens is read from the database every time: its holder, its status and whether they are still in the organization. Anyone else, a revoked or lost laptop, or a laptop whose organization is gone gets the locked screen, which says whose it is and why. A laptop handed away stops working at once. City staff open any organization's laptop.
  • Roles. The owner may do everything; a manager what the owner gave managers; an employee none of it. Only the owner makes or unmakes managers and changes what managers may do. Nobody acts on themselves or on the owner, managers act on employees only, grades go only below your own, and the top grade is the owner's. An employee laptop opens the employee desktop, whatever the holder's grade.
  • Hiring. The State ID is looked up only by those who may hire. The offer is accepted on the person's own screen, within 7 days, onto a grade that still exists.
  • Laptops respect the allowance and one per member; managers issue employee laptops to employees only, and only the owner revokes a manager laptop. Revoking closes the holder's open screen.
  • Messages and files. Channels by role, announcements by power, text cleaned and cut to length, the oldest trimmed. A note is changed or deleted by its writer, managers and the owner; a folder must be empty first.
  • Doors. Only the organization's own doors, each opened by grade or by the doors power, through ox_doorlock.
  • Money. The balance and statement show to the owner and to managers with the account or payroll power. Payroll needs the power, the setting on, the bank running and enough in the account.
  • City Hall is staff only, and the owner it names must already be a member. Every change is audited, as are payroll runs, placed, changed and removed computers, and anything city staff do on a computer of an organization they are not in.
  • Desk computers. Only staff place them, from known models, standing within 30 m, with the chair at the monitor's desk. One person per chair, within 2.2 m when they sit; standing up, leaving or the computer being removed frees it and closes the desktop.
  • The client never decides. It draws what the server sent and relays the page's calls.

Tests

Two suites in dev-tools/luarun/tests, sharing jixryo_computers.setup.lua (a real database with Jixryo Core's real validate, perm and db modules, qbx_core's jobs, gangs and player_groups, ox_doorlock and Jixryo Bank stood in). Both run on 2026-10-31.

SuiteResultWhat it covers
jixryo_computers.lua21 passed, 0 failedThe tables; organizations from jobs and gangs and their kinds; the owner rule; opening a laptop (holder, thief, revoked, lost, never set up, let go); an employee laptop for a manager; what each role sees; roles and grades; letting people go; hiring and offers; laptops issued, delivered late and revoked; powers; messages; files; doors; the account and payroll; the login path through qbx_core's server-side event; duty hours; City Hall; desk computers and their chairs; the session check on every call.
jixryo_computers.client.lua8 passed, 0 failedA stand-in player's game against the real server: the chair near you (the map's hidden, ours in its place, Sit down, taken for everyone); the sitting scene with the executive chair under the station's; the keys from sitting to the desktop and back; someone else's locked screen; the laptop set down at the scene's height, used, stepped back from and packed away; a table too high, too low or missing; the server closing an open laptop; a job offer answered on your screen.
bash
cd dev-tools/luarun
node run.mjs ../../jixryo_scripts/jixryo_computers tests/jixryo_computers.lua
node run.mjs ../../jixryo_scripts/jixryo_computers tests/jixryo_computers.client.lua

The README also records that the page is checked with dev-tools/nui/cdp-game.mjs.

Check it in game

  1. Start with the laptop item added. The console shows the database step applied once.
  2. /computers, Place a computer: pick a desk monitor (it outlines), then its chair, then your job. The map's chair swaps for the computer's own.
  3. Walk up and press E on Sit down: the pill, then the seated keys. E rolls the chair in, F moves the view onto the monitor with the desktop fitting its glass, Esc steps back, E leans back, G stands up. A second player sees all of it, and the chair moves for them too.
  4. At the desktop as the owner: Organization › Members, make an employee a manager, change a grade, let someone go. Offer someone beside you a job: they accept on their screen and are in the job. Issue a laptop to someone beside you: it lands in their pockets.
  5. Use the laptop at a table: the bag, the laptop out, the lid up, the desktop on its screen. Esc, E, Esc, G: packed away. At a counter that is too high: "That is too high to set it on."
  6. Someone else's laptop shows the locked screen with whose it is. Revoke a laptop while it is open: it closes and is packed away.
  7. Doors: lock and unlock a door of your job from the desk. ox_doorlock's door changes for everyone.
  8. City Hall as staff: New, with a State ID as owner. A new job exists (/setjob lists it) and its owner has a manager laptop. Restart qbx_core: the job is still there.
  9. The Bank and Cameras appear on the dock when those resources run, and open in a window.
Next step

Ready to look around?

Browse the suite, or paste your server.cfg and see what each script does to your server.