script respawn con persigue y en posiciones aleatorias
Publicado: 11 Jun 2017, 20:04
Queremos crear grupos de unidades enemigas poco a poco durante la partida en posiciones aleatorias de nuestro escenario , posiciones que sabemos que los jugadores no transitarán,
este script generará grupos que se respanearán en posiciones aleatorias y acosarán a una patrulla de jugadores elegida de forma aleatoria.
Efecto de estos scripts: Acoso constante a lo jugadores, se meterán en los edificios, los buscarán donde sea, se aproximarán todo lo posible, los perseguirán, sensación de acoso. Hace difícil la misión.
Ventaja fundamental: Las IAs son obligadas a combatir con los jugadores, se van creando poco a poco y por tanto tenemos fps altos.
Se puede combinar algunos grupos con este tipo de respawn y con ias en mapa o otro tipo de respaneo.
Para ello necesitamos nombrar los grupos de los jugadores y definir las posiciones aleatorias donde queremos que se respaneen los grupos de enemigos perseguidores.
1. necesario tener una activador bando enemigo que cubra toda la zona del conflicto llamado/triggerEnemigos
2. todas las patrullas de los jugadores ponerlas un nombre y meter cada nombre en la instruccion del script _bestShooter =[GRPALPHA,GRPBRAVO,GRPCHARLIE,GRPDELTA,GRPFOXTROT,GRPECHO,GRPMANDO1,GRPMANDO2,GRPfrancos,grpmedicos] call BIS_fnc_selectRandom;
3. en la instruccion _bestplace = [respawnenemigosIsla4,respawnenemigosIsla3,respawnenemigosIsla2,respawnenemigosIsla1] call BIS_fnc_selectRandom; introducir nombres de las lógicas donde quieran que se respaneen los grupos. se elegira uno aleatorio
se necesitan dos scripts además
respaneocontinuoPersigue.sqf
persigue.sqf
este script generará grupos que se respanearán en posiciones aleatorias y acosarán a una patrulla de jugadores elegida de forma aleatoria.
Efecto de estos scripts: Acoso constante a lo jugadores, se meterán en los edificios, los buscarán donde sea, se aproximarán todo lo posible, los perseguirán, sensación de acoso. Hace difícil la misión.
Ventaja fundamental: Las IAs son obligadas a combatir con los jugadores, se van creando poco a poco y por tanto tenemos fps altos.
Se puede combinar algunos grupos con este tipo de respawn y con ias en mapa o otro tipo de respaneo.
Para ello necesitamos nombrar los grupos de los jugadores y definir las posiciones aleatorias donde queremos que se respaneen los grupos de enemigos perseguidores.
1. necesario tener una activador bando enemigo que cubra toda la zona del conflicto llamado/triggerEnemigos
2. todas las patrullas de los jugadores ponerlas un nombre y meter cada nombre en la instruccion del script _bestShooter =[GRPALPHA,GRPBRAVO,GRPCHARLIE,GRPDELTA,GRPFOXTROT,GRPECHO,GRPMANDO1,GRPMANDO2,GRPfrancos,grpmedicos] call BIS_fnc_selectRandom;
3. en la instruccion _bestplace = [respawnenemigosIsla4,respawnenemigosIsla3,respawnenemigosIsla2,respawnenemigosIsla1] call BIS_fnc_selectRandom; introducir nombres de las lógicas donde quieran que se respaneen los grupos. se elegira uno aleatorio
se necesitan dos scripts además
respaneocontinuoPersigue.sqf
Código: Seleccionar todo
// necesario tener una activador bando enemigo que cubra toda la zona del conflicto llamado //triggerEnemigos
// todas las patrullas de los jugadores ponerlas un nombre y meter cada nombre en la //instruccion del script _bestShooter =[GRPALPHA,GRPBRAVO,GRPCHARLIE,GRPDELTA,GRPFOXTROT,GRPECHO,GRPMANDO1,GRPMANDO2,GRPfrancos,grpm//edicos] call BIS_fnc_selectRandom;
// en la instruccion _bestplace = [respawnenemigosIsla4,respawnenemigosIsla3,respawnenemigosIsla2,respawnenemigosIsla1] call //BIS_fnc_selectRandom; introducir nombres de las logicas donde quieran que se respaneen los //grupos. se elegira uno aleatorio
//
private["_numEnemigos","_text ","_i","_bestShooter","_paramEnemigos","_paramNumPatrullas","_tiempoEntrePatrulla"];
_paramEnemigos=130;// el activador triggerEnemigos leera el numero de IAS enemigas y sera una condicion para que se sigan creando o no.
_paramNumPatrullas=6;// numero de patrullas maximo que se crearan poco a poco
_tiempoEntrePatrulla=300; // cada 5 minutos
_numEnemigos= count list triggerenemigos;
_i=0;
while {_numEnemigos<_paramEnemigos && _i< _paramNumPatrullas } do
{
_i=_i+1;
_text = formatText ["grpmalo12%1",_i];
_bestplace = [respawnenemigosIsla4,respawnenemigosIsla3,respawnenemigosIsla2,respawnenemigosIsla1] call BIS_fnc_selectRandom;
_text= [position _bestplace, EAST, unidadesE1] call BIS_fnc_spawnGroup ;
{
_x setskill 1;
_x setskill ["general",1];
_x setskill ["Endurance",1];
_x setskill ["aimingAccuracy",0.30];
_x setskill ["aimingShake",1];
_x setskill ["aimingSpeed",1];
_x setskill ["endurance",1];
_x setskill ["spotDistance",1];
_x setskill ["spotTime",1];
_x setskill ["courage",1];
_x setskill ["reloadSpeed",1];
_x setskill ["commanding",1];
_x addmagazine "HandGrenade";
_x addmagazine "HandGrenade";
_x setSpeedMode "full";
_x addmagazine "SmokeShell";
_x addmagazine "SmokeShell";
} foreach units _text;
sleep 20;
_text setCombatMode "RED";
_text setSpeedMode "FULL";
_bestShooter = [GRPALPHA] call BIS_fnc_selectRandom;
nullvar=[_text,_bestShooter,1,60] execvm "persigue.sqf";
sleep _tiempoEntrePatrulla;
};
persigue.sqf
Código: Seleccionar todo
/*
persigue.sqf v1.2 2010/9/30 - Boreas
Sencillo script que sirve para que una unidad persiga a otra. Para usarlo invocar la siguiente instruccion:
nullvar=[unidadPerseguidora,unidadPerseguida] execVm "persigue.sqf";
Se le pueden pasar mas parametros para acotar mas el modo de persecución:
nullvar=[unidadPerseguidora,unidadPerseguida,radio,tiempo] execVm "persigue.sqf";
Los parametros signigican lo siguiente:
-unidadPerseguidora: La IA que persigue
-unidadPerseguida: La IA o el player que va aser perseguido
-radio: radio alrededor de la unidad perseguida en el que la IA persegidora intetnara moverse buscando.(25m por defecto)
-timpo: tiempo en segundos en que la IA perseguidora actualiza su movimiento para dirigirse a la nueva aera de busqueda(60s por defecto)
Ejemplo1:
nullvar=[cazador,presa] execvm "persigue.sqf";
Ejemplo2:
nullvar=[cazador,presa,40,30] execvm "persigue.sqf";
//40 son los metros de radio alrededor de la presa donde el cazador se movera
//30 es el intervalo de tiempo que el cazador utiliza para dirigirse a la nueva zona de busqueda de la presa
*/
private ["_radio","_timeout","_grpPersigue","_grpPerseguido","_seguir","_ldrpersigue","_ldrperseguido","_offx","_offy","_time2","_persigue","_perseguido","_diametro"];
_persigue = _this select 0;
_perseguido = _this select 1;
_radio= _this select 3;
_timeout= _this select 4;
if (count (_this) >=3 ) then {
_radio = _this select 2;
};
if (count (_this) >=4 ) then {
_timeout=_this select 3;
};
_diametro = _radio + _radio; //necesitamos el diametro=radio x 2
_seguir=true;
_grpPersigue="a";
_grpPerseguido="a";
if((typeName _persigue)=="GROUP")then{
_grpPersigue = _persigue;
} else {
_grpPersigue = group _persigue;
};
//player sidechat "(typeName _perseguido) "+str((typeName _perseguido));
if((typeName _perseguido)=="GROUP")then{
_grpPerseguido = _perseguido;
//player sidechat "R0";
} else {
//player sidechat "R1";
_grpPerseguido = group _perseguido;
//player sidechat "R2";
};
while {_seguir} do{
_ldrpersigue = leader _grpPersigue;
_enemigosoldier = _ldrpersigue findNearestEnemy (position _ldrpersigue);
_dist=_enemigosoldier distance _ldrpersigue;
if (_dist<200) then { _ldrpersigue setBehaviour "COMBAT"; } else
{ _ldrpersigue setBehaviour "AWARE"; };
_ldrpersigue setCombatMode "RED";
_ldrperseguido = leader _grpPerseguido;
//player sidechat "count units _grpPersigue" +str(count units _grpPersigue);
//player sidechat "count units _grpPerseguido" +str(count units _grpPerseguido);
if((count units _grpPersigue)==0)then{
_seguir=false;
};
if ((count units _grpPerseguido)==0) then {
_grpPerseguido = [GRPALPHA,GRPBRAVO,GRPCHARLIE,GRPECHO,GRPMANDO1,GRPfrancos,grpmedicos] call BIS_fnc_selectRandom;
};
_offx = (_radio) - random _diametro;
_offy = (_radio) - random _diametro;
_ldrpersigue move (_ldrperseguido modelToWorld [_offx,_offy,0]);
_ldrpersigue setSpeedMode "FULL";
_ldrpersigue setBehaviour "RED";
sleep 1;
_time2 = time + _timeout;
waitUntil {sleep 0.5;moveToCompleted _ldrpersigue or moveToFailed _ldrpersigue or !alive _ldrpersigue or _time2 < time};
};