No announcement yet.

Moving movers attached to movers online

  • Filter
  • Time
  • Show
Clear All
new posts

    Moving movers attached to movers online

    Confusing title?

    Prepare for more because the construction itself is even more confusing.

    Let me explain the concept:
    • I have a room-like mover (Tag: MovingRoom) with two holes for two door, one that is closed and not in use at the moment and one that is movable (Tag: MovingRoomDoor) through which you can enter it. When it is moving, you shall not be able to exit it, that is why I attached doors to it, one is open though which you can enter and which closes , the other one is closed (for now). This room is supposed to be moving from A to B on a straight line for 150 seconds (= 2 keys). The door can be open and closed (= 2 keys, again).
    • EncroachType of these movers is set to "IgnoreWhenEncroach", there is no encroach damage. Both movers are set to TriggerToggle.
    • You start it with a UseTrigger inside that moving room that is attached to it. If you trigger it, it sends out an event (Event: StartMovingRoom).
    • There is a ScriptedTrigger that manages the entire construction, it contains these actions:
      • [0]WAITFOREVENT | StartMovingRoom //activated the UseTrigger
      • [1]TRIGGEREVENT | MovingRoomDoor //door closes and player is "trapped" inside of the room
      • [2]TRIGGEREVENT | MovingRoom //room moves from A to B
      • [3]WAITFORTIME | 150 //pause between action 2 and 4 until the room stops moving
      • [4]TRIGGEREVENT | MovingRoomDoor //room stopped moving and is now at B, door opens so player can leave
      • [5]GOTOACTION | 0 //goes back to action 0 (WAITFOREVENT) again so you can get back to A

    Now, all this works fine offline, but online it gets messed up.
    How you are asking?
    The room moves faster than it is supposed to. That's not really visible though, oddly. The (for now) non-moving attached door is slower than the room and the door has the correct speed, the other one just doesn't do anything except closing and standing still and opening at the end of the sequence, it doesn't even follow the room. The room just stops moving like 30 seconds before it is actually on the other side, then it lags from time to time and in the end the room starts to change location and moves forward during and due to lags. In the meanwhile, the non-moving door proceeds to point B where these two parts meet again.

    Long story short: What happens is that the room is moving faster than the attached movers and the attached movers are the real location of the room - only online though.

    PS: Bot support is not needed (this may sound lame but bot support is actually quite impossible in the map due to the concept). In fact, it's not made for a regular map anyway but for a server-only map.

    Any help is appreciated!

    Other than that, does anybody know what the bSlave (in Mover) setting in the mover's properites does? I also forgot what exactly bHardAttach (in Movement) does (I knew it once though, I should really map more in Unreal Engine 2 again), however, without this setting set to true, attached movers don't seem to work, so I assume it forces an attachment no matter what, or am I wrong?

    Are any of these movers of the type 'ClientMover'. Off the top of my head here is what I'd suggest setting up to help troubleshooting:
    1. make a similar MovingRoom mover that runs in parallel, but without the doors, to see if the first moving room may be interacting with those movers in some odd way or if perhaps the scriptedTrigger is adding some strange delay. By the way, how fast is the Room mover going over those 150 seconds?

    2. Create a trigger outside of mover that also triggers it just to see if the presence of a pawn on the mover changes how it behaves in network games.

    3. Test out whether the MoverGlideType makes it perform better or worse in the network game.

    [EDIT] also, since the mover code appears to at least look at the number of keyframes, do the doors and main room mover have the same number of keyframes?


      I have had this kids of problem in one of my map. I made a telescopic stairs with 20 stairs. each stair is a mover.
      A trigger start the movement for all stairs. After i tried, each stair start off the next stair (i used the 'moverevents' of the mover). and many other solutions.
      Like you, that worked well offline, but online ...
      I never found the solution. So, I gave up.
      I hope you 'll be more persevering.

      Mb, Meowcat is right. You should use the 'clientMover'
      In the the skybox of DM-Phobos2, the asteroids are 'clientmover'. They never crashed.


        Yeah, I know what you mean Heimdallr, online gaming can be an a** sometimes.

        Meowcat, no ClientMovers are in use, I will try making the entire room a ClientMover attached to a regular mover (having the exact position of the mover is important as more than one player must be able to see it on correct position online), thanks for the idea. Maybe it's really too big and complex to be handled correctly by the server, I am not sure whether to change the doors though.

        I will report back when I have tried this. Thanks for the input on this issue!


          I don't mean that you should use ClientMovers, they are usually only used for movers/effects that are not require to be interacted with and they will not do anything on dedicated servers (see the PostBeginPlay function in ClientMover.uc). I think the best thing to try though is changing the MoverGlideType,and ensuring that the room has the same number of keys as the doors.


            Movers are all set to GlideByTime and all movers have 2 keys (for room=> A/B and doors => open/closed).


              For some cages in JB-TheDecks that act as jails, G.Lecter had to come up with a tricky combination of JBMoverDualDestination (cage itself and trap doors at bottom), ClientMover and JBClientMoverDualDestination (for the construction holding the cage) to make them do what they are supposed to do without lagging badly in network games. (Ok, we cheated a little by even increasing the mover network priority at runtime, but that's besides the point. :P)

              Basically they work as follows: A cage starts out hanging above a lava or slime pool. When a release happens (that's a standard trigger event, as far as the setup is concerned), the movers are triggered (the client movers via a NetworkTrigger, because they are only for looks but should move more or less synchronously with the cage) and move sideways before opening the trap doors to release the prisoners above save ground. Trap doors close and cages move back to their original location once prisoners are out. For a capture the cages are instead lowered into the lava/slime to execute the prisoners in them.
              G.Lecter set up the trap door movers in a way that they only appear to be attached to the cage movers. They actually are independent and move on their own to follow the cage before opening. You can't do that with a standard Mover, as it uses the same MoveTime for movement between all of its frames.

              For JBMoverDualDestination I reimplemented the behavior and features of 4 or 5 custom Mover classes (see link above for a list), but you probably only need SuperApe's VariableTimedMover to animate the door independently of the room. Basically you delay your room mover until the door has closed, which is its animation from key 0 to key 1. Then the door and the room move, for the door this is key 1->2, then it opens again, which is key 2->3. But if you're interested in the JBMoverDualDestination, I recommend Crusha's Ultimate Mapping Tools. It includes many useful custom stuff from himself and a number of other authors, including some of the more generic JBToolbox/JBToolbox2 classes from Jailbreak.