Jump to content
Sign in to follow this  
Kolmain

Guerilla Module

Recommended Posts

Im attempting to code a guerilla module; ie the ability to hide and disguise yourself as a civilian when youre safe. Heres my theory, first a simple check, if the player has a weapon, setCaptive false, no weapon, setCaptive true. Ive got this and it works, but clearly i dont want you to drop your weapon mid combat and just run and not get shot- unrealistic. So if you raid a checkpoint and kill the opfor, then wait X seconds while there are no opfor present within a 150M radius then it resets, given youre not carrying a weapon. So with this theres some issues, im planning to use setVariable on the player to determine if theres opfor around the player but how do I create a trigger and attach it to the player that checks for BLUFOR AND REDFOR? The player is independent :)

Basic idea, complex scenario. Also some side questions that can help me get started tomorrow; if i run this:

While {alive player} do {
//code here
};

and the player dies/respawns, will it run once they respawn again?

Also, what about KnowsAbout? Can that help here? How do I determine who to check knowsAbout for?

Thanks!

Share this post


Link to post
Share on other sites

Hi,

I have a little script I used to simulate such undercoveractions:

It does:

- set you to captive

- removes captive as long as you carry a primaryweapon

- If you shoot inside the radius it removes setcaptive and sends the nearest unit looking for the position where shoot was fired.

- removes captive when you stay a certain time near an enemy

- It will reset you to captive when:

- Your distance to the nearestunit of side is greater then _getaway

- The knowsabout of the nearestunit of side is lesser than 1.4

You call it with:

nul = [playername,

radius(distance the script searches for units),

getaway (distance for a reset when you are found),

side ( which side is considered enemy)

] execvm "under.sqf";

undercover = true;

_bomber = _this select 0;

_radius = _this select 1;

_getaway = _this select 2;

_side = _this select 3;

_bomber addEventHandler ["Fired", {shooting = true;}];

sleep 1;

while {(alive _bomber) AND undercover} do {

shooting = false;

_bomber setCaptive true;

gotya = false;

sleep 2;

while {primaryWeapon _bomber != ""} do {

_bomber setCaptive false;

hintSilent "You carry a weapon!";

sleep 3;

};

_nearestunits = nearestObjects [_bomber,["Man","Car","Tank"],_radius];

_nearestunitofside = [];

if(_side countSide _nearestunits > 0) then{

{

_unit = _x;

if(side _unit == _side) then{_nearestunitofside = _nearestunitofside + [_unit]};

} foreach _nearestunits;

if (shooting AND (count _nearestunitofside != 0) AND ((_nearestunitofside select 0) distance _bomber < _getaway - 50) ) then {

gotya = true;

hint "Someone must have heard the shot";

sleep 4;

_bomber setCaptive false;

(_nearestunitofside select 0) domove position _bomber;

};

if((_nearestunitofside select 0) distance _bomber < 20) then {

sleep 4;

if((_nearestunitofside select 0) distance _bomber < 20 ) then {

_random = floor(random 3);

_alertmessage = ["Watch Out!", "Keep Distance!", "Someone´s watching us", "They notice you!"] select _random;

call compile format ["hint '%1';", _alertmessage];

sleep 8;

if((_nearestunitofside select 0) distance _bomber < 14 ) then {

gotya = true;

_bomber setCaptive false;

hint "THEY HAVE FOUND YOU";

sleep 4;

(_nearestunitofside select 0) glanceAt _bomber;

(_nearestunitofside select 0) reveal _bomber;

sleep 7;

};

};

};

};

while {gotya} do {

_nearestunits = nearestObjects [_bomber,["Man","Car","Tank"],_radius];

_nearestunitofside = [];

if(_side countSide _nearestunits > 0) then{

{

_unit = _x;

if(side _unit == _side) then{_nearestunitofside = _nearestunitofside + [_unit]};

} foreach _nearestunits;

hintSilent "Get Away";

sleep 4;

//Hint Format ["closest unit is %1",_nearestunitofside select 0];

if(((_nearestunitofside select 0) distance _bomber > _getaway) OR ((_nearestunitofside select 0) knowsAbout _bomber < 1.4) OR (count _nearestunitofside == 0)) then { hint "You should be safe now"; gotya = false; shooting = false; };

};

};

}; // While alive and undercover

And I also made an script you can execute for units in your group to give them the same status:

I use it in the initfield of the unit with: nul = [unitname] execVM "undercoverbuddy.sqf";

private ["_member"];

_member = _this select 0;

waitUntil {undercover};

while {undercover} do {

_member setCaptive true;

removeAllWeapons _member;

_member disableAI "AUTOTARGET";

_member disableAI "TARGET";

_member setBehaviour "CARELESS";

waitUntil {shooting OR gotya};

_member enableAI "AUTOTARGET";

_member enableAI "TARGET";

_member setBehaviour "AWARE";

_member setCaptive false;

_member addMagazine "8Rnd_9x18_Makarov";

_member addMagazine "8Rnd_9x18_Makarov";

_member addMagazine "8Rnd_9x18_Makarov";

_member addMagazine "8Rnd_9x18_Makarov";

_member addMagazine "8Rnd_9x18_Makarov";

_member addWeapon "Makarov";

waitUntil {!gotya};

};

_member enableAI "AUTOTARGET";

_member enableAI "TARGET";

_member setBehaviour "AWARE";

_member setCaptive false;

_member addMagazine "8Rnd_9x18_Makarov";

_member addMagazine "8Rnd_9x18_Makarov";

_member addMagazine "8Rnd_9x18_Makarov";

_member addMagazine "8Rnd_9x18_Makarov";

_member addMagazine "8Rnd_9x18_Makarov";

_member addWeapon "Makarov";

Maybe some of this helps you. I tested the script with respawn, but I didn´t find a quick solution.

Edited by Melmarkian

Share this post


Link to post
Share on other sites

My issue is that I need the script for MP use and that is a global variable defined, im going to see if i cant tweak it to get it to work ;)

EDIT: nope :(

_bomber[size=2][color=#000000] = [/color][/size][size=2][color=#ff0000][size=2][color=#ff0000]player[/color][/size][/color][/size][size=2][color=#000000];[/color]
[/size][size=2][color=#808080][size=2][color=#808080]_radius[/color][/size][/color][/size][size=2][color=#000000] = 150;[/color]
[/size][size=2][color=#808080][size=2][color=#808080]_getaway[/color][/size][/color][/size][size=2][color=#000000] = 300;[/color]
[/size][size=2][color=#808080][size=2][color=#808080]_side[/color][/size][/color][/size][size=2][color=#000000] = [[/color][/size][size=2][color=#ff0000][size=2][color=#ff0000]WEST[/color][/size][/color][/size][size=2][color=#000000],[/color][/size][size=2][color=#ff0000][size=2][color=#ff0000]EAST[/color][/size][/color][/size][size=2][color=#000000]];[/color]
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2][color=#000000] [/color][/size][size=2][color=#ff0000][size=2][color=#ff0000]addEventHandler[/color][/size][/color][/size][size=2][color=#000000] ["Fired", {[/color][/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2][color=#000000] [/color][/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2][color=#000000] ["shot", [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]true[/color][/size][/color][/size][size=2][color=#000000]];}];[/color]
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2][color=#000000] [/color][/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2][color=#000000] ["shot", [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]false[/color][/size][/color][/size][size=2][color=#000000]];[/color]
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2][color=#000000] [/color][/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2][color=#000000] ["undercover", [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]true[/color][/size][/color][/size][size=2][color=#000000]];[/color]
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2][color=#000000] [/color][/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2][color=#000000] ["caught", [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]false[/color][/size][/color][/size][size=2][color=#000000]];[/color]
[/size][size=2][color=#ff0000][size=2][color=#ff0000]sleep[/color][/size][/color][/size][size=2][color=#000000] 1;[/color]
[/size][size=2][color=#0000ff][size=2][color=#0000ff]while[/color][/size][/color][/size][size=2] {([/size][size=2][color=#ff0000][size=2][color=#ff0000]alive[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2]) [/size][size=2][color=#0000ff][size=2][color=#0000ff]AND[/color][/size][/color][/size][size=2] ([/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]getVariable[/color][/size][/color][/size][size=2] "undercover"} [/size][size=2][color=#0000ff][size=2][color=#0000ff]do[/color][/size][/color][/size][size=2] {
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2] ["shot", [/size][size=2][color=#0000ff][size=2][color=#0000ff]false[/color][/size][/color][/size][size=2]];
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setCaptive[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]true[/color][/size][/color][/size][size=2];
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2] ["caught", [/size][size=2][color=#0000ff][size=2][color=#0000ff]false[/color][/size][/color][/size][size=2]];
[/size][size=2][color=#ff0000][size=2][color=#ff0000]sleep[/color][/size][/color][/size][size=2] 2;
[/size][size=2][color=#0000ff][size=2][color=#0000ff]while[/color][/size][/color][/size][size=2] {[/size][size=2][color=#ff0000][size=2][color=#ff0000]primaryWeapon[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]![/color][/size][/color][/size][size=2]= ""} [/size][size=2][color=#0000ff][size=2][color=#0000ff]do[/color][/size][/color][/size][size=2] {
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setCaptive[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]false[/color][/size][/color][/size][size=2];
[/size][size=2][color=#ff0000][size=2][color=#ff0000]hintSilent[/color][/size][/color][/size][size=2] "You carry a weapon!";
[/size][size=2][color=#ff0000][size=2][color=#ff0000]sleep[/color][/size][/color][/size][size=2] 3;
};
[/size][size=2][color=#808080][size=2][color=#808080]_nearestunits[/color][/size][/color][/size][size=2] = [/size][size=2][color=#ff0000][size=2][color=#ff0000]nearestObjects[/color][/size][/color][/size][size=2] [[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2],["Man","Car","Tank"],[/size][size=2][color=#808080][size=2][color=#808080]_radius[/color][/size][/color][/size][size=2]];
[/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] = [];
[/size][size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2]([/size][size=2][color=#808080][size=2][color=#808080]_side[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]countSide[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_nearestunits[/color][/size][/color][/size][size=2] > 0) [/size][size=2][color=#0000ff][size=2][color=#0000ff]then[/color][/size][/color][/size][size=2]{
{
[/size][size=2][color=#808080][size=2][color=#808080]_unit[/color][/size][/color][/size][size=2] = [/size][size=2][color=#808080][size=2][color=#808080]_x[/color][/size][/color][/size][size=2];
[/size][size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2]([/size][size=2][color=#ff0000][size=2][color=#ff0000]side[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_unit[/color][/size][/color][/size][size=2] == [/size][size=2][color=#808080][size=2][color=#808080]_side[/color][/size][/color][/size][size=2]) [/size][size=2][color=#0000ff][size=2][color=#0000ff]then[/color][/size][/color][/size][size=2]{[/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] = [/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] + [[/size][size=2][color=#808080][size=2][color=#808080]_unit[/color][/size][/color][/size][size=2]]};
} [/size][size=2][color=#0000ff][size=2][color=#0000ff]foreach[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_nearestunits[/color][/size][/color][/size][size=2];
 
[/size][size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2] (([/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]getVariable[/color][/size][/color][/size][size=2] "shot") [/size][size=2][color=#0000ff][size=2][color=#0000ff]AND[/color][/size][/color][/size][size=2] ([/size][size=2][color=#ff0000][size=2][color=#ff0000]count[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]![/color][/size][/color][/size][size=2]= 0) [/size][size=2][color=#0000ff][size=2][color=#0000ff]AND[/color][/size][/color][/size][size=2] (([/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] 0) [/size][size=2][color=#ff0000][size=2][color=#ff0000]distance[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] < [/size][size=2][color=#808080][size=2][color=#808080]_getaway[/color][/size][/color][/size][size=2] - 50) ) [/size][size=2][color=#0000ff][size=2][color=#0000ff]then[/color][/size][/color][/size][size=2] {
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2] ["caught", [/size][size=2][color=#0000ff][size=2][color=#0000ff]true[/color][/size][/color][/size][size=2]];
[/size][size=2][color=#ff0000][size=2][color=#ff0000]hint[/color][/size][/color][/size][size=2] "Someone must have heard the shot!";
[/size][size=2][color=#ff0000][size=2][color=#ff0000]sleep[/color][/size][/color][/size][size=2] 4;
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setCaptive[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]false[/color][/size][/color][/size][size=2];
([/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] 0) [/size][size=2][color=#ff0000][size=2][color=#ff0000]domove[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]position[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2];
};
[/size][size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2](([/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] 0) [/size][size=2][color=#ff0000][size=2][color=#ff0000]distance[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] < 20) [/size][size=2][color=#0000ff][size=2][color=#0000ff]then[/color][/size][/color][/size][size=2] {
[/size][size=2][color=#ff0000][size=2][color=#ff0000]sleep[/color][/size][/color][/size][size=2] 4;
[/size][size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2](([/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] 0) [/size][size=2][color=#ff0000][size=2][color=#ff0000]distance[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] < 20 ) [/size][size=2][color=#0000ff][size=2][color=#0000ff]then[/color][/size][/color][/size][size=2] {
[/size][size=2][color=#808080][size=2][color=#808080]_random[/color][/size][/color][/size][size=2] = [/size][size=2][color=#ff0000][size=2][color=#ff0000]floor[/color][/size][/color][/size][size=2]([/size][size=2][color=#ff0000][size=2][color=#ff0000]random[/color][/size][/color][/size][size=2] 3);
[/size][size=2][color=#808080][size=2][color=#808080]_alertmessage[/color][/size][/color][/size][size=2] = ["Watch Out!", "Keep Distance!", "Someone´s watching us", "They notice you!"] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_random[/color][/size][/color][/size][size=2];
[/size][size=2][color=#ff0000][size=2][color=#ff0000]call[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]compile[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]format[/color][/size][/color][/size][size=2] ["hint '[/size][size=2][color=#0000ff][size=2][color=#0000ff]%[/color][/size][/color][/size][size=2]1';", [/size][size=2][color=#808080][size=2][color=#808080]_alertmessage[/color][/size][/color][/size][size=2]];
[/size][size=2][color=#ff0000][size=2][color=#ff0000]sleep[/color][/size][/color][/size][size=2] 8;
[/size][size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2](([/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] 0) [/size][size=2][color=#ff0000][size=2][color=#ff0000]distance[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] < 14 ) [/size][size=2][color=#0000ff][size=2][color=#0000ff]then[/color][/size][/color][/size][size=2] {
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2] ["caught", [/size][size=2][color=#0000ff][size=2][color=#0000ff]true[/color][/size][/color][/size][size=2]];
[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setCaptive[/color][/size][/color][/size][size=2] [/size][size=2][color=#0000ff][size=2][color=#0000ff]false[/color][/size][/color][/size][size=2];
[/size][size=2][color=#ff0000][size=2][color=#ff0000]hint[/color][/size][/color][/size][size=2] "THEY HAVE FOUND YOU";
[/size][size=2][color=#ff0000][size=2][color=#ff0000]sleep[/color][/size][/color][/size][size=2] 4;
([/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] 0) [/size][size=2][color=#ff0000][size=2][color=#ff0000]glanceAt[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2];
([/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] 0) [/size][size=2][color=#ff0000][size=2][color=#ff0000]reveal[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2];
[/size][size=2][color=#ff0000][size=2][color=#ff0000]sleep[/color][/size][/color][/size][size=2] 7;
};
};
};
};
[/size][size=2][color=#0000ff][size=2][color=#0000ff]while[/color][/size][/color][/size][size=2] {([/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]getVariable[/color][/size][/color][/size][size=2] "undercover")} [/size][size=2][color=#0000ff][size=2][color=#0000ff]do[/color][/size][/color][/size][size=2] {
[/size][size=2][color=#808080][size=2][color=#808080]_nearestunits[/color][/size][/color][/size][size=2] = [/size][size=2][color=#ff0000][size=2][color=#ff0000]nearestObjects[/color][/size][/color][/size][size=2] [[/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2],["Man","Car","Tank"],[/size][size=2][color=#808080][size=2][color=#808080]_radius[/color][/size][/color][/size][size=2]];
[/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] = [];
[/size][size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2]([/size][size=2][color=#808080][size=2][color=#808080]_side[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]countSide[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_nearestunits[/color][/size][/color][/size][size=2] > 0) [/size][size=2][color=#0000ff][size=2][color=#0000ff]then[/color][/size][/color][/size][size=2]{
{
[/size][size=2][color=#808080][size=2][color=#808080]_unit[/color][/size][/color][/size][size=2] = [/size][size=2][color=#808080][size=2][color=#808080]_x[/color][/size][/color][/size][size=2];
[/size][size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2]([/size][size=2][color=#ff0000][size=2][color=#ff0000]side[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_unit[/color][/size][/color][/size][size=2] == [/size][size=2][color=#808080][size=2][color=#808080]_side[/color][/size][/color][/size][size=2]) [/size][size=2][color=#0000ff][size=2][color=#0000ff]then[/color][/size][/color][/size][size=2]{[/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] = [/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] + [[/size][size=2][color=#808080][size=2][color=#808080]_unit[/color][/size][/color][/size][size=2]]};
} [/size][size=2][color=#0000ff][size=2][color=#0000ff]foreach[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_nearestunits[/color][/size][/color][/size][size=2];
[/size][size=2][color=#ff0000][size=2][color=#ff0000]hintSilent[/color][/size][/color][/size][size=2] "Get Away";
[/size][size=2][color=#ff0000][size=2][color=#ff0000]sleep[/color][/size][/color][/size][size=2] 4;
[/size][size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2]((([/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] 0) [/size][size=2][color=#ff0000][size=2][color=#ff0000]distance[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] > [/size][size=2][color=#808080][size=2][color=#808080]_getaway[/color][/size][/color][/size][size=2]) [/size][size=2][color=#0000ff][size=2][color=#0000ff]OR[/color][/size][/color][/size][size=2] (([/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]select[/color][/size][/color][/size][size=2] 0) [/size][size=2][color=#ff0000][size=2][color=#ff0000]knowsAbout[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] < 1.4) [/size][size=2][color=#0000ff][size=2][color=#0000ff]OR[/color][/size][/color][/size][size=2] ([/size][size=2][color=#ff0000][size=2][color=#ff0000]count[/color][/size][/color][/size][size=2] [/size][size=2][color=#808080][size=2][color=#808080]_nearestunitofside[/color][/size][/color][/size][size=2] == 0)) [/size][size=2][color=#0000ff][size=2][color=#0000ff]then[/color][/size][/color][/size][size=2] { [/size][size=2][color=#ff0000][size=2][color=#ff0000]hint[/color][/size][/color][/size][size=2] "You should be safe now"; [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2] ["caught", [/size][size=2][color=#0000ff][size=2][color=#0000ff]false[/color][/size][/color][/size][size=2]]; [/size][size=2][color=#808080][size=2][color=#808080]_bomber[/color][/size][/color][/size][size=2] [/size][size=2][color=#ff0000][size=2][color=#ff0000]setVariable[/color][/size][/color][/size][size=2] ["caught", [/size][size=2][color=#0000ff][size=2][color=#0000ff]false[/color][/size][/color][/size][size=2]]; };
};
};
}; 

[/size]

Edited by Kolmain

Share this post


Link to post
Share on other sites

while {(alive_bomber) AND (_bombergetVariable "undercover"} do {

is that correct?

Share this post


Link to post
Share on other sites

Waiting on feedback on the syntax to continue...

Share this post


Link to post
Share on other sites

Sorry,

I think this should be working when you set the variable with setVariable:

_bomber setVariable ["undercover",true];

while {(alive _bomber) AND (_bomber getVariable "undercover")} do { }

The values are returned correctly. But I cannot say anything about locality.

Share this post


Link to post
Share on other sites

But does that check if it is true or just retrieve the value? Confused on running this check, anyone have any ideas?

Share this post


Link to post
Share on other sites

Alright, then there must be some wrong syntax in there, can anyone catch it?

Share this post


Link to post
Share on other sites

I looked over your script and found some errors:

- It doesn´t work with an Array as _side.

- At the last part it just checked if undercover was true. Instead it should have checked if caught was true.

I modified it and this works on my machine (not tested on MP), but just with one side. I will see what can be done with two sides.

private ["_nearestunitofside","_unit","_random","_alertmessage","_nearestunits","_bomber","_radius","_getaway","_side"];

_bomber = player;

_radius = 150;

_getaway = 300;

_side = EAST;

_bomber addEventHandler ["Fired", {_bomber setVariable ["shot", true];}];

_bomber setVariable ["shot", false];

_bomber setVariable ["undercover", true];

_bomber setVariable ["caught", false];

sleep 1;

while {(alive _bomber) AND (_bomber getVariable "undercover")} do {

_bomber setVariable ["shot", false];

_bomber setCaptive true;

_bomber setVariable ["caught", false];

sleep 2;

while {primaryWeapon _bomber!= ""} do {

_bomber setCaptive false;

hintSilent "You carry a weapon!";

sleep 3;

};

_nearestunits = nearestObjects [_bomber,["Man","Car","Tank"],_radius];

_nearestunitofside = [];

if(_side countSide _nearestunits > 0) then{

{

_unit = _x;

if(side _unit == _side) then{_nearestunitofside = _nearestunitofside + [_unit]};

} foreach _nearestunits;

if ((_bomber getVariable "shot") AND (count _nearestunitofside != 0) AND ((_nearestunitofside select 0) distance _bomber < _getaway - 50) ) then {

_bomber setVariable ["caught", true];

hint "Someone must have heard the shot!";

sleep 4;

_bomber setCaptive false;

(_nearestunitofside select 0) domove position _bomber;

};

if((_nearestunitofside select 0) distance _bomber < 20) then {

sleep 4;

if((_nearestunitofside select 0) distance _bomber < 20 ) then {

_random = floor(random 3);

_alertmessage = ["Watch Out!", "Keep Distance!", "Someone´s watching us", "They notice you!"] select _random;

call compile format ["hint '%1';", _alertmessage];

sleep 8;

if((_nearestunitofside select 0) distance _bomber < 14 ) then {

_bomber setVariable ["caught", true];

_bomber setCaptive false;

hint "THEY HAVE FOUND YOU";

sleep 4;

(_nearestunitofside select 0) glanceAt _bomber;

(_nearestunitofside select 0) reveal _bomber;

sleep 7;

};

};

};

};

while {(_bomber getVariable "caught")} do {

_nearestunits = nearestObjects [_bomber,["Man","Car","Tank"],_radius];

_nearestunitofside = [];

if(_side countSide _nearestunits > 0) then{

{

_unit = _x;

if(side _unit == _side) then{_nearestunitofside = _nearestunitofside + [_unit]};

} foreach _nearestunits;

hintSilent "Get Away";

sleep 4;

if(((_nearestunitofside select 0) distance _bomber > _getaway) OR ((_nearestunitofside select 0) knowsAbout _bomber < 1.4) OR (count _nearestunitofside == 0)) then { hint "You should be safe now"; _bomber setVariable ["caught", false]; _bomber setVariable ["caught", false]; };

};

};

};

Changed it a bit more and now it works with both sides:

private ["_nearestunitofside","_unit","_random","_alertmessage","_nearestunits","_bomber","_radius","_getaway","_side"];

_bomber = player;

_radius = 150;

_getaway = 300;

_side = [WEST,EAST];

_bomber addEventHandler ["Fired", {_bomber setVariable ["shot", true];}];

_bomber setVariable ["shot", false];

_bomber setVariable ["undercover", true];

_bomber setVariable ["caught", false];

sleep 1;

while {(alive _bomber) AND (_bomber getVariable "undercover")} do {

_bomber setVariable ["shot", false];

_bomber setCaptive true;

_bomber setVariable ["caught", false];

sleep 2;

while {primaryWeapon _bomber!= ""} do {

_bomber setCaptive false;

hintSilent "You carry a weapon!";

sleep 3;

};

_nearestunits = nearestObjects [_bomber,["Man","Car","Tank"],_radius];

_nearestunitofside = [];

if(_side select 0 countSide _nearestunits > 0 OR _side select 1 countSide _nearestunits > 0) then{

{

_unit = _x;

if((side _unit == _side select 0) OR (side _unit == _side select 1) ) then{_nearestunitofside = _nearestunitofside + [_unit]};

} foreach _nearestunits;

if ((_bomber getVariable "shot") AND (count _nearestunitofside != 0) AND ((_nearestunitofside select 0) distance _bomber < _getaway - 50) ) then {

_bomber setVariable ["caught", true];

hint "Someone must have heard the shot!";

sleep 4;

_bomber setCaptive false;

(_nearestunitofside select 0) domove position _bomber;

};

if((_nearestunitofside select 0) distance _bomber < 20) then {

sleep 4;

if((_nearestunitofside select 0) distance _bomber < 20 ) then {

_random = floor(random 3);

_alertmessage = ["Watch Out!", "Keep Distance!", "Someone´s watching us", "They notice you!"] select _random;

call compile format ["hint '%1';", _alertmessage];

sleep 8;

if((_nearestunitofside select 0) distance _bomber < 14 ) then {

_bomber setVariable ["caught", true];

_bomber setCaptive false;

hint "THEY HAVE FOUND YOU";

sleep 4;

(_nearestunitofside select 0) glanceAt _bomber;

(_nearestunitofside select 0) reveal _bomber;

sleep 7;

};

};

};

};

while {(_bomber getVariable "caught")} do {

_nearestunits = nearestObjects [_bomber,["Man","Car","Tank"],_radius];

_nearestunitofside = [];

if(_side select 0 countSide _nearestunits > 0 OR _side select 1 countSide _nearestunits > 0) then{

{

_unit = _x;

if(side _unit == _side select 0 OR side _unit == _side select 1) then{_nearestunitofside = _nearestunitofside + [_unit]};

} foreach _nearestunits;

hintSilent "Get Away";

sleep 4;

if(((_nearestunitofside select 0) distance _bomber > _getaway) OR ((_nearestunitofside select 0) knowsAbout _bomber < 1.4) OR (count _nearestunitofside == 0)) then { hint "You should be safe now"; _bomber setVariable ["caught", false]; _bomber setVariable ["caught", false]; };

};

};

};

I hope that helps you

Edited by Melmarkian

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×