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};
};