BS KeyRoom
BS_KeyRoom – Secure Access & Dynamic Loot for DayZ Take your DayZ server to the next level with BS_KeyRoom — a robust, highly customizable mod that introduces secure, key/keycard-based door access, exclusive loot zones, and dynamic event mechanics that enhance player progression and interaction. 📖 Mod Guide 📖 https://github.com/cjcarw/BS-KeyRoom/wiki 🔐 Key Features 🗝️ Keycard-Locked Doors: Transform any door in the… (more)
BS_KeyRoom – Secure Access & Dynamic Loot for DayZ Take your DayZ server to the next level with BS_KeyRoom — a robust, highly customizable mod that introduces secure, key/keycard-based door access, exclusive loot zones, and dynamic event mechanics that enhance player progression and interaction. 📖 Mod Guide 📖 https://github.com/cjcarw/BS-KeyRoom/wiki 🔐 Key Features 🗝️ Keycard-Locked Doors: Transform any door in the game into a high-value objective. Players must find the correct key/keycard to gain entry to restricted areas. 💬 Smart Door Interaction: Door prompts automatically update to inform players if a key/keycard is required — and even specify which key/keycard is needed if they don't have it. 🧻 Consumable Keycards: keys/keycard are consumed upon successful use, adding strategic value and rarity to each card. ⏱️ Delayed Door Opening: Add suspense by introducing a short delay between using a keycard and the door unlocking — perfect for building tension or allowing alarms to alert other players in time. 📦 Configurable Loot System 🎯 Static Loot: Assign specific items to spawn in custom containers (military crates, gun cases, etc.) when a door is opened. Pre-attach items (e.g., optics on rifles, mags in vests) to create meaningful rewards. 🎲 Randomized Loot Pools: Build dynamic loot tables with configurable spawn chances and quantity ranges. Prevent duplicate items within a single container to ensure varied and balanced rewards. 🧰 Custom Containers: Includes animated military crates and gun cases perfect for hiding valuable gear. 🚨 Event Triggers & Security 🔊 Alarms & Global Announcements: Trigger audible alarms or global server messages when doors are opened — ideal for creating tension, PvP hotspots, or server-wide events. ⏳ Intelligent Cooldowns: Doors remain unlocked for a configurable time after being accessed, then automatically re-lock. Optionally, cooldowns can persist across server restarts for added consistency. 🚪 Player Safety Teleport: Players standing too close to a door about to close are automatically teleported a short distance to prevent clipping or entrapment. 🛠️ Admin Tools 🛑 BS_DoorLocker (In-Game Setup Tool): A powerful admin-only item that allows you to configure keycard/keys doors directly in-game and generate the required JSON files with precision and ease. 🛠️ Live Reload Command 🛑 Admins can use the !kcreload command in chat to reload all door and loot configurations without a server restart. 🎨 Custom Keycard Types: Includes a variety of card styles (color-coded, lab-themed, etc.) with customizable names and descriptions. ⚙️ Full JSON Configuration: Every aspect of the system — doors, loot, keycards, alarms, cooldowns — is easily configurable via simple JSON files. 🌍 Multi-Language Support All in-game messages are localized in: English, Spanish, Portuguese, German, Italian, Russian, Polish, French, Czech, Traditional Chinese, and Simplified Chinese. 🚀 Performance Optimized Built with performance in mind, BS_KeyRoom is optimized to run smoothly on any server, even with numerous active keycard locations. Compatible with most community maps and mods. 🧭 How to Get Started Install the Mod: Add BS KeyRoom to both your server and client mod list. Enable Debug Mode: Before configuring doors, open the file BS_KeyRoom_Settings.json (located in your $profile:BS_KeyRoom folder) and set: "debug_build": 1 This will enable the in-game configuration tool. All-New In-Game Admin Menu! A comprehensive admin UI has been implemented, accessed via the !kcmenu chat command. This menu allows admins to configure almost every aspect of the mod in real-time, no server restart required. Command: !kcmenu Use the BS_DoorLocker Tool In-Game: Spawn the BS_DoorLocker item in-game and use it while looking at a door to generate base JSON files for that specific location. Customize Your Configuration: Edit the JSON files located in $profile:BS_KeyRoom, including: BS_KeyRoom_Settings.json BS_KeyRoom_ItemNames.json The per-door JSON files automatically generated by the tool Disable Debug Mode (Optional): Once your setup is complete, you can set "debug_build": 0 to disable admin setup mode for security. ✅ Recommended Companion Mod For the best experience, it is highly recommended to use BS_KeyRoom alongside BS HackedCrate. This adds hacked lootable crates that perfectly complement the secure keycard rooms, enabling layered gameplay and richer reward systems. https://steamcommunity.com/sharedfiles/filedetails/?id=3482229348 BS KeyRoom Copyright 2025 BS KeyRoom. You are NOT allowed to repack or reupload this mod or its contents. This item is not authorized for posting on Steam, except under the Steam account https://steamcommunity.com/id/cjcarww. REPACKING IS PROHIBITED. If you would like authorization, you can request it on our Discord.
No file I/O on hot paths, no timers created per event, no per-player-per-frame hooks.
Every server-visible override preserves its chain.
0.0141% of each server frame at 100 players (0.141 ms/s). Counts hook dispatch and timers only, not what the hooks do inside. Methodology.
Structural load of the 328 scripted mods analyzed, lightest on the left. This mod's bar is lit; 40 others share it. Ranked list.
Repeating timers carry 99% of this mod's structural load. 0.141 ms/s in all.
4 hooks · 0.00079 ms/s
2 hooks · 0.000004 ms/s
1 timer · 0.14 ms/s
| Event hooksrun when something happens: an inventory move, a hit, an action | 4 hooks | 0.00079 ms/s | 0.6% | ActionCloseDoors.ActionCondition, ActionOpenDoors.ActionCondition, DayZPlayerImplement.OnRPC and 1 more |
| Lifecycle hooksrun when an entity is created, loaded or deleted | 2 hooks | 0.000004 ms/s | <0.1% | MissionServer.InvokeOnConnect, MissionServer.OnInit |
| Repeating timersstay in the timer queue, which is walked every frame | 1 timer | 0.14 ms/s | 99% | every 3 s |
Counts how often each hook is dispatched and how many timers stay alive, not what the code inside does. Some rates are order-of-magnitude estimates; the methodology lists which.
Where this mod runs often
Hooks on per-frame and high-rate surfaces, with what their bodies call. Body work, not the hook itself, is what costs frame time.
Other findings
super() only on some paths · 5 · warning
- ActionCloseDoors.GetText calls super.GetText() only on some paths — on the others the chain below this mod is dropped.
CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionCloseDoors.c:93 - ActionLockDoors.OnFinishProgressServer calls super.OnFinishProgressServer() only on some paths — on the others the chain below this mod is dropped.
CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionLockDoors.c:3 - ActionOpenDoors.GetText calls super.GetText() only on some paths — on the others the chain below this mod is dropped.
CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionOpenDoor.c:244 - ActionOpenDoors.OnStartServer calls super.OnStartServer() only on some paths — on the others the chain below this mod is dropped.
CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionOpenDoor.c:292 - ActionUnlockDoors.OnFinishProgressServer calls super.OnFinishProgressServer() only on some paths — on the others the chain below this mod is dropped.
CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionUnlockDoors.c:3
- ActionCloseDoors.GetText calls super.GetText() only on some paths — on the others the chain below this mod is dropped.
Which vanilla methods the mod hooks, which of them drop the chain, how often each hook fires, and which risky calls sit inside hot hooks.
How long hook bodies take, network cost, or engine-side load. Measured across live fleets, most server lag comes from the engine and world state, not mod script chains — a light footprint does not clear a mod of lag, and a heavy one does not convict it. Methodology.
Everything else
All 20 overrides
Surface is the dispatch tier the rubric can price (— = unpriced); server is whether the override exists on a dedicated server; super() shows whether the vanilla chain is preserved on a server.
| method | surface | server | super() | where |
|---|---|---|---|---|
ActionCloseDoors.ActionCondition |
T2 | yes | ✓ | CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionCloseDoors.c:39 |
ActionCloseDoors.GetText |
— | yes | conditional | CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionCloseDoors.c:93 |
ActionConstructor.RegisterActions |
— | yes | ✓ | CJ_KeycardSystem.pbo::4_world\Actions\ActionConstructor.c:3 |
ActionLockDoors.OnFinishProgressServer |
— | yes | conditional | CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionLockDoors.c:3 |
ActionOpenDoors.ActionCondition |
T2 | yes | ✓ | CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionOpenDoor.c:80 |
ActionOpenDoors.GetText |
— | yes | conditional | CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionOpenDoor.c:244 |
ActionOpenDoors.OnStartServer |
— | yes | conditional | CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionOpenDoor.c:292 |
ActionUnlockDoors.OnFinishProgressServer |
— | yes | conditional | CJ_KeycardSystem.pbo::4_world\Actions\BS_ModdedActionUnlockDoors.c:3 |
DayZPlayerImplement.OnRPC |
T2 | yes | ✓ | CJ_KeycardSystem.pbo::4_world\Entities\DayZPlayerImplement.c:11 |
ExpansionIcons.Generate |
— | yes | ✓ | CJ_KeycardSystem.pbo::3_game\Config\BS_Icon.c:3 |
ExpansionItemTooltip.SetView |
— | yes | ✓ | CJ_KeycardSystem.pbo::5_mission\BS_ExpansionQuestCompat.c:42 |
ExpansionQuestMenuItemEntry.SetEntry |
— | yes | ✓ | CJ_KeycardSystem.pbo::5_mission\BS_ExpansionQuestCompat.c:4 |
MissionGameplay.OnMissionStart |
T3 | yes | ✓ | CJ_KeycardSystem.pbo::5_mission\MissionGameplay.c:5 |
MissionGameplay.OnMissionFinish |
T3 | yes | ✓ | CJ_KeycardSystem.pbo::5_mission\MissionGameplay.c:11 |
MissionGameplay.OnUpdate |
T0 | yes | ✓ | CJ_KeycardSystem.pbo::5_mission\MissionGameplay.c:17 |
MissionServer.OnInit |
T3 | yes | ✓ | CJ_KeycardSystem.pbo::5_mission\MissionServer.c:533 |
MissionServer.InvokeOnConnect |
T3 | yes | ✓ | CJ_KeycardSystem.pbo::5_mission\MissionServer.c:617 |
MissionServer.OnEvent |
— | yes | ✓ | CJ_KeycardSystem.pbo::5_mission\MissionServer.c:968 |
ModItemRegisterCallbacks.RegisterOneHanded |
— | yes | ✓ | CJ_KeycardSystem.pbo::4_world\Entities\BS_animation.c:4 |
PlayerBase.SetActions |
T2 | yes | ✓ | CJ_KeycardSystem.pbo::4_world\PlayerBaseMod.c:13 |
Dispatch surfaces and timers the grade prices
| surface | tier | rate (Hz) | rate source | ms/s |
|---|---|---|---|---|
ActionCloseDoors.ActionCondition | T2 | 8.0 | placeholder | 0.0002 |
ActionOpenDoors.ActionCondition | T2 | 8.0 | placeholder | 0.0002 |
DayZPlayerImplement.OnRPC | T2 | 8.0 | placeholder | 0.0002 |
PlayerBase.SetActions | T2 | 8.0 | placeholder | 0.0002 |
MissionServer.OnInit | T3 | 0.1 | placeholder | 0.0000 |
MissionServer.InvokeOnConnect | T3 | 0.1 | placeholder | 0.0000 |
Repeating timers
| period (ms) | residency ms/s | firing ms/s | where |
|---|---|---|---|
| 3000 | 0.1400 | 0.000008 | CJ_KeycardSystem.pbo::4_world\KeyCardSystem\BS_KeyCardClientManager.c:31 |
Includes 0.001 ms/s from placeholder-rated surfaces.
Load-order constraints (CfgPatches)
What each PBO declares: its addon identity and the addons it requires to be loaded first (requiredAddons). A partial load-order signal from the mod's own metadata.
CJ_Icon.pbo
CJ_ICONrequiredVersion 0.1 — requiresDZ_Data,DZ_Gear_Consumables,DZ_Gear_Camping,JM_CF_Scripts
CJ_KeycardSystem.pbo
CJ_KeycardSystemrequiredVersion 0.1 — requiresDZ_Data,DZ_Gear_Consumables,DZ_Gear_Camping,JM_CF_ScriptsBS_DoorLockerrequiredVersion 0.1 — requiresDZ_Data,DZ_Gear_MedicalBS_keysOverriderequiredVersion 1 — requiresDZ_Data
CJ_KeycardSystemA.pbo
bs_safesrequiredVersion 0.1 — requiresCJ_KeycardSystemBS_WeaponCase1requiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,CJ_KeycardSystemCJ_KeycardSystemA_CardholderrequiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,CJ_KeycardSystemCJ_KeycardSystemAArequiredVersion 0.1 — requiresDZ_Data,DZ_Gear_Consumables,DZ_Gear_Camping,JM_CF_ScriptsBastardos_DufflerequiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,CJ_KeycardSystemCJ_KeycardSystemA_KeychainrequiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,CJ_KeycardSystemBS_Keys_New2requiredVersion 0.1 —requires 14 addons
DZ_Characters,DZ_Characters_Backpacks,DZ_Characters_Pants,DZ_Characters_Tops,DZ_Gear_Containers,DZ_Characters_Headgear,DZ_Gear_Camping,DZ_Gear_Crafting,DZ_Gear_Tools,DZ_Animals,DZ_Data,DZ_Scripts,DZ_Sounds_Effects,DZ_Weapons_Melee_PoweredBS_Keys_New3requiredVersion 0.1 —requires 14 addons
DZ_Characters,DZ_Characters_Backpacks,DZ_Characters_Pants,DZ_Characters_Tops,DZ_Gear_Containers,DZ_Characters_Headgear,DZ_Gear_Camping,DZ_Gear_Crafting,DZ_Gear_Tools,DZ_Animals,DZ_Data,DZ_Scripts,DZ_Sounds_Effects,DZ_Weapons_Melee_PoweredBS_Keys_New4requiredVersion 0.1 —requires 14 addons
DZ_Characters,DZ_Characters_Backpacks,DZ_Characters_Pants,DZ_Characters_Tops,DZ_Gear_Containers,DZ_Characters_Headgear,DZ_Gear_Camping,DZ_Gear_Crafting,DZ_Gear_Tools,DZ_Animals,DZ_Data,DZ_Scripts,DZ_Sounds_Effects,DZ_Weapons_Melee_PoweredBS_Keys_New5requiredVersion 0.1 —requires 14 addons
DZ_Characters,DZ_Characters_Backpacks,DZ_Characters_Pants,DZ_Characters_Tops,DZ_Gear_Containers,DZ_Characters_Headgear,DZ_Gear_Camping,DZ_Gear_Crafting,DZ_Gear_Tools,DZ_Animals,DZ_Data,DZ_Scripts,DZ_Sounds_Effects,DZ_Weapons_Melee_PoweredBS_Keys_New6requiredVersion 0.1 —requires 14 addons
DZ_Characters,DZ_Characters_Backpacks,DZ_Characters_Pants,DZ_Characters_Tops,DZ_Gear_Containers,DZ_Characters_Headgear,DZ_Gear_Camping,DZ_Gear_Crafting,DZ_Gear_Tools,DZ_Animals,DZ_Data,DZ_Scripts,DZ_Sounds_Effects,DZ_Weapons_Melee_PoweredBS_LargeWoodenBoxrequiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,CJ_KeycardSystemMilcase1requiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,DZ_Gear_ContainersMilcase2requiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,DZ_Gear_ContainersMilcase4requiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,DZ_Gear_ContainersBS_MilCraterequiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,CJ_KeycardSystemBS_MilitaryCraterequiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,CJ_KeycardSystemBS_SmallrequiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,CJ_KeycardSystemBS_WoodenMilCraterequiredVersion 0.1 — requiresDZ_Data,DZ_Scripts,CJ_KeycardSystem
census 1.1 · findings 1.1 · hash d39f5e7e1483f373