recursal/Fanatic-Fandom huggingface dataset:
Pre-Scripted Regions

In 0.8 there are several pre-scripted region triggers. They are defined in file *et/scripts/et\_regiontriggers.gm*. Therefore you don't need to define every trigger in "global Map". You just add one line to "OnMapLoad". The only exception to this is the "VehicleTrigger", see Vehicle Trigger Regions from more details.

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.DisableBotPush); //trigger without a name
RegionTrigger.Create(AABB(0,0,0,1,1,1), "DisableBotPush", "Ladder\_Around\_CP"); //trigger with a name

```

(0,0,0,1,1,1) are just example coordinates which should be replaced with actual AABB coordinates as explained in the Trigger regions page.

## DisableBotPush

This will disable bots from pushing within the trigger area. It also disables combat movement. Useful at leaders or narrow bridges where bots can fall down.

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.DisableBotPush);

```

## DisableCombatMovement

This will disable the bots combat movement within the trigger area. Useful in areas where moving from side to side can result in the bot getting killed.

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.DisableCombatMovement);

```

## BreakableDistance

This turns on the bots ability to shoot breakable objects within the trigger area. Useful if a map contains many breakable objects but you only require bots to break objects in a certain area. The parameter MinBreakableDist should be same as bot.TargetBreakableDist in OnBotJoin.

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.BreakableDistance);
RegionTrigger.BreakableDistance.MaxBreakableDist = 200; //TargetBreakableDist when a bot enters the region
RegionTrigger.BreakableDistance.MinBreakableDist= 0; //TargetBreakableDist when a bot exits the region

```

## KillTrigger

Any bot that enters the trigger area will self kill. The main purpose of this is for when bots end up in an area that they are unable to escape from.

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.KillTrigger);

```

## IntrusionWarning

When an attacking player (human or bot) enters this region, a defending bot will use a voicechat warning. You must set Map.DefendingTeam.

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.IntrusionWarning);

```

## IntrusionWarningEngObj

When an attacking Engineer (human or bot) enters this region, a defending bot will use a voicechat warning. You must set Map.DefendingTeam.

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.IntrusionWarningEngObj);

```

## AllClear

When defending bot enters this region and can't see any enemy, he will use a voicechat. You must set Map.DefendingTeam.

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.AllClear);

```

## VehicleTrigger

This is used to detect when a vehicle enters the AABB Trigger area. This will send a message to the console (needs "/bot debugtrigger" on to see) saying the vehicle name "at location", this can then be used as a standard trigger.
This is more detailed on the Vehicle Trigger Regions page.

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.VehicleTrigger);

```
Vector3

Vector3 is a basic math type that is made up of 3 real numbers typically used to represent positions, velocities, and directions. As of 0.65, Vector3 objects in scripting have gotten a significant optimization to eliminate their previous need to allocate memory that would then need garbage collected. As a result, scripts that use them heavily, especially in mathematical operations, should not trigger garbage collection cycles, and should also run a bit faster.

## Vector3 Methods

#### CrossProduct

v2 = v.CrossProduct(v1); // result is perpendicular to v and v1

#### DistanceXY

f = v.DistanceXY(v1); // squared 2D distance

#### DotProduct

f = v.DotProduct(v1); // v.x \* v1.x + v.y \* v1.y + v.z \* v1.z

## Vector3 Functions

#### NearestPointInLineSegment

v = NearestPointInLineSegment(vPt,v1,v2);

#### NearestPointInPlane

v = NearestPointInPlane(vPt,v1,v2,v3);

v = NearestPointInPlane(vPt,v0,vNormal);

#### Vec3FromSpherical

v = Vec3FromSpherical(fHeading,fPitch,fRadius);
Goal Commands

* How to open console and execute command

### draw\_goals

Draws information for mapgoals. It will draw goal names, properties, radius, facing and bounding boxes around objectives.

***Syntax:*** draw\_goals <on/off/1/0> <optional goalname expression>

***Example:*** draw\_goals on

Notes: It works only in the omnibot mod. Cvar dedicated must be 0. Cvar cg\_omnibotdrawing must be 1.

The goalname parameter supports expressions. i.e. /bot draw\_goals on attack.\* will highlight all attack goals in the map.

### goal\_create

Creates a new goal at the player's position and lists in console which properties are required and which are optional.

***Syntax:*** goal\_create <goalType> <optional name>

***Example:*** goal\_create attack test1

### goal\_delete

Deletes the currently selected goal.

***Syntax:*** goal\_delete

### goal\_echo

Displays the closest enabled and rendered goal within goal\_edit range to the screen.

***Syntax:*** goal\_echo

### goal\_edit

Selects the goal nearest the player for editing.

***Syntax:*** goal\_edit

### goal\_editx

Selects the goal the player is aiming at for editing.

***Syntax:*** goal\_editx

### goal\_finish

Completes edits on the selected goal.

***Syntax:*** goal\_finish

### goal\_help

Lists help text for the selected goal.

***Syntax:*** goal\_help

### goal\_load

Loads the maps goal file.

***Syntax:*** goal\_load

### goal\_move

Toggle. Starts moving the currently selected goal. Optionally moves the goal to the players position.

***Syntax:*** goal\_move <optional toplayer> <optional ground>

***Example:*** goal\_move // starts to move the selected goal based on players aim point. issue it again to stop movement

***Example:*** goal\_move toplayer // moves the selected goal directly to the players position and grounds it

***Example:*** goal\_move toplayer false // moves the selected goal directly to the players position and does not ground it

### goal\_removeall

Deletes all goals except goals which were created automatically for map entities.

***Syntax:*** goal\_removeall

### goal\_save

Saves all goals to <mapname>\_goals.gm in the nav folder.

***Syntax:*** goal\_save

### goal\_setproperty

Sets a given property for the currently selected goal.

***Syntax:*** goal\_setproperty <property> <value>

***Example:*** goal\_setproperty stance crouch

***Example:*** goal\_setproperty tagname testname

***Example:*** goal\_setproperty facing 0 // sets facing index 0 for goals that support facing (like camp)

### show\_goals

Prints out goal names, availabilities, priorities, roles and groups to the console.

***Syntax:*** show\_goals <optional expression> <optional p>

***Example:*** show\_goals defend.\* will list all defend goals in console

***Example:*** show\_goals .\* p will list all goals and their priorities for all classes

notes: this command supports expressions for the optional parameter
Talking bots

## Before you make the bots talk

Be aware that bots talking too much can annoy players so please be sensible when using this command.

## Forward

In previous versions of omni-bot the normal way to make the bots talk was to set up a random number & depending on the number the bots would talk.

In 0.81, a Three new commands were added to get rid of the old commands need to use a random number to define the number of bots that would talk.

```
 Util.BotSay
 ETUtil.WinningChat
 ETUtil.LosingChat

