· 7 years ago · Dec 29, 2018, 10:54 AM
1#include <sourcemod>
2#include <sdkhooks>
3#include <sdktools>
4#include <cstrike>
5#include <emitsoundany>
6
7#define VIP_FLAG ADMFLAG_CUSTOM1 // konto premium
8#define MAX_PLAYERS 32 // maksymalna ilosc graczy na serwerze
9#define MAX_CLASS 33 // maksymalna ilosc klas na serwerze
10#define REFRESH_HUD 0.5
11#define PREFIX "\x10[cs-Lajtowo.pl]\x04"
12#define FFADE_IN 0x0002 // SCREEN EFFECT - dla lodowych pocisków
13#define FFADE_MODULATE 0x0004 // SCREEN EFFECT - dla lodowych pocisków
14
15native set_user_esp(client, wartosc);
16native get_user_esp(client);
17
18enum
19{
20 C4Plant,
21 C4Defuse,
22 HostRescue,
23 RoundWin
24}
25enum
26{
27 Brak,
28 Snajper,
29 Komandos,
30 Obronca,
31 Medyk,
32 WsparcieOgniowe,
33 Saper,
34 Rusher,
35 Kangur,
36 Admiral,
37 Rebeliant,
38 Szturmowiec,
39 LekkiZolnierz,
40 Jednooki,
41 Grom,
42 Missly,
43 Scorch,
44 KapitanDan,
45 Inzynier,
46 Piorun,
47 Terrorysta,
48 Kamikadze,
49 Rewolwerowiec,
50 Thief,
51 Strzelec,
52 Partyzant,
53 DGLMaster,
54 Szturmen,
55 Szpieg,
56 Mauser,
57 Scouter,
58 Terminator,
59 Rambo,
60 ElitarnySnajper
61};
62new String:top_string[1024];
63new limit_poziomu = 401;
64new limit_inteligencji = 100;
65new limit_zdrowia = 50;
66new limit_obrazen = 50;
67new limit_wytrzymalosci = 100;
68new limit_kondycji = 100;
69new co_ile_lv_punkt = 1;
70new ile_rozdawac[] = {1, 10, -1};
71
72new Float:mnoznik_za_nick = 1.2;
73new xp_kill = 7;
74new xp_kill_hs = 15;
75new xp_winround = 20;
76new xp_objectives = 20;
77
78new xp_kill_vip = 15;
79new xp_kill_hs_vip = 22;
80new xp_winround_vip = 25;
81new xp_objectives_vip = 25;
82
83new bool:blokada;
84new co_ile_zapisywac = 30; // co ile sekund nadpisywac dane graczowi (tylko gdy zdobyl/stracil poziom/doswiadczenie lub rozdal/zresetowal statystyki)
85
86new Handle:sql,
87 Handle:sql_task[MAX_PLAYERS+1],
88 Handle:hud_task[MAX_PLAYERS+1],
89 Handle:godmode_task[MAX_PLAYERS+1];
90 Handle:zatrucie_handler[MAX_PLAYERS+1];
91 Handle:zatrucie_handler2[MAX_PLAYERS+1];
92
93new String:dbError[512],
94 String:nazwa_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
95 poziom_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
96 doswiadczenie_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
97 inteligencja_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
98 zdrowie_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
99 obrazenia_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
100 wytrzymalosc_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
101 kondycja_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
102 misja_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
103 zabicia_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1];
104
105new poziom_gracza[MAX_PLAYERS+1],
106 doswiadczenie_gracza[MAX_PLAYERS+1],
107 inteligencja_gracza[MAX_PLAYERS+1],
108 zdrowie_gracza[MAX_PLAYERS+1],
109 obrazenia_gracza[MAX_PLAYERS+1],
110 wytrzymalosc_gracza[MAX_PLAYERS+1],
111 kondycja_gracza[MAX_PLAYERS+1],
112 misja_gracza[MAX_PLAYERS+1],
113 postep_gracza[MAX_PLAYERS+1],
114 bonusowa_inteligencja_gracza[MAX_PLAYERS+1],
115 bonusowe_zdrowie_gracza[MAX_PLAYERS+1],
116 bonusowe_obrazenia_gracza[MAX_PLAYERS+1],
117 bonusowa_wytrzymalosc_gracza[MAX_PLAYERS+1],
118 bonusowa_kondycja_gracza[MAX_PLAYERS+1];
119
120new maksymalna_inteligencja_gracza[MAX_PLAYERS+1],
121 maksymalne_zdrowie_gracza[MAX_PLAYERS+1],
122 Float:maksymalne_obrazenia_gracza[MAX_PLAYERS+1],
123 Float:maksymalna_wytrzymalosc_gracza[MAX_PLAYERS+1],
124 Float:maksymalna_kondycja_gracza[MAX_PLAYERS+1];
125
126new Float: SAVELOC[MAXPLAYERS + 1][3]; /// dla medyka
127 Float: ResetVector[3] = {0.0, 0.0, 0.0};
128int dead_t, dead_ct, umarltt, umarlct; /// dla medyka
129int zatruty; // dla zatrutych strzalek
130int zatruty2;
131bool jeden_zatruty[MAX_PLAYERS+1];
132int zablokowano_strzal[MAX_PLAYERS+1]; // elektromagnes
133
134
135// harpun scorpiona
136int g_iSprite;
137int g_CzasDostalHarpunem[MAXPLAYERS];
138int g_iHooked[MAXPLAYERS + 1];
139int g_iHook[MAXPLAYERS + 1] = { INVALID_ENT_REFERENCE, ... };
140int g_iHookProp[MAXPLAYERS + 1] = { INVALID_ENT_REFERENCE, ... };
141bool g_bHooked[MAXPLAYERS + 1];
142Handle g_hTimerHook[MAXPLAYERS + 1] = { INVALID_HANDLE, ... };
143#define HOOK_REFRESH_TIME 0.1
144#define MODEL_BEAM "materials/sprites/purplelaser1.vmt"
145#define MODEL_BEAM "materials/sprites/purplelaser1.vmt"
146#define HOOK_SOUND "cod/getoverhere.mp3"
147// end harpun scorpiona
148// tarcza grawitacyjna
149int g_iCzasTarczy[MAXPLAYERS];
150Handle grawitacja_timer_handler[MAXPLAYERS+1];
151// end tarcza grawitacyjna
152// piorun
153int g_CooldownNaPiorun[MAXPLAYERS];
154int PodstawaObrazeniaPiorun = 60; // ta wartosc w grze wystepuje jako 1/2, czyli wpisujesz 60 - podstawa w obrazeniach wynosi 30
155new Float:MnoznikInteligencjiPiorun = 0.8; // przy 100 inteligencji dodaje 40, wiec 0.4 dmg na 1 inteligencji przypada
156// end piorun
157new bool:polaczony_raz[MAX_PLAYERS+1],
158 nowa_klasa_gracza[MAX_PLAYERS+1],
159 klasa_gracza[MAX_PLAYERS+1],
160 bool:vip_gracza[MAX_PLAYERS+1],
161 szybkosc_rozdania[MAX_PLAYERS+1],
162 punkty_gracza[MAX_PLAYERS+1],
163 client_gracza[MAX_PLAYERS+1],
164 hitgroup_gracza[MAX_PLAYERS+1],
165 moc_itemu[MAX_PLAYERS+1],
166 bool:umiejetnosc_gracza[MAX_PLAYERS+1],
167 bool:wymiana_gracza[MAX_PLAYERS+1],
168 bool:blokada_gracza[MAX_PLAYERS+1],
169 bool:ma_nick[MAX_PLAYERS+1],
170 bool:uzyl_kamikazze[65],
171 bool:uzyl_kamikadze[65],
172 bool:uzyl_betonowego_ciala[65],
173 bool:uzyl_elektromagnesu[65],
174 bool:dostal_elektromagnesem[65],
175 bool:uzyl_pomocnejdloni[65],
176 bool:skoczyl_vip[MAX_PLAYERS+1],
177 bool:ma_lodowy_pocisk[65],
178 bool:ma_ladunek_piorun[65];
179
180new ilosc_rakiet_gracza[MAX_PLAYERS+1],
181 ilosc_min_gracza[MAX_PLAYERS+1],
182 ilosc_dynamitow_gracza[MAX_PLAYERS+1],
183 ilosc_apteczek_gracza[MAX_PLAYERS+1],
184 dzialo_gracza[MAX_PLAYERS+1][2],
185 procent_dziala[MAX_PLAYERS+1],
186 ilosc_lodowych_pociskow[MAX_PLAYERS+1],
187 ilosc_hakow_skorpiona[MAX_PLAYERS+1],
188 ilosc_zatrutych_strzalek[MAX_PLAYERS+1];
189 uzyl_tarczy_grawitacyjnej[MAX_PLAYERS+1];
190 ilosc_skokow_parkur[MAX_PLAYERS+1];
191 skoki_szturmen_vip[MAX_PLAYERS+1];
192
193new sprite_blue,
194 sprite_laser,
195 sprite_halo,
196 sprite_explosion,
197 oslepiajacy_gracz,
198 bool:freezetime;
199
200new String:dzwieki_serwera[][] =
201{
202 "", // 0
203 "cod/levelup.mp3", // 1
204 "cod/headshot.mp3", // 2
205 "cod/headshot2.mp3", // 3
206 "cod/lebshot.mp3", // 4
207 "cod/headhunter.mp3" // 5
208};
209new String:modele_serwera[][] =
210{
211 "", // 0
212 "models/player/ctm_fbi.mdl", // 1
213 "models/player/ctm_gign.mdl", // 2
214 "models/player/ctm_gsg9.mdl", // 3
215 "models/player/ctm_sas.mdl", // 4
216 "models/player/ctm_st6.mdl", // 5
217 "models/player/tm_anarchist.mdl", // 6
218 "models/player/tm_phoenix.mdl", // 7
219 "models/player/tm_pirate.mdl", // 8
220 "models/player/tm_balkan_variantA.mdl", // 9
221 "models/player/tm_leet_variantA.mdl", // 10
222 "models/weapons/w_eq_molotov.mdl", // 11
223 "models/weapons/w_c4_planted.mdl", // 12
224 "models/weapons/w_knife.mdl", // 13
225 "models/props/cs_italy/chianti02.mdl" // 14
226};
227new informacje_itemu_gracza[MAX_PLAYERS+1][2];
228new String:nazwy_itemow[][] =
229{
230 "Brak", // 0
231 "Wytrenowany Weteran", // 1
232 "Wytrenowany Rekrut", // 2
233 "Wyszkolenie Wojenne", // 3
234 "Apteczka", // 4
235 "Adrenalina", // 5
236 "Regenerator", // 6
237 "Morfina", // 7
238 "Księga Expa", // 8
239 "Portfel Turysty", // 9
240 "Kamizelka Nasa", // 10
241 "Sandały Gaudentego", // 11
242 "Mózg Einsteina", // 12
243 "Zestaw Predatora", // 13
244 "Notatki Kapitana", // 14
245 "Tytanowe Naboje", // 15
246 "Naboje Pulkownika", // 16
247 "Weteran Noza", // 17
248 "Nóż Mysliwego", // 18
249 "Furmana Kaplana", // 19
250 "Pancerny Hełm", // 20
251 "Pancerz Neomexowy", // 21
252 "Moduł Odrzutowy", // 22
253 "Zaskoczenie Wroga", // 23
254 "Płaszczowe Naboje", // 24
255 "Luneta Wojskowego", // 25
256 "Tajemnica Molotova", // 26
257 "Tajemnica Zabojcy", // 27
258 "Płonące Naboje", // 28
259 "Tarcza Swat", // 29
260 "Nano Kamizelka", // 30
261 "Buty Szturmowego", // 31
262 "Podręcznik Szpiega", // 32
263 "Tajemnica Generala", // 33
264 "Bezdenny Magazynek", // 34
265 "Szybkostrzelność", // 35
266 "Eagle Eye", // 36
267 "Autodestrukcja", // 37
268 "Rozbłysk Słoneczny", // 38
269 "Tajemnica Rambo", // 39
270 "Izraelskie Naboje", // 40
271 "Opaska Rambo", // 41
272 "Fart Strzelca", // 42
273 "Tajemnica Thiefa", // 43
274 "Pierścień Expa", // 44
275 "Sakwa Szczęścia", // 45
276 "Oko Snajpera", // 46
277 "Platynowe Naboje", // 47
278 "Krytyczne Naboje", // 48
279 "Taktyczne Naboje", // 49
280 "Betonowe Cialo", // 50
281 "Lodowe Pociski", // 51
282 "Granat Zamrazajacy", // 52
283 "Tajemnica Sapera", // 53
284 "Złote m4a1-s", // 54
285 "Mistrz Scouta", // 55
286 "Tajemnica Sprintera", // 56
287 "Zlote ak47", // 57
288 "Zeus Master", // 58
289 "Zloty Glock", // 59
290 "Wallhack Czitera", // 60
291 "Blyskowe Naboje", // 61
292 "Uśmiech Diabła", // 62
293 "Kamikazze", // 63
294 "Złote AWP", // 64
295 "Pomocna dłoń", // 65
296 "OdpychajÄ…ce kule", // 66
297 "Księga wiedzy", // 67
298 "Zatrute strzałki", // 68
299 "Lodowe pociski", // 69
300 "Harpun Scorpiona", // 70
301 "Tarcza grawitacyjna", // 71
302 "Elektromagnes", // 72
303 "Parkur", // 73
304 "Zestaw Mausera" // 74
305
306};
307new String:opisy_itemow[][] =
308{
309 "Zabij kogoś aby dostać item", // 0
310 "Dostajesz dodatkowo 45 punktów zdrowia i 45 kondycji.", // 1
311 "Dostajesz dodatkowo 15 punktów zdrowia. Wolniej biegasz", // 2
312 "Regenerujesz 20 zdrowia, co 10 sekund", // 3
313 "Regenerujesz zdrowie do pełna (Użycie: E)", // 4
314 "Regenerujesz 50 zdrowia za zabicie przeciwnika", // 5
315 "Regenerujesz 30 procent zadanych obrażeń w postaci zdrowia", // 6
316 "Posiadasz 1/LW szans na ponowne odrodzenie się po śmierci", // 7
317 "Dostajesz dodatkowo 150 doświadczenia za zabicie przeciwnika", // 8
318 "Dostajesz dodatkowo 300 dolarów za zabicie przeciwnika", // 9
319 "Dostajesz dodatkowo 25 punktów wytrzymałości", // 10
320 "Dostajesz dodatkowo 100 punktów kondycji", // 11
321 "Dostajesz dodatkowo 25 punktów inteligencji", // 12
322 "Dostajesz noktowizor (Użycie: E). Jesteś odporny na zadane obrażenia od upadku", // 13
323 "Jesteś odporny na 3 pierwsze zadane obrażenia przez przeciwnika", // 14
324 "Zadajesz o 10 obrażeń przeciwnikowi więcej z każdej broni", // 15
325 "Zadajesz o 15 obrażeń przeciwnikowi więcej z każdej broni", // 16
326 "Zadajesz o 40 obrażeń przeciwnikowi więcej z noża", // 17
327 "Posiadasz natychmiastowe zabicie przeciwnika z noża (PPM)", // 18
328 "Kazdy twoj pistolet strzela ogniem automatycznym", // 19
329 "Jesteś odporny na zadane obrażenia przez przeciwnika w głowę", // 20
330 "Posiadasz 1/LW szans na odbicie zadanych obrażeń przez przeciwnika", // 21
331 "Zostajesz wyrzucony z dużą prędkościa (Użycie: E)", // 22
332 "Zadajesz 140 procent obrażeń przeciwnikowi gdy atakujesz w dół tułowia", // 23
333 "Zadajesz 140 procent obrażeń przeciwnikowi z każdej pobocznej broni", // 24
334 "Posiadasz przybliżenie w każdej broni palnej (Użycie: ATTACK2)", // 25
335 "Dostajesz koktajl molotova, co 20 sekund", // 26
336 "Posiadasz 1/LW szans na wyrzucenie broni przeciwnika", // 27
337 "Posiadasz 1/LW szans na podpalenie przeciwnika", // 28
338 "Nie działaja na Ciebie itemy przeciwnika", // 29
339 "Nie działają na Ciebie umiejętności klas przeciwnika", // 30
340 "Nie slychac twoich krokow", // 31
341 "Posiadasz 1/LW szans na natychmiastowe zabicie z HE. Masz ubranie przeciwnika", // 32
342 "Posiadasz natychmiastowe zabicie z HE. Zadajesz o LW obrażeń więcej", // 33
343 "Posiadasz nieskończoną ilość amunicji", // 34
344 "Posiadasz zwiększona szybkostrzelność broni", // 35
345 "Widzisz niewidzialnych przeciwnikow", // 36
346 "Wybuchasz po śmierci zabijając wszystkich przeciwników w pobliżu", // 37
347 "Podpalasz wszystkich przeciwników w pobliżu (Użycie: E)", // 38
348 "Regenerujesz 20 zdrowia za zabicie przeciwnika. Nie działają na Ciebie FB przeciwnika", // 39
349 "Dostajesz dodatkowo 25 punktów obrażeń", // 40
350 "Dostajesz dodatkowo 15 punktów do każdej statystyki", // 41
351 "Posiadasz 1/LW szans na natychmiastowe zabicie przeciwnika", // 42
352 "Możesz podnosić bronie należące do wszystkich klas", // 43
353 "Dostajesz dodatkowo 100 doświadczenia za zabicie przeciwnika", // 44
354 "Dostajesz dodatkowo 1500 dolarów podczas odrodzenia", // 45
355 "Posiadasz natychmiastowe zabicie przeciwnika w głowę", // 46
356 "Zadajesz o LW obrażeń przeciwnikowi więcej z każdej broni", // 47
357 "Posiadasz 1/LW szans na zadanie 140 procent obrażeń przeciwnikowi", // 48
358 "Posiadasz 1/LW szans na opróżnienie magazynku przeciwnika", // 49
359 "Przez 5 sekund mozna zabic cie tylko w glowe (Uzycie: E)", // 50
360 "Posiadasz 1/LW szans na zamrozenie przeciwnika", // 51
361 "Twoje granaty flashbang, zamiast oslepiac zamrazaja", // 52
362 "Mozesz postawic 2 atrapy min (Uzycie: E)", // 53
363 "Posiadasz złote m4a1-S + 15DMG", // 54
364 "Dostajesz scouta i posiadasz z niego 1/LW szans na natychmiastowe zabicie", // 55
365 "Mozesz wyrzucic 2 noze (Uzycie: E)", // 56
366 "Posiadasz Złote Ak47 + 15DMG", // 57
367 "Posiadasz natychmiastowe zabicie z zeusa", // 58
368 "Posiadasz 1/LW szans na zabicie natychmiastowe z glocka", // 59
369 "Widzisz pozycje przeciwnikow przez byty materialne", // 60
370 "Twoje pociski wystrzelone z broni palnej pozostawiaja za soba widoczny slad", // 61
371 "Po śmierci natychmiast się odrodzisz", // 62
372 "Wysadzasz się, zabijając przeciwników dookoła (Użycie: E)", // 63
373 "Twoje strzały z AWP są śmiertelne", // 64
374 "Możesz ożywić swojego kolegę raz na rundę", // 65
375 "Twoje pociski mają 20 procent szans na odepchnięcie przeciwników z dużą mocą", // 66
376 "Posiadasz 20 procent inteligencji więcej", // 67
377 "Dwa pierwsze trafienia zatrujÄ… przeciwnika", // 68
378 "Okuwa lodem dwa pociski na rundę (Użycie: E)", // 69
379 "Pozwala przyciągnąć do siebie maks 4 przeciwników na rundę (Użycie: E)", // 70
380 "Maksymalizuje grawitację pobliskim graczom. Czas trwania: 30 sekund. (Użycie: E)", // 71
381 "Zacina broń pobliskich przeciwników na 3 sekundy. (Użycie: E)", // 72
382 "Posiadasz dwa dodatkowe skoki", // 73
383 "Posiadasz broń g3sg1, z której zadajesz o 10 większe obrażenia, oraz redukcję obrażeń w dół tułowia" // 74
384};
385new String:nazwy_klas[][] =
386{
387 "Brak", // 0
388 "Snajper", // 1
389 "Komandos", // 2
390 "Obrońca", // 3
391 "Medyk", // 4
392 "Wsparcie Ogniowe", // 5
393 "Saper", // 6
394 "Rusher", // 7
395 "Kangur", // 8
396 "Admiral", // 9
397 "Rebeliant", // 10
398 "Szturmowiec", // 11
399 "Lekki Żołnierz", // 12
400 "Jednooki ( Bez Oki ?)", //13
401 "Grom", //14
402 "Missly", //15
403 "Scorch", //16
404 "Kapitan Dan", // 17
405 "Inzynier", // 18
406 "Piorun", // 19
407 "Terrorysta [Od 100Lv]", // 20
408 "Kamikadze [Od 125Lv]", // 21
409 "Rewolwerowiec [Od 130Lv]", // 22
410 "Thief [Od 150Lv]", // 23
411 "Strzelec [Od 175Lv]", // 24
412 "Partyzant [Od 200Lv]", // 25
413 "DGLMaster [Od 225Lv]", // 26
414 "Szturmen [Od 250Lv]", // 27
415 "Szpieg [Od 275Lv]", // 28
416 "Mauser [Od 300Lv]", // 29
417 "Scouter [Od 325Lv]", // 30
418 "Terminator [Od 350Lv]", // 31
419 "Rambo [Od 375Lv]", // 32
420 "Elitarny Snajper [Od 401Lv]" // 33
421};
422new String:nazwy_broni[][] =
423{
424 "", // 0
425 "weapon_glock", // 1
426 "weapon_usp_silencer", // 2
427 "weapon_tec9", // 3
428 "weapon_cz75a", // 4
429 "weapon_hkp2000", // 5
430 "weapon_p250", // 6
431 "weapon_deagle", // 7
432 "weapon_elite", // 8
433 "weapon_fiveseven", // 9
434 "weapon_nova", // 10
435 "weapon_xm1014", // 11
436 "weapon_mag7", // 12
437 "weapon_sawedoff", // 13
438 "weapon_mac10", // 14
439 "weapon_mp9", // 15
440 "weapon_mp7", // 16
441 "weapon_ump45", // 17
442 "weapon_p90", // 18
443 "weapon_bizon", // 19
444 "weapon_galilar", // 20
445 "weapon_famas", // 21
446 "weapon_ak47", // 22
447 "weapon_m4a1", // 23
448 "weapon_m4a1_silencer", // 24
449 "weapon_aug", // 25
450 "weapon_sg556", // 26
451 "weapon_ssg08", // 27
452 "weapon_awp", // 28
453 "weapon_g3sg1", // 29
454 "weapon_scar20", // 30
455 "weapon_m249", // 31
456 "weapon_negev", //32
457 "weapon_decoy", // 33
458 "weapon_molotov", // 34
459 "weapon_incgrenade", // 35
460 "weapon_hegrenade", // 36
461 "weapon_flashbang", // 37
462 "weapon_smokegrenade", // 38
463 "weapon_taser", // 39
464 "weapon_knife", // 40
465 "weapon_c4", // 41
466 "weapon_revolver", // 42
467 "weapon_mp5sd" // 43
468};
469new naboje_broni[][2] =
470{
471 {0, 0}, // 0
472 {20, 120}, // 1
473 {12, 24}, // 2
474 {32, 120}, // 3
475 {12, 12}, // 4
476 {13, 52}, // 5
477 {13, 26}, // 6
478 {7, 35}, // 7
479 {30, 120}, // 8
480 {20, 100}, // 9
481 {8, 32}, // 10
482 {7, 32}, // 11
483 {5, 32}, // 12
484 {7, 32}, // 13
485 {30, 100}, // 14
486 {30, 120}, // 15
487 {30, 120}, // 16
488 {25, 100}, // 17
489 {50, 100}, // 18
490 {64, 120}, // 19
491 {35, 90}, // 20
492 {25, 90}, // 21
493 {30, 90}, // 22
494 {30, 90}, // 23
495 {20, 40}, // 24
496 {30, 90}, // 25
497 {30, 90}, // 26
498 {10, 90}, // 27
499 {10, 30}, // 28
500 {20, 90}, // 29
501 {20, 90}, // 30
502 {100, 200}, // 31
503 {150, 200}, // 32
504 {-1, 1}, // 33
505 {-1, 1}, // 34
506 {-1, 1}, // 35
507 {-1, 1}, // 36
508 {-1, 2}, // 37
509 {-1, 1}, // 38
510 {-1, 1}, // 39
511 {0, 0}, // 40
512 {-1, 1}, // 41
513 {8, 8}, // 42
514 {30, 120} // 43
515};
516new bronie_klas[][] =
517{ // numer broni odpowiadajacy za jej nazwe (patrz wyzej) // musi byc 5 broni w jednej kolumnie
518 {0, 0, 0, 0, 0}, // 0
519 {28, 7, 0, 0, 0}, // 1
520 {7, 37, 37, 0, 0}, // 2
521 {31, 1, 36, 37, 38}, // 3
522 {17, 5, 37, 38, 0}, // 4
523 {16, 9, 0, 0, 0}, // 5
524 {18, 9, 37, 38, 0}, // 6
525 {10, 6, 0, 0, 0}, // 7
526 {11, 6, 0, 0, 0}, // 8
527 {22, 1, 37, 37, 38}, // 9
528 {26, 1, 36, 0, 0}, // 10
529 {23, 7, 36, 0, 0}, // 11
530 {22, 6, 0, 0, 0}, // 12
531 {27, 28, 6, 0, 0}, // 13
532 {24, 2, 6, 0, 0}, // 14
533 {11, 3, 37, 0, 0}, // 15
534 {15, 9, 0, 0, 0}, // 16
535 {4, 12, 39, 0, 0}, // 17
536 {19, 7, 35, 37, 38}, // 18
537 {43, 9, 38, 38, 0}, // 19
538 {14, 8, 35, 0, 0}, // 20
539 {7, 35, 0, 0, 0}, // 21
540 {42, 37, 37, 0, 0}, // 22
541 {19, 6, 35, 0, 0}, // 23
542 {29, 1, 0, 0, 0}, // 24
543 {21, 7, 36, 0, 0}, // 25
544 {7, 37, 37, 38, 0}, // 26
545 {24, 2, 34, 0, 0}, // 27
546 {25, 1, 35, 0, 0}, // 28
547 {29, 1, 37, 37, 0}, // 29
548 {27, 8, 36, 0, 0}, // 30
549 {32, 4, 35, 37, 38}, // 31
550 {13, 1, 37, 37, 0}, // 32
551 {28, 6, 37, 36, 0} // 33
552};
553new umiejetnosci_klas[][] =
554{ // Lvl - 0 // Zdr - 1 // Wyt - 2 // Kon - 3
555 {0, 100, 0, 100}, // 0
556 {0, 120, 100, 110}, // 1
557 {0, 135, 100, 125}, // 2
558 {0, 135, 150, 95}, // 3
559 {0, 150, 100, 110}, // 4
560 {0, 100, 100, 100}, // 5
561 {0, 140, 100, 100}, // 6
562 {0, 100, 50, 120}, // 7
563 {0, 100, 50, 120}, // 8
564 {0, 150, 150, 100}, // 9
565 {0, 105, 150, 110}, // 10
566 {0, 150, 150, 100}, // 11
567 {0, 100, 100, 115}, // 12
568 {0, 100, 100, 110}, // 13
569 {0, 140, 100, 100}, // 14
570 {0, 100, 100, 100}, // 15
571 {0, 110, 120, 100}, // 16
572 {0, 100, 100, 100}, // 17
573 {0, 110, 100, 100}, // 18
574 {0, 120, 100, 105}, // 19
575 {100, 120, 50, 100}, // 20
576 {125, 180, 0, 120}, // 21
577 {130, 140, 75, 115}, // 22
578 {150, 80, 80, 100}, // 23
579 {175, 125, 0, 80}, // 24
580 {200, 140, 25, 125}, // 25
581 {225, 115, 25, 135}, // 26
582 {250, 130, 50, 115}, // 27
583 {275, 125, 100, 100}, // 28
584 {300, 120, 100, 110}, // 29
585 {325, 105, 50, 105}, // 30
586 {350, 175, 175, 100}, // 31
587 {375, 200, 100, 120}, // 32
588 {401, 175, 100, 120} // 33
589
590};
591new String:opisy_klas[][] =
592{
593 "Brak", // 0
594 "Zadaje obrażenia z awp +int. Posiada 120hp, 110% biegu, 100 wytrzymałości", // 1
595 "Zadaje o 50 obrażeń więcej z noża +int (Uzycie: PPM). Posiada 135hp, 135% biegu, 100 wytrzymałości", // 2
596 "Jest odporny na umiejetnosci wszystkich klas przeciwnika. Posiada 135hp, 95% biegu, 150 wytrzymałości", // 3
597 "Bronie: hkp2000 oraz UMP45 Posiada 150hp, 110% biegu, 100 wytrzymałości, posiada dwie apteczki", // 4
598 "Posiada 100hp, 100% biegu, 100 wytrzymałości oraz 2 rakiety (użyj E)", // 5
599 "Posiada 140hp, 100% biegu, 100 wytrzymałości oraz 2 dynamity (użyj E)", // 6
600 "Posiada 100hp, 120% biegu, 50 wytrzymałości i szansę 1/10 na zabicie z novy", // 7
601 "Posiada auto bh, 100hp, 100% biegu, 50 wytrzymałości", // 8
602 "Posiada 150hp, 80% biegu, 150 wytrzymałości", // 9
603 "Posiada 105hp, 80% biegu, 150 wytrzymałości", // 10
604 "Posiada 150hp, 80% biegu, 150 wytrzymałości", // 11
605 "Posiada 100hp, 115% biegu, 100 wytrzymałości", // 12
606 "Posiada 100hp, 100% biegu, 100 wytrzymałości oraz 1/1 bądz 1/2 szansy na zabicie natychmiastowe z awp i scouta, nie moze uzywać lunety (scope)", // 13
607 "Posiada 100hp, 100% biegu, 100 wytrzymałości oraz odnawia magazynek po zabojstwie", //14
608 "Posiada 100hp, 100% biegu, 100 wytrzymałości oraz nie dostaje obrazen w glowe", // 15
609 "Posiada 100hp, 100% biegu, 100 wytrzymałości oraz 1/5 na podpalenie gracza poprzez strzały + int zwieksza obrazenia ognia", //16
610 "Posiada 100hp, 100% biegu, 100 wytrzymałości oraz zeus 1/1 oraz z CZ75 2x wiekszy dmg w korpus", //17
611 "Moze budowac dzialko straznicze przy pomocy noza, ktorego wytrzymalosc i obrazenia rosna wraz z inteligencja", // 18
612 "Posiada 120hp, 105% biegu, 100 wytrzymałości i za każde zabójstwo zdobywa ładunek, który pozwala mu na strzał piorunem. +int zwiększa obrażenia pioruna", // 19
613 "Wybucha po śmierci zadając 80 zdrowia +int. Posiada 120hp, 100% biegu, 50 wytrzymałości", // 20
614 "Posiada 180hp, 120% biegu, oraz może podlec autodestrukcji. (Użycie: E)", // 21
615 "Posiada 140hp, 115% biegu, 75 wytrzymalości. Ma zwiększony DMG z rewolweru. Po zabiciu przeciwnika jego magazynek się napełnia.", // 22
616 "Może podnosić wszystkie bronie. Posiada 80hp, 100% biegu, 80 wytrzymałości. Szansa na opróżenienie przeciwnika magazynku", // 23
617 "Posiada 125hp, 80% biegu", // 24
618 "Zadaje o 50 obrażeń więcej z HE +int. Posiada 120hp, 125% biegu, 25 wytrzymałości, jest mniej widoczny", // 25
619 "Zadaje obrażenia z deagla +int. Posiada 115hp, 135% biegu, 25 wytrzymałości, 1/5 szansa wyrzucenia przeciwnikowi broni", // 26
620 "Może wykonać podwójny skok (Użycie: podczas skoku SPACE), dostaje 30 zdrowia za zabicie przeciwnika. Posiada 130hp, 115% biegu, 50 wytrzymałości", // 27
621 "Posiada przebranie wroga, 125hp, 100% biegu, 100 wytrzymałości", // 28
622 "Jest odporny na zadane obrażeń w dół tułowia. Posiada 120hp, 110% biegu, 100 wytrzymałości", // 29
623 "Posiada 1/2 szans na natychmiastowe zabicie z ssg08, 105hp, 105% biegu, 50 wytrzymałości", // 30
624 "Posiada 175hp, 100% biegu, 175 wytrzymałości, oraz potrafi użyć mocy betonowego ciała na 3 sekundy. (Użycie: E)", // 31
625 "Regeneruje 10 procent zadanych obrażeń w postaci zdrowia. Posiada 1/2 szans na natychmiastowe zabicie z noża (PPM), 200hp, 130% biegu, 100 wytrzymałości", // 32
626 "Posiada 200hp, 120 biegu i 100 wytrzymałości. Posiada 1/3 szansy na zabicie przeciwnika", // 33
627};
628new nazwy_misji[][] = // typy: 0 - zabicie klas, 1 - zabicie z itemem, 2 - wykonanie celow mapy
629{ // Typ // Postep // Cel // Nagroda
630 {0, 0, 0, 0}, // 0
631 {0, 10, Snajper, 2500}, // 1
632 {0, 10, Komandos, 2500}, // 2
633 {0, 10, Admiral, 2500}, // 3
634 {0, 10, Terminator, 7500}, // 4
635 {0, 10, Rambo, 10000}, // 5
636 {1, 10, 14, 10000}, // 6
637 {1, 10, 20, 10000}, // 7
638 {2, 5, C4Plant, 1000}, // 8
639 {2, 5, C4Defuse, 1000}, // 9
640 {2, 5, HostRescue, 1000}, // 10
641 {2, 5, RoundWin, 1000}, // 11
642 {0, 10, Missly, 4000}, // 12
643 {0, 10, Komandos, 4000}, //13
644 {0, 12, Grom , 6000}, // 14
645 {0, 20, Snajper, 7500}, // 15
646 {0, 20, Szturmen, 9000}, //16
647 {0, 20, Rambo, 24000} //17
648};
649new String:opisy_misji[][] =
650{
651 "Brak. Wpisz /misja aby rozpoczac", // 0
652 "Zabij 10 Snajperów - 2500 Dośw.", // 1
653 "Zabij 10 Komandosów - 2500 Dośw.", // 2
654 "Zabij 10 Admirałów - 2500 Dośw.", // 3
655 "Zabij 10 Terminatorów - 7500 Dośw.", // 4
656 "Zabij 10 Rambo - 10000 Dośw.", // 5
657 "Zabij 10 osób z Notatkami Kapitana - 10000 Dośw.", // 6
658 "Zabij 10 osób z Pancernym Hełmem - 10000 Dośw.", // 7
659 "Podłóż 5 bomb - 1000 Dośw.", // 8
660 "Rozbrój 5 bomb - 1000 Dośw.", // 9
661 "Uratuj 5 zakładników - 1000 Dośw.", // 10
662 "Wygraj 5 rund - 1000 Dośw.", // 11
663 "Zabij 10 Missly - 4000 Dośw.", // 12
664 "Zabij 10 Komandos - 4000 Dośw.", // 13
665 "Zabij 12 Grom - 6000 Dośw. ", // 14
666 "Zabij 20 Snajperów - 7500 Dośw.", // 15
667 "Zabij 20 Szturmena [od 250LVL]- 9000 Dośw.", // 16
668 "Zabij 20 Rambo - 24000 Dośw." // 17
669};
670new doswiadczenie_poziomu[] =
671{
672 0, 19, 58, 107, 179, 252, 361, 474, 607, 766,
673 938, 1119, 1313, 1509, 1739, 1986, 2249, 2537, 2837, 3137,
674 3461, 3787, 4124, 4493, 4886, 5279, 5694, 6132, 6595, 7064,
675 7555, 8053, 8569, 9102, 9645, 10196, 10772, 11374, 11997, 12625,
676 13258, 13925, 14596, 15279, 15983, 16718, 17456, 18209, 18987, 19786,
677 20601, 21430, 22263, 23096, 23945, 24822, 25726, 26630, 27543, 28501,
678 29459, 30435, 31435, 32447, 33487, 34538, 35590, 36672, 37766, 38878,
679 39997, 41135, 42282, 43452, 44640, 45844, 47068, 48299, 49563, 50843,
680 52126, 53420, 54742, 56075, 57429, 58790, 60167, 61560, 62965, 64377,
681 65789, 67228, 68684, 70176, 71679, 73205, 74745, 76301, 77884, 79482,
682 81096, 82723, 84371, 86023, 87685, 89362, 91057, 92783, 94521, 96275,
683 98051, 99833, 101633, 103439, 105269, 107110, 108969, 110831, 112727, 114640,
684 116557, 118508, 120475, 122450, 124446, 126448, 128465, 130507, 132566, 134633,
685 136714, 138824, 140939, 143058, 145216, 147389, 149580, 151771, 153977, 156201,
686 158429, 160665, 162905, 165155, 167424, 169749, 172089, 174429, 176800, 179189,
687 181586, 183984, 186414, 188867, 191346, 193832, 196326, 198830, 201368, 203917,
688 206478, 209049, 211631, 214252, 216889, 219534, 222199, 224867, 227563, 230279,
689 233006, 235736, 238477, 241251, 244041, 246840, 249649, 252472, 255296, 258139,
690 261025, 263918, 266822, 269727, 272660, 275595, 278568, 281551, 284568, 287596,
691 290646, 293717, 296788, 299875, 302992, 306116, 309257, 312420, 315596, 318779,
692 321983, 325205, 328450, 331700, 334980, 338271, 341567, 344878, 348201, 351543,
693 354894, 358247, 361639, 365031, 368456, 371896, 375349, 378832, 382324, 385834,
694 389344, 392854, 396414, 399980, 403568, 407174, 410794, 414432, 418080, 421752,
695 425424, 429107, 432831, 436555, 440290, 444060, 447837, 451618, 455424, 459233,
696 463056, 466881, 470734, 474593, 478466, 482366, 486301, 490263, 494243, 498226,
697 502239, 506258, 510281, 514323, 518402, 522482, 526592, 530717, 534858, 539002,
698 543150, 547304, 551465, 555669, 559884, 564111, 568362, 572618, 576892, 581174,
699 585471, 589817, 594165, 598530, 602913, 607323, 611740, 616182, 620624, 625072,
700 629526, 634012, 638537, 643081, 647632, 652187, 656761, 661365, 665978, 670607,
701 675242, 679907, 684576, 689276, 693995, 698723, 703452, 708219, 712999, 717787,
702 722599, 727430, 732267, 737120, 741990, 746879, 751773, 756694, 761616, 766569,
703 771536, 776527, 781528, 786552, 791577, 796613, 801658, 806703, 811749, 816849,
704 821969, 827101, 832246, 837419, 842612, 847817, 853031, 858271, 863515, 868787,
705 874061, 879372, 884683, 890020, 895379, 900744, 906114, 911505, 916901, 922310,
706 927745, 933203, 938689, 944178, 949685, 955194, 960705, 966265, 971848, 977440,
707 983037, 988659, 994291, 999936, 1005614, 1011304, 1017013, 1022735, 1028459, 1034185,
708 1039931, 1045714, 1051497, 1057306, 1063145, 1068985, 1074853, 1080728, 1086607, 1092516,
709 1098442, 1104369, 1110333, 1116298, 1122279, 1128289, 1134308, 1140350, 1146404, 1152467,
710 1158543, 1164650, 1170770, 1176897, 1183052, 1189224, 1195396, 1201583, 1207799, 1214015,
711 1220240, 1226466, 1232701, 1238975, 1245249, 1251573, 1257898, 1264256, 1270629, 1277002,
712 1283395, 1289810, 1296256, 1302714, 1309172, 1315667, 1322167, 1328693, 1335223, 1341781
713};
714public OnPluginStart()
715{
716 CreateConVar("Call of Duty", "1.0", "Linux`");
717 RegAdminCmd("sm_dodajexp", CmdExp, ADMFLAG_RCON);
718 RegAdminCmd("sm_inteligencja", IleInt, ADMFLAG_RCON);
719 RegAdminCmd("sm_dodajlvl", CmdLvl, ADMFLAG_RCON);
720 RegAdminCmd("sm_dajitem", CmdItem, ADMFLAG_RCON);
721
722 RegConsoleCmd("say", Komendy);
723 RegConsoleCmd("say_team", Komendy);
724
725 RegConsoleCmd("buy", BlokujKomende);
726 RegConsoleCmd("buyequip", BlokujKomende);
727 RegConsoleCmd("buyammo1", BlokujKomende);
728 RegConsoleCmd("buyammo2", BlokujKomende);
729 RegConsoleCmd("cl_setautobuy", BlokujKomende);
730 RegConsoleCmd("cl_autobuy", BlokujKomende);
731 RegConsoleCmd("rebuy", BlokujKomende);
732 RegConsoleCmd("autobuy", BlokujKomende);
733 RegConsoleCmd("fullupdate", BlokujKomende);
734 RegConsoleCmd("autobuy", CodMenu);
735
736 HookEvent("round_freeze_end", PoczatekRundy);
737 HookEvent("round_start", NowaRunda);
738 HookEvent("round_end", KoniecRundy);
739
740 HookEvent("bomb_planted", BombaPodlozona);
741 HookEvent("bomb_defused", BombaRozbrojona);
742 HookEvent("hostage_rescued", ZakladnikUratowany);
743
744 HookEvent("player_spawn", PlayerSpawn);
745 HookEvent("player_death", PlayerDeath);
746 HookEvent("player_blind", PlayerBlind);
747 HookEvent("hegrenade_detonate", HeDetonate);
748 HookEvent("flashbang_detonate", FbDetonate);
749 HookEvent("bullet_impact", StrzalGracza);
750
751 HookEvent("round_start", NowaRundax);
752 HookEvent("round_end", KoniecRundyx);
753
754 AddNormalSoundHook(DzwiekiGracza);
755 HookUserMessage(GetUserMessageId("TextMsg"), TextMessage, true);
756
757 ServerCommand("sv_disable_immunity_alpha 1");
758 LoadTranslations("common.phrases");
759}
760public OnMapStart()
761{
762 for(new i = 1; i < sizeof dzwieki_serwera; i ++)
763 {
764 new String:sound_serwer[512];
765 Format(sound_serwer, sizeof(sound_serwer), "sound/%s", dzwieki_serwera[i]);
766 AddFileToDownloadsTable(sound_serwer);
767 }
768 for(new i = 1; i < sizeof modele_serwera; i ++)
769 PrecacheModel(modele_serwera[i]);
770
771 sprite_laser = PrecacheModel("materials/sprites/laserbeam.vmt");
772 sprite_halo = PrecacheModel("materials/sprites/halo.vmt");
773 sprite_blue = PrecacheModel("materials/sprites/blueflare1.vmt");
774 sprite_explosion = PrecacheModel("materials/sprites/blueflare1.vmt");
775 PrecacheModel("models/props_rooftop/hotel_rooftop_equip002.mdl");
776 PrecacheModel("models/weapons/w_mach_m249.mdl");
777 g_iSprite = PrecacheModel(MODEL_BEAM);
778 PrecacheSoundAny(HOOK_SOUND, true);
779 AddFileToDownloadsTable("sound/cod/getoverhere.mp3");
780
781 PrecacheSound("weapons/m249/m249-1.wav");
782 PrecacheSound("vehicles/apc_stop_then_idle_loop.wav");
783 PrecacheSound("physics/metal/metal_box_impact_bullet1.wav");
784 PrecacheSound("physics/metal/metal_box_impact_bullet2.wav");
785 PrecacheSound("physics/metal/metal_box_impact_bullet3.wav");
786 PrecacheSound("physics/metal/metal_box_impact_hard1.wav");
787 PrecacheSound("physics/metal/metal_box_impact_hard2.wav");
788 PrecacheSound("physics/metal/metal_box_impact_hard3.wav");
789 PrecacheSound("physics/metal/metal_barrel_impact_hard5.wav");
790 PrecacheSound("physics/metal/sawblade_stick1.wav");
791 PrecacheSound("physics/metal/sawblade_stick2.wav");
792 PrecacheSound("weapons/hegrenade/explode5.wav");
793 DataBaseConnect();
794 WczytajTopke();
795}
796public OnClientAuthorized(client)
797{
798 GetClientName(client, nazwa_gracza[client], 64);
799 UsunUmiejetnosci(client);
800}
801public OnClientPutInServer(client)
802{
803 if(!IsFakeClient(client))
804 SendConVarValue(client, FindConVar("sv_footsteps"), "0");
805
806 SDKHook(client, SDKHook_TraceAttack, TraceAttack);
807 SDKHook(client, SDKHook_OnTakeDamage, TakeDamage);
808 SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
809 SDKHook(client, SDKHook_SetTransmit, SetTransmit);
810 SDKHook(client, SDKHook_PostThinkPost, PostThinkPost);
811}
812public OnClientDisconnect(client)
813{
814 SDKUnhook(client, SDKHook_TraceAttack, TraceAttack);
815 SDKUnhook(client, SDKHook_OnTakeDamage, TakeDamage);
816 SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
817 SDKUnhook(client, SDKHook_SetTransmit, SetTransmit);
818 SDKUnhook(client, SDKHook_PostThinkPost, PostThinkPost);
819
820 ZapiszDane(client);
821 UsunUmiejetnosci(client);
822 UsunZadania(client);
823}
824public Action:UsunUmiejetnosci(client)
825{
826 for(new i = 1; i < sizeof nazwy_klas; i ++)
827 {
828 poziom_klasy_gracza[client][i] = 1;
829 doswiadczenie_klasy_gracza[client][i] = 0;
830 inteligencja_klasy_gracza[client][i] = 0;
831 zdrowie_klasy_gracza[client][i] = 0;
832 obrazenia_klasy_gracza[client][i] = 0;
833 wytrzymalosc_klasy_gracza[client][i] = 0;
834 kondycja_klasy_gracza[client][i] = 0;
835 misja_klasy_gracza[client][i] = 0;
836 zabicia_klasy_gracza[client][i] = 0;
837 }
838
839 polaczony_raz[client] = false;
840 wymiana_gracza[client] = false;
841 blokada_gracza[client] = false;
842 vip_gracza[client] = false;
843 nowa_klasa_gracza[client] = 0;
844 klasa_gracza[client] = 0;
845 doswiadczenie_gracza[client] = 0
846 poziom_gracza[client] = 1;
847 punkty_gracza[client] = 0;
848 inteligencja_gracza[client] = 0;
849 zdrowie_gracza[client] = 0;
850 obrazenia_gracza[client] = 0;
851 wytrzymalosc_gracza[client] = 0;
852 kondycja_gracza[client] = 0;
853 misja_gracza[client] = 0;
854 postep_gracza[client] = 0;
855 bonusowa_inteligencja_gracza[client] = 0;
856 bonusowe_zdrowie_gracza[client] = 0;
857 bonusowe_obrazenia_gracza[client] = 0;
858 bonusowa_wytrzymalosc_gracza[client] = 0;
859 bonusowa_kondycja_gracza[client] = 0;
860
861 ma_ladunek_piorun[client] = false;
862 g_iCzasTarczy[client] = 0;
863 ilosc_zatrutych_strzalek[client] = 0;
864 ilosc_skokow_parkur[client] = 0;
865 skoki_szturmen_vip[client] = 0;
866 uzyl_tarczy_grawitacyjnej[client] = 0;
867 ilosc_lodowych_pociskow[client] = 0;
868 ilosc_hakow_skorpiona[client] = 0;
869 ilosc_apteczek_gracza[client] = 0;
870 ilosc_dynamitow_gracza[client] = 0;
871 ilosc_rakiet_gracza[client] = 0;
872 ilosc_min_gracza[client] = 0;
873 dzialo_gracza[client][0] = -1;
874 dzialo_gracza[client][1] = -1;
875 UsunItem(client);
876}
877public Action:UsunZadania(client)
878{
879 if(sql_task[client] != null)
880 {
881 KillTimer(sql_task[client]);
882 sql_task[client] = null;
883 }
884 if(hud_task[client] != null)
885 {
886 KillTimer(hud_task[client]);
887 hud_task[client] = null;
888 }
889}
890public Action:Komendy(client, args)
891{
892 new String:text[192];
893 GetCmdArg(1, text, sizeof(text));
894
895 new ReplySource:old = SetCmdReplySource(SM_REPLY_TO_CHAT);
896 if(strcmp(text, "/m", false) == 0 || strcmp(text, "/menu", false) == 0)
897 CodMenu(client, args);
898 else if(strcmp(text, "/s", false) == 0 || strcmp(text, "/sklep", false) == 0)
899 CodSklep(client);
900 else if(strcmp(text, "/misja", false) == 0 || strcmp(text, "/misje", false) == 0 || strcmp(text, "/quest", false) == 0 || strcmp(text, "/zadania", false) == 0)
901 WybierzMisje(client);
902 else if(strcmp(text, "/info", false) == 0 || strcmp(text, "/infomisja", false) == 0 || strcmp(text, "/sprawdz", false) == 0 || strcmp(text, "/sprawdzmisje", false) == 0)
903 OpisMisji(client);
904 else if(strcmp(text, "/skille", false) == 0 || strcmp(text, "/opis", false) == 0 || strcmp(text, "/xp", false) == 0 || strcmp(text, "/doswiadczenie", false) == 0 || strcmp(text, "/dostep", false) == 0)
905 OpisStatystyk(client);
906 else if(strcmp(text, "/k", false) == 0 || strcmp(text, "/klasa", false) == 0)
907 WybierzKlase(client);
908 else if(strcmp(text, "/klasy", false) == 0)
909 OpisKlasy(client);
910 else if(strcmp(text, "/items", false) == 0 || strcmp(text, "/itemy", false) == 0 || strcmp(text, "/przedmioty", false) == 0 || strcmp(text, "/perki", false) == 0)
911 OpisItemow(client);
912 else if(strcmp(text, "/i", false) == 0 || strcmp(text, "/item", false) == 0 || strcmp(text, "/p", false) == 0 || strcmp(text, "/przedmiot", false) == 0 || strcmp(text, "/perk", false) == 0)
913 OpisItemu(client);
914 else if(strcmp(text, "/n", false) == 0 || strcmp(text, "/napraw", false) == 0)
915 NaprawItem(client);
916 else if(strcmp(text, "/staty", false) == 0 || strcmp(text, "/statystyki", false) == 0)
917 PrzydzielPunkty(client);
918 else if(strcmp(text, "/r", false) == 0 || strcmp(text, "/reset", false) == 0)
919 ResetujPunkty(client);
920 else if(strcmp(text, "/d", false) == 0 || strcmp(text, "/drop", false) == 0 || strcmp(text, "/wyrzuc", false) == 0)
921 WyrzucItem(client);
922 else if(strcmp(text, "/spect", false) == 0 || strcmp(text, "/spec", false) == 0)
923 ZmienDruzyne(client);
924 else if(strcmp(text, "/daj", false) == 0 || strcmp(text, "/oddaj", false) == 0)
925 OddajItem(client);
926 else if(strcmp(text, "/wymien", false) == 0 || strcmp(text, "/zamien", false) == 0)
927 WymienItem(client);
928 else if(strcmp(text, "/codtop15", false) == 0)
929 Top15Serwera(client);
930 else if(strcmp(text, "/codrank", false) == 0)
931
932 RankSerwera(client);
933 SetCmdReplySource(old);
934 return Plugin_Continue;
935
936}
937public Action:BlokujKomende(client, args)
938{
939 return Plugin_Handled;
940}
941public Action:TextMessage(UserMsg:msg_text, Handle:pb, const players[], playersNum, bool:reliable, bool:init)
942{
943 if(!reliable || PbReadInt(pb, "msg_dst") != 3)
944 return Plugin_Continue;
945
946 new String:buffer[256];
947 PbReadString(pb, "params", buffer, sizeof(buffer), 0);
948 if(StrContains(buffer, "#Player_Cash_Award_") == 0 || StrContains(buffer, "#Team_Cash_Award_") == 0)
949 return Plugin_Handled;
950
951 return Plugin_Continue;
952}
953public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapons)
954{
955 if(!IsValidClient(client) || !IsPlayerAlive(client) || freezetime)
956 return;
957
958 static bool:oldbuttons1[MAX_PLAYERS+1], oldbuttons2[MAX_PLAYERS+1], oldbuttons3[MAX_PLAYERS+1];
959
960 switch(klasa_gracza[client])
961 {
962 case Saper:
963 {
964 if(!oldbuttons1[client] && buttons & IN_USE)
965 {
966 if(ilosc_min_gracza[client])
967 {
968 new ent = CreateEntityByName("hegrenade_projectile");
969 if(ent != -1)
970 {
971 new Float:forigin[3];
972 GetClientEyePosition(client, forigin);
973
974 new Float:fangles[3];
975 GetClientEyeAngles(client, fangles);
976
977 new Float:iangles[3];
978 iangles[1] = fangles[1];
979
980 DispatchSpawn(ent);
981 ActivateEntity(ent);
982 SetEntityModel(ent, modele_serwera[12]);
983 SetEntityMoveType(ent, MOVETYPE_STEP);
984 TeleportEntity(ent, forigin, iangles, NULL_VECTOR);
985 SetEntProp(ent, Prop_Send, "m_usSolidFlags", 12);
986 SetEntProp(ent, Prop_Data, "m_nSolidType", 6);
987 SetEntProp(ent, Prop_Send, "m_CollisionGroup", 1);
988 SetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity", client);
989 SDKHook(ent, SDKHook_StartTouchPost, DotykMiny);
990 ilosc_min_gracza[client] --;
991 }
992 }
993 else
994 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
995
996 oldbuttons1[client] = true;
997 }
998 else if(oldbuttons1[client] && !(buttons & IN_USE))
999 oldbuttons1[client] = false;
1000 }
1001 case WsparcieOgniowe:
1002 {
1003 if(!oldbuttons1[client] && buttons & IN_USE)
1004 {
1005 if(ilosc_rakiet_gracza[client])
1006 {
1007 new ent = CreateEntityByName("hegrenade_projectile");
1008 if(ent != -1)
1009 {
1010 new Float:forigin[3];
1011 GetClientEyePosition(client, forigin);
1012
1013 new Float:fangles[3];
1014 GetClientEyeAngles(client, fangles);
1015
1016 new Float:iorigin[3], Float:iangles[3], Float:ivector[3];
1017 TR_TraceRayFilter(forigin, fangles, MASK_SOLID, RayType_Infinite, TraceRayFilter, ent);
1018 TR_GetEndPosition(iorigin);
1019 DispatchSpawn(ent);
1020 ActivateEntity(ent);
1021 SetEntityModel(ent, modele_serwera[11]);
1022 SetEntityMoveType(ent, MOVETYPE_STEP);
1023 SetEntityGravity(ent, 0.01);
1024 MakeVectorFromPoints(forigin, iorigin, ivector);
1025 NormalizeVector(ivector, ivector);
1026 ScaleVector(ivector, 1000.0);
1027 GetVectorAngles(ivector, iangles);
1028 TeleportEntity(ent, forigin, iangles, ivector);
1029 SetEntProp(ent, Prop_Send, "m_usSolidFlags", 12);
1030 SetEntProp(ent, Prop_Data, "m_nSolidType", 6);
1031 SetEntProp(ent, Prop_Send, "m_CollisionGroup", 1);
1032 SetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity", client);
1033 SDKHook(ent, SDKHook_StartTouchPost, DotykRakiety);
1034 ilosc_rakiet_gracza[client] --;
1035 }
1036 }
1037 else
1038 PrintToChat(client, "%s Wykorzystałeś już moc swojej klasy w tej rundzie!", PREFIX);
1039
1040 oldbuttons1[client] = true;
1041 }
1042 else if(oldbuttons1[client] && !(buttons & IN_USE))
1043 oldbuttons1[client] = false;
1044 }
1045 case Medyk:
1046 {
1047 if(!oldbuttons1[client] && buttons & IN_USE)
1048 {
1049 if(ilosc_apteczek_gracza[client])
1050 {
1051 oldbuttons1[client] = true;
1052 int druzynagracza = GetClientTeam(client);
1053 if ((druzynagracza == 2 && umarlct) || (druzynagracza == 3 && umarltt))
1054 {
1055 GetClientAbsOrigin(client, SAVELOC[client]);
1056 if (druzynagracza == 3)
1057 RespienieTT(client);
1058 else if (druzynagracza == 2)
1059 RespienieCT(client);
1060
1061 ilosc_apteczek_gracza[client] --;
1062 }
1063 else if ((druzynagracza == 2 && !umarlct) || (druzynagracza == 3 && !umarltt))
1064 {
1065 oldbuttons1[client] = true;
1066 PrintToChat(client, "%s Nie ma kogo wskrzesić!", PREFIX);
1067 return;
1068 }
1069 }
1070 else
1071 {
1072 PrintToChat(client, "%s Wykorzystałeś już moc swojej klasy w tej rundzie!", PREFIX);
1073 oldbuttons1[client] = true;
1074 }
1075 }
1076 else if(oldbuttons1[client] && !(buttons & IN_USE))
1077 oldbuttons1[client] = false;
1078 }
1079 case Kangur:
1080 {
1081 if(buttons & IN_JUMP)
1082 {
1083 if(!(GetEntityFlags(client) & (FL_WATERJUMP | FL_ONGROUND)))
1084 buttons &= ~IN_JUMP;
1085 }
1086 }
1087 case Terminator:
1088 {
1089 if(!oldbuttons1[client] && buttons & IN_USE)
1090 {
1091 if(!uzyl_betonowego_ciala[client])
1092 {
1093 if(godmode_task[client] == INVALID_HANDLE)
1094 {
1095 godmode_task[client] = CreateTimer(3.0, WylaczGodmode, client, TIMER_FLAG_NO_MAPCHANGE);
1096 SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime());
1097 SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 5);
1098 uzyl_betonowego_ciala[client] = true;
1099 }
1100 else
1101 PrintToChat(client, "%s Jesteś właśnie w trakcie używania mocy swojej klasy!", PREFIX);
1102 }
1103 else
1104 PrintToChat(client, "%s Wykorzystałeś już moc swojej klasy w tej rundzie!", PREFIX);
1105
1106 oldbuttons1[client] = true;
1107 }
1108 else if(oldbuttons1[client] && !(buttons & IN_USE))
1109 oldbuttons1[client] = false;
1110 }
1111 case Kamikadze:
1112 {
1113 if(!oldbuttons1[client] && buttons & IN_USE)
1114 {
1115 oldbuttons1[client] = true;
1116 if(!uzyl_kamikadze[client])
1117 {
1118 new Float:forigin[3], Float:iorigin[3];
1119 GetClientEyePosition(client, forigin);
1120
1121 for(new i = 1; i <= MaxClients; i++)
1122 {
1123 if(!IsClientInGame(i) || !IsPlayerAlive(i))
1124 continue;
1125
1126 if(GetClientTeam(client) == GetClientTeam(i))
1127 continue;
1128
1129 if(klasa_gracza[i] == Obronca)
1130 continue;
1131
1132 if(informacje_itemu_gracza[i][0] == 30)
1133 continue;
1134
1135 GetClientEyePosition(i, iorigin);
1136
1137 if(GetVectorDistance(forigin, iorigin) <= 300.0)
1138 {
1139 ZadajObrazenia(i, client, client, 999.0, DMG_GENERIC);
1140 }
1141 new hp_clienta = GetClientHealth(client);
1142 ZadajObrazenia(client, client, client, float(hp_clienta+1), DMG_GENERIC);
1143 EmitSoundToAll("weapons/hegrenade/explode5.wav", client, SNDCHAN_AUTO, SNDLEVEL_GUNFIRE);
1144 TE_SetupExplosion(forigin, sprite_explosion, 10.0, 1, 0, 100, 100);
1145 TE_SendToAll();
1146 uzyl_kamikadze[client] = true;
1147 }
1148 }
1149 else
1150 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1151 }
1152 else if(oldbuttons2[client] && !(buttons & IN_USE))
1153 oldbuttons2[client] = false;
1154 }
1155 case Piorun:
1156 {
1157 if(!oldbuttons1[client] && buttons & IN_USE)
1158 {
1159 if(!ma_ladunek_piorun[client])
1160 return;
1161
1162 else
1163 {
1164 ThunderStorm(client);
1165 }
1166 oldbuttons1[client] = true;
1167 }
1168 else if(oldbuttons1[client] && !(buttons & IN_USE))
1169 oldbuttons1[client] = false;
1170 }
1171 case Jednooki:
1172 {
1173 new String:weapon[32];
1174 GetClientWeapon(client, weapon, sizeof(weapon));
1175 if(StrEqual(weapon, nazwy_broni[27]) || StrEqual(weapon, nazwy_broni[28]) || StrEqual(weapon, nazwy_broni[29]) || StrEqual(weapon, nazwy_broni[30]))
1176 {
1177 new ent = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
1178 if(ent != -1)
1179 SetEntDataFloat(ent, FindSendPropInfo("CBaseCombatWeapon", "m_flNextSecondaryAttack"), GetGameTime()+9999.9);
1180 }
1181 }
1182 case Szturmen:
1183 {
1184 if(informacje_itemu_gracza[client][0] != 73)
1185 {
1186 if(!vip_gracza[client])
1187 {
1188 if(!oldbuttons1[client] && buttons & IN_JUMP)
1189 {
1190 new flags = GetEntityFlags(client);
1191 if(!(flags & FL_ONGROUND) && umiejetnosc_gracza[client])
1192 {
1193 new Float:fOrigin[3];
1194 GetEntPropVector(client, Prop_Data, "m_vecVelocity", fOrigin);
1195 fOrigin[2] = 250.0;
1196 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fOrigin);
1197 umiejetnosc_gracza[client] = false;
1198 }
1199 else if(flags & FL_ONGROUND)
1200 umiejetnosc_gracza[client] = true;
1201
1202 oldbuttons1[client] = true;
1203 }
1204 else if(oldbuttons1[client] && !(buttons & IN_JUMP))
1205 oldbuttons1[client] = false;
1206 }
1207 else
1208 {
1209 if(!oldbuttons1[client] && buttons & IN_JUMP)
1210 {
1211 new flags = GetEntityFlags(client);
1212 if(!(flags & FL_ONGROUND) && skoki_szturmen_vip[client])
1213 {
1214 new Float:fOrigin[3];
1215 GetEntPropVector(client, Prop_Data, "m_vecVelocity", fOrigin);
1216 fOrigin[2] = 250.0;
1217 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fOrigin);
1218 skoki_szturmen_vip[client] --;
1219 }
1220 else if(flags & FL_ONGROUND)
1221 skoki_szturmen_vip[client] = 2;
1222
1223 oldbuttons1[client] = true;
1224 }
1225 else if(oldbuttons1[client] && !(buttons & IN_JUMP))
1226 oldbuttons1[client] = false;
1227 }
1228 }
1229 }
1230 case Inzynier:
1231 {
1232 if(!oldbuttons1[client] && buttons & IN_USE)
1233 {
1234 if(dzialo_gracza[client][0] != -1 || dzialo_gracza[client][1] != -1)
1235 PrintToChat(client, "%s Wykorzystałeś już moc swojej klasy w tej rundzie!", PREFIX);
1236 else
1237 {
1238 dzialo_gracza[client][0] = CreateEntityByName("hegrenade_projectile");
1239 if (dzialo_gracza[client][0] != -1)
1240 {
1241 new Float:forigin[3];
1242 GetClientEyePosition(client, forigin);
1243
1244 new Float:fangles[3];
1245 GetClientEyeAngles(client, fangles);
1246
1247 new Float:iangles[3];
1248 iangles[1] = fangles[1];
1249
1250 DispatchSpawn(dzialo_gracza[client][0]);
1251 ActivateEntity(dzialo_gracza[client][0]);
1252 SetEntityModel(dzialo_gracza[client][0], "models/props_rooftop/hotel_rooftop_equip002.mdl");
1253 SetEntityMoveType(dzialo_gracza[client][0], MOVETYPE_STEP);
1254 TeleportEntity(dzialo_gracza[client][0], forigin, iangles, NULL_VECTOR);
1255 SetEntProp(dzialo_gracza[client][0], Prop_Data, "m_takedamage", 2);
1256 SetEntProp(dzialo_gracza[client][0], Prop_Data, "m_iHealth", 200+(inteligencja_gracza[client]+bonusowa_inteligencja_gracza[client]));
1257 SetEntProp(dzialo_gracza[client][0], Prop_Send, "m_usSolidFlags", 12);
1258 SetEntProp(dzialo_gracza[client][0], Prop_Data, "m_nSolidType", 6);
1259 SetEntProp(dzialo_gracza[client][0], Prop_Send, "m_CollisionGroup", 1);
1260 SetEntPropEnt(dzialo_gracza[client][0], Prop_Send, "m_hOwnerEntity", client);
1261 procent_dziala[client] = 0;
1262
1263 SDKHook(dzialo_gracza[client][0], SDKHook_OnTakeDamage, ObrazeniaDzialka);
1264 EmitSoundToAll("physics/metal/metal_barrel_impact_hard5.wav", dzialo_gracza[client][0]);
1265 }
1266 }
1267
1268 oldbuttons1[client] = true;
1269 }
1270 else if(oldbuttons1[client] && !(buttons & IN_USE))
1271 oldbuttons1[client] = false;
1272 }
1273 }
1274 switch(informacje_itemu_gracza[client][0])
1275 {
1276 case 3:
1277 {
1278 if(GetGameTime() >= informacje_itemu_gracza[client][1]+10.0)
1279 {
1280 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+20<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+20: maksymalne_zdrowie_gracza[client]);
1281 informacje_itemu_gracza[client][1] = RoundFloat(GetGameTime());
1282 }
1283 }
1284 case 4:
1285 {
1286 if(!oldbuttons2[client] && buttons & IN_USE)
1287 {
1288 if(informacje_itemu_gracza[client][1])
1289 {
1290 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), maksymalne_zdrowie_gracza[client]);
1291 informacje_itemu_gracza[client][1] --;
1292 }
1293 else
1294 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1295
1296 oldbuttons2[client] = true;
1297 }
1298 else if(oldbuttons2[client] && !(buttons & IN_USE))
1299 oldbuttons2[client] = false;
1300 }
1301 case 13:
1302 {
1303 if(!oldbuttons2[client] && buttons & IN_USE)
1304 {
1305 if(GetEntProp(client, Prop_Send, "m_bNightVisionOn"))
1306 SetEntProp(client, Prop_Send, "m_bNightVisionOn", 0);
1307 else
1308 SetEntProp(client, Prop_Send, "m_bNightVisionOn", 1);
1309
1310 oldbuttons2[client] = true;
1311 }
1312 else if(oldbuttons2[client] && !(buttons & IN_USE))
1313 oldbuttons2[client] = false;
1314 }
1315 case 19:
1316 {
1317 if(buttons & IN_ATTACK)
1318 {
1319 new String:weapon[32];
1320 GetClientWeapon(client, weapon, sizeof(weapon));
1321 if(StrEqual(weapon, nazwy_broni[42]) || StrEqual(weapon, nazwy_broni[1]) || StrEqual(weapon, nazwy_broni[2]) || StrEqual(weapon, nazwy_broni[3]) || StrEqual(weapon, nazwy_broni[4]) || StrEqual(weapon, nazwy_broni[5]) || StrEqual(weapon, nazwy_broni[6]) || StrEqual(weapon, nazwy_broni[7]) || StrEqual(weapon, nazwy_broni[8]) || StrEqual(weapon, nazwy_broni[9]))
1322 {
1323 static bool:multiattack[65];
1324 if(!multiattack[client])
1325 {
1326 buttons &= ~IN_ATTACK;
1327 multiattack[client] = true;
1328 }
1329 else
1330 multiattack[client] = false;
1331 }
1332 }
1333 }
1334 case 22:
1335 {
1336 if(!oldbuttons2[client] && buttons & IN_USE)
1337 {
1338 if(GetGameTime() >= informacje_itemu_gracza[client][1]+4.0)
1339 {
1340 new Float:forigin[3];
1341 GetClientEyePosition(client, forigin);
1342
1343 new Float:fangles[3];
1344 GetClientEyeAngles(client, fangles);
1345
1346 new Float:iorigin[3], Float:iangles[3], Float:ivector[3];
1347 TR_TraceRayFilter(forigin, fangles, MASK_SOLID, RayType_Infinite, TraceRayFilter, client);
1348 TR_GetEndPosition(iorigin);
1349 MakeVectorFromPoints(forigin, iorigin, ivector);
1350 NormalizeVector(ivector, ivector);
1351 ScaleVector(ivector, 600.0);
1352 GetVectorAngles(ivector, iangles);
1353
1354 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, ivector);
1355 informacje_itemu_gracza[client][1] = RoundFloat(GetGameTime());
1356 }
1357
1358 oldbuttons2[client] = true;
1359 }
1360 else if(oldbuttons2[client] && !(buttons & IN_USE))
1361 oldbuttons2[client] = false;
1362 }
1363 case 25:
1364 {
1365 if(!oldbuttons2[client] && buttons & IN_ATTACK2)
1366 {
1367 new String:weapon[32];
1368 GetClientWeapon(client, weapon, sizeof(weapon));
1369 if(!(StrEqual(weapon, nazwy_broni[25]) || StrEqual(weapon, nazwy_broni[26]) || StrEqual(weapon, nazwy_broni[27]) || StrEqual(weapon, nazwy_broni[28]) || StrEqual(weapon, nazwy_broni[29]) || StrEqual(weapon, nazwy_broni[30]) || StrEqual(weapon, nazwy_broni[33]) || StrEqual(weapon, nazwy_broni[34]) || StrEqual(weapon, nazwy_broni[35]) || StrEqual(weapon, nazwy_broni[36]) || StrEqual(weapon, nazwy_broni[37]) || StrEqual(weapon, nazwy_broni[38]) || StrContains(weapon, nazwy_broni[40]) != -1 || StrEqual(weapon, nazwy_broni[41])))
1370 {
1371 if(informacje_itemu_gracza[client][1])
1372 {
1373 informacje_itemu_gracza[client][1] --;
1374 SetEntProp(client, Prop_Send, "m_iFOV", 270);
1375 }
1376 else
1377 {
1378 informacje_itemu_gracza[client][1] = 1;
1379 SetEntProp(client, Prop_Send, "m_iFOV", 90);
1380 }
1381 }
1382
1383 oldbuttons2[client] = true;
1384 }
1385 else if(oldbuttons2[client] && !(buttons & IN_ATTACK2))
1386 oldbuttons2[client] = false;
1387 }
1388 case 26:
1389 {
1390 if(GetGameTime() >= informacje_itemu_gracza[client][1]+20.0)
1391 {
1392 GivePlayerItem(client, nazwy_broni[34]);
1393 informacje_itemu_gracza[client][1] = RoundFloat(GetGameTime());
1394 }
1395 }
1396 case 35:
1397 {
1398 new String:weapon[32];
1399 GetClientWeapon(client, weapon, sizeof(weapon));
1400 if(!StrEqual(weapon, nazwy_broni[33]) && !StrEqual(weapon, nazwy_broni[34]) && !StrEqual(weapon, nazwy_broni[35]) && !StrEqual(weapon, nazwy_broni[36]) && !StrEqual(weapon, nazwy_broni[37]) && !StrEqual(weapon, nazwy_broni[38]) && !StrEqual(weapon, nazwy_broni[41]))
1401 {
1402 if(buttons & IN_ATTACK)
1403 {
1404 new ent = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
1405 if(ent != -1)
1406 {
1407 new Float:flNextPrimaryAttack = GetEntDataFloat(ent, FindSendPropInfo("CBaseCombatWeapon", "m_flNextPrimaryAttack"))-GetGameTime();
1408 SetEntDataFloat(ent, FindSendPropInfo("CBaseCombatWeapon", "m_flNextPrimaryAttack"), (flNextPrimaryAttack/1.4)+GetGameTime());
1409 }
1410 }
1411 }
1412 }
1413 case 38:
1414 {
1415 if(!oldbuttons2[client] && buttons & IN_USE)
1416 {
1417 if(informacje_itemu_gracza[client][1])
1418 {
1419 new Float:fOrigin[3];
1420 new Float:iOrigin[3];
1421 GetClientEyePosition(client, Float:fOrigin);
1422 for(new i = 1; i <= MaxClients; i++)
1423 {
1424 if(!IsClientInGame(i) || !IsPlayerAlive(i))
1425 continue;
1426
1427 if(GetClientTeam(client) == GetClientTeam(i))
1428 continue;
1429
1430 if(informacje_itemu_gracza[i][0] == 29)
1431 continue;
1432
1433 GetClientEyePosition(i, Float:iOrigin);
1434 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
1435 {
1436 if(GetEntProp(i, Prop_Send, "m_ArmorValue"))
1437 SetEntProp(i, Prop_Send, "m_ArmorValue", 0);
1438
1439 IgniteEntity(i, 15.0);
1440 }
1441 }
1442
1443 TE_SetupBeamRingPoint(fOrigin, 20.0, 200.0, sprite_laser, sprite_halo, 0, 10, 0.6, 6.0, 0.0, {255, 255, 255, 128}, 10, 0);
1444 TE_SendToAll();
1445
1446 informacje_itemu_gracza[client][1] --;
1447 }
1448 else
1449 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1450
1451 oldbuttons2[client] = true;
1452 }
1453 else if(oldbuttons2[client] && !(buttons & IN_USE))
1454 oldbuttons2[client] = false;
1455 }
1456 case 50:
1457 {
1458 if(!oldbuttons2[client] && buttons & IN_USE)
1459 {
1460 if(informacje_itemu_gracza[client][1])
1461 {
1462 if(godmode_task[client] == INVALID_HANDLE)
1463 {
1464 godmode_task[client] = CreateTimer(5.0, WylaczGodmode, client, TIMER_FLAG_NO_MAPCHANGE);
1465 SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime());
1466 SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 5);
1467 informacje_itemu_gracza[client][1] --;
1468 }
1469 else
1470 PrintToChat(client, "%s Jesteś właśnie w trakcie używania mocy swojego itemu!", PREFIX);
1471 }
1472 else
1473 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1474
1475 oldbuttons2[client] = true;
1476 }
1477 else if(oldbuttons2[client] && !(buttons & IN_USE))
1478 oldbuttons2[client] = false;
1479 }
1480 case 53:
1481 {
1482 if(!oldbuttons2[client] && buttons & IN_USE)
1483 {
1484 if(informacje_itemu_gracza[client][1])
1485 {
1486 new ent = CreateEntityByName("hegrenade_projectile");
1487 if(ent != -1)
1488 {
1489 new Float:forigin[3];
1490 GetClientEyePosition(client, forigin);
1491
1492 new Float:fangles[3];
1493 GetClientEyeAngles(client, fangles);
1494
1495 new Float:iangles[3];
1496 iangles[1] = fangles[1];
1497
1498 DispatchSpawn(ent);
1499 ActivateEntity(ent);
1500 SetEntityModel(ent, modele_serwera[12]);
1501 SetEntityMoveType(ent, MOVETYPE_STEP);
1502 TeleportEntity(ent, forigin, iangles, NULL_VECTOR);
1503 SetEntProp(ent, Prop_Send, "m_usSolidFlags", 12);
1504 SetEntProp(ent, Prop_Data, "m_nSolidType", 6);
1505 SetEntProp(ent, Prop_Send, "m_CollisionGroup", 1);
1506 SetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity", client);
1507 SDKHook(ent, SDKHook_StartTouchPost, DotykMiny);
1508 informacje_itemu_gracza[client][1] --;
1509 }
1510 }
1511 else
1512 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1513
1514 oldbuttons2[client] = true;
1515 }
1516 else if(oldbuttons2[client] && !(buttons & IN_USE))
1517 oldbuttons2[client] = false;
1518 }
1519 case 56:
1520 {
1521 if(!oldbuttons2[client] && buttons & IN_USE)
1522 {
1523 if(informacje_itemu_gracza[client][1])
1524 {
1525 new ent = CreateEntityByName("hegrenade_projectile");
1526 if(ent != -1)
1527 {
1528 new Float:forigin[3];
1529 GetClientEyePosition(client, forigin);
1530
1531 new Float:fangles[3];
1532 GetClientEyeAngles(client, fangles);
1533
1534 new Float:iorigin[3], Float:iangles[3], Float:ivector[3];
1535 TR_TraceRayFilter(forigin, fangles, MASK_SOLID, RayType_Infinite, TraceRayFilter, ent);
1536 TR_GetEndPosition(iorigin);
1537 DispatchSpawn(ent);
1538 ActivateEntity(ent);
1539 SetEntityModel(ent, modele_serwera[13]);
1540 SetEntityMoveType(ent, MOVETYPE_STEP);
1541 SetEntityGravity(ent, 0.01);
1542 MakeVectorFromPoints(forigin, iorigin, ivector);
1543 NormalizeVector(ivector, ivector);
1544 ScaleVector(ivector, 1000.0);
1545 GetVectorAngles(ivector, iangles);
1546 TeleportEntity(ent, forigin, iangles, ivector);
1547 SetEntProp(ent, Prop_Send, "m_usSolidFlags", 12);
1548 SetEntProp(ent, Prop_Data, "m_nSolidType", 6);
1549 SetEntProp(ent, Prop_Send, "m_CollisionGroup", 1);
1550 SetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity", client);
1551 SDKHook(ent, SDKHook_StartTouchPost, DotykNoza);
1552 informacje_itemu_gracza[client][1] --;
1553 }
1554 }
1555 else
1556 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1557
1558 oldbuttons2[client] = true;
1559 }
1560 else if(oldbuttons2[client] && !(buttons & IN_USE))
1561 oldbuttons2[client] = false;
1562 }
1563 case 60:
1564 {
1565 if(!oldbuttons2[client] && buttons & IN_USE)
1566 {
1567 set_user_esp(client, get_user_esp(client)? 0: 1);
1568 oldbuttons2[client] = true;
1569 }
1570 else if(oldbuttons2[client] && !(buttons & IN_USE))
1571 oldbuttons2[client] = false;
1572 }
1573 case 63:
1574 {
1575 if(!oldbuttons2[client] && buttons & IN_USE)
1576 {
1577 oldbuttons2[client] = true;
1578 if(!uzyl_kamikazze[client])
1579 {
1580 new Float:forigin[3], Float:iorigin[3];
1581 GetClientEyePosition(client, forigin);
1582
1583 for(new i = 1; i <= MaxClients; i++)
1584 {
1585 if(!IsClientInGame(i) || !IsPlayerAlive(i))
1586 continue;
1587
1588 if(GetClientTeam(client) == GetClientTeam(i))
1589 continue;
1590
1591 if(informacje_itemu_gracza[i][0] == 29)
1592 continue;
1593
1594 GetClientEyePosition(i, iorigin);
1595
1596 if(GetVectorDistance(forigin, iorigin) <= 300.0)
1597 {
1598 ZadajObrazenia(i, client, client, 999.0, DMG_GENERIC);
1599 }
1600 new hp_clienta = GetClientHealth(client);
1601 ZadajObrazenia(client, client, client, float(hp_clienta+1), DMG_GENERIC);
1602 EmitSoundToAll("weapons/hegrenade/explode5.wav", client, SNDCHAN_AUTO, SNDLEVEL_GUNFIRE);
1603 TE_SetupExplosion(forigin, sprite_explosion, 10.0, 1, 0, 100, 100);
1604 TE_SendToAll();
1605 uzyl_kamikazze[client] = true;
1606 }
1607 }
1608 else
1609 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1610 }
1611 else if(oldbuttons2[client] && !(buttons & IN_USE))
1612 oldbuttons2[client] = false;
1613 }
1614 case 65:
1615 {
1616 if(!oldbuttons2[client] && buttons & IN_USE)
1617 {
1618 oldbuttons2[client] = true;
1619 if(!uzyl_pomocnejdloni[client])
1620 {
1621 oldbuttons2[client] = true;
1622 int druzynagracza = GetClientTeam(client);
1623 if ((druzynagracza == 2 && umarlct) || (druzynagracza == 3 && umarltt))
1624 {
1625 GetClientAbsOrigin(client, SAVELOC[client]);
1626 if (druzynagracza == 3)
1627 RespienieTT(client);
1628 else if (druzynagracza == 2)
1629 RespienieCT(client);
1630
1631 uzyl_pomocnejdloni[client] = true;
1632 }
1633 else if ((druzynagracza == 2 && !umarlct) || (druzynagracza == 3 && !umarltt))
1634 {
1635 oldbuttons2[client] = true;
1636 PrintToChat(client, "%s Nie ma kogo wskrzesić!", PREFIX);
1637 return;
1638 }
1639 }
1640 else
1641 {
1642 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1643 oldbuttons2[client] = true;
1644 }
1645 }
1646 else if(oldbuttons2[client] && !(buttons & IN_USE))
1647 oldbuttons2[client] = false;
1648 }
1649 case 69:
1650 {
1651 if(!oldbuttons2[client] && buttons & IN_USE)
1652 {
1653 if(ilosc_lodowych_pociskow[client])
1654 {
1655 if(!ma_lodowy_pocisk[client])
1656 {
1657 oldbuttons2[client] = true;
1658 ScreenEffect(client, 350, 200, FFADE_IN | FFADE_MODULATE, 0, 127, 255, 255);
1659 ma_lodowy_pocisk[client] = true;
1660 }
1661 else
1662 {
1663 PrintToChat(client, "%s Twój pocisk już jest zamrożony!", PREFIX);
1664 oldbuttons2[client] = true;
1665 }
1666 }
1667 else
1668 {
1669 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1670 oldbuttons2[client] = true;
1671 }
1672 }
1673 else if(oldbuttons2[client] && !(buttons & IN_USE))
1674 oldbuttons2[client] = false;
1675 }
1676 case 70:
1677 {
1678 if(!oldbuttons2[client] && buttons & IN_USE)
1679 {
1680 if(ilosc_hakow_skorpiona[client])
1681 {
1682 if (!g_bHooked[client])
1683 {
1684 ScorpionHookOn(client)
1685 oldbuttons2[client] = true;
1686 }
1687 }
1688 else
1689 {
1690 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1691 oldbuttons2[client] = true;
1692 }
1693 }
1694 else if(oldbuttons2[client] && !(buttons & IN_USE))
1695 oldbuttons2[client] = false;
1696 }
1697 case 71:
1698 {
1699 if(!oldbuttons2[client] && buttons & IN_USE)
1700 {
1701 if(uzyl_tarczy_grawitacyjnej[client])
1702 {
1703 UzycieTarczyGrawitacyjnej(client);
1704 oldbuttons2[client] = true;
1705 uzyl_tarczy_grawitacyjnej[client] --;
1706 PrintToChat(client, "%s Przez 30 sekund pobliscy gracze będą posiadali ogromną grawitację!", PREFIX);
1707 }
1708 else
1709 {
1710 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1711 oldbuttons2[client] = true;
1712 }
1713 }
1714 else if(oldbuttons2[client] && !(buttons & IN_USE))
1715 oldbuttons2[client] = false;
1716 }
1717 case 72:
1718 {
1719 if(!oldbuttons2[client] && buttons & IN_USE)
1720 {
1721 if(!uzyl_elektromagnesu[client])
1722 {
1723 oldbuttons2[client] = true;
1724 uzyl_elektromagnesu[client] = true;
1725 new Float:foriginelektromagnes[3], Float:ioriginelektromagnes[3];
1726 GetClientEyePosition(client, foriginelektromagnes);
1727 for(new i = 1; i <= MaxClients; i++)
1728 {
1729 if(!IsClientInGame(i) || !IsPlayerAlive(i))
1730 continue;
1731
1732 if(GetClientTeam(client) == GetClientTeam(i))
1733 continue;
1734
1735 if(informacje_itemu_gracza[i][0] == 29)
1736 continue;
1737
1738 GetClientEyePosition(i, ioriginelektromagnes);
1739 if(GetVectorDistance(foriginelektromagnes, ioriginelektromagnes) <= 300.0)
1740 {
1741 dostal_elektromagnesem[i] = true;
1742 zablokowano_strzal[i] = 0;
1743 CreateTimer(3.0, OdblokowanieBroni, i);
1744 }
1745 }
1746 }
1747 else
1748 {
1749 PrintToChat(client, "%s Wykorzystałeś już moc swojego itemu w tej rundzie!", PREFIX);
1750 oldbuttons2[client] = true;
1751 }
1752 }
1753 else if(oldbuttons2[client] && !(buttons & IN_USE))
1754 oldbuttons2[client] = false;
1755 }
1756 case 73:
1757 {
1758 if(klasa_gracza[client] != Szturmen)
1759 {
1760 if(!oldbuttons2[client] && buttons & IN_JUMP)
1761 {
1762 new flags = GetEntityFlags(client);
1763 if(!(flags & FL_ONGROUND) && ilosc_skokow_parkur[client])
1764 {
1765 new Float:fOrigin[3];
1766 GetEntPropVector(client, Prop_Data, "m_vecVelocity", fOrigin);
1767 fOrigin[2] = 250.0;
1768 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fOrigin);
1769 ilosc_skokow_parkur[client] --;
1770 }
1771 else if(flags & FL_ONGROUND)
1772 {
1773 if(vip_gracza[client])
1774 ilosc_skokow_parkur[client] = 3;
1775 else
1776 ilosc_skokow_parkur[client] = 2;
1777 }
1778 oldbuttons2[client] = true;
1779 }
1780 else if(oldbuttons2[client] && !(buttons & IN_JUMP))
1781 oldbuttons2[client] = false;
1782 }
1783 else
1784 {
1785 if(!oldbuttons2[client] && buttons & IN_JUMP)
1786 {
1787 new flags = GetEntityFlags(client);
1788 if(!(flags & FL_ONGROUND) && ilosc_skokow_parkur[client])
1789 {
1790 new Float:fOrigin[3];
1791 GetEntPropVector(client, Prop_Data, "m_vecVelocity", fOrigin);
1792 fOrigin[2] = 250.0;
1793 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fOrigin);
1794 ilosc_skokow_parkur[client] --;
1795 }
1796 else if(flags & FL_ONGROUND)
1797 {
1798 if(vip_gracza[client])
1799 ilosc_skokow_parkur[client] = 4;
1800 else
1801 ilosc_skokow_parkur[client] = 3;
1802 }
1803 oldbuttons2[client] = true;
1804 }
1805 else if(oldbuttons2[client] && !(buttons & IN_JUMP))
1806 oldbuttons2[client] = false;
1807 }
1808 }
1809 }
1810 if(vip_gracza[client] && (klasa_gracza[client] != Szturmen && informacje_itemu_gracza[client][0] != 73))
1811 {
1812 if(!oldbuttons3[client] && buttons & IN_JUMP)
1813 {
1814 new flags = GetEntityFlags(client);
1815 if(!(flags & FL_ONGROUND) && !skoczyl_vip[client])
1816 {
1817 new Float:fOrigin[3];
1818 GetEntPropVector(client, Prop_Data, "m_vecVelocity", fOrigin);
1819 fOrigin[2] = 250.0;
1820 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fOrigin);
1821 skoczyl_vip[client] = true;
1822 }
1823 else if(flags & FL_ONGROUND)
1824 skoczyl_vip[client] = false;
1825
1826 oldbuttons3[client] = true;
1827 }
1828 else if(oldbuttons3[client] && !(buttons & IN_JUMP))
1829 oldbuttons3[client] = false;
1830 }
1831
1832 if(buttons & IN_ATTACK && dostal_elektromagnesem[client])
1833 {
1834 if(zablokowano_strzal[client] == 0)
1835 {
1836 new active_weapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
1837 if(active_weapon != -1)
1838 {
1839 new Float:gametime = GetGameTime();
1840 new Float:fattack = GetEntDataFloat(active_weapon, FindSendPropInfo("CBaseCombatWeapon", "m_flNextPrimaryAttack"))-gametime;
1841 SetEntDataFloat(active_weapon, FindSendPropInfo("CBaseCombatWeapon", "m_flNextPrimaryAttack"), (fattack+(gametime+3)));
1842 }
1843 zablokowano_strzal[client] = 1;
1844 }
1845 }
1846}
1847public Action:OdblokowanieBroni(Handle timer, any client)
1848{
1849 if(IsValidClient(client))
1850 {
1851 dostal_elektromagnesem[client] = false;
1852 zablokowano_strzal[client] = 0;
1853 }
1854}
1855public Action:TraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
1856{
1857 if(!IsValidClient(victim) || !IsValidClient(attacker))
1858 return Plugin_Continue;
1859
1860 if(GetClientTeam(victim) == GetClientTeam(attacker))
1861 return Plugin_Continue;
1862
1863 hitgroup_gracza[victim] = hitgroup;
1864 return Plugin_Continue;
1865}
1866public Action:TakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
1867{
1868 if(!IsValidClient(victim))
1869 return Plugin_Continue;
1870
1871 if(informacje_itemu_gracza[victim][0] == 13 && damagetype & DMG_FALL)
1872 return Plugin_Handled;
1873
1874 if(g_CzasDostalHarpunem[victim]>=GetTime() && damagetype & DMG_FALL)
1875 return Plugin_Handled;
1876
1877 if(IsValidClient(attacker) && GetClientTeam(victim) != GetClientTeam(attacker))
1878 {
1879 new dmg = 0;
1880 new zabicie = 0;
1881 new odpornosc = 0;
1882
1883 switch(klasa_gracza[attacker])
1884 {
1885 case Thief:
1886 {
1887 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1888 {
1889 if(GetRandomInt(1, 9) == 1)
1890 {
1891 new ent = GetEntPropEnt(victim, Prop_Send, "m_hActiveWeapon");
1892 if(ent != -1)
1893 SetEntData(ent, FindSendPropInfo("CWeaponCSBase", "m_iClip1"), 0);
1894 }
1895 }
1896 }
1897 case Snajper:
1898 {
1899 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1900 {
1901 new String:weapon[32];
1902 GetClientWeapon(attacker, weapon, sizeof(weapon));
1903 if(StrEqual(weapon, nazwy_broni[28]) && damagetype & DMG_BULLET)
1904 dmg += 50+maksymalna_inteligencja_gracza[attacker];
1905 }
1906 }
1907 case Komandos:
1908 {
1909 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1910 {
1911 new String:weapon[32];
1912 GetClientWeapon(attacker, weapon, sizeof(weapon));
1913 if(StrContains(weapon, nazwy_broni[40]) != -1 && damagetype & (DMG_SLASH|DMG_BULLET) && GetClientButtons(attacker) & IN_ATTACK2)
1914 dmg += 50+maksymalna_inteligencja_gracza[attacker];
1915 }
1916 }
1917 case Jednooki:
1918 {
1919 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1920 {
1921 new String:weapon[32];
1922 GetClientWeapon(attacker, weapon, sizeof(weapon));
1923 if((GetRandomInt(1, 2) == 1 && StrEqual(weapon, nazwy_broni[27]) || StrEqual(weapon, nazwy_broni[28])) && damagetype & DMG_BULLET)
1924 {
1925 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
1926 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
1927
1928 dmg += GetClientHealth(victim)+1;
1929 zabicie = 1;
1930 }
1931 }
1932 }
1933 case Scorch:
1934 {
1935 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1936 {
1937 if(GetRandomInt(1, 5) == 1)
1938 {
1939 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
1940 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
1941
1942 IgniteEntity(victim, 2.0);
1943 }
1944 if(damagetype & DMG_BURN)
1945 dmg += maksymalna_inteligencja_gracza[attacker]/10;
1946 }
1947 }
1948 case Rusher:
1949 {
1950 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1951 {
1952 new String:weapon[32];
1953 GetClientWeapon(attacker, weapon, sizeof(weapon));
1954 if(StrEqual(weapon, nazwy_broni[10]))
1955 {
1956 if(GetRandomInt(1, 80) == 1)
1957 {
1958 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
1959 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
1960
1961 dmg += GetClientHealth(victim)+1;
1962 zabicie = 1;
1963 }
1964 }
1965 }
1966 }
1967 case KapitanDan:
1968 {
1969 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1970 {
1971 new String:weapon[32];
1972 GetClientWeapon(attacker, weapon, sizeof(weapon));
1973 if(StrEqual(weapon, nazwy_broni[39]))
1974 {
1975 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
1976 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
1977
1978 dmg += GetClientHealth(victim)+1;
1979 zabicie = 1;
1980 }
1981 else if(StrEqual(weapon, nazwy_broni[4]) && hitgroup_gracza[victim] == 3)
1982 dmg *= 2.0;
1983 }
1984 }
1985 case DGLMaster:
1986 {
1987 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1988 {
1989 new String:weapon[32];
1990 GetClientWeapon(attacker, weapon, sizeof(weapon));
1991 if(StrEqual(weapon, nazwy_broni[7]) && damagetype & DMG_BULLET)
1992 dmg += maksymalna_inteligencja_gracza[attacker];
1993
1994 if(GetRandomInt(1, 5) == 1)
1995 ClientCommand(victim, "drop");
1996 }
1997 }
1998 case ElitarnySnajper:
1999 {
2000 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
2001 {
2002 new String:weapon[32];
2003 GetClientWeapon(attacker, weapon, sizeof(weapon));
2004 if(StrEqual(weapon, nazwy_broni[28]) && damagetype & DMG_BULLET)
2005 {
2006 if(GetRandomInt(1, 3) == 3)
2007 {
2008 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2009 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2010
2011 dmg += GetClientHealth(victim)+1;
2012 zabicie = 1;
2013 }
2014 }
2015 }
2016 }
2017 case Scouter:
2018 {
2019 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
2020 {
2021 new String:weapon[32];
2022 GetClientWeapon(attacker, weapon, sizeof(weapon));
2023 if(GetRandomInt(1, 2) == 1 && StrEqual(weapon, nazwy_broni[27]) && damagetype & DMG_BULLET)
2024 {
2025 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2026 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2027
2028 dmg += GetClientHealth(victim)+1;
2029 zabicie = 1;
2030 }
2031 }
2032 }
2033 case Rambo:
2034 {
2035 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
2036 {
2037 new String:weapon[32];
2038 GetClientWeapon(attacker, weapon, sizeof(weapon));
2039 if(GetRandomInt(1, 2) == 1 && StrContains(weapon, nazwy_broni[40]) != -1 && damagetype & (DMG_SLASH|DMG_BULLET) && GetClientButtons(attacker) & IN_ATTACK2)
2040 {
2041 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2042 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2043
2044 dmg += GetClientHealth(victim)+1;
2045 zabicie = 1;
2046 }
2047
2048 SetEntData(attacker, FindDataMapInfo(attacker, "m_iHealth"), (GetClientHealth(attacker)+RoundFloat(damage*0.1) > maksymalne_zdrowie_gracza[attacker])? maksymalne_zdrowie_gracza[attacker]: GetClientHealth(attacker)+RoundFloat(damage*0.1));
2049 }
2050 }
2051 }
2052 switch(klasa_gracza[victim])
2053 {
2054 case Mauser:
2055 {
2056 if(klasa_gracza[attacker] != Obronca && informacje_itemu_gracza[attacker][0] != 30)
2057 {
2058 if(hitgroup_gracza[victim] == 3)
2059 odpornosc = 1;
2060 }
2061 }
2062 case Missly:
2063 {
2064 if(klasa_gracza[attacker] != Obronca && informacje_itemu_gracza[attacker][0] != 30)
2065 {
2066 if(hitgroup_gracza[victim] == 1)
2067 odpornosc = 1;
2068 }
2069 }
2070 }
2071 switch(informacje_itemu_gracza[attacker][0])
2072 {
2073 case 6:
2074 {
2075 if(informacje_itemu_gracza[victim][0] != 29)
2076 SetEntData(attacker, FindDataMapInfo(attacker, "m_iHealth"), (GetClientHealth(attacker)+RoundFloat(damage*0.3) > maksymalne_zdrowie_gracza[attacker])? maksymalne_zdrowie_gracza[attacker]: GetClientHealth(attacker)+RoundFloat(damage*0.3));
2077 }
2078 case 15:
2079 {
2080 if(informacje_itemu_gracza[victim][0] != 29)
2081 dmg += 10;
2082 }
2083 case 16:
2084 {
2085 if(informacje_itemu_gracza[victim][0] != 29)
2086 dmg += 15;
2087 }
2088 case 17:
2089 {
2090 if(informacje_itemu_gracza[victim][0] != 29)
2091 {
2092 new String:weapon[32];
2093 GetClientWeapon(attacker, weapon, sizeof(weapon));
2094 if(StrContains(weapon, nazwy_broni[40]) != -1 && damagetype & (DMG_SLASH|DMG_BULLET))
2095 dmg += 40;
2096 }
2097 }
2098 case 18:
2099 {
2100 if(informacje_itemu_gracza[victim][0] != 29)
2101 {
2102 new String:weapon[32];
2103 GetClientWeapon(attacker, weapon, sizeof(weapon));
2104 if(StrContains(weapon, nazwy_broni[40]) != -1 && damagetype & (DMG_SLASH|DMG_BULLET) && GetClientButtons(attacker) & IN_ATTACK2)
2105 {
2106 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2107 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2108
2109 dmg += GetClientHealth(victim)+1;
2110 zabicie = 1;
2111 }
2112 }
2113 }
2114 case 23:
2115 {
2116 if(informacje_itemu_gracza[victim][0] != 29)
2117 {
2118 if(hitgroup_gracza[victim] == 3)
2119 dmg += RoundFloat(damage*0.4);
2120 }
2121 }
2122 case 24:
2123 {
2124 if(informacje_itemu_gracza[victim][0] != 29)
2125 {
2126 new String:weapon[32];
2127 GetClientWeapon(attacker, weapon, sizeof(weapon));
2128 if((StrEqual(weapon, nazwy_broni[42]) || StrEqual(weapon, nazwy_broni[1]) || StrEqual(weapon, nazwy_broni[2]) || StrEqual(weapon, nazwy_broni[3]) || StrEqual(weapon, nazwy_broni[4]) || StrEqual(weapon, nazwy_broni[5]) || StrEqual(weapon, nazwy_broni[6]) || StrEqual(weapon, nazwy_broni[7]) || StrEqual(weapon, nazwy_broni[8]) || StrEqual(weapon, nazwy_broni[9])) && damagetype & DMG_BULLET)
2129 dmg += RoundFloat(damage*0.4);
2130 }
2131 }
2132 case 27:
2133 {
2134 if(informacje_itemu_gracza[victim][0] != 29)
2135 {
2136 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
2137 ClientCommand(victim, "drop");
2138 }
2139 }
2140 case 28:
2141 {
2142 if(informacje_itemu_gracza[victim][0] != 29)
2143 {
2144 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
2145 {
2146 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2147 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2148
2149 IgniteEntity(victim, 2.0);
2150 }
2151 }
2152 }
2153 case 33:
2154 {
2155 if(informacje_itemu_gracza[victim][0] != 29)
2156 dmg += informacje_itemu_gracza[attacker][1];
2157 }
2158 case 42:
2159 {
2160 if(informacje_itemu_gracza[victim][0] != 29)
2161 {
2162 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
2163 {
2164 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2165 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2166
2167 dmg += GetClientHealth(victim)+1;
2168 zabicie = 1;
2169 }
2170 }
2171 }
2172 case 46:
2173 {
2174 if(informacje_itemu_gracza[victim][0] != 29)
2175 {
2176 if(hitgroup_gracza[victim] == 1)
2177 {
2178 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2179 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2180
2181 dmg += GetClientHealth(victim)+1;
2182 zabicie = 1;
2183 }
2184 }
2185 }
2186 case 47:
2187 {
2188 if(informacje_itemu_gracza[victim][0] != 29)
2189 dmg += informacje_itemu_gracza[attacker][1];
2190 }
2191 case 48:
2192 {
2193 if(informacje_itemu_gracza[victim][0] != 29)
2194 {
2195 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
2196 dmg += RoundFloat(damage*0.4);
2197 }
2198 }
2199 case 49:
2200 {
2201 if(informacje_itemu_gracza[victim][0] != 29)
2202 {
2203 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
2204 {
2205 new ent = GetEntPropEnt(victim, Prop_Send, "m_hActiveWeapon");
2206 if(ent != -1)
2207 SetEntData(ent, FindSendPropInfo("CWeaponCSBase", "m_iClip1"), 0);
2208 }
2209 }
2210 }
2211 case 51:
2212 {
2213 if(informacje_itemu_gracza[victim][0] != 29)
2214 {
2215 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
2216 {
2217 SetEntityMoveType(victim, MOVETYPE_NONE);
2218 CreateTimer(1.0, TaskZamrozenieGracza, victim);
2219 }
2220 }
2221 }
2222 case 54:
2223 {
2224 if(informacje_itemu_gracza[victim][0] != 29)
2225 {
2226 new String:weapon[32];
2227 GetClientWeapon(attacker, weapon, sizeof(weapon));
2228 if(StrEqual(weapon, nazwy_broni[24]) && damagetype & DMG_BULLET)
2229 dmg += 15;
2230 }
2231 }
2232 case 55:
2233 {
2234 if(informacje_itemu_gracza[victim][0] != 29)
2235 {
2236 new String:weapon[32];
2237 GetClientWeapon(attacker, weapon, sizeof(weapon));
2238 if(StrEqual(weapon, nazwy_broni[27]) && damagetype & DMG_BULLET && GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
2239 {
2240 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2241 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2242
2243 dmg += GetClientHealth(victim)+1;
2244 zabicie = 1;
2245 }
2246 }
2247 }
2248 case 57:
2249 {
2250 if(informacje_itemu_gracza[victim][0] != 29)
2251 {
2252 new String:weapon[32];
2253 GetClientWeapon(attacker, weapon, sizeof(weapon));
2254 if(StrEqual(weapon, nazwy_broni[22]) && damagetype & DMG_BULLET)
2255 dmg += 15;
2256 }
2257 }
2258 case 58:
2259 {
2260 if(informacje_itemu_gracza[victim][0] != 29)
2261 {
2262 new String:weapon[32];
2263 GetClientWeapon(attacker, weapon, sizeof(weapon));
2264 if(StrEqual(weapon, nazwy_broni[39]) && damagetype & DMG_BULLET)
2265 {
2266 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2267 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2268
2269 dmg += GetClientHealth(victim)+1;
2270 zabicie = 1;
2271 }
2272 }
2273 }
2274 case 59:
2275 {
2276 if(informacje_itemu_gracza[victim][0] != 29)
2277 {
2278 new String:weapon[32];
2279 GetClientWeapon(attacker, weapon, sizeof(weapon));
2280 if(StrEqual(weapon, nazwy_broni[1]) && damagetype & DMG_BULLET && GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
2281 {
2282 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2283 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2284
2285 dmg += GetClientHealth(victim)+1;
2286 zabicie = 1;
2287 }
2288 }
2289 }
2290 case 64:
2291 {
2292 if(informacje_itemu_gracza[victim][0] != 29)
2293 {
2294 new String:weapon[32];
2295 GetClientWeapon(attacker, weapon, sizeof(weapon));
2296
2297 if(StrEqual(weapon, nazwy_broni[28]) && damagetype & DMG_BULLET)
2298 {
2299 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
2300 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
2301
2302 dmg += GetClientHealth(victim)+1;
2303 zabicie = 1;
2304 }
2305 }
2306 }
2307 case 66:
2308 {
2309 if(informacje_itemu_gracza[victim][0] != 29)
2310 {
2311 if(damagetype & DMG_BULLET)
2312 {
2313 if(GetRandomInt(1,5) == 5)
2314 {
2315 float clientPos[3], enemyPos[3], pushVel[3];
2316 GetClientAbsOrigin(attacker, clientPos);
2317 GetClientAbsOrigin(victim, enemyPos);
2318 SubtractVectors(clientPos, enemyPos, pushVel);
2319
2320 pushVel[0] = -pushVel[0];
2321 pushVel[1] = -pushVel[1];
2322 pushVel[2] = 30.0;
2323 ScaleVector(pushVel, 10.0);
2324 TeleportEntity(victim, NULL_VECTOR, NULL_VECTOR, pushVel);
2325 }
2326 }
2327 }
2328 }
2329 case 68:
2330 {
2331 if(informacje_itemu_gracza[victim][0] != 29)
2332 {
2333 if(damagetype & DMG_BULLET)
2334 {
2335 if(ilosc_zatrutych_strzalek[attacker])
2336 {
2337 if(jeden_zatruty[attacker] && victim != zatruty)
2338 {
2339 PrintToChat(attacker, "Odpalilem 2 zatrucie");
2340 zatruty2 = victim;
2341 Zatrucie2(attacker);
2342 ilosc_zatrutych_strzalek[attacker] --;
2343 }
2344 else if(!jeden_zatruty[attacker])
2345 {
2346 PrintToChat(attacker, "Odpalilem 1 zatrucie");
2347 zatruty = victim;
2348 Zatrucie(attacker);
2349 jeden_zatruty[attacker] = true;
2350 ilosc_zatrutych_strzalek[attacker] --;
2351 }
2352 }
2353 }
2354 }
2355 }
2356 case 69:
2357 {
2358 if(damagetype & DMG_BULLET)
2359 {
2360 if(informacje_itemu_gracza[victim][0] != 29)
2361 {
2362 if(ma_lodowy_pocisk[attacker])
2363 {
2364 SetEntityMoveType(victim, MOVETYPE_NONE);
2365 CreateTimer(5.0, TaskZamrozenieGracza, victim);
2366 ilosc_lodowych_pociskow[attacker] --;
2367 ma_lodowy_pocisk[attacker] = false;
2368 }
2369 }
2370 }
2371 }
2372 case 74:
2373 {
2374 if(informacje_itemu_gracza[victim][0] != 29)
2375 {
2376 new String:weapon[32];
2377 GetClientWeapon(attacker, weapon, sizeof(weapon));
2378 if(StrEqual(weapon, nazwy_broni[29]) && damagetype & DMG_BULLET)
2379 dmg += 10;
2380 }
2381 }
2382 }
2383 switch(informacje_itemu_gracza[victim][0])
2384 {
2385 case 14:
2386 {
2387 if(informacje_itemu_gracza[attacker][0] != 29)
2388 {
2389 if(informacje_itemu_gracza[victim][1])
2390 {
2391 informacje_itemu_gracza[victim][1] --;
2392 odpornosc = 1;
2393 }
2394 }
2395 }
2396 case 20:
2397 {
2398 if(informacje_itemu_gracza[attacker][0] != 29)
2399 {
2400 if(hitgroup_gracza[victim] == 1)
2401 odpornosc = 1;
2402 }
2403 }
2404 case 21:
2405 {
2406 if(informacje_itemu_gracza[attacker][0] != 29)
2407 {
2408 if(GetRandomInt(1, informacje_itemu_gracza[victim][1]) == 1)
2409 {
2410 ZadajObrazenia(attacker, victim, victim, 0.0+float(RoundFloat(damage)), DMG_GENERIC);
2411 odpornosc = 1;
2412 }
2413 }
2414 }
2415 case 50:
2416 {
2417 if(informacje_itemu_gracza[attacker][0] != 29)
2418 {
2419 if(godmode_task[victim] != INVALID_HANDLE && hitgroup_gracza[victim] != 1)
2420 odpornosc = 1;
2421 }
2422 }
2423 case 74:
2424 {
2425 if(informacje_itemu_gracza[attacker][0] != 29)
2426 {
2427 if(hitgroup_gracza[victim] == 3 || hitgroup_gracza[victim] == 6 || hitgroup_gracza[victim] == 7)
2428 damage -= RoundFloat(damage*0.8);
2429 }
2430 }
2431 }
2432 if(odpornosc)
2433 {
2434 if(damagetype & (DMG_BULLET | DMG_BULLET))
2435 return Plugin_Handled;
2436 }
2437 else
2438 {
2439 if(klasa_gracza[attacker])
2440 {
2441 doswiadczenie_gracza[attacker] += RoundFloat(damage*0.1);
2442 SprawdzPoziom(attacker);
2443 }
2444 if(zabicie)
2445 damage = RoundFloat(damage+dmg)*(1.0+maksymalne_obrazenia_gracza[attacker]);
2446 else
2447 damage = RoundFloat(damage+dmg)*(1.0+maksymalne_obrazenia_gracza[attacker]-maksymalna_wytrzymalosc_gracza[victim]);
2448
2449 return Plugin_Changed;
2450 }
2451 }
2452
2453 return Plugin_Continue;
2454}
2455public Action:WeaponCanUse(client, bron)
2456{
2457 if(!IsValidClient(client) || IsFakeClient(client))
2458 return Plugin_Continue;
2459
2460 new String:weapon[32];
2461 GetEdictClassname(bron, weapon, sizeof(weapon));
2462 switch(informacje_itemu_gracza[client][0])
2463 {
2464 case 26:
2465 {
2466 if(StrEqual(weapon, nazwy_broni[34]))
2467 return Plugin_Continue;
2468 }
2469 case 32:
2470 {
2471 if(StrEqual(weapon, nazwy_broni[36]))
2472 return Plugin_Continue;
2473 }
2474 case 33:
2475 {
2476 if(StrEqual(weapon, nazwy_broni[36]))
2477 return Plugin_Continue;
2478 }
2479 case 43: return Plugin_Continue;
2480 case 52:
2481 {
2482 if(StrEqual(weapon, nazwy_broni[37]))
2483 return Plugin_Continue;
2484 }
2485 case 54:
2486 {
2487 if(StrEqual(weapon, nazwy_broni[23]))
2488 return Plugin_Continue;
2489 }
2490 case 55:
2491 {
2492 if(StrEqual(weapon, nazwy_broni[27]))
2493 return Plugin_Continue;
2494 }
2495 case 57:
2496 {
2497 if(StrEqual(weapon, nazwy_broni[22]))
2498 return Plugin_Continue;
2499 }
2500 case 58:
2501 {
2502 if(StrEqual(weapon, nazwy_broni[39]))
2503 return Plugin_Continue;
2504 }
2505 case 59:
2506 {
2507 if(StrEqual(weapon, nazwy_broni[1]))
2508 return Plugin_Continue;
2509 }
2510 case 64:
2511 {
2512 if(StrEqual(weapon, nazwy_broni[28]))
2513 return Plugin_Continue;
2514 }
2515 case 74:
2516 {
2517 if(StrEqual(weapon, nazwy_broni[29]))
2518 return Plugin_Continue;
2519 }
2520 }
2521 switch(klasa_gracza[client])
2522 {
2523 case Grom:
2524 {
2525 if(StrEqual(weapon, nazwy_broni[23]) || StrEqual(weapon, nazwy_broni[5]))
2526 return Plugin_Continue;
2527 }
2528 case Thief: return Plugin_Continue;
2529 case Terminator:
2530 {
2531 if(StrEqual(weapon, nazwy_broni[6]))
2532 return Plugin_Continue;
2533 }
2534 case KapitanDan:
2535 {
2536 if(StrEqual(weapon, nazwy_broni[6]))
2537 return Plugin_Continue;
2538 }
2539 case Rewolwerowiec:
2540 {
2541 if(StrEqual(weapon, nazwy_broni[7]))
2542 return Plugin_Continue;
2543 }
2544 case Szturmen:
2545 {
2546 if(StrEqual(weapon, nazwy_broni[5]) || StrEqual(weapon, nazwy_broni[23]))
2547 return Plugin_Continue;
2548 }
2549 case Piorun:
2550 {
2551 if(StrEqual(weapon, nazwy_broni[43]) || StrEqual(weapon, nazwy_broni[16]))
2552 return Plugin_Continue;
2553 }
2554 }
2555 if(StrContains(weapon, nazwy_broni[40]) != -1 || StrEqual(weapon, nazwy_broni[41]))
2556 return Plugin_Continue;
2557
2558 if(!StrEqual(weapon, nazwy_broni[bronie_klas[klasa_gracza[client]][0]]) && !StrEqual(weapon, nazwy_broni[bronie_klas[klasa_gracza[client]][1]]) && !StrEqual(weapon, nazwy_broni[bronie_klas[klasa_gracza[client]][2]]) && !StrEqual(weapon, nazwy_broni[bronie_klas[klasa_gracza[client]][3]]) && !StrEqual(weapon, nazwy_broni[bronie_klas[klasa_gracza[client]][4]]))
2559 return Plugin_Handled;
2560
2561 return Plugin_Continue;
2562}
2563public Action:SetTransmit(ent, client)
2564{
2565 if(!IsValidClient(client) || informacje_itemu_gracza[client][0] != 36)
2566 return Plugin_Continue;
2567
2568 if(!IsValidClient(ent) || !IsPlayerAlive(ent) || ent == client)
2569 return Plugin_Continue;
2570
2571 if(GetClientTeam(client) == GetClientTeam(ent))
2572 return Plugin_Continue;
2573
2574 static Float:timers[65][65];
2575 new Float:gametime = GetGameTime();
2576 if(gametime > timers[client][ent]+0.1)
2577 {
2578 StworzNaswietlenie(client, ent);
2579 timers[client][ent] = gametime;
2580 }
2581
2582 return Plugin_Continue;
2583}
2584public Action:PostThinkPost(client)
2585{
2586 if(!IsValidClient(client) || !IsPlayerAlive(client))
2587 return Plugin_Continue;
2588
2589 if(GetEntityRenderMode(client) == RENDER_TRANSCOLOR)
2590 SetEntProp(client, Prop_Send, "m_iAddonBits", 0);
2591
2592 SetEntProp(client, Prop_Send, "m_bInBuyZone", 0);
2593 return Plugin_Continue;
2594}
2595public Action:StworzNaswietlenie(client, ent)
2596{
2597 if(GetEntityRenderMode(ent) == RENDER_TRANSCOLOR)
2598 {
2599 if(informacje_itemu_gracza[ent][0] == 29)
2600 return Plugin_Continue;
2601
2602 new Float:torigin[3];
2603 GetClientEyePosition(client, torigin);
2604
2605 new Float:forigin[3];
2606 GetClientEyePosition(ent, forigin);
2607
2608 new Float:v_middle[3];
2609 subvec(forigin, torigin, v_middle);
2610 new Float:distance_to_hitpoint = GetVectorDistance(torigin, forigin);
2611
2612 new Float:offset_vector[3];
2613 normalize(v_middle, offset_vector, distance_to_hitpoint-10.0);
2614
2615 new Float:eye_level[3];
2616 copyvec(torigin, eye_level);
2617 addvec(offset_vector, eye_level);
2618
2619 new Float:v_bone_start[3];
2620 copyvec(offset_vector, v_bone_start);
2621
2622 new Float:v_bone_end[3];
2623 copyvec(offset_vector, v_bone_end);
2624 v_bone_end[2] -= 20.0;
2625
2626 TE_SetupBeamPoints(v_bone_start, v_bone_end, sprite_laser, sprite_halo, 0, 0, 0.1, 10.0, 50.0, 0, 0.0, {0, 255, 0, 128}, 0);
2627 TE_SendToClient(client);
2628 }
2629
2630 return Plugin_Continue;
2631}
2632public copyvec(Float:vec[3], Float:ret[3])
2633{
2634 ret[0] = vec[0];
2635 ret[1] = vec[1];
2636 ret[2] = vec[2];
2637}
2638public subvec(Float:vec1[3], Float:vec2[3], Float:ret[3])
2639{
2640 ret[0] = vec1[0]-vec2[0];
2641 ret[1] = vec1[1]-vec2[1];
2642 ret[2] = vec1[2]-vec2[2];
2643}
2644public addvec(Float:vec1[3], Float:vec2[3])
2645{
2646 vec1[0] += vec2[0];
2647 vec1[1] += vec2[1];
2648 vec1[2] += vec2[2];
2649}
2650public normalize(Float:vec[3], Float:ret[3], Float:multiplier)
2651{
2652 new Float:len = getveclen(vec);
2653 copyvec(vec, ret);
2654 ret[0] /= len;
2655 ret[1] /= len;
2656 ret[2] /= len;
2657 ret[0] *= multiplier;
2658 ret[1] *= multiplier;
2659 ret[2] *= multiplier;
2660}
2661public Float:getveclen(Float:vec[3])
2662{
2663 new Float:vecnull[3] = {0.0, 0.0, 0.0};
2664 new Float:len = GetVectorDistance(vec, vecnull);
2665 return len;
2666}
2667public Action:NowaRunda(Handle:event, const String:name[],bool:dontBroadcast)
2668{
2669 freezetime = true;
2670}
2671public Action:PoczatekRundy(Handle:event, const String:name[], bool:dontBroadcast)
2672{
2673 freezetime = false;
2674}
2675public Action:KoniecRundy(Handle:event, const String:name[],bool:dontBroadcast)
2676{
2677 new druzyna = GetEventInt(event, "winner");
2678 for(new i = 1; i <= MaxClients; i++)
2679 {
2680 if(!IsClientInGame(i) || !klasa_gracza[i])
2681 continue;
2682
2683 if(druzyna == 2 && GetClientTeam(i) == CS_TEAM_T || druzyna == 3 && GetClientTeam(i) == CS_TEAM_CT)
2684 {
2685 if(misja_gracza[i] && (nazwy_misji[misja_gracza[i]][0] == 2 && RoundWin == nazwy_misji[misja_gracza[i]][2]))
2686 UstawPostep(i, postep_gracza[i]+1);
2687
2688 new doswiadczenie = 0;
2689 if(!ma_nick[i])
2690 {
2691 if(vip_gracza[i])
2692 doswiadczenie += xp_winround_vip;
2693 else
2694 doswiadczenie += xp_winround;
2695 }
2696 else
2697 {
2698 if(vip_gracza[i])
2699 doswiadczenie += RoundFloat(xp_winround_vip*mnoznik_za_nick);
2700 else
2701 doswiadczenie += RoundFloat(xp_winround*mnoznik_za_nick);
2702 }
2703 if(IsPlayerAlive(i))
2704 {
2705 PrintToChat(i, "%s Dostałeś %i doświadczenia za wygranie rundy.", PREFIX, doswiadczenie);
2706 doswiadczenie_gracza[i] += doswiadczenie;
2707 }
2708 else
2709 {
2710 PrintToChat(i, "%s Dostałeś %i doświadczenia za wygranie rundy przez Twoją drużynę.", PREFIX, doswiadczenie/2);
2711 doswiadczenie_gracza[i] += doswiadczenie/2;
2712 }
2713
2714 SprawdzPoziom(i);
2715 }
2716 }
2717}
2718public Action:BombaPodlozona(Handle:event, const String:name[], bool:dontBroadcast)
2719{
2720 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2721 if(misja_gracza[client] && (nazwy_misji[misja_gracza[client]][0] == 2 && C4Plant == nazwy_misji[misja_gracza[client]][2]))
2722 UstawPostep(client, postep_gracza[client]+1);
2723
2724 for(new i = 1; i <= MaxClients; i++)
2725 {
2726 if(!IsClientInGame(i) || !klasa_gracza[i])
2727 continue;
2728
2729 if(GetClientTeam(i) != CS_TEAM_T)
2730 continue;
2731
2732 new doswiadczenie = 0;
2733
2734 if(!ma_nick[i])
2735 {
2736 if(vip_gracza[i])
2737 doswiadczenie += xp_objectives_vip;
2738 else
2739 doswiadczenie += xp_objectives;
2740 }
2741 else
2742 {
2743 if(vip_gracza[i])
2744 doswiadczenie += RoundFloat(xp_objectives_vip*mnoznik_za_nick);
2745 else
2746 doswiadczenie += RoundFloat(xp_objectives*mnoznik_za_nick);
2747 }
2748
2749 if(i == client)
2750 {
2751 PrintToChat(i, "%s Dostałeś %i doświadczenia za podłożenie bomby.", PREFIX, doswiadczenie);
2752 doswiadczenie_gracza[i] += doswiadczenie;
2753 }
2754 else
2755 {
2756 PrintToChat(i, "%s Dostałeś %i doświadczenia za podłożenie bomby przez Twoją drużynę.", PREFIX, doswiadczenie/2);
2757 doswiadczenie_gracza[i] += doswiadczenie/2;
2758 }
2759
2760 SprawdzPoziom(i);
2761 }
2762}
2763public Action:BombaRozbrojona(Handle:event, const String:name[], bool:dontBroadcast)
2764{
2765 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2766 if(misja_gracza[client] && (nazwy_misji[misja_gracza[client]][0] == 2 && C4Defuse == nazwy_misji[misja_gracza[client]][2]))
2767 UstawPostep(client, postep_gracza[client]+1);
2768
2769 for(new i = 1; i <= MaxClients; i++)
2770 {
2771 if(!IsClientInGame(i) || !klasa_gracza[i])
2772 continue;
2773
2774 if(GetClientTeam(i) != CS_TEAM_CT)
2775 continue;
2776
2777 new doswiadczenie = 0;
2778
2779 if(!ma_nick[i])
2780 {
2781 if(vip_gracza[i])
2782 doswiadczenie += xp_objectives_vip;
2783 else
2784 doswiadczenie += xp_objectives;
2785 }
2786 else
2787 {
2788 if(vip_gracza[i])
2789 doswiadczenie += RoundFloat(xp_objectives_vip*mnoznik_za_nick);
2790 else
2791 doswiadczenie += RoundFloat(xp_objectives*mnoznik_za_nick);
2792 }
2793
2794 if(i == client)
2795 {
2796 PrintToChat(i, "%s Dostałeś %i doświadczenia za rozbrojenie bomby.", PREFIX, doswiadczenie);
2797 doswiadczenie_gracza[i] += doswiadczenie;
2798 }
2799 else
2800 {
2801 PrintToChat(i, "%s Dostałeś %i doświadczenia za rozbrojenie bomby przez Twoją druzynę.", PREFIX, doswiadczenie/2);
2802 doswiadczenie_gracza[i] += doswiadczenie/2;
2803 }
2804
2805 SprawdzPoziom(i);
2806 }
2807}
2808public Action:ZakladnikUratowany(Handle:event, const String:name[], bool:dontBroadcast)
2809{
2810 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2811 if(misja_gracza[client] && (nazwy_misji[misja_gracza[client]][0] == 2 && HostRescue == nazwy_misji[misja_gracza[client]][2]))
2812 UstawPostep(client, postep_gracza[client]+1);
2813
2814 for(new i = 1; i <= MaxClients; i++)
2815 {
2816 if(!IsClientInGame(i) || !klasa_gracza[i])
2817 continue;
2818
2819 if(GetClientTeam(i) != CS_TEAM_CT)
2820 continue;
2821
2822 new doswiadczenie = 0;
2823
2824 if(!ma_nick[i])
2825 {
2826 if(vip_gracza[i])
2827 doswiadczenie += xp_objectives_vip;
2828 else
2829 doswiadczenie += xp_objectives;
2830 }
2831 else
2832 {
2833 if(vip_gracza[i])
2834 doswiadczenie += RoundFloat(xp_objectives_vip*mnoznik_za_nick);
2835 else
2836 doswiadczenie += RoundFloat(xp_objectives*mnoznik_za_nick);
2837 }
2838
2839 if(i == client)
2840 {
2841 PrintToChat(i, "%s Dostałeś %i doświadczenia za uratowanie zakładnika.", PREFIX, doswiadczenie);
2842 doswiadczenie_gracza[i] += doswiadczenie;
2843 }
2844 else
2845 {
2846 PrintToChat(i, "%s Dostałeś %i doświadczenia za uratowanie zakładnika przez Twoją drużynę.", PREFIX, doswiadczenie/2);
2847 doswiadczenie_gracza[i] += doswiadczenie/2;
2848 }
2849
2850 SprawdzPoziom(i);
2851 }
2852}
2853public Action:DzwiekiGracza(clients[64], &numclients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
2854{
2855 if(!IsValidClient(entity) || IsFakeClient(entity))
2856 return Plugin_Continue;
2857
2858 if((StrContains(sample, "physics") != -1 || StrContains(sample, "footsteps") != -1) && StrContains(sample, "suit") == -1)
2859 {
2860 if(informacje_itemu_gracza[entity][0] != 31)
2861 EmitSoundToAll(sample, entity);
2862
2863 return Plugin_Handled;
2864 }
2865
2866 return Plugin_Continue;
2867}
2868public Action:CodMenu(client, args)
2869{
2870 new Handle:menu = CreateMenu(CodMenu_Handler);
2871 SetMenuTitle(menu, "CodMenu:");
2872 AddMenuItem(menu, "1", "Sklep");
2873 AddMenuItem(menu, "2", "Wybierz KlasÄ™");
2874 AddMenuItem(menu, "3", "Wyrzuć Item");
2875 AddMenuItem(menu, "4", "Napraw Item");
2876 AddMenuItem(menu, "5", "Opis Itemu");
2877 AddMenuItem(menu, "6", "Menu Admina");
2878 DisplayMenu(menu, client, 250);
2879 return Plugin_Handled;
2880}
2881public CodMenu_Handler(Handle:classhandle, MenuAction:action, client, Position)
2882{
2883 if(action == MenuAction_Select)
2884 {
2885 new String:Item[32];
2886 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2887
2888 if(StrEqual(Item, "1"))
2889 CodSklep(client);
2890 else if(StrEqual(Item, "2"))
2891 WybierzKlase(client);
2892 else if(StrEqual(Item, "3"))
2893 WyrzucItem(client);
2894 else if(StrEqual(Item, "4"))
2895 NaprawItem(client);
2896 else if(StrEqual(Item, "5"))
2897 OpisItemu(client);
2898 else if(StrEqual(Item, "6"))
2899 ClientCommand(client, "sm_admin");
2900 }
2901 else if(action == MenuAction_End)
2902 CloseHandle(classhandle);
2903}
2904public Action:CodSklep(client)
2905{
2906 if(klasa_gracza[client])
2907 {
2908 new Handle:menu = CreateMenu(CodSklep_Handler);
2909 SetMenuTitle(menu, "Cod Mod Sklep:");
2910 AddMenuItem(menu, "1", "Mała Apteczka [Leczy 20 HP] Koszt: 2000$");
2911 AddMenuItem(menu, "2", "Åšrednia Apteczka [Leczy 50 HP] Koszt: 5000$");
2912 AddMenuItem(menu, "3", "Duża Apteczka [Leczy 100 HP] Koszt: 10000$");
2913 AddMenuItem(menu, "4", "Duży Lotek [Wygraj Kasę] Koszt: 2000$");
2914 AddMenuItem(menu, "5", "Doświadczenie [Dostajesz 100 Dośw.] Koszt: 6000$");
2915 AddMenuItem(menu, "6", "Super Doświadczenie [Dostajesz 225 Dośw.] Koszt: 12000$");
2916 AddMenuItem(menu, "7", "Losowy Item [Dostajesz Losowy Item] Koszt: 3000$");
2917 AddMenuItem(menu, "8", "Sprzedaż Itemu [Dostajesz $ za Item] Dostajesz: 1500$");
2918 AddMenuItem(menu, "9", "Moc Itemu [+20 Procent Mocy Itemu] Koszt: 8000$");
2919 AddMenuItem(menu, "10", "Kup Kevlar Koszt: 4000$");
2920 DisplayMenu(menu, client, 250);
2921 }
2922 else
2923 PrintToChat(client, "%s Musisz mieć wybraną klasę aby móc włączyć sklep!", PREFIX);
2924}
2925public CodSklep_Handler(Handle:classhandle, MenuAction:action, client, Position)
2926{
2927 if(action == MenuAction_Select)
2928 {
2929 new String:Item[32];
2930 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2931 CodSklep(client);
2932
2933 if(GameRules_GetProp("m_bWarmupPeriod") == 1)
2934 {
2935 PrintToChat(client, "%s Na czas rozgrzewki, codsklep zostal zablokowany!", PREFIX); // info na czas blokady
2936 return;
2937 }
2938 if(blokada)
2939 {
2940 PrintToChat(client, "%s Na czas konca rundy, codsklep zostal zablokowany!", PREFIX); // info na czas blokady
2941 return;
2942 }
2943 if(!klasa_gracza[client])
2944 PrintToChat(client, "%s Musisz miec wybrana klase aby moc wlaczyc sklep!", PREFIX);
2945 else if (!IsPlayerAlive(client)) // BLOKADA DLA NIEZYWYCH
2946 PrintToChat(client, "%s Sklep zablokowany dla nieżywych!", PREFIX);
2947
2948 if(StrEqual(Item, "1"))
2949 {
2950 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 2000)
2951 {
2952 if(IsPlayerAlive(client))
2953 {
2954 if(maksymalne_zdrowie_gracza[client] > GetClientHealth(client))
2955 {
2956 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-2000);
2957 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+20<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+20: maksymalne_zdrowie_gracza[client]);
2958 PrintToChat(client, "%s Kupiłeś Małą Apteczkę.", PREFIX);
2959 }
2960 else
2961 PrintToChat(client, "%s Jesteś w pełni uleczony!", PREFIX);
2962 }
2963 else
2964 PrintToChat(client, "%s Musisz być żywy aby móc kupić Małą Apteczkę!", PREFIX);
2965 }
2966 else
2967 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
2968 }
2969 else if(StrEqual(Item, "2"))
2970 {
2971 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 5000)
2972 {
2973 if(IsPlayerAlive(client))
2974 {
2975 if(maksymalne_zdrowie_gracza[client] > GetClientHealth(client))
2976 {
2977 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-5000);
2978 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+50<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+50: maksymalne_zdrowie_gracza[client]);
2979 PrintToChat(client, "%s Kupiłeś Średnią Apteczkę.", PREFIX);
2980 }
2981 else
2982 PrintToChat(client, "%s Jesteś w pełni uleczony!", PREFIX);
2983 }
2984 else
2985 PrintToChat(client, "%s Musisz być żywy aby móc kupić Średnią Apteczkę!", PREFIX);
2986 }
2987 else
2988 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
2989 }
2990 else if(StrEqual(Item, "3"))
2991 {
2992 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 10000)
2993 {
2994 if(IsPlayerAlive(client))
2995 {
2996 if(maksymalne_zdrowie_gracza[client] > GetClientHealth(client))
2997 {
2998 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-10000);
2999 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+100<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+100: maksymalne_zdrowie_gracza[client]);
3000 PrintToChat(client, "%s Kupiłeś Dużą Apteczkę.", PREFIX);
3001 }
3002 else
3003 PrintToChat(client, "%s Jesteś w pełni uleczony!", PREFIX);
3004 }
3005 else
3006 PrintToChat(client, "%s Musisz być żywy aby móc kupić Dużą Apteczkę!", PREFIX);
3007 }
3008 else
3009 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
3010 }
3011 else if(StrEqual(Item, "4"))
3012 {
3013 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 2000)
3014 {
3015 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-2000);
3016 PrintToChat(client, "%s Zagrałeś w lotto...", PREFIX);
3017 switch(GetRandomInt(0, 29))
3018 {
3019 case 0: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3020 case 1:
3021 {
3022 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+300);
3023 PrintToChat(client, "%s Wygrałeś 300$!", PREFIX);
3024 }
3025 case 2: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3026 case 3:
3027 {
3028 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+600);
3029 PrintToChat(client, "%s Wygrałeś 600$!", PREFIX);
3030 }
3031 case 4: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3032 case 5:
3033 {
3034 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+900);
3035 PrintToChat(client, "%s Wygrałeś 900$!", PREFIX);
3036 }
3037 case 6: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3038 case 7:
3039 {
3040 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+1200);
3041 PrintToChat(client, "%s Wygrałeś 1200$!", PREFIX);
3042 }
3043 case 8: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3044 case 9:
3045 {
3046 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+1500);
3047 PrintToChat(client, "%s Wygrałeś 1500$!", PREFIX);
3048 }
3049 case 10: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3050 case 11:
3051 {
3052 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+1800);
3053 PrintToChat(client, "%s Wygrałeś 1800$!", PREFIX);
3054 }
3055 case 12: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3056 case 13:
3057 {
3058 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+2100);
3059 PrintToChat(client, "%s Wygrałeś 2100$!", PREFIX);
3060 }
3061 case 14: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3062 case 15:
3063 {
3064 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+2400);
3065 PrintToChat(client, "%s Wygrałeś 2400$!", PREFIX);
3066 }
3067 case 16: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3068 case 17:
3069 {
3070 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+2700);
3071 PrintToChat(client, "%s Wygrałeś 2700$!", PREFIX);
3072 }
3073 case 18: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3074 case 19:
3075 {
3076 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+3000);
3077 PrintToChat(client, "%s Wygrałeś 3000$!", PREFIX);
3078 }
3079 case 20: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3080 case 21:
3081 {
3082 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+3300);
3083 PrintToChat(client, "%s Wygrałeś 3300$!", PREFIX);
3084 }
3085 case 22: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3086 case 23:
3087 {
3088 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+3600);
3089 PrintToChat(client, "%s Wygrałeś 3600$!", PREFIX);
3090 }
3091 case 24: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3092 case 25:
3093 {
3094 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+4200);
3095 PrintToChat(client, "%s Wygrałeś 4200$!", PREFIX);
3096 }
3097 case 26: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3098 case 27:
3099 {
3100 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+4800);
3101 PrintToChat(client, "%s Wygrałeś 4800$!", PREFIX);
3102 }
3103 case 28: PrintToChat(client, "%s Niestety nic nie wygrałeś...", PREFIX);
3104 case 29:
3105 {
3106 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+5400);
3107 PrintToChat(client, "%s Wygrałeś 5400$!", PREFIX);
3108 }
3109 }
3110 }
3111 else
3112 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
3113 }
3114 else if(StrEqual(Item, "5"))
3115 {
3116 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 6000)
3117 {
3118 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-6000);
3119 PrintToChat(client, "%s Kupiłeś Doświadczenie.", PREFIX);
3120
3121 doswiadczenie_gracza[client] += 100;
3122 SprawdzPoziom(client);
3123 }
3124 else
3125 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
3126 }
3127 else if(StrEqual(Item, "6"))
3128 {
3129 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 12000)
3130 {
3131 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-12000);
3132 PrintToChat(client, "%s Kupiłeś Super Doświadczenie.", PREFIX);
3133
3134 doswiadczenie_gracza[client] += 225;
3135 SprawdzPoziom(client);
3136 }
3137 else
3138 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
3139 }
3140 else if(StrEqual(Item, "7"))
3141 {
3142 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 3000)
3143 {
3144 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-3000);
3145 DajItem(client, GetRandomInt(1, sizeof nazwy_itemow-1));
3146 PrintToChat(client, "%s Wylosowałeś %s.", PREFIX, nazwy_itemow[informacje_itemu_gracza[client][0]]);
3147 }
3148 else
3149 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
3150 }
3151 else if(StrEqual(Item, "8"))
3152 {
3153 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 1000)
3154 {
3155 if(informacje_itemu_gracza[client][0])
3156 {
3157 new losowanie = GetRandomInt(500, 1500);
3158 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+1000+losowanie);
3159 UsunItem(client);
3160 PrintToChat(client, "%s Dostałeś +%i$ za sprzedaz swojego itemu.", PREFIX, losowanie);
3161 }
3162 else
3163 PrintToChat(client, "%s Nie masz żadnego itemu!", PREFIX);
3164 }
3165 else
3166 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
3167 }
3168 else if(StrEqual(Item, "9"))
3169 NaprawItem(client);
3170 else if(StrEqual(Item, "10"))
3171 {
3172 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 4000)
3173 {
3174 if(IsPlayerAlive(client))
3175 {
3176 if(GetEntProp(client, Prop_Send, "m_ArmorValue"))
3177 PrintToChat(client, "%s Posiadasz już kevlar", PREFIX);
3178 else
3179 {
3180 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-5000);
3181 SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
3182 PrintToChat(client, "%s Kupiłeś kevlar.", PREFIX);
3183 }
3184 }
3185 else
3186 PrintToChat(client, "%s Musisz być żywy aby móc kupić Kevlar!", PREFIX);
3187 }
3188 else
3189 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
3190 }
3191
3192 }
3193 else if(action == MenuAction_End)
3194 CloseHandle(classhandle);
3195}
3196public Action:NaprawItem(client)
3197{
3198if(blokada)
3199{
3200 PrintToChat(client, "%s Na czas konca rundy, codsklep zostal zablokowany!", PREFIX); // info na czas blokady
3201 return;
3202}
3203 else if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 8000)
3204 {
3205 if(informacje_itemu_gracza[client][0] && moc_itemu[client] < 100)
3206 {
3207 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-8000);
3208 moc_itemu[client] += 20;
3209 PrintToChat(client, "%s Kupiłeś +20%% Mocy Itemu.", PREFIX);
3210 }
3211 else
3212 PrintToChat(client, "%s Twoj item nie jest uszkodzony!", PREFIX);
3213 }
3214 else
3215 PrintToChat(client, "%s Masz za mało pieniędzy!", PREFIX);
3216}
3217public Action:OpisStatystyk(client)
3218{
3219 new String:opis[512];
3220 Format(opis, sizeof(opis), "Klasa: %s\nPoziom: %i/%i\nDoświadczenie: %i\nKonto Premium: %s", nazwy_klas[klasa_gracza[client]], poziom_gracza[client], limit_poziomu, doswiadczenie_gracza[client], vip_gracza[client]? "Aktywne": "Nie Aktywne");
3221
3222 new Handle:menu = CreateMenu(OpisStatystyk_Handler);
3223 SetMenuTitle(menu, opis);
3224 AddMenuItem(menu, "1", "Punkty Klasy");
3225
3226 DisplayMenu(menu, client, 250);
3227}
3228public OpisStatystyk_Handler(Handle:classhandle, MenuAction:action, client, Position)
3229{
3230 if(action == MenuAction_Select)
3231 {
3232 new String:Item[32];
3233 GetMenuItem(classhandle, Position, Item, sizeof(Item));
3234 if(StrEqual(Item, "1"))
3235 PrzydzielPunkty(client);
3236 }
3237 else if(action == MenuAction_End)
3238 CloseHandle(classhandle);
3239}
3240public Action:WybierzKlase(client)
3241{
3242 if(sql == INVALID_HANDLE)
3243 {
3244 PrintToChat(client, "%s Wystąpił błąd podczas pobierania danych z bazy!", PREFIX);
3245 return;
3246 }
3247 if(polaczony_raz[client])
3248 PrintToChat(client, "%s Trwa wczytywanie klas...", PREFIX);
3249 else
3250 {
3251 if(klasa_gracza[client])
3252 {
3253 new klasa_g = klasa_gracza[client];
3254 poziom_klasy_gracza[client][klasa_g] = poziom_gracza[client];
3255 doswiadczenie_klasy_gracza[client][klasa_g] = doswiadczenie_gracza[client];
3256 inteligencja_klasy_gracza[client][klasa_g] = inteligencja_gracza[client];
3257 zdrowie_klasy_gracza[client][klasa_g] = zdrowie_gracza[client];
3258 obrazenia_klasy_gracza[client][klasa_g] = obrazenia_gracza[client];
3259 wytrzymalosc_klasy_gracza[client][klasa_g] = wytrzymalosc_gracza[client];
3260 kondycja_klasy_gracza[client][klasa_g] = kondycja_gracza[client];
3261 misja_klasy_gracza[client][klasa_g] = misja_gracza[client];
3262 zabicia_klasy_gracza[client][klasa_g] = postep_gracza[client];
3263 WybierzKlaseMenu(client);
3264 }
3265 else
3266 {
3267 new String:tmp[1024], String:authid[64];
3268 GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));
3269
3270 Format(tmp, sizeof(tmp), "SELECT `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `misja`, `zabicia`, `klasa` FROM `codmod` WHERE steamid REGEXP '^STEAM_[0-9]:%s$';", authid[8]);
3271 SQL_TQuery(sql, WybierzKlase2, tmp, client);
3272 polaczony_raz[client] = true;
3273 }
3274 }
3275}
3276public WybierzKlase2(Handle:owner, Handle:query, const String:error[], any:client)
3277{
3278 if(query == INVALID_HANDLE)
3279 {
3280 LogError("Load error: %s", error);
3281 return;
3282 }
3283 if(SQL_GetRowCount(query))
3284 {
3285 new poziom = 1, doswiadczenie = 0, inteligencja = 0, zdrowie = 0, obrazenia = 0, wytrzymalosc = 0, kondycja = 0, misja = 0, zabicia = 0;
3286 new String:klasa[512];
3287 while(SQL_MoreRows(query))
3288 {
3289 while(SQL_FetchRow(query))
3290 {
3291 poziom = SQL_FetchInt(query, 0);
3292 doswiadczenie = SQL_FetchInt(query, 1);
3293 inteligencja = SQL_FetchInt(query, 2);
3294 zdrowie = SQL_FetchInt(query, 3);
3295 obrazenia = SQL_FetchInt(query, 4);
3296 wytrzymalosc = SQL_FetchInt(query, 5);
3297 kondycja = SQL_FetchInt(query, 6);
3298 misja = SQL_FetchInt(query, 7);
3299 zabicia = SQL_FetchInt(query, 8);
3300 SQL_FetchString(query, 9, klasa, sizeof(klasa));
3301 for(new i = 1; i < sizeof nazwy_klas; i ++)
3302 {
3303 if(StrEqual(nazwy_klas[i], klasa))
3304 {
3305 poziom_klasy_gracza[client][i] = poziom;
3306 doswiadczenie_klasy_gracza[client][i] = doswiadczenie;
3307 inteligencja_klasy_gracza[client][i] = inteligencja;
3308 zdrowie_klasy_gracza[client][i] = zdrowie;
3309 obrazenia_klasy_gracza[client][i] = obrazenia;
3310 wytrzymalosc_klasy_gracza[client][i] = wytrzymalosc;
3311 kondycja_klasy_gracza[client][i] = kondycja;
3312 misja_klasy_gracza[client][i] = misja;
3313 zabicia_klasy_gracza[client][i] = zabicia;
3314 }
3315 }
3316 }
3317 }
3318 }
3319
3320 WybierzKlaseMenu(client);
3321 polaczony_raz[client] = false;
3322}
3323public Action:WybierzKlaseMenu(client)
3324{
3325 new String:klasa[512];
3326 new Handle:menu = CreateMenu(WybierzKlase_Handler);
3327 SetMenuTitle(menu, "Wybierz KlasÄ™:");
3328 for(new i = 1; i < sizeof nazwy_klas; i ++)
3329 {
3330 Format(klasa, sizeof(klasa), "%s (Lv: %i)", nazwy_klas[i], poziom_klasy_gracza[client][i]);
3331 AddMenuItem(menu, "1", klasa);
3332 }
3333
3334 DisplayMenu(menu, client, 250);
3335}
3336public WybierzKlase_Handler(Handle:classhandle, MenuAction:action, client, Position)
3337{
3338 if(action == MenuAction_Select)
3339 {
3340 new String:Item[32];
3341 GetMenuItem(classhandle, Position, Item, sizeof(Item));
3342 Position ++;
3343
3344 if(StrEqual(Item, "1"))
3345 {
3346 if(Position == klasa_gracza[client])
3347 return;
3348
3349 new ma_poziom = 0;
3350 for(new i = 1; i < sizeof nazwy_klas; i ++)
3351 {
3352 if(poziom_klasy_gracza[client][i] >= umiejetnosci_klas[Position][0])
3353 ma_poziom = 1;
3354 }
3355 if(ma_poziom)
3356 {
3357 //if(Position == Sprinter && !(GetUserFlagBits(client) & ADMFLAG_CUSTOM5))
3358 //{
3359 // WybierzKlase(client)
3360 // PrintToChat(client, "%s Wybrana klasa dostepna jest tylko dla posiadaczy Uslug Premium!");
3361 //}
3362 //else
3363 //{
3364 if(Position == ElitarnySnajper && (poziom_klasy_gracza[client][1] < umiejetnosci_klas[31][0]))
3365 {
3366 WybierzKlase(client);
3367 PrintToChat(client, "%s Musisz posiadać co najmniej 401 poziom na Snajperze, by móc wybrać tę klasę!", PREFIX);
3368 }
3369 else
3370 {
3371 if(klasa_gracza[client])
3372 {
3373 nowa_klasa_gracza[client] = Position;
3374 PrintToChat(client, "%s Klasa zostanie zmieniona w nastepnej rundzie.", PREFIX);
3375 }
3376 else
3377 {
3378 klasa_gracza[client] = Position;
3379 WczytajDane(client, klasa_gracza[client]);
3380 Odrodzenie(client);
3381 }
3382 }
3383 }
3384 else
3385 {
3386 WybierzKlase(client)
3387 PrintToChat(client, "%s Wybrana klasa dostepna jest od %dLv!", PREFIX, umiejetnosci_klas[Position][0]);
3388 }
3389 }
3390 }
3391 else if(action == MenuAction_End)
3392 CloseHandle(classhandle);
3393}
3394public Action:OpisKlasy(client)
3395{
3396 new String:klasa[512];
3397 new Handle:menu = CreateMenu(OpisKlasy_Handler);
3398 SetMenuTitle(menu, "Wybierz KlasÄ™:");
3399 for(new i = 1; i < sizeof nazwy_klas; i ++)
3400 {
3401 Format(klasa, sizeof(klasa), "%s", nazwy_klas[i]);
3402 AddMenuItem(menu, "1", klasa);
3403 }
3404
3405 DisplayMenu(menu, client, 250);
3406}
3407public OpisKlasy_Handler(Handle:classhandle, MenuAction:action, client, Position)
3408{
3409 if(action == MenuAction_Select)
3410 {
3411 new String:Item[32];
3412 GetMenuItem(classhandle, Position, Item, sizeof(Item));
3413 Position ++;
3414
3415 if(StrEqual(Item, "1"))
3416 {
3417 new String:bronie_klasy[512];
3418 Format(bronie_klasy, sizeof(bronie_klasy), "%s %s %s %s %s", nazwy_broni[bronie_klas[Position][0]], nazwy_broni[bronie_klas[Position][1]], nazwy_broni[bronie_klas[Position][2]], nazwy_broni[bronie_klas[Position][3]], nazwy_broni[bronie_klas[Position][4]]);
3419 ReplaceString(bronie_klasy, sizeof(bronie_klasy), "weapon_", "");
3420
3421 PrintToChat(client, "%s Klasa: %s - %s - %s.", PREFIX, nazwy_klas[Position], bronie_klasy, opisy_klas[Position]);
3422 OpisKlasy(client);
3423 }
3424 }
3425 else if(action == MenuAction_End)
3426 CloseHandle(classhandle);
3427}
3428public Action:OpisItemow(client)
3429{
3430 new String:item[512];
3431 new Handle:menu = CreateMenu(OpisItemow_Handler);
3432 SetMenuTitle(menu, "Wybierz Item:");
3433 for(new i = 1; i <sizeof nazwy_itemow; i ++)
3434 {
3435 Format(item, sizeof(item), "%s", nazwy_itemow[i]);
3436 AddMenuItem(menu, "1", item);
3437 }
3438
3439 DisplayMenu(menu, client, 250);
3440}
3441public OpisItemow_Handler(Handle:classhandle, MenuAction:action, client, Position)
3442{
3443 if(action == MenuAction_Select)
3444 {
3445 new String:Item[32];
3446 GetMenuItem(classhandle, Position, Item, sizeof(Item));
3447 Position ++;
3448
3449 if(StrEqual(Item, "1"))
3450 {
3451 PrintToChat(client, "%s Item: %s - %s.", PREFIX, nazwy_itemow[Position], opisy_itemow[Position]);
3452 OpisItemow(client);
3453 }
3454 }
3455 else if(action == MenuAction_End)
3456 CloseHandle(classhandle);
3457}
3458public Action:Odrodzenie(client)
3459{
3460 if(!IsValidClient(client) || !IsPlayerAlive(client))
3461 return;
3462
3463 if(nowa_klasa_gracza[client])
3464 {
3465 ZapiszDane(client);
3466 klasa_gracza[client] = nowa_klasa_gracza[client];
3467 nowa_klasa_gracza[client] = 0;
3468 WczytajDane(client, klasa_gracza[client]);
3469
3470 ilosc_apteczek_gracza[client] = 0;
3471 ilosc_min_gracza[client] = 0;
3472 ilosc_rakiet_gracza[client] = 0;
3473 ilosc_lodowych_pociskow[client] = 0;
3474 ilosc_hakow_skorpiona[client] = 0;
3475 ilosc_dynamitow_gracza[client] = 0;
3476 StopDzialo(client, 1);
3477
3478 CS_UpdateClientModel(client);
3479 SetEntityRenderMode(client, RENDER_NORMAL);
3480 SetEntityRenderColor(client, 255, 255, 255, 255);
3481 }
3482 if(!klasa_gracza[client])
3483 WybierzKlase(client);
3484 else
3485 {
3486 switch(klasa_gracza[client])
3487 {
3488 case Saper: ilosc_min_gracza[client] = 2;
3489 case WsparcieOgniowe: ilosc_rakiet_gracza[client] = 2;
3490 case Medyk: ilosc_apteczek_gracza[client] = 1;
3491 case Partyzant:
3492 {
3493 SetEntityRenderMode(client, RENDER_TRANSCOLOR);
3494 SetEntityRenderColor(client, 255, 255, 255, 120);
3495 }
3496 case Szpieg: SetEntityModel(client, (GetClientTeam(client) == CS_TEAM_CT)? modele_serwera[GetRandomInt(6, 10)]: modele_serwera[GetRandomInt(1, 5)]);
3497 case Inzynier: StopDzialo(client, 1);
3498 }
3499 switch(informacje_itemu_gracza[client][0])
3500 {
3501 case 4: informacje_itemu_gracza[client][1] = 2;
3502 case 14: informacje_itemu_gracza[client][1] = 3;
3503 case 22: informacje_itemu_gracza[client][1] = 0;
3504 case 25: informacje_itemu_gracza[client][1] = 1;
3505 case 32:
3506 {
3507 if(klasa_gracza[client] != Szpieg)
3508 SetEntityModel(client, (GetClientTeam(client) == CS_TEAM_CT)? modele_serwera[GetRandomInt(6, 10)]: modele_serwera[GetRandomInt(1, 5)]);
3509
3510 GivePlayerItem(client, nazwy_broni[36]);
3511 }
3512 case 33: GivePlayerItem(client, nazwy_broni[36]);
3513 case 38: informacje_itemu_gracza[client][1] = 1;
3514 case 45: SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+1500);
3515 case 50:
3516 {
3517 StopGodmode(client);
3518 informacje_itemu_gracza[client][1] = 1;
3519 }
3520 case 52: GivePlayerItem(client, nazwy_broni[37]);
3521 case 53: informacje_itemu_gracza[client][1] = 2;
3522 case 54: GivePlayerItem(client, nazwy_broni[24]);
3523 case 55: GivePlayerItem(client, nazwy_broni[27]);
3524 case 56: informacje_itemu_gracza[client][1] = 2;
3525 case 57: GivePlayerItem(client, nazwy_broni[22]);
3526 case 58:
3527 {
3528 new ent = GivePlayerItem(client, nazwy_broni[39]);
3529 if(ent != -1)
3530 SetEntData(ent, FindSendPropInfo("CWeaponCSBase", "m_iClip1"), 5);
3531 }
3532 case 59:
3533 {
3534 GivePlayerItem(client, nazwy_broni[1]);
3535 }
3536 case 64:
3537 {
3538 GivePlayerItem(client, nazwy_broni[28]);
3539 }
3540 case 68: ilosc_zatrutych_strzalek[client] = 2;
3541 case 69: ilosc_lodowych_pociskow[client] = 2;
3542 case 70: ilosc_hakow_skorpiona[client] = 4;
3543 case 71: uzyl_tarczy_grawitacyjnej[client] = 2;
3544 case 74: GivePlayerItem(client, nazwy_broni[29]);
3545 }
3546 if(punkty_gracza[client])
3547 PrzydzielPunkty(client);
3548
3549 for(new slot = 0; slot < 5; slot ++)
3550 {
3551 if(!StrEqual(nazwy_broni[0], nazwy_broni[bronie_klas[klasa_gracza[client]][slot]]))
3552 GivePlayerItem(client, nazwy_broni[bronie_klas[klasa_gracza[client]][slot]]);
3553 }
3554 }
3555
3556 maksymalna_inteligencja_gracza[client] = (inteligencja_gracza[client]+bonusowa_inteligencja_gracza[client])/6;
3557 maksymalne_zdrowie_gracza[client] = umiejetnosci_klas[klasa_gracza[client]][1]+zdrowie_gracza[client]+bonusowe_zdrowie_gracza[client];
3558 maksymalne_obrazenia_gracza[client] = (obrazenia_gracza[client]+bonusowe_obrazenia_gracza[client])*0.003;
3559 maksymalna_wytrzymalosc_gracza[client] = (umiejetnosci_klas[klasa_gracza[client]][2]+wytrzymalosc_gracza[client]+bonusowa_wytrzymalosc_gracza[client])*0.001;
3560 maksymalna_kondycja_gracza[client] = 0.9*(umiejetnosci_klas[klasa_gracza[client]][3]*0.01)+(kondycja_gracza[client]+bonusowa_kondycja_gracza[client])*0.0015;
3561
3562 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), maksymalne_zdrowie_gracza[client]);
3563 SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", maksymalna_kondycja_gracza[client]);
3564}
3565public Action:DajItem(client, item)
3566{
3567 if(informacje_itemu_gracza[client][0])
3568 UsunItem(client);
3569
3570 moc_itemu[client] = 100;
3571 informacje_itemu_gracza[client][0] = item;
3572
3573 switch(item)
3574 {
3575 case 1:
3576 {
3577 if(IsPlayerAlive(client))
3578 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+45);
3579
3580 bonusowe_zdrowie_gracza[client] += 45;
3581 bonusowa_kondycja_gracza[client] += 45;
3582 }
3583 case 2:
3584 {
3585 if(IsPlayerAlive(client))
3586 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+15);
3587
3588 bonusowe_zdrowie_gracza[client] += 15;
3589 bonusowa_kondycja_gracza[client] -= 15;
3590 }
3591 case 4: informacje_itemu_gracza[client][1] = 2;
3592 case 7: informacje_itemu_gracza[client][1] = GetRandomInt(2, 4);
3593 case 10: bonusowa_wytrzymalosc_gracza[client] += 25;
3594 case 11: bonusowa_kondycja_gracza[client] +=100;
3595 case 12: bonusowa_inteligencja_gracza[client] += 25;
3596 case 14: informacje_itemu_gracza[client][1] = 3;
3597 case 21: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
3598 case 25: informacje_itemu_gracza[client][1] = 1;
3599 case 27: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
3600 case 28: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
3601 case 32:
3602 {
3603 if(IsPlayerAlive(client) && klasa_gracza[client] != Szpieg)
3604 {
3605 SetEntityModel(client, (GetClientTeam(client) == CS_TEAM_CT)? modele_serwera[GetRandomInt(6, 10)]: modele_serwera[GetRandomInt(1, 5)]);
3606 GivePlayerItem(client, nazwy_broni[36]);
3607 }
3608
3609 informacje_itemu_gracza[client][1] = GetRandomInt(1, 3);
3610 }
3611 case 33:
3612 {
3613 if(IsPlayerAlive(client))
3614 GivePlayerItem(client, nazwy_broni[36]);
3615
3616 informacje_itemu_gracza[client][1] = GetRandomInt(4, 8);
3617 }
3618 case 38: informacje_itemu_gracza[client][1] = 1;
3619 case 40: bonusowe_obrazenia_gracza[client] += 25;
3620 case 41:
3621 {
3622 if(IsPlayerAlive(client))
3623 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+25);
3624
3625 bonusowa_inteligencja_gracza[client] += 15;
3626 bonusowe_zdrowie_gracza[client] += 15;
3627 bonusowe_obrazenia_gracza[client] += 15;
3628 bonusowa_wytrzymalosc_gracza[client] += 15;
3629 bonusowa_kondycja_gracza[client] += 15;
3630 }
3631 case 42: informacje_itemu_gracza[client][1] = GetRandomInt(10, 14 );
3632 case 59:
3633 {
3634 informacje_itemu_gracza[client][1] = GetRandomInt(4, 6);
3635 GivePlayerItem(client, nazwy_broni[1]);
3636 }
3637 case 47: informacje_itemu_gracza[client][1] = GetRandomInt(15, 25);
3638 case 48: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
3639 case 49: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
3640 case 50:
3641 {
3642 informacje_itemu_gracza[client][1] = 1;
3643 godmode_task[client] = INVALID_HANDLE;
3644 }
3645 case 51: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
3646 case 52: GivePlayerItem(client, nazwy_broni[37]);
3647 case 53: informacje_itemu_gracza[client][1] = 2;
3648 case 54: GivePlayerItem(client, nazwy_broni[24]);
3649 case 55:
3650 {
3651 informacje_itemu_gracza[client][1] = GetRandomInt(1, 3);
3652 GivePlayerItem(client, nazwy_broni[27]);
3653 }
3654 case 56: informacje_itemu_gracza[client][1] = 2;
3655 case 57: GivePlayerItem(client, nazwy_broni[22]);
3656 case 58:
3657 {
3658 new ent = GivePlayerItem(client, nazwy_broni[39]);
3659 if(ent != -1)
3660 SetEntData(ent, FindSendPropInfo("CWeaponCSBase", "m_iClip1"), 5);
3661 }
3662 case 64: GivePlayerItem(client, nazwy_broni[28]);
3663 case 67:
3664 {
3665 bonusowa_inteligencja_gracza[client] += RoundFloat(inteligencja_gracza[client]*0.2);
3666 }
3667 }
3668}
3669public Action:UsunItem(client)
3670{
3671 switch(informacje_itemu_gracza[client][0])
3672 {
3673 case 1:
3674 {
3675 if(IsPlayerAlive(client) && GetClientHealth(client) > 100)
3676 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)-45);
3677
3678 bonusowe_zdrowie_gracza[client] -= 45;
3679 bonusowa_kondycja_gracza[client] -= 45;
3680 }
3681 case 2:
3682 {
3683 if(IsPlayerAlive(client) && GetClientHealth(client) > 50)
3684 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)-15);
3685
3686 bonusowe_zdrowie_gracza[client] -= 15;
3687 bonusowa_kondycja_gracza[client] += 15;
3688 }
3689 case 10: bonusowa_wytrzymalosc_gracza[client] -= 25;
3690 case 11: bonusowa_kondycja_gracza[client] -= 100;
3691 case 12: bonusowa_inteligencja_gracza[client] -= 25;
3692 case 13:
3693 {
3694 if(GetEntProp(client, Prop_Send, "m_bNightVisionOn"))
3695 SetEntProp(client, Prop_Send, "m_bNightVisionOn", 0);
3696 }
3697 case 32:
3698 {
3699 if(IsPlayerAlive(client) && klasa_gracza[client] != Szpieg)
3700 CS_UpdateClientModel(client);
3701 }
3702 case 40: bonusowe_obrazenia_gracza[client] -= 25;
3703 case 41:
3704 {
3705 if(IsPlayerAlive(client) && GetClientHealth(client) > 25)
3706 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)-25);
3707
3708 bonusowa_inteligencja_gracza[client] -= 15;
3709 bonusowe_zdrowie_gracza[client] -= 15;
3710 bonusowe_obrazenia_gracza[client] -= 15;
3711 bonusowa_wytrzymalosc_gracza[client] -= 15;
3712 bonusowa_kondycja_gracza[client] -= 15;
3713 }
3714 case 50: StopGodmode(client);
3715 case 60: set_user_esp(client, 0);
3716 }
3717
3718 moc_itemu[client] = 0;
3719 informacje_itemu_gracza[client][0] = 0;
3720 informacje_itemu_gracza[client][1] = 0;
3721}
3722public Action:PlayerSpawn(Handle:event, String:name[], bool:dontBroadcast)
3723{
3724 new client = GetClientOfUserId(GetEventInt(event, "userid"));
3725
3726 uzyl_kamikazze[client] = false;
3727 uzyl_kamikadze[client] = false;
3728 uzyl_betonowego_ciala[client] = false;
3729 uzyl_elektromagnesu[client] = false;
3730 dostal_elektromagnesem[client] = false;
3731 uzyl_pomocnejdloni[client] = false;
3732 ma_lodowy_pocisk[client] = false;
3733 g_iCzasTarczy[client] = 0;
3734 jeden_zatruty[client] = false;
3735 umarlct = 0;
3736 umarltt = 0;
3737 zablokowano_strzal[client] = 0;
3738 ma_ladunek_piorun[client] = true;
3739 g_CooldownNaPiorun[client] = 0;
3740
3741
3742 if(!IsValidClient(client) || IsFakeClient(client))
3743 return;
3744
3745 if(hud_task[client] == null)
3746 hud_task[client] = CreateTimer(REFRESH_HUD, PokazInformacje, client, TIMER_FLAG_NO_MAPCHANGE);
3747
3748 if(GetUserFlagBits(client) & VIP_FLAG && !vip_gracza[client])
3749 {
3750 CS_SetClientClanTag(client, "[?VIP?]");
3751 bonusowe_zdrowie_gracza[client] += 15;
3752 bonusowa_wytrzymalosc_gracza[client] += 20;
3753 bonusowa_kondycja_gracza[client] += 20;
3754 vip_gracza[client] = true;
3755 }
3756
3757 char nick[32];
3758 GetClientName(client, nick, sizeof(nick));
3759 if (StrContains(nick, "cs-lajt", false) != -1) ma_nick[client] = true;
3760
3761 for(new slot = 0; slot < 4; slot ++)
3762 {
3763 new weapon_index = -1;
3764 while((weapon_index = GetPlayerWeaponSlot(client, slot)) != -1)
3765 {
3766 if(IsValidEntity(weapon_index))
3767 {
3768 RemovePlayerItem(client, weapon_index);
3769 AcceptEntityInput(weapon_index, "kill");
3770 }
3771 }
3772 }
3773
3774 GivePlayerItem(client, nazwy_broni[40]);
3775 Odrodzenie(client);
3776}
3777public Action:PlayerDeath(Handle:event, String:name[], bool:dontBroadcast)
3778{
3779 new client = GetClientOfUserId(GetEventInt(event, "userid"));
3780 new killer = GetClientOfUserId(GetEventInt(event, "attacker"));
3781 if(!IsValidClient(client) || !IsValidClient(killer))
3782 return;
3783
3784 if(klasa_gracza[killer] && GetClientTeam(client) != GetClientTeam(killer))
3785 {
3786 new doswiadczenie = 0;
3787 switch(klasa_gracza[killer])
3788 {
3789 case Piorun:
3790 {
3791 if(GetClientTeam(client) == GetClientTeam(killer))
3792 return;
3793
3794 if(g_CooldownNaPiorun[killer] >= GetTime())
3795 return;
3796
3797 if(!ma_ladunek_piorun[killer])
3798 ScreenEffect(killer, 350, 350, FFADE_IN | FFADE_MODULATE, 0, 255, 0, 200);
3799
3800 ma_ladunek_piorun[killer] = true;
3801 }
3802 case Grom:
3803 {
3804 if(klasa_gracza[client] != Obronca && informacje_itemu_gracza[client][0] != 30)
3805 {
3806 new active_weapon = GetEntPropEnt(killer, Prop_Send, "m_hActiveWeapon");
3807 if(active_weapon != -1)
3808 {
3809 new String:weapon[32];
3810 GetClientWeapon(killer, weapon, sizeof(weapon));
3811 for(new i = 1; i < sizeof(nazwy_broni); i ++)
3812 {
3813 if(!StrEqual(weapon, nazwy_broni[i]))
3814 continue;
3815
3816 if(naboje_broni[i][0] > 0)
3817 SetEntData(active_weapon, FindSendPropInfo("CWeaponCSBase", "m_iClip1"), naboje_broni[i][0]);
3818
3819 break;
3820 }
3821 }
3822 }
3823 }
3824 case Szturmen:
3825 {
3826 if(klasa_gracza[client] != Obronca && informacje_itemu_gracza[client][0] != 30)
3827 SetEntData(killer, FindDataMapInfo(killer, "m_iHealth"), GetClientHealth(killer)+30<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+30: maksymalne_zdrowie_gracza[killer]);
3828 }
3829 case Rewolwerowiec:
3830 {
3831 if(GetClientTeam(client) == GetClientTeam(killer))
3832 return;
3833
3834 new active_weapon = GetEntPropEnt(killer, Prop_Send, "m_hActiveWeapon");
3835 if(active_weapon != -1)
3836 SetEntData(active_weapon, FindSendPropInfo("CWeaponCSBase", "m_iClip1"), 8);
3837 }
3838 }
3839 switch(informacje_itemu_gracza[killer][0])
3840 {
3841 case 0:
3842 {
3843 DajItem(killer, GetRandomInt(1, sizeof nazwy_itemow-1));
3844 PrintToChat(killer, "%s Zdobyłeś %s.", PREFIX, nazwy_itemow[informacje_itemu_gracza[killer][0]]);
3845 }
3846 case 5:
3847 {
3848 if(informacje_itemu_gracza[client][0] != 29)
3849 SetEntData(killer, FindDataMapInfo(killer, "m_iHealth"), GetClientHealth(killer)+50<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+50: maksymalne_zdrowie_gracza[killer]);
3850 }
3851 case 8:
3852 {
3853 if(informacje_itemu_gracza[client][0] != 29)
3854 doswiadczenie += 150;
3855 }
3856 case 9:
3857 {
3858 if(informacje_itemu_gracza[client][0] != 29)
3859 SetEntData(killer, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(killer, FindSendPropInfo("CCSPlayer", "m_iAccount"))+1500);
3860 }
3861 case 39:
3862 {
3863 if(informacje_itemu_gracza[client][0] != 29)
3864 SetEntData(killer, FindDataMapInfo(killer, "m_iHealth"), GetClientHealth(killer)+20<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+20: maksymalne_zdrowie_gracza[killer]);
3865 }
3866 case 44:
3867 {
3868 if(informacje_itemu_gracza[client][0] != 29)
3869 doswiadczenie += 100;
3870 }
3871 }
3872 if(misja_gracza[killer] && (nazwy_misji[misja_gracza[killer]][0] == 0 && klasa_gracza[client] == nazwy_misji[misja_gracza[killer]][2] || nazwy_misji[misja_gracza[killer]][0] == 1 && informacje_itemu_gracza[client][0] == nazwy_misji[misja_gracza[killer]][2]))
3873 UstawPostep(killer, postep_gracza[killer]+1);
3874
3875 if(hitgroup_gracza[client] == 1)
3876 {
3877 new String:godzina_str[8];
3878 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
3879 new godzina = StringToInt(godzina_str);
3880 if(godzina >= 6 && godzina < 24)
3881 {
3882 if(!ma_nick[killer])
3883 {
3884 if(vip_gracza[killer])
3885 doswiadczenie += RoundFloat(poziom_gracza[client]*0.75+xp_kill_vip+xp_kill_hs_vip);
3886 else
3887 doswiadczenie += RoundFloat(poziom_gracza[client]*0.375+xp_kill+xp_kill_hs);
3888 }
3889 else
3890 {
3891 if(vip_gracza[killer])
3892 doswiadczenie += RoundFloat((poziom_gracza[client]*0.75+xp_kill_vip+xp_kill_hs_vip)*mnoznik_za_nick);
3893 else
3894 doswiadczenie += RoundFloat((poziom_gracza[client]*0.375+xp_kill+xp_kill_hs)*mnoznik_za_nick);
3895 }
3896 }
3897 else
3898 {
3899 if(!ma_nick[killer])
3900 {
3901 if(vip_gracza[killer])
3902 doswiadczenie += RoundFloat(poziom_gracza[client]*0.75+xp_kill_vip+xp_kill_hs_vip*2);
3903 else
3904 doswiadczenie += RoundFloat(poziom_gracza[client]*0.375+xp_kill+xp_kill_hs*2);
3905 }
3906 else
3907 {
3908 if(vip_gracza[killer])
3909 doswiadczenie += RoundFloat((poziom_gracza[client]*0.75+xp_kill_vip+xp_kill_hs_vip*2)*mnoznik_za_nick);
3910 else
3911 doswiadczenie += RoundFloat((poziom_gracza[client]*0.375+xp_kill+xp_kill_hs*2)*mnoznik_za_nick); }
3912 }
3913
3914 PrintToChat(killer, "%s Dostałeś %i doświadczenia za zabicie przeciwnika strzałem w głowę.", PREFIX, doswiadczenie);
3915 ClientCommand(killer, "play *%s", dzwieki_serwera[GetRandomInt(2, 5)]);
3916 }
3917 else
3918 {
3919 if(!ma_nick[killer])
3920 {
3921 if(vip_gracza[killer])
3922 doswiadczenie += RoundFloat(poziom_gracza[client]*0.75+xp_kill_vip);
3923 else
3924 doswiadczenie += RoundFloat(poziom_gracza[client]*0.375+xp_kill);
3925 }
3926 else
3927 {
3928 if(vip_gracza[killer])
3929 doswiadczenie += RoundFloat((poziom_gracza[client]*0.75+xp_kill_vip)*mnoznik_za_nick);
3930 else
3931 doswiadczenie += RoundFloat((poziom_gracza[client]*0.375+xp_kill)*mnoznik_za_nick);
3932 }
3933 PrintToChat(killer, "%s Dostałeś %i doświadczenia za zabicie przeciwnika.", PREFIX, doswiadczenie);
3934 }
3935
3936 doswiadczenie_gracza[killer] += doswiadczenie;
3937 SprawdzPoziom(killer);
3938 }
3939 switch(klasa_gracza[client])
3940 {
3941 case Terrorysta:
3942 {
3943 if(informacje_itemu_gracza[client][0] != 37 || !uzyl_kamikazze[client])
3944 {
3945 new Float:fOrigin[3];
3946 new Float:iOrigin[3];
3947 GetClientEyePosition(client, Float:fOrigin);
3948
3949 for(new i = 1; i <= MaxClients; i++)
3950 {
3951 if(!IsClientInGame(i) || !IsPlayerAlive(i))
3952 continue;
3953
3954 if(GetClientTeam(client) == GetClientTeam(i))
3955 continue;
3956
3957 GetClientEyePosition(i, Float:iOrigin);
3958 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
3959 ZadajObrazenia(i, client, client, ((klasa_gracza[i] == Obronca || informacje_itemu_gracza[i][0] == 30)? 0.0: (160.0+maksymalna_inteligencja_gracza[client])), DMG_GENERIC);
3960 }
3961
3962 TE_SetupExplosion(fOrigin, sprite_blue, 10.0, 1, 0, 100, 100);
3963 TE_SendToAll();
3964 }
3965 }
3966 }
3967 switch(informacje_itemu_gracza[client][0])
3968 {
3969 case 7:
3970 {
3971 if(GetRandomInt(1, informacje_itemu_gracza[client][1]) == 1)
3972 CreateTimer(0.1, Wskrzes, client, TIMER_FLAG_NO_MAPCHANGE);
3973 }
3974 case 62:
3975 {
3976 if(informacje_itemu_gracza[client][0] != 29)
3977 CreateTimer(0.1, Wskrzes, client, TIMER_FLAG_NO_MAPCHANGE);
3978 }
3979 case 37:
3980 {
3981 new Float:fOrigin[3];
3982 new Float:iOrigin[3];
3983 GetClientEyePosition(client, Float:fOrigin);
3984
3985 for(new i = 1; i <= MaxClients; i++)
3986 {
3987 if(!IsClientInGame(i) || !IsPlayerAlive(i))
3988 continue;
3989
3990 if(GetClientTeam(client) == GetClientTeam(i))
3991 continue;
3992
3993 GetClientEyePosition(i, Float:iOrigin);
3994 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
3995 {
3996 if(informacje_itemu_gracza[i][0] != 29)
3997 {
3998 if(GetEntProp(i, Prop_Send, "m_ArmorValue"))
3999 SetEntProp(i, Prop_Send, "m_ArmorValue", 0);
4000
4001 ZadajObrazenia(i, client, client, 1.0+float(GetClientHealth(i)), DMG_GENERIC);
4002 }
4003 }
4004 }
4005
4006 TE_SetupExplosion(fOrigin, sprite_blue, 10.0, 1, 0, 100, 100);
4007 TE_SendToAll();
4008 }
4009 case 50: StopGodmode(client);
4010 }
4011 if(informacje_itemu_gracza[client][0])
4012 {
4013 if(moc_itemu[client] > 20)
4014 moc_itemu[client] -= 20;
4015 else
4016 {
4017 UsunItem(client);
4018 PrintToChat(client, "%s Twój item uległ zniszczeniu.", PREFIX);
4019 }
4020 }
4021 int team = GetClientTeam(client);
4022
4023 if(team == 2)
4024 {
4025 dead_ct = client;
4026 umarlct = 1;
4027 }
4028 else if( team == 3)
4029 {
4030 dead_t = client;
4031 umarltt = 1;
4032 }
4033}
4034public Action:PlayerBlind(Handle:event, const String:name[], bool:dontBroadcast)
4035{
4036 new client = GetClientOfUserId(GetEventInt(event, "userid"));
4037 if(!IsValidClient(oslepiajacy_gracz) || !IsValidClient(client))
4038 return;
4039
4040 if(client == oslepiajacy_gracz)
4041 return;
4042
4043 if(GetClientTeam(client) == GetClientTeam(oslepiajacy_gracz) || informacje_itemu_gracza[client][0] == 39 && informacje_itemu_gracza[oslepiajacy_gracz][0] != 29 || informacje_itemu_gracza[client][0] == 52)
4044 SetEntDataFloat(client, FindSendPropInfo("CCSPlayer", "m_flFlashMaxAlpha"), 0.5);
4045}
4046public Action:HeDetonate(Handle:event, const String:name[], bool:dontBroadcast)
4047{
4048 new client = GetClientOfUserId(GetEventInt(event, "userid"));
4049 if(!IsValidClient(client))
4050 return;
4051
4052 new damage = 0;
4053 if(klasa_gracza[client] == Partyzant || informacje_itemu_gracza[client][0] == 32 && GetRandomInt(1, informacje_itemu_gracza[client][1]) == 1 || informacje_itemu_gracza[client][0] == 33)
4054 damage = 1;
4055
4056 new Float:fOrigin[3];
4057 new Float:iOrigin[3];
4058 fOrigin[0] = GetEventFloat(event, "x");
4059 fOrigin[1] = GetEventFloat(event, "y");
4060 fOrigin[2] = GetEventFloat(event, "z");
4061
4062 for(new i = 1; i <= MaxClients; i++)
4063 {
4064 if(!IsClientInGame(i) || !IsPlayerAlive(i))
4065 continue;
4066
4067 GetClientAbsOrigin(i, Float:iOrigin);
4068 if(GetClientTeam(client) != GetClientTeam(i) && damage)
4069 {
4070 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
4071 {
4072 if(GetEntProp(i, Prop_Send, "m_ArmorValue"))
4073 SetEntProp(i, Prop_Send, "m_ArmorValue", 0);
4074
4075 ZadajObrazenia(i, client, client, (informacje_itemu_gracza[client][0] == 32 || informacje_itemu_gracza[client][0] == 33)? ((informacje_itemu_gracza[i][0] == 29)? 0.0: 1.0+float(GetClientHealth(i))): ((klasa_gracza[i] == Obronca || informacje_itemu_gracza[i][0] == 30)? 0.0: 50.0+maksymalna_inteligencja_gracza[client]), DMG_GENERIC);
4076 }
4077 }
4078 else if(client == i)
4079 {
4080 new Float:dystans = GetVectorDistance(fOrigin, iOrigin);
4081 if(dystans <= 200.0)
4082 SlapPlayer(i, 201-RoundFloat(dystans), true);
4083 }
4084 }
4085 if(damage)
4086 {
4087 TE_SetupBeamRingPoint(fOrigin, 20.0, 200.0, sprite_laser, sprite_halo, 0, 10, 0.6, 6.0, 0.0, {255, 255, 255, 128}, 10, 0);
4088 TE_SendToAll();
4089 }
4090}
4091public Action:FbDetonate(Handle:event, const String:name[], bool:dontBroadcast)
4092{
4093 new client = GetClientOfUserId(GetEventInt(event, "userid"));
4094 if(!IsValidClient(client))
4095 return;
4096
4097 new Float:fOrigin[3];
4098 new Float:iOrigin[3];
4099 fOrigin[0] = GetEventFloat(event, "x");
4100 fOrigin[1] = GetEventFloat(event, "y");
4101 fOrigin[2] = GetEventFloat(event, "z");
4102 if(informacje_itemu_gracza[client][0] == 52)
4103 {
4104 for(new i = 1; i <= MaxClients; i++)
4105 {
4106 if(!IsClientInGame(i) || !IsPlayerAlive(i))
4107 continue;
4108
4109 if(GetClientTeam(client) == GetClientTeam(i))
4110 continue;
4111
4112 GetClientAbsOrigin(i, Float:iOrigin);
4113 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
4114 {
4115 if(informacje_itemu_gracza[i][0] != 29)
4116 {
4117 SetEntityMoveType(i, MOVETYPE_NONE);
4118 CreateTimer(2.0, TaskZamrozenieGracza, i);
4119 }
4120 }
4121 }
4122
4123 TE_SetupBeamRingPoint(fOrigin, 20.0, 200.0, sprite_laser, sprite_halo, 0, 10, 0.6, 6.0, 0.0, {255, 255, 255, 128}, 10, 0);
4124 TE_SendToAll();
4125 }
4126
4127 oslepiajacy_gracz = client;
4128}
4129public Action:StrzalGracza(Handle:event, String:name[], bool:dontbroadcast)
4130{
4131 new client = GetClientOfUserId(GetEventInt(event, "userid"));
4132 if(!IsValidClient(client))
4133 return Plugin_Continue;
4134
4135 switch(informacje_itemu_gracza[client][0])
4136 {
4137 case 34:
4138 {
4139 new String:weapon[32];
4140 GetClientWeapon(client, weapon, sizeof(weapon));
4141 if(!StrEqual(weapon, nazwy_broni[33]) && !StrEqual(weapon, nazwy_broni[34]) && !StrEqual(weapon, nazwy_broni[35]) && !StrEqual(weapon, nazwy_broni[36]) && !StrEqual(weapon, nazwy_broni[37]) && !StrEqual(weapon, nazwy_broni[38]) && !StrEqual(weapon, nazwy_broni[39]) && !StrEqual(weapon, nazwy_broni[41]))
4142 {
4143 new ent = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
4144 if(ent != -1)
4145 SetEntData(ent, FindSendPropInfo("CWeaponCSBase", "m_iClip1"), 5);
4146 }
4147 }
4148 case 61:
4149 {
4150 new String:weapon[32];
4151 GetClientWeapon(client, weapon, sizeof(weapon));
4152 if(!StrEqual(weapon, nazwy_broni[33]) && !StrEqual(weapon, nazwy_broni[34]) && !StrEqual(weapon, nazwy_broni[35]) && !StrEqual(weapon, nazwy_broni[36]) && !StrEqual(weapon, nazwy_broni[37]) && !StrEqual(weapon, nazwy_broni[38]) && !StrEqual(weapon, nazwy_broni[39]) && !StrEqual(weapon, nazwy_broni[41]))
4153 {
4154 new Float:forigin[3];
4155 forigin[0] = GetEventFloat(event, "x");
4156 forigin[1] = GetEventFloat(event, "y");
4157 forigin[2] = GetEventFloat(event, "z");
4158
4159 new Float:fposition[3];
4160 GetClientEyePosition(client, fposition);
4161 new Float:fdistance = GetVectorDistance(fposition, forigin);
4162 new Float:fpercent = (0.4 /(fdistance/100.0));
4163
4164 new Float:fdifference[3];
4165 fdifference[0] = fposition[0]+((forigin[0]-fposition[0])*fpercent);
4166 fdifference[1] = fposition[1]+((forigin[1]-fposition[1])*fpercent)-0.08;
4167 fdifference[2] = fposition[2]+((forigin[2]-fposition[2])*fpercent);
4168
4169 TE_SetupBeamPoints(fdifference, forigin, sprite_laser, sprite_halo, 0, 0, 0.5, 1.0, 1.0, 1, 0.0, {255, 255, 255, 255}, 0);
4170 TE_SendToAll();
4171 }
4172 }
4173 }
4174
4175 return Plugin_Continue;
4176}
4177public Action:UstawPostep(client, postep)
4178{
4179 postep_gracza[client] = postep;
4180 if(postep_gracza[client] >= nazwy_misji[misja_gracza[client]][1])
4181 {
4182 doswiadczenie_gracza[client] += nazwy_misji[misja_gracza[client]][3];
4183 SprawdzPoziom(client);
4184
4185 PrintToChat(client, "%s Wykonałeś zadanie: [%s]. Gratulacje!", PREFIX, opisy_misji[misja_gracza[client]]);
4186 misja_gracza[client] = 0;
4187 postep_gracza[client] = 0;
4188 }
4189
4190 return Plugin_Continue;
4191}
4192public Action:SprawdzPoziom(client)
4193{
4194 if(!IsValidClient(client) || !klasa_gracza[client])
4195 return;
4196
4197 while(doswiadczenie_gracza[client] >= doswiadczenie_poziomu[poziom_gracza[client]] && poziom_gracza[client] < limit_poziomu)
4198 {
4199 poziom_gracza[client] ++;
4200 punkty_gracza[client] = (poziom_gracza[client]/co_ile_lv_punkt-1)-inteligencja_gracza[client]-zdrowie_gracza[client]-obrazenia_gracza[client]-wytrzymalosc_gracza[client]-kondycja_gracza[client];
4201 ClientCommand(client, "play *%s", dzwieki_serwera[1]);
4202 }
4203 while(doswiadczenie_gracza[client] < doswiadczenie_poziomu[poziom_gracza[client]-1])
4204 {
4205 poziom_gracza[client] --;
4206 ResetujPunkty(client);
4207 }
4208 if(poziom_gracza[client] > limit_poziomu)
4209 {
4210 poziom_gracza[client] = limit_poziomu;
4211 ResetujPunkty(client);
4212 }
4213}
4214public Action:PrzydzielPunkty(client)
4215{
4216 new String:tytul[512];
4217 new String:szybkosc[512];
4218 new String:inteligencja[512];
4219 new String:zdrowie[512];
4220 new String:obrazenia[512];
4221 new String:wytrzymalosc[512];
4222 new String:kondycja[512];
4223 Format(tytul, sizeof(tytul), "Przydziel Punkty (%i):", punkty_gracza[client]);
4224 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
4225 Format(szybkosc, sizeof(szybkosc), "Ile dodawac: ALL (Po ile punktow dodawac do statystyk)");
4226 else
4227 Format(szybkosc, sizeof(szybkosc), "Ile dodawać: %i (Po ile punktów dodawać do statystyk)", ile_rozdawac[szybkosc_rozdania[client]]);
4228 Format(inteligencja, sizeof(inteligencja), "Inteligencja: %i/%i (Zwiększa umiejętności klasy o %i punktow)", inteligencja_gracza[client], limit_inteligencji, inteligencja_gracza[client]/6);
4229 Format(zdrowie, sizeof(zdrowie), "Zdrowie: %i/%i (Zwieksza zdrowie o %i punktow)", zdrowie_gracza[client], limit_zdrowia, zdrowie_gracza[client]);
4230 Format(obrazenia, sizeof(obrazenia), "Obrażenia: %i/%i (Zwiększa zadawane obrażenia o %i%%)", obrazenia_gracza[client], limit_obrazen, RoundFloat(obrazenia_gracza[client]*0.3));
4231 Format(wytrzymalosc, sizeof(wytrzymalosc), "Wytrzymałość: %i/%i (Zmniejsza otrzymywane obrażenia o %i%%)", wytrzymalosc_gracza[client], limit_wytrzymalosci, RoundFloat(wytrzymalosc_gracza[client]*0.1));
4232 Format(kondycja, sizeof(kondycja), "Kondycja: %i/%i (Zwiększa tempo chodu o %i%%)", kondycja_gracza[client], limit_kondycji, RoundFloat(kondycja_gracza[client]*0.15));
4233
4234 new Handle:menu = CreateMenu(PrzydzielPunkty_Handler);
4235 SetMenuTitle(menu, tytul);
4236 AddMenuItem(menu, "1", szybkosc);
4237 AddMenuItem(menu, "2", inteligencja);
4238 AddMenuItem(menu, "3", zdrowie);
4239 AddMenuItem(menu, "4", obrazenia);
4240 AddMenuItem(menu, "5", wytrzymalosc);
4241 AddMenuItem(menu, "6", kondycja);
4242 DisplayMenu(menu, client, 250);
4243}
4244public PrzydzielPunkty_Handler(Handle:classhandle, MenuAction:action, client, Position)
4245{
4246 if(action == MenuAction_Select)
4247 {
4248 if(punkty_gracza[client])
4249 {
4250 new String:Item[32];
4251 GetMenuItem(classhandle, Position, Item, sizeof(Item));
4252 new ilosc;
4253
4254 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
4255 ilosc = punkty_gracza[client];
4256 else
4257 ilosc = (ile_rozdawac[szybkosc_rozdania[client]] > punkty_gracza[client])? punkty_gracza[client]: ile_rozdawac[szybkosc_rozdania[client]];
4258
4259 if(StrEqual(Item, "1"))
4260 {
4261 if(szybkosc_rozdania[client] == 2)
4262 szybkosc_rozdania[client] = 0;
4263 else
4264 szybkosc_rozdania[client] ++;
4265 }
4266 else if(StrEqual(Item, "2"))
4267 {
4268 if(inteligencja_gracza[client] != limit_inteligencji)
4269 {
4270 if(inteligencja_gracza[client] + ilosc <= limit_inteligencji)
4271 {
4272 inteligencja_gracza[client] += ilosc;
4273 punkty_gracza[client] -= ilosc;
4274 }
4275 else
4276 {
4277 new punktydododania;
4278 punktydododania = limit_inteligencji - inteligencja_gracza[client];
4279 inteligencja_gracza[client] += punktydododania;
4280 punkty_gracza[client] -= punktydododania;
4281 }
4282 }
4283 else
4284 PrintToChat(client, "%s Maksymalny poziom inteligencji osiągnięty!", PREFIX);
4285 }
4286 else if(StrEqual(Item, "3"))
4287 {
4288 if(zdrowie_gracza[client] != limit_zdrowia)
4289 {
4290 if(zdrowie_gracza[client] + ilosc <= limit_zdrowia)
4291 {
4292 zdrowie_gracza[client] += ilosc;
4293 punkty_gracza[client] -= ilosc;
4294 }
4295 else
4296 {
4297 new punktydododania;
4298 punktydododania = limit_zdrowia - zdrowie_gracza[client];
4299 zdrowie_gracza[client] += punktydododania;
4300 punkty_gracza[client] -= punktydododania;
4301 }
4302 }
4303 else
4304 PrintToChat(client, "%s Maksymalny poziom zdrowia osiągnięty!", PREFIX);
4305 }
4306 else if(StrEqual(Item, "4"))
4307 {
4308 if(obrazenia_gracza[client] != limit_obrazen)
4309 {
4310 if(obrazenia_gracza[client] + ilosc <= limit_obrazen)
4311 {
4312 obrazenia_gracza[client] += ilosc;
4313 punkty_gracza[client] -= ilosc;
4314 }
4315 else
4316 {
4317 new punktydododania;
4318 punktydododania = limit_obrazen - obrazenia_gracza[client];
4319 obrazenia_gracza[client] += punktydododania;
4320 punkty_gracza[client] -= punktydododania;
4321 }
4322 }
4323 else
4324 PrintToChat(client, "%s Maksymalny poziom obrażeń osiągnięty!", PREFIX);
4325 }
4326 else if(StrEqual(Item, "5"))
4327 {
4328 if(wytrzymalosc_gracza[client] != limit_wytrzymalosci)
4329 {
4330 if(wytrzymalosc_gracza[client] + ilosc <= limit_wytrzymalosci)
4331 {
4332 wytrzymalosc_gracza[client] += ilosc;
4333 punkty_gracza[client] -= ilosc;
4334 }
4335 else
4336 {
4337 new punktydododania;
4338 punktydododania = limit_wytrzymalosci - wytrzymalosc_gracza[client];
4339 wytrzymalosc_gracza[client] += punktydododania;
4340 punkty_gracza[client] -= punktydododania;
4341 }
4342 }
4343 else
4344 PrintToChat(client, "%s Maksymalny poziom wytrzymałości osiągnięty!", PREFIX);
4345 }
4346 else if(StrEqual(Item, "6"))
4347 {
4348 if(kondycja_gracza[client] != limit_kondycji)
4349 {
4350 if(kondycja_gracza[client] + ilosc <= limit_kondycji)
4351 {
4352 kondycja_gracza[client] += ilosc;
4353 punkty_gracza[client] -= ilosc;
4354 }
4355 else
4356 {
4357 new punktydododania;
4358 punktydododania = limit_kondycji - kondycja_gracza[client];
4359 kondycja_gracza[client] += punktydododania;
4360 punkty_gracza[client] -= punktydododania;
4361 }
4362 }
4363 else
4364 PrintToChat(client, "%s Maksymalny poziom kondycji osiągnięty!", PREFIX);
4365 }
4366 if(punkty_gracza[client])
4367 PrzydzielPunkty(client);
4368 }
4369 }
4370 else if(action == MenuAction_End)
4371 CloseHandle(classhandle);
4372}
4373public Action:ResetujPunkty(client)
4374{
4375 punkty_gracza[client] = poziom_gracza[client]/co_ile_lv_punkt-1;
4376 inteligencja_gracza[client] = 0;
4377 zdrowie_gracza[client] = 0;
4378 obrazenia_gracza[client] = 0;
4379 wytrzymalosc_gracza[client] = 0;
4380 kondycja_gracza[client] = 0;
4381
4382 PrintToChat(client, "%s Umiejętności zostały zresetowane.", PREFIX);
4383 if(punkty_gracza[client])
4384 PrzydzielPunkty(client);
4385}
4386public Action:OpisItemu(client)
4387{
4388 new String:opis_itemu[128];
4389 new String:losowa_wartosc[4];
4390 IntToString(informacje_itemu_gracza[client][1], losowa_wartosc, 3);
4391 Format(opis_itemu, sizeof(opis_itemu), opisy_itemow[informacje_itemu_gracza[client][0]]);
4392 ReplaceString(opis_itemu, sizeof(opis_itemu), "LW", losowa_wartosc);
4393
4394 PrintToChat(client, "%s Item: %s [%i%%].", PREFIX, nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]);
4395 PrintToChat(client, "%s Opis: %s.", PREFIX, opis_itemu);
4396}
4397public Action:WyrzucItem(client)
4398{
4399 if(informacje_itemu_gracza[client][0])
4400 {
4401 UsunItem(client);
4402 PrintToChat(client, "%s Wyrzuciłeś swój item.", PREFIX);
4403 }
4404 else
4405 PrintToChat(client, "%s Nie masz żadnego itemu.", PREFIX);
4406}
4407public Action:ZmienDruzyne(client)
4408{
4409 if(GetClientTeam(client) == CS_TEAM_SPECTATOR)
4410 {
4411 switch(GetRandomInt(0, 1))
4412 {
4413 case 0:
4414 {
4415 ChangeClientTeam(client, CS_TEAM_T);
4416 PrintToChat(client, "%s Zostałeś przeniesiony do TT.", PREFIX);
4417 }
4418 case 1:
4419 {
4420 ChangeClientTeam(client, CS_TEAM_CT);
4421 PrintToChat(client, "%s Zostałeś przeniesiony do CT.", PREFIX);
4422 }
4423 }
4424 }
4425 else
4426 ChangeClientTeam(client, CS_TEAM_SPECTATOR);
4427}
4428public Action:OddajItem(client)
4429{
4430 if(klasa_gracza[client])
4431 {
4432 new Handle:menu = CreateMenu(OddajItem_Handler);
4433 SetMenuTitle(menu, "Oddaj Item:");
4434 for(new i = 1; i <= MaxClients; i++)
4435 {
4436 if(!IsClientInGame(i) || i == client)
4437 continue;
4438
4439 AddMenuItem(menu, nazwa_gracza[i], nazwa_gracza[i]);
4440 }
4441
4442 DisplayMenu(menu, client, 250);
4443 }
4444 else
4445 PrintToChat(client, "%s Musisz mieć wybraną klasę aby móc oddać item!", PREFIX);
4446}
4447public OddajItem_Handler(Handle:classhandle, MenuAction:action, client, Position)
4448{
4449 if(action == MenuAction_Select)
4450 {
4451 new String:Item[64];
4452 GetMenuItem(classhandle, Position, Item, sizeof(Item));
4453 Position ++;
4454
4455 new userid = FindTarget(0, Item);
4456 if(!IsValidClient(userid) || userid == -1)
4457 PrintToChat(client, "%s Nie odnaleziono wybranego gracza!", PREFIX);
4458 else if(!klasa_gracza[userid])
4459 PrintToChat(client, "%s Wybrany gracz musi mieć klasę by móc mu przekazać item!", PREFIX);
4460 else if(informacje_itemu_gracza[userid][0])
4461 PrintToChat(client, "%s Wybrany gracz ma już item!", PREFIX);
4462 else if(!informacje_itemu_gracza[client][0])
4463 PrintToChat(client, "%s Nie masz żadnego itemu!", PREFIX);
4464 else
4465 {
4466 new String:nazwa[512];
4467 Format(nazwa, sizeof(nazwa), "Czy chcesz przyjac item od %s?", nazwa_gracza[client]);
4468 new Handle:menu = CreateMenu(OddajItem_Handler2);
4469 SetMenuTitle(menu, nazwa);
4470 AddMenuItem(menu, "1", "Tak");
4471 AddMenuItem(menu, "2", "Nie");
4472 DisplayMenu(menu, userid, 250);
4473 client_gracza[userid] = client;
4474 }
4475 }
4476 else if(action == MenuAction_End)
4477 CloseHandle(classhandle);
4478}
4479public OddajItem_Handler2(Handle:classhandle, MenuAction:action, client, Position)
4480{
4481 if(action == MenuAction_Select)
4482 {
4483 new String:Item[32];
4484 GetMenuItem(classhandle, Position, Item, sizeof(Item));
4485 new userid = client_gracza[client];
4486
4487 if(StrEqual(Item, "1"))
4488 {
4489 if(!IsValidClient(userid))
4490 PrintToChat(client, "%s Nie odnaleziono wybranego gracza!", PREFIX);
4491 else if(!klasa_gracza[userid])
4492 PrintToChat(client, "%s Wybrany gracz musi mieć klasę by móc od niego odebrać item!", PREFIX);
4493 else if(!informacje_itemu_gracza[userid][0])
4494 PrintToChat(client, "%s Wybrany gracz nie ma żadnego itemu!", PREFIX);
4495 else if(informacje_itemu_gracza[client][0])
4496 PrintToChat(client, "%s Masz już item!", PREFIX);
4497 else
4498 {
4499 new wytrzymalosc = moc_itemu[userid];
4500 DajItem(client, informacje_itemu_gracza[userid][0]);
4501 moc_itemu[client] = wytrzymalosc;
4502 informacje_itemu_gracza[client][1] = informacje_itemu_gracza[userid][1];
4503 UsunItem(userid);
4504
4505 PrintToChatAll("%s Gracz %s przekazał item graczowi %s.", PREFIX, nazwa_gracza[userid], nazwa_gracza[client]);
4506 }
4507 }
4508 else if(StrEqual(Item, "2"))
4509 {
4510 if(IsValidClient(userid))
4511 PrintToChat(userid, "%s Wybrany gracz nie zgodził się na przyjęcie itemu!", PREFIX);
4512 }
4513 }
4514 else if(action == MenuAction_End)
4515 CloseHandle(classhandle);
4516}
4517public Action:WymienItem(client)
4518{
4519 if(klasa_gracza[client])
4520 {
4521 new Handle:menu = CreateMenu(WymienItem_Handler);
4522 SetMenuTitle(menu, "Oddaj Item:");
4523 for(new i = 1; i <= MaxClients; i++)
4524 {
4525 if(!IsClientInGame(i) || i == client)
4526 continue;
4527
4528 AddMenuItem(menu, nazwa_gracza[i], nazwa_gracza[i]);
4529 }
4530
4531 DisplayMenu(menu, client, 250);
4532 }
4533 else
4534 PrintToChat(client, "%s Musisz mieć wybraną klasę aby móc wymienić item!", PREFIX);
4535}
4536public WymienItem_Handler(Handle:classhandle, MenuAction:action, client, Position)
4537{
4538 if(action == MenuAction_Select)
4539 {
4540 new String:Item[64];
4541 GetMenuItem(classhandle, Position, Item, sizeof(Item));
4542 Position ++;
4543
4544 new userid = FindTarget(0, Item);
4545 if(!IsValidClient(userid) || userid == -1)
4546 PrintToChat(client, "%s Nie odnaleziono wybranego gracza!", PREFIX);
4547 else if(!klasa_gracza[userid])
4548 PrintToChat(client, "%s Wybrany gracz musi mieć klasę by móc mu przekazać item!", PREFIX);
4549 else if(!informacje_itemu_gracza[userid][0])
4550 PrintToChat(client, "%s Wybrany gracz nie ma żadnego itemu!", PREFIX);
4551 else if(!informacje_itemu_gracza[client][0])
4552 PrintToChat(client, "%s Nie masz żadnego itemu!", PREFIX);
4553 else if(informacje_itemu_gracza[client][0] == informacje_itemu_gracza[userid][0])
4554 PrintToChat(client, "%s Nie możesz wymienić swojego itemu na ten sam!", PREFIX);
4555 else if(wymiana_gracza[userid])
4556 PrintToChat(client, "%s Wybrany gracz wymieniał już swój item!", PREFIX);
4557 else if(wymiana_gracza[client])
4558 PrintToChat(client, "%s Możesz wymienić item tylko raz na mapę!", PREFIX);
4559 else if(blokada_gracza[userid])
4560 PrintToChat(client, "%s Wybrany gracz zablokował wymianę itemu!", PREFIX);
4561 else if(blokada_gracza[client])
4562 PrintToChat(client, "%s Masz zablokowanÄ… wymianÄ™ itemu!", PREFIX);
4563 else
4564 {
4565 new String:nazwa[512];
4566 Format(nazwa, sizeof(nazwa), "Czy chcesz wymienic swój item na %s z graczem %s?", nazwy_itemow[informacje_itemu_gracza[client][0]], nazwa_gracza[client]);
4567 new Handle:menu = CreateMenu(WymienItem_Handler2);
4568 SetMenuTitle(menu, nazwa);
4569 AddMenuItem(menu, "1", "Tak");
4570 AddMenuItem(menu, "2", "Nie");
4571 DisplayMenu(menu, userid, 250);
4572 client_gracza[userid] = client;
4573 }
4574 }
4575 else if(action == MenuAction_End)
4576 CloseHandle(classhandle);
4577}
4578public WymienItem_Handler2(Handle:classhandle, MenuAction:action, client, Position)
4579{
4580 if(action == MenuAction_Select)
4581 {
4582 new String:Item[32];
4583 GetMenuItem(classhandle, Position, Item, sizeof(Item));
4584 new userid = client_gracza[client];
4585
4586 if(StrEqual(Item, "1"))
4587 {
4588 if(!IsValidClient(userid))
4589 PrintToChat(client, "%s Nie odnaleziono wybranego gracza!", PREFIX);
4590 else if(!klasa_gracza[userid])
4591 PrintToChat(client, "%s Wybrany gracz musi mieć klasę by móc od niego odebrać item!", PREFIX);
4592 else if(!informacje_itemu_gracza[userid][0])
4593 PrintToChat(client, "%s Wybrany gracz nie ma żadnego itemu!", PREFIX);
4594 else if(!informacje_itemu_gracza[client][0])
4595 PrintToChat(client, "%s Nie masz żadnego itemu!", PREFIX);
4596 else if(informacje_itemu_gracza[client][0] == informacje_itemu_gracza[userid][0])
4597 PrintToChat(client, "%s Nie możesz wymienić swojego itemu na ten sam!", PREFIX);
4598 else if(wymiana_gracza[userid])
4599 PrintToChat(client, "%s Wybrany gracz wymieniał już swój item!", PREFIX);
4600 else if(wymiana_gracza[client])
4601 PrintToChat(client, "%s Mozesz wymienić item tylko raz na mapę!", PREFIX);
4602 else if(blokada_gracza[userid])
4603 PrintToChat(client, "%s Wybrany gracz zablokował wymianę itemu!", PREFIX);
4604 else if(blokada_gracza[client])
4605 PrintToChat(client, "%s Masz zablokowanÄ… wymianÄ™ itemu!", PREFIX);
4606 else
4607 {
4608 new item_zmienny[4];
4609 item_zmienny[0] = informacje_itemu_gracza[userid][0];
4610 item_zmienny[1] = informacje_itemu_gracza[client][0];
4611 item_zmienny[2] = informacje_itemu_gracza[userid][1];
4612 item_zmienny[3] = informacje_itemu_gracza[client][1];
4613
4614 DajItem(client, item_zmienny[0]);
4615 DajItem(userid, item_zmienny[1]);
4616 informacje_itemu_gracza[client][1] = item_zmienny[2];
4617 informacje_itemu_gracza[userid][1] = item_zmienny[3];
4618
4619 wymiana_gracza[userid] = true;
4620 wymiana_gracza[client] = true;
4621
4622 PrintToChatAll("%s Gracz %s oraz %s wymienili sie itemami.", PREFIX, nazwa_gracza[userid], nazwa_gracza[client]);
4623 }
4624 }
4625 else if(StrEqual(Item, "2"))
4626 {
4627 if(IsValidClient(userid))
4628 PrintToChat(userid, "%s Wybrany gracz nie zgodził się na wymianę itemu!", PREFIX);
4629 }
4630 }
4631 else if(action == MenuAction_End)
4632 CloseHandle(classhandle);
4633}
4634public Action:CmdExp(client, args)
4635{
4636 new String:arg1[32];
4637 new String:arg2[6];
4638 GetCmdArg(1, arg1, sizeof(arg1));
4639 GetCmdArg(2, arg2, sizeof(arg2));
4640 new target = FindTarget(client, arg1);
4641 new zmienna = StringToInt(arg2)-1;
4642 if(target != -1)
4643 {
4644 if((-zmienna) > doswiadczenie_gracza[target])
4645 PrintToConsole(client, "%s Chciałeś odjąć graczowi zbyt dużo doświadczenia.", PREFIX);
4646 else
4647 {
4648 doswiadczenie_gracza[target] += zmienna;
4649 SprawdzPoziom(target);
4650
4651 LogMessage("%s - dał graczowi %s (%i expa).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
4652 PrintToConsole(client, "%s Dałeś graczowi %s (%i expa).", PREFIX, nazwa_gracza[target], zmienna);
4653 }
4654 }
4655}
4656public Action:IleInt(client, args)
4657{
4658 PrintToChat(client, "%d inteligencji", maksymalna_inteligencja_gracza[client]);
4659}
4660public Action:CmdLvl(client, args)
4661{
4662 new String:arg1[32];
4663 new String:arg2[6];
4664 GetCmdArg(1, arg1, sizeof(arg1));
4665 GetCmdArg(2, arg2, sizeof(arg2));
4666 new target = FindTarget(client, arg1);
4667 new zmienna = StringToInt(arg2)-1;
4668 if(target != -1)
4669 {
4670 if((-zmienna) > poziom_gracza[target])
4671 PrintToConsole(client, "%s Chciałeś ustawić graczowi zbyt mały poziom.", PREFIX);
4672 else
4673 {
4674 if(poziom_gracza[target] + zmienna > limit_poziomu)
4675 PrintToConsole(client, "%s Chciałeś ustawić graczowi zbyt duzy poziom.", PREFIX);
4676 else
4677 {
4678 doswiadczenie_gracza[target] += doswiadczenie_poziomu[zmienna];
4679 SprawdzPoziom(target);
4680
4681 LogMessage("%s - dal graczowi %s (%i Lv).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
4682 PrintToConsole(client, "%s Dałeś graczowi %s (%i Lv).", PREFIX, nazwa_gracza[target], zmienna);
4683 }
4684 }
4685 }
4686}
4687public Action:CmdItem(client, args)
4688{
4689 new String:arg1[32];
4690 new String:arg2[6];
4691 GetCmdArg(1, arg1, sizeof(arg1));
4692 GetCmdArg(2, arg2, sizeof(arg2));
4693 new target = FindTarget(client, arg1);
4694 new zmienna = StringToInt(arg2);
4695 if(target != -1)
4696 {
4697 if(zmienna < 1 || zmienna > sizeof nazwy_itemow-1)
4698 PrintToConsole(client, "%s Podałeś nieprawidłowy numer itemu.", PREFIX);
4699 else
4700 {
4701 DajItem(target, zmienna);
4702 LogMessage("%s - dal graczowi %s (%i item).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
4703 PrintToConsole(client, "%s DaleÅ› graczowi %s (%i item).", PREFIX, nazwa_gracza[target], zmienna);
4704 }
4705 }
4706}
4707public Action:DataBaseConnect()
4708{
4709 sql = SQL_Connect("codmod_lvl_sql", true, dbError, sizeof(dbError));
4710 if(sql == INVALID_HANDLE)
4711 {
4712 LogError("Could not connect: %s", dbError);
4713 return Plugin_Continue;
4714 }
4715
4716 SQL_LockDatabase(sql);
4717 SQL_FastQuery(sql, "CREATE TABLE IF NOT EXISTS `codmod` (`id` INT(11) NOT NULL AUTO_INCREMENT, `steamid` VARCHAR(48) NOT NULL, `klasa` VARCHAR(48) NOT NULL, `lvl` INT(11) DEFAULT 1, `xp` INT(14), `inteligencja` INT(9), `zdrowie` INT(9), `obrazenia` INT(9), `wytrzymalosc` INT(9), `kondycja` INT(9), `misja` INT(9), `zabicia` INT(9), PRIMARY KEY (`id`), UNIQUE KEY `klasaid` (`klasa`,`steamid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;");
4718 SQL_UnlockDatabase(sql);
4719
4720 return Plugin_Continue;
4721}
4722public Action:TaskZapiszDane(Handle:timer, any:client)
4723{
4724 if(!IsValidClient(client))
4725 return;
4726
4727 ZapiszDane(client);
4728 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
4729}
4730public Action:ZapiszDane(client)
4731{
4732 if(!klasa_gracza[client])
4733 return;
4734
4735 new String:tmp[1024];
4736 new String:authid[64];
4737 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
4738 return;
4739
4740 Format(tmp, sizeof(tmp), "INSERT INTO `codmod` (`steamid`, `klasa`, `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `misja`, `zabicia`) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d, %d) ON DUPLICATE KEY UPDATE `lvl`=VALUES(`lvl`), `xp`=VALUES(`xp`), `inteligencja`=VALUES(`inteligencja`), `zdrowie`=VALUES(`zdrowie`), `obrazenia`=VALUES(`obrazenia`), `wytrzymalosc`=VALUES(`wytrzymalosc`), `kondycja`=VALUES(`kondycja`), `misja`=VALUES(`misja`), `zabicia`=VALUES(`zabicia`);", authid, nazwy_klas[klasa_gracza[client]], poziom_gracza[client], doswiadczenie_gracza[client], inteligencja_gracza[client], zdrowie_gracza[client], obrazenia_gracza[client], wytrzymalosc_gracza[client], kondycja_gracza[client], misja_gracza[client], postep_gracza[client])
4741 SQL_TQuery(sql, ZapiszDane_Handler, tmp, client);
4742}
4743public ZapiszDane_Handler(Handle:owner, Handle:query, const String:error[], any:client)
4744{
4745 if(query == INVALID_HANDLE)
4746 {
4747 LogError("Save error: %s", error);
4748 return;
4749 }
4750}
4751public Action:WczytajDane(client, klasa)
4752{
4753 poziom_gracza[client] = poziom_klasy_gracza[client][klasa];
4754 doswiadczenie_gracza[client] = doswiadczenie_klasy_gracza[client][klasa];
4755 inteligencja_gracza[client] = inteligencja_klasy_gracza[client][klasa];
4756 zdrowie_gracza[client] = zdrowie_klasy_gracza[client][klasa];
4757 obrazenia_gracza[client] = obrazenia_klasy_gracza[client][klasa];
4758 wytrzymalosc_gracza[client] = wytrzymalosc_klasy_gracza[client][klasa];
4759 kondycja_gracza[client] = kondycja_klasy_gracza[client][klasa];
4760 misja_gracza[client] = misja_klasy_gracza[client][klasa];
4761 postep_gracza[client] = zabicia_klasy_gracza[client][klasa];
4762 punkty_gracza[client] = (poziom_gracza[client]/co_ile_lv_punkt-1)-inteligencja_gracza[client]-zdrowie_gracza[client]-obrazenia_gracza[client]-wytrzymalosc_gracza[client]-kondycja_gracza[client];
4763 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
4764}
4765public Action:WybierzMisje(client)
4766{
4767 if(klasa_gracza[client])
4768 {
4769 if(misja_gracza[client])
4770 {
4771 new Handle:menu = CreateMenu(WybierzMisje_Handler);
4772 SetMenuTitle(menu, "Menu Misje:");
4773 AddMenuItem(menu, "1", "Opis Misji");
4774 AddMenuItem(menu, "2", "Anuluj Misje");
4775 DisplayMenu(menu, client, 250);
4776 }
4777 else
4778 {
4779 new String:misja[512];
4780 new Handle:menu = CreateMenu(WybierzMisje_Handler);
4781 SetMenuTitle(menu, "Wybierz MisjÄ™:");
4782 for(new i = 1; i <sizeof nazwy_misji; i ++)
4783 {
4784 Format(misja, sizeof(misja), "%s", opisy_misji[i]);
4785 AddMenuItem(menu, "3", misja);
4786 }
4787
4788 DisplayMenu(menu, client, 250);
4789 }
4790 }
4791 else
4792 PrintToChat(client, "%s Musisz mieć wybraną klasę aby móc włączyć misję!", PREFIX);
4793}
4794public WybierzMisje_Handler(Handle:classhandle, MenuAction:action, client, Position)
4795{
4796 if(action == MenuAction_Select)
4797 {
4798 new String:Item[32];
4799 GetMenuItem(classhandle, Position, Item, sizeof(Item));
4800 Position++;
4801
4802 if(StrEqual(Item, "1"))
4803 OpisMisji(client);
4804 else if(StrEqual(Item, "2"))
4805 {
4806 misja_gracza[client] = 0;
4807 postep_gracza[client] = 0;
4808 PrintToChat(client, "%s Anulowałeś swoje aktualne zadanie! Wpisz /misja aby rozpocząć.", PREFIX);
4809 }
4810 else if(StrEqual(Item, "3"))
4811 {
4812 misja_gracza[client] = Position;
4813 PrintToChat(client, "%s Wybrałeś zadanie: [%s]. Powodzenia!", PREFIX, opisy_misji[Position]);
4814 }
4815 }
4816 else if(action == MenuAction_End)
4817 CloseHandle(classhandle);
4818}
4819public Action:OpisMisji(client)
4820{
4821 if(klasa_gracza[client])
4822 PrintToChat(client, "%s Postep misji: %i/%i osob - Twoje zadanie: %s.", PREFIX, postep_gracza[client], nazwy_misji[misja_gracza[client]][1], opisy_misji[misja_gracza[client]]);
4823 else
4824 PrintToChat(client, "%s Musisz mieć wybraną klasę aby móc sprawdzić misje!", PREFIX);
4825}
4826public Action:PokazInformacje(Handle:timer, any:client)
4827{
4828 if(!IsValidClient(client))
4829 return;
4830
4831 if(IsPlayerAlive(client))
4832 {
4833 new ile = poziom_gracza[client]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[client]-1]: 0;
4834 new Float:procent_gracza = (float(doswiadczenie_gracza[client]-ile)/float(doswiadczenie_poziomu[poziom_gracza[client]]-ile))*100.0;
4835 PrintHintText(client, "[Klasa: <b>%s</b>]\n[<font color='#FF3333'>Xp: <b>%0.1f</b>/<b>100.0%%</b></font> | <font color='#FF3333'>Lv: <b>%i</b></font>]\n[Item:</font> <b>%s</b> [<b>%i%%</b>]]", nazwy_klas[klasa_gracza[client]], procent_gracza, poziom_gracza[client], nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]);
4836 }
4837 else
4838 {
4839 new spect = GetEntProp(client, Prop_Send, "m_iObserverMode");
4840 if(spect == 4 || spect == 5)
4841 {
4842 new target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
4843 if(target != -1 && IsValidClient(target))
4844 {
4845 new ile = poziom_gracza[target]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[target]-1]: 0;
4846 new Float:procent_gracza = (float(doswiadczenie_gracza[target]-ile)/float(doswiadczenie_poziomu[poziom_gracza[target]]-ile))*100.0;
4847 PrintHintText(client, "[Klasa: <b>%s</b>]\n[<font color='#FF3333'>Xp: <b>%0.1f</b>/<b>100.0%%</b></font> | <font color='#FF3333'>Lv: <b>%i</b></font>]\n[Item:</font> <b>%s</b> [<b>%i%%</b>]]", nazwy_klas[klasa_gracza[target]], procent_gracza, poziom_gracza[target], nazwy_itemow[informacje_itemu_gracza[target][0]], moc_itemu[target]);
4848 }
4849 }
4850 }
4851
4852 hud_task[client] = CreateTimer(REFRESH_HUD, PokazInformacje, client, TIMER_FLAG_NO_MAPCHANGE);
4853}
4854public Action:Wskrzes(Handle:timer, any:client)
4855{
4856 if(!IsValidClient(client))
4857 return;
4858
4859 CS_RespawnPlayer(client);
4860}
4861public Action:WylaczGodmode(Handle:timer, any:client)
4862{
4863 if(!IsValidClient(client))
4864 return Plugin_Continue;
4865
4866 godmode_task[client] = INVALID_HANDLE;
4867 WylaczGodmode_Handler(client);
4868
4869 return Plugin_Continue;
4870}
4871public Action:WylaczGodmode_Handler(client)
4872{
4873 SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 0);
4874 return Plugin_Continue;
4875}
4876public Action:StopGodmode(client)
4877{
4878 if(godmode_task[client] == INVALID_HANDLE)
4879 return Plugin_Continue;
4880
4881 KillTimer(godmode_task[client]);
4882 godmode_task[client] = INVALID_HANDLE;
4883
4884 WylaczGodmode_Handler(client);
4885 return Plugin_Continue;
4886}
4887public Action:TaskZamrozenieGracza(Handle:timer, any:client)
4888{
4889 if(!IsValidClient(client))
4890 return Plugin_Continue;
4891
4892 SetEntityMoveType(client, MOVETYPE_WALK);
4893 return Plugin_Continue;
4894}
4895public bool:IsValidClient(client)
4896{
4897 if(client >= 1 && client <= MaxClients && IsClientInGame(client))
4898 return true;
4899
4900 return false;
4901}
4902public Action:DotykRakiety(ent, client)
4903{
4904 if(!IsValidEntity(ent))
4905 return Plugin_Continue;
4906
4907 new attacker = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity");
4908 if(!IsValidClient(attacker))
4909 {
4910 AcceptEntityInput(ent, "Kill");
4911 return Plugin_Continue;
4912 }
4913 if(IsValidClient(client) && GetClientTeam(attacker) == GetClientTeam(client))
4914 return Plugin_Continue;
4915
4916 new Float:forigin[3], Float:iorigin[3];
4917 GetEntPropVector(ent, Prop_Send, "m_vecOrigin", forigin);
4918 for(new i = 1; i <= MaxClients; i++)
4919 {
4920 if(!IsClientInGame(i) || !IsPlayerAlive(i))
4921 continue;
4922
4923 if(GetClientTeam(attacker) == GetClientTeam(i))
4924 continue;
4925
4926 GetClientEyePosition(i, iorigin);
4927 if(GetVectorDistance(forigin, iorigin) <= 150.0)
4928 ZadajObrazenia(i, attacker, attacker, ((klasa_gracza[i] == Obronca || informacje_itemu_gracza[i][0] == 40)? 0.0: 100.0+(inteligencja_gracza[attacker]*1)+(bonusowa_inteligencja_gracza[attacker])), DMG_GENERIC);
4929 }
4930
4931 EmitSoundToAll("weapons/hegrenade/explode5.wav", ent, SNDCHAN_AUTO, SNDLEVEL_GUNFIRE);
4932 TE_SetupExplosion(forigin, sprite_explosion, 10.0, 1, 0, 100, 100);
4933 TE_SendToAll();
4934
4935 AcceptEntityInput(ent, "Kill");
4936 return Plugin_Continue;
4937}
4938public Action:DotykMiny(ent, client)
4939{
4940 if(!IsValidEntity(ent))
4941 return Plugin_Continue;
4942
4943 new attacker = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity");
4944 if(!IsValidClient(attacker))
4945 {
4946 AcceptEntityInput(ent, "Kill");
4947 return Plugin_Continue;
4948 }
4949 if(!IsValidClient(client) || IsValidClient(client) && GetClientTeam(attacker) == GetClientTeam(client))
4950 return Plugin_Continue;
4951
4952 new Float:forigin[3], Float:iorigin[3];
4953 GetEntPropVector(ent, Prop_Send, "m_vecOrigin", forigin);
4954
4955 for(new i = 1; i <= MaxClients; i++)
4956 {
4957 if(!IsClientInGame(i) || !IsPlayerAlive(i))
4958 continue;
4959
4960 if(GetClientTeam(attacker) == GetClientTeam(i))
4961 continue;
4962
4963 GetClientEyePosition(i, iorigin);
4964 if(GetVectorDistance(forigin, iorigin) <= 150.0)
4965 ZadajObrazenia(i, attacker, attacker, (informacje_itemu_gracza[i][0] == 29)? 0.0: 100.0+(inteligencja_gracza[attacker]*1)+bonusowa_inteligencja_gracza[attacker], DMG_GENERIC);
4966 }
4967
4968 EmitSoundToAll("weapons/hegrenade/explode5.wav", ent, SNDCHAN_AUTO, SNDLEVEL_GUNFIRE);
4969 TE_SetupExplosion(forigin, sprite_explosion, 10.0, 1, 0, 100, 100);
4970 TE_SendToAll();
4971
4972 AcceptEntityInput(ent, "Kill");
4973 return Plugin_Continue;
4974}
4975public Action:DotykNoza(ent, client)
4976{
4977 if(!IsValidEntity(ent))
4978 return Plugin_Continue;
4979
4980 new attacker = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity");
4981 if(!IsValidClient(attacker))
4982 {
4983 AcceptEntityInput(ent, "Kill");
4984 return Plugin_Continue;
4985 }
4986 if(IsValidClient(client))
4987 {
4988 if(GetClientTeam(attacker) == GetClientTeam(client))
4989 return Plugin_Continue;
4990
4991 EmitSoundToAll("physics/metal/sawblade_stick1.wav", ent, SNDCHAN_AUTO, SNDLEVEL_GUNFIRE);
4992 }
4993 else
4994 EmitSoundToAll("physics/metal/sawblade_stick2.wav", ent, SNDCHAN_AUTO, SNDLEVEL_GUNFIRE);
4995
4996 new Float:forigin[3], Float:iorigin[3];
4997 GetEntPropVector(ent, Prop_Send, "m_vecOrigin", forigin);
4998
4999 for(new i = 1; i <= MaxClients; i++)
5000 {
5001 if(!IsClientInGame(i) || !IsPlayerAlive(i))
5002 continue;
5003
5004 if(GetClientTeam(attacker) == GetClientTeam(i))
5005 continue;
5006
5007 GetClientEyePosition(i, iorigin);
5008 if(GetVectorDistance(forigin, iorigin) <= 100.0)
5009 ZadajObrazenia(i, attacker, attacker, (informacje_itemu_gracza[i][0] == 29)? 0.0: 50.0+inteligencja_gracza[attacker]+bonusowa_inteligencja_gracza[attacker], DMG_GENERIC);
5010 }
5011
5012 TE_SetupMetalSparks(forigin, NULL_VECTOR);
5013 TE_SendToAll();
5014
5015 AcceptEntityInput(ent, "Kill");
5016 return Plugin_Continue;
5017}
5018public Action:ObrazeniaDzialka(ent, &attacker, &inflictor, &Float:damage, &damagetype)
5019{
5020 if (!IsValidEntity(ent) || !IsValidClient(attacker))
5021 return Plugin_Continue;
5022
5023 new owner = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity");
5024 if (!IsValidClient(owner))
5025 {
5026 AcceptEntityInput(ent, "Kill");
5027 return Plugin_Continue;
5028 }
5029
5030 new String:sound[128];
5031 if (GetClientTeam(attacker) == GetClientTeam(owner))
5032 {
5033 new String:weapon[32];
5034 GetClientWeapon(attacker, weapon, sizeof(weapon));
5035 if(StrContains(weapon, nazwy_broni[40]) != -1 && damagetype & (DMG_SLASH|DMG_BULLET))
5036 {
5037 if (procent_dziala[owner] >= 100)
5038 {
5039 if (dzialo_gracza[owner][1] == -1)
5040 StartDzialo(ent, owner);
5041 }
5042 else
5043 {
5044 Format(sound, sizeof(sound), "physics/metal/metal_box_impact_hard%i.wav", GetRandomInt(1, 3));
5045 EmitSoundToAll(sound, ent);
5046
5047 procent_dziala[owner] += 4;
5048 PrintHintText(attacker, "[Zbudowano %i%]", procent_dziala[owner]);
5049 }
5050 }
5051
5052 return Plugin_Handled;
5053 }
5054
5055 Format(sound, sizeof(sound), "physics/metal/metal_box_impact_bullet%i.wav", GetRandomInt(1, 3));
5056 EmitSoundToAll(sound, ent);
5057 if (damage > float(GetEntProp(ent, Prop_Data, "m_iHealth")))
5058 StopDzialo(owner, 0);
5059
5060 return Plugin_Continue;
5061}
5062public Action:StartDzialo(ent, client)
5063{
5064 dzialo_gracza[client][1] = CreateEntityByName("hegrenade_projectile");
5065 if(dzialo_gracza[client][1] != -1)
5066 {
5067 new Float:forigin[3];
5068 GetEntPropVector(ent, Prop_Send, "m_vecOrigin", forigin);
5069 forigin[2] += 40.0;
5070
5071 new Float:iangles[3];
5072 GetEntPropVector(ent, Prop_Data, "m_angRotation", iangles);
5073
5074 DispatchSpawn(dzialo_gracza[client][1]);
5075 ActivateEntity(dzialo_gracza[client][1]);
5076 SetEntityModel(dzialo_gracza[client][1], "models/weapons/w_mach_m249.mdl");
5077 SetEntityMoveType(dzialo_gracza[client][1], MOVETYPE_FLY);
5078 TeleportEntity(dzialo_gracza[client][1], forigin, iangles, NULL_VECTOR);
5079 SetEntProp(dzialo_gracza[client][1], Prop_Data, "m_takedamage", 2);
5080 SetEntProp(dzialo_gracza[client][1], Prop_Data, "m_iHealth", 200+(inteligencja_gracza[client]+bonusowa_inteligencja_gracza[client]));
5081 SetEntProp(dzialo_gracza[client][1], Prop_Send, "m_usSolidFlags", 12);
5082 SetEntProp(dzialo_gracza[client][1], Prop_Data, "m_nSolidType", 6);
5083 SetEntProp(dzialo_gracza[client][1], Prop_Send, "m_CollisionGroup", 1);
5084 SetEntPropEnt(dzialo_gracza[client][1], Prop_Send, "m_hOwnerEntity", client);
5085 SDKHook(dzialo_gracza[client][1], SDKHook_OnTakeDamage, TakeDamage);
5086
5087 CreateTimer(2.5, ThinkGun, EntIndexToEntRef(dzialo_gracza[client][1]), TIMER_FLAG_NO_MAPCHANGE);
5088 EmitSoundToAll("vehicles/apc_stop_then_idle_loop.wav", dzialo_gracza[client][1]);
5089 }
5090
5091 return Plugin_Continue;
5092}
5093public Action:StopDzialo(client, reset)
5094{
5095 if (dzialo_gracza[client][0] > 0 && IsValidEntity(dzialo_gracza[client][0]))
5096 AcceptEntityInput(dzialo_gracza[client][0], "Kill");
5097
5098 if (dzialo_gracza[client][1] > 0 && IsValidEntity(dzialo_gracza[client][1]))
5099 AcceptEntityInput(dzialo_gracza[client][1], "Kill");
5100
5101 dzialo_gracza[client][0] = reset? -1: 0;
5102 dzialo_gracza[client][1] = reset? -1: 0;
5103
5104 return Plugin_Continue;
5105}
5106public Action:ThinkGun(Handle:timer, any:ref)
5107{
5108 new ent = EntRefToEntIndex(ref);
5109 if (ent == -1 || !IsValidEntity(ent))
5110 return Plugin_Continue;
5111
5112 new client = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity");
5113 if (!IsValidClient(client) || !IsValidEntity(dzialo_gracza[client][0]))
5114 {
5115 AcceptEntityInput(ent, "Kill");
5116 return Plugin_Continue;
5117 }
5118
5119 new Float:forigin[3];
5120 GetEntPropVector(ent, Prop_Send, "m_vecOrigin", forigin);
5121 new target = sentry_find_player(client, ent, forigin);
5122 if (target)
5123 {
5124 new Float:iorigin[3];
5125 GetClientEyePosition(target, iorigin);
5126
5127 new Float:iangles[3];
5128 GetEntPropVector(ent, Prop_Data, "m_angRotation", iangles);
5129
5130 new Float:x = iorigin[0] - forigin[0];
5131 new Float:z = iorigin[1] - forigin[1];
5132 new Float:radians = ArcTangent(z / x);
5133 iangles[1] = radians * 180.0 / 3.14159;
5134 if (iorigin[0] < forigin[0])
5135 iangles[1] -= 180.0;
5136
5137 TeleportEntity(ent, NULL_VECTOR, iangles, NULL_VECTOR);
5138
5139 new Float:Obrazenia_dzialka_int;
5140 if(informacje_itemu_gracza[target][0] != 29)
5141 {
5142 Obrazenia_dzialka_int = ((inteligencja_gracza[client] * 0.1)+5);
5143 ZadajObrazenia(target, client, client, Obrazenia_dzialka_int, DMG_GENERIC);
5144 }
5145 forigin[2] += 40.0;
5146 iorigin[0] += GetRandomFloat(-16.0, 16.0);
5147 iorigin[1] += GetRandomFloat(-16.0, 16.0);
5148 iorigin[2] += GetRandomFloat(-16.0, 16.0);
5149
5150 new Float:fdistance = GetVectorDistance(forigin, iorigin, false);
5151 new Float:fpercent = 0.4 / fdistance / 100.0;
5152
5153 new Float:fdifference[3];
5154 fdifference[0] = forigin[0] + iorigin[0] - forigin[0] * fpercent;
5155 fdifference[1] = forigin[1] + iorigin[1] - forigin[1] * fpercent - 0.08;
5156 fdifference[2] = forigin[2] + iorigin[2] - forigin[2] * fpercent;
5157
5158 StworzSprite(fdifference, iorigin, 2500.0);
5159 EmitSoundToAll("weapons/m249/m249-1.wav", ent);
5160 }
5161
5162 CreateTimer(0.4, ThinkGun, EntIndexToEntRef(ent), TIMER_FLAG_NO_MAPCHANGE);
5163 return Plugin_Continue;
5164}
5165public Action:StworzSprite(Float:origin[3], Float:dest[3], Float:speed)
5166{
5167 new ent = CreateEntityByName("env_spritetrail");
5168 if (ent != -1)
5169 {
5170 DispatchKeyValue(ent, "classname", "bullet_trace");
5171 DispatchKeyValue(ent, "spritename", "materials/sprites/laserbeam.vmt");
5172 DispatchKeyValue(ent, "renderamt", "255");
5173 DispatchKeyValue(ent, "rendercolor", "255 255 255");
5174 DispatchKeyValue(ent, "rendermode", "5");
5175 DispatchKeyValueFloat(ent, "startwidth", 5.0);
5176 DispatchKeyValueFloat(ent, "endwidth", 2.0);
5177 DispatchKeyValueFloat(ent, "lifetime", 240.0 / speed);
5178 DispatchSpawn(ent);
5179 SetEntPropFloat(ent, Prop_Send, "m_flTextureRes", 0.05, 0);
5180
5181 new Float:vecVeloc[3];
5182 MakeVectorFromPoints(origin, dest, vecVeloc);
5183
5184 new Float:angRotation[3];
5185 GetVectorAngles(vecVeloc, angRotation);
5186 NormalizeVector(vecVeloc, vecVeloc);
5187 ScaleVector(vecVeloc, speed);
5188 TeleportEntity(ent, origin, angRotation, vecVeloc);
5189
5190 new String:tmp[128];
5191 FormatEx(tmp, sizeof(tmp), "OnUser1 !self:kill::%f:-1", GetVectorDistance(origin, dest, false) / speed);
5192 SetVariantString(tmp);
5193
5194 AcceptEntityInput(ent, "AddOutput");
5195 AcceptEntityInput(ent, "FireUser1");
5196 }
5197
5198 return Plugin_Continue;
5199}
5200public sentry_find_player(client, ent, Float:forigin[3])
5201{
5202 new Float:iorigin[3], Float:idistance, Float:fdistance = 5000.0;
5203 new target, hit;
5204
5205 for(new i = 1; i <= MaxClients; i ++)
5206 {
5207 if (!IsClientInGame(i) || !IsPlayerAlive(i))
5208 continue;
5209
5210 if (GetClientTeam(client) == GetClientTeam(i))
5211 continue;
5212
5213 GetClientAbsOrigin(i, iorigin);
5214 new Handle:trace = TR_TraceRayFilterEx(forigin, iorigin, 24705, RayType_EndPoint, TraceEntityFilterPlayer, ent);
5215 if (TR_DidHit(trace))
5216 hit = TR_GetEntityIndex(trace);
5217
5218 CloseHandle(trace);
5219 if (i == hit)
5220 {
5221 idistance = GetVectorDistance(forigin, iorigin, false);
5222 if (fdistance > idistance)
5223 {
5224 fdistance = idistance;
5225 target = i;
5226 }
5227 }
5228 }
5229
5230 return target;
5231}
5232public bool:TraceEntityFilterPlayer(ent, contents, any:data)
5233{
5234 return ent != data;
5235}
5236public bool:TraceRayFilter(ent, contents)
5237{
5238 return false;
5239}
5240public ZadajObrazenia(client, ent, attacker, Float:damage, dmgtype)
5241{
5242 new Handle:data = CreateDataPack();
5243 WritePackCell(data, client);
5244 WritePackCell(data, ent);
5245 WritePackCell(data, attacker);
5246 WritePackFloat(data, damage);
5247 WritePackCell(data, dmgtype);
5248
5249 CreateTimer(0.1, ZadajObrazenia_Handler, data, TIMER_FLAG_NO_MAPCHANGE);
5250 return -1;
5251}
5252public Action:ZadajObrazenia_Handler(Handle:timer, Handle:data)
5253{
5254 ResetPack(data);
5255 new client = ReadPackCell(data);
5256 new ent = ReadPackCell(data);
5257 new attacker = ReadPackCell(data);
5258 new Float:damage = ReadPackFloat(data);
5259 new dmgtype = ReadPackCell(data);
5260 CloseHandle(data);
5261
5262 if(IsValidClient(client) && IsPlayerAlive(client) && IsValidClient(attacker))
5263 SDKHooks_TakeDamage(client, ent, attacker, damage, dmgtype);
5264
5265 return Plugin_Continue;
5266}
5267public Action:NowaRundax(Handle:event, const String:name[], bool:dontbroadcast)
5268{
5269 blokada = false;
5270}
5271public Action:KoniecRundyx(Handle:event, const String:name[], bool:dontbroadcast)
5272{
5273 blokada = true;
5274}
5275public Action:RankSerwera(client)
5276{
5277 if(klasa_gracza[client])
5278 {
5279 new String:tmp[512];
5280 new String:authid[64];
5281 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
5282 return;
5283
5284 Format(tmp, sizeof(tmp), "SELECT count(xp) FROM codmod WHERE xp >= (SELECT xp FROM codmod WHERE steamid = '%s' AND klasa = '%s') ORDER BY xp;", authid, nazwy_klas[klasa_gracza[client]]);
5285 new Handle:query = SQL_Query(sql, tmp);
5286
5287 new pozycja;
5288 if(query == INVALID_HANDLE)
5289 {
5290 SQL_GetError(sql, dbError, sizeof(dbError));
5291 PrintToServer("Failed to INSERT query (error: %s)", dbError);
5292 return;
5293 }
5294 if(SQL_FetchRow(query))
5295 pozycja = SQL_FetchInt(query, 0);
5296
5297 PrintToChat(client, "%s Twoja pozycja w CodRanku: %i miejsce - Wymagane: %i doswiadczenie do nastepnego poziomu.", PREFIX, pozycja, doswiadczenie_poziomu[poziom_gracza[client]]-doswiadczenie_gracza[client]);
5298 CloseHandle(query);
5299 }
5300 else
5301 PrintToChat(client, "%s Musisz miec wybrana klase aby moc sprawdzic rank!", PREFIX);
5302}
5303public Action:Top15Serwera(client)
5304{
5305 PrintToConsole(client, top_string);
5306 PrintToChat(client, "%s Lista CodTop15 Serwera zostala wyswietlona w twojej konsoli.", PREFIX);
5307}
5308public Action:WczytajTopke()
5309{
5310 new String:tmp[512];
5311 Format(tmp, sizeof(tmp), "SELECT lvl, xp, klasa, steamid FROM codmod ORDER BY xp DESC LIMIT 15;");
5312 new Handle:query = SQL_Query(sql, tmp);
5313
5314 if(query == INVALID_HANDLE)
5315 {
5316 SQL_GetError(sql, dbError, sizeof(dbError));
5317 PrintToServer("Failed to readClassFromDB query (error: %s)", dbError);
5318 return;
5319 }
5320
5321 new String:klasa[512];
5322 new String:authid[64];
5323 new poziom;
5324 new doswiadczenie;
5325 new len = Format(top_string, sizeof(top_string), "Lista CodTop15 Serwera:\nMiejsce | Steam | Klasa | Poziom | Doswiadczenie");
5326 for(new i = 1; SQL_FetchRow(query); i ++)
5327 {
5328 poziom = SQL_FetchInt(query, 0);
5329 doswiadczenie = SQL_FetchInt(query, 1);
5330 SQL_FetchString(query, 2, klasa, sizeof(klasa))
5331 SQL_FetchString(query, 3, authid, sizeof(authid))
5332 len += Format(top_string[len], sizeof(top_string) - len, "\n%i. %s - %s - %i - %i", i, authid, klasa, poziom, doswiadczenie);
5333 }
5334
5335 CloseHandle(query);
5336}
5337
5338public Action:RespienieTT(client)
5339{
5340 if(IsValidClient(dead_t))
5341 {
5342 new Float: pos[3];
5343 CS_RespawnPlayer(dead_t);
5344 PrintToChat(client, "%s Ożywiłeś swojego kompana!", PREFIX);
5345 PrintToChat(dead_t, "%s Zostałeś ożywiony przez medyka!", PREFIX);
5346 pos = SAVELOC[client];
5347 TeleportEntity(dead_t, pos, NULL_VECTOR, ResetVector);
5348 TE_SetupExplosion(pos, sprite_explosion, 40.0, 1, 0, 400, 1000);
5349 TE_SendToAll();
5350 }
5351}
5352public Action:RespienieCT(client)
5353{
5354 if(IsValidClient(dead_ct))
5355 {
5356 new Float: pos[3];
5357 CS_RespawnPlayer(dead_ct);
5358 PrintToChat(client, "%s Ożywiłeś swojego kompana!", PREFIX);
5359 PrintToChat(dead_ct, "%s Zostałeś ożywiony przez medyka!", PREFIX);
5360 pos = SAVELOC[client];
5361 TeleportEntity(dead_ct, pos, NULL_VECTOR, ResetVector);
5362 TE_SetupExplosion(pos, sprite_explosion, 40.0, 1, 0, 400, 1000);
5363 TE_SendToAll();
5364 }
5365}
5366
5367public Action:Zatrucie(client)
5368{
5369 if (IsClientInGame(client) && IsPlayerAlive(client) && IsValidClient(client))
5370 zatrucie_handler[zatruty] = CreateTimer(1.0, ZatrucieHandler, client, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
5371}
5372public Action:Zatrucie2(client)
5373{
5374 if (IsClientInGame(client) && IsPlayerAlive(client) && IsValidClient(client))
5375 zatrucie_handler2[zatruty2] = CreateTimer(1.0, ZatrucieHandler2, client, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
5376}
5377
5378stock ClearTimer(&Handle:timer)
5379{
5380 if (timer != INVALID_HANDLE)
5381 {
5382 KillTimer(timer);
5383 timer = INVALID_HANDLE;
5384 }
5385}
5386public Action:ZatrucieHandler(Handle:timer, any client)
5387{
5388 if ((IsClientInGame(zatruty) || IsClientInGame(client)) && IsPlayerAlive(zatruty) && IsValidClient(zatruty) && !freezetime)
5389 ZadajObrazenia(zatruty, client, client, 3.0, DMG_GENERIC);
5390 else
5391 {
5392 ClearTimer(zatrucie_handler[zatruty]);
5393 return Plugin_Stop;
5394 }
5395 return Plugin_Continue;
5396}
5397public Action:ZatrucieHandler2(Handle:timer, any client)
5398{
5399 if ((IsClientInGame(zatruty2) || IsClientInGame(client)) && IsPlayerAlive(zatruty2) && IsValidClient(zatruty2) && !freezetime)
5400 ZadajObrazenia(zatruty2, client, client, 3.0, DMG_GENERIC);
5401 else
5402 {
5403 ClearTimer(zatrucie_handler2[zatruty2]);
5404 return Plugin_Stop;
5405 }
5406 return Plugin_Continue;
5407}
5408stock void ScreenEffect(int client, int duration, int hold_time, int flag, int red, int green, int blue, int alpha)
5409{
5410 Handle hFade = INVALID_HANDLE;
5411
5412 if(client)
5413 {
5414 hFade = StartMessageOne("Fade", client);
5415 }
5416 else
5417 {
5418 hFade = StartMessageAll("Fade");
5419 }
5420
5421 if(hFade != INVALID_HANDLE)
5422 {
5423 if(GetUserMessageType() == UM_Protobuf)
5424 {
5425 int clr[4];
5426 clr[0]=red;
5427 clr[1]=green;
5428 clr[2]=blue;
5429 clr[3]=alpha;
5430 PbSetInt(hFade, "duration", duration);
5431 PbSetInt(hFade, "hold_time", hold_time);
5432 PbSetInt(hFade, "flags", flag);
5433 PbSetColor(hFade, "clr", clr);
5434 }
5435 EndMessage();
5436 }
5437}
5438
5439
5440public void OnGameFrame()
5441{
5442 //This is to make the player run smoothly off the ground, csgo make u stick to the ground unless u get high enough force of the ground
5443 for (int i = 1; i <= MaxClients; i++)
5444 {
5445 if(IsValidClient(i))
5446 {
5447 int victim = GetClientOfUserId(g_iHooked[i]);
5448 if (IsValidClient(victim))
5449 SetEntPropEnt(victim, Prop_Data, "m_hGroundEntity", -1);
5450 }
5451 }
5452}
5453
5454public Action Timer_Hook(Handle timer, any data)
5455{
5456 int hooker = GetClientOfUserId(data);
5457 int victim = GetClientOfUserId(g_iHooked[hooker]);
5458
5459 if (!IsValidClient(victim) || !IsPlayerAlive(victim) || !IsValidClient(hooker) || !IsPlayerAlive(hooker))
5460 {
5461 ScorpionHookOff(hooker);
5462 g_hTimerHook[hooker] = INVALID_HANDLE;
5463 g_CzasDostalHarpunem[victim] = 0;
5464 return Plugin_Stop;
5465 }
5466
5467 float victimVel[3];
5468 float hookerPos[3], victimPos[3], eyePos[3];
5469
5470 GetClientAbsOrigin(victim, victimPos);
5471 GetClientAbsOrigin(hooker, hookerPos);
5472 GetClientEyePosition(victim, eyePos);
5473 eyePos[2] -= 40.0;
5474
5475 int color[4] = {255, 0, 0, 255};
5476
5477 float x = GetRandomFloat(-1.0, 1.0);
5478
5479 float dir[3];
5480 dir[0] = x;
5481 dir[1] = x;
5482 dir[2] = x;
5483 TE_SetupBloodSprite(eyePos, dir, color, 500, g_iSprite, g_iSprite);
5484 TE_SendToAll();
5485
5486 float distance = GetVectorDistance(hookerPos, victimPos);
5487
5488 if ( distance > 5 )
5489 {
5490 float fl_Time = distance / 1000.0;
5491
5492 victimVel[0] = (hookerPos[0] - victimPos[0]) / fl_Time;
5493 victimVel[1] = (hookerPos[1] - victimPos[1]) / fl_Time;
5494 victimVel[2] = (hookerPos[2] - victimPos[2]) / fl_Time;
5495 }
5496 else
5497 {
5498 victimVel[0] = 0.0;
5499 victimVel[1] = 0.0;
5500 victimVel[2] = 0.0;
5501 }
5502 new Float:forigin[3], Float:iorigin[3];
5503 GetClientEyePosition(hooker, forigin);
5504 GetClientEyePosition(victim, iorigin);
5505
5506 if(GetVectorDistance(forigin, iorigin) >= 100.0)
5507 {
5508 new Float:szybkosc_przyciagania_hakiem = 3.0;
5509 ScaleVector(victimVel, szybkosc_przyciagania_hakiem);
5510 TeleportEntity(victim, NULL_VECTOR, NULL_VECTOR, victimVel);
5511 return Plugin_Continue;
5512 }
5513 else
5514 {
5515 ScorpionHookOff(hooker);
5516 g_CzasDostalHarpunem[victim] = GetTime()+3;
5517 }
5518
5519 return Plugin_Continue;
5520}
5521stock void CreateHookBeam(int client, int victim)
5522{
5523 //BEAM
5524 int beam = CreateEntityByName("env_beam");
5525
5526 char color[16];
5527 Format(color, sizeof(color), "255 255 25 255");
5528
5529 SetEntityModel(beam, MODEL_BEAM); // This is where you would put the texture, ie "sprites/laser.vmt" or whatever.
5530 DispatchKeyValue(beam, "rendercolor", color );
5531 DispatchKeyValue(beam, "renderamt", "200");
5532 DispatchKeyValue(beam, "decalname", "Bigshot");
5533 DispatchKeyValue(beam, "life", "0");
5534 DispatchKeyValue(beam, "TouchType", "0");
5535 DispatchSpawn(beam);
5536
5537 SetEntPropEnt(beam, Prop_Send, "m_hAttachEntity", client);
5538 SetEntPropEnt(beam, Prop_Send, "m_hAttachEntity", victim, 1);
5539 SetEntProp(beam, Prop_Send, "m_nNumBeamEnts", 2);
5540 SetEntProp(beam, Prop_Send, "m_nBeamType", 2);
5541
5542 SetEntPropFloat(beam, Prop_Data, "m_fWidth", 5.0);
5543 SetEntPropFloat(beam, Prop_Data, "m_fEndWidth", 5.0);
5544 ActivateEntity(beam);
5545 AcceptEntityInput(beam, "TurnOn");
5546
5547 g_iHook[client] = EntIndexToEntRef(beam);
5548}
5549public void ScorpionHookOff(int client)
5550{
5551 g_bHooked[client] = false;
5552 int hook = EntRefToEntIndex(g_iHook[client]);
5553 if(hook != INVALID_ENT_REFERENCE)
5554 AcceptEntityInput(hook, "Kill");
5555 g_iHook[client] = INVALID_ENT_REFERENCE;
5556
5557 int prop = EntRefToEntIndex(g_iHookProp[client]);
5558 if(prop != INVALID_ENT_REFERENCE)
5559 AcceptEntityInput(prop, "Kill");
5560 g_iHookProp[client] = INVALID_ENT_REFERENCE;
5561 g_iHooked[client] = INVALID_ENT_REFERENCE;
5562}
5563
5564public bool TraceFilterNotSelf(int entityhit, int mask, any entity)
5565{
5566 if(entity == 0 && entityhit != entity)
5567 return true;
5568
5569 return false;
5570}
5571
5572stock void ScorpionHookOn(int client)
5573{
5574 int target = GetClientAimTarget(client, true);
5575
5576 if (IsValidClient(target))
5577 {
5578 if(!IsPlayerAlive(target))
5579 return;
5580
5581 if(GetClientTeam(client) == GetClientTeam(target))
5582 return;
5583
5584 if(informacje_itemu_gracza[target][0] == 29)
5585 return;
5586
5587
5588 float pos[3], victimPos[3];
5589 GetClientEyePosition(target, victimPos);
5590 GetClientEyePosition(client, pos);
5591
5592 EmitSoundToAllAny(HOOK_SOUND, client);
5593 CreateHookBeam(client, target);
5594 g_iHooked[client] = GetClientUserId(target);
5595 g_bHooked[client] = true;
5596 ilosc_hakow_skorpiona[client]--;
5597 g_CzasDostalHarpunem[target] = GetTime()+100;
5598
5599 g_hTimerHook[client] = CreateTimer(HOOK_REFRESH_TIME, Timer_Hook, GetClientUserId(client), TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
5600 }
5601 else
5602 {
5603 PrintToChat(client, "%s Nie trafiłeś harpunem!", PREFIX);
5604 }
5605}
5606public UzycieTarczyGrawitacyjnej(client)
5607{
5608 g_iCzasTarczy[client] = GetTime()+30;
5609 grawitacja_timer_handler[client] = CreateTimer(0.1, GrawitacjaHandler, client, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
5610}
5611public Action:GrawitacjaHandler(Handle:timer, any client)
5612{
5613 if(!IsClientInGame(client) || !IsPlayerAlive(client) || (g_iCzasTarczy[client]<GetTime()))
5614 {
5615 ClearTimer(grawitacja_timer_handler[client]);
5616 return Plugin_Continue;
5617 }
5618
5619 new Float:forigin[3], Float:iorigin[3];
5620 GetClientEyePosition(client, forigin);
5621
5622 for(new i = 1; i <= MaxClients; i++)
5623 {
5624 if(!IsClientInGame(i) || !IsPlayerAlive(i))
5625 continue;
5626
5627 if(GetClientTeam(client) == GetClientTeam(i))
5628 continue;
5629
5630 if(informacje_itemu_gracza[i][0] == 29)
5631 continue;
5632
5633 if(g_iCzasTarczy[client]>=GetTime() || !IsPlayerAlive(client))
5634 {
5635 if(GetEntityGravity(i) != 1.0)
5636 SetEntityGravity(i, 1.0);
5637 }
5638 GetClientEyePosition(i, iorigin);
5639 if(GetVectorDistance(forigin, iorigin) <= 450.0)
5640 {
5641 if(GetEntityGravity(i) != 5.0)
5642 SetEntityGravity(i, 5.0);
5643 }
5644 else
5645 {
5646 if(GetEntityGravity(i) != 1.0)
5647 SetEntityGravity(i, 1.0);
5648 }
5649 }
5650 return Plugin_Continue;
5651}
5652public Action:ThunderStorm(client)
5653{
5654 if(!ma_ladunek_piorun[client])
5655 PrintToChat(client, "%s Nie posiadasz ładunku! Zabij kogoś!", PREFIX);
5656 else
5657 {
5658 int target = GetClientAimTarget(client, true);
5659
5660 if (IsValidClient(target))
5661 {
5662 if(!IsPlayerAlive(target))
5663 return;
5664
5665 if(GetClientTeam(client) == GetClientTeam(target))
5666 return;
5667
5668 if(klasa_gracza[target] == Obronca || informacje_itemu_gracza[target][0] == 30)
5669 return;
5670
5671 new Float:ObrazeniaPiorun;
5672 ObrazeniaPiorun = PodstawaObrazeniaPiorun+((inteligencja_gracza[client]+bonusowa_inteligencja_gracza[client])*MnoznikInteligencjiPiorun);
5673 float pos[3], victimPos[3];
5674 GetClientEyePosition(target, victimPos);
5675 GetClientEyePosition(client, pos);
5676 ma_ladunek_piorun[client] = false;
5677 TE_SetupBeamPoints(pos, victimPos, sprite_laser, 0, 0, 0, 1.0, 1.0, 70.0, 0, 25.0, {225, 225, 255, 255}, 3);
5678 TE_SendToAll();
5679 g_CooldownNaPiorun[client] = GetTime()+1;
5680 ZadajObrazenia(target, client, client, ObrazeniaPiorun, DMG_GENERIC);
5681 }
5682 }
5683}