Patch Notes for sk-burglary
Latest patch notes for both escrow and full source versions.
Update 3.6.2
Rep Cache, Carry System & Tier System
Rep Cache Bug Fix
- Fixed
AddRepForGroupandRemoveRepForGroupfallback cache usingdata.repwhenMySQL.prepare.awaitwithSELECT repreturns the rep value directly. Replaceddata.repwithdata. → Modifiedburglary:server:AddRepForGroupandburglary:server:RemoveRepForGroupinserver/main.lua.
Carry System Bug Fix
- Fixed carry system permanently stopping after entering an interior with a tool (screwdriver/axe) in hand.
PropFix()(called at the start ofTeleportToLocation) deleted the carry prop entity but never resetcarryState. Added stale carry state cleanup at the end ofPropFix()resets allcarryStatefields and stops animations/movement restrictions when the prop entity no longer exists. → ModifiedPropFix()inclient/carry.lua.
Tier System Refactor
The entire tier system has been refactored from a hardcoded 4 tier structure to a fully auto discovering system. New tiers can now be added by creating config files alone. This is especially beneficial for escrow users who cannot modify encrypted client/main.lua or server/main.lua.
Auto Discovery & Helpers
- Tiers are now automatically detected at startup by scanning for
Config.TX_Houseskeys (T1–T10). The discovered count is stored inConfig.DiscoveredMaxTiers. - Added
GetTierConfig(tier, key, default)— fetch anyConfig.TX_Keyvalue with an optional default. - Added
GetHighestTierConfig(key)— get the value from the highest tier that defines a given key. - RepLimits/RepPenalties for tiers beyond 4 automatically inherit values from the highest defined tier. → Modified
shared/init.lua.
Feature Flags
- Five new per tier config flags allow features previously exclusive to specific tiers to be toggled on/off for any tier:
Config.TX_ShowNearHint— Show a proximity hint near the houseConfig.TX_UseCustomAlarm— Play a custom alarm sound (requires xsound)Config.TX_UseUSBScene— Use a USB insertion scene for security disablingConfig.TX_AllowCopBreach— Allow police to breach this tier’s housesConfig.TX_UseScrambler— Use the Scrambler minigame for break-in → Added tohouses/tier1.luathroughhouses/tier4.lua.
Dynamic Lookup Functions
- All 12 lookup functions converted from static
[1]=Config.T1_X, ..., [4]=Config.T4_Xtables to dynamicConfig["T"..tier.."_X"]resolution:getHouseTable,getRandomHouseID,getInteriorTable,getRandomInteriorID,getRewardsTable,getJobAndQueueTime,getSecurityMinigame,getBreakInMinigame,getSafeMinigame,getRequiredItem,GetRequiredCopCount. GetTierChance()now returns a dynamically built table indexed by tier instead of 3 separate values.getRandomTier()loops dynamically from highest to lowest tier instead of checking hardcoded tier variables. → Modifiedclient/main.lua.
Hardcoded Tier Checks Replaced (~20 locations)
tier == 4for RequiredMemberCount → config-presence check viaGetTierConfig(tier, 'RequiredMemberCount').tier == 2 or tier == 3for near-hint →GetTierConfig(tier, 'ShowNearHint', false).tier > 1/tier < 2for alarm sound →GetTierConfig(tier, 'UseCustomAlarm', ...).tier == 3for USB scene →GetTierConfig(tier, 'UseUSBScene', false).tier < 4for sphere zone →not houseData.house.security_guards.tier == 4for keycard removal →GetTierConfig(tier, 'RemoveKeycardChance').Config.T4_GuardClothing/GuardFaceFeatures→GetTierConfig(tier, ...).Config.T4_OverrideGuardModel(3 locations) →GetTierConfig(tier, 'OverrideGuardModel').Config.T4_AxePrepItem,Config.T4_SecurityCardChance,Config.T4_LootGuardHintChance→GetTierConfig.for tier = 1, 3cop breach loop →for tier = 1, Config.DiscoveredMaxTierswithAllowCopBreachcheck.tier == 4for camera/guard checks →houseData.house.security_cameras/security_guardspresence checks. → Modifiedclient/main.lua.
Menu & Blip Fallbacks
- All three menu functions (
OpenDefaultJobMenu,OpenNewJobMenu,OpenOptionalJobMenu) changed fromfor tier = 1, 4tofor tier = 1, Config.DiscoveredMaxTiers. Tier icons and colors now fall back to defaults for tiers beyond 4. → Modifiedclient/menu.lua. CreateBlip()falls back to T4 blip style for tiers > 4.ShouldPedBeDeleted()andForceGuardCleanup()now check all tiers’OverrideGuardModel. ExtractedIsOverrideGuardModel()helper. → Modifiedclient/funcs.lua.
Server Side Tier Support
- Tier validation changed from
tier > 4totier > Config.DiscoveredMaxTiers. - Rep removal penalty and
getCooldownConfig()changed from static tables toGetTierConfig(tier, ...). → Modifiedserver/main.lua. getConfigTable()changed from static tables to dynamicConfig[string.format('T%s_%s', tier, key)]. → Modifiedserver/items.lua.
Migration Notes
- All existing configurations remain fully compatible and the refactored code produces the same behavior with the default 4 tier setup.
Update 3.6.1
Solo Rep Rewarding & Auto Holster Fixes
-
Fixed solo players not receiving reputation rewards. The
sourcevariable in theburglary:server:AddRepForGrouphandler was alwaysnil. → Modifiedburglary:server:AddRepForGroupinserver/main.lua. -
Fixed auto holster not working with
ox_inventory/ QBox. The nativeSetCurrentPedWeaponwasn’t really working withox_inventoryas it re-equips the weapon immediately, causing a loop of failed holster attempts andcant_carrynotification spam. Now usesox_inventory:disarmclient event whenox_inventoryis enabled, falling back to the native forqb-inventoryand others. → ModifiedautoHolsterWeapon()inclient/carry.lua. -
Fixed
autoHolsterWeaponfunction ordering. It was defined aftercanAttachPropwhich called it, causing a nil function error. MovedautoHolsterWeaponabovecanAttachProp. → Modified function order inclient/carry.lua.
Update 3.6.0
Reputation System Overhaul & Carry System Rewrite
Complete Reputation Security Overhaul
Server Side Validation
- All reputation calculations and modifications now happen server-side.
- New validation system with
Config.RepLimitstable defining min/max rep ranges for each action type and tier. - Added
burglary:server:AddRepForGroupevent - Server validates rep amounts and distributes to all group members. - Added
burglary:server:RemoveRepForGroupevent - Server calculates penalties and applies to group members. - Modified
burglary:client:AddValidatedRep- Now receives servernewTotalvalue instead of calculating locally. - Modified
burglary:client:RemoveValidatedRep- Now receives servernewTotalvalue. - Removed vulnerable
burglary:server:UpdateRepevent that accepted client-provided rep values.
Server Side Rep Tracking
- Added
playerRepCacheto maintain authoritative reputation state on the server. - Modified
loadPlayerRep()- Now caches rep server-side and sends values to clients. - Modified
updatePlayerRep()- Server directly updates database after validation. - Client
currentRepis now display only, fully synced with server’s value.
Group Reputation Distribution
- All group members inside the house now receive reputation rewards automatically.
- Updated
AddRepForReason(reason, tier, customRepRange)function infuncs.lua.
Rep Limits
- Moved
repRewardsfromfuncs.luatoConfig.RepLimitsinconfig.lua. - Added
Config.MaxCustomRepAllowed(default: 2,000) to cap custom task rep values. - Full validation for custom rep ranges - only
complete_taskcan use custom values. - Rep limit values scaled down to match new
RepPerLevelthresholds (e.g.breaking_inT1: 50-100, T4: 250-350). - Task rewards (
Config.TasksList) rebalanced to match (e.g. Kill A Jugg: 1,000-1,500 rep).
Power Curve Level Scaling System
Improved Progression Formula
- Changed from linear (
lvl * scaling) to a power curve (lvl^1.5 / maxLevel^1.5) for accelerating progression. - Modified
GetTierChance(lvl)inmain.lua- Now uses power curve scaling factor. - Configurable probability normalization via
Config.MaxTierChance(default: 0.85) caps total T2+T3+T4 chances to reserve a minimum for T1. - More significant tier chance improvements at higher levels.
Rebalanced Reputation Thresholds
Updated Config.RepPerLevel for accelerating difficulty curve (~206,500 total rep, ~100-120 runs to max):
- Level 1→2: 2,000 rep
- Level 2→3: 3,500 rep
- Level 3→4: 6,000 rep
- Level 4→5: 9,000 rep
- Level 5→6: 13,000 rep
- Level 6→7: 18,000 rep
- Level 7→8: 25,000 rep
- Level 8→9: 33,000 rep
- Level 9→10: 42,000 rep
- Level 10→Max: 55,000 rep (display only)
Tier 4 Job Selection Fixed
- Fixed
getRandomTier(lvl)function to properly include tier 4 in random job selection. - Modified selection logic in
main.luato check tiers in descending order: T4 → T3 → T2 → T1. - Tier 4 now properly scales with level progression as intended.
Rebalanced Tier Chances & Scaling
Updated tier configuration files with new base chances and power curve scaling factors. T3 and T4 now have 0% base chance, earned purely through level progression.
Added Config.RequireLevelForTier (default: true)
- When enabled, tiers are hard gated behind their
RequiredLevelsetting even whenLevelScalingis enabled. - A level 1 player cannot roll T3/T4 by chance. Set
falsefor more probability based selection. - Modified
getRandomTier(lvl)inmain.luato enforce tier gates.
Tier Distribution by Level (with RequireLevelForTier = true):
Level 1-3 (New Players):
- T1: 100% (T2/T3/T4 locked)
Level 4 (Unlocks T2):
-
T1: ~87% T2: ~13%
Level 7 (Unlocks T3):
-
T1: ~60% T2: ~23% T3: ~18%
Level 9 (Unlocks T4):
-
T1: ~15% T2: ~30% T3: ~25% T4: ~30%
Level 10 (Max Level):
-
T1: ~15% T2: ~30% T3: ~26% T4: ~30%
Updated Configuration:
- Tier 1: Base chance 1.0 (100%), no scaling - Always available as fallback
- Tier 2: Base chance 0.05 (5%), scaling factor 0.30 (was 0.03) - RequiredLevel: 4
- Tier 3: Base chance 0.0 (0%), scaling factor 0.30 (was 0.04) - RequiredLevel: 7
- Tier 4: Base chance 0.0 (0%), scaling factor 0.35 (was 0.047) - RequiredLevel: 9
Normalization (Config.MaxTierChance, default 0.85) activates at level 9+ when all tiers are unlocked, ensuring T1 always has at least 15% chance.
Reputation Penalty
Action Based Penalties
- New
Config.RepPenaltiestable inconfig.luadefines per reason, per tier penalty ranges as{min%, max%}. - Penalties are applied as a percentage of the player’s current rep, matching the existing
RepRemovalPercentformat. - Each penalty reason can be individually tuned or disabled by setting both values to 0.
Penalty Triggers:
breakin_failed- Failed the front door break-in minigame (default: 1-2% all tiers)alarm_triggered- Interior security alarm triggered for the first time via noise, gunshot, or anti-tamper (default: 1-4% depending on tier). Only fires once per burglary.safe_failed- Failed the safe cracking minigame (default: 1-3% depending on tier).player_downed- Player killed inside the house, triggering exterior teleport (default: 3-5% all tiers)lockdown_triggered- T4 CCTV lockdown activated (default: 4-6% T4 only, 0% T1-T3)
Server Handling
- Updated
burglary:server:RemoveRepForGroupto accept an optionalreasonparameter. - When a reason is provided and exists in
Config.RepPenalties, uses the reason specific penalty range. - Falls back to
T*_RepRemovalPercent(job cancellation penalty) when no reason is given. - Ranges set to
{0, 0}are skipped server-side.
Carry System Rewrite
Complete System Overhaul
- Rewrote the entire carry prop system with improved state management, reliability and performance.
- New
carryStatetable structure for cleaner state tracking. - Added
isAutoUpdateandisAttachingflags to prevent race conditions and duplicate attachments.
Per Item Animation Support
- Each carry prop can now have its own custom animation.
- Added
animDictandanimfields toConfig.CarryPropsentries. - Default animations: Box carry for normal items, jerrycan for tools.
Universal Auto Carry Monitor
- Removed inventory specific event listeners in favor of universal polling system.
- Auto carry now works with all inventory systems (
qb-inventory,ox_inventory,qs-inventory,jaksam-inventory). - Polling based detection every 500ms using existing
PlyHasItem()function. - Fixed carry props spawning on the floor/in the air when joining a server with a carry item in inventory. Added
playerReadyflag driven byQBCore:Client:OnPlayerLoadedto delay prop attachment, inventory monitoring, and animation monitoring until the player ped is fully loaded in.
Improved Weapon Handling
- Auto holster weapons when picking up carry items instead of blocking the action.
- Weapons are automatically holstered with proper wait for completion.
- Carry prop re-attaches after holstering if item still in inventory.
- Notification shown when weapon is holstered while carrying.
Ped Spawning & Target Fix
Bossman & Sellman Target Fix
- Fixed bossman and sellman targets not appearing on first join after a fresh server start.
- Ped creation now waits for
QBCore:Client:OnPlayerLoadedbefore requesting peds from the server, ensuring the target system (qb-target/ox_target) is fully initialized. - On resource restart, peds are created immediately via
LocalPlayer.state.isLoggedIncheck since the player is already loaded.
Code Changes
Removed Functions
- Removed
AddRep(amount)function - Replaced with server validatedAddRepForReason(). - Removed
GetRepPenalty(tier)function - Penalty calculation now handled server-side viaConfig.RepPenalties. - Removed legacy task rep logic from
GiveTaskRewards(). - Removed unused
validateRepAmount()function frommain.lua. - Removed
repRewardstable fromfuncs.lua- Data moved toConfig.RepLimits. - Removed inventory specific event listeners from carry system.
- Removed unused
tryAttachToPlayerfunction from carry system.
Modified Functions
- Modified
RemoveRep(tier)→RemoveRep(tier, reason)- Now accepts an optional reason string to select a penalty range fromConfig.RepPenalties. - Modified
triggerSecurityAlarms()- AddedwasAlreadyDetectedcheck so the alarm penalty only triggers once per burglary. - Modified
UnlockAndEnter(success)- CallsRemoveRepwith'breakin_failed'on minigame failure. - Modified
unlockSafe()callback - CallsRemoveRepwith'safe_failed'when safe cracking fails (key unlock unaffected). - Modified
TeleportOnDeath()- CallsRemoveRepwith'player_downed'before teleporting. - Modified
LockdownExterior()- CallsRemoveRepwith'lockdown_triggered'when CCTV lockdown activates. - Modified
burglary:server:RemoveRepForGroup- Accepts optionalreasonparam, looks upConfig.RepPenalties[reason][tier]or falls back toT*_RepRemovalPercent.
Files Modified
server/main.lua- Server-side validation, group distribution, rep tracking, tier validation, reason-based penalty lookupclient/main.lua- Client validation handlers, scaling formula, tier selection, penalty hooks at failure pointsclient/funcs.lua- NewAddRepForReason()helper functionclient/carry.lua- Complete rewrite with per item animations and universal auto carryclient/peds.lua- Added ready check for bossman/sellman target setupshared/config.lua- AddedConfig.RepLimits,Config.MaxCustomRepAllowed,Config.RequireLevelForTier,Config.MaxTierChance,Config.RepPenalties, updated rep thresholds & task rewardshouses/tier1.lua- Added T1 chance config (1.0, no scaling)houses/tier2.lua- Updated T2 chance (0.05) & scaling (0.30)houses/tier3.lua- Updated T3 chance (0.0) & scaling (0.30)houses/tier4.lua- Updated T4 chance (0.0) & scaling (0.35)
Migration Notes
Configuration Migration
- Rep limits are now configurable in
config.luaviaConfig.RepLimits. - Carry props can now include
animDictandanimfields for custom animations.
Database Migration
- No schema changes required as the
boss_reputationandboss_tasktables remain the same. - Recommended: Reset or delete all player reputation data due to the significantly rebalanced
RepPerLevelthresholds. Existing rep values were earned under the old curve and will place players at incorrect levels.- Option A: Drop the rep table, it’ll be auto created when the resource starts.
- Option B: Reset all rep to 0 or delete all entries.
- Option C: Leave as is, but expect players to be at higher levels than intended.
Recommended
- Review
Config.RepLimitsand adjust rep ranges if needed for your server economy. - Review
Config.RepPerLevelthresholds for desired progression speed. - Fine tune tier scaling factors if you prefer different tier distribution.
- Adjust
Config.MaxTierChanceto control minimum T1 chance (default 0.85 = 15% T1 minimum). - Set
Config.RequireLevelForTier = falseif you prefer pure probability based tier selection without level gates. ForConfig.LevelScaling = trueonly. - Review
Config.RepPenaltiesand adjust penalty ranges per reason and tier. Set{0, 0}to disable any specific penalty.
Update 3.5.3
General Fixes & Improvements
- Fixed not being able to pickup/target a lot of weapon/attachment objects in the T4 interior when using
ox_target. Added sphere zone creation for props thatox_targetcannot detect with standard entity zones.- Configurable list of models requiring sphere zones via
Config.OxUntargetableModelsinshared/config.lua. - New functions:
calculateSphereRadius(model)inclient/main.lua- Calculates optimal sphere radius based on model dimensions.requiresSphereZone(model)inclient/main.lua- Checks if a model needs sphere zone.SphereZoneTarget()inclient/funcs.lua- Creates anox_targetsphere zone.
- Modified
setPickupPropTarget()inclient/main.luato automatically choose between entity zones and sphere zones. - Modified
spawnPickupProps()inclient/main.luato track which props use sphere zones. - Modified
removeAllPickupProps()inclient/main.luato properly clean up sphere zones. - Modified
RemovePickupProp()inclient/main.luato properly clean up individual sphere zones.
- Configurable list of models requiring sphere zones via
- Fixed CCTV monitoring breaking when network ownership changes. Modified
TeleportToLocation()to transfer CCTV entity ownership and retrigger monitoring on enter/exit.- New functions/events:
ensureCameraMonitoring()inclient/main.luaburglary:EnsureCameraMonitoringinclient/main.luaandserver/main.luaburglary:ResumeCameraMonitoringinclient/main.luaandserver/main.lua→ ModifiedTeleportToLocation()inclient/main.lua.
- New functions/events:
- Fixed some guard appearance reverting to default when entering and exiting the interior. Modified
TeleportToLocation()to force guard appearance reconfiguration on exit.- New event:
burglary:ForceGuardReconfiginclient/main.luaandserver/main.lua→ ModifiedTeleportToLocation()inclient/main.lua.
- New event:
- Fixed players getting stuck in the wrong routing bucket when exiting the T4 interior. Removed
SetEntityBucketTempusage and function completely, reverting to the previous trusty simple bucket setting.- Modified
SetPlayerBucket&ResetPlayerBucketevents inserver/main.lua. - Removed
SetEntityBucket&ResetEntityBucketevents inserver/main.lua. → ModifiedTeleportToLocation()inclient/main.lua.
- Modified
- Reverted T4 interior medical bag search location coordinates. → Modified
search_zonescoordinates ininteriors/tier4.lua→Config.T4_Interiors[1].
Update 3.5.2
Jaksam Inventory Support
- Added full support for
jaksam-inventory. - Modified
PlyHasItem()andPlyCanCarryItem()functions inclient/funcs.lua. - Added
onItemAddedandonItemRemovedhooks inclient/carry.lua. - Updated
canAddItem(),AddItem(),RemoveItem(), andVerifyItemInfo()inserver/items.lua. - Modified
GetItemsList()inshared/init.lua. - Added to
Config.OptionalResourcesinshared/config.lua.
Enhanced Item Group Support
- Players can now use alternative items to satisfy requirements.
- Primarily affects T2 houses and T2/T3 interiors:
lockpickoradvancedlockpick+screwdriver. - Items are specified in nested table format:
{ "lockpick", "advancedlockpick" }. - Modified
PlyHasItem()function inclient/funcs.lua. - Updated all
required_itemstables inhouses/tier2.lua→Config.T2_HousesandConfig.T2_RequiredItem. - Updated
locked_doors/required_itemsininteriors/tier2.lua→Config.T2_Interiors[1]Mid Apartment ID 1. - Updated
locked_doors/required_itemsininteriors/tier3.lua→Config.T3_Interiors[1]High End ID 1.
Configurable Security Card Removal
- Added
Config.T4_RemoveKeycardChance(0.0 to 1.0) inhouses/tier4.lua. - Modified
unlockDoorWithSecurity()inclient/main.lua.
General Fixes, Changes & Improvements
-
Fixed guard loot hints going to the wrong player. Loot hints were sent to the peds network owner instead of the killer. → Modified guard death event handler in
client/main.luaand addedLootGuardHintevent inserver/main.lua. -
Fixed juggernaut boss kill task not triggering. Task event was sent to the peds network owner instead of the killer. → Modified guard death event handler in
client/main.luaand addedJuggBossCheckevent inserver/main.lua. -
Fixed screwdriver requirement validation. Any prop in hand + screwdriver in inventory would satisfy the check. Now specifically checks if carrying the required item. → Added
IsCarryingItem(itemName)function inclient/carry.luaand modifiedTryBreakin()andCheckForScrewdriver()functions inclient/main.lua. -
Fixed weapon pickup props with
ox_inventory. Broken in update 3.5.0, weapon names weren’t being converted before can carry inventory checks. Now appliesConfig.ReplaceQbItemNamesconversion beforePlyCanCarryItem(). → ModifiedpickupAProp()inclient/main.lua. -
Adjusted item removal on minigame failures. → Modified
setDoorTarget()(interior door cracking),unlockDoorWithSecurity()(T4 security keypad),unlockSafe()(safe cracking), andUnlockAndEnter()(house break-in) inclient/main.lua. -
Fixed animation not ending after failed interior door cracking. Player remained stuck in lockpicking animation. Added proper animation cleanup on failure. → Modified
setDoorTarget()inclient/main.lua. -
Improved search zone notification timing. Moved “No Rewards” notification to after the progress bar completes. → Modified
searchAZone()inclient/main.lua. -
Added
qbcore→ox_inventoryitem name conversion handling for search zones. Add items to convert inConfig.ReplaceQbItemNames. → ModifiedsearchAZone()inclient/main.lua. -
Fixed incorrect error message params in
PlyCanCarryItem. Error messages were passing type to the message param and vice versa. Item name wasn’t being displayed correctly in “Item not found” errors. → ModifiedPlyCanCarryItem()inclient/funcs.lua. -
Improved T4 medical bag search zone targeting. Adjusted vector3 coordinates for medical bag search zones to be more accessible when using
ox_target. → Modifiedsearch_zonescoordinates ininteriors/tier4.lua→Config.T4_Interiors[1]. - Improved main house cleanup and reset function. Refactored reset functions into smaller, reusable helper functions:
- Added
resetPlayerState()- Cleans up player-specific data (hints, detection status, etc.) - Added
resetInteriorEntities()- Clears interior entity tracking table - Added
cleanupInteriorState()- Handles all interior resets (search zones, peds, security, doors, safes) - Added
cleanupExteriorState()- Handles all exterior cleanup (props, peds, alarms) - Added
resetHouseServerState()- Manages states when no players inside - Improved
ResetHouse()function organization with clearer flow and better separation. → ModifiedResetHouse()and added new helper functions inclient/main.lua.
- Added
- Reverted Halloween Madness changes. Removed all Halloween specific code and configurations. → Removed everything related from
client/main.luaand events fromserver/main.lua. Restored original functions inclient/funcs.luaand settings inshared/config.lua. All interior configuration files reverted to original.
Update 3.5.1
General Fixes & Improvements
- Fixed job timeout system not ending jobs. Jobs would fail to auto end after the correct duration if a previous job had been manually cancelled previously. CancelJobTimeout() now properly cleans up the timeout callback and monitoring thread.
- Interior door cracking actually fixed
- Added
EnterHouseAlert(tier, coords, success)tofuncs.lua- Triggered when entering or attempting to break into houses, including tier information, coordinates, and break-in success status for better police response integration.
Halloween Madness Added three new daily tasks:
- Face Your Fears: Encounter a shadow figure during any T1-T4 job
- Toxic Immunity: Complete a T4 job without taking any biohazard damage
- Halloween Madness: Experience the full Halloween chaos: survive a shadow encounter, complete a T4 job without biohazard damage, and tame a chimp. Progress persists across multiple jobs until all three conditions are met.
🎃 Halloween Madness Update 3.5.0
☣️ Biohazard Contamination (Tier 4)
- Toxic interior environment: Filled with dense green gas clouds using particle effects.
- Protection system: A gas mask item provides full immunity. Masks can be found around the interior or looted from peds.
- Survival mechanics: Gradual health damage, warning notifications at low health, screen effects (timecycle modifier, motion blur), and death consequences.
- Fully configurable tick rate, damage amounts, protection items, and particle behavior.
🐒 Chimp Taming (Tier 3 - Franklins DJ)
- Befriend hostile chimps: Using the banana item.
- Companion behavior: Tamed chimps follow players around and automatically spawn outside when exiting. Tamed chimps are friendly and won’t attack players.
- Monkey Business: Complete the new Monkey Business task and earn the Golden Monkey reward by successfully taming a chimp.
😱 Shadow Jumpscare
- Random jump scare: Mysterious shadow figures spawn around players at configurable intervals.
- Jumpscare effects: Screen flash, camera shake, optional sound (xsound), temporary movement debuff.
- One scare per interior visit.
🧟 Zombie Mode
- Master toggle via
Config.HalloweenMadness.zombie_peds- Enable/disable T4 exterior guard/boss zombie models.
🎭 Hazmat Workers & Gas Masks
- Hazmat worker homeowners: For T4 contaminated interiors with automatic gas mask prop attachment.
🌩️ Halloween Weather & Time
- Atmospheric effects: Halloween weather (orange/foggy) with locked time at 23:00 PM.
- Per interior toggle via
halloween_weather = truein interior configs.
🔊 Halloween Ambience
- Eerie ambient soundscapes via xsound, configurable volume/distance.
- Per interior toggle via
halloween_ambience = truewith automatic lifecycle management.
📝 New Translations Added to locale_en.json:
- Biohazard warnings, death messages, and protection status notifications
- Chimp taming interactions (success, failure, already tamed, missing item)
🏚️ New Halloween Interior Themes Each tier now has its own Halloween theme:
- T1: Zombies
- T2: Murdered Family / Slasher
- T3 (High-End): Aliens & UFOs / Government
- T3 (Franklin’s): Halloween Party / Chimp & Zombie Pug
- T4: Biohazard
Includes major updates to all [interiors] config tables (extra_props and homeowner_peds).
General Fixes & Changes
- Adjusted client-side overweight handling, added
PlyCanCarryItemtoclient/funcs.lua, replacing the old ItemAdded and CannotAddItem event method. - Added
Config.MaxInventoryWeight, this should match the max weight from yourqb-inventoryconfig (required forPlyCanCarryItem). Not needed when usingox_inventory. - Moved the
GetItemsListfunction toshared/init.lua. - Fixed interior door cracking unlocking the door even after failing the minigame.
- Added
Config.NotifyRepto enable or disable reputation gain notifications. - Added
Config.DoorHintDistancecontrols distance for “It’s gotta be around here somewhere” hint. - Use
Config.ReplaceQbItemNamesto convert qb item names to ox when looting peds for better compatibility. - Added
bananaandgasmaskitem to the provideditems_qb.luaanditems_ox.luaburglary files.
Update 3.4.9
General Fixes & Improvements
-
Prevent
ox_targetwarnings from search/pickup zones, safes, and interior door cracking (should be all of them :D). -
Improved scene handling and fixed an issue where players could sometimes get stuck in the security panel scene with no minigame showing.
-
Removed Franklins interior sofa fix stream (already included in bob74_ipl) - also fixes occasional crashes when restarting the resource.
-
Added rep progress bar to the
ox_libcontext menu. -
Improved
AddItemandAddCashRewardsecurity. All server-side item and reward events now validate incoming data structures, config, types, and coordinates to prevent exploits and unauthorized event triggers. → Introduced configurableINTERACT_RANGEconstant initems.lua. -
Fixed “your hands are full” issue when using
ox_inventory. -
Fixed the “Bonk A Local” task.
-
Reverted Tier 4 lockdown alarm back to the original.
-
Changed Tier 4
securitycarditem label to “Access card” and updated its description. →items_ox.lua&items_qb.lua. -
Updated
securityphoneitem description. →items_ox.lua&items_qb.lua. -
Fixed lockdown/alarm not resetting correctly for all group members.
-
Removed the entire traitor/setup process and related code. To obtain the required
securitycard, you must now loot dead guards - each has a chance to drop it based onConfig.T4_SecurityCardChanceinhouses/tier4.lua. -
Notify players about looting guards for the required item when killed, based on
Config.T4_LootGuardHintChanceinhouses/tier4.lua. -
Adjusted guard ped target handling to hopefully prevent
qb-targetCheckEntity errors. -
Prevent the exterior from loading multiple times when two or more group members enter the area simultaneously.
Update 3.4.8
General Fixes & Improvements
-
Fixed tool carry prop not being deleted when the item is removed from the inventory. Adjusted
tryAttachToPlayerfunction inclient/carry.lua. -
Fixed
task_complete_notifymessage not displaying correctly inlocale_en.json. -
Ensure proper particle dict cleanup in the
CreateParticlefunction. Updated inclient/funcs.lua. -
Prevent jumping while carrying props. Modified
createAndAttachfunction inclient/carry.lua. -
Fixed incorrect electric box ID being used when disabling the electric box, even when the correct target was hit, it would return and notify incorrect ID, caused by a mix up between raw ID and target ID. Updated
playAxeSmashScenefunction inclient/main.lua. -
Fixed task menu error when an item couldn’t be found. Although the case was handled, a typo in the error print caused a separate unhandled error. Fixed in
GetTaskDescriptionfunction inclient/main.lua. -
Moved guard ped clothing style/IDs and face feature configs from
client/main.luatohouses/tier4.lua. Now configured viaConfig.T4_GuardFaceFeaturesandConfig.T4_GuardClothing. -
Updated cop breaching logic, cops can now only breach if the house is currently active/busy. Adjusted
setCopHousefunction and related thread inclient/main.lua. -
Fixed an issue where randomly assigned interiors (when no interior ID is set in the house config) weren’t syncing correctly for cops. Not an issue by default, it only occurred if the
interior = 1setting was removed to allow random interior ID selection. AdjustedsetCopHousefunction inclient/main.lua, andSetForCoppasevent inclient/main.luaandserver/main.lua. -
Fixed a bug where the house unlocked state was sometimes not reset properly. Updated
ResetHousefunction inclient/main.lua.
Mass cleanup up and refactored various functions and events, removed unused comments, improved variable naming, and reorganised or relocated several events for better structure.
- Most client files were modified for cleanup (excluding
groups.luaandmenu.lua). server/main.luawas also updated.- Adjust
Config.JobCooldowninshared/config.lua. - No changes were made to
[houses],[interiors],init.lua, oritems.lua.
Attempt better version control, 3.3.6 probably should’ve been 3.4, but 3.3 probably 4.0… Fack → Bumped version to 3.4.8
Update 3.3.7 - Hotfix
General Fixes & Improvements
-
Fixed an issue where cash props could be repeatedly picked up without being removed or marked as searched. This was caused by recent changes to how being overweight is handled during searches and pickups (introduced in update 3.3.6). Modified
pickupAPropfunction inmain.lua. -
Fixed after using a screwdriver to crack interior doors, attempting to pick up an item would incorrectly show a “hands are full” notification, even though the screwdriver prop had already auto removed. Modified
setDoorTargetfunction inmain.lua. -
Adjusted the coordinates of the additional main door in the T3 Franklin interior to fix a visual flicker (black flash) when viewing the door from certain angles. Modified front door coordinates in
T3_Interiors→extra_propsfor interior ID 2. -
Added
Config.DisableSellmanto fully disable sell peds inconfig.lua. -
Added a
fixoption to the lb-phone setting inConfig.OptionalResources. If you’re using lb-phone and experiencing issues with accepting or receiving phone mail, try enabling this option. It assumes that lb-phone is passing its own mailId as param1 and the actual mail data as param2 to the AcceptJob function. ModifiedAcceptJobfunction inmain.luaandconfig.lua.
Update 3.3.6
Bossman & Sellman
sellmanpeds can now be created with passive bodyguards via the main config.- Spawn props alongside
sellmanandbossmanpeds via the main config. - Tier-specific required items to request a job are now configurable per house in
[houses], and can be toggled viaConfig.RequireRequestItem/Config.RemoveRequestedItem. - Improved
sellmanprice variation - thresholds and multipliers added in the main configConfig.SupplyAndDemand.
Inventory & UI Support
- Added support for
qs-inventory. - Added support for
yphone. - Players cannot sprint while carrying props.
- Weight check using
CanAddItemfor all search/pickup/looting actions is now actually handled and players are notified if their inventory is full.
Loot & Boss Mechanics
- The Tier 4 setup ped is now a traitor guard - bribeable or fightable (only if you refuse to pay extra) to access loot/info. Configure in
houses/tier4.lua → Config.T4_JobPrep. - The heist axe has been moved from the setup ped and is now attached to the boss guard’s back - lootable by any group member when dead.
- Boss guard now carries an LMG.
- All guards are now lootable by any group member. (Fully setup but it does require configuring in
houses/tier4.lua → Config.T4_Houses → security_guards.) - Configurable tool removal chance during break-ins and interior door cracking via
Config.ChanceOfItemRemovalin the main config.
Security & Alarm
- Interior security keypads are now always targetable.
- New indoor burglar alarm using
xsoundfor Tiers 2 & 3 (Config.OptionalSound) - fallback to the classic beep if disabled. - Updated exterior alarm sound URL to a permanent
xsoundlink https://www.myinstants.com/media/sounds/securityalarm.mp3. - Fixed issues with lockdown state and boss guard reset behaviour.
- Electric box logic now selects a random available box to disable lockdowns, rather than matching.
- CCTV is now usable at any tier, and alerts police at Tiers 1–3.
Targeting & Interaction
- Switched to
AddTargetEntityfor networked peds - fixedqb-targeterrors and not being able to click the target when looting dead peds. - Added
EntityTargetandRemoveEntityTargetfunctions infuncs.luato support clean removal for bothqb-targetandox_target. - House blips now include tier prefixes (e.g., “T1 Job”) with updated colors.
- Adjusted Tier 2 TV interaction zone for better
ox_targetaccessibility ininterior/tier2.lua → Config.T2_Interiors → pickup_zones. - Improved door enter/exit logic overall - prevents
ox_targetduplicate zones and warning spam. - Ensured an animation is passed to
ox_libprogress bars to prevent moving while interacting (searching, looting, etc.). - Added a group wide busy state for search/pickup locations to prevent multiple members from interacting with the same target simultaneously.
Group & Job Management
- Job request mails now include unique IDs and expiry timers (
Config.MailExpiryTime) - prevents accepting expired jobs. - Improved group cleanup logic when the leader/member disconnects, exits, or crashes.
- Added persistent, tier-based job cooldowns (until server restart) via
[houses]→Config.T*_JobCooldownSecondsandConfig.T*_JobCooldownThreshold. Global cooldown settings in the main configConfig.JobCooldown. - Added tier-based reputation loss on failure via
[houses]→Config.T*_RepRemovalPercent. - T4 setup busy state now resets at job end.
- Near house notifications are now only shown for Tiers 2 & 3.
- Fixed cop breach zone handling logic and prevent
house.tier nilerror.
Animation & Props
- Carry animation is now properly stopped on drop for a smoother transition instead of ClearPedTasks.
- Players can stow/hide tools while moving without interrupting animations and movement.
- Prevent repeating animations when picking up prop loot inside interiors (adjusted anim flags).
- Floating props are now cleaned up properly after entering/exiting interiors.
- Carry animation and prop are cancelled if player becomes armed (item is not removed).
Ped & AI Behavior
- Guards use selected randomized ped parents, hair styles, face paint, and other variation attributes.
- Interior peds now check for ownership transfer and retarget other players correctly.
- No longer respawn when the owner leaves.
- Now despawn only when the interior is empty.
- Prevent
CPed::SetVariationpalette ID warning. - Fixed guard targeting, attributes, and relationship group resets on owner change.
- Reapplies appearance features properly.
- Improved cleanup of guards/setup peds using the CPed pool for force deletion.
Config & Initialization
- Refactored resource initialization in
init.luaand both resource tables in the main config. - Added missing translations from escrowed files.
- Moved
SendLBMailevent to a non-escrowed file:server/items.lua. - On client start, triggers
police:server:UpdateCurrentCopsto hopefully force update the cop count.
Update 3.3.5
Item Name Compatibility
- When
ox_inventoryis enabled, the script now auto-converts item names during prop pickups. - Added a mapping table to
config.lua→Config.ReplaceQbItemNamesto handle item name translations. - Added all items used in the T4 interior – you will now receive the correct item when using
ox_inventory.
Job Menu Improvements
- Added an option to
config.lua→Config.ShowAllJobTiersto enable or disable showing all job tiers in the job menu. - Job menu items are now disabled if the required level is not met and the blank menu item has been fixed. If Config.ShowAllJobTiers is disabled it will just add the unlocked tier to the job menu when the required level is met.
Security Minigames
- Added Var and Thermite minigames from
ps-ui. These can now be used inSecurityMinigametables for both interior and exterior security panels. - Fixed an issue where the security panel phone hacking scene would replay and cause the player to get stuck in the hack loop after certain minigames (
circle/mhacking).
General Fixes & Adjustments
- Prevented
ox_targetwarnings for setup peds and prop pickups. - Coffee in T3 now actually looks like coffee ☕
- Adjusted two models in T3 interiors that were previously inaccessible with
ox_target. - Rearranged T3 safe contents to improve targeting and interaction.
- Replaced the cash stack inside safes with a better model for
ox_targetfunctionality. - Removed firearms from T2.
- T1 Motel: Actually fixed the interior exit for
ox_target, correctly adjustingipl_coords. - T3 High-End Interior: Adjusted extra main door coordinates to prevent door glitching.
Interior & Loot Changes
- T4 Interior:
- Replaced 4 weapon models with
ox_targetcompatible ones. - Added 7 new lootable items.
- Added 2 brand-new items to loot.
- Replaced 4 weapon models with
- T3 Interiors:
- Replaced 4 weapon models with
ox_targetcompatible ones. - Added 1 new weapon to loot.
- Replaced 4 weapon models with
- Seasonal Cleanup:
- Removed Xmas tree from T3 Franklin’s interior.
- Removed milk & cookies from the T4 interior.
Group Password & Menu
- You can now create/join groups with a password (only using
sk-menu). - Revamped
sk-menuUI – added an option to include a textbox in menu items.
Update 3.3.4
General Fixes & Improvements
- Auto Resource Detection: Added
Config.AutoResourceSetupto automatically detect and enable required resources. Minigames are now detected based on availability. - Exterior Entities Handling: Introduced the
exteriorEntitiestable to manage all exterior objects and peds, replacinginteriorEntitiesandguardEntitiesfor outside entities. Also refactored T4 security panel and guard handling. - Guard Behavior Fixes:
- Guards will no longer use vehicles to reach a target.
- Fixed guards not returning to patrolling or standing when they lose their target.
- Temporarily replaced knife/melee guards with shotguns.
Carry Object Improvements
- Moved the carry objects table from
carry.luatoconfig.lua. - Fixed an issue where props would not consistently appear when using
ox_inventory, only showing when the carry prop was used. - A new thread now checks the player’s inventory for the carry item when using
ox_inventory.
Sell Menu Fixes & Buyer Categories
- Fixed the sell menu not refreshing when all items expired or ran out.
- Split buyers into Tech, Collectibles, and Misc categories, each with a unique ped. A random ped is chosen from each category on
onServerResourceStart. - Added all burglary items to
Config.BuyersListand included additional comments for configuring the buyer system. Adjust rarity, price, and other settings as needed.
Targeting & Interaction Fixes
- T4 Security Keypad Targeting: Fixed an issue where targeting the T4 door security keypad with
ox_inventorywas broken due to incorrect item metadata handling.
Miscellaneous Updates
- Sell Menu Item Images: Updated the
sk-menurepository to include images for all burglary items in the sell menu. - Required Cop Count Handling: Now defined in tiered house configs when
Config.LevelScaling = false. - Alarm Sound Update:
- Updated the link for the alarm sound MP3.
- Planning to replace it with YT and add a fallback option (likely a GTA soundtrack) in the next update.
- Bug Fixes & Typo Corrections:
- Fixed a typo in the item image for
'figure2'in both item.lua lists.
- Fixed a typo in the item image for
Update 3.3.3
General Fixes & Improvements
- Blacksreen Loop: Fixed blackscreen loop when entering an interior caused by missing object or ped models. Added
IsModelValid()andIsModelInCdimage()checks to prevent blackscreen loops by skipping invalid models and printing a message with the model name ifConfig.PrintStuffis enabled. - ox_target Security Zone: Adjusted ox_target box zone size/pos for security keypad props.
- ox_target T1 Exit Zone: Fixed ox_target exit interior box zone for the T1 motel, broken in update 3.3.2 due to adjustments to
ipl_coords.
Update 3.3.2
General Fixes & Improvements
- sk-menu group/member menu: Fixed an issue where creating or joining a group using sk-menu would not display the group in the menu when ox_lib was enabled. This was caused by group data being set for the ox_lib menu instead of sk-menu, as the addGroupToMenu and addMemberToMenu functions prioritized ox_lib in
client\menu.lua. - Create main interior door: Added an additional main door for the motel T1 interior and both T3 interiors using the
extra_propstable in the interior config. This ensures there’s no escape from the interior when the default interior door object is missing or fails to be retrieved, moved, or frozen. No more T1 motel void! - Adjusted Config.BuyersList: Since ox_inventory does not include the
markedbillsitem by default, which thedirty_cash = truesetting in theConfig.BuyersListrelies on, dirty_cash has been set to false by default. If you want to use this feature, simply update thedirty_item_nameto match the name of your dirty cash item in your ox_inventory item list and set dirty_cash to true. - Added Ammo Crate and as useable item in
server\items.lua - Removed Christmas trees from T2/T3
Update 3.3.1
General Fixes & Improvements
- ox_target Spam: Attempted to fix the spam issue when trying to remove zones.
- Debugging Disabled: Disabled some debugging elements for cleaner logs.
- Entity Spawn Logging: Added print statements when attempting to spawn entities (
Config.PrintStuff), helping identify missing models, typically due to different game versions. - Error Handling:
- Print error message if minigame/menu resources are missing.
- Fixed
ox_targetsecurity error. - Fixed
ox_libmenu error when accessing the fence menu. - Fixed
sk-menunil error if not present on the server.
- Group Change Reverted: Reverted a group change to resolve group display issues.
- Guard Spawning: Slowed down guard spawning to reduce MS load.
Documentation
- Minigame Setup: Updated documentation for setting up or changing minigames Visit Minigame Documentation.
- README.md: Updated for clarity.
- Ox Items List: Updated to work with 3.3
ox_items.lua.
Compatability
- QBox: Fully tested and working with QBox txAdminRecipe.
- Ensure
ox_lib,ox_target, andox_inventoryare enabled (true) inmain config.lua. - Set
qbx:enableBridge "true"in your QBox server config to enable the QB-Core bridge forqbx_core(this should be true by default).
- Ensure
Update 3.3 - Our biggest yet!
New Tier 4 Heist: Weapons Cache Robbery
- Players can now undertake a Tier 4 heist to rob a weapons cache, with rewards including weapons, attachments, materials, and more.
- Key Features:
- Meet the boss’s contact to get job details, tools, and the location of the heist.
- Interact with guards, avoid CCTV detection, and crack the security keypad.
- Introduced the securitycard, used alongside the securityphone to bypass keypads.
- The securitycard has a unique ID that must match the assigned security panel.
- Obtain the securitycard and location details from the setup ped.
- CCTV detection triggers a lockdown:
- A boss guard may spawn during the lockdown.
- Keypad access is temporarily disabled until the lockdown is resolved.
- Disable the lockdown by locating and smashing the correct power box using the heistaxe.
- CCTV cameras can be disabled by shooting them. If a silencer is not used, a lockdown will be triggered.
Reworked Reputation System
- XP required per level is now configurable via
Config.XPPerLevelinconfig.lua. - Starting reputation is now set to 0 (previously 10,000).
- Revised reputation rewards based on actions and tiers:
AddRepForReasoninfunc.luais now called frommain.luafor actions like breaking in or bypassing security.- Rewards can be configured in the
repRewardstable andAddRepForReasonfunction infuncs.lua.
Outdoor Security Features
- Added guards, keypads, alarms, powerbox and CCTV for enhanced security.
- Initially implemented for Tier 4 but fully adaptable for other tiers.
New Menu
- Added compatibility with sk-menu.
- Recommended for auto-refreshing and smooth transitions.
- Visit sk-menu GitHub.
New Selling Mechanic
- Added a fence menu for selling items.
- Items are randomly selected from the
Config.BuyersListtable inconfig.luaat resource start. - Prices vary based on supply, demand, and rarity.
- Items expire after a set time or when a specified quantity is sold.
- Items are randomly selected from the
- Optimized for sk-menu with auto-refreshing functionality.
SetupInterior Function Refactor
- Improved reliability by running spawning functions sequentially within a single thread.
- Reduces blackscreen loading time and ensures safe props are created before pickup props.
Interior Overhaul
- Over 250+ new objects added across interiors, including 35 unique items for more immersive environments.
Miscellaneous Improvements and Fixes
- Smoother animation and scene entry when interacting with a security keypad; the player ped now correctly moves towards and faces the security panel.
- Enhanced processes for selling items and receiving marked money.
- Disabled collision and damage for the keypad prop (
ch_prop_fingerprint_scanner_01d). - Improved carry code and handling for multiple items in player inventory.
- Added group status checks to prevent joining or leaving while busy.
- Prevented
nilerrors from group functions. - Added a Cayo Perico elevator hacking scene for Tier 4 security.
- Adjusted player ped’s vertical offset during the USB hacking scene to prevent elevation issues.
- Cleaned up and organized functions in
client/main.lua:- Improved comments and organized house and player data variables.
- Ensured carriable items are accounted for when sold to the fence.
- Utilized
AsNoLongerNeedednatives to significantly reduce streaming memory usage. - Added
qb-inventoryto theDefaultResourcestable for better export handling. - Moved queue and job times to tiered
[houses]configurations, allowing different times per tier. - Improved the transition from closed to open safes for the client by using a networked safe opening scene.
- Tier 4 interior peds now have a chance to drop their current weapon when looted.
- Improved item descriptions and updated prompts/translations.
- Players now receive mail if no job is available.
- Addressed potential issues with interior loading when skipping pickup props requiring a safe:
- The
spawnPickupPropsfunction now exits efficiently if no safe is present, skipping to the next pickup. - Added the
DoesAnySafeExistfunction and improved checks using theinteriorEntitiestable.
- The
- Updated target handling to use
ox_target'saddBoxZone export directly, if available, instead ofqb-target. - Updated inventory handling to use
ox_inventory'saddItem export directly, if available, instead ofqb-inventory. - Resolved an issue where the “Sneaky Beaky” task could complete after canceling a job without performing any actions.
- Fixed an issue where carry props were not being removed properly when using the updated
qb-inventory.