# Slots Objetos con Acciones

### Descripcion

Estos scripts se han creado por la necesidad de dar a objetos acciones que ejecuten, válgase la redundancia, acciones.\
Por ejemplo; una antena de radio, queremos que aparezca la accion de sabotear, y cuando se sabotee que spawneen enemigos para atacar a los que estan en la antena.

Actualmente, esto ya se puede hacer, pero hacen falta conocimientos del enfusion y conocer muy bien el sistema de entidades y layers. No es dificil si conoces la mecanica, pero si engorroso lo cual puede llevar a perdida de cierto tiempo que al final los editores no disponen.

Por este motivo, se ha creado estos scripts.

Hay dos variables, dependiendo de la necesidad del editor, se usara una u otra. Estas se denominan la Dinamica y la Estatica.\
Ambas funcionan igual y hacen lo mismo, pero la implementacion, configuracion y uso son totalmente diferentes.

### DINAMICA

#### Descripcion

Esa opcion es por si se necesita crear un slot de un objeto, al cual se quiere añadir una accion, para que lo gestione el escenario framework.

Ejemplo:\
Necesitamos que una radio de comunicaciones tenga la accion de "Pedir Refuerzos" para que despues spawneen aliados en la zona o de por cumplida una tarea, pero que dicha accion u objeto no este disponible al inicio de mision, sino cuando los jugadores lleguen a una zona, cumplan una tarea, etc...

Para realizarlo, hay que hacer dos configuraciones.

#### Configuracion

Lo primero es **Duplicar** el prefab al que se necesite añadir la accion, en estos ejemplos vamos a utilizar una radio de comunicaciones. La duplicaremos en la mision con el nombre que se quiera.\
Una vez duplicado, pinchamos con el boton derecho del raton y buscamos la opcion "Edit Prefab".

Con el prefab en modo edicion, buscamos en el Inspector de la derecha el componente "ActionsManagerComponent", si ese objeto aun no lo dispone, se debe añadir mediante el boton de mas abajo "+ Add Component". Y se configura.

![](/files/12d2c995afd65f996c67dcc3a12f2a714d32b4ad)

Esta configuracion se debe realizar tal cual la imagen anterior, de esta manera, el slot, en el workbench sera el encargado de añadirle nombre a la accion, la duracion y las acciones que se necesiten que se activen cuando se realice.

En "Action Contexts", pulsamos en "+" para añadir una nueva.\
En Context Name se debe de poner el nombre ***InteractContext***, se debe de respetar este nombre.\
Se añade un Position con PointInfo y ubicamos donde se requiere que este la accion y la puedan ver los jugadores.

En "Aditional Actions", pulsamos en "+" y del desplegable seleccionamos la opcion ***BH\_DinamicInteractiveAction***.\
Pulsamos en "+" en "Parent Context List" y se selecciona la accion creada en el apartado de "Action Contexts".\
Y en "Action Title" se escribe el parametro ***InteractContext***.

Esta configuracion se debe respetar, cual cambio de nombre en uno de ellos, no funcionara correctamente.

Se guarda el prefab, y volver al workbench.

En el editor, seguimos la jerarquia estandar de escenario framework para insertar un slot.

![](/files/34c631b9734acfb0c303409140c5e09483073231)

Una vez colocado en el mapa, donde se desee, hay que configurarlo. En el inspector de la derecha se debe añadir el componente ***BH\_ScenarioFrameworkSlotInteractive*** y deshabilitar el componente **SCR\_ScenarioFrameworkSlotBase** como se puede ver en la siguiente imagen.

![](/files/dbba7c13d321009ff13105521268e4f7fb49849d)

Se configura el nuevo componente de igual manera que el slot que hemos deshabilitado.\
En la categoria ***Asset*** en el parametro **Object to Spawn** se busca el objeto que anteriormente se ha configurado, en este ejemplo, la radio.

![](/files/7a9e5560ef197953ffb93fc20aa4932140e8c1f1)

De igual manera que se haria en el otro componente, salvo que en este se añaden las funciones necesarias para activar acciones.

#### Parametros

![](/files/7830596368a1dbd1c1c0da03a76f19a16df19d06)

* ***BH Debug:*** Activar el debug en consola.
* ***BH Action Name:*** Nombre de la accion ue veran los jugadores al acercarse al objeto.
* ***BH Action Duration:*** Duracion que se necesita para realizarla. Es el tiempo que tendra que estar el jugador manteniendo la accion.
* ***BH One Time Use:*** Si dicha accion se debe o no hacer una vez o se puede realizar varias veces.
* ***BH On Action Performed:*** Acciones que se deben realizar cuando se cumpla la accion. Se configura igual que las estandar, como por ejemplo, cuando se cumple una tarea.
* ***BH On Action Started:*** Acciones a realizar cuando empieza la accion.Se configura igual que las estandar, como por ejemplo, cuando se cumple una tarea.
* ***BH On Action Cancelled:*** Acciones a realizar en caso de no ejecutar la accion. Se configura igual que las estandar, como por ejemplo, cuando se cumple una tarea.

### ESTATICA

#### Descripcion

Esta opcion seria adecuada, si lo que se necesita es poner directamente un objeto en el mapa y añadirle la accion.\
Por ejemplo, que cuando un jugador se acerce a un telefono, que pueda llamar por telefono y si lo hace que se complete una tarea, se spawneen enemigos, etc...\
Esta opcion no seria para que lo gestionase el escenario framework, si no que directamente el objeto esta en el mapa.

#### Configuracion

La configuracion es sencilla. Simplemente se añade al mapa el objeto que deseemos, en este ejemplo un telefono de mesa y en el inspector de la derecha abrimos el componente ***ActionsmanagerComponent*** o lo añadimos si no lo estuviese, como se puede ver en la siguiente imagen.

![](/files/4ed62ee2c98104e6fcc078e8fecb4a2c37026569)

Una ves abierto, en el apartado **Action Contexts** pulsamos en "+" si no hubiese ninguno, y si hubiese alguno, utilizaremos el ***default*** para nuestro caso, a no ser que el editor desee colocar la accion en otro sitio del objeto para que los jugadores tengan que buscarlo.\
Se hay que añadirlo, se configura tal cual imagen anterior o siguiente y podemos continuar.

![](/files/57f23789916a65e6eaadf77fca8f67821b90ffcd)

Una vez realizado, abrimos el apartado de ***Aditional Contexts***, pulsamos en "+" para añadir una nueva y en el desplegable seleccionamos la opcion ***BH\_InteractiveSlotUserAction***.\
En el campo **Parent Context List** seleccionamos del listado, si este ejemplo la opcion "Default", y si se a creado uno nuevo, pues el nuevo.

#### Parametros

![](/files/0fc13f60234338c2a008938f4af2da6322d65695)

* ***BH Debug:*** Para activar el debug en consola.
* ***BH Action Name:*** Nombre de la accion. Nombre que veran los jugadores cuando se acerquen al objeto.
* ***BH On Time Use:*** Si se puede o no usar varias veces la accion.
* ***BH On Action Performed:*** Acciones que se deben realizar cuando se cumpla la accion. Se configura igual que las estandar, como por ejemplo, cuando se cumple una tarea.
* ***BH On Action Started:*** Acciones a realizar cuando empieza la accion.Se configura igual que las estandar, como por ejemplo, cuando se cumple una tarea.
* ***BH On Action Cancelled:*** Acciones a realizar en caso de no ejecutar la accion. Se configura igual que las estandar, como por ejemplo, cuando se cumple una tarea.

En el siguiente ejemplo, cuando el jugador utilice este telefono, le quitara el modo incognito durante unos segundos y le mostara un mensaje para indicarselo.

![](/files/104a742a5f4474ebee33bc360ae340bd446ae648)


---

# 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/slots-objetos-con-acciones.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.
