Configuration
This section includes all configurable files for the selected script. Most settings are configured automatically, but each config.lua file contains a header comment explaining the purpose and usage of every configuration type. Be sure to read the header of each file carefully to fully understand how to customize and adapt the system for QBCORE, ESX, or standalone environments, ensuring seamless integration with your server.
qs-medical-creator/config/main.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] – Safe for users to modify. Adjust these values as needed.
-- • [INFO] – Informational note describing what the variable or block does.
-- • [ADV] – Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] – Core functionality. Do not modify unless you are a developer.
-- • [AUTO] – Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
Config = Config or {} -- [CORE] Main configuration table.
--──────────────────────────────────────────────────────────────────────────────
-- Language Selection [EDIT]
-- [INFO] Pick your main language. Files are located in locales/*.
-- [INFO] If yours is missing, create a new file in locales/* and translate it.
--──────────────────────────────────────────────────────────────────────────────
Config.Locale = 'en' -- [EDIT]
--[[ [INFO]
Available languages by default:
"ar" (العربية), "bg" (Български), "ca" (Català), "cs" (Čeština),
"da" (Dansk), "de" (Deutsch), "el" (Ελληνικά), "en" (English),
"es" (Español), "fa" (فارسی), "fr" (Français), "hi" (हिन्दी),
"hu" (Magyar), "it" (Italiano), "ja" (日本語), "ko" (한국어),
"nl" (Nederlands), "no" (Norsk), "pl" (Polski), "pt" (Português),
"ro" (Română), "ru" (Русский), "sl" (Slovenščina), "sv" (Svenska),
"th" (ไทย), "tr" (Türkçe), "zh-CN" (简体中文)
]]
--──────────────────────────────────────────────────────────────────────────────
-- Framework Detection [AUTO]
-- [INFO] Auto-detects qb-core / es_extended / qbx_core. If you renamed the
-- framework resource, remove auto and set it manually after adapting
-- the framework files inside this script.
--──────────────────────────────────────────────────────────────────────────────
local frameworks = { -- [CORE]
['es_extended'] = 'esx',
['qb-core'] = 'qb',
['qbx_core'] = 'qb'
}
Config.Framework = DependencyCheck(frameworks) or 'none' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Target & Interaction [EDIT]
-- [INFO] Editor/interaction volumes and target usage (qtarget / ox_target).
--──────────────────────────────────────────────────────────────────────────────
Config.TargetWidth = 5.0 -- [EDIT]
Config.TargetHeight = 5.0 -- [EDIT]
Config.UseTarget = false -- [EDIT] true to use 'qb-target' or 'ox_target'. false = 3D prompts.
Config.EMSMenuKey = 'F5' -- [EDIT] Key to open EMS menu (ensure keybind exists in your key system).
--──────────────────────────────────────────────────────────────────────────────
-- Vehicle Keys Detection [AUTO]
-- [INFO] Auto-detects your vehicle key system. Do NOT run duplicates (two key systems).
-- [INFO] If yours isn’t listed, create an adapter in client/custom following examples.
--──────────────────────────────────────────────────────────────────────────────
local vehicleKeys = { -- [CORE]
['qs-vehiclekeys'] = 'qs-vehiclekeys',
['qb-vehiclekeys'] = 'qb-vehiclekeys',
['F_RealCarKeysSystem'] = 'F_RealCarKeysSystem',
['fivecode_carkeys'] = 'fivecode_carkeys',
['glfp10_carkeys'] = 'glfp10_carkeys',
['mono_carkeys'] = 'mono_carkeys',
['ti_vehicleKeys'] = 'ti_vehicleKeys',
['vehicles_keys'] = 'vehicles_keys',
['wasabi_carlock'] = 'wasabi_carlock',
['xd_locksystem'] = 'xd_locksystem',
['qbx_vehiclekeys'] = 'qbx_vehiclekeys',
['MrNewbVehicleKeys'] = 'MrNewbVehicleKeys'
}
Config.VehicleKeys = DependencyCheck(vehicleKeys) or 'standalone' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Fuel System Detection [AUTO]
-- [INFO] Auto-detects supported fuel resources.
--──────────────────────────────────────────────────────────────────────────────
local fuels = { -- [CORE]
['qs-fuelstations'] = 'qs-fuelstations',
['LegacyFuel'] = 'LegacyFuel',
['okokGasStation'] = 'okokGasStation',
['esx-sna-fuel'] = 'esx-sna-fuel',
['ps-fuel'] = 'ps-fuel',
['lj-fuel'] = 'lj-fuel',
['ox_fuel'] = 'ox_fuel',
['ti_fuel'] = 'ti_fuel',
['FRFuel'] = 'FRFuel',
['ND_Fuel'] = 'ND_Fuel',
['cdn-fuel'] = 'cdn-fuel',
['BigDaddy-Fuel'] = 'BigDaddy-Fuel'
}
Config.Fuel = DependencyCheck(fuels) or 'standalone' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Wardrobe / Appearance Detection [AUTO]
-- [INFO] Auto-selects your clothing/appearance system.
--──────────────────────────────────────────────────────────────────────────────
local wardrobes = { -- [CORE]
['qs-appearance'] = 'qs-appearance',
['qb-clothing'] = 'qb-clothing',
['codem-appearance'] = 'codem-appearance',
['ak47_clothing'] = 'ak47_clothing',
['fivem-appearance'] = 'fivem-appearance',
['illenium-appearance'] = 'illenium-appearance',
['raid_clothes'] = 'raid_clothes',
['rcore_clothes'] = 'rcore_clothes',
['rcore_clothing'] = 'rcore_clothing',
['sleek-clothestore'] = 'sleek-clothestore',
['tgiann-clothing'] = 'tgiann-clothing',
['p_appearance'] = 'p_appearance'
}
Config.Wardrobe = DependencyCheck(wardrobes) or 'standalone' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Inventory Detection [AUTO]
-- [INFO] Auto-selects your inventory backend and default stash params.
--──────────────────────────────────────────────────────────────────────────────
local inventories = { -- [CORE]
['qs-inventory'] = 'qs-inventory',
['qb-inventory'] = 'qb-inventory',
['ox_inventory'] = 'ox_inventory',
['tgiann-inventory'] = 'tgiann-inventory',
}
Config.Inventory = DependencyCheck(inventories) or 'standalone' -- [AUTO]
Config.DefaultStashData = { -- [EDIT]
maxweight = 1000000, -- [EDIT]
slots = 30, -- [EDIT]
}
--──────────────────────────────────────────────────────────────────────────────
-- Staff Position Refresh [ADV]
-- [INFO] Interval in milliseconds for staff position updates. Lower = more CPU.
--──────────────────────────────────────────────────────────────────────────────
Config.PositionRefreshInterval = 5000 -- [ADV]
--──────────────────────────────────────────────────────────────────────────────
-- Society / Management Detection [AUTO]
-- [INFO] Detects society management resource.
--──────────────────────────────────────────────────────────────────────────────
local society = { -- [CORE]
['esx_society'] = 'esx_society',
['qb-management'] = 'qb-management'
}
Config.Society = DependencyCheck(society) or 'standalone' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Insurance Detection & Discounts [AUTO]/[EDIT]
-- [INFO] Auto-detects health insurance system and applies discounts if enabled.
--──────────────────────────────────────────────────────────────────────────────
local insurance = { -- [CORE]
['m-Insurance'] = 'm',
}
Config.Insurance = DependencyCheck(insurance) or 'standalone' -- [AUTO]
Config.InsuranceDiscount = { -- [EDIT]
checkIn = 0.5, -- [EDIT] 50% discount on check-in with valid insurance.
}
--──────────────────────────────────────────────────────────────────────────────
-- Phone / Distress Signal [AUTO]/[EDIT]
-- [INFO] Auto-detects phone app; toggle distress usage below.
--──────────────────────────────────────────────────────────────────────────────
local phones = { -- [CORE]
['qs-smartphone-pro'] = 'qs-smartphone-pro',
['qs-smartphone'] = 'qs-smartphone',
['lb-phone'] = 'lb-phone',
}
Config.Phone = DependencyCheck(phones) or 'standalone' -- [AUTO]
Config.UsePhoneDistressSignal = false -- [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- Dispatch Detection [AUTO]
-- [INFO] Auto-detects custom dispatch systems.
--──────────────────────────────────────────────────────────────────────────────
local dispatch = { -- [CORE]
['origen_police'] = 'origen_police',
}
Config.Dispatch = DependencyCheck(dispatch) or 'standalone' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Authorized Medical Jobs [EDIT]
-- [INFO] Jobs allowed to access EMS features/menus.
--──────────────────────────────────────────────────────────────────────────────
Config.Jobs = { -- [EDIT]
'ambulance'
}
--──────────────────────────────────────────────────────────────────────────────
-- Police Treatment Permissions [EDIT]
-- [INFO] Allow specific non-EMS jobs to use basic treatment items.
--──────────────────────────────────────────────────────────────────────────────
Config.PoliceCanTreat = { -- [EDIT]
enable = true, -- [EDIT]
jobs = { 'police' } -- [EDIT]
}
--──────────────────────────────────────────────────────────────────────────────
-- Billing System Detection [AUTO]
-- [INFO] Detects your billing backend.
--──────────────────────────────────────────────────────────────────────────────
local bills = { -- [CORE]
['qs-billing'] = 'qs',
['qb-billing'] = 'qb',
['esx_billing'] = 'esx',
['okokBilling'] = 'okok'
}
Config.Bill = DependencyCheck(bills) or 'standalone' -- [AUTO]
--──────────────────────────────────────────────────────────────────────────────
-- Death & Job Handling [EDIT]
-- [INFO] Configure regeneration, on-death behavior, and fallback job.
--──────────────────────────────────────────────────────────────────────────────
Config.DisableHealthRegeneration = true -- [EDIT]
Config.UnemployedJob = { -- [EDIT] Set job on going off-duty.
job = 'unemployed',
grade = 0
}
Config.RemoveItemsAfterRPDeath = true -- [EDIT] Remove all items on RP death?
Config.KeepItemsOnDeath = { -- [EDIT] Items to keep even if removing.
'phone',
'cash',
'id_card'
}
Config.DisableDeathAnimation = false -- [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- Image Path (Inventory Integration) [AUTO]/[INFO]
-- [INFO] Dynamically picks image path based on your inventory backend.
--──────────────────────────────────────────────────────────────────────────────
Config.ImagePath = 'nui://qs-inventory/html/images/' -- [AUTO]
if Config.Inventory == 'qb-inventory' then
Config.ImagePath = 'nui://qb-inventory/html/images/' -- [AUTO]
elseif Config.Inventory == 'ox_inventory' then
Config.ImagePath = 'nui://ox_inventory/web/images/' -- [AUTO]
end
--──────────────────────────────────────────────────────────────────────────────
-- Treatment Items (Quick Tools) [EDIT]
-- [INFO] Items usable directly for specific injuries.
--──────────────────────────────────────────────────────────────────────────────
Config.TreatmentItems = { -- [EDIT]
{ item = 'tweezers', label = 'Tweezers', description = 'Use for bleeding', image = Config.ImagePath .. 'tweezers.png', injury = 'bleeding' },
{ item = 'icepack', label = 'Ice Pack', description = 'Use for bruising', image = Config.ImagePath .. 'icepack.png', injury = 'bruising' },
{ item = 'burncream', label = 'Burn Cream', description = 'Use for burning', image = Config.ImagePath .. 'burncream.png', injury = 'burning' }
}
Config.TreatmentTime = 9 * 1000 -- [EDIT] Progress duration (ms) for treatment.
--──────────────────────────────────────────────────────────────────────────────
-- Last Stand / Respawn / Death Behavior [EDIT]
-- [INFO] Control last-stand and bleed-out phases plus voice mute when dead.
--──────────────────────────────────────────────────────────────────────────────
Config.LastStand = true -- [EDIT]
Config.MuteDeadPlayer = true -- [EDIT] Mute dead players’ voice.
Config.RespawnTimer = 5 * 60000 -- [EDIT] 5 minutes.
Config.BleedOutTimer = 20 * 60000 -- [EDIT] 20 minutes.
--──────────────────────────────────────────────────────────────────────────────
-- Drowning Rules [EDIT]
-- [INFO] Override land timers when dying in water; enforce fast respawn.
--──────────────────────────────────────────────────────────────────────────────
Config.Drowning = { -- [EDIT]
enable = true, -- [EDIT]
duration = 1 * 60000 -- [EDIT] 60 seconds.
}
--──────────────────────────────────────────────────────────────────────────────
-- EMS Revive Payment [EDIT]
-- [INFO] Optional revive fee for EMS actions.
--──────────────────────────────────────────────────────────────────────────────
Config.EMSRevivePrize = { -- [EDIT]
enable = true, -- [EDIT]
prize = 4000 -- [EDIT]
}
--──────────────────────────────────────────────────────────────────────────────
-- Death Animation [EDIT]
-- [INFO] Default animation while incapacitated.
--──────────────────────────────────────────────────────────────────────────────
Config.DeadAnimation = { -- [EDIT]
dict = 'mini@cpr@char_b@cpr_def',
anim = 'cpr_pumpchest_idle'
}
--──────────────────────────────────────────────────────────────────────────────
-- Medical System: Item Effects [EDIT]/[ADV]
-- [INFO] Fine-grained medication effects and durations. Balance with care.
--──────────────────────────────────────────────────────────────────────────────
Config.MedicalSystem = { -- [EDIT]
enable = true, -- [EDIT]
items = { -- [ADV]
{
item = 'painkiller',
label = 'Painkiller',
duration = 20000,
effects = { reduce_bruising = 2, reduce_burning = 1, screen_blur = true, movement_slow = 0.9 }
},
{
item = 'morphine',
label = 'Morphine',
duration = 60000,
effects = { reduce_bruising = 4, reduce_burning = 3, reduce_bleeding = 1, screen_blur = true, screen_distortion = true, movement_slow = 0.7, weapon_accuracy = 0.5 }
},
{
item = 'hemostatic_agent',
label = 'Hemostatic Agent',
duration = 12000,
effects = { reduce_bleeding = 3, stop_bleeding_chance = 80 }
},
{
item = 'burn_gel',
label = 'Burn Treatment Gel',
duration = 24000,
effects = { reduce_burning = 2, cooling_effect = true, pain_reduction = 0.5 }
},
{
item = 'adrenaline',
label = 'Adrenaline Shot',
duration = 18000,
effects = { movement_boost = 1.3, weapon_accuracy = 1.2, health_regen = true, screen_shake = true, heart_rate_increase = true }
},
{
item = 'antibiotic',
label = 'Antibiotic',
duration = 90000,
effects = { prevent_infection = true, slow_healing = true, immunity_boost = 0.2 }
},
{
item = 'epinephrine',
label = 'Epinephrine Auto-Injector',
duration = 30000,
effects = { instant_health = 50, reduce_all_effects = 1, movement_boost = 1.1, weapon_accuracy = 1.1, screen_flash = true }
},
{
item = 'self_sedative',
label = 'Self Sedative',
duration = 45000,
effects = { reduce_bruising = 3, reduce_burning = 2, movement_slow = 0.6, weapon_accuracy = 0.3, screen_blur = true, drowsiness = true }
}
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Bandage Item [EDIT]
-- [INFO] Self-use bandage behavior and healing model.
--──────────────────────────────────────────────────────────────────────────────
Config.BandageItem = { -- [EDIT]
enable = true,
item = 'bandage',
healAmountMultiplier = 0.2, -- [EDIT] Percentage of effective health.
healBleed = false, -- [EDIT] If true, stops bleed without EMS.
duration = 7 * 1000 -- [EDIT] Progress duration (ms).
}
--──────────────────────────────────────────────────────────────────────────────
-- Creator Permissions [EDIT]
-- [INFO] Jobs allowed to open creator menus/tools.
--──────────────────────────────────────────────────────────────────────────────
Config.CreatorJobs = { -- [EDIT]
'realestate',
'police',
}
--[[ [INFO]
✨ KEY FEATURES:
• Body-part damage (Head/Body/Arms/Legs), types: Bleeding, Bruising, Burning
• Levels 1–4 with stacking effects, particles, screen & camera effects
• 9 medical items with authentic side effects & durations
• Performance-friendly with configurable intervals
]]
--──────────────────────────────────────────────────────────────────────────────
-- Injury System [EDIT]/[ADV]
-- [INFO] Controls the injury detection loop, threshold, particles and movement.
--──────────────────────────────────────────────────────────────────────────────
Config.Injury = { -- [EDIT]
enable = true, -- [EDIT]
notifications = true, -- [EDIT] Notify players about injuries.
bloodParticles = true, -- [EDIT]
interval = 25000, -- [ADV] Check interval (min 5000).
weaponBlacklist = { -- [ADV] Weapons that should not cause injuries.
`WEAPON_STUNGUN`
},
damageThreshold = { -- [EDIT] False to disable thresholds.
health = 5,
armour = 5,
},
effects = { -- [EDIT]
flash = true,
shakeCam = true,
blurCam = true,
depressedMovement = true, -- [EDIT]
injuredMovement = true, -- [EDIT]
weaponDamageModifier = true -- [EDIT] Reduce weapon dmg when arm-injured.
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Default Creator Items [EDIT]
-- [INFO] Items available by default in the medical creator shop.
--──────────────────────────────────────────────────────────────────────────────
Config.CreatorDefaultItems = { -- [EDIT]
{ name = 'medbag', label = 'Medical Bag', price = 1000, description = 'Professional medical bag containing essential emergency supplies for field treatment. Includes bandages, antiseptics, and basic surgical tools.' },
{ name = 'medikit', label = 'First-Aid Kit', price = 250, description = 'Comprehensive first-aid kit designed for immediate emergency response. Contains bandages, pain relievers, and wound treatment supplies.' },
{ name = 'painkiller', label = 'Pain Killer', price = 100, description = 'Fast-acting medication that temporarily reduces pain and discomfort. Commonly used for injuries or post-treatment recovery.' },
{ name = 'morphine', label = 'Morphine', price = 45, description = 'Powerful analgesic used to relieve severe pain in trauma or post-surgical situations. Must be administered carefully to avoid overdose.' },
{ name = 'hemostatic_agent', label = 'Hemostatic Agent', price = 60, description = 'Advanced coagulant that quickly stops bleeding from open wounds or deep cuts. A must-have for trauma and combat situations.' },
{ name = 'burn_gel', label = 'Burn Gel', price = 40, description = 'Cooling medical gel used to treat minor burns and scalds. Instantly soothes the skin and prevents infection.' },
{ name = 'adrenaline', label = 'Adrenaline', price = 30, description = 'Emergency stimulant used to boost heart rate and restore consciousness. Ideal for shock or critical conditions.' },
{ name = 'antibiotic', label = 'Antibiotic', price = 30, description = 'Medication that prevents or fights bacterial infections. Commonly used to aid recovery after injury or surgery.' },
{ name = 'epinephrine', label = 'Epinephrine', price = 15, description = 'Life-saving injection used to treat severe allergic reactions or anaphylactic shock. Provides immediate respiratory relief.' },
{ name = 'self_sedative', label = 'Self Sedative', price = 15, description = 'Calming liquid medication that helps reduce stress, anxiety, and high heart rate. Recommended for nervous or unstable patients.' },
{ name = 'stretcher', label = 'Stretcher', price = 1500, description = 'Professional medical stretcher for safe patient transport. Features adjustable height, safety straps, and smooth mobility for emergency situations.' },
}
--──────────────────────────────────────────────────────────────────────────────
-- Revive Rules [EDIT]
-- [INFO] If true, EMS must treat each damaged body part before reviving.
--──────────────────────────────────────────────────────────────────────────────
Config.ForceTreatmentForRevive = true -- [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- EMS-Only Items [EDIT]
-- [INFO] Items restricted to ambulance staff and their behavior.
--──────────────────────────────────────────────────────────────────────────────
Config.AmbulanceItems = { -- [EDIT]
revive = { item = 'defib', label = 'Defibrillator', remove = false },
heal = { item = 'medikit', label = 'Medikit', duration = 1000, healBleed = true, remove = true },
sedate = { item = 'sedative', label = 'Sedative', duration = 8 * 60000, remove = true },
medbag = { enable = true, item = 'medbag', label = 'Med Bag', remove = true }
}
--──────────────────────────────────────────────────────────────────────────────
-- Props & Controls While Dead [EDIT]
-- [INFO] Medbag object and allowed keys while dead.
--──────────────────────────────────────────────────────────────────────────────
Config.MedBagObject = joaat('xm_prop_x17_bag_med_01a') -- [EDIT]
Config.EnabledKeysWhileDead = { -- [EDIT]
1, 2, 38, 46, 47, 245
}
--──────────────────────────────────────────────────────────────────────────────
-- Free Mode Editor Keys [ADV]
-- [INFO] Keybinds depend on your key system. Ensure Keys[...] exists globally.
-- [INFO] If you don’t use a Keys map, replace with control codes or your binder.
--──────────────────────────────────────────────────────────────────────────────
Config.FreeModeKeys = { -- [ADV]
ChangeKey = Keys['LEFTCTRL'],
MoreSpeed = Keys['.'],
LessSpeed = Keys[','],
MoveToTop = Keys['TOP'],
MoveToDown = Keys['DOWN'],
MoveToForward = Keys['TOP'],
MoveToBack = Keys['DOWN'],
MoveToRight = Keys['RIGHT'],
MoveToLeft = Keys['LEFT'],
RotateToTop = Keys['6'],
RotateToDown = Keys['7'],
RotateToLeft = Keys['8'],
RotateToRight = Keys['9'],
TiltToTop = Keys['Z'],
TiltToDown = Keys['X'],
TiltToLeft = Keys['C'],
TiltToRight = Keys['V'],
StickToTheGround = Keys['LEFTALT'],
}
--──────────────────────────────────────────────────────────────────────────────
-- Editor Action Controls [EDIT]
-- [INFO] Mouse/keyboard actions for editor workflows.
--──────────────────────────────────────────────────────────────────────────────
ActionControls = { -- [EDIT]
leftClick = { label = 'Left Click', codes = { 24 } },
forward = { label = 'Forward +/-', codes = { 33, 32 } },
right = { label = 'Right +/-', codes = { 35, 34 } },
up = { label = 'Up +/-', codes = { 52, 51 } },
add_point = { label = 'Add Point', codes = { 24 } },
undo_point = { label = 'Undo Last', codes = { 25 } },
rotate_z = { label = 'RotateZ +/-', codes = { 20, 73 } },
rotate_z_scroll = { label = 'RotateZ +/-', codes = { 17, 16 } },
offset_z = { label = 'Offset Z +/-', codes = { 44, 46 } },
boundary_height = { label = 'Z Boundary +/-', codes = { 20, 73 } },
done = { label = 'Done', codes = { 191 } },
cancel = { label = 'Cancel', codes = { 194 } },
}
--──────────────────────────────────────────────────────────────────────────────
-- Camera Options [EDIT]
-- [INFO] Free-cam movement and rotation speeds for editor mode.
--──────────────────────────────────────────────────────────────────────────────
CameraOptions = { -- [EDIT]
lookSpeedX = 1000.0,
lookSpeedY = 1000.0,
moveSpeed = 20.0,
climbSpeed = 10.0,
rotateSpeed = 20.0,
}
--──────────────────────────────────────────────────────────────────────────────
-- Debug Options [EDIT]
-- [INFO] Verbose logging and zone visualization.
--──────────────────────────────────────────────────────────────────────────────
Config.Debug = true -- [EDIT]
Config.ZoneDebug = false -- [EDIT]
Config.MinPointLength = 70.0 -- [EDIT] Minimum poly segment length.
Config.DisableSounds = false -- [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- bob74_ipl Compatibility (Pillbox) [ADV]/[CORE]
-- [INFO] On build ≥ 2060, disable Pillbox IPLs from bob74_ipl to avoid clashes.
--──────────────────────────────────────────────────────────────────────────────
local function destroyBob74ipl() -- [CORE]
if GetGameBuildNumber() >= 2060 then -- [INFO]
local object = exports['bob74_ipl']:GetPillboxHospitalObject() -- [INFO]
object.Enable(false) -- [CORE]
end
end
--──────────────────────────────────────────────────────────────────────────────
-- bob74_ipl Init Guard [CORE]
-- [INFO] Waits for bob74_ipl to initialize, then disables conflicting IPLs.
--──────────────────────────────────────────────────────────────────────────────
CreateThread(function() -- [CORE]
Wait(5000) -- [ADV] Allow bob74_ipl init.
if GetResourceState('bob74_ipl'):find('started') then -- [AUTO]
destroyBob74ipl() -- [CORE]
end
end)
--──────────────────────────────────────────────────────────────────────────────
-- bob74_ipl Restart Handler [CORE]
-- [INFO] Re-applies removal if bob74_ipl restarts while server is running.
--──────────────────────────────────────────────────────────────────────────────
AddEventHandler('onResourceStart', function(resourceName) -- [CORE]
if resourceName == 'bob74_ipl' then -- [AUTO]
Wait(2500) -- [ADV]
destroyBob74ipl() -- [CORE]
end
end)
qs-medical-creator/config/hospital.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This section defines hospital zones, services, and interaction points.
-- Comments follow the standard:
-- • [EDIT] – Safe to modify.
-- • [INFO] – Explanation of what a value/block does.
-- • [ADV] – Advanced tuning. Change only if you know the implications.
-- • [CORE] – Core logic/structures. Don’t alter shapes/keys unless developing.
-- • [AUTO] – Managed by code. Never edit manually.
--──────────────────────────────────────────────────────────────────────────────
---@type ConfigHospital[]
Config.Hospitals = { -- [CORE] Master list of full-feature hospitals (with beds, garage, etc.).
{
id = 'pillbox', -- [EDIT] Unique hospital identifier (used internally and in logs).
--──────────────────────────────────────────────────────────────────
-- Zone & Anchor Coordinates --
--──────────────────────────────────────────────────────────────────
zone = { -- [EDIT]
coords = vec3(320.04052734375, -591.7145385742188, 43.29180526733398), -- [EDIT] Zone center for detection.
size = vec3(120.0), -- [EDIT] Zone size (cube). Increase if your MLO is bigger.
},
coords = vec3(320.04052734375, -591.7145385742188, 43.29180526733398), -- [INFO] Anchor position; used for general zone helpers.
--──────────────────────────────────────────────────────────────────
-- Respawn / Check-In --
--──────────────────────────────────────────────────────────────────
respawnPoint = { -- [EDIT]
coords = vec4(315.4651489257813, -583.1113891601562, 43.28171920776367, 246.7841949462891), -- [EDIT] Fallback spawn.
useCheckInInstead = true -- [EDIT] If true, check-in logic governs respawn flow when available.
},
--──────────────────────────────────────────────────────────────────
-- Map Blip --
--──────────────────────────────────────────────────────────────────
blip = { -- [EDIT]
enable = true, -- [EDIT] Show blip on map.
coords = vec3(320.04052734375, -591.7145385742188, 43.29180526733398), -- [EDIT]
sprite = 61, -- [EDIT]
color = 2, -- [EDIT]
scale = 1.0, -- [EDIT]
label = 'Pillbox Hospital' -- [EDIT]
},
--──────────────────────────────────────────────────────────────────
-- Duty / Stash / Boss Areas --
--──────────────────────────────────────────────────────────────────
duty = { -- [EDIT] On/Off duty switch for EMS staff.
enable = true,
coords = vec3(305.3186340332031, -597.4736328125, 43.29183959960937),
distance = 3.0
},
stash = { -- [EDIT] Shared stash (inventory integration required).
enable = true,
coords = vec3(310.1644287109375, -599.5597534179688, 43.29182434082031),
distance = 2.0
},
boss = { -- [EDIT] Boss menu (grade restrictions handled by framework).
enable = true,
coords = vec3(309.921142578125, -602.950927734375, 43.29182434082031),
distance = 3.0
},
--──────────────────────────────────────────────────────────────────
-- Check-In Desk (NPC + Beds) --
--──────────────────────────────────────────────────────────────────
checkIn = { -- [EDIT]
enable = true, -- [EDIT] Enable NPC-driven check-in.
ped = 's_m_m_doctor_01', -- [EDIT] Ped model for receptionist.
coords = vec4(307.9654846191406, -588.1099853515625, 43.2918472290039 - 1.0, 155.0590362548828), -- [EDIT]
distance= 50.0, -- [EDIT] Max distance to allow check-in interaction.
cost = 3000, -- [EDIT] Payment for treatment/respawn (billing integration).
duration= 15 * 1000, -- [EDIT] Check-in processing time (ms).
maxOnDuty = 3, -- [EDIT] If ≥ this many EMS are on duty, check-in may be disabled or reprioritized.
disableHospitalBeds = false, -- [EDIT] If true, always use respawnNoBedCoords (ignore beds list).
respawnNoBedCoords = vec4(316.66, -581.3, 43.28, 339.02), -- [EDIT] Fallback respawn if no bed is used/available.
beds = { -- [EDIT] Bed list (player spawns/recovers here).
vec4(333.98287963867, -578.43774414062, 42.864631652832, 70.000022888184),
vec4(326.90502929688, -576.34295654297, 42.877216339111 + 0.3, 340.00003051758),
vec4(344.70373535156, -581.04907226562, 42.871894836426, 70.000022888184),
vec4(349.42709350586, -583.51416015625, 42.871894836426, 340.00003051758)
}
},
--──────────────────────────────────────────────────────────────────
-- Wardrobe --
--──────────────────────────────────────────────────────────────────
wardrobe = { -- [EDIT] Access to appearance/locker systems.
enable = true,
coords = vec4(298.780029296875, -599.7715454101562, 43.29206085205078, 341.15),
distance = 3.0,
},
--──────────────────────────────────────────────────────────────────
-- Shop (Inventory-Backed) --
--──────────────────────────────────────────────────────────────────
-- [INFO] Supported in qs-inventory, qb-inventory, ps-inventory by default.
-- [INFO] For other inventories, add store definitions within those resources.
shop = { -- [EDIT]
enable = true,
ped = 's_m_m_doctor_01', -- [EDIT] Shopkeeper ped.
animationDict = 'mini@strip_club@idles@bouncer@base', -- [ADV] Idle anim dict for immersion.
animationName = 'base', -- [ADV]
coords = vec4(316.68939208984375, -588.1437377929688, 43.29182434082031 - 1.0, 185.07872009277344),
distance = 3.0,
items = Config.CreatorDefaultItems -- [INFO] Pulls from global creator items list.
},
--──────────────────────────────────────────────────────────────────
-- Garage / Vehicles --
--──────────────────────────────────────────────────────────────────
garage = { -- [EDIT]
{
menuCoords = vec3(295.0177917480469, -600.4273071289062, 43.3034439086914),
distance = 5.0,
spawnCoords= vec4(287.3741760253906, -611.8311157226562, 43.38404083251953, 70.00999450683594),
vehicles = {
{ model='ambulance', label='Ambulance', grades={1,2,3} } -- [EDIT] Grade gating per framework job grade.
}
},
{
menuCoords = vec3(339.72088623046875, -588.82763671875, 74.16568756103516),
distance = 5.0,
spawnCoords= vec4(350.1439208984375, -587.94775390625, 74.16577911376953, 274.9385070800781),
vehicles = {
{ model='polmav', label='Maverick', grades={1,2,3} } -- [EDIT] Air unit; ensure model is streamed/allowed.
}
}
}
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Standalone Check-In Spots (No Full Hospital Logic) --
-- [INFO] Lightweight check-in points that only handle respawn/treatment.
--──────────────────────────────────────────────────────────────────────────────
Config.EnableStandaloneHospitals = true -- [EDIT] Toggle standalone points globally.
---@type HospitalInteractionCheckIn[]
Config.StandaloneHospitals = { -- [EDIT]
{
id = 'sandy', -- [EDIT] Unique ID for the standalone point.
ped = 's_m_m_scientist_01', -- [EDIT]
animationDict = 'mini@strip_club@idles@bouncer@base', -- [ADV]
animationName = 'base', -- [ADV]
coords = vec4(-1600.72265625, 5204.52587890625, 3.3, 23.65213012695312), -- [EDIT] NPC position.
distance= 5.0, -- [EDIT] Interaction radius.
cost = 5000, -- [EDIT] Fee to use this check-in.
duration= 5000, -- [EDIT] Processing time (ms) – 5 seconds.
disableHospitalBeds = true, -- [EDIT] Forces respawn to respawnNoBedCoords.
respawnNoBedCoords = vec4(-1598.0526123046875, 5206.6220703125, 4.3100938796997, 295.98626708984375), -- [EDIT]
beds = {} -- [INFO] No beds at standalone points by default.
},
}