Config = Config or {} Config.Standalone = { enabled = true, -- master kill-switch for the whole standalone layer debug = false, -- console prints for load/unload + toggles scriptsResource = 'prompt_mrpd_scripts', loadRadius = 120.0, -- RequestIpl within this many metres of an MLO probe unloadRadius = 135.0, -- RemoveIpl past this (hysteresis gap avoids thrash) command = { name = 'mrpdset', restricted = 'group.admin' }, -- restricted=false to disable ACE gate -- default state at first install (server-owner editable; KVP overrides once /mrpdset is used) defaults = { briefing = 'classroom', gym = 'on', training = 'killhouse', lifts = 'on' }, -- classroom = briefingroomdesks (tables+chairs); matches scripts' defaultMode gym = { mode = 'auto', -- 'auto' = anim_core if present, else static ; 'static' = always static -- Location data mirrored verbatim from prompt_mrpd_scripts/config/gym.lua GymLocations['mrpd'] location = { name = 'mrpd', coords = vec3(439.128, -964.922, 23.368), renderDistance = nil, -- not set in source; anim_core uses its own default props = {}, -- base props (empty); entitySetProps are merged by syncAnimGym entitySets = { gym = true }, entitySetProps = { gym = { bench = { { coords = vec4(440.817, -965.604, 22.617, 92.480), bar = vec4(440.237, -965.694, 22.914, 92.480) }, { coords = vec4(440.862, -962.917, 22.617, 89.574), bar = vec4(440.324, -962.959, 22.914, 89.574) }, }, gymbike = { vec4(440.679, -960.946, 22.408, 87.915), vec4(440.664, -959.860, 22.408, 91.658), }, leg_press = { vec4(437.870, -959.870, 22.411, 21.658), vec4(436.183, -959.887, 22.411, 21.580), }, speedbag = { vec4(440.952, -970.842, 23.865, 270.204), vec4(436.407, -970.841, 23.865, 272.032), vec4(435.099, -965.131, 23.865, 181.553), vec4(435.106, -963.791, 23.865, 179.117), }, gympullmachine1 = { vec4(435.433, -968.892, 22.407, 46.715), }, gympullmachine2 = { vec4(435.383, -967.443, 22.405, 313.654), }, gymlatpull = { vec4(437.568, -963.257, 22.409, 181.715), vec4(437.577, -964.658, 22.409, 180.494), }, gymrowpull = { vec4(438.101, -966.109, 22.407, 272.298), vec4(438.088, -967.499, 22.407, 271.405), }, vin_chu = { vec4(435.470, -962.099, 22.410, 178.958), }, }, }, }, }, animCores = { 'prompt_anim_core', 'prompt_anim_core_limited' }, -- exact names; new core matched by prefix too animCorePrefix = 'prompt_anim_core_2', -- versioned new core (e.g. prompt_anim_core_2_xxx) -- 2 IPL-managed MLOs mlos = { { ipl = 'prompt_mrpd_milo_', probe = vec3(455.907745, -999.011841, 27.4721947) }, { ipl = 'tuco_mrpd_int', probe = vec3(442.90274, -991.2584, 40.315834) }, }, -- feature -> interior probe + { mode = entitySetName } features = { briefing = { probe = vec3(455.907745, -999.011841, 27.4721947), modes = { classroom = 'briefingroomdesks', briefing = 'briefingroomchairs' } }, gym = { probe = vec3(449.8008, -988.727051, 26.10148), modes = { on = 'gym' } }, training = { probe = vec3(449.8008, -988.727051, 26.10148), modes = { killhouse = 'solo_train', cqb = 'team_train' } }, -- static elevators (the animated ones live in prompt_mrpd_scripts) lifts = { probe = vec3(444.900818, -990.149963, 31.2896633), modes = { on = 'lifts' } }, }, -- Base-tier elevator: floor-select teleport menu (E at the lift doors). -- Dormant while prompt_mrpd_scripts runs (its animated elevator takes over). elevator = { enabled = true, title = 'MRPD Elevator', helpText = 'Press ~INPUT_CONTEXT~ to use the elevator', interactRadius = 1.8, probe = vec3(444.40, -968.71, 28.11), -- elevator shaft interior (mirrors scripts' Config.Elevator.InteriorCoords) -- each floor: interaction point AND teleport destination, inside the lift cabin -- (w = heading after teleport — facing out of the lift). Z per floor mirrors -- the scripts' Config.Elevator.FloorHeights. floors = { { label = 'Garage', coords = vec4(444.350, -968.383, 22.36, 180.0) }, { label = 'Lobby', coords = vec4(444.350, -968.383, 28.11, 180.0) }, { label = 'Bureau', coords = vec4(444.350, -968.383, 38.59, 180.0) }, { label = 'Rooftop', coords = vec4(444.350, -968.383, 43.69, 180.0) }, }, }, }