View difference between Paste ID: rDw5786x and KFvCLWJN
SHOW: | | - or go back to the newest paste.
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
/*///////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/