Version 1.49.0
Highlights
- Improved society-account compatibility so supported banking providers can validate existing company accounts before issuing invoices or creating jobs.
- Added NPWD phone-number integration and explicit options for servers without an external phone or vehicle-key system.
- Added pma-voice announcement support so compatible microphone systems can extend a speaker's local voice range and restore normal proximity when the announcement ends.
- Added optional VISN ARE and custom medical-reset integrations for compatible resources that clear external injury state after reviving a player.
Notable Changes
- Fixed an issue where ESX item registration or refresh used an outdated item catalogue or bypassed the framework's item owner.
- Fixed an issue where ESX characters without an assigned job interrupted member counts.
- Fixed an issue where hunger or thirst reductions were not applied by ESX Legacy Addons 1.16 or newer.
- Fixed an issue where QB or Qbox vehicle ownership checks accepted another character's vehicle from the same account.
- Improved Wasabi job-account setup while preserving existing accounts and balances.
- Improved supported banking payments and account investigations with consistent account names, confirmed provider results and accurate capability limits.
- Fixed an issue where license availability, removal results or catalogue labels did not match the selected provider.
- Fixed an issue where vehicle-key grants or removals missed the matching nearby vehicle, the QB key provider started late or MK keys could not be removed.
- Fixed an issue where some AK47, CD and VMS garage actions used the wrong Qbox player access, or RX plate changes did not reach the stored vehicle.
- Fixed an issue where RTX or Rx housing entrance lookups failed for valid occupants.
- Added missing TGIANN global vehicle interactions and corrected target-provider readiness checks.
- Fixed an issue where cancelling HEX progress could report completion or leave help prompts visible after a resource stopped.
- Fixed an issue where a database update tried to add a column that another startup operation had already created.
- Fixed an issue where company payments using qb-banking could remain unconfirmed after the provider had already changed the account balance.
- Improved QB company-account transactions with balance checks before withdrawals and payment references passed to the banking provider.
Other Changes
- Fixed an issue where SD Phone could not load its required ox_lib client modules or SD Tablet used an incompatible close action.
- Fixed an issue where Qbox phone-number changes or native vRP inventory operations did not use the expected provider contract.
- Improved automatic provider selection for Zyke garages, ESX inventory, licenses and installations using native fuel or marker interactions.
- Fixed an issue where DS-ServerCreator garage selection, explicit Hex inventory selection or ESX billing detection selected the wrong integration.
- Fixed an issue where Job Creator version checks used the resource name instead of its release repository.
Changed Files
sky_base/config/config.luasky_base/config/framework/esx.luasky_base/config/framework/qb.luasky_base/config/framework/qbox.luasky_base/config/integration/banking/_init.luasky_base/config/integration/banking/ak47.luasky_base/config/integration/banking/apex.luasky_base/config/integration/banking/bablo.luasky_base/config/integration/banking/codem-supreme-banking.luasky_base/config/integration/banking/companymanager.luasky_base/config/integration/banking/crm.luasky_base/config/integration/banking/custom.luasky_base/config/integration/banking/devmosaic.luasky_base/config/integration/banking/esx.luasky_base/config/integration/banking/fd.luasky_base/config/integration/banking/groot.luasky_base/config/integration/banking/hex.luasky_base/config/integration/banking/jaksam.luasky_base/config/integration/banking/kartik.luasky_base/config/integration/banking/okok.luasky_base/config/integration/banking/oxlyn.luasky_base/config/integration/banking/pc.luasky_base/config/integration/banking/qb.luasky_base/config/integration/banking/qs.luasky_base/config/integration/banking/renewed.luasky_base/config/integration/banking/retro.luasky_base/config/integration/banking/rx.luasky_base/config/integration/banking/sky.luasky_base/config/integration/banking/synz.luasky_base/config/integration/banking/tgg.luasky_base/config/integration/banking/wasabi.luasky_base/config/integration/billing/_helpers.luasky_base/config/integration/billing/apex.luasky_base/config/integration/billing/codem.luasky_base/config/integration/billing/codemv2.luasky_base/config/integration/billing/companymanager.luasky_base/config/integration/billing/corem.luasky_base/config/integration/billing/custom.luasky_base/config/integration/billing/esx.luasky_base/config/integration/billing/fd.luasky_base/config/integration/billing/groot.luasky_base/config/integration/billing/hex.luasky_base/config/integration/billing/jacksam.luasky_base/config/integration/billing/lore.luasky_base/config/integration/billing/nass_billing.luasky_base/config/integration/billing/okok.luasky_base/config/integration/billing/quasar.luasky_base/config/integration/billing/retro.luasky_base/config/integration/billing/rxbilling.luasky_base/config/integration/billing/sky.luasky_base/config/integration/billing/synz.luasky_base/config/integration/billing/tgg.luasky_base/config/integration/billing/vivum.luasky_base/config/integration/billing/vms.luasky_base/config/integration/billing/wasabi.luasky_base/config/integration/fuel/cdn.luasky_base/config/integration/fuel/hex.luasky_base/config/integration/fuel/lc.luasky_base/config/integration/fuel/legacy.luasky_base/config/integration/fuel/msk.luasky_base/config/integration/fuel/myFuel.luasky_base/config/integration/fuel/native.luasky_base/config/integration/fuel/okokGasStation.luasky_base/config/integration/fuel/ox.luasky_base/config/integration/fuel/qb.luasky_base/config/integration/fuel/qs-fuelstation.luasky_base/config/integration/fuel/rcore.luasky_base/config/integration/fuel/stg-van.luasky_base/config/integration/fuel/xfuel.luasky_base/config/integration/garage/ak47.luasky_base/config/integration/garage/bp.luasky_base/config/integration/garage/cd.luasky_base/config/integration/garage/codem.luasky_base/config/integration/garage/esx.luasky_base/config/integration/garage/hex.luasky_base/config/integration/garage/jg.luasky_base/config/integration/garage/msk.luasky_base/config/integration/garage/my.luasky_base/config/integration/garage/okok.luasky_base/config/integration/garage/op.luasky_base/config/integration/garage/op_v3.luasky_base/config/integration/garage/qb.luasky_base/config/integration/garage/qbox.luasky_base/config/integration/garage/quasar.luasky_base/config/integration/garage/rx.luasky_base/config/integration/garage/vms.luasky_base/config/integration/garage/ws.luasky_base/config/integration/garage/zyke_garages.luasky_base/config/integration/helpnotify/17mov_Hud.luasky_base/config/integration/helpnotify/ZSX_UIV2.luasky_base/config/integration/helpnotify/aty_ui.luasky_base/config/integration/helpnotify/brutal_textui.luasky_base/config/integration/helpnotify/codem-supreme-hud.luasky_base/config/integration/helpnotify/codem-textui.luasky_base/config/integration/helpnotify/custom.luasky_base/config/integration/helpnotify/default.luasky_base/config/integration/helpnotify/esx.luasky_base/config/integration/helpnotify/esx_textui.luasky_base/config/integration/helpnotify/hex.luasky_base/config/integration/helpnotify/jg-textui.luasky_base/config/integration/helpnotify/lation_ui.luasky_base/config/integration/helpnotify/msk_core.luasky_base/config/integration/helpnotify/okokTextUI.luasky_base/config/integration/helpnotify/ox_lib.luasky_base/config/integration/helpnotify/prims_hud.luasky_base/config/integration/helpnotify/qb.luasky_base/config/integration/helpnotify/qbox.luasky_base/config/integration/helpnotify/qs-textui.luasky_base/config/integration/helpnotify/risk-notify.luasky_base/config/integration/helpnotify/sky_hud.luasky_base/config/integration/helpnotify/wasabi_uikit.luasky_base/config/integration/helpnotify/zenit_hud.luasky_base/config/integration/housing/_init.luasky_base/config/integration/housing/esx_property.luasky_base/config/integration/housing/nolag.luasky_base/config/integration/housing/qbx_properties.luasky_base/config/integration/housing/qs.luasky_base/config/integration/housing/rtx.luasky_base/config/integration/housing/rx.luasky_base/config/integration/housing/sn.luasky_base/config/integration/housing/vms.luasky_base/config/integration/inventory/ak47.luasky_base/config/integration/inventory/codem.luasky_base/config/integration/inventory/codemv2.luasky_base/config/integration/inventory/core.luasky_base/config/integration/inventory/jaksam.luasky_base/config/integration/inventory/jpr.luasky_base/config/integration/inventory/native/esx.luasky_base/config/integration/inventory/native/qb.luasky_base/config/integration/inventory/native/qbox.luasky_base/config/integration/inventory/native/vrp.luasky_base/config/integration/inventory/one.luasky_base/config/integration/inventory/origen.luasky_base/config/integration/inventory/ox.luasky_base/config/integration/inventory/ox/usable.luasky_base/config/integration/inventory/ps.luasky_base/config/integration/inventory/qb-inv.luasky_base/config/integration/inventory/qs.luasky_base/config/integration/inventory/smx.luasky_base/config/integration/inventory/tgiann.luasky_base/config/integration/license/_helpers.luasky_base/config/integration/license/ak47.luasky_base/config/integration/license/bit.luasky_base/config/integration/license/codem.luasky_base/config/integration/license/cs.luasky_base/config/integration/license/custom.luasky_base/config/integration/license/esx.luasky_base/config/integration/license/main.luasky_base/config/integration/license/papa.luasky_base/config/integration/license/qb.luasky_base/config/integration/license/qbox.luasky_base/config/integration/license/quasar.luasky_base/config/integration/license/standalone.luasky_base/config/integration/license/stg-walletv2.luasky_base/config/integration/license/vms.luasky_base/config/integration/medical/custom.luasky_base/config/integration/medical/none.luasky_base/config/integration/medical/visn_are.luasky_base/config/integration/notification/17mov_Hud.luasky_base/config/integration/notification/RxNotify.luasky_base/config/integration/notification/Venice-Notification.luasky_base/config/integration/notification/ZSX_UIV2.luasky_base/config/integration/notification/aty_ui.luasky_base/config/integration/notification/aty_uikitv2.luasky_base/config/integration/notification/brutal_notify.luasky_base/config/integration/notification/codem-supreme-notification.luasky_base/config/integration/notification/core_notify.luasky_base/config/integration/notification/cp_notify.luasky_base/config/integration/notification/cs_hud.luasky_base/config/integration/notification/esx.luasky_base/config/integration/notification/esx_notify.luasky_base/config/integration/notification/frkn-uikit.luasky_base/config/integration/notification/hex.luasky_base/config/integration/notification/lation_ui.luasky_base/config/integration/notification/msk_core.luasky_base/config/integration/notification/mythic_notify.luasky_base/config/integration/notification/okokNotify.luasky_base/config/integration/notification/ox_lib.luasky_base/config/integration/notification/prims_hud.luasky_base/config/integration/notification/prism_uipack.luasky_base/config/integration/notification/qb.luasky_base/config/integration/notification/qbox.luasky_base/config/integration/notification/qs-interface.luasky_base/config/integration/notification/risk-notify.luasky_base/config/integration/notification/rtx_notify.luasky_base/config/integration/notification/sky_hud.luasky_base/config/integration/notification/sky_notify.luasky_base/config/integration/notification/vms_notifyv2.luasky_base/config/integration/notification/wasabi_notify.luasky_base/config/integration/notification/wasabi_uikit.luasky_base/config/integration/notification/zenit_hud.luasky_base/config/integration/phone/17mov.luasky_base/config/integration/phone/client/sd.luasky_base/config/integration/phone/client/sky_phone.luasky_base/config/integration/phone/codem.luasky_base/config/integration/phone/d.luasky_base/config/integration/phone/esx.luasky_base/config/integration/phone/gks.luasky_base/config/integration/phone/lb-unique.luasky_base/config/integration/phone/lb.luasky_base/config/integration/phone/none.luasky_base/config/integration/phone/npwd.luasky_base/config/integration/phone/okok.luasky_base/config/integration/phone/qb.luasky_base/config/integration/phone/qs.luasky_base/config/integration/phone/roadphone.luasky_base/config/integration/phone/sd.luasky_base/config/integration/phone/sky_phone.luasky_base/config/integration/phone/yseries.luasky_base/config/integration/progress/17mov_Hud.luasky_base/config/integration/progress/ZSX_UIV2.luasky_base/config/integration/progress/aty_uikitv2.luasky_base/config/integration/progress/codem-supreme-hud.luasky_base/config/integration/progress/custom.luasky_base/config/integration/progress/esx.luasky_base/config/integration/progress/frkn-uikit.luasky_base/config/integration/progress/helpers/normalize.luasky_base/config/integration/progress/hex.luasky_base/config/integration/progress/jaksam.luasky_base/config/integration/progress/lation_ui.luasky_base/config/integration/progress/msk_core.luasky_base/config/integration/progress/mythic.luasky_base/config/integration/progress/ox.luasky_base/config/integration/progress/prism_uipack.luasky_base/config/integration/progress/qb.luasky_base/config/integration/progress/risk-notify.luasky_base/config/integration/progress/wasabi.luasky_base/config/integration/tablet/default.luasky_base/config/integration/tablet/lb.luasky_base/config/integration/tablet/roadpad.luasky_base/config/integration/tablet/sd.luasky_base/config/integration/target/_init.luasky_base/config/integration/target/custom.luasky_base/config/integration/target/ox.luasky_base/config/integration/target/qb.luasky_base/config/integration/target/tgiann.luasky_base/config/integration/target/vivum.luasky_base/config/integration/vehiclekeys/ak47.luasky_base/config/integration/vehiclekeys/brutal.luasky_base/config/integration/vehiclekeys/ic3d.luasky_base/config/integration/vehiclekeys/jc.luasky_base/config/integration/vehiclekeys/jota.luasky_base/config/integration/vehiclekeys/kiminaze.luasky_base/config/integration/vehiclekeys/mk.luasky_base/config/integration/vehiclekeys/mrnewb.luasky_base/config/integration/vehiclekeys/msk.luasky_base/config/integration/vehiclekeys/none.luasky_base/config/integration/vehiclekeys/qb.luasky_base/config/integration/vehiclekeys/quasar.luasky_base/config/integration/vehiclekeys/server/_init.luasky_base/config/integration/vehiclekeys/server/qb.luasky_base/config/integration/vehiclekeys/server/vehicles_keys.luasky_base/config/integration/vehiclekeys/vehicles_keys.luasky_base/config/integration/vehiclekeys/wasabi.luasky_base/config/integration/vehiclekeys/zyke_garages.luasky_base/config/integration/voice/_init.luasky_base/config/integration/voice/pma.luasky_base/config/integration/voice/saltychat.luasky_base/config/integration/voice/yaca.luasky_base/config/integration/weather/cd_easytime.luasky_base/config/integration/weather/custom.luasky_base/config/integration/weather/esx_weather.luasky_base/config/integration/weather/native.luasky_base/config/integration/weather/qb-weathersync.luasky_base/config/integration/weather/renewed.luasky_base/config/integration/weather/weathersync.luasky_base/config/locales/*sky_base/fxmanifest.luasky_base/source/*— delete and reinsert
Update InstructionsWhat to copy, what to keep and what to check1.48.01.49.0
Simplified update
Update sky_base safely
Read the complete update instructions in one continuous guide.
1. Back up and stop the server
Update sky_base from 1.48.0 to 1.49.0. If you are on an older version, complete its earlier update instructions first.
- Download
1.49.0and extract the ZIP on your computer. - Back up your installed
sky_basefolder, the other resources being updated and your game database. Keep the backup outside the server'sresourcesfolder. - Stop the whole server in txAdmin or your hosting panel. Complete the other installed Sky updates before starting it again.
2. Copy the matching files
Open the installed sky_base folder and the extracted 1.49.0 folder side by side.
- Delete the installed
source/folder and copy the complete newsource/folder into its place. - Replace
fxmanifest.luawith the file from the same download. - Replace the complete
config/locales/folder. If you edited translations, copy your own wording from the backup into the matching new entries; keep all new keys. - Replace
config/framework/esx.lua,qb.luaandqbox.luawith the matching new files. If you edited an adapter, start from its new file and transfer only your own changes from the backup. - Copy every file under
config/integration/listed in Changed Files to the same installed path, including the newmedical/custom.lua,medical/none.lua,medical/visn_are.lua,phone/none.lua,phone/npwd.luaandvehiclekeys/none.lua. For a customized adapter, start from the downloaded file and transfer your custom provider calls into it. Keep the downloaded loading guards and result handling, including the updatedbanking/qb.luaand voice adapters. Copying the entire old adapter back would discard the fixes. - Keep your existing
config/config.luaand all other unchanged configuration files. The settings step explains the optional new provider choices.
3. Keep your settings and review optional provider choices
All Base settings are file-based. /jobconfig does not manage them.
Open sky_base/config/config.lua. Keep your current framework, language and provider values. This release adds the optional medical selector; the other edits to this file update provider-list comments. Keep your configuration instead of replacing it wholesale.
New medical selector: inside the existing Config = { ... } table, find weather = .... Immediately after that line, add this entry if medical is missing:
medical = "auto",
Keep an existing medical entry instead of adding a duplicate. "auto" selects a started visn_are resource when Base starts, otherwise "none"; an older configuration without this entry also uses that automatic fallback. Set medical = "none", if you deliberately want no external injury-buffer reset. To select VISN ARE explicitly, use medical = "visn_are", and start visn_are before Base in server.cfg. Keep your existing revival resource in charge of reviving players. This adapter lets compatible consumers reset the external injury buffer after revival; it does not replace that medical resource. Unknown values fail startup, and an explicitly selected but stopped VISN ARE resource reports an error when a reset is requested. Choose "custom" only after implementing sky_base/config/integration/medical/custom.lua; the supplied template deliberately reports that it is not implemented.
Optional — NPWD: find phone = ... inside Config = { ... }. With phone = "auto",, start npwd and its framework bridge before Base; automatic detection can then select it. To select it explicitly, replace only that value with phone = "npwd",. This integration reads phone numbers; number changes, custom phone apps and call control are not supplied by NPWD's supported integration.
Optional — no external phone or key system: replace the existing phone value with phone = "none", and/or the existing vehiclekeys value with vehiclekeys = "none",. Keeping "auto" also selects these fallbacks when no matching provider is started. Do not add duplicate entries.
Only for a custom integration you wrote: update your customized files against the downloaded templates at the same paths, especially config/integration/banking/custom.lua, config/integration/license/custom.lua and config/integration/progress/custom.lua. Keep your existing selected provider. Banking must supply its read-only account probe; license methods are now bound directly by the selected adapter. Finish this integration comparison before starting the server.
Optional — announcement consumers: keep your existing voice selection. Compatible pma-voice microphone/announcement resources can use the new scoped announcement support; Base adds no new announcement setting to config/config.lua. Start pma-voice before Base. SaltyChat and YACA do not provide this announcement API, so installing Base does not require changing your voice provider. If you enable an announcement consumer, avoid combining it with another script that replaces pma's proximity-check function: this integration restores pma's standard check when cleared.
Only for developers integrating announcements or medical resets: the client call Sky.Voice.SetAnnouncementOverride(scopeId, range) accepts 1–300 metres with pma-voice. The consumer must check its result, keep ownership of its scope and call Sky.Voice.ClearProximityOverride(scopeId) when it finishes or stops. This controls recipients around the speaking player; microphone capture and speaker-position audio remain the consumer's responsibility. A medical owner can call Sky.Functions.ResetMedicalState() after completing its own revive; the VISN event dispatch is not a vendor-completion acknowledgement.
QB banking: keep your current banking provider and company-account names, with qb-banking started before Base when it is the selected backend. The corrected adapter confirms the provider's successful affected-row response and checks the balance before withdrawals. Legacy codem-bank automatic detection on QBCore also uses the QB bridge; the CodeM name alone does not identify every installed backend. No balance reset, account migration, retry or automatic release of old orders is included. For an existing order stuck in paying, have the owner or support compare the bank's ledger with that order before reconciling it. Do not blindly retry or refund a payment whose outcome is uncertain.
4. Preserve database, items and assets
No new Base SQL, item registration, inventory images or streamed models are required from 1.48.0 to 1.49.0. Keep all existing accounts, items and licenses. This update does not require deleting or resetting data.
If you are also updating Jobs Base, complete its separate database step. On older native ESX versions without runtime item-registration support, new item definitions still require the framework's normal database setup and a full server restart; this Base update does not change that requirement.
5. Start and check the server
- Start the framework, database connector and your selected providers first. Keep
ensure sky_basebeforeensure sky_jobs_baseand your installed Sky scripts inserver.cfg. - Start the server and check that Base reports
1.49.0. If updating Jobs Base too, use1.52.0and finish its update instructions before reopening the server. - Check the first startup/database error before continuing, then reconnect.
- Test the inventory, license actions, company banking and vehicle keys used on your server. For QB/Qbox, check ownership with the character who actually owns the vehicle. If using NPWD, check that the loaded character's phone number is available.
- If you use the QB banking bridge, make one small new company payment and check that the order completes and the account is debited once. Keep historical uncertain payments for ledger reconciliation rather than using them as a repeat-payment test.
- If a compatible resource uses the VISN reset bridge, complete its normal revive flow and check the player's injury state and UI. If you use pma announcements, test an announcement with another player in range, then confirm normal voice proximity returns when it ends. These optional integrations need acceptance with your actual provider and connected players.
Keep the backup until these checks pass.