#ElevatorFramework
1 messages ยท Page 1 of 1 (latest)
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.
shameless ko-fi plug : https://ko-fi.com/dustybarz50259
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!
@dusk tree
87 downloads and 0 feedback ๐ญ either its shit or it works flawlessly.
I've got a big map with some tall ass buildings I am looking to add this to, I will give some feedback when I do ๐ฅ
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
ahh ye just go into the actions manager on the cart and add more actions
i might rework the shaft control part all together.
its not a bad thing that it needs to be at the same coordinate, helps with organization
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
a good way to do this would be having the elevator movement to the floor marker with the ability for xyz transform
that is basically how it should work
going into GM mode while riding elevator reliably throws a null error (in workbench)
not my error lol
uh ok i take it back idfk when this started happening
Don't go into GM mode in elevator.
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.
ok i just pushed an update it should be fixed. i didnt set any context on my elevator doors action manager.
Thank you for the feedback!
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.
Check 0,0,0 coords
found it
Of course. I haven't had that problem since I first started developing this.
i know the struggle well ๐คฃ
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
no rush, its amazing work overall
Lol the whole project was gonna be a gamble but I really wanted to see a decent elevator mod
once you've got the final bugs squashed its going to be pretty epic
Ty man I appreciate it
whats your server so i can dl everything and try to replicate
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.
Thanks for the elevator !
Feedback we can have particles and decals attached but not objects
Thanks for the boat lol
๐ you used the willy wonka option? aka 3d traversal lmao
as for this i am not quite sure what you mean there shouldn't be anything stopping you from parenting/childing to the composition?
Where is it on the dead everon?
On the south coast
@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
If the vehicle is in a "static" state. Eg no driver turned off and not moving the elevator should handle it. To be sure I would recommend testing it out
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!
ok cool thank you