danny96 80 Posted July 6, 2015 Hello! I was always wondering how is it possible to make enemy car(s) chasing player car and make them leave the car and shoot at player when they get close enough? Also when the player escape from enemies, they will again enter the car and start chasing again. Is it even somehow possible? Share this post Link to post Share on other sites
Grumpy Old Man 3546 Posted July 6, 2015 Well it is possible, but even thinking of doing anything involving AI and driving is a pain even if it should be only slightly reliable. Share this post Link to post Share on other sites
PuFu 4600 Posted July 6, 2015 Nope. ?? fo course it is, just needs some scripting Share this post Link to post Share on other sites
fn_Quiksilver 1636 Posted July 6, 2015 (edited) ??fo course it is, just needs some scripting I'll believe it when I see it :) If you have a YouTube clip of what the OP is describing, I'll change my tune! EDIT: Here is some weight for my side of the argument: nJ_Z02mhK7s Edited July 7, 2015 by MDCCLXXVI Share this post Link to post Share on other sites
bangabob 45 Posted July 7, 2015 This is extracted from my mission. It will need adjusting to work in your mission but it basically creates a group of units and a vehicle near the player and gives them a waypoint. If the player gets too far away then the units, the script deletes the units and the script will reset. if (!hitsquad) then { private ["_pos","_needDriver","_DRIVER","_side","_callingHitmen"]; _uniformPool=["U_IG_Guerilla1_1","U_IG_Guerilla2_1","U_IG_Guerilla2_2","U_IG_Guerilla2_3","U_IG_Guerilla3_1","U_IG_Guerilla3_2"]; _vestPool=["V_TacVest_blk_POLICE","V_TacVestIR_blk","V_BandollierB_rgr"]; _weaponPool = ["arifle_Katiba_ACO_F","arifle_Mk20_ACO_F","arifle_MX_ACO_F","arifle_MXC_ACO_F","arifle_TRG20_ACO_F","SMG_01_ACO_F","srifle_DMR_01_ACO_F"]; _roadlist = getpos player nearRoads 500; _number=(count _roadlist) -1; _spawnPos=_roadlist select _number; _debug=false; hitsquad=true; if (music) then { _tempmusic=hitsquadMSC select (floor(random(count hitsquadMSC))); playMusic [_tempmusic,0]; 0 fadeMusic 0; 3 fadeMusic 1; }; if (_debug) then { deletemarker "hitquadMkr"; hitquadMkr=createMarker ["hitquadMkr",_spawnPos]; hitquadMkr setMarkerShape "ICON"; hitquadMkr setMarkerType "hd_dot"; hitquadMkr setMarkercolor "colorRed"; hitquadMkr setmarkerAlpha 0.5; hitquadMkr setMarkerText "hitquadMkr"; }; _grp= creategroup EAST; _driverGrp = creategroup EAST; _veh = createVehicle ["B_G_Offroad_01_armed_F", _spawnPos, [], 0, "NONE"]; _roadConnectedTo = roadsConnectedTo _spawnPos; _connectedRoad = _roadConnectedTo select 0; _direction = [_spawnPos, _connectedRoad] call BIS_fnc_DirTo; _veh setdir _direction; _positions = _veh emptyPositions "cargo"; _needDriver=true; for "_i" from 1 to (_positions) do { if (_needDriver) then { _needDriver=false; _DRIVER = _driverGrp createUnit ["O_Soldier_F", getpos _veh, [], 0, "NONE"]; _DRIVER assignasdriver _veh; _DRIVER moveindriver _veh; }else{ _unit = _grp createUnit ["O_Soldier_F", getpos _veh, [], 0, "NONE"]; _unit assignAsCargo _veh; _unit moveInCargo _veh; }; }; { _tempUniform=_uniformPool select (floor(random(count _uniformPool))); _tempVest=_vestPool select (floor(random(count _vestPool))); _weapon=_weaponPool select (floor(random(count _weaponPool))); _unit=_x; removeHeadgear _unit: removeGoggles _unit; removeVest _unit; removeBackpack _unit; removeUniform _unit; removeAllWeapons _unit: removeAllAssignedItems _unit; _unit addweapon _weapon; _unit addUniform _tempUniform; _unit addvest _tempVest; _magazines = getArray (configFile / "CfgWeapons" / _weapon / "magazines"); _magazineClass = _magazines select 0; {_unit removeMagazine _x} forEach magazines _unit; for "_i" from 1 to 10 do {_unit addMagazine _magazineClass;}; _unit setrank "CORPORAL"; _unit setSkill ["aimingspeed", 0.1]; _unit setSkill ["spotdistance", 0.1]; _unit setSkill ["aimingaccuracy", 0.1]; _unit setSkill ["aimingshake", 0.05]; _unit setSkill ["spottime", 0.3]; _unit setSkill ["spotdistance", 0.4]; null = [_unit] execVM "addaction.sqf"; _EHkilledIdx = _unit addEventHandler ["killed", {_this call hitManKilledFNC}]; }foreach units _grp + units _driverGrp; _driverGrp setBehaviour "COMBAT"; _driverGrp setSpeedMode "Normal"; _pos = [(getpos player select 0)-50*sin(random 359),(getPos player select 1)-50*cos(random 359)]; _wp = _driverGrp addWaypoint [_pos, 0,1]; _wp setWaypointType "MOVE"; _oldGrp=group player; [player] joinSilent createGroup INDEPENDENT; _side=side player; deleteGroup _oldGrp; _callingHitmen=false; while {{alive _x} count units _grp > 0} do { if (_pos distance player > 50) then {_pos = [(getpos player select 0)-100*sin(random 359),(getPos player select 1)-100*cos(random 359)];}; _leader=leader _grp; _side=side player; if (str _side == "EAST") exitwith {}; if (vehicle _leader != _leader) then { if (_veh distance _pos < 60) then { if (_debug) then{ hint "within area. Unloading";}; dostop _driver; _veh setfuel 0; _grp leaveVehicle _veh; waituntil {{alive _x} count (crew _veh) <= 1}; _pos = [(getpos player select 0)-20*sin(random 359),(getPos player select 1)-20*cos(random 359)]; }else{ if (_debug) then{ hint "Approaching area";}; _veh setdamage 0; _veh setfuel 1; _wp = _driverGrp addWaypoint [_pos, 0,1]; _driverGrp setCurrentWaypoint [_driverGrp, 1]; [_driverGrp, 1] setWPPos _pos; }; }; if (vehicle _leader == _leader) then { if (_leader distance _pos > 150) then { if (_debug) then{hint "Returning to vehicle";}; IF (!ALIVE _Driver) then {_needDriver=true;}; { if (_needDriver) then { _needDriver=false; _x assignasdriver _veh; _x moveindriver _veh; }else{ _x assignAsCargo _veh; _x moveInCargo _veh; }; }foreach units _grp; }else{ if (_debug) then{hint "Unloaded. Approaching target";}; _wp = _grp addWaypoint [_pos, 0,0]; _grp setCurrentWaypoint [_grp, 0]; [_grp, 0] setWaypointType "SAD"; }; }; if (_leader distance player > 750) exitwith { if (random 4 > 2) exitwith { _callingHitmen=true; if (_debug) then{hint "Calling more hitmen";}; null=[] execVM "hitsquad.sqf"; }; }; sleep 5; }; hitsquad=false; if (music and !_callingHitmen) then { _tempmusic=ThemeMSC select (floor(random(count ThemeMSC))); 5 fadeMusic 0; playMusic _tempmusic; 0 fadeMusic 0; 3 fadeMusic 1; }; if ({isPlayer _veh} count (crew _veh) == 0) then { {deleteVehicle _x} forEach (crew _veh); deleteVehicle _veh; }; { deleteVehicle _x } forEach units _grp + units _driverGrp; deletegroup _grp; deletegroup _driverGrp; if (STR _side == "GUER" OR STR _side == "ENEMY") then { _oldGrp=group player; [player] joinSilent createGroup CIVILIAN; deleteGroup _oldGrp; }; }else{}; Share this post Link to post Share on other sites
MrCopyright 107 Posted July 13, 2015 I'll believe it when I see it :)If you have a YouTube clip of what the OP is describing, I'll change my tune! EDIT: Here is some weight for my side of the argument: nJ_Z02mhK7s Perhaps the AI is extremely realistic and represents most Arma drivers? 1 Share this post Link to post Share on other sites
inlesco 233 Posted July 13, 2015 I'll believe it when I see it :)If you have a YouTube clip of what the OP is describing, I'll change my tune! EDIT: Here is some weight for my side of the argument: Some VCOM AI driving mod tried to fix it, but unsuccessfully, unfortunately. Share this post Link to post Share on other sites
whiztler 137 Posted July 15, 2015 Had a giggle when I watched the vid. Also makes me wonder why the AI decided to turn left. The vid is from Feb 2015, any improvement since? Share this post Link to post Share on other sites
buliwyf 4 Posted July 17, 2015 There are no improvements since this game was released... Share this post Link to post Share on other sites
fn_Quiksilver 1636 Posted July 17, 2015 For what its worth, that particular intersection appears to be mostly resolved. 1.48 18/07/2015 NpfTY9S9nb0 Share this post Link to post Share on other sites
Naiss 28 Posted July 18, 2015 this can be done (should not be to hard) but the AI driving is abit weird well i just hate to code for AI's :P Share this post Link to post Share on other sites