# Sistema Vuelo IA

![](/files/73103cca31ea481e12266c4413d544ca1bc79e5a)

Con este sistema conseguimos que la IA pilote helicópteros de forma autónoma, que siga una ruta, que recoja a jugadores en un punto, haga un LZ para dejar a los jugadores que transporta e incluso que dispare a los jugadores o no.\
Además, sistema de voces personalizado.

Actualmente solo disponible en los 4 helicópteros del juego base. En la siguiente imagen se ven los disponibles, aunque es relativamente fácil añadir otros helicópteros, tanto del juego base como de otros mods.

![](/files/694a26e7d3865028db19290e70bded4a6a6a3970)

### Añadir un helicóptero a nuestra misión

Para añadir un helicóptero en nuestra misión debemos seguir los siguientes pasos.

Primero, hay que añadir el slot adecuado. Así que en el buscador de recursos buscamos el slot `BH_SlotAmbientHelicopter`, y lo añadimos al mapa como otro slot del juego.

Una vez puesto, lo configuramos. En el campo `Object to Spawn`, buscamos uno de los cuatro helicópteros disponibles. Estos están dentro de la carpeta prefab del mod Bhelma Core, como se puede ver en la imagen anterior.

Una vez seleccionado, pasamos a la configuración del mismo. Nos dirigimos a la parte de abajo del slot para localizar estas cuatro secciones.

![](/files/157c2ff07f98ac9ad4eea66a6d77e1cd544741ae)

Empezamos de abajo hacia arriba, explicando cada sección.

#### BH Helicóptero Ambiental (Tripulación)

Aquí debemos seleccionar la tripulación, normalmente del mismo bando que el helicóptero que pongamos, si lo deseamos, o del bando del jugador o del enemigo si queremos que nos ataque.

El campo `Gunner Sots Available` es solo si el helicóptero tiene slots de artilleros y se quieren que se ocupen por la IA; en caso contrario, desmarcarla.

#### BH Helicóptero Ambiental (Acciones)

Aquí son las acciones que queramos que se realicen cuando se cumpla que el helicóptero se destruya o ataque.

Esto viene bien si queremos cumplir alguna tarea de destruir al helicóptero en vuelo, por ejemplo.

#### BH Helicóptero Ambiental (Luces)

Si se desea que las luces del helicóptero vayan encendidas mientras despega, vuela o aterriza.

#### BH Helicóptero Ambiental

Aquí está el meollo del módulo.

Prácticamente los parámetros ya están ajustados para un vuelo seguro, pero por supuesto se pueden cambiar para que el vuelo sea más agresivo.

El parámetro que sí o sí debemos configurar es el de `Waypoins`.

Aquí debemos añadir el nombre de las entidades a las cuales el helicóptero hará su ruta. El nombre de waypoints funciona perfectamente, véase la imagen siguiente.

![](/files/431f9a0e6a162ccd3be2f2d5bd8cd47fb5169178)

Como se puede ver, los parámetros disponibles en cada “punto de ruta” son largos, pero así podemos trabajar de forma diferente en cada uno de ellos, por si necesitamos cualquier cosa a lo largo de la ruta.

* `Waypoin Name:` Nombre de la entidad o del punto donde se dirigirá el helicóptero. El nombre de los waypoints es suficiente. Esos waypoints que se pondrían en el mapa no hay que configurarlos, solo nos hace falta su nombre para que el helicóptero tenga su punto en el mapa.
* `Is Landing Event:` Despega en este punto.
* `Shutdown Engine:` Si queremos que esté el motor apagado.
* `Wait Seconds:` Espera en segundos para continuar al siguiente punto.
* `Wait For Player Get In:` Si está en tierra; espera a que los jugadores embarquen para despegar. Necesita configuración adicional con los campos: Use Fixed Player Count, Fixed Player Count, Wait Timeout, Wait Extra Time, Radio Message Interval, Radio Msg Boarding, Radio Msg Min reached, Radio Msg Timeout, Radio Msg Periodic, Radio Faction Key.
* <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>Si el primer waypoint está al lado del punto de spawn del helicóptero y se marca esta casilla, el helicóptero espera a que suban los jugadores, antes de levantar el vuelo.</p></div>
* `Wait For Players Get Out`: Espera a que los jugadores desembarquen.
* `Important Entity Name:` Nombre de la entidad que debe de estar sí o sí en el helicóptero para despegar. Ejemplo, el nombre de una IA que acabamos de capturar.
* `Delete Helicopter:` Si se borra el helicóptero al llegar a este punto.
* `Do Override Max Speed:` Si queremos que sobreescriba la velocidad base, configurada anteriormente.
* `Override Max Speed:` Velocidad que queremos que coja en este punto.
* `Do Override Rotation Power Dividor:` Si queremos que sobre escriba el valor de la velovodad del rotor.
* `Override Rotation Power Dividor:` Velocidad del rotor.
* `Do Override Min Height Above Terrain:` Si queremos que sobre escriba la altura de vuelo en este punto.
* `Override Min Height Above Terrain:` Altura sobre el suelo que queremos que esté en este punto.
* `Actions On Waypoint:` Acciones a realizar cuando el helicóptero llegue a este punto.
* `Actions On Player Condicion:` Acciones que se realizaran cuando la condición del jugador se cumpla. Activable desde otro trigger y los jugadores lo activen.
* `Use Fixed Player Count:` Usar cantidad fija para saber cuántos jugadores deben de estar dentro del helicóptero para despegar.
* `Fixed Player Count:` Cantidad de jugadores que deben de haber dentro del helicóptero para despegar.
* `Wait Timeout:` Tiempo máximo que espera el helicóptero antes de despegar, en caso de no llegar al límite de jugadores que deben de subir al helicóptero. Comenzará a contar en el momento suba el primer jugador. En segundos.
* `Wait Extra Time:` Tiempo extra antes de levantar el vuelo cuando se acabe el tiempo de Wait Tiemout. En segundos.
* `Radio Message Interval:` Tiempo en segundos que transmitirá un mensaje de que los jugadores suban al helicóptero. Tanto en pantalla como por radio.
* `Radio Msg Boarding:` Mensaje escrito que saldrá cuando el primer jugador suba al helicóptero. Se escuchará también mensaje de radio.
* `Radio Msg Min Reached:` Mensaje escrito que saldrá cuando se llegue a la cantidad de jugadores establecida. Se escuchará mensaje por radio.
* `Radio Msg Timeout:` Mensaje escrito cuando se acabe el tiempo de espera. Se escuchará mensaje de radio.
* `Radio Msg Periodic:` Mensaje escrito periódico que saldrá mientras se espera a que suban los jugadores. Saldrá también los jugadores que hay y los que se deben de cumplir para despegar. Se escuchará mensaje por radio.
* `Radio Faction Key:` facción a la que debe salirle los mensajes escritos.

Como se puede ver, en cada punto de ruta se pueden cambiar los ajustes de base y realizar acciones, así da al editor el máximo control de la IA y el vuelo.

## Agregar Helicoptero al sistema

Para añadir otro helicoptero, tanto vanilla como de otro mod, hay que realizar ciertos ajustes y configuraciones para que el helicoptero llegue a volar. Esta configuracion solo sirve para los helicopteros de un solo ROTOR principal, esto es muy importante.

El primer paso sera duplicar o heredar un prefab del helicoptero que deseemos en la mision. Como nombre le añadiria al nombre que quieras la extension "AmbientHelicopter", de esta manera se sabra que este prefab es justamente el que tiene el sistema implementado. Con este paso, procedemos a editar nuestro nuevo prefab.

Procedemos a configurar nuestro nuevo helicoptero. Trabajaremos sobre el inspector de la derecha del workbench.

#### Paso 1

Añadimos el componente **BH\_AmbientHelicopterControllerComponent**  y dejamos los parametros por defecto. Estos mismos ajustes estaran disponibles desde el editor, asi que no es necesario manipularlos.

<figure><img src="https://i.imgur.com/TF06gch.png" alt=""><figcaption></figcaption></figure>

#### Paso 2

Sobre el listado de componentes que dispone el prefab, localizamos el componente **SCR\_BaseCompartmentManagerComponent**.

En este componente hay que desplegar el listado de **Compartment Slots** y pinchamos sobre el boton derecho del raton sobre **PilotCompartment** para cambiar la clase, como se ve en la siguiente imagen.

<figure><img src="https://i.imgur.com/0CEwPSd.png" alt=""><figcaption></figcaption></figure>

Y seleccionamos la clase BH\_FakePilotCompartmentSlot.

<figure><img src="https://i.imgur.com/hnpHquW.png" alt=""><figcaption></figcaption></figure>

#### Paso 3

Configuramos el componente **VehicleHelicopterSimulation** de la siguiente manera. Se deben poner los mismos valores en las mismas secciones, de lo contrario ningun helicoptero levantara el vuelo.

Se añaden 3 capturas en el orden en el cual esta el componente a configurar.

<figure><img src="https://i.imgur.com/C0FCneL.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://i.imgur.com/QbxmewP.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://i.imgur.com/Gn9y94z.png" alt=""><figcaption></figcaption></figure>

#### Paso 4

Se procede al resto de componentes, con ajustes menores, para completar la configuración.

* 4.1 - Añadir el componente **AiPathFindingComponent** y configuramos el parametro **Navmesh Project**.

<figure><img src="https://i.imgur.com/2qVpCqJ.png" alt=""><figcaption></figcaption></figure>

* 4.2 - Deshabilitar el componente **ChimeraAiPathFindingComponent**.
* 4.3 - Configurar el componente **RigidBody**

<figure><img src="https://i.imgur.com/ESs80X9.png" alt=""><figcaption></figcaption></figure>

* 4.4 - Activar el componente **BaseHUDComponent**

<figure><img src="https://i.imgur.com/NCNFUdG.png" alt=""><figcaption></figcaption></figure>

* 4.5 - Configurar el componente **SCR\_AiVehicleUsageComponent**.

<figure><img src="https://i.imgur.com/flyokU6.png" alt=""><figcaption></figcaption></figure>

* 4.6 - Desactivar el componente **SCR\_EditableVehicleComponent**
* 4.7 - Desactivar el componente **SCR\_PowerComponent**
* 4.8 - Desactivar el componente **SCR\_ResourceComponent**
* 4.9 - Configurar el componente **SCR\_FuelConsumptionComponent**

<figure><img src="https://i.imgur.com/jdSV7wW.png" alt=""><figcaption></figcaption></figure>

* 4.10 - Configurar el componente **BaseVehicleNodeComponent**

<figure><img src="https://i.imgur.com/BbL0Z0V.png" alt=""><figcaption></figcaption></figure>

* 4.11 - Desactivar el componente **VehicleGamepadEffectsManagerComponent**
* 4.12 - Configurar el componente **SCR\_HelicopterControllerComponent**

<figure><img src="https://i.imgur.com/iyQRrV4.png" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bhelma.gitbook.io/bhelma-core/sistema-vuelo-ia.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