```

## Usage

### Util.BotChat

```

Util.BotChat (Team, msgType, Msg, NumBots)

```

Team:

```
"TEAM.ALLIES" / "TEAM.AXIS" / "0"

```

MsgTypes:

```
"say", "sayteam", "vsay"

```

Msg:

For say/sayteam this is just plain text. For vsay this must be one of the voicechat commands defined on the  Voice page

NumBots :

The number of bots that will speak. Please do not set to a high number.

### ETUtil.WinningChat

Team:

```
"TEAM.ALLIES" / "TEAM.AXIS" / "0"

```

Example :

```
ETUtil.WinningChat( TEAM.ALLIES );

```

### ETUtil.LosingChat

Team:

```
"TEAM.ALLIES" / "TEAM.AXIS" / "0"

```

Example :

```
ETUtil.LosingChat( TEAM.AXIS );

```

## Notes

There is no longer the need to add "Talk = true," remove this line if you are using the new command on an old script.

Wether or not the bots talk is defined in ~omni-bot\et\scripts\et\_autoexec.gm
Default is this
global MAP\_TALK = true;
If this line is set to false the bots will not talk

## Scripting

**One Axis bot saying a plain text message to all players**

```
global Map =
{
 Radar\_Destroyed = function( trigger )
 {

 Util.BotChat(TEAM.AXIS, "say", "Pesky Allies", 1);

 Util.MapDebugPrint( "Radar\_Destroyed" );
 },
};

```

**One Allied bot saying a plain text message to team.**

```
global Map =
{
 Radar\_Destroyed = function( trigger )
 {

 Util.BotChat(TEAM.ALLIES, "sayteam", "ok lets get the doc's now", 1);

 Util.MapDebugPrint( "Radar\_Destroyed" );
 },
};

```

**Two bots for both teams saying a voicechat command.**

```
global Map =
{
 Axis\_Break\_Something = function( trigger )
 {

 Util.BotChat(TEAM.AXIS, "vsay", VOICE.G\_CHEER, 2);
 Util.BotChat(TEAM.ALLIES, "vsay", VOICE.G\_NEGATIVE, 2);

 Util.MapDebugPrint( "Axis\_Break\_Something" );
 },
};

```

 **Example for end of a map where the bots Cheer/Say no**

```

global Map =
{
 Allies\_win = function( trigger )
 {

 ETUtil.WinningChat( TEAM.ALLIES );
 ETUtil.LosingChat( TEAM.AXIS );

 Util.MapDebugPrint( "Allies\_win" );
 },
};

```
Bots shooting map objects

## The Problem

In some maps the bots see MOVERS are targets to shoot & will spend the whole map shooting them. An example of this is in the breakout2 map where there are 4 birds that the bots see as a target.

## The Target(s)

The 1st thing to do is to identify the actual targets name.

The best way to find this is to add a bot and use the "/bot debugbot fpinfo" command. Once the bot has joined the name and debugbot command is used you need to spec the bot.

You should now see something like this

As you can see from the picture the bot is targeting bird3. The goal name for this is MOVER\_bird3.

## The Script

There are 2 parts to this scripting 1st a MOVER table & 2nd a ignoretarget instruction.

Create the MOVER table in "global Map" like this:

```

global Map =
{
 Movers =
 {
 "MOVER\_bird1",
 "MOVER\_bird2",
 "MOVER\_bird3",
 "MOVER\_bird4",
 },
};

```

This should contain all the movers you want the bots to ignore, in this example from breakout2 there are 4 birds.

The next part of the script is to tell the bots to ignore the targets & is added into the "OnBotJoin" section of the script.

There are 2 ways to do this depending on whether the entire MOVER table needs ignoring or just some of the table.

*Version 1:*

```

global OnBotJoin = function( bot )
{
 bot.IgnoreTarget( GetGoal("MOVER\_bird1").GetEntity(), 9999 );
 bot.IgnoreTarget( GetGoal("MOVER\_bird2").GetEntity(), 9999 );
 bot.IgnoreTarget( GetGoal("MOVER\_bird3").GetEntity(), 9999 );
 bot.IgnoreTarget( GetGoal("MOVER\_bird4").GetEntity(), 9999 );
};

```

This again should contain all the movers you want the bots to ignore.

*Version 2:*

```

global OnBotJoin = function( bot )
{
 Util.IgnoreTargetGoalTable(bot, Map.Movers);
};

```

This will include all the Goals in the MOVER Table.
Paththrough

In Omni-bot versions prior to 0.7, the bots had no concept of using a mover (such as a tram or an elevator) as a means to get to a certain location. The bots could be scripted to use them, but at the cost of completely overriding their built-in navigation via script. More or less the same was true for switches: using a switch was a goal in itself and not part of the path finding, as it sometimes should be, for example if the switch controls an elevator or a door.

In Omni-bot 0.7+ a feature called paththrough deals with this type of requirement. It has to be set up both in the waypoint file and in the script. Basically, when a bot reaches a waypoint whose paththrough property is set to a valid value, its normal movement towards the next waypoint in the path is overridden by the script. For example, upon reaching a waypoint at a switch that opens a door, the bots can be instructed to press the switch and wait for the door to open, and move along their path normally afterwards.

As of now, there are three types of paththrough:

* Paththrough Navigation
* Paththrough RideMovers
* Paththrough UseSwitch

Only one paththrough can be active at any time. Paththrough functions run as LowLevel goal.

**Helpful commands:**

```
/bot waypoint_showproperty                prints the current properties in the console,
/bot waypoint_clearproperty paththrough   will remove the paththrough property.
```
Buildoffset Goal

* /bot goal\_edit
	+ this will select the build goal, make sure the you have done draw\_goals on build
* /bot goal\_setproperty vehicle <vehicle goal name>
	+ this will select the mover to associate with the build goal
* /bot goal\_setproperty offset <int index>
	+ this adds the area of the build mover goal for the bots to repair from
* optionally set the stance. defaults to stand.
	+ /bot goal\_setproperty stance crouch (or prone)
* /bot goal\_finish

## Detailed Instructions

#### Description

Build offset is an extension to the default build goal that defines where bots build movable constructibles from
#### Setup

See the Fastrack example at the top of the page for an example setup.
#### Properties

Properties can be set with the goal\_setproperty command assuming that the goal has been selected.
##### group

A group is a method of organizing sets of goals. One advantage to this is that all goals in a group can be enabled or disabled in one line of script rather than seperate goal types requiring additional lines to enable or disable them. Assigning roles to a group is also possible as an alternative to assigning each individual goal a role.

**syntax:** /bot goal\_setproperty group <string groupName>
**example:** /bot goal\_setproperty group myGroup
##### role

See the section on bot roles.

**syntax:** /bot goal\_setproperty role <role mask>
**example:** /bot goal\_setproperty role 1
##### stance

Set the stance the bot should assume while performing this action.

**syntax:** /bot goal\_setproperty stance <string stance>
**example:** /bot goal\_setproperty stance crouch
**values:** stand crouch prone
##### tagname

Sets the name of the goal. This can optionally be set when passed as the optional parameter in the goal\_create command. Useful for renaming goals.

**syntax:** /bot goal\_setproperty tagname <string name>
**example:** /bot goal\_setproperty tagname myGoalName
##### vehicle

This property attaches the goal to the specified vehicle.

**syntax:** /bot goal\_setproperty vehicle <vehicle goal name>
**example:** /bot goal\_setproperty vehicle MOVER\_truck
**note:** only use this for build goals that are movable
##### offset

Sets a position where a bot should build the goal from

**syntax:** /bot goal\_setproperty offset <int index>
**example:** /bot goal\_setproperty offset 0
**note:** only use this for build goals that are movable. use usepoints for static positioned goals
Smokebomb Goal

* /bot goal\_setproperty facing 0
	+ optionally set additional facings. /bot goal\_setproperty facing 1 for example
	+ the trajectory is rendered for each facing to make it easier to get the correct facing
* optionally set the stance. defaults to stand.
	+ /bot goal\_setproperty stance crouch
* /bot goal\_finish

## Detailed Instructions

#### Description

Similar to the Airstrike goal for Field Ops, this goal has Covert Ops throw smoke grenades in order to provide some cover for teammates.
#### Setup

See the Fastrack example at the top of the page for an example setup.
#### Properties

Properties can be set with the goal\_setproperty command assuming that the goal has been selected.
##### facing

Facing is the direction the bots will look when at the camp spot. Any number of facings can be defined. Multiple facings results in the bots randomly choosing which one to use every second or so; resulting in the bots 'scanning' between them. When rendering the goal, facings are represented by a blue line with a white number attached to them. The white number is the index of the aim position which makes it easier to edit specific facings should they need to be changed.

**syntax:** /bot goal\_setproperty facing <int index>
**example:** /bot goal\_setproperty facing 0
**note:** The goal itself forces facing indexes to be added sequentially. This means that trying to set facing index 99 when only 1 other facing exists will result in index 1 being set ( indexes start at 0 ).
##### group

A group is a method of organizing sets of goals. One advantage to this is that all goals in a group can be enabled or disabled in one line of script rather than seperate goal types requiring additional lines to enable or disable them. Assigning roles to a group is also possible as an alternative to assigning each individual goal a role.

**syntax:** /bot goal\_setproperty group <string groupName>
**example:** /bot goal\_setproperty group myGroup
##### role

See the section on bot roles.

**syntax:** /bot goal\_setproperty role <role mask>
**example:** /bot goal\_setproperty role 1
##### stance

Set the stance the bot should assume while performing this action.

**syntax:** /bot goal\_setproperty stance <string stance>
**example:** /bot goal\_setproperty stance crouch
**values:** stand crouch prone
##### tagname

Sets the name of the goal. This can optionally be set when passed as the optional parameter in the goal\_create command. Useful for renaming goals.

**syntax:** /bot goal\_setproperty tagname <string name>
**example:** /bot goal\_setproperty tagname myGoalName
##### radius

Set the radius for the goal.

**syntax:** /bot goal\_setproperty radius <int>
**example:** /bot goal\_setproperty radius 64
CLASS

## Common Classes

```
 CLASS.AMMO
 CLASS.ARMOR
 CLASS.BUTTON
 CLASS.EXPLODING\_BARREL
 CLASS.HEALTH
 CLASS.LADDER
 CLASS.LIFT
 CLASS.MOVER
 CLASS.PLAYERSTART
 CLASS.TELEPORTER

```

## Doom 3 Classes

```
 CLASS.ANYPLAYER
 CLASS.PLAYER

```

## Enemy Territory Classes

```
 CLASS.AIRSTRIKE
 CLASS.AMMOCABINET
 CLASS.ANYPLAYER
 CLASS.ARTY
 CLASS.BREAKABLE
 CLASS.CORPSE
 CLASS.COVERTOPS
 CLASS.DYNAMITE
 CLASS.ENGINEER
 CLASS.FLAME
 CLASS.FIELDOPS
 CLASS.GPG40\_GRENADE
 CLASS.GRENADE
 CLASS.HEALTHCABINET
 CLASS.INJUREDPLAYER
 CLASS.MEDIC
 CLASS.MG42MOUNT
 CLASS.LANDMINE
 CLASS.MORTAR
 CLASS.M7\_GRENADE
 CLASS.ROCKET
 CLASS.SATCHEL
 CLASS.SMOKEBOMB
 CLASS.SMOKEMARKER
 CLASS.SOLDIER
 CLASS.TREASURE
 CLASS.VEHICLE
 CLASS.VEHICLE\_NODAMAGE
 CLASS.VEHICLE\_HVY

```

## Quake 4 Classes

```
 CLASS.AMMO\_REGEN
 CLASS.ANYPLAYER
 CLASS.DEADZONE
 CLASS.DOUBLER
 CLASS.GRENADE
 CLASS.GUARD
 CLASS.HASTE
 CLASS.INVISIBILITY
 CLASS.MARINE\_FLAG
 CLASS.ONE\_FLAG
 CLASS.PLAYER
 CLASS.QUAD\_DAMAGE
 CLASS.REGENERATION
 CLASS.SCOUT
 CLASS.STROGG\_FLAG

```

## Fortress Forever Classes

```
 CLASS.ANYPLAYER
 CLASS.BACKPACK
 CLASS.BACKPACK\_AMMO
 CLASS.BACKPACK\_ARMOR
 CLASS.BACKPACK\_GRENADES
 CLASS.BACKPACK\_HEALTH
 CLASS.CALTROP
 CLASS.CIVILIAN
 CLASS.CONC\_GRENADE
 CLASS.DEMOMAN
 CLASS.DETPACK
 CLASS.DISPENSER
 CLASS.EMP\_GRENADE
 CLASS.ENGINEER
 CLASS.GAS\_GRENADE
 CLASS.GLGREN
 CLASS.GRENADE
 CLASS.HWGUY
 CLASS.MEDIC
 CLASS.MIRV\_GRENADE
 CLASS.MIRVLET\_GRENADE
 CLASS.NAIL\_GRENADE
 CLASS.NAPALM\_GRENADE
 CLASS.PIPEBOMB
 CLASS.PYRO
 CLASS.ROCKET
 CLASS.SCOUT
 CLASS.SENTRY
 CLASS.SNIPER
 CLASS.SOLDIER
 CLASS.SPY
 CLASS.TURRET

```

## Return to Castle Wolfenstein Classes

```
 CLASS.AIRSTRIKE
 CLASS.ANYPLAYER
 CLASS.ARTY
 CLASS.BREAKABLE
 CLASS.CORPSE
 CLASS.DYNAMITE
 CLASS.ENGINEER
 CLASS.FLAME
 CLASS.GRENADE
 CLASS.INJUREDPLAYER
 CLASS.LIEUTENANT
 CLASS.MEDIC
 CLASS.MG42MOUNT
 CLASS.ROCKET
 CLASS.SMOKEBOMB
 CLASS.SMOKEMARKER
 CLASS.SOLDIER
 CLASS.TREASURE
 CLASS.VEHICLE
 CLASS.VEHICLE\_NODAMAGE
 CLASS.VEHICLE\_HVY

```

See also: GetEntClass, GetClass, ChangeClass
BTN

## Common Buttons

```
 BTN.AIM
 BTN.ATTACK1
 BTN.ATTACK2
 BTN.BACKWARD
 BTN.CROUCH
 BTN.DROP
 BTN.FORWARD
 BTN.JUMP
 BTN.LEAN\_L
 BTN.LEAN\_R
 BTN.PRONE
 BTN.RELOAD
 BTN.SPRINT
 BTN.STRAFE\_L
 BTN.STRAFE\_R
 BTN.USE
 BTN.WALK

```

## Fortress Forever Buttons

```
 BTN.GREN1
 BTN.GREN2
 BTN.GREN\_THROW
 BTN.DROP\_AMMO
 BTN.DROP\_ITEM

```

See also: HoldButton, PressButton, ReleaseButton
Airstrike Goal

* /bot goal\_setproperty facing 0
	+ optionally set additional facings. /bot goal\_setproperty facing 1 for example
	+ the trajectory is rendered for each facing to make it easier to get the correct facing
* optionally set the stance. defaults to stand.
	+ /bot goal\_setproperty stance crouch
* /bot goal\_finish

## Detailed Instructions

#### Description

Airstrike is a goal for bots to go throw an airstrike cannister. Bots no longer target other players with the airstrike cannister, so this is the way to get them to use this weapon with more intelligence than previous versions. Throwing an airstrike up the embankment on Battery, over the wall on Oasis, or targeted strikes to help the initial defending of the tank in Goldrush are examples of usage.
#### Setup

See the Fastrack example at the top of the page for an example setup.
#### Properties

Properties can be set with the goal\_setproperty command assuming that the goal has been selected.
##### facing

Facing is the direction the bots will look when at the camp spot. Any number of facings can be defined. Multiple facings results in the bots randomly choosing which one to use every second or so; resulting in the bots 'scanning' between them. When rendering the goal, facings are represented by a blue line with a white number attached to them. The white number is the index of the aim position which makes it easier to edit specific facings should they need to be changed.

**syntax:** /bot goal\_setproperty facing <int index>
**example:** /bot goal\_setproperty facing 0
**note:** The goal itself forces facing indexes to be added sequentially. This means that trying to set facing index 99 when only 1 other facing exists will result in index 1 being set ( indexes start at 0 ).
##### group

A group is a method of organizing sets of goals. One advantage to this is that all goals in a group can be enabled or disabled in one line of script rather than seperate goal types requiring additional lines to enable or disable them. Assigning roles to a group is also possible as an alternative to assigning each individual goal a role.

**syntax:** /bot goal\_setproperty group <string groupName>
**example:** /bot goal\_setproperty group myGroup
##### role

See the section on bot roles.

**syntax:** /bot goal\_setproperty role <role mask>
**example:** /bot goal\_setproperty role 1
##### stance

Set the stance the bot should assume while performing this action.

**syntax:** /bot goal\_setproperty stance <string stance>
**example:** /bot goal\_setproperty stance crouch
**values:** stand crouch prone
##### tagname

Sets the name of the goal. This can optionally be set when passed as the optional parameter in the goal\_create command. Useful for renaming goals.

**syntax:** /bot goal\_setproperty tagname <string name>
**example:** /bot goal\_setproperty tagname myGoalName
##### radius

Set the radius for the goal.

**syntax:** /bot goal\_setproperty radius <int>
**example:** /bot goal\_setproperty radius 64
Grenade Goal

* /bot goal\_setproperty targetgoal <goal name>
	+ optionally use /bot goal\_setproperty trace if targeting an entity without a goal name
* /bot goal\_setproperty facing
	+ setting the facing will render the trajectory

## Detailed Instructions

#### Description

Grenade is a goal to have a bot throw a grenade at a target entity or goal.
#### Setup

See the Fastrack example at the top of the page for an example setup.
#### Properties

Properties can be set with the goal\_setproperty command assuming that the goal has been selected.

##### group

A group is a method of organizing sets of goals. One advantage to this is that all goals in a group can be enabled or disabled in one line of script rather than seperate goal types requiring additional lines to enable or disable them. Assigning roles to a group is also possible as an alternative to assigning each individual goal a role.

**syntax:** /bot goal\_setproperty group <string groupName>
**example:** /bot goal\_setproperty group myGroup
##### role

See the section on bot roles.

**syntax:** /bot goal\_setproperty role <role mask>
**example:** /bot goal\_setproperty role 1
##### tagname

Sets the name of the goal. This can optionally be set when passed as the optional parameter in the goal\_create command. Useful for renaming goals.

**syntax:** /bot goal\_setproperty tagname <string name>
**example:** /bot goal\_setproperty tagname myGoalName
##### facing

Sets the facing for the goal.

**syntax:** /bot goal\_setproperty facing <optional clear>
**example:** /bot goal\_setproperty facing
**example:** /bot goal\_setproperty facing clear // clears the facing for the goal
**note:** once the facing is set, the trajectory of the grenade will be rendered.
##### targetgoal

This property specifies a goal that the bot should target. It can be any goal which has an entity. For example: MOUNTMG42, EXPLODE, MOVER.
**syntax:** /bot goal\_setproperty targetgoal <goal name>
**example:** /bot goal\_setproperty targetgoal MOUNTMG42\_somemg
**note:** if a trace entity is specified, a targetgoal is not used
##### trace

Runs a trace based on where the player is aiming and stores the information for the goal. The optional traceType parameter is often needed for grates which are detected only by trace type PLAYERCLIP.
**syntax:** /bot goal\_setproperty trace <optional traceType>
**example:** /bot goal\_setproperty trace ALL
**note:** this is optional. should only be used if the target is not a map goal.
##### stance

Set the stance the bot should assume while performing this action.

**syntax:** /bot goal\_setproperty stance <string stance>
**example:** /bot goal\_setproperty stance crouch
**values:** stand crouch prone
##### prime

Sets the time in seconds that the bot should hold the fire button before releasing. Useful for elevated targets.

**syntax:** /bot goal\_setproperty prime <int seconds>
**example:** /bot goal\_setproperty prime 2
**note:** valid values are from 0 to 3. anything over 3 will be set to 3. default is 1.
##### count

Sets the maximal number of grenades to throw.

**syntax:** /bot goal\_setproperty count <int>
**example:** /bot goal\_setproperty count 1
POWERUP

## Common Powerup Flags

```
 POWERUP.INVINCIBLE

```

## Doom 3 Powerup Flags

```
 POWERUP.ADRENALINE
 POWERUP.BERSERK
 POWERUP.INVISIBILITY
 POWERUP.MEGAHEALTH

```

## Fortress Forever Powerup Flags

```
 POWERUP.DISGUISE\_BLUE
 POWERUP.DISGUISE\_CIVILIAN
 POWERUP.DISGUISE\_DEMOMAN
 POWERUP.DISGUISE\_ENGINEER
 POWERUP.DISGUISE\_GREEN
 POWERUP.DISGUISE\_HWGUY
 POWERUP.DISGUISE\_MEDIC
 POWERUP.DISGUISE\_PYRO
 POWERUP.DISGUISE\_RED
 POWERUP.DISGUISE\_SCOUT
 POWERUP.DISGUISE\_SNIPER
 POWERUP.DISGUISE\_SOLDIER
 POWERUP.DISGUISE\_SPY
 POWERUP.DISGUISE\_YELLOW

```

## Quake 4 Powerup Flags

```
 POWERUP.AMMOREGEN
 POWERUP.DOUBLER
 POWERUP.GUARD
 POWERUP.HASTE
 POWERUP.INVISIBILITY
 POWERUP.MARINEFLAG
 POWERUP.ONEFLAG
 POWERUP.QUADDAMAGE
 POWERUP.REGENERATION
 POWERUP.SCOUT
 POWERUP.STROGGFLAG
 POWERUP.TEAM\_AMMOREGEN
 POWERUP.TEAM\_DAMAGEMOD
 POWERUP.TEAM\_HEALTHREGEN

```

See also: HasPowerUp
Sniper and Panzer maps

## Sniper

Sniper Scripts only need to tell the bots to snipe.

Create a new file using the map name "mapname.gm" and copy the script below.

```

global Map =
{
 SnipeMap = true,
};

global OnMapLoad = function()
{
 SetMapGoalProperties("SNIPE.\*", { MinCampTime=30, MaxCamptime=50,});
 Util.LimitToTeam( TEAM.AXIS, "SNIPE\_axis.\*" );
 Util.LimitToTeam( TEAM.ALLIES, "SNIPE\_allied.\*" );
 Util.MapDebugPrint( "Omni-bot map script for " + GetMapName() + " executed.", true );
};

global OnBotJoin = function( bot )
{
 Util.ChangeToSniperWeapons(bot);
};

```

The only thing to do is edit the goal names in this example "SNIPE\_axis.\*" & "SNIPE\_allied.\*" if you have named you goals differently & change the camptime if you want.

## Panzer

Panza Scripts only need to tell the bots that it is a panza map.

Create a new file using the map name "mapname.gm" and copy the script below.

```

global Map =
{
 PanzerMap = true,
};

global OnBotJoin = function(bot)
{
 ETUtil.ChangeToPanzer(bot);
};

```

Because there are no goals in panza maps there is nothing else to do.
Console

## Opening the console

In ET you open the console with the tilde '~' key (above TAB key, below ESC key) on Windows systems and with ALTGR and '+' on Linux systems.

You can also try combinations ALT+'~' or CTRL+'~' to open large or small console.

## Executing a command on local computer

* In ET, ETF, or other Quake 3 engine based games:

```
/bot command

```

* In Quake4, Fortress Forever, and other Half-life 2 or Doom 3 engine based games, the / isn't required

You'll get a list of all available commands by entering '(/)bot help' into the console.

## Executing a command on dedicated server

```
/rconpassword <your rconpass>
/rcon bot command

```

## Binding

You can bind any command to a key. Key bindings are saved to your profile, but you can also add these bindings to your server.cfg.

Example:

```
bind KP_INS "bot addbot"
bind KP_DEL "bot kickall"
bind p "bot show_goals .* p"
bind F12 "bot waypoint_save; echo ^oW^0aypoints ^1saved"

```

You can use vstr to toggle parameters:

```
seta BotSetIgnoreOn "bot ip 1;set BotSetIgnore vstr BotSetIgnoreOff"
seta BotSetIgnoreOff "bot ip 0;set BotSetIgnore vstr BotSetIgnoreOn"
set BotSetIgnore "vstr BotSetIgnoreOn"
bind DEL "vstr BotSetIgnore"

```

## shrubbot

In many ET mods it's possible to define custom commands in **shrubbot.cfg**. You can use it to execute some of your favourite bot commands without bot prefix.

Example:

```
[command]
command  = addbot
exec     = bot addbot [1] [2] [3]
desc     = Adds bot to game. Syntax: !addbot <team> <class> <name>. Don't use whitespaces in <name>.
syntax   =
levels   = 9 10 11 14 15

```
Supported Games

## Enemy Territory

Enemy Territory is a free for download team based game that currently is the most advanced in terms of bot support as it has been focused on more than other games.

Omni-bot has been integrated into many of the popular ET mods (etpub, jaymod, noquarter ...) , which contain enhancements, fixes, additional weapons, etc on top of the ET game type. Supported mods versions are listed on page Download\_Omni-Bot\_ET.

## Fortress Forever

Fortress Forever is a Team Fortress modification for Half-life 2. Omni-bot will come with the default installation for training and scrimmage purposes, with training scripts targeted to helping those that are new to Team Fortress, as it can be a difficult game to attract new players.

## Quake 4

Quake 4 by Raven Software has had an alpha Omni-bot release in an early version, and more recently has been getting beta releases on the Omni-bot forum here

## Doom 3

Doom 3 by id software has recently joined the Omni-bot supported games list. It is being supported currently by Geekfeststarter. There has not been a public release yet.

## Return to Castle Wolfenstein

Return to Castle Wolfenstein game is similar to Enemy Territory. All scripts and commands have been recently updated to the latest Omni-bot version.

## Want to support Omni-bot?

Any mods that would like to add support for Omni-bot should PM DrEvil for information. Porting to a new mod is typically pretty easy, particularly if the mod is built on an already supported engine.

Omni-bot support is added to a mod by adding a lightweight interface file to the mod that compiles into it and communicates with the bot dll. After that, all the bot behavior is handled in the bot dll. If you are a minor variation of an existing supported game chances are your mod can use the same dll, like Jaymod, etpub, NQ.
Etscripting

All scripts in Omni-bot are GameMonkey scripts. First of all you should read GameMonkeyScriptReference.pdf.

* Creating a script
* Debugging tips
* Triggers
* Goals: Availability, Priority, Camp times, Max users, Range, Roles, Use points
* Paththrough: Navigation, RideMovers, UseSwitch
* Trigger regions, Pre-Scripted Regions
* Changing spawns
* Bots shooting map objects
* Scripting waypoints flags
* Talking bots
* Sniper and Panzer maps

Bot Library
Utility Functions
Math Library
String Library
System Library
Waypoint Library

Bot
MapGoal
ScriptGoal
AABB
Blackboard
Matrix3
TargetInfo
Timer
TriggerInfo
Vector3
Weapon

BB, BONE
BTN, BUY
CAT, CLASS
CONTENT, DEBUG
ENTFLAG
EVENT
POWERUP, PROFILE
ROLE
SKILL, SURFACE
TEAM, TRACE
VOICE, WEAPON

## Enemy Territory Addendum

### GetCabinetData

Gets information about health or ammo cabinet. Properties CurrentAmount, MaxAmount, Rate are stored into table.

**Parameters:** (entity, table)

**Returns:** true if successful, null if not

### GetCvar

Gets a game cvar. Returns zero if the cvar does not exists or if its value cannot be converted to integer.

**Parameters:** (name)

**Returns:** integer

### GetGameType

Gets the current game type:

2 - single-map objective, 3 - stopwatch, 4 - campaign, 5 - last man standing

**Parameters:** none

**Returns:** integer

### SetCvar

Sets a game cvar.

**Parameters:** (name, value)

**Returns:** true if successful, false if not
Max users

Within a map sometimes you will want to change the number of bots that will focus on a goal.

Lll that is required is to use the command "*Util.SetMaxUsers*".

Have a look at this example taken from a standard script

```

global OnMapLoad = function()
{
 // Max users per goal
 Util.SetMaxUsers( 1, "ATTACK\_.\*" );
 Util.SetMaxUsers( 1, "DEFEND\_.\*" );
 Util.SetMaxUsers( 1, "GRENADE\_.\*" );
 Util.SetMaxUsers( 1, "MOUNTMG42\_.\*" );

};

```

The number is purely the number of bots then in the quote marks the name of the mapgoal(s). Use the same method for any other mapgoals you might what to change increase or decrease.

Although this example is from the OnMapLoad section you can also use the same command in any "function( trigger )" of the Global Map section.
Route Goal

* /bot goal\_finish
	+ optionally you can use /bot show\_spawns to locate all spawn points to check they are covered by the route goal

#### Description

Routes are markers for alternative paths a bot will use to get to a primary goal.
#### Setup

See the Fastrack example at the top of the page for an example setup.
#### Properties

Properties can be set with the goal\_setproperty command assuming that the goal has been selected.

##### group

A group is a method of organizing sets of goals. One advantage to this is that all goals in a group can be enabled or disabled in one line of script rather than seperate goal types requiring additional lines to enable or disable them. Assigning roles to a group is also possible as an alternative to assigning each individual goal a role.

**syntax:** /bot goal\_setproperty group <string groupName>
**example:** /bot goal\_setproperty group myGroup
##### role

See the section on bot roles.

**syntax:** /bot goal\_setproperty role <role mask>
**example:** /bot goal\_setproperty role 1
##### tagname

Sets the name of the goal. This can optionally be set when passed as the optional parameter in the goal\_create command. Useful for renaming goals.

**syntax:** /bot goal\_setproperty tagname <string name>
**example:** /bot goal\_setproperty tagname myGoalName
##### radius

Set the radius for the goal.

**syntax:** /bot goal\_setproperty radius <int>
**example:** /bot goal\_setproperty radius 64
VOICE

## Enemy Territory Voice Macros

### Team

```
 VOICE.AFFIRMATIVE
 VOICE.ALL\_CLEAR
 VOICE.CLEAR\_MINES
 VOICE.CLEAR\_PATH
 VOICE.COMMAND\_ACK
 VOICE.COMMAND\_DECLINED
 VOICE.COMMAND\_COMPLETED
 VOICE.CONST\_COMMENCING
 VOICE.COVER\_ME
 VOICE.DEFEND\_OBJECTIVE
 VOICE.DESTROY\_CONST
 VOICE.DESTROY\_PRIMARY
 VOICE.DESTROY\_SECONDARY
 VOICE.DESTROY\_VEHICLE
 VOICE.DISARM\_DYNAMITE
 VOICE.ENEMY\_DISGUISED
 VOICE.ENEMY\_WEAK
 VOICE.ESCORT\_VEHICLE
 VOICE.FIRE\_IN\_THE\_HOLE
 VOICE.FOLLOW\_ME
 VOICE.HOLD\_FIRE
 VOICE.IMA\_COVERTOPS
 VOICE.IMA\_ENGINEER
 VOICE.IMA\_FIELDOPS
 VOICE.IMA\_MEDIC
 VOICE.IMA\_SOLDIER
 VOICE.INCOMING
 VOICE.LETS\_GO
 VOICE.MINES\_CLEARED
 VOICE.MOVE
 VOICE.NEED\_AMMO
 VOICE.NEED\_BACKUP
 VOICE.NEED\_ENGINEER
 VOICE.NEED\_MEDIC
 VOICE.NEED\_OPS
 VOICE.NEGATIVE
 VOICE.ON\_DEFENSE
 VOICE.ON\_OFFENSE
 VOICE.OOPS
 VOICE.PATH\_CLEARED
 VOICE.REINFORCE\_OFF
 VOICE.REINFORCE\_DEF
 VOICE.REPAIR\_VEHICLE
 VOICE.SORRY
 VOICE.TAKING\_FIRE
 VOICE.THANKS
 VOICE.WELCOME
 VOICE.WHERE\_TO

```

### Global

```
 VOICE.G\_AFFIRMATIVE
 VOICE.G\_BYE
 VOICE.G\_CHEER
 VOICE.G\_ENEMY\_WEAK
 VOICE.G\_GOODGAME
 VOICE.G\_GREATSHOT
 VOICE.G\_HI
 VOICE.G\_HOLD\_FIRE
 VOICE.G\_NEGATIVE
 VOICE.G\_OOPS
 VOICE.G\_SORRY
 VOICE.G\_THANKS
 VOICE.G\_WELCOME

```

See also: Util.BotChat, SayVoice
Fortressforever

Fortress Forever is a Team Fortress modification for Half-life 2. Omni-bot will come with the default installation for training and scrimmage purposes, with training scripts targeted to helping those that are new to Team Fortress, as it can be a difficult game to attract new players.

## General Info

* FF Info
* Fortress Forever Forum
* Fortress Forever Home
* Fortress Forever Wiki
* Dust Bowl Valley demo (video)
Main Page tests

# Install Success

**MediaWiki has been successfully installed.**

Consult the User's Guide for information on using the wiki software.

# Getting started

* Configuration settings list
* MediaWiki FAQ
* MediaWiki release mailing list
* Localise MediaWiki for your language

# Geshi Test

```
global Map =
{
    rotor1toggle = true,

    rotor1stop = function( trigger )
    {
        Wp.SetWaypointFlag( "Name_of_waypoint", "closed", Map.rotor1toggle );
        Map.rotor1toggle = !Map.rotor1toggle;
    },
};

member ListTableMembers = function(tbl, sortBy)
{
	if ( IsTable(tbl) ) {
		noParam = !sortBy || sortBy=="null";
		if(noParam){ sortBy = "key"; }
		sortedTable = tableSort(tbl, sortBy);
		foreach(value in sortedTable) {
			if(noParam) {
				print("  " + value + "  " + ToString(tbl[value]));
			} else {
				print("     "+value);
			}
		}
	}
	else {
		print("Util.ListTableMembers: Expected table, got " + typeName(tbl));
	}
};

tbl1 = {};
tbl1[WEAPON.PANZERFAUST] = true; //RPG
tbl1[WEAPON.MOBILE_MG42] = true;
tbl1[WEAPON.FLAMETHROWER] = true;
tbl1[WEAPON.MORTAR] = true;
tbl2 = {};
tbl2[WEAPON.MOBILE_MG42] = true; //MOBILE_BROWNING
tbl2[WEAPON.FLAMETHROWER] = true;
tbl2[WEAPON.MORTAR] = true;
```

# Collapsible Tests

 at first | load time

This text is collapsible.
Scripting waypoints flags

During the process of running a map things can change such as doors no longer been axis only.

The following flags can be added/removed via script

* axis
* allies
* closed

There are a few other flags that can be added removed but these are the only ones that you are likely to need to change in the game

The waypoint must be named in the map "*/bot waypoint\_setname name*" so the script knows which waypoint to add/remove the flag

The command to use in the script is "*Wp.SetWaypointFlag*".

```
 Wp.SetWaypointFlag( "waypoint\_name", "flag", true/false );

```

This command initially must be added to the "*global OnMapLoad*" section so the status of the flag is known at the start of the map. The flag must then be added to any "*function( trigger )'*s" that causes the need to add/remove the flag.

Below is an example of the script to remove a axis only flag to allow both teams to use.

```

global Map =

{
 Main\_Entrance\_Destroyed = function( trigger )
 {
 if ( TestMap )
 { return; }

 Wp.SetWaypointFlag( "door1", "axis", false );

 Util.MapDebugPrint( "Main\_Entrance\_Destroyed" );
 },
};

global OnMapLoad = function()

{
 OnTrigger( "Allies have destroyed the main entrance", Map.Main\_Entrance\_Destroyed );

 Wp.SetWaypointFlag( "door1", "axis", true );

};

```

Note: Using this to remove a closed flag is not needed on blockable section of a map unless the blockwall flag does not work like in the Caen map.
Vehicle Trigger Regions

In Omni-bot 0.8 a new version just for detecting Vehicles entering trigger regions was introduced.

## The Trigger

A standard AABB trigger region text looks like this:

```
OnTriggerRegion(AABB(0,0,0,1,1,1),Map.YourTrigger);

```

For the new version you simply need to edit the section at the end like this:

```
OnTriggerRegion(AABB(0,0,0,1,1,1), RegionTrigger.VehicleTrigger);

```

### What does this do

When using the new trigger it now sends a message to the console (requires "/bot debugtriggers" to see) saying vehicle name "at location".

Example:

```
 tank at location
 truck at location

```

## Creating a new trigger

This next section works the same way as normal trigger text

Example

```

 OnTrigger( "tank at location", Map.vehicle\_at\_location );
 OnTrigger( "truck at location", Map.vehicle\_at\_location );

```

In the example there are triggers for both a truck & a tank pointing to the same trigger function "vehicle\_at\_location" this is because of how the next trigger function works. It does not matter if you just have 1 tank or both a tank & a truck all that matters is that the vehicles reach the trigger regions in order.

## The Trigger Function

Within the new trigger function you need to setup a "switch(Map.VehicleLocation)" table. Within the table you setup a series of case's i.e. case 1, case 2 etc.

Each time the vehicle(s) enter a trigger region the "VehicleLocation" is updated so the 1st time the vehicle a trigger region is goes to case 1 & the 2nd to case 2 etc.

Within the case series you can add any scripting command such as "SetAvailableMapGoals" or make it run another standard trigger "Map.tank\_at\_barrier1();"

```

vehicle\_at\_location = function( trigger )
 {
 switch(Map.VehicleLocation)
 {
 case 1:
 {
 SetAvailableMapGoals( TEAM.AXIS, true, "MOUNT\_tank\_axis" );
 Map.tank\_at\_barrier1();
 }
 case 2:
 {
 Map.truck\_at\_barrier2();
 }
 }
 Util.MapDebugPrint("vehicle at location " + Map.VehicleLocation, true);
 },

```

## Example Script

This is a edited cut down version from goldrush

```

global Map =
{
 tank\_at\_barrier1 = function()
 {
 Util.MapDebugPrint("tank\_at\_barrier1");
 },

 truck\_at\_barrier2 = function()
 {
 Util.MapDebugPrint("truck\_at\_barrier2");
 },

 vehicle\_at\_location = function( trigger )
 {
 switch(Map.VehicleLocation)
 {
 case 1:
 {
 SetAvailableMapGoals( TEAM.AXIS, true, "MOUNT\_tank\_axis" );
 Map.tank\_at\_barrier1();
 }
 case 2:
 {
 Map.truck\_at\_barrier2();
 }
 }
 Util.MapDebugPrint("vehicle at location " + Map.VehicleLocation, true);
 },
};

global OnMapLoad = function()
{
 OnTrigger( "tank at location", Map.vehicle\_at\_location );
 OnTrigger( "truck at location", Map.vehicle\_at\_location );

 OnTriggerRegion(AABB(660.253,828.462,59.548,960.874,1040.700,173.040), RegionTrigger.VehicleTrigger);
 OnTriggerRegion(AABB(480.061,-720.472,-332.313,634.705,-478.740,-222.440), RegionTrigger.VehicleTrigger);

 print( "Omni-bot map script for " + GetMapName() + " executed." );
};

```
DMS

## Omni-Bot Dev Menu System (DMS)

This is as the name suggests a Menu to help you with the new Omni-bot commands & to save you from having to open the console to manually type common commands that you are not likely to have binded.

This guide is just an overview; it is recommended that you read the wiki on Goal specific instructions so you understand what the menu actually does.

**Note:** This Menu will only run in Omni-Bot Version 8.

## Download

You can download the file from the Tools download section

## Installing

It is strongly advised that you do not use this with any other menu files.

This file should not be installed on a remote/rented server.

Just place the OB\_DMS.pk3 file in your omnibot folder (not omni-bot)

## Accessing the menu

Open console and type

*/omnibotmenu*

Or bind to a key

*/bind v omnibotmenu*

You can also access the menu by opening the standard Voicechat Menu (normally the V key) and pressing 8

## The Menu

The menu comprises of 6 colour coded sections.

*Waypoints*

Draw Goals.

Create Goals/Bot Roles.

Editing/Options.

Commands/Addbots.

Cheats/Cvars

## Waypoints

Waypoints on/off.

View waypoint/facing on/off.

Waypoint Setname – All you have to do now is select this and type your waypoint name in the text box.

All relevent waypoint functions.

## Draw Goals

3 Menus allowing you to turn all goals on/off & select individual goal types.

## Create Goals

This is split into 3 menus depending on what type of goal you are creating.

Camp, Map & Weapon

These menus allow you to simply select a Goal type then create & edit various options that apply to each goal type without having to remember each individual command using a single key.

## Commands/Addbots

Basically some useful standard Omni-bot commands that you might not normally have binded

Adding bots/Test Bots quick way to add bots.

## Cheats

Allows you to change the following

Gravity.

Player Speed.

Game Speed – Advise use Time 0 (timelimit 0) with this.

Set timer to unlimited

Set Cheats on/off (activates sv\_cheats without running devmap)

God

Give All

No Clip

No Fatigue

Warpbot

Give Skill

## Cvars

Set recharge to 10 for each class

Set Spawn times to 1 second

Requires a map restart to work for all in this section

## Credits

MickyP - Menu Creator

Crapshoot - Adding the commands into the omnibot mod to make this work & various edits

Stoned-Aimlezz - Original Cheats menu maker

Ailmanki - Idea for the Waypointing & Addbots section
Escort Goal

+ this can be set anywhere in the map
* /bot goal\_setproperty vehicle <vehicle goal name>
	+ example: /bot goal\_setproperty vehicle MOVER\_truck
* stand at an offset from the goal where the bot should escort from
* /bot goal\_setproperty offset 0
	+ optionally define additional offsets
	+ a blue line with an index label will be rendered for all offsets

#### Properties

Properties can be set with the goal\_setproperty command assuming that the goal has been selected.

##### group

A group is a method of organizing sets of goals. One advantage to this is that all goals in a group can be enabled or disabled in one line of script rather than seperate goal types requiring additional lines to enable or disable them. Assigning roles to a group is also possible as an alternative to assigning each individual goal a role.

**syntax:** /bot goal\_setproperty group <string groupName>
**example:** /bot goal\_setproperty group myGroup
##### role

See the section on bot roles.

**syntax:** /bot goal\_setproperty role <role mask>
**example:** /bot goal\_setproperty role 1
##### vehicle

This property attaches the goal to the specified vehicle.

**syntax:** /bot goal\_setproperty vehicle <vehicle goal name>
**example:** /bot goal\_setproperty vehicle MOVER\_truck
##### offset

Sets a position where a bot should escort the vehicle from

**syntax:** /bot goal\_setproperty offset <int index>
**example:** /bot goal\_setproperty offset 0
##### button

Optionally set buttons for them to press while escorting. JUMP for boats is useful to keep them treading water.

**syntax:** /bot goal\_setproperty button <optional clear>
**example:** /bot goal\_setproperty button JUMP
**example:** /bot goal\_setproperty button clear // clears all buttons
**note:** /bot goal\_setproperty button -1 will list all valid button names
**note:** any number of buttons can be set. upon recieving the goal, the bot will randomly choose one to use in the case of multiples
##### tagname

Sets the name of the goal. This can optionally be set when passed as the optional parameter in the goal\_create command. Useful for renaming goals.

**syntax:** /bot goal\_setproperty tagname <string name>
**example:** /bot goal\_setproperty tagname myGoalName
Running Omni-Bot Loading maps ET

## Step 1

Start the game normally, click on MODS and choose omnibot (or another 3rd party mod which supports Omni-Bot).

OR

Start the game with command line parameter +set fs\_game omnibot.
It's recommended to create a shortcut if you use Windows.

## Step 2

After Wolfenstein:Enemy Territory starts up.

Click on : HOST GAME.

File:Omni-Bot 0.7 Install - 8.JPG

## Step 3

When the next screen opens.

In the Top left

Make sure the game type is set to "Single-Map Objective"

File:Map type.jpg

## Step 4

In the lower left section select the map you want to edit

File:Map load.jpg

## Step 5

In right corner below.

Click on : START SERVER.

File:Omni-Bot 0.7 Install - 9.JPG

As an **alternative to steps 2 to 5**, you can open the game console and type

```
/map <mapname>
```
 If you want to enable cheats, you must type

```
/devmap <mapname>
```