Weapon

#### WeaponId

The id of the weapon. Should correspond to an entry in the global WEAPON table. This id MUST match the numeric weapon id expected by the mod interface.

#### MinUseTime

The minimum time the bot should maintain the weapon once selected.

#### PrimaryFire

Returns a reference to the primary  Fire Mode

#### SecondaryFire

Returns a reference to the secondary Fire Mode

## Fire Mode

### Properties

#### RequiresAmmo

This weapon requires ammo to operate. The type of ammo is determined by the Properties|AmmoType.

#### WaterProof

The weapon can be fired underwater. If false, the weapon will not be considered when the user is underwater.

#### HasClip

The weapon has a clip. Helps determine how ammo checking is performed.

#### InheritsVelocity

The weapon projectile inherits the velocity of the player when fired. This is used for a bit more accuracy in the projectile leading calculations.

#### ManageHeat

The weapon can overheat, so the bot should oscillate the firing to attempt to keep from overheating.

#### IgnoreReload

Ignore this weapon if it needs to reload. Normally bot would switch to weapons to reload them if they have no target. This option disables that.

#### RequiresTargetOutside

This weapon requires that the target is outdoors.

#### RequiresShooterOutside

This weapon requires that the shooter is outdoors.

#### WeaponType

The type of weapon this fire mode is.

* melee - Melee attacks are close range. Bots attack only if desirability is greater than default desirability.
* instant - Instant hit means no leading or projectile velocity is necessary.
* projectile - Bot will lead targets based on projectile velocity.
* grenade - Not yet implemented. Same as projectile.
* item - cannot be used in combat (dynamite, landmine, syringe, ammo pack, ...).

#### MustBeOnGround

The bot must be standing on the ground to use this weapon(not airborne).

#### FireOnRelease

The weapon is fired when the fire button is released, as opposed to firing when the fire button is pressed.

#### UseMortarTrajectory

The weapon should use the mortar trajectory when calculating trajectory.

#### MaxAimError

The maximum aim error to use for the fire mode. Aim Error is a Vector2(x,y), where x is the horizontal aim error and y is the vertical aim error.

#### AimOffset

The offset where to aim at players. AimOffset is a Vector3(x,y,z) that represents a world offset to aim the weapon.

#### PitchOffset

Normally a projectile comes out along the aim vector of the bot, but some weapons can come out at an angle. PitchOffset is the pitch offset(in degrees) the projectile shoots at.

#### ShootButton

The button id of the button used to fire the weapon. Defaults to BTN.ATTACK1

#### LowAmmoThreshold

Used for ammo desirability calculations. This is the threshold the weapon will be considered low on ammo.

#### LowAmmoPriority

When the ammo is below the threshold above, this is the priority used for the desirability of the ammo.

#### LowAmmoGetAmmoAmount

Ammo amount to get from a cabinet. Used for mortar.

#### FuseTime

The countdown timer the projectile takes before it explodes/activates.

#### AmmoType

The ammo id the weapon uses. Depending on the game, this may be a duplicate of the weapon id or it may be an actual ammo id, from the global AMMO table.

#### ProjectileSpeed

The speed the projectile flies at. Only relevant to projectile fire modes.

#### MinChargeTime

The minimum time the bot should charge this weapon before shooting. Normally used with FireOnRelease property. Used as a minimum range for a random charge time, along with MaxChargeTime.

#### MaxChargeTime

The maximum time the bot should charge this weapon before shooting. Normally used with FireOnRelease property. Used as a maximum range for a random charge time, along with MinChargeTime.

#### DelayAfterFiring

How long the bot should wait to choose this weapon again after firing.

#### ProjectileGravity

The gravity multiplier used for the projectile. Used to calculate trajectory of the projectile. Projectiles that aren't effected by gravity will have a ProjectileGravity of 0. A projectile that has half gravity is a 0.5, while full gravity is 1.0

#### DefaultDesirability

Default desirability is the desirability used for choosing a weapon when the bot has no target. The highest default desirability will be equipped when the bot has no target, after all weapons that need reloading is considered.

#### MinAimAdjustmentTime

Minimum time between new calculations of aim error.

#### MaxAimAdjustmentTime

Maximum time between new calculations of aim error.

#### CalculateDefaultDesirability

Script function callback to calculate the default desirability. Should return a 0-1 desirability value.

#### CalculateDesirability

Script function callback to calculate the desirability of the weapon. Should return a 0-1 desirability value. This callback will be passed the TargetInfo of the current target.

#### CalculateAimPoint

Script function callback to calculate an aim point for the weapon. Should return a Vector3 world aim position. This callback will be passed the TargetInfoof the current target.

### Not used properties

#### SplashDamage

The weapon produces splash damage, and should be disfavored when there are allies in the target area.

#### Stealth

The weapon should be favored when stealth is desired.

#### NeedsInRange

The bot must be within the MinRange and MaxRange to use, even if that means the bot should chase the target. Typically used for melee weapons.

#### MaxEquipMoveMode

The fastest the bot should move when this weapon is equipped (run, walk, still).

#### Offhand

Weapon can be used simultaneously with another weapon, such as offhand grenades.

#### ManualDetonation

The weapon projectile must be manually detonated.

#### SniperWeapon

The weapon is a sniper weapon, and should be considered for use for goals that require a sniper weapon.

#### ZoomButton

The button id of the button used to zoom the weapon. Defaults to BTN.AIM

#### MinRange

The minimum range the bot should consider using this fire mode.

#### MaxRange

The maximum range the bot should consider using this fire mode.

#### PreShoot

Script function callback to that is called just before the weapon is fired.

### Functions

#### SetBurstRange

This function can be called multiple times in order to set several ranges for burst firing. Whenever the target is within one of the ranges, the bot will use controlled burst fire as set up by this function.

**Parameters:** (minrange, maxrange, numrounds, mindelay, maxdelay)

**Returns:** none

**Example:**

```
 // from 200-500 units away, set up a 3 shot burst rate, with a 1-2 second delay between each burst
 w.PrimaryFire.SetBurstRange(200, 500, 3, 1, 2);

```

#### SetDesirabilityRange

This function can be called multiple times to assign a desirability to use the weapon when the target is within a given range of the bot.

**Parameters:** (minrange, maxrange, desirability)

**Returns:** none

**Example:**

```
 // between 200 and 500 range, we want the desirability to be 0.5
 w.PrimaryFire.SetDesirabilityRange(200, 500, 0.5);

```

#### SetTargetBias

Sets a bias multiplier for a target type. This bias will be multiplied with the desirability when calculating the desirability of a weapon versus a target.

**Parameters:** (targettype, bias)

**Returns:** none

**Example:**

```
 // make this weapon 1.5 times more likely to be used against heavy vehicles
 w.PrimaryFire.SetTargetBias(CLASS.VEHICLE\_HVY, 1.5);

```