Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.87 KB | None | 0 0
  1. if (!isServer) exitWith {};
  2.  
  3. /* Завершение миссии по общему таймеру */
  4. #define MISSION_TIME 7200
  5. #define MISSION_ENDMESSAGE "Время вышло! Чеченским боевикам удалось удержать вокзал"
  6.  
  7. /* Стороны, коэффициенты */
  8. #define SIDE_1 RESISTANCE
  9. #define SIDE_2 EAST
  10. #define SIDE_1_COEFF 3
  11. #define SIDE_2_COEFF 1
  12. /* Время на захват маркера в секундах */
  13. #define TRIGGER_TIME 300
  14. /* Имя маркера в редакторе */
  15. #define MARKER_NAME "marker_1"
  16. #define CAPTURE_MESSAGE "Объединенная группировка федеральных войск РФ захватила территории железнодорожного вокзала"
  17. /* Прозрачность маркера от 0 до 1, где 0 - прозрачный */
  18. #define MARKER_ALPHA 0.5
  19. /* Не учитывать ботов (только игроки) */
  20. #define ONLYPLAYERS true
  21. /* Режим отладки (на играх должен быть выключен!) */
  22. #define DEBUGMODE false
  23. /* Задерка в цикле проверки (рекомендуется значение 5) */
  24. #define CYCLE_DELAY 5.515;
  25.  
  26. #define PUSHBACK(VAR1,VAR2) VAR1 SET [count VAR1, VAR2]
  27.  
  28. _blend_fnc_GetCrewUnits = {
  29. private "_blend_var_return";
  30. //_blend_var_unitsList = _this;
  31. _blend_var_return = [];
  32. for "_i" from 0 to ((count _this) - 1) do {
  33. private ["_blend_var_obj", "_blend_var_pos"];
  34. _blend_var_obj = _this select _i;
  35. _blend_var_pos = position _blend_var_obj;
  36. if (surfaceIsWater _blend_var_pos) then {
  37. _blend_var_pos = (getPosASL _blend_var_obj) select 2;
  38. } else {
  39. _blend_var_pos = (getPosATL _blend_var_obj) select 2;
  40. };
  41. if ((_blend_var_pos < 50) && (_blend_var_pos > -10)) then {
  42. if ((_blend_var_obj isKindOf "LandVehicle") || (_blend_var_obj isKindOf "Air") || (_blend_var_obj isKindOf "Ship")) then {
  43. _blend_var_return = _blend_var_return + (crew _blend_var_obj);
  44. } else {
  45. PUSHBACK(_blend_var_return,_blend_var_obj);
  46. };
  47. };
  48. };
  49. _blend_var_return
  50. };
  51.  
  52. if (
  53. (((getMarkerPos MARKER_NAME) select 0) == 0) &&
  54. (((getMarkerPos MARKER_NAME) select 1) == 0)
  55. ) exitWith {
  56. hint format["ОШИБКА! Маркер с именем %1 не найден!", MARKER_NAME];
  57. diag_log format["ОШИБКА! Маркер с именем %1 не найден!", MARKER_NAME];
  58. };
  59.  
  60. MARKER_NAME setMarkerColor "ColorBlue";
  61.  
  62. waitUntil { sleep 2.218; (time > 0) && { (missionNameSpace getVariable ["warbegins", 0]) == 1 } };
  63.  
  64. 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"];
  65.  
  66. _blend_var_cycle = true;
  67. _blend_var_exit = false;
  68. _blend_var_status = 0; // 0 - no units, 1 - pause, 2 - capturing
  69. _blend_var_lastUpdate = diag_tickTime;
  70. _blend_var_timeLeft = TRIGGER_TIME;
  71. _blend_var_missionStartTime = diag_tickTime;
  72.  
  73. _blend_var_rectangle = if (markerShape MARKER_NAME == "RECTANGLE") then { true } else { false };
  74. _blend_var_direction = markerDir MARKER_NAME;
  75.  
  76. _blend_var_triggerArea = [(markerSize MARKER_NAME) select 0, (markerSize MARKER_NAME) select 1, _blend_var_direction, _blend_var_rectangle];
  77. _blend_var_trigger = createTrigger["EmptyDetector", getMarkerPos MARKER_NAME];
  78. _blend_var_trigger setTriggerArea _blend_var_triggerArea;
  79. _blend_var_trigger setTriggerActivation["ANY", "PRESENT", false];
  80. _blend_var_trigger setTriggerStatements["false", "", ""];
  81. _blend_var_trigger setTriggerTimeout [15, 15, 15, false];
  82.  
  83. waitUntil { sleep 0.159; _blend_var_ls = list _blend_var_trigger; !isNil "_blend_var_ls" };
  84.  
  85. while {_blend_var_cycle} do {
  86. private ["_blend_var_side_1_count", "_blend_var_side_2_count", "_blend_var_unitsInArea"];
  87. if ((diag_tickTime - _blend_var_missionStartTime) > MISSION_TIME) exitWith {
  88. _cycle = false;
  89. [MISSION_ENDMESSAGE] call SerP_endMission;
  90. };
  91.  
  92. _blend_var_side_1_count = 0;
  93. _blend_var_side_2_count = 0;
  94. _blend_var_unitsInArea = (list _blend_var_trigger) call _blend_fnc_GetCrewUnits;
  95. for "_i" from 0 to ((count _blend_var_unitsInArea) - 1) do {
  96. private "_blend_var_unit";
  97. _blend_var_unit = _blend_var_unitsInArea select _i;
  98. if (alive _blend_var_unit && (!ONLYPLAYERS || { ONLYPLAYERS && (isPlayer _blend_var_unit) }) ) then {
  99. private "_blend_var_unitSide";
  100. _blend_var_unitSide = side (group _blend_var_unit);
  101. if (_blend_var_unitSide == SIDE_1) then {
  102. _blend_var_side_1_count = _blend_var_side_1_count + 1;
  103. } else {
  104. if (_blend_var_unitSide == SIDE_2) then {
  105. _blend_var_side_2_count = _blend_var_side_2_count + 1;
  106. };
  107. };
  108. };
  109. };
  110.  
  111. if (_blend_var_side_2_count == 0) then {
  112. if (_blend_var_status != 0) then {
  113. _blend_var_status = 0;
  114. _blend_var_timeLeft = TRIGGER_TIME;
  115. MARKER_NAME setMarkerColor "ColorBlue";
  116. };
  117. } else {
  118. if ((_blend_var_side_1_count * SIDE_1_COEFF) <= (_blend_var_side_2_count * SIDE_2_COEFF)) then {
  119. if (_blend_var_status == 2) then {
  120. _blend_var_timeLeft = _blend_var_timeLeft - (diag_tickTime - _blend_var_lastUpdate);
  121. if (_blend_var_timeLeft <= 0) then { _blend_var_cycle = false };
  122. } else {
  123. _blend_var_status = 2;
  124. MARKER_NAME setMarkerColor "ColorRed";
  125. };
  126. } else {
  127. if (_blend_var_status != 1) then {
  128. _blend_var_status = 1;
  129. MARKER_NAME setMarkerColor "ColorBlue";
  130. };
  131. };
  132. };
  133. if (!_blend_var_cycle) exitWith {
  134. [CAPTURE_MESSAGE] call SerP_endMission;
  135. };
  136. _blend_var_lastUpdate = diag_tickTime;
  137. if (DEBUGMODE) then {
  138. 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)]
  139. };
  140. sleep CYCLE_DELAY
  141. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement