freefiles

Untitled

May 10th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #pragma semicolon 1
  2.  
  3. #include <sourcemod>
  4. #include <sdktools_functions>
  5. #include <sdktools_engine>
  6. #include <sdktools_trace>
  7. #include <sdktools_tempents>
  8. #include <sdktools_tempents_stocks>
  9. #include <sdktools>
  10. #include <cstrike>
  11. #include <sdkhooks>
  12.  
  13. new g_BeamSprite;
  14. new g_HaloSprite;
  15. new g_ExplosionSprite;
  16. new g_SmokeSprite;
  17. new g_Glow;
  18. new g_Laser;
  19. new g_SteamSprite;
  20. new g_LightningSprite;
  21.  
  22. new Float:bspos[3];
  23. new Float:savebspos;
  24.  
  25. public Plugin:myinfo =
  26. {
  27.     name    = "GetCoords",
  28.     author  = "wS / World-Source.Ru",
  29.     version = "1.3"
  30. };
  31.  
  32.  
  33. public OnPluginStart()
  34. {
  35.     RegConsoleCmd("tesla", Tesla);
  36.     RegConsoleCmd("beam", Beam);
  37.     RegConsoleCmd("exp", Explosion);
  38.     RegConsoleCmd("spark", Spark);
  39.     RegConsoleCmd("smoke", Smoke);
  40.     RegConsoleCmd("glow", Glow);
  41.     RegConsoleCmd("splash", Splash);
  42.     RegConsoleCmd("laser", Laser);
  43.     RegConsoleCmd("cyl", Cyl);
  44.     RegConsoleCmd("lifecyl", Lifecyl);
  45.     RegConsoleCmd("conus", Conus);
  46.     RegConsoleCmd("dust", Dust);
  47.     RegConsoleCmd("mf", MuzzleFlash);
  48.     RegConsoleCmd("lightning", Lightning);
  49.     RegConsoleCmd("dc", DustClock);
  50.     RegConsoleCmd("sphere", Sphere);
  51.     RegConsoleCmd("bs", BrokeSphere);
  52.     RegConsoleCmd("cell", Cell);
  53.     RegConsoleCmd("atom", Atom);
  54.     RegConsoleCmd("fb", FireBall);
  55.     RegConsoleCmd("cube", Cube);
  56. }
  57.  
  58.  
  59. public OnMapStart() //Прекэшим спрайты и свечения
  60. {
  61.   g_BeamSprite = PrecacheModel("materials/sprites/glow08.vmt");
  62.   g_Laser = PrecacheModel("materials/sprites/laserbeam.vmt");
  63.   g_HaloSprite = PrecacheModel("materials/sprites/glow08.vmt");
  64.   g_ExplosionSprite = PrecacheModel("materials/sprites/sprite_fire01.vmt");
  65.   g_SmokeSprite = PrecacheModel( "sprites/smoke.vmt");
  66.   g_Glow = PrecacheModel("particle/particle_glow_10.vmt");  
  67.   g_SteamSprite = PrecacheModel("sprites/steam1.vmt");
  68.   g_LightningSprite = PrecacheModel("sprites/lgtning.vmt");
  69. }
  70.  
  71. public Action:Tesla(client, args) // Эффект тесла
  72. {
  73.             new Float:pos[3];
  74.   wS_GetLookPos(client, pos);
  75.  
  76.          new tesla = CreateEntityByName("point_tesla");  //Он делается с помощью создания entity объекта "point_tesla"
  77.          DispatchKeyValue(tesla, "m_flRadius", "100.0");  // Радиус 100 единиц
  78.          DispatchKeyValue(tesla, "m_SoundName", "DoSpark");  //Звук искр
  79.          DispatchKeyValue(tesla, "beamcount_min", "42");  // Минимальное Количество всплесков
  80.          DispatchKeyValue(tesla, "beamcount_max", "62");  //Максимальное
  81.          DispatchKeyValue(tesla, "texture", "sprites/physbeam.vmt");  // Текстура спрайта
  82.          DispatchKeyValue(tesla, "m_Color", "255 255 255");  //Цвет
  83.          DispatchKeyValue(tesla, "thick_min", "10.0");  
  84.          DispatchKeyValue(tesla, "thick_max", "11.0");
  85.          DispatchKeyValue(tesla, "lifetime_min", "0.3"); //Минимальное время жизни
  86.          DispatchKeyValue(tesla, "lifetime_max", "0.3");  //Максимальное время жизни
  87.          DispatchKeyValue(tesla, "interval_min", "0.1");
  88.          DispatchKeyValue(tesla, "interval_max", "0.2");
  89.              
  90.          DispatchSpawn(tesla); //Спавним наш "point_tesla"
  91.          TeleportEntity(tesla, pos, NULL_VECTOR, NULL_VECTOR); //И телепортируем на позицию прицела
  92.  
  93.              
  94.          AcceptEntityInput(tesla, "TurnOn");
  95.          AcceptEntityInput(tesla, "DoSpark");
  96.          return Plugin_Handled;
  97. }
  98.  
  99.  
  100.  
  101. public Action:Beam(client, args)  // Маяк
  102. {
  103.   new Float:pos[3];                                                                                             //pos - позиция
  104.   wS_GetLookPos(client, pos);// Получаем позицию прицела                                                        //10.0 - начальная диаметр,
  105.   TE_SetupBeamRingPoint(pos, 10.0, 1000.0, g_BeamSprite, g_HaloSprite, 0, 15, 1.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 1); //50.0 - конечная ширина, .
  106.   TE_SendToAll(); // Применяем                                                                                 //g_BeamSprite - спрайт маяка
  107.                                                                                                               //g_HaloSprite - спрайт свечения
  108.                                                                                                               //1.0 - время жизни маяка
  109.                                                                                                               //2.0 - ширина линии
  110.                                                                                                               //0.0 - колебания
  111.                                                                                                               //{255, 0, 0, 255} - цвет
  112.                                                                                                               //10 - скорость мерцания
  113.                                                                                                               //0 - флаги. Я проверял, ничего не меняется, если изменять.
  114.   // ВНИМАНИЕ!!!! ЕСЛИ НАЧАЛЬНЫЙ РАДИУС И КОНЕЧНЫЙ РАДИУС МАЯКА ОДИНАКОВЫ, ТО МАЯК РАБОТАТЬ НЕ БУДЕТ!!!! Так же и с лазером!
  115.   return Plugin_Handled;
  116. }
  117.  
  118.  
  119.  
  120. public Action:Explosion(client, args) // Взрыв
  121. {
  122.   new Float:pos[3];
  123.   wS_GetLookPos(client, pos);                                       //pos - точка взрыва
  124.    TE_SetupExplosion(pos, g_ExplosionSprite, 10.0, 1, 0, 100, 5000); //g_ExplosionSprite - прекэшнутый спрайт взрыва
  125.    TE_SendToAll();  // Применяем                                   //10.0 - растяжение спрайта
  126.                                                                   //100 - радиус взрыва
  127.                                                                   //5000 - магнитуда взрыва
  128.     return Plugin_Handled;                                                           
  129. }
  130.  
  131.  
  132.  
  133. public Action:Spark(client, args) //Искры (падают сверху вниз в нашем случае)
  134. {
  135.   new Float:pos[3];
  136.   wS_GetLookPos(client, pos); // Получаем нижнюю позицию
  137.   new Float:two[3];
  138.   two[2] = pos [2] + 10.0; // Получаем верхнюю позицию (добавляем к нижней 10 единиц)
  139.  
  140.    TE_SetupSparks(pos, two, 500, 100); // pos - стартовая позиция
  141.                                      // two - конечная позиция (направление)
  142.                                      // 500 - частота искр
  143.                                      // 100 - длина следа
  144.    TE_SendToAll(); // Применяем
  145.    return Plugin_Handled;
  146. }
  147.  
  148.  
  149.  
  150. public Action:Smoke(client, args) // Дым
  151. {
  152.   new Float:pos[3];
  153.   wS_GetLookPos(client, pos);
  154.   TE_SetupSmoke(pos, g_SmokeSprite, 100.0, 10); // pos - Позиция дыма
  155.                                               // g_SmokeSprite - спрайт дыма
  156.                                               // 100.0 растяжение спрайта дыма
  157.                                               // 10 - частота кадров анимации в секунду
  158.   TE_SendToAll(); // Применяем
  159.   return Plugin_Handled;
  160. }
  161.  
  162.  
  163.  
  164. public Action:Glow(client, args) // Свечение
  165. {
  166.   new Float:pos[3];
  167.   wS_GetLookPos(client, pos);
  168.   TE_SetupGlowSprite(pos, g_Glow, 5.0, 5.0, 20); //pos - позиция
  169.                                               //g_Glow - спрайт
  170.                                               //5.0 - время жизни
  171.                                               //5.0 - размер
  172.                                               //20 - яркость
  173.   TE_SendToAll();  // Применяем
  174.   return Plugin_Handled;
  175. }
  176.  
  177.  
  178.  
  179. public Action:Splash(client, args) //Энергетический всплеск (по-другому и не назовешь :D)
  180. {
  181.   new Float:pos[3];
  182.   wS_GetLookPos(client, pos);
  183.   TE_SetupEnergySplash(pos,pos, false);  // pos - начальная позиция
  184.                                        // pos - конечная позиция (направление)
  185.                                        // fasle - не взрывается (true - взрывается)
  186.   TE_SendToAll();  // Применяем
  187.   return Plugin_Handled;
  188. }
  189.  
  190.  
  191.  
  192. public Action:Laser(client, args) // Лазер
  193. {
  194.     decl Float:pos[3], Float:clientpos[3];
  195.     wS_GetLookPos(client, pos);
  196.     GetClientEyePosition(client, clientpos); // Получаем позицию головы                // clientpos - начальная позиция,
  197.   TE_SetupBeamPoints(clientpos, pos, g_Laser,0,0,0,5.0,3.0,3.0,10,0.0,{255, 0, 0, 255},30); // pos - конечная позиция
  198.   TE_SendToAll(0.0); // Применяем                                                        // g_laser - спрайт
  199. return Plugin_Handled;
  200.   }                                                                                     // 0 - спрайт свечения (нет)
  201.                                                                                       // 0 - нач. слайд анимации
  202.                                                                                       // 0 - скорость анимации
  203.                                                                                       // 5.0 - время жизни
  204.                                                                                       // 3.0 - нач. ширина
  205.                                                                                       // 3.0 - кон. ширина
  206.                                                                                       // 10 - время затухания
  207.                                                                                       // 0.0 - амплитуда колебаний
  208.                                                                                       // {255, 0, 0, 255} - цвет
  209.                                                                                       // 30 - скорость
  210.                                                                                      
  211. public Action:Conus(client, args) // Конус
  212. {
  213.   new Float:pos[3];
  214.   wS_GetLookPos(client, pos);
  215.   for(new Float:i = 1.0; i <= 150.0; i = i + 1.0) // Максимальный диаметр у нас будет 150 единиц. Выполняем цикл:
  216.   {                                           // Пока i (текущий диаметр) меньше 150 ед (макс. диаметр), то создаем маяк и увеличиваем диаметр на 1 ед.
  217.   TE_SetupBeamRingPoint(pos, i, i+1.0, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0); // i - начальная ширина, i+1.0 - конечная
  218.   TE_SendToAll(); // Применяем
  219.   pos[2] = pos[2] + 1.0; //Увеличиваем Z координату на 1, чтобы маяки не накладывались друг на друга.
  220.   }  // И так делаем, пока диаметр не достигнет 150 ед.
  221.   return Plugin_Handled;
  222. }
  223.  
  224.  
  225.  
  226. public Action:Cyl(client, args) //Цилиндр
  227. {
  228.   new Float:pos[3];
  229.   wS_GetLookPos(client, pos);
  230.  for (new i = 1; i <= 150; i++) // Создаем цикл. На этот раз радиус один. i просто счетчик высоты. Цилиндр будет высотой 150 единиц.
  231.  {                           // Создаем маяк (кольцо) с нач. диаметром 50.0 ед. и конечным 51.0 единица, чтобы все работало.
  232.   TE_SetupBeamRingPoint(pos, 50.0, 51.0, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 2.0, 0.0, {255, 255, 0, 255}, 10, 0);
  233.   TE_SendToAll(); // Применяем
  234.   pos[2] = pos[2] + 1.0; // Добавляем + 1 единицу к координате Z, чтобы фигура росла в высоту.
  235.   }
  236.   return Plugin_Handled;
  237. }
  238.  
  239.  
  240.  
  241. public Action:Dust(client, args) // Песчаное облако
  242. {
  243.   new Float:pos[3];
  244.   wS_GetLookPos(client, pos);
  245.   TE_SetupDust(pos,pos, 50.0, 0.5); //pos - начальная позиция
  246.                                   //pos - позиция направления (у нас на месте)
  247.                                   //50.0 - размер облака
  248.                                   //0.5 - скорость частиц в облаке.
  249.   TE_SendToAll();  // Применяем
  250.   return Plugin_Handled;
  251. }
  252.  
  253.  
  254.  
  255. public Action:Lifecyl(client, args) // Пульсирующий цилиндр
  256. {                                  // Так же, как и цилиндр, только есть разница диаметров больше, чтобы маяк пульсировал.
  257.   new Float:pos[3];
  258.   wS_GetLookPos(client, pos);
  259.  for (new i = 1; i <= 150; i++)
  260.  {
  261.   TE_SetupBeamRingPoint(pos, 50.0, 70.0, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 2.0, 0.0, {255, 255, 0, 255}, 10, 0);
  262.   TE_SendToAll(); // Применяем
  263.   pos[2] = pos[2] + 1.0;
  264.   }
  265.   return Plugin_Handled;
  266. }
  267.  
  268.  
  269.  
  270. public Action:MuzzleFlash(client, args) // Песчаное облако
  271. {
  272.   new Float:pos[3];
  273.   wS_GetLookPos(client, pos);
  274.   TE_SetupMuzzleFlash(pos,pos, 10.0, 2); // pos - начальная позиция
  275.                                        // pos - позиция направления
  276.                                        // 10.0 - увеличение
  277.                                        // 1 - Тип вспышки
  278.   TE_SendToAll();  // Применяем         // Типы: 1 - несколько светящихся шаров, 2 - что-то вроде Всплеска энергии, 3 - у меня не работает, 4 - несколько фиолетовых импульсов,
  279.   return Plugin_Handled;
  280. }
  281.  
  282.  
  283.  
  284. public Action:DustClock(client, args) // Двойной конус (в форме песочных часов)
  285. {
  286.   new Float:pos[3];
  287.   wS_GetLookPos(client, pos); //Будем создавать через каждые 5 единиц высоты статичный (не двигающийся) маяк
  288.                                                                                                                // Он будет жить 15.0 секунд
  289.   TE_SetupBeamRingPoint(pos, 63.0, 63.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0); //Первый маяк с максимальным диаметром и минимальной высотой (63.0 и высота позиции)
  290.   TE_SendToAll();  // Применяем
  291.   pos[2] = pos[2] + 5.0; // Через каждый маяк увеличиваем высоту на 5 единиц и диаметр на 5.0 единиц
  292.   TE_SetupBeamRingPoint(pos, 58.0, 58.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  293.   TE_SendToAll();  // Применяем  
  294.   pos[2] = pos[2] + 5.0;
  295.   TE_SetupBeamRingPoint(pos, 53.0, 53.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  296.   TE_SendToAll();  // Применяем
  297.   pos[2] = pos[2] + 5.0;
  298.   TE_SetupBeamRingPoint(pos, 48.0, 48.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  299.   TE_SendToAll();  // Применяем
  300.   pos[2] = pos[2] + 5.0;
  301.   TE_SetupBeamRingPoint(pos, 43.0, 43.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  302.   TE_SendToAll();  // Применяем
  303.   pos[2] = pos[2] + 5.0;
  304.   TE_SetupBeamRingPoint(pos, 38.0, 38.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  305.   TE_SendToAll();  // Применяем
  306.   pos[2] = pos[2] + 5.0;
  307.   TE_SetupBeamRingPoint(pos, 33.0, 33.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  308.   TE_SendToAll();  // Применяем
  309.   pos[2] = pos[2] + 5.0;
  310.   TE_SetupBeamRingPoint(pos, 28.0, 28.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  311.   TE_SendToAll();  // Применяем
  312.   pos[2] = pos[2] + 5.0;
  313.   TE_SetupBeamRingPoint(pos, 23.0, 23.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  314.   TE_SendToAll();  // Применяем
  315.   pos[2] = pos[2] + 5.0;
  316.   TE_SetupBeamRingPoint(pos, 18.0, 18.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  317.   TE_SendToAll();  // Применяем
  318.   pos[2] = pos[2] + 5.0;
  319.   TE_SetupBeamRingPoint(pos, 13.0, 13.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  320.   TE_SendToAll();  // Применяем
  321.   pos[2] = pos[2] + 5.0;
  322.   TE_SetupBeamRingPoint(pos, 8.0, 8.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  323.   TE_SendToAll();  // Применяем
  324.   pos[2] = pos[2] + 5.0;
  325.   TE_SetupBeamRingPoint(pos, 3.0, 3.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0); //Средний маяк с минимальным диаметром (3.0) и средней высотой
  326.   TE_SendToAll();  // Применяем
  327.   pos[2] = pos[2] + 5.0;
  328.   TE_SetupBeamRingPoint(pos, 8.0, 8.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  329.   TE_SendToAll();  // Применяем
  330.   pos[2] = pos[2] + 5.0;
  331.   TE_SetupBeamRingPoint(pos, 13.0, 13.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  332.   TE_SendToAll();  // Применяем
  333.   pos[2] = pos[2] + 5.0;
  334.   TE_SetupBeamRingPoint(pos, 18.0, 18.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  335.   TE_SendToAll();  // Применяем
  336.   pos[2] = pos[2] + 5.0;
  337.   TE_SetupBeamRingPoint(pos, 23.0, 23.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  338.   TE_SendToAll();  // Применяем
  339.   pos[2] = pos[2] + 5.0;
  340.   TE_SetupBeamRingPoint(pos, 28.0, 28.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  341.   TE_SendToAll();  // Применяем
  342.   pos[2] = pos[2] + 5.0;
  343.   TE_SetupBeamRingPoint(pos, 33.0, 33.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  344.   TE_SendToAll();  // Применяем
  345.   pos[2] = pos[2] + 5.0;
  346.   TE_SetupBeamRingPoint(pos, 38.0, 38.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  347.   TE_SendToAll();  // Применяем
  348.   pos[2] = pos[2] + 5.0;
  349.   TE_SetupBeamRingPoint(pos, 43.0, 43.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  350.   TE_SendToAll();  // Применяем
  351.   pos[2] = pos[2] + 5.0;
  352.   TE_SetupBeamRingPoint(pos, 48.0, 48.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  353.   TE_SendToAll();  // Применяем
  354.   pos[2] = pos[2] + 5.0;
  355.   TE_SetupBeamRingPoint(pos, 53.0, 53.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  356.   TE_SendToAll();  // Применяем
  357.   pos[2] = pos[2] + 5.0;
  358.   TE_SetupBeamRingPoint(pos, 58.0, 58.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0);
  359.   TE_SendToAll();  // Применяем
  360.   pos[2] = pos[2] + 5.0;
  361.   TE_SetupBeamRingPoint(pos, 63.0, 63.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 0, 0, 255}, 10, 0); // Последний маяк с максимальным диаметрои (63.0) и высотой.
  362.   TE_SendToAll();  // Применяем
  363.   return Plugin_Handled;
  364. }
  365.  
  366.  
  367.  
  368. public Action:Sphere(client, args) // Сфера
  369. {
  370.   new Float:pos[3];
  371.   wS_GetLookPos(client, pos); //Будем создавать через каждые 6 единиц высоты статичный (не двигающийся) маяк.
  372.  // Он будет жить 15.0 секунд. Т.к. сфера описывается квадратичной функцией, то каждый следующий диаметр будет больше предыдущего на половину прироста. Показываю на примере
  373.   TE_SetupBeamRingPoint(pos, 12.0, 12.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0);  //Это нижняя точка/маяк. Его я выбрал сам. Просто, чтобы
  374.   TE_SendToAll();  // Применяем                                                                                  //красиво смотрелся. Вот сейчас внимание.
  375.   pos[2] = pos[2] + 6;
  376.   TE_SetupBeamRingPoint(pos, 43.0, 43.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0);// Я взял прирост диаметра = 20.0 единиц
  377.   TE_SendToAll();  // Применяем                                                                                // Диаметр 2 маяка взял 43.0 (сам взял).
  378.   pos[2] = pos[2] + 6;
  379.   TE_SetupBeamRingPoint(pos, 63.0, 63.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0); //Тогда диаметр 3 маяка будет = диаметру 2 маяка + прирост (43.0 + 20.0 = 63.0)
  380.   TE_SendToAll();  // Применяем                                                                                 //!!! После установки каждого маяка делите прирост на 2 !!!
  381.   pos[2] = pos[2] + 6;
  382.   TE_SetupBeamRingPoint(pos, 73.0, 73.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0); //Диаметр 4 маяка будет = диаметр 3 маяка + прирост/2 = 63.0 + 10.0 = 73.0.  
  383.   TE_SendToAll();  // Применяем                                                                                   Думаю, принцип вы поняли.
  384.   pos[2] = pos[2] + 6;
  385.   TE_SetupBeamRingPoint(pos, 78.0, 78.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0); //Примечание: делаем конечный диаметр по формуле: начальный диаметр + 0.1 ,
  386.   TE_SendToAll();  // Применяем                                                                                   Чтобы диаметры не сильно отличались и все работало.
  387.   pos[2] = pos[2] + 6;
  388.   TE_SetupBeamRingPoint(pos, 80.5, 80.6, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0);
  389.   TE_SendToAll();  // Применяем
  390.   pos[2] = pos[2] + 6;
  391.   TE_SetupBeamRingPoint(pos, 81.75, 81.85, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0); //Делать маяков Вы можете, сколько хотите. Я делал, пока прирост не стал = 1.25
  392.   TE_SendToAll();  // Применяем
  393.   pos[2] = pos[2] + 6;
  394.   TE_SetupBeamRingPoint(pos, 80.5, 80.6, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0);//Тут уже идем в обратную сторону. Увеличиваем прирост вдвое и от предыдущего диаметра
  395.   TE_SendToAll();  // Применяем                                                                                //отнимаем прирост
  396.   pos[2] = pos[2] + 6;
  397.   TE_SetupBeamRingPoint(pos, 78.0, 78.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0);
  398.   TE_SendToAll();  // Применяем
  399.   pos[2] = pos[2] + 6;                                                                                           //высоту я увеличивал на 6 единиц. Чем больше увеличение высоты, тем более вытянутым
  400.   TE_SetupBeamRingPoint(pos, 73.0, 73.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0);//будет шар. ВНИМАНИЕ!!! Сферу можете увеличивать, увеличивая начальный прирост, =>
  401.   TE_SendToAll();  // Применяем                                                                                //считать все надо будет по новой. Увеличивая сферу, не забывайте увеличивать прирост
  402.   pos[2] = pos[2] + 6;                                                                                          //высоты пропорционально увеличению прироста. Например, Вы увыеличили прирост с 20.0 (как было)
  403.   TE_SetupBeamRingPoint(pos, 63.0, 63.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0);//до 40.0 (вдвое больше). Тогда прирост высоты должен увеличиться с 6 (было) до 12 (вдвое больше)
  404.   TE_SendToAll();  // Применяем
  405.   pos[2] = pos[2] + 6;
  406.   TE_SetupBeamRingPoint(pos, 43.0, 43.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0);
  407.   TE_SendToAll();  // Применяем
  408.   pos[2] = pos[2] + 6;
  409.   TE_SetupBeamRingPoint(pos, 12.0, 12.1, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 1.0, 0.0, {255, 0, 0, 255}, 10, 0);  //Это верхний маяк. Его я тоже выбрал сам. Так смотрелось наиболее красиво для данного
  410.   TE_SendToAll();  // Применяем  
  411. return Plugin_Handled;  //размера сферы. Думаю, что объяснил понятно) Как мог)
  412. }
  413.  
  414.  
  415.  
  416. public Action:BrokeSphere(client, args) // Разрывающаяся Сфера. Делаю на примере сферы выше.
  417. {
  418.   wS_GetLookPos(client, bspos);  //Придумал интересный эффект разрыва сферы. Суть проста: Делаем сферу, потом на ее месте делаем новую сферу, но конечные диаметры маяков увеличиваем.
  419.  
  420.   savebspos = bspos[2]; // Сохраняем позицию высоты, чтобы создать разрыв на этом месте.
  421.  
  422.   TE_SetupBeamRingPoint(bspos, 12.0, 12.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0); //Чтобы сфера как бы "разлеталась".
  423.   TE_SendToAll();  // Применяем                                                                                //Можно добавить эффект свечения (glow) в центр, если нужно)
  424.   bspos[2] = bspos[2] + 6;
  425.   TE_SetupBeamRingPoint(bspos, 43.0, 43.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  426.   TE_SendToAll();  // Применяем                                                                                
  427.   bspos[2] = bspos[2] + 6;
  428.   TE_SetupBeamRingPoint(bspos, 63.0, 63.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  429.   TE_SendToAll();  // Применяем                                                                                
  430.   bspos[2] = bspos[2] + 6;
  431.   TE_SetupBeamRingPoint(bspos, 73.0, 73.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  432.   TE_SendToAll();  // Применяем                                                                                
  433.   bspos[2] = bspos[2] + 6;
  434.   TE_SetupBeamRingPoint(bspos, 78.0, 78.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  435.   TE_SendToAll();  // Применяем                                                                                  
  436.   bspos[2] = bspos[2] + 6;
  437.   TE_SetupBeamRingPoint(bspos, 80.5, 80.6, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  438.   TE_SendToAll();  // Применяем
  439.   bspos[2] = bspos[2] + 6;
  440.   TE_SetupBeamRingPoint(bspos, 81.75, 81.85, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  441.   TE_SendToAll();  // Применяем
  442.   bspos[2] = bspos[2] + 6;
  443.   TE_SetupBeamRingPoint(bspos, 80.5, 80.6, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  444.   TE_SendToAll();  // Применяем                                                                                
  445.   bspos[2] = bspos[2] + 6;
  446.   TE_SetupBeamRingPoint(bspos, 78.0, 78.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  447.   TE_SendToAll();  // Применяем
  448.   bspos[2] = bspos[2] + 6;                                                                                          
  449.   TE_SetupBeamRingPoint(bspos, 73.0, 73.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  450.   TE_SendToAll();  // Применяем                                                                                
  451.   bspos[2] = bspos[2] + 6;                                                                                          
  452.   TE_SetupBeamRingPoint(bspos, 63.0, 63.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  453.   TE_SendToAll();  // Применяем
  454.   bspos[2] = bspos[2] + 6;
  455.   TE_SetupBeamRingPoint(bspos, 43.0, 43.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  456.   TE_SendToAll();  // Применяем
  457.   bspos[2] = bspos[2] + 6;
  458.   TE_SetupBeamRingPoint(bspos, 12.0, 12.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0); //Создали сферу. Создаем таймер на время действия сферы, чтобы поймать
  459.   TE_SendToAll();  // Применяем                                                                                //момент ее исчезновения.
  460.   CreateTimer(5.0, Broke, client);
  461.   return Plugin_Handled;
  462. }
  463.  
  464.  
  465.  
  466. public Action:Broke(Handle:timer, any:client) //По истечению таймера создаем новую сферу с увеличенным конечным диаметром
  467. {
  468.  bspos[2] = savebspos; //Восстанавливаем позицию высоты по сохраненной, чтобы создать сферу на этом же месте.
  469.   TE_SetupBeamRingPoint(bspos, 12.0, 500.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0); //Чтобы сфера как бы "разлеталась".
  470.   TE_SendToAll();  // Применяем                                                                              
  471.   bspos[2] = bspos[2] + 6;
  472.   TE_SetupBeamRingPoint(bspos, 43.0, 531.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0); // Важно сохранять разницу между диаметрами соседних маяков
  473.   TE_SendToAll();  // Применяем                                                                                 //Чтобы сфера не разлеталась однобоко.
  474.   bspos[2] = bspos[2] + 6;
  475.   TE_SetupBeamRingPoint(bspos, 63.0, 551.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  476.   TE_SendToAll();  // Применяем                                                                                
  477.   bspos[2] = bspos[2] + 6;
  478.   TE_SetupBeamRingPoint(bspos, 73.0, 561.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0); // По своему усмотрению можете побаловаться с амплитудой (0.0)
  479.   TE_SendToAll();  // Применяем                                                                                
  480.   bspos[2] = bspos[2] + 6;
  481.   TE_SetupBeamRingPoint(bspos, 78.0, 566.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  482.   TE_SendToAll();  // Применяем                                                                                  
  483.   bspos[2] = bspos[2] + 6;
  484.   TE_SetupBeamRingPoint(bspos, 80.5, 568.6, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  485.   TE_SendToAll();  // Применяем
  486.   bspos[2] = bspos[2] + 6;
  487.   TE_SetupBeamRingPoint(bspos, 81.75, 569.85, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  488.   TE_SendToAll();  // Применяем
  489.   bspos[2] = bspos[2] + 6;
  490.   TE_SetupBeamRingPoint(bspos, 80.5, 568.6, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  491.   TE_SendToAll();  // Применяем                                                                                
  492.   bspos[2] = bspos[2] + 6;
  493.   TE_SetupBeamRingPoint(bspos, 78.0, 566.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  494.   TE_SendToAll();  // Применяем
  495.   bspos[2] = bspos[2] + 6;                                                                                          
  496.   TE_SetupBeamRingPoint(bspos, 73.0, 561.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  497.   TE_SendToAll();  // Применяем                                                                                
  498.   bspos[2] = bspos[2] + 6;                                                                                        
  499.   TE_SetupBeamRingPoint(bspos, 63.0, 551.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  500.   TE_SendToAll();  // Применяем
  501.   bspos[2] = bspos[2] + 6;
  502.   TE_SetupBeamRingPoint(bspos, 43.0, 531.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  503.   TE_SendToAll();  // Применяем
  504.   bspos[2] = bspos[2] + 6;
  505.   TE_SetupBeamRingPoint(bspos, 12.0, 500.1, g_BeamSprite, g_HaloSprite, 0, 15, 5.0, 1.0, 0.0, {255, 0, 0, 255}, 5, 0);
  506.  
  507.   bspos[0] = 0.0; //зануляем все позиции (на всякий случай)
  508.   bspos[1] = 0.0;
  509.   bspos[2] = 0.0;
  510.   savebspos = 0.0;
  511.   return Plugin_Handled;
  512. }
  513.  
  514.  
  515.  
  516. public Action:Lightning(client, args) //Молния
  517. {
  518.   new Float:pos[3];
  519.   wS_GetLookPos(client, pos);
  520.  
  521.  
  522.   new randomx = GetRandomInt(-500, 500);  // Получаем случайные позиции Х и У, чтобы молния не была однобокой
  523.   new randomy = GetRandomInt(-500, 500);
  524.  
  525.   //Получаем верхнюю точку молнии. Она будет рандомная по Х и У и выше нижней позиции на 800, чтобы молния била сверху вниз
  526.   new Float:startpos[3];
  527.   startpos[0] = pos[0] + randomx;
  528.   startpos[1] = pos[1] + randomy;
  529.   startpos[2] = pos[2] + 800;
  530.  
  531.   //Делаем  цвет молнии (у нас синий)
  532.   new color[4] = {0, 0, 255, 255};
  533.  
  534.   //Делаем направление искр (к началу координат карты)
  535.   new Float:dir[3] = {0.0, 0.0, 0.0};
  536.  
  537.   TE_SetupBeamPoints(startpos, pos, g_LightningSprite, 0, 0, 0, 0.2, 20.0, 10.0, 0, 2.0, color, 3); //Делаем лазер с амплитудой в 2 единицы
  538.   TE_SendToAll();  // Применяем
  539.  
  540.     TE_SetupBeamPoints(startpos, pos, g_LightningSprite, 0, 0, 0, 0.2, 10.0, 5.0, 0, 1.0, {255, 255, 255, 255}, 3); //Делаем второй лазер (белый) с амплитудой в 1 единицу
  541.   TE_SendToAll();  // Применяем                                                                               //И в 2 раза уже, чтобы молния смотрелась органично
  542.  
  543.   TE_SetupSparks(pos, dir, 5000, 1000);  //Делаем искры
  544.   TE_SendToAll();  // Применяем
  545.  
  546.   TE_SetupEnergySplash(pos, dir, false); //Делаем всплеск энергии
  547.   TE_SendToAll();  // Применяем
  548.  
  549.   TE_SetupSmoke(pos, g_SteamSprite, 5.0, 10); //Делаем дым
  550.   TE_SendToAll();  // Применяем
  551.  
  552.   //Можно добавить маяк, если хотите. TE_SetupBeamRingPoint(pos, 10.0, 70.0, g_BeamSprite, g_HaloSprite, 0, 15, 15.0, 2.0, 0.0, {255, 255, 0, 255}, 10, 0);
  553.   //                                  TE_SendToAll();  
  554.   return Plugin_Handled;
  555. }
  556.  
  557.  
  558.  
  559. public Action:Cell(client, args) //Восьмигранная клетка
  560. {
  561.       new Float:center[3], Float:one[3], Float:two[3], Float:three[3], Float:four[3], Float:five[3], Float:six[3], Float:seven[3], Float:eight[3]; // нижние точки
  562.      
  563.       //Создаем 8 переменных для 8 точек. Я не использовал цикл, потому что мне нужна каждая позиция отдельно, чтобы их потом связать линиями.
  564.      
  565.     wS_GetLookPos(client, center);  
  566.        
  567.     new Num      = 8; // Кол-во точек вокруг заданной позиции
  568.    
  569.     new Degrees = 360;  //Градусов в круге
  570.     new Coeff    = 0;  //коэффициент
  571.     new Mul      = 50;  
  572.    
  573.     new Float:oneh[3], Float:twoh[3], Float:threeh[3], Float:fourh[3], Float:fiveh[3], Float:sixh[3], Float:sevenh[3], Float:eighth[3]; //Создаем переменные верхних позиций
  574.    
  575.     new Float:point;
  576.    
  577.      point = DegToRad(float(0 * (Degrees / Num) + Coeff));
  578.      
  579.      //вычисляем верхнюю первую точку
  580.      
  581.      oneh[0] = center[0] + Sine(point) * Mul;  //Честно говоря, не знаю, как он вычисляет. В геометрии не силен. Спросите у хвостега, это его код.
  582.      oneh[1] = center[1] + Cosine(point) * Mul;
  583.      oneh[2] = center[2] + 100.0; // 50.0 - Высота клетки
  584.      
  585.      one[0] = oneh[0]; //Получаем нижнюю точку
  586.      one[1] = oneh[1];
  587.      one[2] = center[2]; //Т.к. она нижняя, то выысота будет, как у центра.
  588.      
  589.      TE_SetupBeamPoints(one, oneh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30); //Создаем вертикальные лазеры, соединяющие 2 наши точки.
  590.      TE_SendToAll();
  591.      
  592.  
  593.      
  594.      point = DegToRad(float(1 * (Degrees / Num) + Coeff));
  595.      
  596.          //вычисляем 2 точку
  597.          
  598.      twoh[0] = center[0] + Sine(point) * Mul;
  599.      twoh[1] = center[1] + Cosine(point) * Mul;
  600.      twoh[2] = center[2] + 100.0;
  601.      
  602.      two[0] = twoh[0];
  603.      two[1] = twoh[1];
  604.      two[2] = center[2];
  605.      
  606.      TE_SetupBeamPoints(two, twoh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30); //Создаем вертикальные лазеры, соединяющие 2 наши точки.
  607.      TE_SendToAll();
  608.      
  609.      
  610.      point = DegToRad(float(2 * (Degrees / Num) + Coeff));
  611.        
  612.      //вычисляем 3 точку  
  613.        
  614.      threeh[0] = center[0] + Sine(point) * Mul;
  615.      threeh[1] = center[1] + Cosine(point) * Mul;
  616.      threeh[2] = center[2] + 100.0;
  617.      
  618.      three[0] = threeh[0];
  619.      three[1] = threeh[1];
  620.      three[2] = center[2];
  621.      
  622.      TE_SetupBeamPoints(three, threeh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  623.      TE_SendToAll();
  624.      
  625.      point = DegToRad(float(3 * (Degrees / Num) + Coeff));
  626.        
  627.         //вычисляем 4 точку
  628.        
  629.      fourh[0] = center[0] + Sine(point) * Mul;
  630.      fourh[1] = center[1] + Cosine(point) * Mul;
  631.      fourh[2] = center[2] + 100.0;
  632.      
  633.      four[0] = fourh[0];
  634.      four[1] = fourh[1];
  635.      four[2] = center[2];
  636.      
  637.      TE_SetupBeamPoints(four, fourh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  638.      TE_SendToAll();
  639.      
  640.      
  641.      
  642.      point = DegToRad(float(4 * (Degrees / Num) + Coeff));
  643.        
  644.         //вычисляем 5 точку
  645.        
  646.      fiveh[0] = center[0] + Sine(point) * Mul;
  647.      fiveh[1] = center[1] + Cosine(point) * Mul;
  648.      fiveh[2] = center[2] + 100.0;
  649.      
  650.      five[0] = fiveh[0];
  651.      five[1] = fiveh[1];
  652.      five[2] = center[2];
  653.      
  654.      TE_SetupBeamPoints(five, fiveh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  655.      TE_SendToAll();
  656.      
  657.      
  658.      point = DegToRad(float(5 * (Degrees / Num) + Coeff));
  659.        
  660.         //вычисляем 6 точку
  661.        
  662.      sixh[0] = center[0] + Sine(point) * Mul;
  663.      sixh[1] = center[1] + Cosine(point) * Mul;
  664.      sixh[2] = center[2] + 100.0;
  665.      
  666.      six[0] = sixh[0];
  667.      six[1] = sixh[1];
  668.      six[2] = center[2];
  669.      
  670.      TE_SetupBeamPoints(six, sixh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  671.      TE_SendToAll();
  672.      
  673.      
  674.      point = DegToRad(float(6 * (Degrees / Num) + Coeff));
  675.        
  676.         //вычисляем 7 точку
  677.        
  678.      sevenh[0] = center[0] + Sine(point) * Mul;
  679.      sevenh[1] = center[1] + Cosine(point) * Mul;
  680.      sevenh[2] = center[2] + 100.0;
  681.      
  682.      seven[0] = sevenh[0];
  683.      seven[1] = sevenh[1];
  684.      seven[2] = center[2];
  685.      
  686.      TE_SetupBeamPoints(seven, sevenh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  687.      TE_SendToAll();
  688.      
  689.      
  690.      
  691.      point = DegToRad(float(7 * (Degrees / Num) + Coeff));
  692.        
  693.          //вычисляем 8 точку
  694.        
  695.      eighth[0] = center[0] + Sine(point) * Mul;
  696.      eighth[1] = center[1] + Cosine(point) * Mul;
  697.      eighth[2] = center[2] + 100.0;
  698.      
  699.      eight[0] = eighth[0];
  700.      eight[1] = eighth[1];
  701.      eight[2] = center[2];
  702.      
  703.      TE_SetupBeamPoints(eight, eighth, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  704.      TE_SendToAll();
  705.      
  706.      //Соединяем верхние и нижние точки друг с другом, чтобы получилась "крыша"
  707.      TE_SetupBeamPoints(one, two, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);  //Соединяем нижние точки по кругу: 1 со 2, 2 с 3, 3 с 4, ... , 8 с 1  
  708.      TE_SendToAll();
  709.      TE_SetupBeamPoints(two, three, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  710.      TE_SendToAll();
  711.      TE_SetupBeamPoints(three, four, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  712.      TE_SendToAll();
  713.      TE_SetupBeamPoints(four, five, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  714.      TE_SendToAll();
  715.      TE_SetupBeamPoints(five, six, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  716.      TE_SendToAll();
  717.      TE_SetupBeamPoints(six, seven, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  718.      TE_SendToAll();
  719.      TE_SetupBeamPoints(seven, eight, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  720.      TE_SendToAll();
  721.      TE_SetupBeamPoints(eight, one, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  722.      TE_SendToAll();
  723.      
  724.      TE_SetupBeamPoints(oneh, twoh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);//Соединяем верхние точки по кругу: 1 со 2, 2 с 3, 3 с 4, ... , 8 с 1  
  725.      TE_SendToAll();
  726.      TE_SetupBeamPoints(twoh, threeh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  727.      TE_SendToAll();
  728.      TE_SetupBeamPoints(threeh, fourh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  729.      TE_SendToAll();
  730.      TE_SetupBeamPoints(fourh, fiveh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  731.      TE_SendToAll();
  732.      TE_SetupBeamPoints(fiveh, sixh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  733.      TE_SendToAll();
  734.      TE_SetupBeamPoints(sixh, sevenh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  735.      TE_SendToAll();
  736.      TE_SetupBeamPoints(sevenh, eighth, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  737.      TE_SendToAll();
  738.      TE_SetupBeamPoints(eighth, oneh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  739.      TE_SendToAll();
  740.      
  741.      //Для красоты я соединил между собой верхние точки, чтобы получилась своеобразная "крыша". Для того, чтобы понять, как соединять, нарисуйте на листочке.
  742.      //Соединяем 1 точку со всеми, кроме 2 и 8 (т.к. она уже соединена с ними)
  743.      TE_SetupBeamPoints(oneh, threeh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  744.      TE_SendToAll();
  745.      TE_SetupBeamPoints(oneh, fourh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  746.      TE_SendToAll();
  747.      TE_SetupBeamPoints(oneh, fiveh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  748.      TE_SendToAll();
  749.      TE_SetupBeamPoints(oneh, fiveh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  750.      TE_SendToAll();
  751.      TE_SetupBeamPoints(oneh, sixh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  752.      TE_SendToAll();
  753.      TE_SetupBeamPoints(oneh, sevenh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  754.      TE_SendToAll();
  755.      //Соединяем 2 точку со всеми, кроме 1 и 3.
  756.      TE_SetupBeamPoints(twoh, fourh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  757.      TE_SendToAll();
  758.      TE_SetupBeamPoints(twoh, fiveh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  759.      TE_SendToAll();
  760.      TE_SetupBeamPoints(twoh, sixh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  761.      TE_SendToAll();
  762.      TE_SetupBeamPoints(twoh, sevenh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  763.      TE_SendToAll();
  764.      TE_SetupBeamPoints(twoh, eighth, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  765.      TE_SendToAll();
  766.      //Соединяем 3 точку со всеми, кроме 1, 2 и 4.
  767.      TE_SetupBeamPoints(threeh, fiveh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  768.      TE_SendToAll();
  769.      TE_SetupBeamPoints(threeh, sixh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  770.      TE_SendToAll();
  771.      TE_SetupBeamPoints(threeh, sevenh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  772.      TE_SendToAll();
  773.      TE_SetupBeamPoints(threeh, eighth, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  774.      TE_SendToAll();
  775.      //Соединяем 4 точку с 6, 7 и 8 (т.к. со всеми остальными она уже соединена).
  776.      TE_SetupBeamPoints(fourh, sixh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  777.      TE_SendToAll();
  778.      TE_SetupBeamPoints(fourh, sevenh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  779.      TE_SendToAll();
  780.      TE_SetupBeamPoints(fourh, eighth, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  781.      TE_SendToAll();
  782.      //Соединяем 5 точку с 7 и 8 по той же причине.
  783.      TE_SetupBeamPoints(fiveh, sevenh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  784.      TE_SendToAll();
  785.      TE_SetupBeamPoints(fiveh, eighth, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  786.      TE_SendToAll();
  787.      //Соединяем 6 точку с 8.
  788.      TE_SetupBeamPoints(sixh, eighth, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  789.      TE_SendToAll();
  790.      //Вот и крыша готова!
  791.      //Для того, чтобы уменьшить количество углов, уменьшайте, соответственно количество вычислений точек. Я вычислял 8 раз (каждую точку по разу), на 6-тигранник - 6 раз и т.д.
  792.      //Думаю, поймете, как это делать)
  793.      //Большое спасибо хвостегу за эту замечательную фигуру! Использовался его метод нахождения точек на окружности.
  794.      return Plugin_Handled;
  795. }
  796.  
  797. public Action:Cube(client, args) // Куб с эффектами
  798. {
  799.   new Float:center[3];
  800.   wS_GetLookPos(client, center);
  801.  
  802.   new Float:one[3], Float:two[3], Float:three[3], Float:four[3];
  803.   new Float:oneh[3], Float:twoh[3], Float:threeh[3], Float:fourh[3];
  804.   new Num = 4; // Кол-во точек вокруг заданной позиции
  805.    
  806.     new Degrees = 360;  //Градусов в круге
  807.     new Coeff    = 0;  //коэффициент
  808.     new Mul      = 50;  
  809.    
  810.     new Float:point;
  811.    
  812.      point = DegToRad(float(0 * (Degrees / Num) + Coeff));
  813.      
  814.      //вычисляем верхнюю первую точку
  815.      
  816.      oneh[0] = center[0] + Sine(point) * Mul;  //Честно говоря, не знаю, как он вычисляет. В геометрии не силен. Спросите у хвостега, это его код.
  817.      oneh[1] = center[1] + Cosine(point) * Mul;
  818.      oneh[2] = center[2] + 100.0; // 50.0 - Высота клетки
  819.      
  820.      one[0] = oneh[0]; //Получаем нижнюю точку
  821.      one[1] = oneh[1];
  822.      one[2] = center[2]; //Т.к. она нижняя, то выысота будет, как у центра.
  823.      
  824.      TE_SetupBeamPoints(one, oneh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30); //Создаем вертикальные лазеры, соединяющие 2 наши точки.
  825.      TE_SendToAll();
  826.      
  827.  
  828.      
  829.      point = DegToRad(float(1 * (Degrees / Num) + Coeff));
  830.      
  831.          //вычисляем 2 точку
  832.          
  833.      twoh[0] = center[0] + Sine(point) * Mul;
  834.      twoh[1] = center[1] + Cosine(point) * Mul;
  835.      twoh[2] = center[2] + 100.0;
  836.      
  837.      two[0] = twoh[0];
  838.      two[1] = twoh[1];
  839.      two[2] = center[2];
  840.      
  841.      TE_SetupBeamPoints(two, twoh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30); //Создаем вертикальные лазеры, соединяющие 2 наши точки.
  842.      TE_SendToAll();
  843.      
  844.      
  845.      point = DegToRad(float(2 * (Degrees / Num) + Coeff));
  846.        
  847.      //вычисляем 3 точку  
  848.        
  849.      threeh[0] = center[0] + Sine(point) * Mul;
  850.      threeh[1] = center[1] + Cosine(point) * Mul;
  851.      threeh[2] = center[2] + 100.0;
  852.      
  853.      three[0] = threeh[0];
  854.      three[1] = threeh[1];
  855.      three[2] = center[2];
  856.      
  857.      TE_SetupBeamPoints(three, threeh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  858.      TE_SendToAll();
  859.      
  860.      point = DegToRad(float(3 * (Degrees / Num) + Coeff));
  861.        
  862.         //вычисляем 4 точку
  863.        
  864.      fourh[0] = center[0] + Sine(point) * Mul;
  865.      fourh[1] = center[1] + Cosine(point) * Mul;
  866.      fourh[2] = center[2] + 100.0;
  867.      
  868.      four[0] = fourh[0];
  869.      four[1] = fourh[1];
  870.      four[2] = center[2];
  871.      
  872.      TE_SetupBeamPoints(four, fourh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  873.      TE_SendToAll();
  874.      
  875.      TE_SetupBeamPoints(one, two, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);  //Соединяем нижние точки по кругу: 1 со 2, 2 с 3, 3 с 4, 4 с 1.
  876.      TE_SendToAll();
  877.      TE_SetupBeamPoints(two, three, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  878.      TE_SendToAll();
  879.      TE_SetupBeamPoints(three, four, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  880.      TE_SendToAll();
  881.      TE_SetupBeamPoints(four, one, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  882.      TE_SendToAll();
  883.      
  884.      TE_SetupBeamPoints(oneh, twoh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);  //Соединяем нижние точки по кругу: 1 со 2, 2 с 3, 3 с 4,4 c 1.  
  885.      TE_SendToAll();
  886.      TE_SetupBeamPoints(twoh, threeh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  887.      TE_SendToAll();
  888.      TE_SetupBeamPoints(threeh, fourh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  889.      TE_SendToAll();
  890.      TE_SetupBeamPoints(fourh, oneh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  891.      TE_SendToAll();
  892.      
  893.      //Соединяем точки боковых граней между собой крестом.
  894.      TE_SetupBeamPoints(oneh, two, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);  //Соединяем нижние точки по кругу: 1 со 2, 2 с 3, 3 с 4,4 c 1.  
  895.      TE_SendToAll();
  896.      TE_SetupBeamPoints(twoh, one, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  897.      TE_SendToAll();
  898.      TE_SetupBeamPoints(twoh, three, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  899.      TE_SendToAll();
  900.      TE_SetupBeamPoints(threeh, two, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  901.      TE_SendToAll();
  902.      TE_SetupBeamPoints(threeh, four, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  903.      TE_SendToAll();
  904.      TE_SetupBeamPoints(fourh, three, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  905.      TE_SendToAll();
  906.      TE_SetupBeamPoints(fourh, one, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  907.      TE_SendToAll();
  908.      TE_SetupBeamPoints(oneh, four, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  909.      TE_SendToAll();
  910.      //Теперь верхние точки (получается крест)
  911.      TE_SetupBeamPoints(oneh, threeh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  912.      TE_SendToAll();
  913.      TE_SetupBeamPoints(twoh, fourh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  914.      TE_SendToAll();
  915.      //И нижние тоже крестом
  916.      TE_SetupBeamPoints(one, three, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  917.      TE_SendToAll();
  918.      TE_SetupBeamPoints(two, four, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  919.      TE_SendToAll();
  920.      //Кому нужно, можно внутри тоже все соединить.
  921.      TE_SetupBeamPoints(oneh, three, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  922.      TE_SendToAll();
  923.      TE_SetupBeamPoints(twoh, four, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  924.      TE_SendToAll();
  925.      TE_SetupBeamPoints(one, threeh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  926.      TE_SendToAll();
  927.      TE_SetupBeamPoints(two, fourh, g_Laser,0,0,0,10.0,1.0,1.0,10,0.5,{0, 100, 255, 255},30);
  928.      TE_SendToAll();
  929.      
  930.      TE_SetupSparks(oneh, one, 500, 10); // Создаем искры по вертикальным линиям
  931.      TE_SendToAll();
  932.      TE_SetupSparks(twoh, two, 500, 10);
  933.      TE_SendToAll();
  934.      TE_SetupSparks(threeh, three, 500, 10);
  935.      TE_SendToAll();
  936.      TE_SetupSparks(fourh, four, 500, 10);
  937.      TE_SendToAll();
  938.      
  939.      center[2] = center[2] + 40.0;
  940.      TE_SetupGlowSprite(center, g_Glow, 5.0, 5.0, 20); //Делаем свечение в центре
  941.      TE_SendToAll();
  942.      return Plugin_Handled;
  943. }
  944.  
  945. public Action:Atom(client, args) // Эффект атома. Для него нам понадобятся 2 трейла и 2 вращения.
  946. {
  947.   new Float:center[3];
  948.  
  949.   wS_GetLookPos(client, center);
  950.   center[2] += 50;
  951.  
  952.  new rt_i = CreateEntityByName("func_rotating"); //Создаем первый объект вращения (вокруг него могут вращаться другие объекты)
  953.     if (rt_i < 1)
  954.     {
  955.         LogError("func_rotating error");
  956.         return;
  957.     }
  958.     new sp_i = CreateEntityByName("env_spritetrail");  //И первый трейл тоже создаем
  959.     if (sp_i < 1)
  960.     {
  961.         AcceptEntityInput(rt_i, "Kill");
  962.         LogError("env_spritetrail error");
  963.         return;
  964.     }
  965.     // Первый вращательный объект
  966.     DispatchKeyValueVector(rt_i, "origin", center);  //Спавним его в точке нашего взора
  967.     DispatchKeyValue(rt_i, "targetname", "x_rotating");  // Даем ему имя "x_rotating", чтобы потом привязать к нему трейл
  968.     DispatchKeyValue(rt_i, "renderfx", "0");  //
  969.     DispatchKeyValue(rt_i, "rendermode", "0"); //  Прозрачен
  970.     DispatchKeyValue(rt_i, "renderamt", "255"); //
  971.     DispatchKeyValue(rt_i, "rendercolor", "255 255 255");
  972.     DispatchKeyValue(rt_i, "maxspeed", "200");  //Скорость вращения 200 ед/сек. Можете изменить
  973.     DispatchKeyValue(rt_i, "friction", "20");  //Трение, не знаю, зачем надо)
  974.     DispatchKeyValue(rt_i, "dmg", "0");  //Урона не наносит
  975.     DispatchKeyValue(rt_i, "solid", "0"); //Прозрачен
  976.     DispatchKeyValue(rt_i, "spawnflags", "64"); //Значит, что он испольуемый. Работает. Без этого работать не будет!
  977.     DispatchSpawn(rt_i); //Создаем наш объект.
  978.  
  979.    
  980.     // Второй вращательный объект
  981.     new rt_two = CreateEntityByName("func_rotating"); //Точно также создаем второе вращение по вертикали
  982.     DispatchKeyValueVector(rt_two, "origin", center);
  983.     DispatchKeyValue(rt_two, "targetname", "x_rotating_two");
  984.     DispatchKeyValue(rt_two, "renderfx", "0");
  985.     DispatchKeyValue(rt_two, "rendermode", "0");
  986.     DispatchKeyValue(rt_two, "renderamt", "255");
  987.     DispatchKeyValue(rt_two, "rendercolor", "255 255 255");
  988.     DispatchKeyValue(rt_two, "maxspeed", "200");
  989.     DispatchKeyValue(rt_two, "friction", "20");
  990.     DispatchKeyValue(rt_two, "dmg", "0");
  991.     DispatchKeyValue(rt_two, "solid", "0");
  992.     DispatchKeyValue(rt_two, "spawnflags", "72"); //Внимание! 64 - используемый, 8 - по оси Y. 64+8 = 72. Складываются свойства.
  993.     DispatchSpawn(rt_two);
  994.    
  995.     // Первый трейл
  996.     center[0] += 35.0;
  997.     DispatchKeyValueVector(sp_i, "origin", center);  //Спавним в радиусе 35 единиц от вращения. Можете изменить.
  998.     DispatchKeyValue(sp_i, "lifetime", "1");
  999.     DispatchKeyValue(sp_i, "startwidth", "1.0"); //Начальная ширина 1.0
  1000.     DispatchKeyValue(sp_i, "endwidth", "1.0");  //Конечная тоже
  1001.     DispatchKeyValue(sp_i, "spritename", "materials/sprites/laserbeam.vmt");  //Спрайт такой. Заранее прекэшнутый.
  1002.     DispatchKeyValue(sp_i, "rendermode", "1"); //Видимый
  1003.     DispatchKeyValue(sp_i, "rendercolor", "255 0 0"); //Красный
  1004.     DispatchKeyValue(sp_i, "renderamt", "255");  //Полностью непрозрачен
  1005.     DispatchSpawn(sp_i);  //Спавним
  1006.     SetVariantString("x_rotating");  //Указываем имя первого вращения
  1007.     AcceptEntityInput(sp_i, "SetParent"); //Привязываем к нему
  1008.     AcceptEntityInput(sp_i, "ShowSprite");  //Показываем его всем
  1009.     AcceptEntityInput(rt_i, "Start");  //Запускаем первое вращение. И ура! Крутится
  1010.     //Второй трейл
  1011.     new sp_two = CreateEntityByName("env_spritetrail"); //Создаем второй трейл также
  1012.     DispatchKeyValueVector(sp_two, "origin", center);  
  1013.     DispatchKeyValue(sp_two, "lifetime", "1");
  1014.     DispatchKeyValue(sp_two, "startwidth", "1.0");
  1015.     DispatchKeyValue(sp_two, "endwidth", "1");
  1016.     DispatchKeyValue(sp_two, "spritename", "materials/sprites/laserbeam.vmt");
  1017.     DispatchKeyValue(sp_two, "rendermode", "1");
  1018.     DispatchKeyValue(sp_two, "rendercolor", "0 255 0");
  1019.     DispatchKeyValue(sp_two, "renderamt", "255");
  1020.     DispatchSpawn(sp_two);
  1021.     SetVariantString("x_rotating_two"); //Только привязываем ко второму вращению (по оси Y)
  1022.     AcceptEntityInput(sp_two, "SetParent");  //Привязали
  1023.     AcceptEntityInput(sp_two, "ShowSprite");  //Показываем
  1024.     AcceptEntityInput(rt_two, "Start"); //Запуск второго вращения.
  1025.  
  1026.      
  1027. }  
  1028.  
  1029. public Action:FireBall(client, args) // Огненный шар
  1030. {
  1031.   new Float:cpos[3], Float:apos[3];
  1032.   new Float:dist, Float:epos[3];
  1033.  
  1034.   wS_GetLookPos(client, epos);
  1035.   GetClientEyeAngles(client, apos);
  1036.   new String:MovelinearName[25];
  1037.   GetClientEyePosition(client, cpos);
  1038.  
  1039.   dist = GetDistance(cpos, epos); //Получаем дистанцию между точкой прицела и нашей головой
  1040.  
  1041.   new ent_move = CreateEntityByName("func_movelinear"); //Создаем прямолинейное движение
  1042.   Format(MovelinearName,    25,         "mvlnr_%d",         ent_move);
  1043.         DispatchKeyValue(ent_move,          "targetname",       MovelinearName); //Даем ему имя, чтобы прнивязать к нему наш шар
  1044.        
  1045.         DispatchKeyValueVector(ent_move,    "origin", cpos); //Создаем в точке головы
  1046.         DispatchKeyValueVector(ent_move,    "movedir", apos); //И направляем его движение в сторону, куда мы смотрим
  1047.         DispatchKeyValueFloat(ent_move,     "BlockDamage",      0.0); //Не блочится
  1048.         DispatchKeyValueFloat(ent_move,     "StartPosition",    0.0);
  1049.         DispatchKeyValueFloat(ent_move,     "MoveDistance",     dist); //Делаем дистанцию движения равную расстоянию между точек
  1050.         SetEntPropFloat(ent_move,           Prop_Data,          "m_flSpeed",    500.0); // Задаем ему скорость (500 ед/сек)
  1051.         DispatchKeyValue(ent_move,          "spawnflags",       "8"); //Применяем скорость
  1052.         DispatchSpawn(ent_move); //Создаем движение
  1053.        
  1054.         new ent_fire = CreateEntityByName("env_fire_trail"); //Вот тут уже создаем шар
  1055.         DispatchKeyValueVector(ent_fire,    "origin",           cpos); //Создаем в точке головы
  1056.         DispatchKeyValue(ent_fire,          "solid",            "0"); //Будет проходить через объектов
  1057.         DispatchSpawn(ent_fire); //Спавним наш шар.
  1058.         SetVariantString(MovelinearName); // Задаем привязку к другому объекту ("родителю"). В нашем случае объект прямолинейного движения
  1059.         AcceptEntityInput(ent_fire,         "SetParent");  //Применяем к нему родителя.
  1060.         AcceptEntityInput(ent_move,         "Start"); //Запускаем прямолинейное движение
  1061.         AcceptEntityInput(ent_move,         "Open");  //Задаем событие, когда шар дошел до нашей точки (прошел дистанцию)
  1062.         HookSingleEntityOutput(ent_move,    "OnFullyOpen",      OnFullyOpen); //Хватае событие, когда шар уже прошел дистанцию--
  1063. return Plugin_Handled;//                                                                                                   |
  1064. } //                                                                                                                      |
  1065. //                                                                                                                       |
  1066. //Дополнительные функции                                                                                                |  
  1067. //                                                                                                                     |
  1068. stock Float:GetDistance(Float:pos1[3], Float:pos2[3]) //получает дистанцию между двух точек. (В 2д пространстве).       |
  1069. {  //                                                                                                                 |
  1070.       return SquareRoot( Pow(pos2[0] - pos1[0], 2.0) + Pow(pos2[1] - pos1[1], 2.0) ); //                                 |
  1071. }  //                                                                                                                |
  1072. //                                                                                                                   |
  1073. public OnFullyOpen(const String:output[],   caller, activator, Float:delay) //        <------------------------------|
  1074. {
  1075.   AcceptEntityInput(caller, "Kill"); //Когда шар прошел нашу дистанцию, удаляем его.
  1076. }
  1077.  
  1078. public bool:wS_GetLookPos_Filter(ent, mask, any:client)  //Проверка, что игрок не смотрит сам на себя.
  1079. {
  1080.       return client != ent;
  1081. }
  1082.  
  1083. wS_GetLookPos(client, Float:wS_Pos[3])  // Получение позиции прицела
  1084. {
  1085.      decl Float:EyePosition[3], Float:EyeAngles[3], Handle:h_trace;
  1086.      GetClientEyePosition(client, EyePosition);
  1087.      GetClientEyeAngles(client, EyeAngles);
  1088.      h_trace = TR_TraceRayFilterEx(EyePosition, EyeAngles, MASK_SOLID, RayType_Infinite, wS_GetLookPos_Filter, client);
  1089.      TR_GetEndPosition(wS_Pos, h_trace);
  1090.      CloseHandle(h_trace);
  1091. }
  1092.  
  1093. /* Отдельная благодарность wS и его урокам и хвостегу! Спасибо за внимание!*/
  1094. /*////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
  1095. /*             Если что-то непонятно, обращайтесь в skype                  */
  1096. /*                              ||                                         */
  1097. /*                              ||                                         */
  1098. /*                             \  /                                        */
  1099. /*                              \/                                         */
  1100. /*                         darwin2154                                      */
  1101. /*                                                                         */
  1102. /*///////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
Add Comment
Please, Sign In to add comment