Skip to content

feat: add qbx_bankrobbery event logging integration#25

Draft
Copilot wants to merge 2 commits intomainfrom
copilot/add-third-party-logging-qbx-bankrobbery
Draft

feat: add qbx_bankrobbery event logging integration#25
Copilot wants to merge 2 commits intomainfrom
copilot/add-third-party-logging-qbx-bankrobbery

Conversation

Copy link
Copy Markdown

Copilot AI commented Apr 2, 2026

Adds passive server-side event interception for qbx_bankrobbery, piping robbery lifecycle events into the SDK's ingest() pipeline. Follows the same pattern as ox-inventory.ts — no changes to the upstream resource required.

New file: features/logs/server/third-party/qbx-bankrobbery.ts

8 events intercepted, split by transport type:

onNet (player-sourced) — captures playerSource + playerName via global.source:

  • setBankStateqbx_bankrobbery.robbery.started (bankId, bankType)
  • callCopsqbx_bankrobbery.alarm.triggered (bankType, bankId, coords)
  • recieveItemqbx_bankrobbery.loot.received (bankType, bankId, lockerId)
  • SetStationStatusqbx_bankrobbery.powerStation.hit|restored (stationKey, isHit)
  • removeElectronicKitqbx_bankrobbery.item.electronicKitUsed
  • removeBankCardqbx_bankrobbery.item.bankCardUsed (cardNumber)

on (server-local, no player source):

  • setTimeoutqbx_bankrobbery.robbery.bigBankTimeoutStarted
  • SetSmallBankTimeoutqbx_bankrobbery.robbery.smallBankTimeoutStarted (bankId)

Config

Gated behind config.logs.qbxBankrobberyEvents.enabled (defaults false):

"qbxBankrobberyEvents": {
    "enabled": false,
    "dataset": "default"
}

Schema and valibot ConfigSchema updated accordingly. Import wired into logger.ts.

Original prompt

Overview

Add a new third-party logging integration for qbx_bankrobbery — the Qbox bank robbery resource. This follows the exact same pattern as features/logs/server/third-party/ox-inventory.ts.

Files to create/modify

1. Create features/logs/server/third-party/qbx-bankrobbery.ts

Intercepts server-side events from qbx_bankrobbery and logs them through the SDK's ingest() function.

Rules:

  • Gated behind config.logs.qbxBankrobberyEvents.enabled
  • Uses config.logs.qbxBankrobberyEvents.dataset
  • Uses _internal_RESOURCE: "qbx_bankrobbery" in _internalOpts
  • Log messages are lowercase dot-notation (e.g. "qbx_bankrobbery.robbery.started") — simple and searchable
  • Metadata is rich — include every contextually available field
  • Use global.source to capture source inside handlers
  • Import ingest from "../logger" and config from "~/utils/common/config"

Events to intercept:

qbx_bankrobbery:server:setBankState (via onNet) — handler receives (bankId: string | number)

  • message: "qbx_bankrobbery.robbery.started"
  • metadata: { playerSource, playerName: GetPlayerName(source.toString()), bankId, bankType: typeof bankId === 'number' ? 'small' : bankId }

qbx_bankrobbery:server:callCops (via onNet) — handler receives (type: string, bank: string | number, coords: number[])

  • message: "qbx_bankrobbery.alarm.triggered"
  • metadata: { playerSource, playerName: GetPlayerName(source.toString()), bankType: type, bankId: bank, coords }

qbx_bankrobbery:server:recieveItem (via onNet) — handler receives (type: string, bankId: string | number, lockerId: string | number)

  • message: "qbx_bankrobbery.loot.received"
  • metadata: { playerSource, playerName: GetPlayerName(source.toString()), bankType: type, bankId, lockerId }

qbx_bankrobbery:server:SetStationStatus (via onNet) — handler receives (key: string, isHit: boolean)

  • message: isHit ? "qbx_bankrobbery.powerStation.hit" : "qbx_bankrobbery.powerStation.restored"
  • metadata: { playerSource, playerName: GetPlayerName(source.toString()), stationKey: key, isHit }

qbx_bankrobbery:server:removeElectronicKit (via onNet) — no params

  • message: "qbx_bankrobbery.item.electronicKitUsed"
  • metadata: { playerSource, playerName: GetPlayerName(source.toString()) }

qbx_bankrobbery:server:removeBankCard (via onNet) — handler receives (number: number)

  • message: "qbx_bankrobbery.item.bankCardUsed"
  • metadata: { playerSource, playerName: GetPlayerName(source.toString()), cardNumber: number }

qbx_bankrobbery:server:setTimeout (via on — server-local AddEventHandler, no source) — no params

  • message: "qbx_bankrobbery.robbery.bigBankTimeoutStarted"
  • metadata: {} (no source info available)

qbx_bankrobbery:server:SetSmallBankTimeout (via on) — handler receives (bankId: string | number)

  • message: "qbx_bankrobbery.robbery.smallBankTimeoutStarted"
  • metadata: { bankId }

2. Modify features/logs/server/logger.ts

Add the import after existing third-party imports:

import './third-party/qbx-bankrobbery'

3. Modify config.json

Add inside "logs":

"qbxBankrobberyEvents": {
    "enabled": false,
    "dataset": "default"
}

4. Modify config.schema.json

Add schema entry for qbxBankrobberyEvents in properties.logs.properties and in the required array:

"qbxBankrobberyEvents": {
    "description": "qbx_bankrobbery events configuration.",
    "type": "object",
    "properties": {
        "enabled": {
            "description": "Enable qbx_bankrobbery events to be logged.",
            "type": "boolean",
            "default": false
        },
        "dataset": {
            "description": "Dataset to use for qbx_bankrobbery events.",
            "type": "string",
            "default": "default"
        }
    },
    "default": { "enabled": false, "dataset": "default" }
}

Notes

  • onNet = RegisterNetEvent (client triggers server), on = AddEventHandler (server-local)
  • qbx_bankrobbery:server:setTimeout and qbx_bankrobbery:server:SetSmallBankTimeout are server-local TriggerEvent calls with no player source — do NOT attempt to use global.source for them
  • Do NOT import anything from qbx_bankrobbery — only listen passively
  • Follow the code style from ox-inventory.ts

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: How should I integrate these qbox FiveM resources into my fivemanage/sdk resource to handle logging for these qbox FiveM resources. I'm trying to create a large SDK that supports logging for different FiveM frameworks and I need to intercept FiveM events from other resources and log data.

Can you create a little plan of what's possible from what I just added of repos here?

Assistant: Now I have a thorough picture of all repos. Here's the integration plan:


Integration Plan: Qbox → `fiv...

This pull request was created from Copilot chat.

Copilot AI changed the title [WIP] Add third-party logging integration for qbx_bankrobbery feat: add qbx_bankrobbery event logging integration Apr 2, 2026
Copilot AI requested a review from itschip April 2, 2026 01:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants