Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (!isServer) exitWith {};
- /* Завершение миссии по общему таймеру */
- #define MISSION_TIME 7200
- #define MISSION_ENDMESSAGE "Время вышло! Чеченским боевикам удалось удержать вокзал"
- /* Стороны, коэффициенты */
- #define SIDE_1 RESISTANCE
- #define SIDE_2 EAST
- #define SIDE_1_COEFF 3
- #define SIDE_2_COEFF 1
- /* Время на захват маркера в секундах */
- #define TRIGGER_TIME 300
- /* Имя маркера в редакторе */
- #define MARKER_NAME "marker_1"
- #define CAPTURE_MESSAGE "Объединенная группировка федеральных войск РФ захватила территории железнодорожного вокзала"
- /* Прозрачность маркера от 0 до 1, где 0 - прозрачный */
- #define MARKER_ALPHA 0.5
- /* Не учитывать ботов (только игроки) */
- #define ONLYPLAYERS true
- /* Режим отладки (на играх должен быть выключен!) */
- #define DEBUGMODE false
- /* Задерка в цикле проверки (рекомендуется значение 5) */
- #define CYCLE_DELAY 5.515;
- #define PUSHBACK(VAR1,VAR2) VAR1 SET [count VAR1, VAR2]
- _blend_fnc_GetCrewUnits = {
- private "_blend_var_return";
- //_blend_var_unitsList = _this;
- _blend_var_return = [];
- for "_i" from 0 to ((count _this) - 1) do {
- private ["_blend_var_obj", "_blend_var_pos"];
- _blend_var_obj = _this select _i;
- _blend_var_pos = position _blend_var_obj;
- if (surfaceIsWater _blend_var_pos) then {
- _blend_var_pos = (getPosASL _blend_var_obj) select 2;
- } else {
- _blend_var_pos = (getPosATL _blend_var_obj) select 2;
- };
- if ((_blend_var_pos < 50) && (_blend_var_pos > -10)) then {
- if ((_blend_var_obj isKindOf "LandVehicle") || (_blend_var_obj isKindOf "Air") || (_blend_var_obj isKindOf "Ship")) then {
- _blend_var_return = _blend_var_return + (crew _blend_var_obj);
- } else {
- PUSHBACK(_blend_var_return,_blend_var_obj);
- };
- };
- };
- _blend_var_return
- };
- if (
- (((getMarkerPos MARKER_NAME) select 0) == 0) &&
- (((getMarkerPos MARKER_NAME) select 1) == 0)
- ) exitWith {
- hint format["ОШИБКА! Маркер с именем %1 не найден!", MARKER_NAME];
- diag_log format["ОШИБКА! Маркер с именем %1 не найден!", MARKER_NAME];
- };
- MARKER_NAME setMarkerColor "ColorBlue";
- waitUntil { sleep 2.218; (time > 0) && { (missionNameSpace getVariable ["warbegins", 0]) == 1 } };
- private ["_blend_var_cycle", "_blend_var_exit", "_blend_var_status", "_blend_var_lastUpdate", "_blend_var_timeLeft", "_blend_var_missionStartTime", "_blend_var_rectangle", "_blend_var_direction", "_blend_var_triggerArea", "_blend_var_trigger"];
- _blend_var_cycle = true;
- _blend_var_exit = false;
- _blend_var_status = 0; // 0 - no units, 1 - pause, 2 - capturing
- _blend_var_lastUpdate = diag_tickTime;
- _blend_var_timeLeft = TRIGGER_TIME;
- _blend_var_missionStartTime = diag_tickTime;
- _blend_var_rectangle = if (markerShape MARKER_NAME == "RECTANGLE") then { true } else { false };
- _blend_var_direction = markerDir MARKER_NAME;
- _blend_var_triggerArea = [(markerSize MARKER_NAME) select 0, (markerSize MARKER_NAME) select 1, _blend_var_direction, _blend_var_rectangle];
- _blend_var_trigger = createTrigger["EmptyDetector", getMarkerPos MARKER_NAME];
- _blend_var_trigger setTriggerArea _blend_var_triggerArea;
- _blend_var_trigger setTriggerActivation["ANY", "PRESENT", false];
- _blend_var_trigger setTriggerStatements["false", "", ""];
- _blend_var_trigger setTriggerTimeout [15, 15, 15, false];
- waitUntil { sleep 0.159; _blend_var_ls = list _blend_var_trigger; !isNil "_blend_var_ls" };
- while {_blend_var_cycle} do {
- private ["_blend_var_side_1_count", "_blend_var_side_2_count", "_blend_var_unitsInArea"];
- if ((diag_tickTime - _blend_var_missionStartTime) > MISSION_TIME) exitWith {
- _cycle = false;
- [MISSION_ENDMESSAGE] call SerP_endMission;
- };
- _blend_var_side_1_count = 0;
- _blend_var_side_2_count = 0;
- _blend_var_unitsInArea = (list _blend_var_trigger) call _blend_fnc_GetCrewUnits;
- for "_i" from 0 to ((count _blend_var_unitsInArea) - 1) do {
- private "_blend_var_unit";
- _blend_var_unit = _blend_var_unitsInArea select _i;
- if (alive _blend_var_unit && (!ONLYPLAYERS || { ONLYPLAYERS && (isPlayer _blend_var_unit) }) ) then {
- private "_blend_var_unitSide";
- _blend_var_unitSide = side (group _blend_var_unit);
- if (_blend_var_unitSide == SIDE_1) then {
- _blend_var_side_1_count = _blend_var_side_1_count + 1;
- } else {
- if (_blend_var_unitSide == SIDE_2) then {
- _blend_var_side_2_count = _blend_var_side_2_count + 1;
- };
- };
- };
- };
- if (_blend_var_side_2_count == 0) then {
- if (_blend_var_status != 0) then {
- _blend_var_status = 0;
- _blend_var_timeLeft = TRIGGER_TIME;
- MARKER_NAME setMarkerColor "ColorBlue";
- };
- } else {
- if ((_blend_var_side_1_count * SIDE_1_COEFF) <= (_blend_var_side_2_count * SIDE_2_COEFF)) then {
- if (_blend_var_status == 2) then {
- _blend_var_timeLeft = _blend_var_timeLeft - (diag_tickTime - _blend_var_lastUpdate);
- if (_blend_var_timeLeft <= 0) then { _blend_var_cycle = false };
- } else {
- _blend_var_status = 2;
- MARKER_NAME setMarkerColor "ColorRed";
- };
- } else {
- if (_blend_var_status != 1) then {
- _blend_var_status = 1;
- MARKER_NAME setMarkerColor "ColorBlue";
- };
- };
- };
- if (!_blend_var_cycle) exitWith {
- [CAPTURE_MESSAGE] call SerP_endMission;
- };
- _blend_var_lastUpdate = diag_tickTime;
- if (DEBUGMODE) then {
- hint format["STATUS: %1\nCAP_TIMELEFT: %2\n%3: %4\n%5: %6\nMISS_TIMELEFT: %7", _blend_var_status, _blend_var_timeLeft, SIDE_1, _blend_var_side_1_count, SIDE_2, _blend_var_side_2_count, MISSION_TIME - (diag_tickTime - _blend_var_missionStartTime)]
- };
- sleep CYCLE_DELAY
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement