The three virtues of a programmer: Laziness, Impatience, and Hubris. – Larry Wall
- This actor tells the bots where to go to before riding a lift or after riding a lift. Place LiftExit actors approximately 16 units from the edge of the lift. You need one near each mover key. For example, if your lift goes from the ground floor to the first floor and then back again, you will need a LiftExit near your lift shaft on the first floor and one near the lift on the ground floor. To link a LiftExit to a particular lift, set its LiftExit -> LiftTag to be the Tag of the lift mover.
- This actor tells the bots where to stand while riding a lift. The bots do not understand BumpOpenTimed, so when setting the mover Properties, set, Object -> InitialState to StandOpenTimed. Place the actor near the middle of the 0 key (bots will be fine getting on at other keys even if the lift moves large distances in any direction as long as you have the 0 key set correctly). To link a LiftCenter to a particular lift, set its LiftCenter -> LiftTag to be the Tag of the lift mover.
- A LiftCenter, placed on the mover where you want bots to stand
- a LiftExit at the bottom & top exit points, at the place bots will be before they walk onto the lift. You can have several on each floor if your lift can be approached from several directions.
The following should all match:
- LiftCenter -> LiftTag
- LiftExit -> LiftTag
- Mover : Events -> Tag
What happens then is that the bots will move to the ground floor LiftExit, then to the LiftCenter associated with that lift. The bots will ride the lift until it stops and then move to the LiftExit on the first floor before continuing along the normal path network.
To check that tags are correctly set: after a full rebuild of the level, select Viewport Caption Context Menu -> View -> Show Paths. The viewport will display red and blue connecting lines between NavigationPoints that the Bots travel along in the Navigation system. If the lift paths are correctly set up, the lines will join LiftCenter and the LiftExits.
There are several tools that make pathnoding much easier:
- PathLogic: allows pathnodes to be placed from within UT
- Mind Reader: shows what bots are trying to do from within UT
Sometimes, Bots get stuck in a particular geometry when their A.I. directs them towards a "goal" that causes a conflict. It is suggested that you download the Mind Reader mutator and select it before play testing your level. Then, whenever you observe a Bot during the game Mindreader will post specific information about what the Bot's state is right on the screen for easy determination. With this information, the problem can usually be identified. Alterations can then be made to the local geometrical arrangement, either moving an inventory spot, or pathnode, or by adding other elements as needed.
You can add multiple LiftExits at a certain moverkey.
For example if you have a mover going into a hallway, you can have a LiftExit actor at both sides of the lift. Bots will take that exit that they need ;)
Epic Documentation: Adding Support for Lifts (From the Unreal Technology Site)
There are two special NavigationPoint classes used to help bots understand how to use lifts, LiftCenters and LiftExits. Give the lift a unique tag. Place a LiftCenter on the lift, and set its LiftTag attribute to be the tag of the lift. At each exit from the lift, far enough away so that bots standing at that spot won't interfere with the lift, add a LiftExit. Each LiftExit should have its LiftTag set to the tag of the lift.
The default state for movers is BumpOpenTimed. Do not use this state for lifts! Bots misinterpret movers that are BumpOpenTimed as being doors. Instead, use the StandOpenTimed state for most lifts. Bots will also understand triggered lifts (TriggerOpenTimed, TriggerToggle, etc.). In many cases, they will use triggered lifts without any further help. However, for certain complex situations, such as when a delayed dispatcher is used to control the lift, bots may need a hint. In these cases, set the LiftCenter's LiftTrigger attribute to the tag of the trigger the bot should use to control this lift.
There are two other configurable LiftCenter attributes of interest. These should be modified only if absolutely necessary. MaxZDiffAdd, which defaults to 0, specifies an additional allowable difference in height between the bot and the LiftCenter for the bot to consider that LiftCenter reachable. This is useful if the bot must stand below the lift (down stairs or a ramp) while waiting for it. MaxDist2D is the maximum distance between the bot and the LiftCenter. It defaults to 400 world units.
- Bot Support – Main topic
- Mover Topics – More on creating and using movers
Tarquin: Any way of telling bots to lift jump?
SuperApe: (UT2004) LiftExit -> LiftJump :)
Betwulf: (UT2004) I tried all this and the bot simply will not choose to go onto a lift I create. I'm pretty sad. I've taken a look at other maps and it looks exactly like what I'm doing, except the bots on my map ALWAYS avoid the lift.
DemonThing: Tarq: LiftExit -> LiftJump/bLiftJumpExit is what you want. Take a look at DM-1on1-Roughinery for an example.
Betwulf: I'm having the same sort of problem here. Does anyone have a solution to this?
SuperApe: Also look into DM-Albatross for LiftJump settings. (leading to lightning gun) Several stock maps have LiftJumps set up.
Legolas: I'm trying to get bots to use lifts in an Onslaught map I'm pathing, but I'm not sure where ot set the default state for the lifts. I've dug through the properties (and I get the build error saying you cant use a lift center actor on a "BumpOpenedTimed" lift, but I just dont see where that is in the properties.
MythOpus: Look in your Mover properties under Object -> Initial State. There should be a drop down list of different mover control settings you can have. One of those is BumpOpenedTime. The one you should be using would most likely be StandOpenTime. Bots will use the lift center and if you have set it up right, the bots should go onto your lift and it will go to its keypoint(s).
Tarquin: Suppose I have a lift & some stairs that go to the same place. How do I tell the bots not to wait around for the lift if it's not there, but just take the stairs instead?
SuperApe: I believe with stock objects, you're stuck. Bots will see the route (using the lift) and decide for themselves which is the shorter distance. You could try coding a custom Mover or LiftExit that uses the SpecialCost() function to make the distance look much longer if the lift isn't available. (Force paths to it and set bSpecialForced and bForcedOnly)
[D2]_Boss.... I have a multiple keyframe mover. It works fine, but my bots are jumping out of the mover attempting to reach the other lift exit before the mover gets there. How do I make them stay on the lift center until the mover reaches a specific keyframe?