As far as entities go, this tutorial is fairly complex. Payloads in general are very finicky, and a single missplaced number or missed output can screw everything up. I would recommend taking a look at the example .vmf if you get lost.
This system is designed to be called upon multiple times. It effectively replaces what your team_train_watcher typically automates, giving you a lot of control over the Payload, should you know how to utilize it. While not the most efficient way for a single elevator, it can be used multiple times for multiple elevators with only 3 new logic entities per elevator (not counting the elevator's func_tracktrain, capzone, or path_tracks).
This MAY screw with the HUD in Payload Race maps. If it does, I would suggest you delete the elevator's team_train_watcher and place a trigger_hurt underneath the elevator's platform to kill anyone who gets stuck in it. To be honest, I'm not sure if the extra team_train_watcher is truly NEEDED, but, as the guy in the church in Left 4 Dead taught us, it's better to be safe than sorry. A lot of this stuff is probably also redundant (notably my OutValue and OnGetValue dual outputs), but redundancy never hurt much.
Now on to the meat of the tutorial:
The Push Logic
I'm using Boojum's stock team_train_watcher (called "sspl_watcher") with the "Handle Train Movement" flag set to "No" and one Output added:
A math_remap converts the number of current players on the cart into an integer we can use. I have mine named "cart_push_remap" with "Maximum Valid Input Value" and "Output Value When Input is Max" both set to 3.
I have a single output:
The second one I call my "multiplier." This modifies your overall speed. We use it to make the elevator go slower, but you should also use it if you want to speed up or slow down the cart (whenever you would typically send a SetSpeedForwardMultiplier output to your team_train_watcher). Most of the fields are default, except for the "name" and "initial value" fields (cart_speed_multiplier and 1, respectively). It also has 2 outputs:
It SHOULD multiply against the cart's current speed when it changes, but I like to send a "GetValue" output to the entity after I send whatever speed adjustment I want to make to the multiplier with a delay of .10, just to be safe. Redundancy.
Now to set up our three logic_relays for the conclusion of the push logic. These handle stopping the cart if no one is nearby, making it roll back down a hill should you want a traditional rollback zone (elevators get their own logic_case), and the usual rollback if a cart is left unattended.
The first is akin to your cart_speed_watcher in that it takes output from the pushzone and translates it into something your cart can use. I named mine "stopped_relay" and left the "Start Disabled" tag set to "No".
As for the output:
OnTrigger | cart_speed_watcher | SetValue | 0 | 0
The second is like your multiplier where it is only used for rolling back down a hill (for traditional rollback, see Rewind's post). This does NOT apply to your elevator.
To use this for a rollback zone, just enable "rollback_relay" and disable "stopped_relay" as the cart enters the rollback zone (at the same time you disable the path_track behind it). Keep the flags set on your rollback zone to "Rollback zone on HUD (Auto-roll if team_train_watcher handles movement)," even though you don't have auto-roll. This keeps it on your HUD regardless. Make sure to disable it again after the rollback zone!
Your third should be named "cart_rollback_relay". Here are your outputs:
Now create your elevator's func_tracktrain platform. Follow Frozen's instructions, giving it a dummy path alongside the cart. Make sure the keyvalues match those of the cart if you want them to appear to be going the same speed. If you're following the naming scheme of this tutorial, name it "elevator_train" and make the "First Stop Target" field "elevator_platform_path_start" (and make a path_track where you want it to wind up named "elevator_platform_path_end").
Copy the cart's trigger_capture_area and paste it on your platform. Change these keyvalues:
At the BOTTOM of your elevator, change the "Angles" field in the top right until the circle with a single line in it is lined up with the direction you want your cart to be facing as seen from the TOP viewport.
Change the "Orientation Type" to "Face this path_track's angles".
Do the same for any other path_tracks inside your elevator (including the dummy ones the elevator follows).
On all of the cart's path_tracks, make sure you have "rollback zone on HUD" checked. I don't believe you need this checked for the elevator's path_tracks, as the team_train_watcher isn't handling movement there, either.
NOTE: For all path_track outputs (except for the StopSpark output on the bottom elevator path_track) check the "Fire Once Only" checkbox.
Now if you (and I) have followed this properly, then you'll have a working elevator! There may need to be some tweaking involved; it is a fairly complex system and likely can be simplified some.
Follow everything from the "Elevator Logic" section down if you'd like a second elevator.
You can have up to 4 rollback/rollforward zones appearing on the HUD. Any more won't show up, so while you CAN have more than 4 elevators or other rollback zones, I wouldn't suggest it.
If I have missed some entity logic or this doesn't work somehow, let me know and I'll see if I can debug it. It was quite a bit of work getting all those outputs correct, and I may have missed something somewhere along the way.