#ElevatorFramework

1 messages ยท Page 1 of 1 (latest)

sudden tide
#

Fully functional multiplayer elevator framework for Arma Reforger. Features smooth movement, door sync, floor displays, call buttons, sound effects, and dead body handling. Server-authoritative with full replication.

#

PZ Elevator Framework

A complete, production-ready elevator system for Arma Reforger. Drop it into any map, configure your floors, and you have a working multiplayer elevator with smooth movement, synchronized doors, floor displays, sound effects, and more.

Core Features

The framework is fully server-authoritative with client replication. The server controls all movement, door states, and floor tracking. Clients receive smooth position updates and synchronized door animations. Everything works seamlessly in both singleplayer and dedicated multiplayer environments.

Elevator movement uses smooth hermite interpolation for natural acceleration and deceleration. Speed, door open duration, and door-close-to-move delay are all configurable per elevator system. Multiple elevators can run independently on the same map with no performance concerns โ€” each identified by a simple string ID that ties all its components together.

#

Modular Component Design

The system is built from small, focused components that you combine on your prefabs:

ElevatorSystemComponent: The brain. One per elevator. Manages floors, carts, and dispatches requests. Supports multiple cart strategies (nearest idle or nearest any).
ElevatorCartComponent: The moving platform. Handles movement interpolation, door control, sound playback, and body synchronization. Attach to your elevator car prefab.
ElevatorFloorMarkerComponent: Place one per floor to define stop positions. By default only the Y height is used (shaft XZ comes from the system entity), but full XYZ mode is available for non-vertical shafts.
ElevatorButtonComponent: Call buttons. Can inherit their floor index and elevator ID from a parent floor marker, or be configured standalone.
ElevatorDisplayComponent: Render-target screen on the elevator car showing the current floor number and directional arrows.
ElevatorFloorDisplayComponent: Render-target screen at each floor landing showing directional arrows when the elevator is in transit.
ElevatorRegistryComponent: A singleton on your GameMode that lets all components find each other by elevator ID.

#

User Actions

Two user action classes handle player interaction:

ElevatorCallUserAction: For landing call buttons. Players interact to summon the elevator to their floor.
ElevatorSelectFloorUserAction: For the interior panel. Supports one action per floor, automatically hides floors that don't exist in the system.
Sound System

Three sound events are supported out of the box:

SMOOTH_JAZZ: Ambient elevator music that plays continuously and follows the car's position.
ELEVATOR_MACHINERY_LOOP: Mechanical loop that plays only while the elevator is actually moving (not during door operations).
FLOOR_BEEP: A one-shot chime when the elevator arrives at a floor.
All sounds use the cached SoundComponent and update their world-space transformation each frame so audio positioning stays accurate as the car moves.

Dead Body Handling

The engine doesn't natively support keeping ragdolled physics bodies on a moving platform. This framework solves it with a two-layer approach:

First, during movement, a per-frame AABB query finds any dead or incapacitated characters within the elevator bounds and teleports them by the same delta the elevator moved that frame. This keeps resting bodies smoothly riding along.

Second, when the elevator arrives at a floor, a recovery scan checks the entire shaft column (from below the ground floor to above the top floor) for any bodies that may have fallen through during active ragdoll. Bodies at rest outside the elevator are teleported back onto the platform. A delayed follow-up scan 3 seconds later catches bodies that were still settling.

#

Setup

Add PZ_ElevatorRegistryComponent to your GameMode entity.
Place a system entity with PZ_ElevatorSystemComponent and configure your elevator ID, speed, and door timing.
Place floor marker entities at each stop with PZ_ElevatorFloorMarkerComponent.
Set up your elevator car prefab with PZ_ElevatorCartComponent, RplComponent, doors, sound, and optionally PZ_ElevatorDisplayComponent for the screen.
Add call buttons at each landing and floor select actions inside the car.
Optionally add PZ_ElevatorFloorDisplayComponent to floor landing screen panels.
All components auto-register with the system via the registry using matching elevator IDs. Registration includes retry logic so load order doesn't matter.

#

KNOWN ISSUES: items dropped in elevator will not remain in elevator but rather their world space origin.
so you'll have to ride back to wherever you dropped it if you want it back ๐Ÿ˜„

FIXED: items now ride along in elevator as well as mines etc are now placeable!

daring current
#

@dusk tree

sudden tide
#

87 downloads and 0 feedback ๐Ÿ˜ญ either its shit or it works flawlessly.

naive stratus
naive stratus
# sudden tide ye please do!

is there a cap on maximum number of floors? I've got it set up in a building with 23 storeys, but only 19 are showing in the actions (unless they need to be added manually?)

#

also worth noting that shaft control needs to be placed at the same coordinate as the elevator car, otherwise the elevator moves horizontally to the shaft control location when called

sudden tide
#

ahh ye just go into the actions manager on the cart and add more actions

#

i might rework the shaft control part all together.

naive stratus
#

its not a bad thing that it needs to be at the same coordinate, helps with organization

sudden tide
#

i did it on the off chance someone wanted to make an elevator that goes willy wonka style

#

but i never really fleshed it out

naive stratus
sudden tide
#

that is basically how it should work

naive stratus
#

going into GM mode while riding elevator reliably throws a null error (in workbench)

sudden tide
#

not my error lol

sudden tide
nocturne token
#

Don't go into GM mode in elevator.

sudden tide
#

its not me rofl as far as i can tell its a race condition in the base games editor.

#

ok it sort of is me but its harmless.

sudden tide
naive stratus
#

elevator car seems to be completely missing on dedicated server, seeing a noticeable performance hit in server fps too, no errors or prints in the logs though. Only running 1 elevator as a test with 30ish players online.

naive stratus
sudden tide
naive stratus
sudden tide
#

Idk how chill your player base is but if you restart it might just be ok again. I thought I fixed this but apparently not. It was always random when it happened.

#

I'm not home rn but I'll dig into it as soon as possible

naive stratus
#

no rush, its amazing work overall

sudden tide
#

Lol the whole project was gonna be a gamble but I really wanted to see a decent elevator mod

naive stratus
#

once you've got the final bugs squashed its going to be pretty epic

sudden tide
#

Ty man I appreciate it

sudden tide
sudden tide
#

ok i pushed another update hopefully fixing the race condition that sometimes causes the elevator to transform to world origin. and i adjusted some on frame events to alleviate server stress.(this will take some trial and error as i don't have a live environment i can test on. thank you for being my guinea pigs ๐Ÿ˜„ ) oh and i also fixed the fucking typo in the literal name of the project that i just noticed.

rustic elk
#

Thanks for the elevator !
Feedback we can have particles and decals attached but not objects

rustic elk
sudden tide
sudden tide
sacred musk
rustic elk
main mulch
#

@sudden tide is there support for vics being carried in the elevator? Im working on a space elevator model, and the overall size of the elevator is large enough to fit 3 to 4 vehicles, so i have been looking for mods i can use to carry them

sudden tide
#

I'm gonna be working on something that has to do with carrying vehicles and if I find a suitable solution to that I'll update the elevator framework with it too in case you are running into trouble!