Advertisement
Guest User

Untitled

a guest
Feb 4th, 2015
524
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 37.20 KB | None | 0 0
  1. // [Script] Зенитно-ракетный комплекс "AirFest". (- Воздушный праздник) ^
  2. // Дата начала разработки: 15.08.2014                                   ^
  3. // Дата релиза: 04/02/2015                                              ^
  4. // Автор: IceShock                                                      ^
  5. // Developer Skype: ice_and_shock                                       ^
  6. // Version: 2.0 RELEASE                                                 ^
  7. // Все права защищены. (c) 2015 by IceShock.                            ^
  8. //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  9. #include <a_samp> // SA:MP Ядро       //
  10. #include <foreach> // Easy Cycles     //
  11. #include <sscanf2> // Specifiers      //
  12. #include <zcmd> // Command Engine     //
  13. //#include <TestBotsAPI> // My pretty   //
  14. //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
  15. #undef MAX_PLAYERS // Удаление константы для её переобьявления в целях уменьшения нагрузки путём экономии памяти.
  16. const MAX_PLAYERS = 500; // Выделения ячеек в массивы для игроков, П.С - Заменяем 500 на свое кол-во слотов сервера.
  17. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
  18. #define public: public // чтоб не путать стандартные самп коллбэки от созданых мной пабликов
  19. #define SCM SendClientMessage // сокращение
  20. #define SPVi SetPVarInt // сокращение
  21. #define GPVi GetPVarInt // сокращение
  22. #define pSPVi(%0,%1,%2); \
  23. SetPVarInt(%0,%1,(GetPVarInt(%0,%1) + %2));
  24. #define mSPVi(%0,%1,%2); \
  25. SetPVarInt(%0,%1,(GetPVarInt(%0,%1) - %2));
  26. //&&&&&&&&&&&&&&&&& Координаты расположения машин зенитно-ракетного комплекса //
  27. #define bp_X (308.1761) // x координата машины с боеголовками
  28. #define bp_Y (1976.6831) // y координата машины с боеголовками
  29. #define bp_Z (18.0774) // z координата машины с боеголовками
  30. #define bp_A (178.3909) // угловая координата машины с боеголовками
  31. //----------------//
  32. #define rad_X (307.8577) // x координата машины с радаром
  33. #define rad_Y (1956.1046) // y координата машины с радаром
  34. #define rad_Z (18.2654) // z координата машины с радаром
  35. #define rad_A (179.2643) // угловая координата машины с радаром
  36. //----------------//
  37. #define zur_X (307.6257) // x координата машины с установкой
  38. #define zur_Y (1936.5151) // y координата машины с установкой
  39. #define zur_Z (18.2910) // z координата машины с установкой
  40. #define zur_A (179.0865) // угловая координата машины с установкой
  41. //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  42. #define chX (276.8094) // x координата чекпоинта загрузки боеголовок
  43. #define chY (1936.2177) // y координата чекпоинта загрузки боеголовок
  44. #define chZ (18.0773) // z координата чекпоинта загрузки боеголовок
  45. //----------------------------------------------------------------------------//
  46. #define BEZHEVOY 0xF5DEB3AA///////////////////////////////////////
  47. #define SEAGREEN 0x00EEADDF///////////////////////////////////////
  48. #define RED 0xAA3333AA////////////////////////////////////////////
  49. #define GREY 0xAFAFAFAA///////////////////////////////////////////
  50. #define YELLOW 0xFFFF00AA/////////////////////////////////////////
  51. #define PINK 0xFF66FFAA///////////////////////////////////////////
  52. #define BLUE 0x0000BBAA///////////////////////////////////////////
  53. #define WHITE 0xFFFFFFAA//////////////////////////////////////////
  54. #define ORANGE 0xFF9900AA/////////////////////////////////////////
  55. #define LIGHTRED 0xFF99AADD///////////////////////////////////////
  56. #define LIGHTGREEN 0x24FF0AB9/////////////////////////////////////
  57. #define GREEN 0x33AA33AA//////////////////////////////////////////
  58. #define LIGHTBLUE 0x33CCFFAA//////////////////////////////////////
  59. //----------------------------- Массивы и переменные ---------------------------------------------------------------------//
  60. new zcmd[128]; // для наших команд которые использую форматирование, дабы не ебать мозг с постоянным создаванием локальных.
  61. new n_value = 0; // для возрата кол-ва материалов
  62. new Missile = 0; // ракетные боеголовки в СОУ
  63. new ZRK[3]; // Состав комплекса
  64. new OBJ[3]; // Обьекты на транспорте
  65. new bool:EN = false; // For timer
  66. new OON; // Для таймера
  67. new r1[MAX_PLAYERS], r2[MAX_PLAYERS], r3[MAX_PLAYERS];
  68. new bool:in_proccess[MAX_PLAYERS]; // anti repeat fire
  69. new bool:RadActive[MAX_PLAYERS]; // Статус работы машины наводчика
  70. new bool:RangMode = false; // Проверка игрока на то что он является солдатом по военному рангу через PVar либо через скин
  71. new bool:FreeMats = true; // Бесплатные материалы погрузки бп, ставим false если хотите подганять маты с мода к скрипту.
  72. // Заменяем у переменной RangMode значение false на true если не хотите проверять на солдата по военных скинах
  73. new ArmySkins[6] = {287, 191, 179, 61, 255}; // Набор идов скинов которые найболее свойственны армиям. (Если кое какие иначие то меняем ид того скина)
  74. // Вам всего данно 5 военных скинов. Вот вам ниже описание их внешнего вида.
  75. /*
  76. ID Skina 287 - Стандартный скин солдата у военной форме с бронежелетом и кепкой (Мужской пол)
  77. ID Skina 191 - Стандартный скин солдата у военной майке с штанах (Женский пол)
  78. ID Skina 179 - Мужик у военке, знаком вам из сингла как продавец оружия в аммо (Мужской пол)
  79. ID Skina 61 - Скин пилота у парадной форме который в сингле ходит рядом с аеропортом (Мужской пол)
  80. ID Skina 255 - Скин усатого шофера в фурашке с чёрной формой (Как генерал на адвансе) (Мужской пол)
  81. */
  82. // ------------- Константы ------------------------------------------------------------------------------------//
  83. const MAX_MISSILES = 4; // максимум загружаемых ракетных боеголовок в пусковую установку ЗУР.
  84. const MAX_CARGO = 12; // максимум загружаемых ракетных боеголовок в грузовик ПЗУ.
  85. const MATS_PRICE = 4000; // цена за погрузку ракет в материалах
  86. const Float:MAX_RAD_DISTANCE = 3000.0; // Максимальный радиус действия ЗРК - 3 км.
  87. // :::::::::::::::::::::: Пример выдачи статуса армейца у фс с вашего мода :::::::::: //
  88. /* // это вам нужно только тогда если вы оставили значение true в переменной RangMode, иначе вам не нужен весь этот зелёный код.
  89. В public OnPlayerSpawn вставляем всю строчку if, остальное не нужно, т.к это всего лишь пример её добавления для раков.
  90. {
  91.     if(PlayerInfo[playerid][pMember] == 3) SetPVarInt(playerid, "z_MilitaryRang", (PlayerInfo[playerid][pRang])); // солдатство
  92.     return true;
  93. }
  94. //Пример подгонки материалов с мода к фс
  95. // это вам нужно только тогда если вы оставили значение true в переменной FreeMats, иначе вам не нужен весь этот зелёный код ниже.
  96. //Скопировать всё до скобочки } и в самый конец мода вставляем всё зелёное что тут ниже,
  97. //--------------------------//
  98. #define n_varbie LV_Mats   // LV_Mats заменяем на имя своей переменной материалов любой армии.
  99. //-----------------------//
  100. forward SendMatsValue();
  101. public SendMatsValue()
  102. {
  103.     CallRemoteFunction("SetMatsValue", "d", n_varbie);
  104.     return true;
  105. }
  106. forward TakeMatsValue(val);
  107. public TakeMatsValue(val)
  108. {
  109.     n_varbie -= val;
  110.     return true;
  111. }
  112. */
  113. //%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//
  114. public: OnFilterScriptInit()
  115. {
  116.     print("\n((((((((((((((((((((((((((()))))))))))))))))))))))))");
  117.     print(" [Filter Script] ZRK System ""AirFest"" ------------- ");
  118.     print("((((((((((((((((((((((((((((()))))))))))))))))))))))\n");
  119.     //AllowBots();
  120.     return true;
  121. }
  122. ////////////////////////////////////////////////////////////////////////////////
  123. public: OnGameModeInit()
  124. {
  125.     SetTimer("Fresher", 1000, true); // Не использую OnPlayerUpdate, заместь него общий ежесекудный таймер с циклом.
  126.     AllowVehicles(); // Создать транспорт к фс.
  127.     AllowObjects(); // Создать обьекты к фс.
  128.     return true;
  129. }
  130. public: OnPlayerConnect(playerid)
  131. {
  132.     WritePerVars(playerid); // Прикрепим клиенту наши пвары с фс.
  133.     return true;
  134. }
  135. public: OnPlayerDisconnect(playerid, reason)
  136. {
  137.     if(GPVi(playerid, "z_Timer") > 0) KillTimer(OON);
  138.     return true;
  139. }
  140. //-------------------------------------------------//
  141. IsClientMilitary(playerid) // функция для определения, являеться ли клиент военным.
  142. {
  143.     if(RangMode == true)
  144.     {
  145.         if(GPVi(playerid, "z_MilitaryRang") > 0) return true; // если ранг больше нуля, то возратим правду.
  146.     }
  147.     else if(RangMode == false)
  148.     {
  149.         for(new id = 0; id < 6; id++)
  150.         {
  151.             if(GetPlayerSkin(playerid) == ArmySkins[id]) return true;
  152.         }
  153.     }
  154.     return false;
  155. }
  156. #define fclamp360(%0) %0 += (%0 >= 360.0) ? -360.0 : ((%0 < 0.0) ? 360.0 : 0.0) // Trigonometric Macro
  157. Float:ReturnZAngleToPoint(vehicleid, Float:x, Float:y) // Calculating the angle
  158. {
  159.     new Float:P[4];
  160.     GetVehiclePos(vehicleid, P[0], P[1], P[2]);
  161.     P[3] = (180.0 - atan2(floatsub(P[0], x), floatsub(P[1], y)));
  162.     fclamp360(P[3]);
  163.     return P[3];
  164. }
  165. Cargo(playerid) // функция для проверки наличия груза клиента.
  166. {
  167.     if(GPVi(playerid, "z_Cargo") == 0) return false; // если нет груза то нечего не возратим.
  168.     return true;
  169. }
  170. public: OnPlayerSpawn(playerid)
  171. {
  172.     if(GPVi(playerid, "z_Spawned") == 0) SPVi(playerid, "z_Spawned", 1); // если вызвался коллбэк спавна, установим пвар значение на заспавнен.
  173.     //PutBots(playerid);
  174.     return true;
  175. }
  176. public: OnPlayerExitVehicle(playerid, vehicleid)
  177. {
  178.     if(vehicleid == ZRK[1] && RadActive[playerid] == true)
  179.     {
  180.         RadActive[playerid] = false; KillTimer(OON); SPVi(playerid, "z_Timer", 0);
  181.         SCM(playerid, RED, "Сканирование прервано.");
  182.         foreach(new i : Player) SPVi(i, "z_Target", 0);
  183.     }
  184.     return true;
  185. }
  186. public: OnPlayerStateChange(playerid, newstate, oldstate)
  187. {
  188.     if(newstate == PLAYER_STATE_DRIVER)
  189.     {
  190.         new newcar = GetPlayerVehicleID(playerid);
  191.         if(newcar >= ZRK[0] && newcar <= ZRK[2])
  192.         {
  193.             if(IsClientMilitary(playerid)){}
  194.             else
  195.             {
  196.                 RemovePlayerFromVehicle(playerid);
  197.                 SCM(playerid, GREEN, "Вы не солдат!");
  198.                 return true;
  199.             }
  200.         }
  201.         if(newcar == ZRK[0] && IsClientMilitary(playerid) && !Cargo(playerid))
  202.         {
  203.             SCM(playerid, ORANGE, "Введите /tocargo чтобы начать погрузку ракетных боеголовок.");
  204.         }
  205.         if(newcar == ZRK[1] && IsClientMilitary(playerid))
  206.         {
  207.             SCM(playerid, PINK, "Добро пожаловать на станцию обнаружения и целеуказания Купол!");
  208.             SCM(playerid, PINK, "Введите /airscan чтобы начать отслеживать цели!");
  209.         }
  210.     }
  211.     return true;
  212. }
  213. public: OnPlayerEnterRaceCheckpoint(playerid)
  214. {
  215.     if(IsPlayerInRangeOfPoint(playerid, 5.0, chX, chY, chZ))
  216.     {
  217.         new newcar = GetPlayerVehicleID(playerid);
  218.         if(!Cargo(playerid) && newcar == ZRK[0] && IsClientMilitary(playerid))
  219.         {
  220.             if(FreeMats == false && GiveMatsValue() < MATS_PRICE) SCM(playerid, RED, "Недостаточно материалов для закупки боеголовок!");
  221.             else
  222.             {
  223.                 if(FreeMats == false) TakeMats(MATS_PRICE);
  224.                 TogglePlayerControllable(playerid, false);
  225.                 SCM(playerid, YELLOW, "Идёт погрузка, пожалуйста подождите!");
  226.                 PlayerPlaySound(playerid, 6802, 0.0, 0.0, 0.0);
  227.                 SetTimerEx("MatsHaul", 5000, false, "i", playerid);
  228.             }
  229.             DisablePlayerRaceCheckpoint(playerid);
  230.         }
  231.     }
  232.     return true;
  233. }
  234. GetPlayerSpeed(playerid)
  235. {
  236.     new Float:ST[4];
  237.     if(IsPlayerInAnyVehicle(playerid))GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
  238.     else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
  239.     ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 150.0;
  240.     return floatround(ST[3]);
  241. }
  242. Float:GetDistanceBetweenPlayers(p1, p2)
  243. {
  244.     new Float:x1,Float:y1, Float:z1, Float:x2, Float:y2, Float:z2;
  245.     if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
  246.     {
  247.         return -1.00;
  248.     }
  249.     GetPlayerPos(p1,x1,y1,z1);
  250.     GetPlayerPos(p2,x2,y2,z2);
  251.     return floatsqroot(floatpower(floatabs(floatsub(x2,x1)), 2) + floatpower(floatabs(floatsub(y2 ,y1)), 2) + floatpower(floatabs(floatsub(z2, z1)), 2));
  252. }
  253. forward MatsHaul(playerid);
  254. public MatsHaul(playerid)
  255. {
  256.     new sabotage[37+1], bName[MAX_PLAYER_NAME];
  257.     GetPlayerName(playerid, bName, sizeof(bName));
  258.     format(sabotage, sizeof(sabotage), "Боец %s закончил погрузку боеголовок.", bName);
  259.     foreach(new x : Player)
  260.     if(GetDistanceBetweenPlayers(playerid, x) <= 30.0) SCM(x, LIGHTGREEN, sabotage);
  261.     SCM(playerid, LIGHTGREEN, "Следуйте к самоходной огневой установке и вводите рядом /preload.");
  262.     TogglePlayerControllable(playerid, true);
  263.     SPVi(playerid, "z_Cargo", 12);
  264.     PlayerPlaySound(playerid, 5201, 0.0, 0.0, 0.0);
  265.     return true;
  266. }
  267. forward Preload(playerid);
  268. public Preload(playerid)
  269. {
  270.     new sabotage[60+1], bName[MAX_PLAYER_NAME];
  271.     GetPlayerName(playerid, bName, sizeof(bName));
  272.     format(sabotage, sizeof(sabotage), "Боец %s закончил разгрузку ракетных боеголовок.", bName);
  273.     foreach(new x : Player)
  274.     {
  275.         if(GetDistanceBetweenPlayers(playerid, x) <= 30.0) SCM(x, GREEN, sabotage);
  276.         if(IsClientMilitary(x) && IsPlayerInAnyVehicle(x))
  277.         {
  278.             if(GetPlayerVehicleID(x) == ZRK[2]) SCM(x, SEAGREEN, "Зенитно-пусковая установка заряжена! Кол-во: 4 боеголовки.");
  279.             break;
  280.         }
  281.     }
  282.     TogglePlayerControllable(playerid, true);
  283.     SPVi(playerid, "z_Cargo", 0); Missile = 4;
  284.     PlayerPlaySound(playerid, 5201, 0.0, 0.0, 0.0);
  285.     return true;
  286. }
  287. forward RadarSystem(playerid);
  288. public RadarSystem(playerid)
  289. {
  290.     foreach(new target : Player)
  291.     {
  292.         //~~~~~~~~~~~~~~~~~~~~~~ Radar SyS ----------------------- //
  293.         new Float:n_X, Float:n_Y, Float:n_Z; GetVehiclePos(ZRK[2], n_X, n_Y, n_Z);
  294.         new Float:X, Float:Y, Float:Z; GetPlayerPos(target, X, Y, Z);
  295.         if(IsPlayerInAnyVehicle(target) && RadActive[playerid] == true && Z > 50.0)
  296.         {
  297.             if(IsPlayerInRangeOfPoint(target, MAX_RAD_DISTANCE, n_X, n_Y, n_Z))
  298.             {
  299.                 new cll = class(target);
  300.                 if(cll != -1)
  301.                 {
  302.                     if(GPVi(target, "z_Target") == 0)
  303.                     {
  304.                         SPVi(target, "z_Target", 1);
  305.                         new Radar[1+110];
  306.                         new classification[10];
  307.                         if(class(target) == 1) classification = "Самолёт";
  308.                         else if(class(target) == 2) classification = "Вертолёт";
  309.                         format(Radar, sizeof(Radar),
  310.                         "Обнаружена цель! ID:%d | Классификация: %s | \
  311.                         Скорость: %d/kmh | Высота: %d m | Дистанция: %d m",
  312.                         target, classification, GetPlayerSpeed(target), floatround(Z), floatround(GetDistanceBetweenPlayers(playerid, target)));
  313.                         PlayerPlaySound(playerid, 5201, 0.0, 0.0, 0.0);
  314.                         SendClientMessage(playerid, GREEN, Radar);
  315.                         SCM(playerid, SEAGREEN, "Введите /targetsend чтобы дать наводку.");
  316.                     }
  317.                 }
  318.                 else if(!IsPlayerInRangeOfPoint(target, MAX_RAD_DISTANCE, n_X, n_Y, n_Z))
  319.                 {
  320.                     if(GPVi(target, "z_Target") == 1)
  321.                     {
  322.                         new contact[46+1];
  323.                         format(contact, sizeof(contact), "Цель %d:ID покинула радиус действия комплекса.", target);
  324.                         SCM(playerid, LIGHTGREEN, contact); PlayerPlaySound(playerid, 41603, 0.0, 0.0, 0.0);
  325.                         SPVi(target, "z_Target", 0);
  326.                     }
  327.                 }
  328.             }
  329.         }
  330.     }
  331.     return true;
  332. }
  333. forward Zahvat(playerid, tid);
  334. public Zahvat(playerid, tid)
  335. {
  336.  
  337.     SCM(playerid, LIGHTRED, "Цель Захвачена! Кликните LMB или CTRL для залпа.\n\
  338.     Или же введите /canceltarget для сброса цели.");
  339.     PlayerPlaySound(playerid, 21000, 0.0, 0.0, 0.0);
  340.     SPVi(playerid, "z_Zahvat", tid);
  341.     return true;
  342. }
  343. public: OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  344. {
  345.     if(newkeys & KEY_FIRE)
  346.     {
  347.         new newcar = GetPlayerVehicleID(playerid);
  348.         new target = GPVi(playerid, "z_Zahvat");
  349.         if(in_proccess[target] == true)
  350.         {
  351.             if(GPVi(playerid, "z_AntiFlood") == 0)
  352.             {
  353.                 SCM(playerid, LIGHTRED, "Вы уже произвели залп по этой цели, ожидайте результата!");
  354.                 pSPVi(playerid, "z_AntiFlood", 5);
  355.             }
  356.             return true;
  357.         }
  358.         if(GPVi(playerid, "z_Zahvat") != -1 && newcar == ZRK[2]) Launch(playerid, target);
  359.     }
  360.     return true;
  361. }
  362. Launch(playerid, target)
  363. {
  364.     if(Missile == 0)
  365.     {
  366.         SPVi(playerid, "z_Zahvat", -1);
  367.         return SCM(playerid, PINK, "Установка разряжена!");
  368.     }
  369.     in_proccess[target] = true;
  370.     //new ref[7];
  371.     //GetVehicleParamsEx(GetPlayerVehicleID(playerid), ref[0], ref[1], ref[2], ref[3], ref[4], ref[5], ref[6]);
  372.     //SetVehicleParamsEx(GetPlayerVehicleID(playerid), 0, ref[1], ref[2], ref[3], ref[4], ref[5], ref[6]);
  373.     new Float:xay, Float:yay, Float:zay;
  374.     GetVehiclePos(GetPlayerVehicleID(playerid), xay, yay, zay);
  375.     //(GetPlayerVehicleID(playerid), xay, yay, zay);
  376.     #pragma unused zay
  377.     DestroyObject(OBJ[1]);
  378.     OBJ[1] = CreateObject(3267,0,0,-1000,0,0,0,100);
  379.     AttachObjectToVehicle(OBJ[1],
  380.     ZRK[2], 0.000000,-1.200000,0.824999,0.000000,0.000000,ReturnZAngleToPoint(GetPlayerVehicleID(target), xay, yay));
  381.     foreach(new x : Player)
  382.     if(GetDistanceBetweenPlayers(playerid, x) <= 30.0) PlayerPlaySound(x, 40408, 0.0, 0.0, 0.0);
  383.     new Float:X, Float:Y, Float:Z; GetVehiclePos(ZRK[2], X, Y, Z);
  384.     OBJ[2] = CreateObject(354,X,Y,(Z+4.0),0.0,0.0,0.0,200.0); Missile -= 1;
  385.     SetTimerEx("MoveRocket", 100, false, "ii", playerid, target);
  386.     return true;
  387. }
  388. Float:GetDistanceBetweenPoints(Float:X, Float:Y, Float:Z, Float:PointX, Float:PointY, Float:PointZ)
  389. {
  390.     return floatsqroot(floatadd(floatadd(floatpower(floatsub(X, PointX), 2.0), floatpower(floatsub(Y, PointY), 2.0)), floatpower(floatsub(Z, PointZ), 2.0)));
  391. }
  392. forward MoveRocket(playerid, target);
  393. public MoveRocket(playerid, target)
  394. {
  395.     EN = true; new Float:DETONATION = 8.0;
  396.     new Float:x, Float:y, Float:z, Float:X, Float:Y, Float:Z;
  397.     if(IsPlayerInAnyVehicle(target))
  398.     {
  399.         new tg = GetPlayerVehicleID(target);
  400.         GetVehiclePos(tg, x, y, z);
  401.     }
  402.     new Float:xX, Float:yY, Float:zZ; GetVehiclePos(ZRK[2], xX, yY, zZ);
  403.     GetObjectPos(OBJ[2], X, Y, Z); new Float:DST = GetDistanceBetweenPoints(x, y, z, xX, yY, zZ);
  404.     if(GetDistanceBetweenPoints(X, Y, Z, xX, yY, zZ) < 50.0)
  405.     {
  406.         MoveObject(OBJ[2], x, y, zZ, 100.0);
  407.         SetTimerEx("MoveRocket", 100, false, "ii", playerid, target);
  408.         return true;
  409.     }
  410.     if(GetPlayerSpeed(target) < 180 && DST < 1000.0) MoveObject(OBJ[2], x, y, z, 100.0);
  411.     else if(GetPlayerSpeed(target) < 180 && DST > 1000.0) MoveObject(OBJ[2], x, y, z, 150.0);
  412.     else if(GetPlayerSpeed(target) > 180 && DST < 1000.0) MoveObject(OBJ[2], x, y, z, 200.0);
  413.     else if(GetPlayerSpeed(target) > 180 && DST > 1000.0){MoveObject(OBJ[2], x, y, z, 300.0); DETONATION = 10.0;}
  414.     if(GetDistanceBetweenPoints(x, y, z, X, Y, Z) < DETONATION)
  415.     {
  416.         DestroyObject(OBJ[2]);
  417.         CreateExplosion(x, y, z, 10, 12.0);
  418.         SPVi(playerid, "z_Zahvat", -1);
  419.         in_proccess[target] = false;
  420.         foreach(new radarshik : Player)
  421.         {
  422.             if(IsPlayerInAnyVehicle(radarshik))
  423.             {
  424.                 new newcar = GetPlayerVehicleID(radarshik);
  425.                 if(newcar == ZRK[1])
  426.                 {
  427.                     SPVi(radarshik, "z_Sended", -1);
  428.                     break;
  429.                 }
  430.             }
  431.         }
  432.         SPVi(target, "z_Target", 0);
  433.         SCM(playerid, LIGHTBLUE, "Цель поражена!");
  434.         PlayerPlaySound(playerid, 5201, 0.0, 0.0, 0.0);
  435.         DestroyObject(OBJ[1]);
  436.         OBJ[1] = CreateObject(3267,0,0,-1000,0,0,0,100);
  437.         AttachObjectToVehicle(OBJ[1],
  438.         ZRK[2], 0.000000,-1.200000,0.824999,0.000000,0.000000,0.000000);
  439.         return true;
  440.     }
  441.     if(!IsPlayerConnected(target))
  442.     {
  443.         SCM(playerid, ORANGE, "Ваша цель покинула сервер, ракета дезактивирована.");
  444.         PlayerPlaySound(playerid, 21001, 0.0, 0.0, 0.0);
  445.         DestroyObject(OBJ[2]);
  446.         SPVi(playerid, "z_Zahvat", -1);
  447.         in_proccess[target] = false;
  448.         DestroyObject(OBJ[1]);
  449.         OBJ[1] = CreateObject(3267,0,0,-1000,0,0,0,100);
  450.         AttachObjectToVehicle(OBJ[1],
  451.         ZRK[2], 0.000000,-1.200000,0.824999,0.000000,0.000000,0.000000);
  452.         foreach(new radarshik : Player)
  453.         {
  454.             if(IsPlayerInAnyVehicle(radarshik))
  455.             {
  456.                 new newcar = GetPlayerVehicleID(radarshik);
  457.                 if(newcar == ZRK[1])
  458.                 {
  459.                     SPVi(radarshik, "z_Sended", -1);
  460.                     break;
  461.                 }
  462.             }
  463.         }
  464.         return true;
  465.     }
  466.     if(GetDistanceBetweenPoints(x, y, z, X, Y, Z) > MAX_RAD_DISTANCE)
  467.     {
  468.         SCM(playerid, ORANGE, "Ваша цель вне досягаемости, ракета дезактивирована.");
  469.         PlayerPlaySound(playerid, 21001, 0.0, 0.0, 0.0);
  470.         DestroyObject(OBJ[2]);
  471.         SPVi(playerid, "z_Zahvat", -1);
  472.         in_proccess[target] = false;
  473.         DestroyObject(OBJ[1]);
  474.         OBJ[1] = CreateObject(3267,0,0,-1000,0,0,0,100);
  475.         AttachObjectToVehicle(OBJ[1],
  476.         ZRK[2], 0.000000,-1.200000,0.824999,0.000000,0.000000,0.000000);
  477.         foreach(new radarshik : Player)
  478.         {
  479.             if(IsPlayerInAnyVehicle(radarshik))
  480.             {
  481.                 new newcar = GetPlayerVehicleID(radarshik);
  482.                 if(newcar == ZRK[1])
  483.                 {
  484.                     SPVi(radarshik, "z_Sended", -1);
  485.                     break;
  486.                 }
  487.             }
  488.         }
  489.         return true;
  490.     }
  491.     if(EN == true) SetTimerEx("MoveRocket", 100, false, "ii", playerid, target);
  492.     return true;
  493. }
  494. TakeMats(value) return CallRemoteFunction("TakeMatsValue", "d", value);
  495. GiveMatsValue()
  496. {
  497.     CallRemoteFunction("SendMatsValue", "", "");
  498.     return n_value;
  499. }
  500. forward SetMatsValue(val);
  501. public SetMatsValue(val)
  502. {
  503.     n_value = val;
  504.     return true;
  505. }
  506. class(playerid)
  507. {
  508.     new val = -1;
  509.     new newcar = GetPlayerVehicleID(playerid);
  510.     new model = GetVehicleModel(newcar);
  511.     if(model == 460) val = 1; // Hydroplan Skeemer
  512.     else if(model == 512) val = 1; // Cropduster
  513.     else if(model == 513) val = 1; // Stuntplane
  514.     else if(model == 593) val = 1; // Dodo
  515.     else if(model == 511) val = 1; // Beagle
  516.     else if(model == 519) val = 1; // Shamal
  517.     else if(model == 577) val = 1; // AT-400
  518.     else if(model == 553) val = 1; // Nevada
  519.     else if(model == 592) val = 1; // Andromada
  520.     else if(model == 476) val = 1; // Rustler Plane
  521.     else if(model == 520) val = 1; // Hydra
  522.     //------------------------------------------------//
  523.     else if(model == 469) val = 2; // Sparrow
  524.     else if(model == 487) val = 2; // Mavrick
  525.     else if(model == 488) val = 2; // SAN News Maverick
  526.     else if(model == 425) val = 2; // Hunter Helicopter
  527.     else if(model == 417) val = 2; // Leviathan
  528.     else if(model == 548) val = 2; // Cargobob
  529.     else if(model == 563) val = 2; // Raindance
  530.     else if(model == 447) val = 2; // Seasparrow
  531.     else if(model == 497) val = 2; // Police Maverick
  532.     return val;
  533. }
  534. //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& My Functions &&&&&&&&&&&&&&&&&&&&&&&&&&&//
  535. forward Fresher();
  536. public Fresher()
  537. {
  538.     foreach(new hallow : Player)
  539.     {
  540.         if(GPVi(hallow, "z_Spawned") == 1)
  541.         {
  542.             if(GPVi(hallow, "z_AntiFlood") > 0) mSPVi(hallow, "z_AntiFlood", 1);
  543.         }
  544.     }
  545.     return true;
  546. }
  547. //-------------------------------//
  548. public: OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart) return true;
  549. AllowVehicles()
  550. {
  551.     ZRK[0] = CreateVehicle(455, bp_X, bp_Y, bp_Z, bp_A, 120, 120, 60000); // Машина ПЗУ
  552.     ZRK[1] = CreateVehicle(578, rad_X, rad_Y, rad_Z, rad_A, 120, 120, 60000); // Машина Наводчик
  553.     ZRK[2] = CreateVehicle(573, zur_X, zur_Y, zur_Z, zur_A, 120, 120, 60000); // Машина СОУ
  554.     return true;
  555. }
  556. AllowObjects()
  557. {
  558.     // Радар на станции обнаружения и целеуказания "Купол"
  559.     OBJ[0] = CreateObject(1596,0,0,-1000,0,0,0,100);
  560.     AttachObjectToVehicle(OBJ[0],
  561.     ZRK[1], 0.000000,-1.875000,2.400000,0.000000,0.000000,899.102722);
  562.     // Самоходная огневая установка (СОУ)
  563.     OBJ[1] = CreateObject(3267,0,0,-1000,0,0,0,100);
  564.     AttachObjectToVehicle(OBJ[1],
  565.     ZRK[2], 0.000000,-1.200000,0.824999,0.000000,0.000000,0.000000);
  566.     return true;
  567. }
  568. public OnVehicleSpawn(vehicleid)
  569. {
  570.     if(vehicleid == ZRK[2])
  571.     {
  572.         DestroyObject(OBJ[1]);
  573.         OBJ[1] = CreateObject(3267,0,0,-1000,0,0,0,100);
  574.         AttachObjectToVehicle(OBJ[1],
  575.         ZRK[2], 0.000000,-1.200000,0.824999,0.000000,0.000000,0.000000);
  576.     }
  577.     return 1;
  578. }
  579. //------------------------------------------------------------------//
  580. WritePerVars(playerid) // Hear the NULL is a false result of var
  581. {
  582.     // Creating Intermediate PVars
  583.     SPVi(playerid, "z_MilitaryRang", 0); // Ранг в армии
  584.     SPVi(playerid, "z_Spawned", 0); // не заспавнен.
  585.     SPVi(playerid, "z_Cargo", 0); // груз.
  586.     SPVi(playerid, "z_AntiFlood", 0); // анти флуд
  587.     SPVi(playerid, "z_Target", 0); // Targeting
  588.     SPVi(playerid, "z_Timer", 0); // For radar timer
  589.     SPVi(playerid, "z_Zahvat", -1); // Target
  590.     SPVi(playerid, "z_Sended", -1); // Target ID
  591.     r1[playerid] = -1; r2[playerid] = -1; r3[playerid] = -1;
  592.     RadActive[playerid] = false; in_proccess[playerid] = false;
  593.     return true;
  594. }
  595. //---------------------------------- ZCMD - Командный блок ------------------------------------------------------- //
  596. CMD:tocargo(playerid, params[], help)
  597. {
  598.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  599.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  600.     if(!IsPlayerInAnyVehicle(playerid)) return true;
  601.     if(!Cargo(playerid))
  602.     {
  603.         if(GPVi(playerid, "z_AntiFlood") > 0) return SCM(playerid, BEZHEVOY, "Вы уже загружаетесь!");
  604.         new newcar = GetPlayerVehicleID(playerid);
  605.         if(newcar != ZRK[0]||GetPlayerVehicleSeat(playerid) != 0) return SCM(playerid, GREEN, "Вы должны сидеть за рулём машины ПЗУ!");
  606.         SetPlayerRaceCheckpoint(playerid, 1, chX, chY, chZ, chX, chY, chZ, 5.0);
  607.         SCM(playerid, LIGHTRED, "Следуйте к маркеру на миникарте.");
  608.         SPVi(playerid, "z_AntiFlood", 5);
  609.     }
  610.     else return SCM(playerid, GREEN, "Вы уже загрузились!");
  611.     return true;
  612. }
  613. /*CMD:hidedraws(playerid, params[], help)
  614. {
  615.     CallRemoteFunction("_FS_HidePlayerDraws", "i", playerid);
  616.     return true;
  617. }
  618. CMD:tobase(playerid, params[], help)
  619. {
  620.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  621.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  622.     SetPlayerPos(playerid, chX + 10.0, chY, chZ);
  623.     SCM(playerid, YELLOW, "In base!");
  624.     return true;
  625. }
  626. CMD:botlaunch(playerid, params[], help)
  627. {
  628.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  629.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  630.     Launch(playerid, botid);
  631.     SCM(playerid, YELLOW, "Launch!");
  632.     return true;
  633. }
  634. CMD:melaunch(playerid, params[], help)
  635. {
  636.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  637.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  638.     Launch(playerid, playerid);
  639.     SCM(playerid, YELLOW, "Launch!");
  640.     return true;
  641. }
  642. CMD:reload(playerid, params[], help)
  643. {
  644.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  645.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  646.     Missile = 4;
  647.     SCM(playerid, YELLOW, "Reloaded!");
  648.     return true;
  649. }*/
  650. CMD:airscan(playerid, params[], help)
  651. {
  652.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  653.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  654.     new newcar = GetPlayerVehicleID(playerid);
  655.     if(!IsPlayerInAnyVehicle(playerid)||newcar != ZRK[1]) return true;
  656.     if(RadActive[playerid] == true) return SCM(playerid, BEZHEVOY, "Вы уже отслеживаете цели!");
  657.     SCM(playerid, RED, "Отслеживание начато!"); RadActive[playerid] = true;
  658.     OON = SetTimerEx("RadarSystem", 1000, true, "i", playerid); SPVi(playerid, "z_Timer", 1);
  659.     return true;
  660. }
  661. CMD:targetsend(playerid, params[], help)
  662. {
  663.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  664.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  665.     new newcar = GetPlayerVehicleID(playerid);
  666.     if(GPVi(playerid, "z_AntiFlood") > 0) return SCM(playerid, BEZHEVOY, "Вы уже отправляли цель, подождите.");
  667.     if(!IsPlayerInAnyVehicle(playerid)||newcar != ZRK[1]) return true;
  668.     if(sscanf(params, "ud", params[0], params[1])) return SCM(playerid, WHITE, "Введите /targetsend [ID наводчика] [ID цели]");
  669.     if(GPVi(params[1], "z_Target") != 1) return SCM(playerid, BEZHEVOY, "Вы не обнаружевали такой цели!");
  670.     if(GPVi(params[0], "z_Spawned") == 0) return SCM(playerid, BEZHEVOY, "Этот игрок не авторизован!");
  671.     if(GPVi(playerid, "z_Sended") == params[1]) return SCM(playerid, BEZHEVOY, "Вы уже отправляли наводку на эту цель!");
  672.     if(GetDistanceBetweenPlayers(playerid, params[0]) > 20.0) return SCM(playerid, BEZHEVOY, "Дистанция между вами должна быть не более 20 метров!");
  673.     new necar = GetPlayerVehicleID(params[0]);
  674.     if(!IsPlayerInAnyVehicle(playerid)||necar != ZRK[2]) return SCM(playerid, YELLOW, "Игрок должен быть у самоходной огневой установке!");
  675.     r1[params[0]] = random(1000); r2[params[0]] = random(1000); r3[params[0]] = random(1000);
  676.     format(zcmd, sizeof(zcmd), "[Система Купол]: Наводка на цель %d:ID\n\
  677.     {00CCFF}Для захвата цели введите /azimut %d %d %d %d", params[0], params[1], r1[params[0]], r2[params[0]], r3[params[0]]);
  678.     SCM(params[0], YELLOW, zcmd); SCM(playerid, YELLOW, "Целеуказание отправлено наводчику.");
  679.     SPVi(playerid, "z_AntiFlood", 3); SPVi(playerid, "z_Sended", params[1]);
  680.     return true;
  681. }
  682. CMD:azimut(playerid, params[], help)
  683. {
  684.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  685.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  686.     new newcar = GetPlayerVehicleID(playerid);
  687.     if(GPVi(playerid, "z_Zahvat") == 1) return SCM(playerid, BEZHEVOY, "Вы уже захватили цель!");
  688.     if(GPVi(playerid, "z_AntiFlood") > 0) return SCM(playerid, BEZHEVOY, "Вы уже захвачиваете цель!");
  689.     if(!IsPlayerInAnyVehicle(playerid)||newcar != ZRK[2]) return true;
  690.     if(sscanf(params, "uddd", params[0], params[1], params[2], params[3]))
  691.     {
  692.         return SCM(playerid, WHITE, "Введите /azimut [ID цели] [код 1] [код 2] [код 3]");
  693.     }
  694.     if(GPVi(params[0], "z_Target") != 1)
  695.     {
  696.         return SCM(playerid, BEZHEVOY, "Вам не приходила наводка такой цели!");
  697.     }
  698.     if(params[1] != r1[playerid]||params[2] != r2[playerid]||params[3] != r3[playerid])
  699.     {
  700.         return SCM(playerid, BEZHEVOY, "Неверная координация!");
  701.     }
  702.     if(GPVi(params[0], "z_Spawned") == 0)
  703.     {
  704.         return SCM(playerid, BEZHEVOY, "Этот игрок не авторизован!");
  705.     }
  706.     if(GetDistanceBetweenPlayers(playerid, params[0]) > MAX_RAD_DISTANCE) return SCM(playerid, BEZHEVOY, "Цель вне досягаемости комплекса!");
  707.     SCM(playerid, GREEN, "Захват цели..."); SetTimerEx("Zahvat", 3000, false, "ii", playerid, params[0]);
  708.     SPVi(playerid, "z_AntiFlood", 3);
  709.     return true;
  710. }
  711. CMD:canceltarget(playerid, params[], help)
  712. {
  713.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  714.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  715.     new newcar = GetPlayerVehicleID(playerid);
  716.     if(!IsPlayerInAnyVehicle(playerid)||newcar != ZRK[2]) return SCM(playerid, BEZHEVOY, "Вы не в самоходной огневой установке!");
  717.     if(GPVi(playerid, "z_Zahvat") == 0) return SCM(playerid, BEZHEVOY, "Вы не захвачивали цель!");
  718.     SCM(playerid, BLUE, "Захват отменён."); SPVi(playerid, "z_Zahvat", -1);
  719.     return true;
  720. }
  721. CMD:preload(playerid, params[], help)
  722. {
  723.     if(GPVi(playerid, "z_Spawned") == 0) return true; // если мы не авторизованы то прекращаем выполнение команды.
  724.     if(!IsClientMilitary(playerid)) return true; // если мы не вояка то не выполняем код ниже.
  725.     if(!Cargo(playerid)) return SCM(playerid, BEZHEVOY, "Вы не загружали свой матовоз!");
  726.     if(GPVi(playerid, "z_AntiFlood") > 0) return SCM(playerid, BEZHEVOY, "Вы уже загружаете установку!");
  727.     new newcar = GetPlayerVehicleID(playerid);
  728.     if(!IsPlayerInAnyVehicle(playerid)||newcar != ZRK[0]) return SCM(playerid, BEZHEVOY, "Вы не в машине ПЗУ!");
  729.     foreach(new x : Player)
  730.     {
  731.         if(IsPlayerInAnyVehicle(x))
  732.         {
  733.             new necar = GetPlayerVehicleID(x);
  734.             if(necar == ZRK[2])
  735.             {
  736.                 if(GetDistanceBetweenPlayers(playerid, x) < 20.0)
  737.                 {
  738.                     if(Missile == 4) return SCM(playerid, RED, "Установка и так полностью заряжена!");
  739.                     new sabotage[34+1], bName[MAX_PLAYER_NAME];
  740.                     GetPlayerName(playerid, bName, sizeof(bName));
  741.                     format(sabotage, sizeof(sabotage), "Боец %s начал загрузку боеголовок.", bName);
  742.                     foreach(new xx : Player)
  743.                     if(GetDistanceBetweenPlayers(playerid, xx) <= 30.0) SCM(x, LIGHTGREEN, sabotage);
  744.                     SetTimerEx("Preload", 5000, false, "i", playerid);
  745.                     SCM(playerid, PINK, "Идёт погрузка в установку, подождите...");
  746.                     SPVi(playerid, "z_AntiFlood", 5);
  747.                     TogglePlayerControllable(playerid, false);
  748.                     break;
  749.                 }
  750.                 else
  751.                 {
  752.                     SCM(playerid, GREY, "Вы должны быть в радиусе 20 метров от установки!");
  753.                     return true;
  754.                 }
  755.             }
  756.         }
  757.     }
  758.     return true;
  759. }
  760. //^^^^^^^^^^^^^^^^^^^^^^^^^_____________HAPPY * AND ~!!!!!!!^^^^^^^^^^^^^^^^^^||
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement