diff --git a/Addons/Strat_mode/Functions/SM_RepairVehicule.sqf b/Addons/Strat_mode/Functions/SM_RepairVehicule.sqf
index 07fae55e5..16d8df982 100644
--- a/Addons/Strat_mode/Functions/SM_RepairVehicule.sqf
+++ b/Addons/Strat_mode/Functions/SM_RepairVehicule.sqf
@@ -30,7 +30,7 @@ SM_repair_vehicle={
[localize "STR_RepairingVehicle",0,1,0] call HUD_PBar_start;
["CLIENT", "Repair_vehicle",[_target,_caller,_pos],true] call CTI_CO_FNC_NetSend;
-
+ ["SERVER", "Repair_vehicle",[_target,_caller,_pos],true] call CTI_CO_FNC_NetSend;
while {alive _caller && alive _target && _hps > 0 && (_caller distance2d _target) <5 && (_caller distance _target) <7 && (_caller distance _pos)<=1 && (vehicle _caller) ==_caller && _currentdamage > ((getdammage _target) - 0.01) && _currentcallerdamage > ((getdammage _caller) - 0.02)} do {
sleep 1;
diff --git a/Addons/Strat_mode/REV/REV_act_rev.sqf b/Addons/Strat_mode/REV/REV_act_rev.sqf
index 89d0075d0..d1bffbe0f 100644
--- a/Addons/Strat_mode/REV/REV_act_rev.sqf
+++ b/Addons/Strat_mode/REV/REV_act_rev.sqf
@@ -6,4 +6,4 @@ sleep 5;
if (isplayer _caller && !((animationstate _caller ) == "AinvPknlMstpSlayWrflDnon_medic")) exitwith {false};
_unit setvariable ["REV_DRAGGED",false,true];
_unit setDamage 0.25;
-_unit setVariable ["REV_UNC", false, true];
+_unit setVariable ["REV_REQREV", true, true];
diff --git a/Addons/Strat_mode/REV/REV_obj_init.sqf b/Addons/Strat_mode/REV/REV_obj_init.sqf
index 3cf260750..2218e0a8c 100644
--- a/Addons/Strat_mode/REV/REV_obj_init.sqf
+++ b/Addons/Strat_mode/REV/REV_obj_init.sqf
@@ -5,12 +5,13 @@ diag_log format [":: REV:: trying to handle player as %1", _obj];
waitUntil {! isnull _obj && alive _obj};
-_obj setvariable ["REV_UNC",false,true];
-_obj setvariable ["REV_DRAGGED",false,true];
-_obj setvariable ["REV_DRAGGING",objnull,false];
+_obj setvariable ["REV_UNC",false,true]; //unconsious
+_obj setvariable ["REV_REQREV",false,true]; // revive requested by action
+_obj setvariable ["REV_DRAGGED",false,true]; //dragging diabled for now
+_obj setvariable ["REV_DRAGGING",objnull,false]; //dragging diabled for now
_obj addeventhandler["HandleDamage",REV_HANDLER];
-_obj addaction ["Suicide",REV_ACT_SUIC, [], 666, false, true, "", "_this == _target && _target getVariable ['REV_UNC',false]"];
+_obj addaction ["Suicide",REV_ACT_SUIC, [], 666, false, true, "", "_this == _target && _target getVariable ['REV_UNC',true]"];
_obj addaction ["Revive",REV_ACT_REV, [], 9, false, true, "", "! (isplayer _this) && _target getVariable ['REV_UNC',true]&& (_target distance _this) <100"];//
//_obj addaction ["Release",REV_ACT_REL, [], 9, false, true, "", "_this == _target && ! (_target getVariable ['REV_UNC',true])&&!(_target getVariable ['REV_DRAGGED',true])&& ! isNull (_this getVariable ['REV_DRAGGING',objNull])"];
diff --git a/Addons/Strat_mode/REV/REV_ui_mod.sqf b/Addons/Strat_mode/REV/REV_ui_mod.sqf
index db15aac88..602789773 100644
--- a/Addons/Strat_mode/REV/REV_ui_mod.sqf
+++ b/Addons/Strat_mode/REV/REV_ui_mod.sqf
@@ -6,8 +6,8 @@ private ["_main_disp","_ntime"];
inGameUISetEventHandler ["Action", "
- if (_this select 5 != 666 && player getVariable ['REV_UNC',false]) then {
- hint 'Sorry, You are down!';
+ if (round(_this select 5) != 666 && player getVariable ['REV_UNC',false]) then {
+ hint 'Sorry, You are down! :: %1';
true
}
"];
diff --git a/Addons/Strat_mode/REV/REV_unc_loop.sqf b/Addons/Strat_mode/REV/REV_unc_loop.sqf
index 0db5e6547..315660b27 100644
--- a/Addons/Strat_mode/REV/REV_unc_loop.sqf
+++ b/Addons/Strat_mode/REV/REV_unc_loop.sqf
@@ -15,12 +15,14 @@ while {(!CTI_GameOver && alive _unit && _unit getVariable ["REV_UNC",false] && t
_unit action ["getOut", (vehicle _unit)];
};
((time- _starting_time) / BLEEDOUT_TIME ) call HUD_PBar_update;
+ if (_unit getVariable ["REV_REQREV",false]) then {_unit setVariable ["REV_UNC",false,true];}; // revive request has arrived
sleep 0.1;
};
if (! (alive _unit) || CTI_GameOver) exitwith {
if (player == _unit ) then {CTI_P_PreBuilding = false};
player setCaptive false;
_unit setVariable ["REV_UNC", false, true];
+ _unit setvariable ["REV_REQREV",false,true];
_unit setvariable ["REV_DRAGGED",false,true];
0 call HUD_PBar_stop;
false
@@ -32,6 +34,7 @@ _unit enableSimulation true;
_unit setDamage 0.25;
_unit setCaptive false;
_unit setVariable ["REV_UNC", false, true];
+_unit setvariable ["REV_REQREV",false,true];
_unit setvariable ["REV_DRAGGED",false,true];
if (player == _unit ) then {CTI_P_PreBuilding = false};
diff --git a/Rsc/Game.hpp b/Rsc/Game.hpp
index 83c03d361..390cf1167 100644
--- a/Rsc/Game.hpp
+++ b/Rsc/Game.hpp
@@ -4,11 +4,11 @@ respawnDelay = 10;
respawnDialog = false;
//--- Require briefing.html to show up.
-onLoadMission = "BECTI - Zerty/HTom/Yoshi_E 1.3.4.0";
+onLoadMission = "BECTI - Zerty/HTom/Yoshi_E 1.3.4.1";
onLoadMissionTime = false;
onLoadName = "BECTI - Zerty/HTom/Yoshi_E";
-briefingName = "BECTI - Zerty/HTom/Yoshi_E 1.3.4.0";
+briefingName = "BECTI - Zerty/HTom/Yoshi_E 1.3.4.1";
//--- ArmA 3 Specifics
dev = "Benny";
diff --git a/Server/Functions/Server_HandleStaticDefenses.sqf b/Server/Functions/Server_HandleStaticDefenses.sqf
index a5e04b805..074bcfc3f 100644
--- a/Server/Functions/Server_HandleStaticDefenses.sqf
+++ b/Server/Functions/Server_HandleStaticDefenses.sqf
@@ -44,37 +44,59 @@ while {! CTI_GAMEOVER} do {
{
- if ((_x getVariable ["cti_aman_enabled", false])||(_x isKindOf "B_AAA_System_01_F" || _x isKindOf "B_SAM_System_01_F" || _x isKindOf "B_SAM_System_02_F")) then {
+ if ((_x getVariable ["cti_aman_enabled", false])|| (typeof _x )in ["B_AAA_System_01_F","B_SAM_System_01_F","B_SAM_System_02_F"]) then {
_defense_team = _logic getVariable "cti_defensive_team";
- if (_x emptyPositions "gunner" > 0 && alive _x) then {
+ if (((_x emptyPositions "gunner" > 0)|| (gunner _x ) != (_x getvariable ["CTI_assigned_gunner",objnull]) || ((isnull (_x getvariable ["CTI_assigned_gunner",objnull])) && ! isnull (gunner _x))) && alive _x) then {
_nearest_b = [CTI_BARRACKS, _x, (_side) call CTI_CO_FNC_GetSideStructures, CTI_BASE_DEFENSES_AUTO_REARM_RANGE] call CTI_CO_FNC_GetClosestStructure;
- if (!(isnull _nearest_b) && alive _nearest_b) then {
- if (isnull (assignedGunner _x) && count(_defense_team call CTI_CO_FNC_GetLiveUnits) < CTI_BASE_DEFENSES_AUTO_LIMIT) then {
+ if (!(isnull _nearest_b) && alive _nearest_b && (getDammage _x) < 0.4 ) then {
+ if (isnull (_x getvariable ["CTI_assigned_gunner",objnull]) && count(_defense_team call CTI_CO_FNC_GetLiveUnits) < CTI_BASE_DEFENSES_AUTO_LIMIT) then {
_var = missionNamespace getVariable [format ["CTI_%1_%2", _side, _nearest_b getVariable "cti_structure_type"],[[0,"Town"],0,0,0,[0,0]]];
_direction = 360 - ((_var select 4) select 0);
_distance = (_var select 4) select 1;
_position = _nearest_b modelToWorld [(sin _direction * _distance), (cos _direction * _distance), 0];
- if ( isNull _defense_team) then {_defense_team = createGroup _side; _logic setVariable ["cti_defensive_team",_defense_team,true];};
- _ai = [missionNamespace getVariable format["CTI_%1_Soldier", _side], _defense_team, _position, _sideID, _net] call CTI_CO_FNC_CreateUnit;
- [_ai] allowGetIn true;
- _ai assignAsGunner _x;
- _x setVariable ["CTI_assigned_gunner_time",time,false];
- [_ai] orderGetIn true;
- _defense_team setBehaviour "AWARE";
- _defense_team setCombatMode "RED";
- _defense_team setSpeedMode "FULL";
- diag_log format [":: DEF NG :: creating crew for %1 of side %2 at time %3 : %4", _x,_side,(_x getVariable ["CTI_assigned_gunner_time",0]),_ai];
+
+ if ((typeof _x )in ["B_AAA_System_01_F","B_SAM_System_01_F","B_SAM_System_02_F"] ) then {
+ if (isnull (gunner _x) || !alive (gunner _x)) then {
+ _x deleteVehicleCrew ( gunner _x);
+ createVehicleCrew _x;
+ _x joinAsSilent [createGroup _side, 99];
+ (group _x) setBehaviour "COMBAT";
+ (group _x) setCombatMode "RED";
+ _x setVehicleRadar 1;
+ _x setVehicleLock "LOCKED";
+ diag_log format [":: DEF NG :: creating crew for %1 of side %2 at time %3 ", _x,_side,(_x getVariable ["CTI_assigned_gunner_time",0])];
+ };
+ } else {
+ if ( isNull _defense_team) then {_defense_team = createGroup _side; _logic setVariable ["cti_defensive_team",_defense_team,true];};
+ _ai = [missionNamespace getVariable format["CTI_%1_Soldier", _side], _defense_team, _position, _sideID, _net] call CTI_CO_FNC_CreateUnit;
+ [_ai] allowGetIn true;
+ _ai assignAsGunner _x;
+ _ai setvariable ["CTI_assigned_def",_x,false];
+ _x setvariable ["CTI_assigned_gunner",_ai,false];
+ _x setVariable ["CTI_assigned_gunner_time",time,false];
+ [_ai] orderGetIn true;
+ _defense_team setBehaviour "AWARE";
+ _defense_team setCombatMode "RED";
+ _defense_team setSpeedMode "FULL";
+ diag_log format [":: DEF NG :: creating crew for %1 of side %2 at time %3 : %4", _x,_side,(_x getVariable ["CTI_assigned_gunner_time",0]),_ai];
+ };
+
} else {
- if (!(isnull (assignedGunner _x)) &&alive (assignedGunner _x)) then {
+ if (!(isnull (_x getvariable ["CTI_assigned_gunner",objnull])) && alive (_x getvariable ["CTI_assigned_gunner",objnull])) then {
if (time > ((_x getVariable ["CTI_assigned_gunner_time",0])+_man_timeout)) then {
- diag_log format [":: DEF NG :: Moving late crew for %1 of side %2 expected at %3 (rt: %4) : %5", _x,_side,((_x getVariable ["CTI_assigned_gunner_time",0])+_man_timeout),time,(assignedGunner _x)];
- (assignedGunner _x) moveInGunner _x;
+ diag_log format [":: DEF NG :: Moving late crew for %1 of side %2 expected at %3 (rt: %4) : %5", _x,_side,((_x getVariable ["CTI_assigned_gunner_time",0])+_man_timeout),time,(_x getvariable ["CTI_assigned_gunner",objnull])];
+ moveout (gunner _x);
+ (_x getvariable ["CTI_assigned_gunner",objnull]) moveInGunner _x;
+ } else {
+ [(_x getvariable ["CTI_assigned_gunner",objnull])] allowGetIn true;
+ (_x getvariable ["CTI_assigned_gunner",objnull]) assignAsGunner _x;
+ [(_x getvariable ["CTI_assigned_gunner",objnull])] orderGetIn true;
};
} else {
- if (!(isnull (assignedGunner _x))) then {
- diag_log format [":: DEF NG :: deleting dead crew for %1 of side %2 : %3", _x,_side,(assignedGunner _x)];
- deleteVehicle (assignedGunner _x);
- objnull assignAsGunner _x;
+ if (!(isnull (_x getvariable ["CTI_assigned_gunner",objnull]))) then {
+ diag_log format [":: DEF NG :: deleting dead crew for %1 of side %2 : %3", _x,_side,(_x getvariable ["CTI_assigned_gunner",objnull])];
+ deleteVehicle (_x getvariable ["CTI_assigned_gunner",objnull]);
+ _x setvariable ["CTI_assigned_gunner",objnull,false];
_x setVariable ["CTI_assigned_gunner_time",-1,false];
};
};
@@ -89,12 +111,22 @@ while {! CTI_GAMEOVER} do {
_nearest = [CTI_AMMO, _x, (_side) call CTI_CO_FNC_GetSideStructures, CTI_BASE_DEFENSES_AUTO_REARM_RANGE] call CTI_CO_FNC_GetClosestStructure;
if (count _ammo_trucks > 0 || (!isNull _nearest && alive _nearest)) then {
- _x setVehicleAmmoDef 1;
- diag_log format [":: DEF NG :: %1 of side %2 rearmed", _x,_side];
+ if ((gunner _x) == (_x getvariable ["CTI_assigned_gunner",objnull]) || (typeof _x )in ["B_AAA_System_01_F","B_SAM_System_01_F","B_SAM_System_02_F"]) then {
+ _x setVehicleAmmoDef 1;
+ diag_log format [":: DEF NG :: %1 of side %2 rearmed", _x,_side];
+ };
};
};
};
} forEach _defs;
+
+ _defense_team = _logic getVariable "cti_defensive_team";
+ if !(isnull _defense_team) then {
+ {
+ if (isnull (_x getVariable ["CTI_assigned_def",objNull]) || (!alive (_x getVariable ["CTI_assigned_def",objNull])) || ( getDammage (_x getVariable ["CTI_assigned_def",objNull]) >= 0.4 ) ) then {deleteVehicle _x;};
+ } forEach (units _defense_team);
+ };
+
sleep 60;
-};
\ No newline at end of file
+};
diff --git a/banner.jpg b/banner.jpg
index e50ea5066..6a148103a 100644
Binary files a/banner.jpg and b/banner.jpg differ
diff --git a/mission.sqm b/mission.sqm
index c7bd0cebd..ec662fa41 100644
--- a/mission.sqm
+++ b/mission.sqm
@@ -19,7 +19,7 @@ class EditorData
pos[]={2450.3237,25.100098,9116.7275};
dir[]={0,-0.70710683,0.70710683};
up[]={0,0.70710677,0.70710677};
- aside[]={0.99999994,0,-0};
+ aside[]={0.99999994,0,0};
};
};
binarizationWanted=0;
@@ -105,7 +105,7 @@ class Mission
{
class Intel
{
- briefingName="BECTI - Zerty/HTom/Yoshi_E 1.3.4.0";
+ briefingName="BECTI BE 0.97 - Zerty 1.3.4.1";
overviewText="By Benny - Adapted from OFP era MFCTI (Mike Melvin)";
resistanceWest=0;
timeOfChanges=24720;
@@ -2017,6 +2017,7 @@ class Mission
};
id=127;
type="O_Soldier_SL_F";
+ atlOffset=4.7683716e-007;
};
class Item14
{
@@ -2109,7 +2110,7 @@ class Mission
};
id=132;
type="O_Soldier_SL_F";
- atlOffset=2.7273612;
+ atlOffset=2.7273622;
};
class Item19
{
@@ -2163,7 +2164,7 @@ class Mission
};
id=135;
type="O_Soldier_SL_F";
- atlOffset=3.6859956;
+ atlOffset=3.6859965;
};
class Item22
{
@@ -2181,14 +2182,14 @@ class Mission
};
id=136;
type="O_Soldier_SL_F";
- atlOffset=2.4978232;
+ atlOffset=2.4978242;
};
class Item23
{
dataType="Object";
class PositionInfo
{
- position[]={14512.12,9.7627974,5843.0957};
+ position[]={14512.12,9.7627964,5843.0957};
};
side="East";
class Attributes
@@ -2217,7 +2218,7 @@ class Mission
};
id=138;
type="O_Soldier_SL_F";
- atlOffset=3.7724271;
+ atlOffset=3.772428;
};
};
class Attributes
@@ -2503,7 +2504,7 @@ class Mission
};
id=151;
type="B_Soldier_SL_F";
- atlOffset=1.9073486e-006;
+ atlOffset=3.8146973e-006;
};
class Item12
{
@@ -2540,7 +2541,7 @@ class Mission
};
id=153;
type="B_Soldier_SL_F";
- atlOffset=2.7794733;
+ atlOffset=2.7794752;
};
class Item14
{
@@ -2633,7 +2634,7 @@ class Mission
};
id=158;
type="B_Soldier_SL_F";
- atlOffset=2.4224777;
+ atlOffset=2.4224787;
};
class Item19
{