Respawn de IAs
Moderador: C. Misiones & Noticias
- BBTheHeartPainkiller
- Visitante
- Mensajes: 701
- Registrado: 30 May 2021, 00:13
Respawn de IAs
Llevo tiempo intentando encontrar alguna guía o script con el que poder hacer reaparecer a los enemigos, y de esa manera reducir los enemigos totales de la partida.
Buscando en Google no encuentro lo que busco, o las maneras en la que lo explican no me funciona; así que podría alguien compartir conmigo alguna guía, script o comentario de como poder poner respawns de IAs en misiones?
Gracias por vuestra atención.
Buscando en Google no encuentro lo que busco, o las maneras en la que lo explican no me funciona; así que podría alguien compartir conmigo alguna guía, script o comentario de como poder poner respawns de IAs en misiones?
Gracias por vuestra atención.
En las sabias palabras de The Chieftain:
Re: Respawn de IAs
Hay módulos de ace ,aunque no los use aun, pero te dejo un video que los explica.
Re: Respawn de IAs
Descripción: Esta script es válida para generar un respawn de AI's en una o varias posiciones aleatorias que ataquen una posición determinada.
Testado Servidor Dedicado
1º Coloca un activador en el mapa con la condición deseada (BLUFOR - Presente por ejemplo) y en el init del activador escribe:
De esta forma al cumplirse la condición del activador, se activará la script.
2º Genera un archivo de texto (preferiblemente usar el software notepad++) en la carpeta de la misión y nombra el archivo del siguiente modo "respawnAI.sqf"
3º Coloca 4 marcadores en el mapa. Haz doble click en cada marcador y pon a 0% la transparencia del marcador (para que sea invisible durante la partida) y nombralos con "marker_1", "marker_2", "marker_3", "marker_4" (puedes utilizar cualquier nombre siempre que sea el mismo de la script). Del 1 al 3 será dónde respawnee la IA y el 4 será el marcador dónde ataque.
4º Copia la siguiente información en el archivo .sqf generado.
EXPLICACIÓN Y VARIABLES.
Condicion1: es el nombre de variable de la condición para hacer que se cumpla la función de la scripts. Para detener el scripts y que deje de generar unidades, colocar en un activador con cualquier condición deseada lo siguiente (al pasar la variable a "false" deja de cumplirse la condición y se termina la script):
Marker_1 / Marker_2 / Marker_3: es el nombre de la variable de los marcadores donde se genera de forma aleatoria.
Marker_4: es el nombre de la variable del marcador donde atacará la AI.
I_E_Scientist_F: La clase (class name) de la unidad que quieres que respawnee. Para saber el class name de una unidad, coloca una unidad deseada en el editor y con el click derecho>herramientas>copiar classname. Puedes colocar tantas AI como desees, pudiendo ser cada una de ellas de distinto class name. Simplemente asegúrate que va entre comillas y separado por comas entre sí (el último no debe llevar coma).
_x setskill 0.1: es el valor de cada parámetro de habilidad de la IA. Valor numérico de 0 a 1.
sleep 60;: es el tiempo en segundos que tarda en respawnear un grupo de ataque. Para que el tiempo sea aleatorio entre los valores indicados (en segundos), se puede sustituir por
ALTERNATIVA: Búsqueda y eliminación (Tracker script)
Si quieres que la AI busque y elimine a los jugadores en un rango deseado:
1º Sustituye la siguiente línea de la script
por
dónde el valor numérico (2550) es la distancia en metros en la cual la AI realizará la búsqueda de los jugadores.
2º Genera un archivo de texto (usar preferiblemente software notepad++) en la carpeta de la misión con nombre "fn_taskHunt.sqf" que contenga la siguiente información:
__________________________________________________________________________________
Descripción: Esta script es válida para generar un respawn de AI's en una posición determinada que ataquen a los jugadores que entran en el activador en un rango determinado.
Actualiza posicion cada 3 segs de los jugadores que activan el trigger.
Se borran cuando los jugadores se alejan a mas de X mts.
El tamaño del trigger tiene que ser menor a la distancia de abajo. Ejemplo: trigger tamaño 390; distancia abajo 400
Testado Servidor Dedicado
by TURCO_AR
1º Coloca un activador en el mapa con la condición deseada (BLUFOR - Presente por ejemplo) y en el init del activador escribe:
De esta forma al cumplirse la condición del activador, se activará la script.
2º Genera un archivo de texto (preferiblemente usar el software notepad++) en la carpeta de la misión y nombra el archivo del siguiente modo "respawnAI_Cazadores.sqf" y copia la siguiente información:
EXPLICACIÓN Y VARIABLES.
I_C_Soldier_Para_4_F: La clase (class name) de la unidad que quieres que respawnee. Para saber el class name de una unidad, coloca una unidad deseada en el editor y con el click derecho>herramientas>copiar classname. Puedes colocar tantas AI como desees, pudiendo ser cada una de ellas de distinto class name. Simplemente asegúrate que va entre comillas y separado por comas entre sí (el último no debe llevar coma).
(typeof _x == "I_C_Soldier_Para_4_F": La clase (class name) de la unidad JEFE DE ESCUADRA que quieres que respawnee. Para saber el class name de una unidad, coloca una unidad deseada en el editor y con el click derecho>herramientas>copiar classname.
(typeof _x == "O_G_Soldier_TL_F": La clase (class name) de la unidad ligada al Jefe de Escuadra que quieres que respawnee. Para saber el class name de una unidad, coloca una unidad deseada en el editor y con el click derecho>herramientas>copiar classname.
(_CuentaEnemigos < 600): condición para que las unidades respawneen (cantidad de enemigos).
((_objetivo distance (leader _cazadores)) > 400): Distancia de borrado de las unidades generadas.
sleep 3; : intervalo en segundos de la actualización de la posición de los jugadores.
_x setskill 0.1: es el valor de cada parámetro de habilidad de la IA. Valor numérico de 0 a 1.
if (typeof _x == "O_G_Soldier_TL_F") then {
_x addPrimaryWeaponItem "acc_flashlight";
_x enablegunlights "forceOn";};:
Comandos que afectaran a la unidad del class name generada. Se puede añadir cualquier otro comando, como por ejemplo retirar la ropa y añadir una vestimenta concreta, arma, accesorio, munición etc...
En este ejemplo, se retira todo el uniforme y armas que vienen por defecto para esa unidad (con su class name) y se añade uniforme, chaleco, mochila, accesorios, inventario, armas y accesorios de arma que el editor desee (se puede saber el class name de cualquier objeto desde el arsenal virtual del ace).
Este ejemplo es para vestir unidades enemigas con uniformes aleatorios de contaminación, mochila de buceo, inventario determinado y un arma concreta:
Testado Servidor Dedicado
1º Coloca un activador en el mapa con la condición deseada (BLUFOR - Presente por ejemplo) y en el init del activador escribe:
Código: Seleccionar todo
null=execvm "respawnAI.sqf"
2º Genera un archivo de texto (preferiblemente usar el software notepad++) en la carpeta de la misión y nombra el archivo del siguiente modo "respawnAI.sqf"
3º Coloca 4 marcadores en el mapa. Haz doble click en cada marcador y pon a 0% la transparencia del marcador (para que sea invisible durante la partida) y nombralos con "marker_1", "marker_2", "marker_3", "marker_4" (puedes utilizar cualquier nombre siempre que sea el mismo de la script). Del 1 al 3 será dónde respawnee la IA y el 4 será el marcador dónde ataque.
4º Copia la siguiente información en el archivo .sqf generado.
Código: Seleccionar todo
condicion1=true;
publicvariable "condicion1";
if(isServer) then{
while {condicion1 do {
_grp01Marker = Selectrandom ["marker_1", "marker_2", "marker_3"];
_grp01 = [getmarkerpos _grp01Marker, East, ["I_E_Scientist_F", "I_E_Scientist_F"],[],[],[],[],[],116] call BIS_Fnc_spawnGroup;
[_grp01, getMarkerPos "marker_4"] call bis_fnc_taskAttack;
{ _x setskill 0.1;
_x setskill ["aimingAccuracy",0.01];
_x setskill ["aimingShake",0.80];
_x setskill ["aimingSpeed",0.80];
_x setskill ["spotDistance",0.45];
_x setskill ["spotTime",0.25];
_x setskill ["courage",1];
_x setskill ["reloadSpeed",0.25];
_x setskill ["commanding",1];
_x allowFleeing 0;
} forEach (allUnits select {side _x isEqualTo EAST});
sleep 60;
};
};
EXPLICACIÓN Y VARIABLES.
Condicion1: es el nombre de variable de la condición para hacer que se cumpla la función de la scripts. Para detener el scripts y que deje de generar unidades, colocar en un activador con cualquier condición deseada lo siguiente (al pasar la variable a "false" deja de cumplirse la condición y se termina la script):
Código: Seleccionar todo
condicion1=false;
publicvariable "condicion1";
Marker_4: es el nombre de la variable del marcador donde atacará la AI.
I_E_Scientist_F: La clase (class name) de la unidad que quieres que respawnee. Para saber el class name de una unidad, coloca una unidad deseada en el editor y con el click derecho>herramientas>copiar classname. Puedes colocar tantas AI como desees, pudiendo ser cada una de ellas de distinto class name. Simplemente asegúrate que va entre comillas y separado por comas entre sí (el último no debe llevar coma).
_x setskill 0.1: es el valor de cada parámetro de habilidad de la IA. Valor numérico de 0 a 1.
sleep 60;: es el tiempo en segundos que tarda en respawnear un grupo de ataque. Para que el tiempo sea aleatorio entre los valores indicados (en segundos), se puede sustituir por
Código: Seleccionar todo
sleep (5 + random 10);
ALTERNATIVA: Búsqueda y eliminación (Tracker script)
Si quieres que la AI busque y elimine a los jugadores en un rango deseado:
1º Sustituye la siguiente línea de la script
Código: Seleccionar todo
[_grp01, getMarkerPos "marker_4"] call bis_fnc_taskAttack;
Código: Seleccionar todo
[_grp01, 2550] execVM "fn_taskHunt.sqf";
2º Genera un archivo de texto (usar preferiblemente software notepad++) en la carpeta de la misión con nombre "fn_taskHunt.sqf" que contenga la siguiente información:
Código: Seleccionar todo
_fn_findTarget = {
_newDist = _range;
_all = (switchableUnits + playableUnits - entities "HeadlessClient_F");
_all = _all select {side _x != civilian && {side _x != side _group}};
_target = objNull;
{
_distance = (leader _group) distance2d _x;
if (_distance < _newDist && {getpos _x select 2 < 200}) then {_target = _x;_newDist = _distance;};
true
} count _all;
_target
};
_fn_flare = {
_shootflare = "F_20mm_Red" createvehicle ((leader _group) ModelToWorld [0,0,200]);
_shootflare setVelocity [0,0,-10];
};
_fn_suppress = {
{
_x doSuppressiveFire ((getposASL _target) vectorAdd [random 2,random 2,0.5 + random 3]);
true
} count units _group;
};
params ["_group",["_range",500],["_cycle",60 + random 30]];
if (!local _group) exitWith {};
if (_group isEqualType objNull) then {_group = group _group;};
_group setbehaviour "SAFE";
_group setSpeedMode "LIMITED";
while {{alive _x} count units _group > 0} do {
waitUntil {sleep 1;simulationenabled leader _group};
_combat = behaviour leader _group isEqualTo "COMBAT";
_onFoot = (isNull objectParent (leader _group));
_target = call _fn_findTarget;
if (!isNull _target) then {
_group move (_target getPos [random 100,random 360]);
_group setFormDir (leader _group getDir _target);
_group setSpeedMode "NORMAL";
_group enableGunLights "forceOn";
_group enableIRLasers true;
if (!_combat && {_onFoot} && {random 1 > 0.8}) then {[] call _fn_flare;};
// suppress building BUILDING SUPPRESSION!
if (_combat && {(nearestBuilding _target distance2d _target < 25)}) then {[] call _fn_suppress;};
};
sleep _cycle;
};
__________________________________________________________________________________
Descripción: Esta script es válida para generar un respawn de AI's en una posición determinada que ataquen a los jugadores que entran en el activador en un rango determinado.
Actualiza posicion cada 3 segs de los jugadores que activan el trigger.
Se borran cuando los jugadores se alejan a mas de X mts.
El tamaño del trigger tiene que ser menor a la distancia de abajo. Ejemplo: trigger tamaño 390; distancia abajo 400
Testado Servidor Dedicado
by TURCO_AR
1º Coloca un activador en el mapa con la condición deseada (BLUFOR - Presente por ejemplo) y en el init del activador escribe:
Código: Seleccionar todo
null = [thistrigger,thislist] execvm "respawnAI_Cazadores.sqf";
2º Genera un archivo de texto (preferiblemente usar el software notepad++) en la carpeta de la misión y nombra el archivo del siguiente modo "respawnAI_Cazadores.sqf" y copia la siguiente información:
Código: Seleccionar todo
_PosTrigger = _this select 0;
_objetivos = _this select 1;
_objetivo = _objetivos select 0;
if (isserver) then {
private ["_cazadores", "_Jefecazadores"];
_CuentaEnemigos = {alive _x && side _x == EAST} count allUnits;
if (_CuentaEnemigos < 600) then { //Si hay mas de X cantidad de unidades del bando EAST en el mapa no hace el spawn
_SpawnPos = position _PosTrigger ;
_cazadores = createGroup EAST;
_cazadores = [_SpawnPos, EAST, ["O_G_Soldier_TL_F","O_G_Soldier_F","I_C_Soldier_Para_1_F","I_C_Soldier_Para_4_F","I_C_Soldier_Bandit_4_F"],[],[],[],[],[],260] call BIS_fnc_SpawnGroup;
// Equipamiento enemigo
{if (typeof _x == "I_C_Soldier_Para_4_F") then { //LIDER DE ESCUADRA
_x addPrimaryWeaponItem "acc_flashlight";
_x enablegunlights "forceOn";};
if (typeof _x == "O_G_Soldier_TL_F") then { //FUSILERO
_x addPrimaryWeaponItem "acc_flashlight";
_x enablegunlights "forceOn";};
if (typeof _x == "O_G_Soldier_TL_F"") then { //FUSILERO
_x addPrimaryWeaponItem "acc_flashlight";
_x enablegunlights "forceOn";};
_x setskill 1;
_x setskill ["aimingAccuracy",0.13];
_x setskill ["aimingShake",0.30];
_x setskill ["aimingSpeed",0.20];
_x setskill ["spotDistance",0.40];
_x setskill ["spotTime",0.35];
_x setskill ["courage",1];
_x setskill ["reloadSpeed",0.25];
_x setskill ["commanding",1];
} forEach units _cazadores;
_Jefecazadores = leader _cazadores;
_Jefecazadores move (position _objetivo);
_cazadores setCombatMode "RED";
_cazadores setBehaviour "AWARE";
_cazadores setSpeedMode "FULL";
_cazadores allowFleeing 0;
0 = [_cazadores,_objetivo] spawn { while {true} do {
params ["_cazadores","_objetivo"];
sleep 3;
if ((_objetivo distance (leader _cazadores)) > 400) exitWith { //DISTANCIA: Si el que activo el trigger se aleja mas de x distancia se borran los cazadores
{deleteVehicle _x} forEach units _cazadores; }; }; };
while {true} do {
_Jefecazadores = leader _cazadores;
if ((unitReady _Jefecazadores) && {(alive _Jefecazadores)}) then {
sleep 3;
if (({ alive _x} count (units _cazadores)) != 0) then {
_Jefecazadores = leader _cazadores;
_Jefecazadores move (position _objetivo);
_cazadores setCombatMode "RED";
_cazadores setBehaviour "AWARE";
_cazadores setSpeedMode "FULL";
_cazadores allowFleeing 0;};};};
};
};
EXPLICACIÓN Y VARIABLES.
I_C_Soldier_Para_4_F: La clase (class name) de la unidad que quieres que respawnee. Para saber el class name de una unidad, coloca una unidad deseada en el editor y con el click derecho>herramientas>copiar classname. Puedes colocar tantas AI como desees, pudiendo ser cada una de ellas de distinto class name. Simplemente asegúrate que va entre comillas y separado por comas entre sí (el último no debe llevar coma).
(typeof _x == "I_C_Soldier_Para_4_F": La clase (class name) de la unidad JEFE DE ESCUADRA que quieres que respawnee. Para saber el class name de una unidad, coloca una unidad deseada en el editor y con el click derecho>herramientas>copiar classname.
(typeof _x == "O_G_Soldier_TL_F": La clase (class name) de la unidad ligada al Jefe de Escuadra que quieres que respawnee. Para saber el class name de una unidad, coloca una unidad deseada en el editor y con el click derecho>herramientas>copiar classname.
(_CuentaEnemigos < 600): condición para que las unidades respawneen (cantidad de enemigos).
((_objetivo distance (leader _cazadores)) > 400): Distancia de borrado de las unidades generadas.
sleep 3; : intervalo en segundos de la actualización de la posición de los jugadores.
_x setskill 0.1: es el valor de cada parámetro de habilidad de la IA. Valor numérico de 0 a 1.
if (typeof _x == "O_G_Soldier_TL_F") then {
_x addPrimaryWeaponItem "acc_flashlight";
_x enablegunlights "forceOn";};:
Comandos que afectaran a la unidad del class name generada. Se puede añadir cualquier otro comando, como por ejemplo retirar la ropa y añadir una vestimenta concreta, arma, accesorio, munición etc...
En este ejemplo, se retira todo el uniforme y armas que vienen por defecto para esa unidad (con su class name) y se añade uniforme, chaleco, mochila, accesorios, inventario, armas y accesorios de arma que el editor desee (se puede saber el class name de cualquier objeto desde el arsenal virtual del ace).
Este ejemplo es para vestir unidades enemigas con uniformes aleatorios de contaminación, mochila de buceo, inventario determinado y un arma concreta:
Código: Seleccionar todo
{if (typeof _x == "O_G_Soldier_TL_F") then { //LIDER DE ESCUADRA
removeAllWeapons _x;
removeUniform _x;
sleep 0.1;
_x addVest "V_TacVestIR_blk";
_x addBackPack "B_SCBA_01_F";
_x addGoggles "G_AirPurifyingRespirator_01_F";
_x addUniform Selectrandom ["U_C_CBRN_Suit_01_White_F","U_C_CBRN_Suit_01_Blue_F","U_I_E_CBRN_Suit_01_EAF_F","U_O_R_Gorka_01_F","U_O_R_Gorka_01_brown_F"];
_x addItemToUniform "ChemicalDetector_01_watch_F";
for "_i" from 1 to 4 do {_x addItemToVest "30Rnd_45ACP_Mag_SMG_01_Tracer_Red";};
for "_i" from 1 to 5 do {_x addItemToVest "ACE_M84";};
_x linkItem "ItemRadio";
_x addHeadgear SelectRandom ["H_PASGT_basic_white_F","H_PASGT_basic_blue_F","H_PASGT_basic_olive_F","H_PASGT_basic_black_F"];
_x addWeapon "SMG_01_F";
_x addPrimaryWeaponItem "ACE_muzzle_mzls_smg_01";
_x addPrimaryWeaponItem "30Rnd_45ACP_Mag_SMG_01_Tracer_Red";
_x addPrimaryWeaponItem "optic_ACO_grn";
_x addPrimaryWeaponItem "acc_flashlight_smg_01";
_x enablegunlights "forceOn";};
- BBTheHeartPainkiller
- Visitante
- Mensajes: 701
- Registrado: 30 May 2021, 00:13
Re: Respawn de IAs
Muchas gracias chicos. Me pondré a hacer pruebas con esto para intentar ponerlo en la siguiente misión oficial
En las sabias palabras de The Chieftain:
- BBTheHeartPainkiller
- Visitante
- Mensajes: 701
- Registrado: 30 May 2021, 00:13
Re: Respawn de IAs
Da igual como lo ponga en el sqf, siempre me da este error el intentar ejecutar el trigger:
'...ariable "condicion1":
if(isserver) then(#1
while condicion1 do (
grpo1Marker - (...
Error Missing ]
File C:\Users\borja\Documents\Arma 3 - other
Profiles\BBTheHeartPainkiller\missions\ Breach and Clear.Shapur BAF\respawnAI
sqr... line )
'...ariable "condicion1":
if(isserver) then(#1
while condicion1 do (
grpo1Marker - (...
Error Missing ]
File C:\Users\borja\Documents\Arma 3 - other
Profiles\BBTheHeartPainkiller\missions\ Breach and Clear.Shapur BAF\respawnAI
sqr... line )
En las sabias palabras de The Chieftain:
Re: Respawn de IAs
Has hecho algún paso mal, o has modificado la sintaxis de lo que te he pasado. El error te está diciendo básicamente que no está bien escrito.
- BBTheHeartPainkiller
- Visitante
- Mensajes: 701
- Registrado: 30 May 2021, 00:13
Re: Respawn de IAs
Pues no sé que puedo haber puesto mal porque he intentado prácticamente copiar las instrucciones antes de empezar a probar que podía toquetear, pero me daba ese error desde el principio.
He hecho literal estos pasos para asegurarme que no me saltaba nada:
- Abrir una nueva misión y poner un soldado BLUEFOR y un trigger con la línea que ejecuta el sqf.
- Ir a la carpeta de la misión y crear el sqf copiando el código de arriba (sin editar nada)
- Volver al editor y poner los 4 marcadores necesarios.
He seguido los pasos y aún así no me ha salido ninguna vez, ¿igual estoy interpretando algún paso mal?
He hecho literal estos pasos para asegurarme que no me saltaba nada:
- Abrir una nueva misión y poner un soldado BLUEFOR y un trigger con la línea que ejecuta el sqf.
- Ir a la carpeta de la misión y crear el sqf copiando el código de arriba (sin editar nada)
- Volver al editor y poner los 4 marcadores necesarios.
He seguido los pasos y aún así no me ha salido ninguna vez, ¿igual estoy interpretando algún paso mal?
En las sabias palabras de The Chieftain:
Re: Respawn de IAs
Esa línea horizontal es un error. Comprueba que esa línea esta escrita así:
Código: Seleccionar todo
grpo1Marker = Selectrandom ["marker_1", "marker_2", "marker_3"];
Esto deben ser nombres de variables de los marcadores en la misión.
- BBTheHeartPainkiller
- Visitante
- Mensajes: 701
- Registrado: 30 May 2021, 00:13
Re: Respawn de IAs
Buscar en el log del editor he podido encontrar mas exacto que error me da cuando intento poner en marcha el script de respawn
Código: Seleccionar todo
22:10:16 Error in expression <ariable "condicion1";
if(isServer) then{
while {condicion1 do {
_grp01Marker = S>
22:10:16 Error position: <
while {condicion1 do {
_grp01Marker = S>
22:10:16 Error Missing }
22:10:16 File C:\Users\borja\Documents\Arma 3 - Other Profiles\BBTheHeartPainkiller\missions\Breach%20and%20Clear.Shapur_BAF\respawnAI.sqf..., line 3
En las sabias palabras de The Chieftain:
Re: Respawn de IAs
Estuve revisando el script y le falta cerrar una llave y un punto y coma al final.
Agrega una }; y listo.
Saludos.
Agrega una }; y listo.
Saludos.
Todos los días hay que preguntarse:
Soy un buen compañero? Pienso en mis compañeros y mi Grupo?
Si la respuesta es SI, frente en alto, orgulloso y a seguir igual.
Si la respuesta es NO....tranquilo, que acá no pasa nada.
Soy un buen compañero? Pienso en mis compañeros y mi Grupo?
Si la respuesta es SI, frente en alto, orgulloso y a seguir igual.
Si la respuesta es NO....tranquilo, que acá no pasa nada.