· 8 years ago · Mar 17, 2018, 05:18 PM
1#include <sourcemod>
2#include <sdkhooks>
3#include <sdktools>
4#include <cstrike>
5#include <colors>
6
7#define VIP_FLAG ADMFLAG_CUSTOM6 // konto vip
8#define PREMIUM ADMFLAG_CUSTOM1 // konto premium
9#define MAX_PLAYERS 32 // maksymalna ilosc graczy na serwerze
10#define MAX_CLASS 32 // maksymalna ilosc klas na serwerze
11
12enum
13{
14 Brak,
15 Snajper,
16 Komandos,
17 Obronca,
18 Medyk,
19 WsparcieOgniowe,
20 Saper,
21 Rusher,
22 Kangur,
23 Admiral,
24 Rebeliant,
25 Szturmowiec,
26 LekkiZolnierz,
27 Ninja,
28 Reworwelowiec,
29 Ash,
30 Buck,
31 Hibana,
32
33 //Klasy Premium
34 Inzynier,
35 Zabojca,
36 Major,
37 Szeryf,
38 Pestkowiec,
39 Castle,
40 Twitch,
41 Echo,
42
43 //Klasy VIP
44 Partyzant,
45 Szturmowiec_vip,
46 Ninja_vip,
47 Medyk_vip,
48 Admiral_vip,
49
50 Szpieg
51};
52
53new limit_poziomu = 301;
54new limit_inteligencji = 100;
55new limit_zdrowia = 100;
56new limit_obrazen = 100;
57new limit_wytrzymalosci = 100;
58new limit_kondycji = 100;
59new co_ile_lv_punkt = 1;
60new ile_rozdawac[] = {1, 10, -1};
61
62new xp_kill = 40;
63new xp_kill_hs = 15;
64new xp_winround = 50;
65new xp_objectives = 25;
66new xp_asysta = 10;
67
68new xp_kill_vip = 50;
69new xp_kill_hs_vip = 25;
70new xp_winround_vip = 60;
71new xp_objectives_vip = 35;
72new xp_asysta_vip = 15;
73
74bool wymiana[MAXPLAYERS+1] = false;
75
76new co_ile_zapisywac = 1; // co ile sekund nadpisywac dane graczowi (tylko gdy zdobyl/stracil poziom/doswiadczenie lub rozdal/zresetowal statystyki)
77
78new Handle:sql, Handle:sql_task[MAX_PLAYERS+1];
79new String:dbError[512], String:nazwa_gracza[MAX_PLAYERS+1][MAX_CLASS+1], poziom_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1], doswiadczenie_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1], inteligencja_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1], zdrowie_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1], obrazenia_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1], wytrzymalosc_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1], kondycja_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1];
80new String:top_string[1024];
81
82new ilosc_rakiet_gracza[MAX_PLAYERS+1];
83new vip_gracza[MAX_PLAYERS+1], szybkosc_rozdania[MAX_PLAYERS+1], punkty_gracza[MAX_PLAYERS+1], inteligencja_gracza[MAX_PLAYERS+1], maksymalna_inteligencja_gracza[MAX_PLAYERS+1], maksymalne_zdrowie_gracza[MAX_PLAYERS+1], Float:maksymalne_obrazenia_gracza[MAX_PLAYERS+1], Float:maksymalna_wytrzymalosc_gracza[MAX_PLAYERS+1], Float:maksymalna_kondycja_gracza[MAX_PLAYERS+1], zdrowie_gracza[MAX_PLAYERS+1], obrazenia_gracza[MAX_PLAYERS+1], wytrzymalosc_gracza[MAX_PLAYERS+1], kondycja_gracza[MAX_PLAYERS+1],
84bonusowa_inteligencja_gracza[MAX_PLAYERS+1], bonusowe_zdrowie_gracza[MAX_PLAYERS+1], bonusowe_obrazenia_gracza[MAX_PLAYERS+1], bonusowa_wytrzymalosc_gracza[MAX_PLAYERS+1], bonusowa_kondycja_gracza[MAX_PLAYERS+1];
85new ilosc_apteczek_gracza[MAX_PLAYERS+1], czas_skokow_gracza[MAX_PLAYERS+1];
86new ilosc_dynamitow_gracza[MAX_PLAYERS+1];
87
88new polaczony_raz[MAX_PLAYERS+1], zapisz_dane[MAX_PLAYERS+1], nowa_klasa_gracza[MAX_PLAYERS+1], klasa_gracza[MAX_PLAYERS+1], poziom_gracza[MAX_PLAYERS+1], doswiadczenie_gracza[MAX_PLAYERS+1], moc_itemu[MAX_PLAYERS+1], headshot[MAX_PLAYERS+1], tulow[MAX_PLAYERS+1], oldbuttons1[MAX_PLAYERS+1], oldbuttons2[MAX_PLAYERS+1];
89new sprite_blue, sprite_laser, sprite_halo, oslepiajacy_gracz, freeze_time;
90
91new String:dzwieki_serwera[][] =
92{
93 "", // 0
94 "cod/levelup.mp3", // 1
95 "cod/headshot.mp3", // 2
96 "cod/headshot2.mp3", // 3
97 "cod/lebshot.mp3", // 4
98 "cod/headhunter.mp3" // 5
99};
100new misja_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1], zabicia_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1], misja_gracza[MAX_PLAYERS+1], zabicia_gracza[MAX_PLAYERS+1];
101new nazwy_misji[][] =
102{ // Lvl // Zabicia // Kogo // Nagroda
103 {0, 0, 0, 0}, // 0
104 {5, 30, Brak, 500}, // 1
105 {10, 40, Obronca, 1200}, // 2
106 {10, 60, Medyk, 1400}, // 3
107 {30, 30, Komandos, 1500}, // 4
108 {30, 60, Saper, 1500}, // 5
109 {60, 75, Rusher, 2500}, // 6
110 {60, 60, Kangur, 3000}, // 7
111 {100, 100, Admiral, 6000}, // 8
112 {5, 5, 4, 300}, // 15
113 {5, 7, 5, 400}, // 16
114 {5, 10, 6, 450}, // 17
115 {5, 15, 7, 600}, // 18
116 {5, 20, 8, 750}, // 19
117 {5, 30, 9, 900}, // 20
118};
119new String:opisy_misji[][] =
120{
121 "Brak. Wpisz /misja aby rozpoczac", // 0
122 "Zabij 30 graczy bez klasy - 500 Dosw.", // 1
123 "Zabij 40 Obroncow - 1200 Dosw.", // 2
124 "Zabij 60 Medykow - 1400 Dosw.", // 3
125 "Zabij 30 Komandosow - 1500 Dosw.", // 4
126 "Zabij 60 Saperow - 1500 Dosw.", // 5
127 "Zabij 75 Rasherow - 2500 Dosw.", // 6
128 "Zabij 60 Kangorów - 3000 Dosw.", // 7
129 "Zabij 100 Admiralow - 6000 Dosw.", // 8
130 "Zabij 5 osob z Apteczka - 300 Dosw.", // 15
131 "Zabij 7 osob z Adrenalina - 400 Dosw.", // 16
132 "Zabij 10 osob z Regeneratorem - 450 Dosw.", // 17
133 "Zabij 15 osob z Morfina - 600 Dosw.", // 18
134 "Zabij 20 osob z Ksiega Expa. - 750 Dosw.", // 19
135 "Zabij 30 osob z Portfel Turysty - 900 Dosw.", // 20
136};
137new String:modele_serwera[][] =
138{
139 "", // 0
140 "models/player/ctm_fbi.mdl", // 1
141 "models/player/ctm_gign.mdl", // 2
142 "models/player/ctm_gsg9.mdl", // 3
143 "models/player/ctm_sas.mdl", // 4
144 "models/player/ctm_st6.mdl", // 5
145 "models/player/tm_anarchist.mdl", // 6
146 "models/player/tm_phoenix.mdl", // 7
147 "models/player/tm_pirate.mdl", // 8
148 "models/player/tm_balkan_variantA.mdl", // 9
149 "models/player/tm_leet_variantA.mdl", // 10
150 "models/props/de_vertigo/construction_safetyribbon_01.mdl", // 11
151 "models/player/custom_player/legacy/ctm_gsg9_variantD.mdl", // 12
152 "models/player/custom_player/legacy/tm_phoenix_variantD.mdl" // 13
153};
154new informacje_itemu_gracza[MAX_PLAYERS+1][2];
155new String:nazwy_itemow[][] =
156{
157 "Brak", // 0
158 "Wytrenowany Weteran", // 1
159 "Wytrenowany Rekrut", // 2
160 "Wyszkolenie Wojenne", // 3
161 "Apteczka", // 4
162 "Adrenalina", // 5
163 "Regenerator", // 6
164 "Morfina", // 7
165 "Ksiega Expa", // 8
166 "Portfel Turysty", // 9
167 "Kamizelka Nasa", // 10
168 "Sandaly Gaudentego", // 11
169 "Mozg Einsteina", // 12
170 "Zestaw Predatora", // 13
171 "Notatki Kapitana", // 14
172 "Tytanowe Naboje", // 15
173 "Naboje Pulkownika", // 16
174 "Weteran Noza", // 17
175 "Noz Mysliwego", // 18
176 "Notatki Ninji", // 19
177 "Pancerny Helm", // 20
178 "Pancerz Neomexowy", // 21
179 "Modul Odrzutowy", // 22
180 "Zaskoczenie Wroga", // 23
181 "Plaszczowe Naboje", // 24
182 "Luneta Wojskowego", // 25
183 "Tajemnica Molotova", // 26
184 "Tajemnica Zabojcy", // 27
185 "Plonace Naboje", // 28
186 "Tarcza Swat", // 29
187 "Nano Kamizelka", // 30
188 "Fake Item", // 31
189 "Dziurawe Rekawiczki", // 32
190 "Tajemnica Generala", // 33
191 "Peleryna Niewidka", // 34
192 "Szybkostrzelnosc", // 35
193 "Musniecie", // 36
194 "Autodestrukcja", // 37
195 "Rozblysk Sloneczny", // 38
196 "Tajemnica Rambo", // 39
197 "Izraelskie Naboje", // 40
198 "Opaska Rambo", // 41
199 "Fart Strzelca", // 42
200 "Tajemnica Thiefa", // 43
201 "Pierscien Expa", // 44
202 "Sakwa Szczescia", // 45
203 "Oko Snajpera", // 46
204 "Platynowe Naboje", // 47
205 "Krytyczne Naboje", // 48
206 "Taktyczne Naboje" // 49
207};
208new String:opisy_itemow[][] =
209{
210 "Zabij kogos aby dostac item", // 0
211 "Dostajesz dodatkowo 100 punktow zdrowia. Wolniej biegasz", // 1
212 "Dostajesz dodatkowo 50 punktow zdrowia. Wolniej biegasz", // 2
213 "Regenerujesz 10 zdrowia, co 5 sekund", // 3
214 "Regenerujesz zdrowie do pelna (Uzycie: E)", // 4
215 "Regenerujesz 50 zdrowia za zabicie przeciwnika", // 5
216 "Regenerujesz 30 procent zadanych obrazen w postaci zdrowia", // 6
217 "Posiadasz 1/LW szans na ponowne odrodzenia sie po smierci", // 7
218 "Dostajesz dodatkowo 300 doswiadczenia za zabicie przeciwnika", // 8
219 "Dostajesz dodatkowo 300 dolarow za zabicie przeciwnika", // 9
220 "Dostajesz dodatkowo 100 punktow wytrzymalosci", // 10
221 "Dostajesz dodatkowo 100 punktow kondycji", // 11
222 "Dostajesz dodatkowo 100 punktow inteligencji", // 12
223 "Dostajesz noktowizor (Uzycie: E). Jestes odporny na zadane obrazenia od upadku", // 13
224 "Jestes odporny na 3 pierwsze zadane obrazenia przez przeciwnika", // 14
225 "Zadajesz o 10 obrazen przeciwnikowi wiecej z kazdej broni", // 15
226 "Zadajesz o 20 obrazen przeciwnikowi wiecej z kazdej broni", // 16
227 "Zadajesz o 40 obrazen przeciwnikowi wiecej z noza", // 17
228 "Posiadasz natychmiastowe zabicie przeciwnika z noza", // 18
229 "Mozesz wykonac podwojny skok (Uzycie: podczas skoku SPACE)", // 19
230 "Jestes odporny na zadane obrazenia przez przeciwnika w glowe, oraz dodatkowo straci on 50 doswiadczenia za trafienie", // 20
231 "Posiadasz 1/LW szans na odbicie zadanych obrazen przez przeciwnika, oraz dodatkowo straci on 25 doswiadczenia za trafienie", // 21
232 "Zostajesz wyrzucony z duza predkoscia (Uzycie: podczas biegu i skoku E)", // 22
233 "Zadajesz 140 procent obrazen przeciwnikowi gdy atakujesz w dol tulowia", // 23
234 "Zadajesz 140 procent obrazen przeciwnikowi z kazdej pobocznej broni", // 24
235 "Posiadasz przyblizenie w kazdej broni palnej (Uzycie: ATTACK2)", // 25
236 "Dostajesz koktajl molotova, co 20 sekund", // 26
237 "Posiadasz 1/LW szans na wyrzucenie broni przeciwnika", // 27
238 "Posiadasz 1/LW szans na podpalenie przeciwnika", // 28
239 "Nie dzialaja na tobie itemy przeciwnika", // 29
240 "Nie dzialaja na tobie umiejetnosci klas przeciwnika", // 30
241 "To jest fake item, nic nie masz i nic nie mozesz.", // 31
242 "Masz dziurawe rekawiczki, ktore nic ci nie dodaja", // 32
243 "Otrzymujesz granat HE oraz zadajesz o LW obrazen wiecej", // 33
244 "Jesteœ mniej widoczny dla innych.", // 34
245 "Posiadasz zwiekszona szybkostrzelnosc broni", // 35
246 "Posiadasz 1/3 szansy na podbicie rywala", // 36
247 "Wybuchasz po smierci zabijajac wszystkich przeciwnikow w poblizu", // 37
248 "Podpalasz wszystkich przeciwnikow w poblizu (Uzycie: E)", // 38
249 "Regenerujesz 20 zdrowia za zabicie przeciwnika. Nie dzialaja na tobie fb przeciwnika", // 39
250 "Obrazenia ktore zadajesz sa zmiejszone o 30", // 40
251 "Dostajesz dodatkowo 25 punktow do kazdej statystyki", // 41
252 "Posiadasz 1/LW szans na natychmiastowe zabicie przeciwnika", // 42
253 "Mozesz podnosic bronie nalezace do wszystkich klas", // 43
254 "Dostajesz dodatkowo 100 doswiadczenia za zabicie przeciwnika", // 44
255 "Dostajesz dodatkowo 3000 dolarow podczas odrodzenia", // 45
256 "Posiadasz natychmiastowe zabicie przeciwnika w glowe", // 46
257 "Zadajesz o LW obrazen przeciwnikowi wiecej z kazdej broni", // 47
258 "Posiadasz 1/LW szans na zadanie 140 procent obrazen przeciwnikowi", // 48
259 "Posiadasz 1/LW szans na oproznienie magazynku przeciwnika" // 49
260};
261new String:nazwy_klas[][] =
262{
263 "Brak", // 0
264 "Snajper", // 1
265 "Komandos", // 2
266 "Obronca", // 3
267 "Medyk", // 4
268 "Wsparcie Ogniowe", // 5
269 "Saper", // 6
270 "Rusher", // 7
271 "Kangur", // 8
272 "Admiral", // 9
273 "Rebeliant", // 10
274 "Szturmowiec", // 11
275 "Lekki Zolnierz", // 12
276 "Ninja", //13
277 "Reworwelowiec", //14
278 "Ash", //15
279 "Buck", //16
280 "Hibana", //17
281
282 //Klasy Premium
283 "Inzynier [Premium]", // 18 p1
284 "Zabojca [Premium]", // 19 p2
285 "Major [Premium]", // 20 p3
286 "Szeryf [Premium]", // 21 p4
287 "Pestkowiec [Premium]", // 22 p5
288 "Castle [Premium]", // 23 p6
289 "Twitch [Premium]", // 24 p7
290 "Echo [Premium]", // 25 p8
291
292 //Klasy VIP
293 "Partyzant [VIP]", //26 v1
294 "Szturmowiec [VIP]", //27 v2
295 "Ninja [VIP]", //28 v3
296 "Medyk [VIP]", //29 v4
297 "Admiral [VIP]", //30 v5
298
299 //Klasy Hans
300 "Szpieg" // 31
301};
302new String:nazwy_broni[][] =
303{
304 "", // 0
305 "weapon_glock", // 1
306 "weapon_usp_silencer", // 2
307 "weapon_tec9", // 3
308 "weapon_cz75a", // 4
309 "weapon_hkp2000", // 5
310 "weapon_p250", // 6
311 "weapon_deagle", // 7
312 "weapon_elite", // 8
313 "weapon_fiveseven", // 9
314 "weapon_nova", // 10
315 "weapon_xm1014", // 11
316 "weapon_mag7", // 12
317 "weapon_sawedoff", // 13
318 "weapon_mac10", // 14
319 "weapon_mp9", // 15
320 "weapon_mp7", // 16
321 "weapon_ump45", // 17
322 "weapon_p90", // 18
323 "weapon_bizon", // 19
324 "weapon_galilar", // 20
325 "weapon_famas", // 21
326 "weapon_ak47", // 22
327 "weapon_m4a1", // 23
328 "weapon_revolver", // 24
329 "weapon_aug", // 25
330 "weapon_sg556", // 26
331 "weapon_ssg08", // 27
332 "weapon_awp", // 28
333 "weapon_g3sg1", // 29
334 "weapon_scar20", // 30
335 "weapon_m249", // 31
336 "weapon_negev", // 32
337 "weapon_decoy", // 33
338 "weapon_molotov", // 34
339 "weapon_incgrenade", // 35
340 "weapon_hegrenade", // 36
341 "weapon_flashbang", // 37
342 "weapon_smokegrenade", // 38
343 "weapon_taser", // 39
344 "weapon_knife", // 40
345 "weapon_c4", // 41
346 "weapon_m4a1_silencer", //42
347};
348new bronie_klas[][] =
349{ // numer broni odpowiadajacy za jej nazwe (patrz wyzej) // musi byc 5 broni w jednej kolumnie
350 {0, 0, 0, 0, 0}, // 0
351 {28, 7, 0, 0, 0}, // 1
352 {7, 37, 37, 0, 0}, // 2
353 {31, 1, 36, 37, 38}, // 3
354 {15, 9, 0, 0, 0}, // 4
355 {16, 9, 0, 0, 0}, // 5
356 {18, 9, 0, 0, 0}, // 6
357 {10, 6, 0, 0, 0}, // 7
358 {11, 6, 0, 0, 0}, // 8
359 {22, 1, 37, 37, 38}, // 9
360 {26, 1, 36, 0, 0}, // 10
361 {23, 7, 36, 0, 0}, // 11
362 {20, 6, 0, 0, 0}, // 12
363 {0, 0, 39, 0, 0}, // 13
364 {24, 7, 37, 37, 38}, // 14
365 {19, 2, 36, 37, 38}, // 15
366 {10, 23, 8, 37, 38}, // 16
367 {25, 1, 0, 0, 0}, // 17
368
369 //Klasy Premium
370 {21, 7, 0, 0, 0}, // 18 p1
371 {27, 3, 0, 0, 0}, // 19 p2
372 {9, 21, 0, 0, 0}, // 20 p3
373 {7, 34, 35, 36, 37}, // 21 p4
374 {0, 6, 0, 0, 0}, // 22 p5
375 {32, 3, 0, 0, 0}, // 23 p6
376 {8, 21, 0, 0, 0}, // 24 p7
377 {22, 4, 0, 23, 0}, // 25 p8
378
379 //Klasy VIP
380 {14, 3, 0, 0, 0}, // 26 v1
381 {42, 23, 34, 7, 0}, // 27 v2
382 {0, 0, 0, 0, 0}, // 28 v3
383 {17, 9, 0, 0, 0}, // 29 v3
384 {22, 1, 37, 37, 38}, // 30 v3
385
386 //Klasy Hans
387 {0, 2, 37, 37, 0}, // 31
388
389};
390new umiejetnosci_klas[][] =
391{ // Lvl - 0 // Zdr - 1 // Wyt - 2 // Kon - 3
392 {0, 100, 0, 100}, // 0
393 {0, 125, 110, 100}, // 1
394 {0, 85, 90, 125}, // 2
395 {0, 120, 125, 100}, // 3
396 {0, 110, 90, 95}, // 4
397 {0, 100, 100, 110}, // 5
398 {0, 100, 80, 100}, // 6
399 {0, 100, 50, 115}, // 7
400 {0, 115, 70, 105}, // 8
401 {0, 115, 100, 95}, // 9
402 {0, 110, 80, 100}, // 10
403 {0, 115, 110, 105}, // 11
404 {0, 100, 70, 115}, // 12
405 {0, 90, 50, 125}, // 13
406 {0, 125, 120, 115}, // 14
407 {0, 100, 130, 110}, // 15
408 {0, 110, 100, 100}, // 16
409 {0, 110, 100, 100}, // 17
410
411 //Klasy Premium
412 {0, 120, 100, 120}, // 18 p1
413 {0, 120, 100, 110}, // 19 p2
414 {0, 120, 130, 120}, // 20 p3
415 {0, 110, 70, 115}, // 21 p4
416 {0, 110, 80, 110}, // 22 p5
417 {0, 150, 140, 100}, // 23 p6
418 {0, 110, 60, 100}, // 24 p7
419 {0, 115, 110, 115}, // 25 p8
420
421 //Klasy VIP
422 {0, 110, 150, 100}, // 26 v1
423 {0, 130, 120, 110}, // 27 v2
424 {0, 100, 50, 130}, // 28 v3
425 {0, 120, 90, 110}, // 29 v4
426 {0, 120, 100, 100}, // 30 v5
427
428 //Klasy Hans
429 {0, 100, 100, 120}, // 31
430};
431new String:opisy_klas[][] =
432{
433 "Brak", // 0
434 "Zadaje o 35 obrazen wiecej z awp +int. Posiada 125hp, 110% biegu, 100 wytrzymalosci", // 1
435 "Zabija 1/1 z noza(Uzycie: PPM). Posiada 85hp, 125% biegu, 90 wytrzymalosci", // 2
436 "Odporny na umiejetnosci wszystkich klas przeciwnika. Posiada 120hp, 100% biegu, 125 wytrzymalosci", // 3
437 "Posiada 110hp, 95% biegu, 90 wytrzymalosci oraz zestaw medyczny (E)", // 4
438 "Posiada 100hp, 110% biegu, 100 wytrzymalosci oraz x1 pakiet rakiet (E)", // 5
439 "Posiada 100hp, 100% biegu, 80 wytrzymalosci oraz x3 wybuchy zadajace dmg", // 6
440 "Posiada 100hp, 115% biegu, 50 wytrzymalosci", // 7
441 "Posiada dlugi skok, 115hp, 105% biegu, 70 wytrzymalosci", // 8
442 "Posiada 115hp, 95% biegu, 100 wytrzymalosci", // 9
443 "Posiada 110hp, 100% biegu, 80 wytrzymalosci", // 10
444 "Posiada 115hp, 105% biegu, 110 wytrzymalosci", // 11
445 "Posiada 100hp, 115% biegu, 70 wytrzymalosci", // 12
446 "Zadaje o 65 dmg wiecej z noza(Uzycie: PPM). Posiada 90hp, 125% biegu, 50 wytrzymalosci oraz dlugi skok", // 13
447 "Posiada 125hp, 115% biegu, 120 wytrzymalosci oraz pakiet granatów(usunac)", // 14
448 "Posiada 100hp, 110% biegu, 130 wytrzymalosci. | Zadaje dodatkowe 2 dmg z bizona(usuanac)", // 15
449 "Posiada 110hp, 100% biegu, 100 wytrzymalosci. | Ma 10% regeneracji hp z dmg.", // 16
450 "Posiada 110hp, 100% biegu, 100 wytrzymalosci. | Zadaje dodatkowe 5 obrazen z AUG.(zamienic na vip)", // 17
451
452 //Klasy Premium
453 "[Klasa Premium] Posiada 120hp, 120 wytrzymalosci i 100 kondycji oraz x3 pakiet rakiet", // 18 p1
454 "[Klasa Premium] Posiada 120hp, 100 wytrzymalosci i 110 kondycji oraz 65 obrazen wiecej z shoot", // 19 p2
455 "[Klasa Premium] Posiada 120hp, 130 wytrzymalosci i 120 kondycji oraz 15 obrazen wiecej z fiveseven i +5 dmg z famas", // 20 p3
456 "[Klasa Premium] Posiada 110hp, 115% biegu, 70 wytrzymalosci. Dodatkowo 40 obrazen wiecej z deagla i +60 dmg noz(Uzycie: PPM)", // 21 p4
457 "[Klasa Premium] Posiada 110hp, 110% biegu, 80 wytrzymalosci. Dodatkowo œci¹ga przeciwnika na hita gdy trafi go w glowe. ", // 22 p5
458 "[Klasa Premium] Posiada Negev oraz Tec | Ma 150hp, 100% biegu, 140 wytrzymalosci.(usunac)", // 23 p6
459 "[Klasa Premium] Posiada Famas oraz beretty | Zadaje +10 dmg famas i leczy siÄ™ 10% z dmg | Ma 110hp, 100% biegu, 60 wytrzymalosci.", // 24 p7
460 "[Klasa Premium] Posiada M4A4 i AK-47 + CZ75-Auto | Ma 115hp, 115% biegu, 110 wytrzymalosci | Leczy sie 15 za killa +5% z dmg.", // 25 p8
461
462 //Klasy VIP
463 "[Klasa VIP] Posiada 110hp, 150 wytrzymalosci i 100 kondycji.(usunac)", // 26 v1
464 "[Klasa VIP] Posiada 130hp, 110 kondycji, 120 wytrzymalosci. Dodatkowo molotowa oraz M4A1s", // 27 v2
465 "[Klasa VIP] Zadaje o 65 dmg wiecej z noza(Uzycie: PPM). Posiada 100hp, 130% biegu , 50 wytrzymalosci.", // 28 v3
466 "[Klasa VIP] Posiada 120hp, 110% biegu , 90 wytrzymalosci | Moze uzyc 2 razy apteczke(poprawa).", // 29 v4
467 "[Klasa VIP] Posiada 120hp, 100% biegu, 100 wytrzymalosci.", // 30 v5
468
469 //Klasy Hans
470
471 "Zadaje o 50 dmg wiecej z noza(Uzycie: PPM) oraz +40dmg w heda.Posiada 100hp, 120% biegu, 100 wytrzymaloscia ma model przeciwnika.", // 31
472};
473// https://amxx.pl/generator/ 15
474new doswiadczenie_poziomu[] =
475{
476 0, 37, 148, 306, 516, 767, 1043, 1380, 1812, 2330, 2897,
477 3549, 4224, 4934, 5692, 6508, 7381, 8323, 9376, 10477, 11615,
478 12812, 14128, 15470, 16878, 18303, 19825, 21355, 22987, 24691, 26443,
479 28200, 29967, 31879, 33837, 35891, 38049, 40240, 42490, 44810, 47188,
480 49573, 52086, 54618, 57159, 59708, 62379, 65095, 67903, 70792, 73698,
481 76741, 79839, 82971, 86176, 89435, 92754, 96144, 99611, 103139, 106719,
482 110334, 113993, 117699, 121512, 125395, 129330, 133332, 137393, 141495, 145663,
483 149839, 154069, 158333, 162654, 166988, 171475, 176038, 180642, 185370, 190133,
484 194937, 199743, 204553, 209441, 214435, 219458, 224553, 229677, 234864, 240118,
485 245379, 250845, 256382, 261991, 267611, 273258, 278983, 284819, 290661, 296588,
486 302645, 308727, 314890, 321087, 327302, 333605, 340007, 346468, 352967, 359542,
487 366145, 372822, 379501, 386213, 392925, 399839, 406827, 413898, 421012, 428166,
488 435402, 442660, 449942, 457269, 464749, 472259, 479826, 487433, 495053, 502817,
489 510664, 518564, 526501, 534465, 542513, 550671, 558874, 567150, 575468, 583860,
490 592295, 600770, 609339, 617953, 626575, 635274, 644057, 652912, 661786, 670760,
491 679737, 688762, 697846, 707002, 716183, 725371, 734661, 744122, 753639, 763186,
492 772829, 782538, 792293, 802053, 811859, 821761, 831729, 841773, 851874, 862051,
493 872261, 882481, 892773, 903152, 913531, 924045, 934569, 945181, 955903, 966646,
494 977426, 988263, 999184, 1010189, 1021218, 1032367, 1043569, 1054775, 1066090, 1077444,
495 1088867, 1100357, 1111934, 1123521, 1135120, 1146774, 1158563, 1170409, 1182272, 1194176,
496 1206210, 1218276, 1230379, 1242494, 1254775, 1267111, 1279511, 1291947, 1304416, 1316915,
497 1329563, 1342265, 1354981, 1367716, 1380480, 1393339, 1406211, 1419181, 1432188, 1445196,
498 1458231, 1471355, 1484722, 1498124, 1511577, 1525112, 1538682, 1552360, 1566084, 1579819,
499 1593603, 1607427, 1621350, 1635351, 1649408, 1663557, 1677719, 1691965, 1706240, 1720530,
500 1734877, 1749338, 1763808, 1778378, 1793034, 1807792, 1822576, 1837397, 1852307, 1867249,
501 1882209, 1897173, 1912344, 1927555, 1942806, 1958104, 1973521, 1988951, 2004485, 2020055,
502 2035713, 2051432, 2067205, 2083043, 2098917, 2114852, 2130823, 2146860, 2162907, 2178963,
503 2195143, 2211392, 2227647, 2244027, 2260524, 2277069, 2293683, 2310358, 2327070, 2343789,
504 2360535, 2377441, 2394365, 2411342, 2428398, 2445496, 2462703, 2479927, 2497263, 2514649,
505 2532069, 2549561, 2567081, 2584670, 2602331, 2620053, 2637802, 2655641, 2673492, 2691404,
506 2709356, 999999999999999
507};
508
509public OnPluginStart()
510{
511 CreateConVar("Call of Duty", "3.0", "Linux`");
512 RegAdminCmd("sm_exp", CmdExp, ADMFLAG_RCON);
513 RegAdminCmd("sm_lvl", CmdLvl, ADMFLAG_RCON);
514 RegAdminCmd("sm_item", CmdItem, ADMFLAG_RCON);
515
516 RegConsoleCmd("say", Komendy);
517 RegConsoleCmd("say_team", Komendy);
518
519 RegConsoleCmd("buy", BlokujKomende);
520 RegConsoleCmd("buyequip", BlokujKomende);
521 RegConsoleCmd("buyammo1", BlokujKomende);
522 RegConsoleCmd("buyammo2", BlokujKomende);
523 RegConsoleCmd("cl_setautobuy", BlokujKomende);
524 RegConsoleCmd("cl_autobuy", BlokujKomende);
525 RegConsoleCmd("rebuy", BlokujKomende);
526 RegConsoleCmd("autobuy", BlokujKomende);
527 RegConsoleCmd("fullupdate", BlokujKomende);
528 RegConsoleCmd("autobuy", CodMenu);
529
530 HookEvent("round_freeze_end", PoczatekRundy);
531 HookEvent("round_start", NowaRunda);
532 HookEvent("round_end", KoniecRundy);
533
534 HookEvent("bomb_planted", BombaPodlozona);
535 HookEvent("bomb_defused", BombaRozbrojona);
536 HookEvent("hostage_rescued", ZakladnikUratowany);
537
538 HookEvent("player_spawn", PlayerSpawn);
539 HookEvent("player_death", PlayerDeath);
540 HookEvent("player_blind", PlayerBlind);
541 HookEvent("hegrenade_detonate", HeDetonate);
542 HookEvent("flashbang_detonate", FbDetonate);
543
544 HookUserMessage(GetUserMessageId("TextMsg"), TextMessage, true);
545 LoadTranslations("common.phrases");
546 DataBaseConnect();
547}
548
549public OnMapStart()
550{
551 for(new i = 1; i < sizeof dzwieki_serwera; i ++)
552 {
553 new String:sound_serwer[512];
554 Format(sound_serwer, sizeof(sound_serwer), "sound/%s", dzwieki_serwera[i]);
555 AddFileToDownloadsTable(sound_serwer);
556 }
557 for(new i = 1; i < sizeof modele_serwera; i ++)
558 PrecacheModel(modele_serwera[i]);
559
560 sprite_laser = PrecacheModel("materials/sprites/laserbeam.vmt");
561 sprite_halo = PrecacheModel("materials/sprites/halo.vmt");
562 sprite_blue = PrecacheModel("materials/sprites/blueflare1.vmt");
563 PrecacheSound("weapons/hegrenade/explode5.wav");
564 WczytajTopke();
565}
566public OnClientPutInServer(client)
567{
568 SDKHook(client, SDKHook_TraceAttack, TraceAttack);
569 SDKHook(client, SDKHook_OnTakeDamage, TakeDamage);
570 SDKHook(client, SDKHook_PreThink, Prethink);
571 SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
572 PoprawkaLVL(client);
573}
574public OnClientDisconnect(client)
575{
576 SDKUnhook(client, SDKHook_TraceAttack, TraceAttack);
577 SDKUnhook(client, SDKHook_OnTakeDamage, TakeDamage);
578 SDKUnhook(client, SDKHook_PreThink, Prethink);
579 SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
580
581 UsunItem(client);
582 ZapiszDane(client);
583 PoprawkaLVL(client);
584}
585
586public Action:PoprawkaLVL(client)
587{
588 misja_gracza[client] = 0;
589 zabicia_gracza[client] = 0;
590 ilosc_rakiet_gracza[client] = 0;
591 ilosc_dynamitow_gracza[client] = 0;
592 GetClientName(client, nazwa_gracza[client], 64);
593 for(new i = 1; i < sizeof nazwy_klas; i ++)
594 {
595 poziom_klasy_gracza[client][i] = 1;
596 doswiadczenie_klasy_gracza[client][i] = 0;
597 inteligencja_klasy_gracza[client][i] = 0;
598 zdrowie_klasy_gracza[client][i] = 0;
599 obrazenia_klasy_gracza[client][i] = 0;
600 wytrzymalosc_klasy_gracza[client][i] = 0;
601 kondycja_klasy_gracza[client][i] = 0;
602 misja_klasy_gracza[client][i] = 0;
603 zabicia_klasy_gracza[client][i] = 0;
604 }
605
606 polaczony_raz[client] = 0;
607 zapisz_dane[client] = 0;
608 nowa_klasa_gracza[client] = 0;
609 klasa_gracza[client] = 0;
610 doswiadczenie_gracza[client] = 0;
611 poziom_gracza[client] = 1;
612 punkty_gracza[client] = 0;
613 inteligencja_gracza[client] = 0;
614 zdrowie_gracza[client] = 0;
615 obrazenia_gracza[client] = 0;
616 wytrzymalosc_gracza[client] = 0;
617 kondycja_gracza[client] = 0;
618 bonusowa_inteligencja_gracza[client] = 0;
619 bonusowe_obrazenia_gracza[client] = 0;
620 ilosc_apteczek_gracza[client] = 0;
621}
622
623public Action:Komendy(client, args)
624{
625 new String:text[192];
626 GetCmdArg(1, text, sizeof(text));
627
628 new ReplySource:old = SetCmdReplySource(SM_REPLY_TO_CHAT);
629 if(strcmp(text, "/m", false) == 0 || strcmp(text, "/menu", false) == 0)
630 CodMenu(client, args);
631 else if(strcmp(text, "/s", false) == 0 || strcmp(text, "/sklep", false) == 0)
632 CodSklep(client);
633 else if(strcmp(text, "/misja", false) == 0 || strcmp(text, "/misje", false) == 0 || strcmp(text, "/quest", false) == 0 || strcmp(text, "/zadania", false) == 0)
634 WybierzMisje(client);
635 else if(strcmp(text, "/info", false) == 0 || strcmp(text, "/infomisja", false) == 0 || strcmp(text, "/sprawdz", false) == 0 || strcmp(text, "/sprawdzmisje", false) == 0)
636 OpisMisji(client);
637 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)
638 OpisStatystyk(client);
639 else if(strcmp(text, "/k", false) == 0 || strcmp(text, "/klasa", false) == 0)
640 WybierzKlase(client);
641 else if(strcmp(text, "/klasy", false) == 0)
642 OpisKlasy(client);
643 else if(strcmp(text, "/items", false) == 0 || strcmp(text, "/itemy", false) == 0 || strcmp(text, "/przedmioty", false) == 0 || strcmp(text, "/perki", false) == 0)
644 OpisItemow(client);
645 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)
646 OpisItemu(client);
647 else if(strcmp(text, "/n", false) == 0 || strcmp(text, "/napraw", false) == 0)
648 NaprawItem(client);
649 else if(strcmp(text, "/staty", false) == 0 || strcmp(text, "/statystyki", false) == 0)
650 PrzydzielPunkty(client);
651 else if(strcmp(text, "/r", false) == 0 || strcmp(text, "/reset", false) == 0)
652 ResetujPunkty(client);
653 else if(strcmp(text, "/d", false) == 0 || strcmp(text, "/drop", false) == 0 || strcmp(text, "/wyrzuc", false) == 0)
654 WyrzucItem(client);
655 else if(strcmp(text, "/spect", false) == 0 || strcmp(text, "/spec", false) == 0)
656 ZmienDruzyne(client);
657 else if(strcmp(text, "/codtop15", false) == 0)
658 Top15Serwera(client);
659 else if(strcmp(text, "/codrank", false) == 0)
660 RankSerwera(client);
661 else if(strcmp(text, "/wymiana", false) == 0 || strcmp(text, "/trade", false) == 0)
662 WymienPerk(client);
663
664 SetCmdReplySource(old);
665 return Plugin_Continue;
666}
667public Action:BlokujKomende(client, args)
668{
669 return Plugin_Handled;
670}
671public Action:TextMessage(UserMsg:msg_text, Handle:pb, const players[], playersNum, bool:reliable, bool:init)
672{
673 if(!reliable || PbReadInt(pb, "msg_dst") != 3)
674 return Plugin_Continue;
675
676 new String:buffer[256];
677 PbReadString(pb, "params", buffer, sizeof(buffer), 0);
678 if(StrContains(buffer, "#Player_Cash_Award_") == 0 || StrContains(buffer, "#Team_Cash_Award_") == 0)
679 return Plugin_Handled;
680
681 return Plugin_Continue;
682}
683public Action:TraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
684{
685 if(!IsValidClient(victim) || !IsValidClient(attacker))
686 return Plugin_Continue;
687
688 if(GetClientTeam(victim) == GetClientTeam(attacker))
689 return Plugin_Continue;
690
691 if(klasa_gracza[attacker])
692 DodajDoswiadczenie(attacker, RoundFloat(damage));
693
694 if(hitgroup == 1)
695 headshot[victim] = 1;
696 else
697 headshot[victim] = 0;
698
699 if(hitgroup == 3)
700 tulow[victim] = 1;
701 else
702 tulow[victim] = 0;
703
704 return Plugin_Continue;
705}
706public Action:TakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
707{
708 if(!IsValidClient(victim))
709 return Plugin_Continue;
710
711 if(informacje_itemu_gracza[victim][0] == 13 && damagetype & DMG_FALL)
712 return Plugin_Handled;
713
714 if(IsValidClient(attacker) && GetClientTeam(victim) != GetClientTeam(attacker))
715 {
716 new dmg = 0;
717 new zabicie = 0;
718 new odpornosc = 0;
719
720 new String:weapon[32];
721 GetClientWeapon(attacker, weapon, sizeof(weapon));
722 switch(klasa_gracza[attacker])
723 {
724 case Snajper:
725 {
726 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
727 {
728 if(StrEqual(weapon, nazwy_broni[28]) && damagetype & DMG_BULLET)
729 dmg += 35+maksymalna_inteligencja_gracza[attacker];
730 }
731 }
732 case Komandos:
733 {
734 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
735 {
736 if(StrContains(weapon, "knife") != -1 && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2)
737 dmg += 300 +maksymalna_inteligencja_gracza[attacker];
738 }
739 }
740 case Ninja:
741 {
742 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
743 {
744 if(StrContains(weapon, "knife") != -1 && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2)
745 dmg += 90+maksymalna_inteligencja_gracza[attacker];
746 }
747 }
748 case Ninja_vip:
749 {
750 if(StrContains(weapon, "knife") != -1 && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2)
751 dmg += 120+maksymalna_inteligencja_gracza[attacker];
752 }
753 case Szeryf:
754 {
755 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
756 {
757 if(StrEqual(weapon, nazwy_broni[7]) && damagetype & DMG_BULLET)
758 dmg += 40;
759 if(StrContains(weapon, "knife") != -1 && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2)
760 dmg += 60+maksymalna_inteligencja_gracza[attacker];
761 }
762 }
763 case Pestkowiec:
764 {
765 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
766 {
767 if(StrEqual(weapon, nazwy_broni[6]) && damagetype & DMG_BULLET)
768 {
769 if(headshot[victim])
770 {
771 dmg += GetClientHealth(victim)+1;
772 zabicie = 1;
773 }
774 }
775 }
776 }
777 case Buck:
778 {
779 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));
780 }
781 case Ash:
782 {
783 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
784 {
785 if(StrEqual(weapon, nazwy_broni[19]) && damagetype & DMG_BULLET)
786 dmg += 2;
787 }
788 }
789 case Hibana:
790 {
791 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
792 {
793 if(StrEqual(weapon, nazwy_broni[25]) && damagetype & DMG_BULLET)
794 dmg += 5;
795 }
796 }
797 case Twitch:
798 {
799 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
800 {
801 if(StrEqual(weapon, nazwy_broni[21]) && damagetype & DMG_BULLET)
802 dmg += 10;
803 }
804 }
805 case Zabojca:
806 {
807 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
808 {
809 if(StrEqual(weapon, nazwy_broni[27]) && damagetype & DMG_BULLET)
810 dmg += 65+maksymalna_inteligencja_gracza[attacker];
811 }
812 }
813 case Major:
814 {
815 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
816 {
817 if(StrEqual(weapon, nazwy_broni[9]) && damagetype & DMG_BULLET)
818 dmg += 15;
819 if(StrEqual(weapon, nazwy_broni[21]) && damagetype & DMG_BULLET)
820 dmg += 5;
821 }
822 }
823 case Echo:
824 {
825 SetEntData(attacker, FindDataMapInfo(attacker, "m_iHealth"), (GetClientHealth(attacker)+RoundFloat(damage*0.05) > maksymalne_zdrowie_gracza[attacker])? maksymalne_zdrowie_gracza[attacker]: GetClientHealth(attacker)+RoundFloat(damage*0.05));
826 SetEntData(killer, FindDataMapInfo(killer, "m_iHealth"), GetClientHealth(killer)+15<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+15: maksymalne_zdrowie_gracza[killer]);
827 }
828 case Szpieg:
829 {
830 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
831 {
832 if(StrEqual(weapon, "weapon_usp_silencer") || StrEqual(weapon, "weapon_hkp2000") && damagetype & DMG_BULLET)
833 dmg += 8;
834 }
835 }
836 }
837 switch(informacje_itemu_gracza[attacker][0])
838 {
839 case 6:
840 {
841 if(informacje_itemu_gracza[victim][0] != 29)
842 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));
843 }
844 case 15:
845 {
846 if(informacje_itemu_gracza[victim][0] != 29)
847 dmg += 10;
848 }
849 case 16:
850 {
851 if(informacje_itemu_gracza[victim][0] != 29)
852 dmg += 20;
853 }
854 case 17:
855 {
856 if(informacje_itemu_gracza[victim][0] != 29)
857 {
858 if(StrContains(weapon, "knife") != -1 && damagetype & DMG_SLASH)
859 dmg += 40;
860 }
861 }
862 case 18:
863 {
864 if(informacje_itemu_gracza[victim][0] != 29)
865 {
866 if(StrContains(weapon, "knife") != -1 && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2)
867 {
868 dmg += GetClientHealth(victim)+1;
869 zabicie = 1;
870 }
871 }
872 }
873 case 23:
874 {
875 if(informacje_itemu_gracza[victim][0] != 29)
876 {
877 if(tulow[victim])
878 dmg += RoundFloat(damage*0.4);
879 }
880 }
881 case 24:
882 {
883 if(informacje_itemu_gracza[victim][0] != 29)
884 {
885 if((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)
886 dmg += RoundFloat(damage*0.4);
887 }
888 }
889 case 27:
890 {
891 if(informacje_itemu_gracza[victim][0] != 29)
892 {
893 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
894 ClientCommand(victim, "drop");
895 }
896 }
897 case 28:
898 {
899 if(informacje_itemu_gracza[victim][0] != 29)
900 {
901 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
902 IgniteEntity(victim, 3.0);
903 }
904 }
905 case 33:
906 {
907 if(informacje_itemu_gracza[victim][0] != 29)
908 dmg += informacje_itemu_gracza[attacker][1];
909 }
910 case 36:
911 {
912 if(informacje_itemu_gracza[victim][0] != 29)
913 {
914 int wylosowana = GetRandomInt(1,3);
915
916 if(wylosowana == 1)
917 {
918 SlapPlayer(victim, 0, true);
919 }
920 }
921 }
922 case 42:
923 {
924 if(informacje_itemu_gracza[victim][0] != 29)
925 {
926 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
927 {
928 dmg += GetClientHealth(victim)+1;
929 zabicie = 1;
930 }
931 }
932 }
933 case 46:
934 {
935 if(informacje_itemu_gracza[victim][0] != 29)
936 {
937 if(headshot[victim])
938 {
939 dmg += GetClientHealth(victim)+1;
940 zabicie = 1;
941 }
942 }
943 }
944 case 47:
945 {
946 if(informacje_itemu_gracza[victim][0] != 29)
947 dmg += informacje_itemu_gracza[attacker][1];
948 }
949 case 48:
950 {
951 if(informacje_itemu_gracza[victim][0] != 29)
952 {
953 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
954 dmg += RoundFloat(damage*0.4);
955 }
956 }
957 case 49:
958 {
959 if(informacje_itemu_gracza[victim][0] != 29)
960 {
961 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
962 SetEntData(GetEntPropEnt(victim, Prop_Send, "m_hActiveWeapon"), FindSendPropInfo("CWeaponCSBase", "m_iClip1"), 0);
963 }
964 }
965 }
966 switch(informacje_itemu_gracza[victim][0])
967 {
968 case 14:
969 {
970 if(informacje_itemu_gracza[attacker][0] != 29)
971 {
972 if(informacje_itemu_gracza[victim][1] > 0)
973 {
974 informacje_itemu_gracza[victim][1] --;
975 odpornosc = 1;
976 }
977 }
978 }
979 case 20:
980 {
981 if(informacje_itemu_gracza[attacker][0] != 29)
982 {
983 if(headshot[victim])
984 odpornosc = 1;
985 }
986 }
987 case 21:
988 {
989 if(informacje_itemu_gracza[attacker][0] != 29)
990 {
991 if(GetRandomInt(1, informacje_itemu_gracza[victim][1]) == 1)
992 {
993 SDKHooks_TakeDamage(attacker, victim, victim, damage, DMG_GENERIC);
994 odpornosc = 1;
995 }
996 }
997 }
998 }
999 if(odpornosc == 1)
1000 {
1001 if(damagetype & (DMG_BULLET | DMG_SLASH))
1002 return Plugin_Handled;
1003 else
1004 return Plugin_Handled;
1005 }
1006 else
1007 {
1008 if(zabicie == 1)
1009 damage = RoundFloat(damage+dmg)*(1.0+maksymalne_obrazenia_gracza[attacker]);
1010 else
1011 damage = RoundFloat(damage+dmg)*(1.0+maksymalne_obrazenia_gracza[attacker]-maksymalna_wytrzymalosc_gracza[victim]);
1012
1013 return Plugin_Changed;
1014 }
1015 }
1016
1017 return Plugin_Continue;
1018}
1019public Action:Prethink(client)
1020{
1021 if(!IsValidClient(client) || IsFakeClient(client) || freeze_time || client < 0)
1022 return Plugin_Continue;
1023
1024 if(IsPlayerAlive(client) && client > 0)
1025 {
1026 new buttons = GetClientButtons(client);
1027 new ile = poziom_gracza[client]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[client]-1]: 0;
1028 new Float:procent_gracza = 0.0;
1029 procent_gracza = (float(doswiadczenie_gracza[client]-ile)/float(doswiadczenie_poziomu[poziom_gracza[client]]-ile))*100.0;
1030 PrintHintText(client, "<font color='#b35900'>[Klasa: <b>%s</b>]</font>\n<font color='#009900'>[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]</font>\n<font color='#b35900'>[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[client]], procent_gracza, poziom_gracza[client], nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]);
1031
1032 new String:weapon[32];
1033 GetClientWeapon(client, weapon, sizeof(weapon));
1034 switch(klasa_gracza[client])
1035 {
1036 case Inzynier:
1037 {
1038 if(!oldbuttons1[client] && buttons & IN_USE)
1039 {
1040 StworzRakiete(client);
1041 oldbuttons1[client] = 1;
1042 }
1043 else if(oldbuttons1[client] && !(buttons & IN_USE))
1044 oldbuttons1[client] = 0;
1045 }
1046 case WsparcieOgniowe:
1047 {
1048 if(!oldbuttons1[client] && buttons & IN_USE)
1049 {
1050 StworzRakiete(client);
1051 oldbuttons1[client] = 1;
1052 }
1053 else if(oldbuttons1[client] && !(buttons & IN_USE))
1054 oldbuttons1[client] = 0;
1055 }
1056 case Saper:
1057 {
1058 if(!oldbuttons1[client] && buttons & IN_USE)
1059 {
1060 if(ilosc_dynamitow_gracza[client])
1061 {
1062 new Float:fOrigin[3];
1063 new Float:iOrigin[3];
1064 GetClientEyePosition(client, Float:fOrigin);
1065 for(new i = 1, max = GetMaxClients(); i <= max; ++ i)
1066 {
1067 if(!IsClientInGame(i) || !IsPlayerAlive(i))
1068 continue;
1069
1070 if(GetClientTeam(client) == GetClientTeam(i))
1071 continue;
1072
1073 GetClientEyePosition(i, Float:iOrigin);
1074 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
1075 SDKHooks_TakeDamage(i, client, client, ((klasa_gracza[i] == Obronca || informacje_itemu_gracza[i][0] == 30)? 0.0: 100.0+(inteligencja_gracza[client]+bonusowa_inteligencja_gracza[client])/6), DMG_GENERIC);
1076 }
1077
1078 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);
1079 TE_SendToAll();
1080
1081 ilosc_dynamitow_gracza[client]--;
1082 }
1083 else
1084 CPrintToChat(client, "{darkred}[COD:MW]{green} Wykorzystales juz moc swojej klasy w tej rundzie!");
1085
1086 oldbuttons1[client] = 1;
1087 }
1088 else if(oldbuttons1[client] && !(buttons & IN_USE))
1089 oldbuttons1[client] = 0;
1090 }
1091 case Medyk:
1092 {
1093 if(!oldbuttons1[client] && buttons & IN_USE)
1094 {
1095 if(ilosc_apteczek_gracza[client])
1096 {
1097 new Float:fOrigin[3];
1098 new Float:iOrigin[3];
1099 GetClientEyePosition(client, Float:fOrigin);
1100 for(new i = 1; i <= MaxClients; i++)
1101 {
1102 if(!IsClientInGame(i) || !IsPlayerAlive(i))
1103 continue;
1104
1105 if(GetClientTeam(client) != GetClientTeam(i))
1106 continue;
1107
1108 GetClientEyePosition(i, Float:iOrigin);
1109 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
1110 {
1111 new heal = 70+maksymalna_inteligencja_gracza[client];
1112 SetEntData(i, FindDataMapInfo(i, "m_iHealth"), GetClientHealth(i)+heal<maksymalne_zdrowie_gracza[i]? GetClientHealth(i)+heal: maksymalne_zdrowie_gracza[i]);
1113 }
1114 }
1115
1116 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);
1117 TE_SendToAll();
1118 ilosc_apteczek_gracza[client]--;
1119 }
1120 else
1121 CPrintToChat(client, "{darkred}[COD:MW]{green} Wykorzystales juz moc swojej klasy w tej rundzie!");
1122
1123 oldbuttons1[client] = 1;
1124 }
1125 else if(oldbuttons1[client] && !(buttons & IN_USE))
1126 oldbuttons1[client] = 0;
1127 }
1128 case Medyk_vip:
1129 {
1130 if(!oldbuttons1[client] && buttons & IN_USE)
1131 {
1132 if(ilosc_apteczek_gracza[client])
1133 {
1134 new Float:fOrigin[3];
1135 new Float:iOrigin[3];
1136 GetClientEyePosition(client, Float:fOrigin);
1137 for(new i = 1; i <= MaxClients; i++)
1138 {
1139 if(!IsClientInGame(i) || !IsPlayerAlive(i))
1140 continue;
1141
1142 if(GetClientTeam(client) != GetClientTeam(i))
1143 continue;
1144
1145 GetClientEyePosition(i, Float:iOrigin);
1146 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
1147 {
1148 new heal = 70+maksymalna_inteligencja_gracza[client];
1149 SetEntData(i, FindDataMapInfo(i, "m_iHealth"), GetClientHealth(i)+heal<maksymalne_zdrowie_gracza[i]? GetClientHealth(i)+heal: maksymalne_zdrowie_gracza[i]);
1150 }
1151 }
1152
1153 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);
1154 TE_SendToAll();
1155 ilosc_apteczek_gracza[client]--;
1156 }
1157 else
1158 CPrintToChat(client, "{darkred}[COD:MW]{green} Wykorzystales juz moc swojej klasy w tej rundzie!");
1159
1160 oldbuttons1[client] = 1;
1161 }
1162 else if(oldbuttons1[client] && !(buttons & IN_USE))
1163 oldbuttons1[client] = 0;
1164 }
1165 case Kangur:
1166 {
1167 if(!oldbuttons2[client] && buttons & IN_JUMP)
1168 {
1169 if(GetGameTime() >= czas_skokow_gracza[client]+1.0)
1170 {
1171 new Float:fOrigin[3];
1172 fOrigin[0] = GetEntDataFloat(client, FindSendPropInfo("CBasePlayer","m_vecVelocity[0]"))*0.8/2.0;
1173 fOrigin[1] = GetEntDataFloat(client, FindSendPropInfo("CBasePlayer","m_vecVelocity[1]"))*0.8/2.0;
1174 fOrigin[2] = 0.8*50.0;
1175 SetEntDataVector(client, FindSendPropInfo("CBasePlayer","m_vecBaseVelocity"), fOrigin, true);
1176 oldbuttons2[client] = 1;
1177 czas_skokow_gracza[client] = RoundFloat(GetGameTime());
1178 }
1179 }
1180 else if(oldbuttons2[client] && !(buttons & IN_JUMP))
1181 oldbuttons2[client] = 0;
1182 }
1183 case Ninja:
1184 {
1185 if(!oldbuttons2[client] && buttons & IN_JUMP)
1186 {
1187 if(GetGameTime() >= czas_skokow_gracza[client]+1.0)
1188 {
1189 new Float:fOrigin[3];
1190 fOrigin[0] = GetEntDataFloat(client, FindSendPropInfo("CBasePlayer","m_vecVelocity[0]"))*0.7/2.0;
1191 fOrigin[1] = GetEntDataFloat(client, FindSendPropInfo("CBasePlayer","m_vecVelocity[1]"))*0.7/2.0;
1192 fOrigin[2] = 0.7*50.0;
1193 SetEntDataVector(client, FindSendPropInfo("CBasePlayer","m_vecBaseVelocity"), fOrigin, true);
1194 oldbuttons2[client] = 1;
1195 czas_skokow_gracza[client] = RoundFloat(GetGameTime());
1196 }
1197 }
1198 else if(oldbuttons2[client] && !(buttons & IN_JUMP))
1199 oldbuttons2[client] = 0;
1200 }
1201 case Hibana:
1202 {
1203 if(!oldbuttons2[client] && buttons & IN_JUMP)
1204 {
1205 if(GetGameTime() >= czas_skokow_gracza[client]+1.0)
1206 {
1207 new Float:fOrigin[3];
1208 fOrigin[0] = GetEntDataFloat(client, FindSendPropInfo("CBasePlayer","m_vecVelocity[0]"))*0.7/2.0;
1209 fOrigin[1] = GetEntDataFloat(client, FindSendPropInfo("CBasePlayer","m_vecVelocity[1]"))*0.7/2.0;
1210 fOrigin[2] = 0.7*50.0;
1211 SetEntDataVector(client, FindSendPropInfo("CBasePlayer","m_vecBaseVelocity"), fOrigin, true);
1212 oldbuttons2[client] = 1;
1213 czas_skokow_gracza[client] = RoundFloat(GetGameTime());
1214 }
1215 }
1216 else if(oldbuttons2[client] && !(buttons & IN_JUMP))
1217 oldbuttons2[client] = 0;
1218 }
1219 }
1220 switch(informacje_itemu_gracza[client][0])
1221 {
1222 case 3:
1223 {
1224 if(GetGameTime() >= informacje_itemu_gracza[client][1]+5.0)
1225 {
1226 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+10<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+10: maksymalne_zdrowie_gracza[client]);
1227 informacje_itemu_gracza[client][1] = RoundFloat(GetGameTime());
1228 }
1229 }
1230 case 4:
1231 {
1232 if(!oldbuttons1[client] && buttons & IN_USE)
1233 {
1234 if(informacje_itemu_gracza[client][1])
1235 {
1236 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), maksymalne_zdrowie_gracza[client]);
1237 informacje_itemu_gracza[client][1] --;
1238 }
1239 else
1240 CPrintToChat(client, "{darkred}[COD:MW]{green} Wykorzystales juz moc swojego itemu w tej rundzie!");
1241
1242 oldbuttons1[client] = 1;
1243 }
1244 else if(oldbuttons1[client] && !(buttons & IN_USE))
1245 oldbuttons1[client] = 0;
1246 }
1247 case 13:
1248 {
1249 if(!oldbuttons1[client] && buttons & IN_USE)
1250 {
1251 if(GetEntProp(client, Prop_Send, "m_bNightVisionOn"))
1252 SetEntProp(client, Prop_Send, "m_bNightVisionOn", 0);
1253 else
1254 SetEntProp(client, Prop_Send, "m_bNightVisionOn", 1);
1255
1256 oldbuttons1[client] = 1;
1257 }
1258 else if(oldbuttons1[client] && !(buttons & IN_USE))
1259 oldbuttons1[client] = 0;
1260 }
1261 case 19:
1262 {
1263 if(!oldbuttons2[client] && buttons & IN_JUMP)
1264 {
1265 new flags = GetEntityFlags(client);
1266 if(!(flags & FL_ONGROUND) && informacje_itemu_gracza[client][1])
1267 {
1268 new Float:fOrigin[3];
1269 GetEntPropVector(client, Prop_Data, "m_vecVelocity", fOrigin);
1270 fOrigin[2] += 250.0;
1271 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fOrigin);
1272 informacje_itemu_gracza[client][1] --;
1273 }
1274 else if(flags & FL_ONGROUND)
1275 informacje_itemu_gracza[client][1] = 1;
1276
1277 oldbuttons2[client] = 1;
1278 }
1279 else if(oldbuttons2[client] && !(buttons & IN_JUMP))
1280 oldbuttons2[client] = 0;
1281 }
1282 case 22:
1283 {
1284 if(!oldbuttons1[client] && buttons & IN_USE)
1285 {
1286 if(GetGameTime() >= informacje_itemu_gracza[client][1]+4.0)
1287 {
1288 new Float:velocity[3];
1289 new Float:velocity0;
1290 new Float:velocity1;
1291 velocity0 = GetEntPropFloat(client, Prop_Send, "m_vecVelocity[0]");
1292 velocity1 = GetEntPropFloat(client, Prop_Send, "m_vecVelocity[1]");
1293 velocity[0] = (7.0*velocity0)*(1.0/4.1);
1294 velocity[1] = (7.0*velocity1)*(1.0/4.1);
1295 velocity[2] = 0.0;
1296 SetEntPropVector(client, Prop_Send, "m_vecBaseVelocity", velocity);
1297 informacje_itemu_gracza[client][1] = RoundFloat(GetGameTime());
1298 }
1299
1300 oldbuttons1[client] = 1;
1301 }
1302 else if(oldbuttons1[client] && !(buttons & IN_USE))
1303 oldbuttons1[client] = 0;
1304 }
1305 case 25:
1306 {
1307 if(!oldbuttons2[client] && buttons & IN_ATTACK2)
1308 {
1309 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]) && !StrEqual(weapon, nazwy_broni[40]) && !StrEqual(weapon, nazwy_broni[41]))
1310 {
1311 if(informacje_itemu_gracza[client][1])
1312 {
1313 informacje_itemu_gracza[client][1] --;
1314 SetEntProp(client, Prop_Send, "m_iFOV", 270);
1315 }
1316 else
1317 {
1318 informacje_itemu_gracza[client][1] = 1;
1319 SetEntProp(client, Prop_Send, "m_iFOV", 90);
1320 }
1321 }
1322
1323 oldbuttons2[client] = 1;
1324 }
1325 else if(oldbuttons2[client] && !(buttons & IN_ATTACK2))
1326 oldbuttons2[client] = 0;
1327 }
1328 case 26:
1329 {
1330 if(GetGameTime() >= informacje_itemu_gracza[client][1]+20.0)
1331 {
1332 GivePlayerItem(client, nazwy_broni[34]);
1333 informacje_itemu_gracza[client][1] = RoundFloat(GetGameTime());
1334 }
1335 }
1336 // TU BY£ ROZGRANICZNIK ROZRZUTU
1337 //case 31:
1338 //{
1339 // if(buttons & IN_ATTACK)
1340 // SetEntData(GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"), FindSendPropInfo("CWeaponCSBase", "m_iRecoilIndex"), 0);
1341 //}
1342 case 35:
1343 {
1344 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]))
1345 {
1346 if(buttons & IN_ATTACK)
1347 {
1348 new Float:flNextPrimaryAttack = GetEntDataFloat(GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"), FindSendPropInfo("CBaseCombatWeapon", "m_flNextPrimaryAttack"))-GetGameTime();
1349 SetEntDataFloat(GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"), FindSendPropInfo("CBaseCombatWeapon", "m_flNextPrimaryAttack"), (flNextPrimaryAttack/1.4)+GetGameTime());
1350 }
1351 }
1352 }
1353 case 38:
1354 {
1355 if(!oldbuttons1[client] && buttons & IN_USE)
1356 {
1357 if(informacje_itemu_gracza[client][1])
1358 {
1359 new Float:fOrigin[3];
1360 new Float:iOrigin[3];
1361 GetClientEyePosition(client, Float:fOrigin);
1362 for(new i = 1; i <= MaxClients; i++)
1363 {
1364 if(!IsClientInGame(i) || !IsPlayerAlive(i))
1365 continue;
1366
1367 if(GetClientTeam(client) == GetClientTeam(i))
1368 continue;
1369
1370 if(informacje_itemu_gracza[i][0] == 29)
1371 continue;
1372
1373 GetClientEyePosition(i, Float:iOrigin);
1374 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
1375 IgniteEntity(i, 15.0);
1376 }
1377
1378 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);
1379 TE_SendToAll();
1380
1381 informacje_itemu_gracza[client][1] --;
1382 }
1383 else
1384 CPrintToChat(client, "{darkred}[COD:MW]{green} Wykorzystales juz moc swojego itemu w tej rundzie!");
1385
1386 oldbuttons1[client] = 1;
1387 }
1388 else if(oldbuttons1[client] && !(buttons & IN_USE))
1389 oldbuttons1[client] = 0;
1390 }
1391 }
1392 }
1393 else
1394 {
1395 new spect = GetEntProp(client, Prop_Send, "m_iObserverMode");
1396 if(spect == 4 || spect == 5)
1397 {
1398 new target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
1399 if(!(target == -1) && IsValidClient(target))
1400 {
1401 new ile = poziom_gracza[target]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[target]-1]: 0;
1402 new Float:procent_gracza = 0.0;
1403 procent_gracza = (float(doswiadczenie_gracza[target]-ile)/float(doswiadczenie_poziomu[poziom_gracza[target]]-ile))*100.0;
1404 PrintHintText(client, "<font color='#b35900'>[Klasa: <b>%s</b>]</font>\n<font color='#009900'>[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]</font>\n<font color='#b35900'>[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[target]], procent_gracza, poziom_gracza[target], nazwy_itemow[informacje_itemu_gracza[target][0]], moc_itemu[target]);
1405 }
1406 }
1407 }
1408
1409 return Plugin_Continue;
1410}
1411public Action:WeaponCanUse(client, bron)
1412{
1413 if(!IsValidClient(client) || IsFakeClient(client))
1414 return Plugin_Continue;
1415
1416 new String:weapon[32];
1417 GetEdictClassname(bron, weapon, sizeof(weapon));
1418 switch(informacje_itemu_gracza[client][0])
1419 {
1420 case 26:
1421 {
1422 if(StrEqual(weapon, nazwy_broni[34]))
1423 return Plugin_Continue;
1424 }
1425 case 32:
1426 {
1427 if(StrEqual(weapon, nazwy_broni[36]))
1428 return Plugin_Continue;
1429 }
1430 case 33:
1431 {
1432 if(StrEqual(weapon, nazwy_broni[36]))
1433 return Plugin_Continue;
1434 }
1435 case 43: return Plugin_Continue;
1436 }
1437
1438 if(StrEqual(weapon, nazwy_broni[40]) || StrEqual(weapon, nazwy_broni[41]))
1439 return Plugin_Continue;
1440
1441 switch(klasa_gracza[client])
1442 {
1443 case Szpieg:
1444 {
1445 if(StrEqual(weapon, "weapon_hkp2000"))
1446 {
1447 return Plugin_Continue;
1448 }
1449 }
1450 case Ash:
1451 {
1452 if(StrEqual(weapon, "weapon_hkp2000"))
1453 {
1454 return Plugin_Continue;
1455 }
1456 }
1457 case Echo:
1458 {
1459 if(StrEqual(weapon, "weapon_p250"))
1460 {
1461 return Plugin_Continue;
1462 }
1463 }
1464 }
1465
1466 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]]))
1467 {
1468 return Plugin_Handled;
1469 }
1470
1471 return Plugin_Continue;
1472}
1473public Action:NowaRunda(Handle:event_newround, const String:name[],bool:dontBroadcast)
1474{
1475 freeze_time = 1;
1476}
1477public Action:PoczatekRundy(Handle:event_freezetime, const String:name[], bool:dontBroadcast)
1478{
1479 freeze_time = 0;
1480}
1481public Action:KoniecRundy(Handle:event_endround, const String:name[],bool:dontBroadcast)
1482{
1483 for(new i = 1; i <= MaxClients; i++)
1484 {
1485 if(!IsClientInGame(i) || !klasa_gracza[i])
1486 continue;
1487
1488 new doswiadczenie = 0;
1489 new druzyna = GetEventInt(event_endround, "winner");
1490 if(druzyna == 2 && GetClientTeam(i) == CS_TEAM_T || druzyna == 3 && GetClientTeam(i) == CS_TEAM_CT)
1491 {
1492 char godzina_str[8];
1493 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
1494 new godzina = StringToInt(godzina_str);
1495
1496 if(godzina >= 6 && godzina < 22)
1497 {
1498 if(vip_gracza[i])
1499 doswiadczenie += xp_winround_vip;
1500 else
1501 doswiadczenie += xp_winround;
1502 }
1503 else
1504 {
1505 if(vip_gracza[i])
1506 doswiadczenie += xp_winround_vip * 2;
1507 else
1508 doswiadczenie += xp_winround * 2;
1509 }
1510
1511 if(IsPlayerAlive(i))
1512 {
1513 CPrintToChat(i, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za wygranie rundy.", doswiadczenie);
1514 DodajDoswiadczenie(i, doswiadczenie);
1515 }
1516 else
1517 {
1518 CPrintToChat(i, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za wygranie rundy przez twoja druzyne.", doswiadczenie/2);
1519 DodajDoswiadczenie(i, doswiadczenie/2);
1520 }
1521 }
1522 }
1523}
1524public Action:BombaPodlozona(Handle:event_bomb_planted, const String:name[], bool:dontBroadcast)
1525{
1526 new client = GetClientOfUserId(GetEventInt(event_bomb_planted, "userid"));
1527 if(StrEqual(name, "bomb_planted"))
1528 {
1529 for(new i = 1; i <= MaxClients; i++)
1530 {
1531 if(!IsClientInGame(i) || !klasa_gracza[i])
1532 continue;
1533
1534 if(GetClientTeam(i) != CS_TEAM_T)
1535 continue;
1536
1537 new doswiadczenie = 0;
1538
1539 char godzina_str[8];
1540 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
1541 new godzina = StringToInt(godzina_str);
1542
1543 if(godzina >= 6 && godzina < 22)
1544 {
1545 if(vip_gracza[i])
1546 doswiadczenie += xp_objectives_vip;
1547 else
1548 doswiadczenie += xp_objectives;
1549 }
1550 else
1551 {
1552 if(vip_gracza[i])
1553 doswiadczenie += xp_objectives_vip * 2;
1554 else
1555 doswiadczenie += xp_objectives * 2;
1556 }
1557
1558 if(i == client)
1559 {
1560 CPrintToChat(i, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za podlozenie bomby.", doswiadczenie);
1561 DodajDoswiadczenie(i, doswiadczenie);
1562 }
1563 else
1564 {
1565 CPrintToChat(i, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za podlozenie bomby przez twoja druzyne.", doswiadczenie/2);
1566 DodajDoswiadczenie(i, doswiadczenie/2);
1567 }
1568 }
1569 }
1570}
1571public Action:BombaRozbrojona(Handle:event_bomb_defused, const String:name[], bool:dontBroadcast)
1572{
1573 new client = GetClientOfUserId(GetEventInt(event_bomb_defused, "userid"));
1574 if(StrEqual(name, "bomb_defused"))
1575 {
1576 for(new i = 1; i <= MaxClients; i++)
1577 {
1578 if(!IsClientInGame(i) || !klasa_gracza[i])
1579 continue;
1580
1581 if(GetClientTeam(i) != CS_TEAM_CT)
1582 continue;
1583
1584 new doswiadczenie = 0;
1585
1586 char godzina_str[8];
1587 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
1588 new godzina = StringToInt(godzina_str);
1589
1590 if(godzina >= 6 && godzina < 22)
1591 {
1592 if(vip_gracza[i])
1593 doswiadczenie += xp_objectives_vip;
1594 else
1595 doswiadczenie += xp_objectives;
1596 }
1597 else
1598 {
1599 if(vip_gracza[i])
1600 doswiadczenie += xp_objectives_vip * 2;
1601 else
1602 doswiadczenie += xp_objectives * 2;
1603 }
1604
1605 if(i == client)
1606 {
1607 CPrintToChat(i, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za rozbrojenie bomby.", doswiadczenie);
1608 DodajDoswiadczenie(i, doswiadczenie);
1609 }
1610 else
1611 {
1612 CPrintToChat(i, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za rozbrojenie bomby przez twoja druzyne.", doswiadczenie/2);
1613 DodajDoswiadczenie(i, doswiadczenie/2);
1614 }
1615 }
1616 }
1617}
1618public Action:ZakladnikUratowany(Handle:event_hostage_rescued, const String:name[], bool:dontBroadcast)
1619{
1620 new client = GetClientOfUserId(GetEventInt(event_hostage_rescued, "userid"));
1621 if(StrEqual(name, "hostage_rescued"))
1622 {
1623 for(new i = 1; i <= MaxClients; i++)
1624 {
1625 if(!IsClientInGame(i) || !klasa_gracza[i])
1626 continue;
1627
1628 if(GetClientTeam(i) != CS_TEAM_CT)
1629 continue;
1630
1631 new doswiadczenie = 0;
1632
1633 char godzina_str[8];
1634 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
1635 new godzina = StringToInt(godzina_str);
1636
1637 if(godzina >= 6 && godzina < 22)
1638 {
1639 if(vip_gracza[i])
1640 doswiadczenie += xp_objectives_vip;
1641 else
1642 doswiadczenie += xp_objectives;
1643 }
1644 else
1645 {
1646 if(vip_gracza[i])
1647 doswiadczenie += xp_objectives_vip * 2;
1648 else
1649 doswiadczenie += xp_objectives * 2;
1650 }
1651
1652 if(i == client)
1653 {
1654 CPrintToChat(i, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za uratowanie zakladnika.", doswiadczenie);
1655 DodajDoswiadczenie(i, doswiadczenie);
1656 }
1657 else
1658 {
1659 CPrintToChat(i, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za uratowanie zakladnika przez twoja druzyne.", doswiadczenie/2);
1660 DodajDoswiadczenie(i, doswiadczenie/2);
1661 }
1662 }
1663 }
1664}
1665public Action:CodMenu(client, args)
1666{
1667 new Handle:menu = CreateMenu(CodMenu_Handler);
1668 SetMenuTitle(menu, "CodMenu:");
1669 AddMenuItem(menu, "1", "Sklep");
1670 AddMenuItem(menu, "2", "Wybierz Klase");
1671 AddMenuItem(menu, "3", "Wyrzuc Item");
1672 AddMenuItem(menu, "4", "Napraw Item");
1673 AddMenuItem(menu, "5", "Opis Itemu");
1674 AddMenuItem(menu, "6", "Menu Admina");
1675 DisplayMenu(menu, client, 250);
1676 return Plugin_Handled;
1677}
1678public CodMenu_Handler(Handle:classhandle, MenuAction:action, client, Position)
1679{
1680 if(action == MenuAction_Select)
1681 {
1682 new String:Item[32];
1683 GetMenuItem(classhandle, Position, Item, sizeof(Item));
1684
1685 if(StrEqual(Item, "1"))
1686 CodSklep(client);
1687 else if(StrEqual(Item, "2"))
1688 WybierzKlase(client);
1689 else if(StrEqual(Item, "3"))
1690 WyrzucItem(client);
1691 else if(StrEqual(Item, "4"))
1692 NaprawItem(client);
1693 else if(StrEqual(Item, "5"))
1694 OpisItemu(client);
1695 else if(StrEqual(Item, "6"))
1696 ClientCommand(client, "sm_admin");
1697 }
1698 else if(action == MenuAction_End)
1699 CloseHandle(classhandle);
1700}
1701public Action:CodSklep(client)
1702{
1703 if(klasa_gracza[client])
1704 {
1705 new Handle:menu = CreateMenu(CodSklep_Handler);
1706 SetMenuTitle(menu, "CodSklep:");
1707 AddMenuItem(menu, "1", "Mala Apteczka [Leczy 20 HP] Koszt: 2000$");
1708 AddMenuItem(menu, "2", "Srednia Apteczka [Leczy 50 HP] Koszt: 5000$");
1709 AddMenuItem(menu, "3", "Duza Apteczka [Leczy 100 HP] Koszt: 10000$");
1710 AddMenuItem(menu, "4", "Duzy Lotek [Wygraj Kase] Koszt: 2000$");
1711 AddMenuItem(menu, "5", "Doswiadczenie [Dostajesz 1000 Dosw.] Koszt: 10000$");
1712 AddMenuItem(menu, "6", "Super Doswiadczenie [Dostajesz 2500 Dosw.] Koszt: 20000$");
1713 AddMenuItem(menu, "7", "Losowy Item [Dostajesz Losowy Item] Koszt: 3000$");
1714 AddMenuItem(menu, "8", "Sprzedaz Itemu [Dostajesz $ Za Item] Koszt: 1500$");
1715 AddMenuItem(menu, "9", "Moc Itemu [+20 Procent Mocy Itemu] Koszt: 8000$");
1716 DisplayMenu(menu, client, 250);
1717 }
1718 else
1719 CPrintToChat(client, "{darkred}[COD:MW]{green} Musisz miec wybrana klase aby moc wlaczyc sklep!");
1720}
1721public CodSklep_Handler(Handle:classhandle, MenuAction:action, client, Position)
1722{
1723 if(action == MenuAction_Select)
1724 {
1725 new String:Item[32];
1726 GetMenuItem(classhandle, Position, Item, sizeof(Item));
1727 CodSklep(client);
1728
1729 if(StrEqual(Item, "1"))
1730 {
1731 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 2000)
1732 {
1733 if(IsPlayerAlive(client))
1734 {
1735 if(maksymalne_zdrowie_gracza[client] > GetClientHealth(client))
1736 {
1737 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-2000);
1738 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+20<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+20: maksymalne_zdrowie_gracza[client]);
1739 CPrintToChat(client, "{darkred}[COD:MW]{green} Kupiles Mala Apteczke.");
1740 }
1741 else
1742 CPrintToChat(client, "{darkred}[COD:MW]{green} Jestes w pelni uleczony!");
1743 }
1744 else
1745 CPrintToChat(client, "{darkred}[COD:MW]{green} Tylko ¿ywa osoba mo¿e kupiæ ten przedmiot!");
1746 }
1747 else
1748 CPrintToChat(client, "{darkred}[COD:MW]{green} Masz za malo pieniedzy!");
1749 }
1750 else if(StrEqual(Item, "2"))
1751 {
1752 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 5000)
1753 {
1754 if(IsPlayerAlive(client))
1755 {
1756 if(maksymalne_zdrowie_gracza[client] > GetClientHealth(client))
1757 {
1758 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-5000);
1759 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+50<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+50: maksymalne_zdrowie_gracza[client]);
1760 CPrintToChat(client, "{darkred}[COD:MW]{green} Kupiles Srednia Apteczke.");
1761 }
1762 else
1763 CPrintToChat(client, "{darkred}[COD:MW]{green} Jestes w pelni uleczony!");
1764 }
1765 else
1766 CPrintToChat(client, "{darkred}[COD:MW]{green} Tylko ¿ywa osoba mo¿e kupiæ ten przedmiot!");
1767 }
1768 else
1769 CPrintToChat(client, "{darkred}[COD:MW]{green} Masz za malo pieniedzy!");
1770 }
1771 else if(StrEqual(Item, "3"))
1772 {
1773 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 10000)
1774 {
1775 if(IsPlayerAlive(client))
1776 {
1777 if(maksymalne_zdrowie_gracza[client] > GetClientHealth(client))
1778 {
1779 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-10000);
1780 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+100<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+100: maksymalne_zdrowie_gracza[client]);
1781 CPrintToChat(client, "{darkred}[COD:MW]{green} Kupiles Duza Apteczke.");
1782 }
1783 else
1784 CPrintToChat(client, "{darkred}[COD:MW]{green} Jestes w pelni uleczony!");
1785 }
1786 else
1787 CPrintToChat(client, "{darkred}[COD:MW]{green} Tylko ¿ywa osoba mo¿e kupiæ ten przedmiot!");
1788 }
1789 else
1790 CPrintToChat(client, "{darkred}[COD:MW]{green} Masz za malo pieniedzy!");
1791 }
1792 else if(StrEqual(Item, "4"))
1793 {
1794 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 2000)
1795 {
1796 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-2000);
1797 CPrintToChat(client, "{darkred}[COD:MW]{green} Zagrales w lotto...");
1798 switch(GetRandomInt(0, 29))
1799 {
1800 case 0: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1801 case 1:
1802 {
1803 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+300);
1804 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 300$!");
1805 }
1806 case 2: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1807 case 3:
1808 {
1809 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+600);
1810 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 600$!");
1811 }
1812 case 4: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1813 case 5:
1814 {
1815 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+900);
1816 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 900$!");
1817 }
1818 case 6: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1819 case 7:
1820 {
1821 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+1200);
1822 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 1200$!");
1823 }
1824 case 8: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1825 case 9:
1826 {
1827 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+1500);
1828 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 1500$!");
1829 }
1830 case 10: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1831 case 11:
1832 {
1833 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+1800);
1834 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 1800$!");
1835 }
1836 case 12: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1837 case 13:
1838 {
1839 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+2100);
1840 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 2100$!");
1841 }
1842 case 14: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1843 case 15:
1844 {
1845 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+2400);
1846 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 2400$!");
1847 }
1848 case 16: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1849 case 17:
1850 {
1851 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+2700);
1852 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 2700$!");
1853 }
1854 case 18: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1855 case 19:
1856 {
1857 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+3000);
1858 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 3000$!");
1859 }
1860 case 20: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1861 case 21:
1862 {
1863 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+3300);
1864 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 3300$!");
1865 }
1866 case 22: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1867 case 23:
1868 {
1869 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+3600);
1870 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 3600$!");
1871 }
1872 case 24: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1873 case 25:
1874 {
1875 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+4200);
1876 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 4200$!");
1877 }
1878 case 26: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1879 case 27:
1880 {
1881 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+4800);
1882 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 4800$!");
1883 }
1884 case 28: CPrintToChat(client, "{darkred}[COD:MW]{green} Niestety nic nie wygrales...");
1885 case 29:
1886 {
1887 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+5400);
1888 CPrintToChat(client, "{darkred}[COD:MW]{green} Wygrales 5400$!");
1889 }
1890 }
1891 }
1892 else
1893 CPrintToChat(client, "{darkred}[COD:MW]{green} Masz za malo pieniedzy!");
1894 }
1895 else if(StrEqual(Item, "5"))
1896 {
1897 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 10000)
1898 {
1899 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-10000);
1900 DodajDoswiadczenie(client, 1000);
1901 CPrintToChat(client, "{darkred}[COD:MW]{green} Kupiles Doswiadczenie.");
1902 }
1903 else
1904 CPrintToChat(client, "{darkred}[COD:MW]{green} Masz za malo pieniedzy!");
1905 }
1906 else if(StrEqual(Item, "6"))
1907 {
1908 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 20000)
1909 {
1910 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-20000);
1911 DodajDoswiadczenie(client, 2500);
1912 CPrintToChat(client, "{darkred}[COD:MW]{green} Kupiles Super Doswiadczenie.");
1913 }
1914 else
1915 CPrintToChat(client, "{darkred}[COD:MW]{green} Masz za malo pieniedzy!");
1916 }
1917 else if(StrEqual(Item, "7"))
1918 {
1919 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 3000)
1920 {
1921 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-3000);
1922 DajItem(client, GetRandomInt(1, sizeof nazwy_itemow-1));
1923 CPrintToChat(client, "{darkred}[COD:MW]{green} Wylosowales %s.", nazwy_itemow[informacje_itemu_gracza[client][0]]);
1924 }
1925 else
1926 CPrintToChat(client, "{darkred}[COD:MW]{green} Masz za malo pieniedzy!");
1927 }
1928 else if(StrEqual(Item, "8"))
1929 {
1930 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 1500)
1931 {
1932 if(informacje_itemu_gracza[client][0])
1933 {
1934 new losowanie = GetRandomInt(2000, 2500);
1935 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-1500+losowanie);
1936 UsunItem(client);
1937 CPrintToChat(client, "{darkred}[COD:MW]{green} Dostales +%i$ za sprzedaz swojego itemu.", losowanie);
1938 }
1939 else
1940 CPrintToChat(client, "{darkred}[COD:MW]{green} Nie masz zadnego itemu!");
1941 }
1942 else
1943 CPrintToChat(client, "{darkred}[COD:MW]{green} Masz za malo pieniedzy!");
1944 }
1945 else if(StrEqual(Item, "9"))
1946 NaprawItem(client);
1947 }
1948 else if(action == MenuAction_End)
1949 CloseHandle(classhandle);
1950}
1951public Action:NaprawItem(client)
1952{
1953 if(GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount")) >= 8000)
1954 {
1955 if(informacje_itemu_gracza[client][0] && moc_itemu[client] < 100)
1956 {
1957 SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))-8000);
1958 moc_itemu[client] += 20;
1959 CPrintToChat(client, "{darkred}[COD:MW]{green} Kupiles +20%% Mocy Itemu.");
1960 }
1961 else
1962 CPrintToChat(client, "{darkred}[COD:MW]{green} Twoj item nie jest uszkodzony!");
1963 }
1964 else
1965 CPrintToChat(client, "{darkred}[COD:MW]{green} Masz za malo pieniedzy!");
1966}
1967public Action:OpisStatystyk(client)
1968{
1969 new String:opis[512];
1970 Format(opis, sizeof(opis), "Klasa: %s\nPoziom: %i/%i\nDoswiadczenie: %i\nKonto Premium: %s", nazwy_klas[klasa_gracza[client]], poziom_gracza[client], limit_poziomu, doswiadczenie_gracza[client], vip_gracza[client]? "Aktywne": "Nie Aktywne");
1971
1972 new Handle:menu = CreateMenu(OpisStatystyk_Handler);
1973 SetMenuTitle(menu, opis);
1974 AddMenuItem(menu, "1", "Punkty Klasy");
1975
1976 DisplayMenu(menu, client, 250);
1977}
1978public OpisStatystyk_Handler(Handle:classhandle, MenuAction:action, client, Position)
1979{
1980 if(action == MenuAction_Select)
1981 {
1982 new String:Item[32];
1983 GetMenuItem(classhandle, Position, Item, sizeof(Item));
1984 if(StrEqual(Item, "1"))
1985 PrzydzielPunkty(client);
1986 }
1987 else if(action == MenuAction_End)
1988 CloseHandle(classhandle);
1989}
1990public Action:WybierzKlase(client)
1991{
1992 if(polaczony_raz[client])
1993 CPrintToChat(client, "{darkred}[COD:MW]{green} Trwa wczytywanie klas...");
1994 else
1995 {
1996 if(klasa_gracza[client])
1997 {
1998 new klasa_g = klasa_gracza[client];
1999 poziom_klasy_gracza[client][klasa_g] = poziom_gracza[client];
2000 doswiadczenie_klasy_gracza[client][klasa_g] = doswiadczenie_gracza[client];
2001 inteligencja_klasy_gracza[client][klasa_g] = inteligencja_gracza[client];
2002 zdrowie_klasy_gracza[client][klasa_g] = zdrowie_gracza[client];
2003 obrazenia_klasy_gracza[client][klasa_g] = obrazenia_gracza[client];
2004 wytrzymalosc_klasy_gracza[client][klasa_g] = wytrzymalosc_gracza[client];
2005 kondycja_klasy_gracza[client][klasa_g] = kondycja_gracza[client];
2006 misja_klasy_gracza[client][klasa_g] = misja_gracza[client];
2007 zabicia_klasy_gracza[client][klasa_g] = zabicia_gracza[client];
2008 WybierzKlaseMenu(client);
2009 }
2010 else
2011 {
2012 new String:tmp[1024];
2013 new String:authid[64];
2014 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
2015 return;
2016
2017 Format(tmp, sizeof(tmp), "SELECT `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `misja`, `zabicia`, `klasa` FROM `codmod` WHERE steamid = '%s';", authid);
2018 SQL_TQuery(sql, WybierzKlase2, tmp, client);
2019 polaczony_raz[client] = 1;
2020 }
2021 }
2022}
2023public WybierzKlase2(Handle:owner, Handle:query, const String:error[], any:client)
2024{
2025 if(query == INVALID_HANDLE)
2026 {
2027 LogError("Load error: %s", error);
2028 return;
2029 }
2030 if(SQL_GetRowCount(query))
2031 {
2032 new poziom = 1, doswiadczenie = 0, inteligencja = 0, zdrowie = 0, obrazenia = 0, wytrzymalosc = 0, kondycja = 0, misja = 0, zabicia = 0;
2033 new String:klasa[512];
2034 while(SQL_MoreRows(query))
2035 {
2036 while(SQL_FetchRow(query))
2037 {
2038 poziom = SQL_FetchInt(query, 0);
2039 doswiadczenie = SQL_FetchInt(query, 1);
2040 inteligencja = SQL_FetchInt(query, 2);
2041 zdrowie = SQL_FetchInt(query, 3);
2042 obrazenia = SQL_FetchInt(query, 4);
2043 wytrzymalosc = SQL_FetchInt(query, 5);
2044 kondycja = SQL_FetchInt(query, 6);
2045 misja = SQL_FetchInt(query, 7);
2046 zabicia = SQL_FetchInt(query, 8);
2047 SQL_FetchString(query, 9, klasa, sizeof(klasa));
2048 for(new i = 1; i < sizeof nazwy_klas; i ++)
2049 {
2050 if(StrEqual(nazwy_klas[i], klasa))
2051 {
2052 poziom_klasy_gracza[client][i] = poziom;
2053 doswiadczenie_klasy_gracza[client][i] = doswiadczenie;
2054 inteligencja_klasy_gracza[client][i] = inteligencja;
2055 zdrowie_klasy_gracza[client][i] = zdrowie;
2056 obrazenia_klasy_gracza[client][i] = obrazenia;
2057 wytrzymalosc_klasy_gracza[client][i] = wytrzymalosc;
2058 kondycja_klasy_gracza[client][i] = kondycja;
2059 misja_klasy_gracza[client][i] = misja;
2060 zabicia_klasy_gracza[client][i] = zabicia;
2061 }
2062 }
2063 }
2064 }
2065 }
2066
2067 WybierzKlaseMenu(client);
2068 polaczony_raz[client] = 0;
2069}
2070public Action:WybierzKlaseMenu(client)
2071{
2072 new String:klasa[512];
2073 new Handle:menu = CreateMenu(WybierzKlase_Handler);
2074 SetMenuTitle(menu, "Wybierz Klase:");
2075 for(new i = 1; i < sizeof nazwy_klas; i ++)
2076 {
2077 Format(klasa, sizeof(klasa), "%s (Lv: %i)", nazwy_klas[i], poziom_klasy_gracza[client][i]);
2078 AddMenuItem(menu, "1", klasa);
2079 }
2080
2081 DisplayMenu(menu, client, 250);
2082}
2083public WybierzKlase_Handler(Handle:classhandle, MenuAction:action, client, Position)
2084{
2085 if(action == MenuAction_Select)
2086 {
2087 new String:Item[32];
2088 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2089 Position ++;
2090
2091 if(StrEqual(Item, "1"))
2092 {
2093 if(Position == klasa_gracza[client])
2094 return;
2095
2096 new ma_poziom = 0;
2097 for(new i = 1; i < sizeof nazwy_klas; i ++)
2098 {
2099 if(poziom_klasy_gracza[client][i] >= umiejetnosci_klas[Position][0])
2100 ma_poziom = 1;
2101 }
2102 if(ma_poziom)
2103 {
2104 if(Position == Partyzant && !(GetUserFlagBits(client) & VIP_FLAG)
2105 || Position == Szturmowiec_vip && !(GetUserFlagBits(client) & VIP_FLAG)
2106 || Position == Ninja_vip && !(GetUserFlagBits(client) & VIP_FLAG)
2107 || Position == Medyk_vip && !(GetUserFlagBits(client) & VIP_FLAG)
2108 || Position == Admiral_vip && !(GetUserFlagBits(client) & VIP_FLAG)
2109 )
2110 {
2111 WybierzKlase(client);
2112 CPrintToChat(client, "{darkred}[COD:MW]{green} Wybrana klasa dostepna jest tylko dla posiadaczy konta VIP!");
2113 }
2114 else
2115 {
2116 if(Position == Inzynier && !(GetUserFlagBits(client) & PREMIUM)
2117 || Position == Zabojca && !(GetUserFlagBits(client) & PREMIUM)
2118 || Position == Major && !(GetUserFlagBits(client) & PREMIUM)
2119 || Position == Szeryf && !(GetUserFlagBits(client) & PREMIUM)
2120 || Position == Pestkowiec && !(GetUserFlagBits(client) & PREMIUM)
2121 || Position == Castle && !(GetUserFlagBits(client) & PREMIUM)
2122 || Position == Twitch && !(GetUserFlagBits(client) & PREMIUM)
2123 || Position == Echo && !(GetUserFlagBits(client) & PREMIUM)
2124 )
2125 {
2126 WybierzKlase(client);
2127 CPrintToChat(client, "{darkred}[COD:MW]{green} Wybrana klasa dostepna jest tylko dla posiadaczy Uslug Premium!");
2128 }
2129 else
2130 {
2131 if(klasa_gracza[client])
2132 {
2133 nowa_klasa_gracza[client] = Position;
2134 CPrintToChat(client, "{darkred}[COD:MW]{green} Klasa zostanie zmieniona w nastepnej rundzie.");
2135 }
2136 else
2137 {
2138 klasa_gracza[client] = Position;
2139 WczytajDane(client, klasa_gracza[client]);
2140 Odrodzenie(client);
2141 }
2142 }
2143 }
2144 }
2145 else
2146 {
2147 WybierzKlase(client);
2148 CPrintToChat(client, "{darkred}[COD:MW]{green} Wybrana klasa dostepna jest od %dLv!", umiejetnosci_klas[Position][0]);
2149 }
2150 }
2151 }
2152 else if(action == MenuAction_End)
2153 CloseHandle(classhandle);
2154}
2155public Action:OpisKlasy(client)
2156{
2157 new String:klasa[512];
2158 new Handle:menu = CreateMenu(OpisKlasy_Handler);
2159 SetMenuTitle(menu, "Wybierz Klase:");
2160 for(new i = 1; i < sizeof nazwy_klas; i ++)
2161 {
2162 Format(klasa, sizeof(klasa), "%s", nazwy_klas[i]);
2163 AddMenuItem(menu, "1", klasa);
2164 }
2165
2166 DisplayMenu(menu, client, 250);
2167}
2168public OpisKlasy_Handler(Handle:classhandle, MenuAction:action, client, Position)
2169{
2170 if(action == MenuAction_Select)
2171 {
2172 new String:Item[32];
2173 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2174 Position ++;
2175
2176 if(StrEqual(Item, "1"))
2177 {
2178 new String:bronie_klasy[512];
2179 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]]);
2180 ReplaceString(bronie_klasy, sizeof(bronie_klasy), "weapon_", "");
2181
2182 CPrintToChat(client, "{darkred}[COD:MW]{green} Klasa: %s - %s - %s.", nazwy_klas[Position], bronie_klasy, opisy_klas[Position]);
2183 OpisKlasy(client);
2184 }
2185 }
2186 else if(action == MenuAction_End)
2187 CloseHandle(classhandle);
2188}
2189public Action:OpisItemow(client)
2190{
2191 new String:item[512];
2192 new Handle:menu = CreateMenu(OpisItemow_Handler);
2193 SetMenuTitle(menu, "Wybierz Item:");
2194 for(new i = 1; i <sizeof nazwy_itemow; i ++)
2195 {
2196 Format(item, sizeof(item), "%s", nazwy_itemow[i]);
2197 AddMenuItem(menu, "1", item);
2198 }
2199
2200 DisplayMenu(menu, client, 250);
2201}
2202public OpisItemow_Handler(Handle:classhandle, MenuAction:action, client, Position)
2203{
2204 if(action == MenuAction_Select)
2205 {
2206 new String:Item[32];
2207 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2208 Position ++;
2209
2210 if(StrEqual(Item, "1"))
2211 {
2212 CPrintToChat(client, "{darkred}[COD:MW]{green} Item: %s - %s.", nazwy_itemow[Position], opisy_itemow[Position]);
2213 OpisItemow(client);
2214 }
2215 }
2216 else if(action == MenuAction_End)
2217 CloseHandle(classhandle);
2218}
2219public Action:Odrodzenie(client)
2220{
2221 if(!IsValidClient(client) || !IsPlayerAlive(client))
2222 return;
2223
2224 if(nowa_klasa_gracza[client])
2225 {
2226 if(zapisz_dane[client])
2227 {
2228 zapisz_dane[client] = 0;
2229 ZapiszDane(client);
2230 }
2231
2232 klasa_gracza[client] = nowa_klasa_gracza[client];
2233 nowa_klasa_gracza[client] = 0;
2234 UstawWidocznosc(client, 255);
2235 ilosc_apteczek_gracza[client] = 0;
2236 ilosc_rakiet_gracza[client] = 0;
2237 ilosc_dynamitow_gracza[client] = 0;
2238 CS_UpdateClientModel(client);
2239 WczytajDane(client, klasa_gracza[client]);
2240 }
2241 if(!klasa_gracza[client])
2242 {
2243 if(GetUserFlagBits(client) & VIP_FLAG || GetUserFlagBits(client) & PREMIUM)
2244 {
2245 bonusowe_zdrowie_gracza[client] = 10;
2246 bonusowe_zdrowie_gracza[client] = 10;
2247 bonusowa_wytrzymalosc_gracza[client] = 10;
2248 bonusowa_kondycja_gracza[client] = 10;
2249 vip_gracza[client] = 1;
2250 }
2251 else
2252 {
2253 bonusowe_zdrowie_gracza[client] = 0;
2254 bonusowa_wytrzymalosc_gracza[client] = 0;
2255 bonusowa_kondycja_gracza[client] = 0;
2256 vip_gracza[client] = 0;
2257 }
2258
2259 WybierzKlase(client);
2260 }
2261 else
2262 {
2263 switch(klasa_gracza[client])
2264 {
2265 case Ninja:
2266 {
2267 UstawWidocznosc(client, 75);
2268 SetEntProp(client, Prop_Send, "m_bHasDefuser", 0);
2269 czas_skokow_gracza[client] = 0;
2270 }
2271 case Ninja_vip:
2272 {
2273 UstawWidocznosc(client, 35);
2274 SetEntProp(client, Prop_Send, "m_bHasDefuser", 0);
2275 }
2276 case Szpieg:
2277 {
2278 CreateTimer(0.1, SetSzpiegModels, client);
2279 }
2280
2281 case Inzynier: ilosc_rakiet_gracza[client] = 3;
2282 case Saper: ilosc_dynamitow_gracza[client] = 2;
2283 case Medyk: ilosc_apteczek_gracza[client] = 1;
2284 case Medyk_vip: ilosc_apteczek_gracza[client] = 2;
2285 case WsparcieOgniowe: ilosc_rakiet_gracza[client] = 1;
2286 case Kangur: czas_skokow_gracza[client] = 0;
2287 case Hibana: czas_skokow_gracza[client] = 0;
2288 }
2289 switch(informacje_itemu_gracza[client][0])
2290 {
2291 case 4: informacje_itemu_gracza[client][1] = 1;
2292 case 14: informacje_itemu_gracza[client][1] = 3;
2293 case 19: informacje_itemu_gracza[client][1] = 1;
2294 case 22: informacje_itemu_gracza[client][1] = 0;
2295 case 25: informacje_itemu_gracza[client][1] = 1;
2296 case 33: GivePlayerItem(client, nazwy_broni[36]);
2297 case 38: informacje_itemu_gracza[client][1] = 1;
2298 case 45: SetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropInfo("CCSPlayer", "m_iAccount"))+3000);
2299 }
2300 if(punkty_gracza[client])
2301 PrzydzielPunkty(client);
2302
2303 for(new slot = 0; slot < 5; slot ++)
2304 GivePlayerItem(client, nazwy_broni[bronie_klas[klasa_gracza[client]][slot]]);
2305 }
2306
2307 wymiana[client] = true;
2308 maksymalna_inteligencja_gracza[client] = (inteligencja_gracza[client]+bonusowa_inteligencja_gracza[client])/6;
2309 maksymalne_zdrowie_gracza[client] = umiejetnosci_klas[klasa_gracza[client]][1]+zdrowie_gracza[client]+bonusowe_zdrowie_gracza[client];
2310 maksymalne_obrazenia_gracza[client] = (obrazenia_gracza[client]+bonusowe_obrazenia_gracza[client])*0.003;
2311 maksymalna_wytrzymalosc_gracza[client] = (umiejetnosci_klas[klasa_gracza[client]][2]+wytrzymalosc_gracza[client]+bonusowa_wytrzymalosc_gracza[client])*0.0008;
2312 maksymalna_kondycja_gracza[client] = 0.9*(umiejetnosci_klas[klasa_gracza[client]][3]*0.01)+(kondycja_gracza[client]+bonusowa_kondycja_gracza[client])*0.001;
2313
2314 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), maksymalne_zdrowie_gracza[client]);
2315 SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", maksymalna_kondycja_gracza[client]);
2316}
2317public Action:DajItem(client, item)
2318{
2319 if(informacje_itemu_gracza[client][0])
2320 UsunItem(client);
2321
2322 moc_itemu[client] = 100;
2323 informacje_itemu_gracza[client][0] = item;
2324
2325 switch(item)
2326 {
2327 case 1:
2328 {
2329 if(IsPlayerAlive(client))
2330 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+100);
2331
2332 bonusowe_zdrowie_gracza[client] += 100;
2333 bonusowa_kondycja_gracza[client] -= 100;
2334 }
2335 case 2:
2336 {
2337 if(IsPlayerAlive(client))
2338 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+50);
2339
2340 bonusowe_zdrowie_gracza[client] += 50;
2341 bonusowa_kondycja_gracza[client] -= 50;
2342 }
2343 case 4: informacje_itemu_gracza[client][1] = 1;
2344 case 7: informacje_itemu_gracza[client][1] = GetRandomInt(2, 4);
2345 case 10: bonusowa_wytrzymalosc_gracza[client] += 100;
2346 case 11: bonusowa_kondycja_gracza[client] += 100;
2347 case 12: bonusowa_inteligencja_gracza[client] += 100;
2348 case 14: informacje_itemu_gracza[client][1] = 3;
2349 case 19: informacje_itemu_gracza[client][1] = 1;
2350 case 21: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
2351 case 25: informacje_itemu_gracza[client][1] = 1;
2352 case 27: informacje_itemu_gracza[client][1] = GetRandomInt(10, 15);
2353 case 28: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
2354 case 33:
2355 {
2356 if(IsPlayerAlive(client))
2357 GivePlayerItem(client, nazwy_broni[36]);
2358
2359 informacje_itemu_gracza[client][1] = GetRandomInt(4, 8);
2360 }
2361 case 34:
2362 {
2363 if(IsPlayerAlive(client))
2364 UstawWidocznosc(client, 120);
2365 }
2366 case 38: informacje_itemu_gracza[client][1] = 1;
2367 case 40: bonusowe_obrazenia_gracza[client] -= 30;
2368 case 41:
2369 {
2370 if(IsPlayerAlive(client))
2371 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)+25);
2372
2373 bonusowa_inteligencja_gracza[client] += 25;
2374 bonusowe_zdrowie_gracza[client] += 25;
2375 bonusowe_obrazenia_gracza[client] += 25;
2376 bonusowa_wytrzymalosc_gracza[client] += 25;
2377 bonusowa_kondycja_gracza[client] += 25;
2378 }
2379 case 42: informacje_itemu_gracza[client][1] = GetRandomInt(10, 15);
2380 case 47: informacje_itemu_gracza[client][1] = GetRandomInt(15, 25);
2381 case 48: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
2382 case 49: informacje_itemu_gracza[client][1] = GetRandomInt(10, 15);
2383 }
2384}
2385public Action:UsunItem(client)
2386{
2387 switch(informacje_itemu_gracza[client][0])
2388 {
2389 case 1:
2390 {
2391 if(IsPlayerAlive(client) && GetClientHealth(client) > 100)
2392 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)-100);
2393
2394 bonusowe_zdrowie_gracza[client] -= 100;
2395 bonusowa_kondycja_gracza[client] += 100;
2396 }
2397 case 2:
2398 {
2399 if(IsPlayerAlive(client) && GetClientHealth(client) > 50)
2400 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)-50);
2401
2402 bonusowe_zdrowie_gracza[client] -= 50;
2403 bonusowa_kondycja_gracza[client] += 50;
2404 }
2405 case 10: bonusowa_wytrzymalosc_gracza[client] -= 100;
2406 case 11: bonusowa_kondycja_gracza[client] -= 100;
2407 case 12: bonusowa_inteligencja_gracza[client] -= 100;
2408 case 13:
2409 {
2410 if(GetEntProp(client, Prop_Send, "m_bNightVisionOn"))
2411 SetEntProp(client, Prop_Send, "m_bNightVisionOn", 0);
2412 }
2413 case 34: UstawWidocznosc(client, 255);
2414 case 40: bonusowe_obrazenia_gracza[client] += 30;
2415 case 41:
2416 {
2417 if(IsPlayerAlive(client) && GetClientHealth(client) > 25)
2418 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), GetClientHealth(client)-25);
2419
2420 bonusowa_inteligencja_gracza[client] -= 25;
2421 bonusowe_zdrowie_gracza[client] -= 25;
2422 bonusowe_obrazenia_gracza[client] -= 25;
2423 bonusowa_wytrzymalosc_gracza[client] -= 25;
2424 bonusowa_kondycja_gracza[client] -= 25;
2425 }
2426 }
2427
2428 moc_itemu[client] = 0;
2429 informacje_itemu_gracza[client][0] = 0;
2430 informacje_itemu_gracza[client][1] = 0;
2431}
2432public Action:PlayerSpawn(Handle:event_spawn, String:name[], bool:dontBroadcast)
2433{
2434 new client = GetClientOfUserId(GetEventInt(event_spawn, "userid"));
2435 if(!IsValidClient(client) || IsFakeClient(client))
2436 return;
2437
2438 for(new slot = 0; slot < 4; slot ++)
2439 {
2440 new weapon_index = -1;
2441 while((weapon_index = GetPlayerWeaponSlot(client, slot)) != -1)
2442 {
2443 if(IsValidEntity(weapon_index))
2444 {
2445 RemovePlayerItem(client, weapon_index);
2446 AcceptEntityInput(weapon_index, "kill");
2447 }
2448 }
2449 }
2450
2451 GivePlayerItem(client, nazwy_broni[40]);
2452 Odrodzenie(client);
2453}
2454public Action:PlayerDeath(Handle:event_death, String:name[], bool:dontBroadcast)
2455{
2456 new client = GetClientOfUserId(GetEventInt(event_death, "userid"));
2457 new killer = GetClientOfUserId(GetEventInt(event_death, "attacker"));
2458 new assister = GetClientOfUserId(GetEventInt(event_death, "assister"));
2459
2460 if(!IsValidClient(client) || !IsValidClient(killer))
2461 return;
2462
2463 if(klasa_gracza[killer] && GetClientTeam(client) != GetClientTeam(killer))
2464 {
2465 new doswiadczenie = 0;
2466
2467 switch(klasa_gracza[killer])
2468 {
2469 case Echo:
2470 {
2471 if(informacje_itemu_gracza[client][0] != 29)
2472 SetEntData(killer, FindDataMapInfo(killer, "m_iHealth"), GetClientHealth(killer)+25<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+25: maksymalne_zdrowie_gracza[killer]);
2473 }
2474 }
2475
2476 switch(informacje_itemu_gracza[killer][0])
2477 {
2478 case 0:
2479 {
2480 DajItem(killer, GetRandomInt(1, sizeof nazwy_itemow-1));
2481 CPrintToChat(killer, "{darkred}[COD:MW]{green} Zdobyles %s.", nazwy_itemow[informacje_itemu_gracza[killer][0]]);
2482 }
2483 case 5:
2484 {
2485 if(informacje_itemu_gracza[client][0] != 29)
2486 SetEntData(killer, FindDataMapInfo(killer, "m_iHealth"), GetClientHealth(killer)+50<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+50: maksymalne_zdrowie_gracza[killer]);
2487 }
2488 case 8:
2489 {
2490 if(informacje_itemu_gracza[client][0] != 29)
2491 doswiadczenie += 300;
2492 }
2493 case 9:
2494 {
2495 if(informacje_itemu_gracza[client][0] != 29)
2496 SetEntData(killer, FindSendPropInfo("CCSPlayer", "m_iAccount"), GetEntData(killer, FindSendPropInfo("CCSPlayer", "m_iAccount"))+300);
2497 }
2498 case 39:
2499 {
2500 if(informacje_itemu_gracza[client][0] != 29)
2501 SetEntData(killer, FindDataMapInfo(killer, "m_iHealth"), GetClientHealth(killer)+20<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+20: maksymalne_zdrowie_gracza[killer]);
2502 }
2503 case 44:
2504 {
2505 if(informacje_itemu_gracza[client][0] != 29)
2506 doswiadczenie += 100;
2507 }
2508 }
2509
2510 if(misja_gracza[killer])
2511 {
2512 if(klasa_gracza[client] == nazwy_misji[misja_gracza[killer]][2] || informacje_itemu_gracza[client][0] == nazwy_misji[misja_gracza[killer]][2])
2513 zabicia_gracza[killer] ++;
2514
2515 if(zabicia_gracza[killer] == nazwy_misji[misja_gracza[killer]][1])
2516 {
2517 doswiadczenie += nazwy_misji[misja_gracza[killer]][3];
2518 CPrintToChat(killer, "{darkred}[COD:MW]{green} Wykonales zadanie: [%s]. Gratulacje!", opisy_misji[misja_gracza[killer]]);
2519 misja_gracza[killer] = 0;
2520 zabicia_gracza[killer] = 0;
2521 }
2522 }
2523
2524 new String:godzina_str[8];
2525
2526 if(headshot[client])
2527 {
2528 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
2529 new godzina = StringToInt(godzina_str);
2530 if(godzina >= 6 && godzina < 22)
2531 {
2532 if(vip_gracza[killer])
2533 doswiadczenie += poziom_gracza[client]+xp_kill_vip+xp_kill_hs_vip;
2534 else
2535 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_hs;
2536 }
2537 else
2538 {
2539 if(vip_gracza[killer])
2540 doswiadczenie += poziom_gracza[client]+xp_kill_vip+xp_kill_hs_vip*2;
2541 else
2542 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_hs*2;
2543 }
2544
2545 CPrintToChat(killer, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za zabicie przeciwnika strzalem w glowe.", doswiadczenie);
2546 ClientCommand(killer, "play *%s", dzwieki_serwera[GetRandomInt(2, 5)]);
2547 }
2548 else
2549 {
2550 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
2551 new godzina = StringToInt(godzina_str);
2552 if(godzina >= 6 && godzina < 22)
2553 {
2554 if(vip_gracza[killer])
2555 doswiadczenie += poziom_gracza[client]+xp_kill_vip;
2556 else
2557 doswiadczenie += poziom_gracza[client]+xp_kill;
2558 }
2559 else
2560 {
2561 if(vip_gracza[killer])
2562 doswiadczenie += poziom_gracza[client]+xp_kill_vip*2;
2563 else
2564 doswiadczenie += poziom_gracza[client]+xp_kill*2;
2565 }
2566 CPrintToChat(killer, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za zabicie przeciwnika.", doswiadczenie);
2567 }
2568 DodajDoswiadczenie(killer, doswiadczenie);
2569
2570 if(IsValidClient(assister) && assister != -1)
2571 {
2572 int doswiadczenieassister = 0;
2573
2574 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
2575 new godzina = StringToInt(godzina_str);
2576 if(godzina >= 6 && godzina < 22)
2577 {
2578 if(vip_gracza[assister])
2579 doswiadczenieassister += poziom_gracza[client]+xp_asysta_vip * 2;
2580 else
2581 doswiadczenieassister += poziom_gracza[client]+xp_asysta * 2;
2582 }
2583 else
2584 {
2585 if(vip_gracza[assister])
2586 doswiadczenieassister += poziom_gracza[client]+xp_asysta_vip;
2587 else
2588 doswiadczenieassister += poziom_gracza[client]+xp_asysta;
2589 }
2590
2591 CPrintToChat(assister, "{darkred}[COD:MW]{green} Dostales %i doswiadczenia za asyste.", doswiadczenieassister);
2592 DodajDoswiadczenie(assister, doswiadczenieassister);
2593 }
2594
2595 }
2596 switch(informacje_itemu_gracza[client][0])
2597 {
2598 case 7:
2599 {
2600 if(GetRandomInt(1, informacje_itemu_gracza[client][1]) == 1)
2601 CreateTimer(0.1, Wskrzes, client, TIMER_FLAG_NO_MAPCHANGE);
2602 }
2603 case 37:
2604 {
2605 new Float:fOrigin[3];
2606 new Float:iOrigin[3];
2607 GetClientEyePosition(client, Float:fOrigin);
2608
2609 for(new i = 1; i <= MaxClients; i++)
2610 {
2611 if(!IsClientInGame(i) || !IsPlayerAlive(i))
2612 continue;
2613
2614 if(GetClientTeam(client) == GetClientTeam(i))
2615 continue;
2616
2617 GetClientEyePosition(i, Float:iOrigin);
2618 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
2619 SDKHooks_TakeDamage(i, client, client, ((informacje_itemu_gracza[i][0] == 29)? 0.0: 1.0+GetClientHealth(i)), DMG_GENERIC);
2620 }
2621
2622 TE_SetupExplosion(fOrigin, sprite_blue, 10.0, 1, 0, 200, 200);
2623 TE_SendToAll();
2624 }
2625 }
2626 if(informacje_itemu_gracza[client][0])
2627 {
2628 if(moc_itemu[client] > 20)
2629 moc_itemu[client] -= 20;
2630 else
2631 {
2632 UsunItem(client);
2633 CPrintToChat(client, "{darkred}[COD:MW]{green} Twoj item ulegl zniszczeniu.");
2634 }
2635 }
2636}
2637public Action:PlayerBlind(Handle:event_blind, const String:name[], bool:dontBroadcast)
2638{
2639 new client = GetClientOfUserId(GetEventInt(event_blind, "userid"));
2640 if(!IsValidClient(oslepiajacy_gracz) || !IsValidClient(client))
2641 return;
2642
2643 if(client == oslepiajacy_gracz)
2644 return;
2645
2646 if(GetClientTeam(client) == GetClientTeam(oslepiajacy_gracz) || informacje_itemu_gracza[client][0] == 39 && informacje_itemu_gracza[oslepiajacy_gracz][0] != 29)
2647 SetEntDataFloat(client, FindSendPropInfo("CCSPlayer", "m_flFlashMaxAlpha"), 0.5);
2648}
2649public Action:HeDetonate(Handle:event_hedetonate, const String:name[], bool:dontBroadcast)
2650{
2651 new client = GetClientOfUserId(GetEventInt(event_hedetonate, "userid"));
2652 if(!IsValidClient(client))
2653 return;
2654
2655 new damage = 0;
2656
2657 new Float:fOrigin[3];
2658 new Float:iOrigin[3];
2659 fOrigin[0] = GetEventFloat(event_hedetonate, "x");
2660 fOrigin[1] = GetEventFloat(event_hedetonate, "y");
2661 fOrigin[2] = GetEventFloat(event_hedetonate, "z");
2662
2663 for(new i = 1; i <= MaxClients; i++)
2664 {
2665 if(!IsClientInGame(i) || !IsPlayerAlive(i))
2666 continue;
2667
2668 GetClientAbsOrigin(i, Float:iOrigin);
2669 if(GetClientTeam(client) != GetClientTeam(i) && damage)
2670 {
2671 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
2672 SDKHooks_TakeDamage(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+GetClientHealth(i)): ((klasa_gracza[i] == Obronca || informacje_itemu_gracza[i][0] == 30)? 0.0: 50.0+maksymalna_inteligencja_gracza[client]), DMG_GENERIC);
2673 }
2674 else if(client == i)
2675 {
2676 new Float:dystans = GetVectorDistance(fOrigin, iOrigin);
2677 if(dystans <= 200.0)
2678 SlapPlayer(i, 201-RoundFloat(dystans), true);
2679 }
2680 }
2681 if(damage)
2682 {
2683 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);
2684 TE_SendToAll();
2685 }
2686}
2687public Action:FbDetonate(Handle:event_fbdetonate, const String:name[], bool:dontBroadcast)
2688{
2689 new client = GetClientOfUserId(GetEventInt(event_fbdetonate, "userid"));
2690 if(!IsValidClient(client))
2691 return;
2692
2693 oslepiajacy_gracz = client;
2694}
2695public Action:DodajDoswiadczenie(client, doswiadczenie)
2696{
2697 if(!IsValidClient(client) || !klasa_gracza[client])
2698 return;
2699
2700 doswiadczenie_gracza[client] += doswiadczenie;
2701 while(doswiadczenie_gracza[client] >= doswiadczenie_poziomu[poziom_gracza[client]] && poziom_gracza[client] < limit_poziomu)
2702 {
2703 poziom_gracza[client] ++;
2704 punkty_gracza[client] = (poziom_gracza[client]/co_ile_lv_punkt)-inteligencja_gracza[client]-zdrowie_gracza[client]-obrazenia_gracza[client]-wytrzymalosc_gracza[client]-kondycja_gracza[client];
2705 ClientCommand(client, "play *%s", dzwieki_serwera[1]);
2706 }
2707 while(doswiadczenie_gracza[client] < doswiadczenie_poziomu[poziom_gracza[client]-1])
2708 {
2709 poziom_gracza[client] --;
2710 ResetujPunkty(client);
2711 }
2712 if(poziom_gracza[client] > limit_poziomu)
2713 {
2714 poziom_gracza[client] = limit_poziomu;
2715 ResetujPunkty(client);
2716 }
2717 if(!zapisz_dane[client])
2718 zapisz_dane[client] = 1;
2719}
2720public Action:PrzydzielPunkty(client)
2721{
2722 new String:tytul[512];
2723 new String:szybkosc[512];
2724 new String:inteligencja[512];
2725 new String:zdrowie[512];
2726 new String:obrazenia[512];
2727 new String:wytrzymalosc[512];
2728 new String:kondycja[512];
2729 Format(tytul, sizeof(tytul), "Przydziel Punkty (%i):", punkty_gracza[client]);
2730 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
2731 Format(szybkosc, sizeof(szybkosc), "Ile dodawac: ALL (Po ile punktow dodawac do statystyk)");
2732 else
2733 Format(szybkosc, sizeof(szybkosc), "Ile dodawac: %i (Po ile punktow dodawac do statystyk)", ile_rozdawac[szybkosc_rozdania[client]]);
2734 Format(inteligencja, sizeof(inteligencja), "Inteligencja: %i/%i (Zwieksza umiejetnosci klasy o %i punktow)", inteligencja_gracza[client], limit_inteligencji, inteligencja_gracza[client]/6);
2735 Format(zdrowie, sizeof(zdrowie), "Zdrowie: %i/%i (Zwieksza zdrowie o %i punktow)", zdrowie_gracza[client], limit_zdrowia, zdrowie_gracza[client]);
2736 Format(obrazenia, sizeof(obrazenia), "Obrazenia: %i/%i (Zwieksza zadawane obrazenia o %i%%)", obrazenia_gracza[client], limit_obrazen, RoundFloat(obrazenia_gracza[client]*0.3));
2737 Format(wytrzymalosc, sizeof(wytrzymalosc), "Wytrzymalosc: %i/%i (Zmniejsza otrzymywane obrazenia o %i%%)", wytrzymalosc_gracza[client], limit_wytrzymalosci, RoundFloat(wytrzymalosc_gracza[client]*0.08));
2738 Format(kondycja, sizeof(kondycja), "Kondycja: %i/%i (Zwieksza tempo chodu o %i%%)", kondycja_gracza[client], limit_kondycji, RoundFloat(kondycja_gracza[client]*0.1));
2739
2740 new Handle:menu = CreateMenu(PrzydzielPunkty_Handler);
2741 SetMenuTitle(menu, tytul);
2742 AddMenuItem(menu, "1", szybkosc);
2743 AddMenuItem(menu, "2", inteligencja);
2744 AddMenuItem(menu, "3", zdrowie);
2745 AddMenuItem(menu, "4", obrazenia);
2746 AddMenuItem(menu, "5", wytrzymalosc);
2747 AddMenuItem(menu, "6", kondycja);
2748 DisplayMenu(menu, client, 250);
2749}
2750public PrzydzielPunkty_Handler(Handle:classhandle, MenuAction:action, client, Position)
2751{
2752 if(action == MenuAction_Select)
2753 {
2754 if(punkty_gracza[client])
2755 {
2756 new String:Item[32];
2757 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2758 new ilosc;
2759
2760 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
2761 ilosc = punkty_gracza[client];
2762 else
2763 ilosc = (ile_rozdawac[szybkosc_rozdania[client]] > punkty_gracza[client])? punkty_gracza[client]: ile_rozdawac[szybkosc_rozdania[client]];
2764
2765 if(StrEqual(Item, "1"))
2766 {
2767 if(szybkosc_rozdania[client] == 2)
2768 szybkosc_rozdania[client] = 0;
2769 else
2770 szybkosc_rozdania[client] ++;
2771 }
2772 else if(StrEqual(Item, "2"))
2773 {
2774 if(inteligencja_gracza[client] != limit_inteligencji)
2775 {
2776 if(inteligencja_gracza[client] + ilosc <= limit_inteligencji)
2777 {
2778 inteligencja_gracza[client] += ilosc;
2779 punkty_gracza[client] -= ilosc;
2780 }
2781 else
2782 {
2783 new punktydododania;
2784 punktydododania = limit_inteligencji - inteligencja_gracza[client];
2785 inteligencja_gracza[client] += punktydododania;
2786 punkty_gracza[client] -= punktydododania;
2787 }
2788 }
2789 else
2790 CPrintToChat(client, "{darkred}[COD:MW]{green} Maksymalny poziom inteligencji osiagniety!");
2791 }
2792 else if(StrEqual(Item, "3"))
2793 {
2794 if(zdrowie_gracza[client] != limit_zdrowia)
2795 {
2796 if(zdrowie_gracza[client] + ilosc <= limit_zdrowia)
2797 {
2798 zdrowie_gracza[client] += ilosc;
2799 punkty_gracza[client] -= ilosc;
2800 }
2801 else
2802 {
2803 new punktydododania;
2804 punktydododania = limit_zdrowia - zdrowie_gracza[client];
2805 zdrowie_gracza[client] += punktydododania;
2806 punkty_gracza[client] -= punktydododania;
2807 }
2808 }
2809 else
2810 CPrintToChat(client, "{darkred}[COD:MW]{green} Maksymalny poziom zdrowia osiagniety!");
2811 }
2812 else if(StrEqual(Item, "4"))
2813 {
2814 if(obrazenia_gracza[client] != limit_obrazen)
2815 {
2816 if(obrazenia_gracza[client] + ilosc <= limit_obrazen)
2817 {
2818 obrazenia_gracza[client] += ilosc;
2819 punkty_gracza[client] -= ilosc;
2820 }
2821 else
2822 {
2823 new punktydododania;
2824 punktydododania = limit_obrazen - obrazenia_gracza[client];
2825 obrazenia_gracza[client] += punktydododania;
2826 punkty_gracza[client] -= punktydododania;
2827 }
2828 }
2829 else
2830 CPrintToChat(client, "{darkred}[COD:MW]{green} Maksymalny poziom obrazen osiagniety!");
2831 }
2832 else if(StrEqual(Item, "5"))
2833 {
2834 if(wytrzymalosc_gracza[client] != limit_wytrzymalosci)
2835 {
2836 if(wytrzymalosc_gracza[client] + ilosc <= limit_wytrzymalosci)
2837 {
2838 wytrzymalosc_gracza[client] += ilosc;
2839 punkty_gracza[client] -= ilosc;
2840 }
2841 else
2842 {
2843 new punktydododania;
2844 punktydododania = limit_wytrzymalosci - wytrzymalosc_gracza[client];
2845 wytrzymalosc_gracza[client] += punktydododania;
2846 punkty_gracza[client] -= punktydododania;
2847 }
2848 }
2849 else
2850 CPrintToChat(client, "{darkred}[COD:MW]{green} Maksymalny poziom wytrzymalosci osiagniety!");
2851 }
2852 else if(StrEqual(Item, "6"))
2853 {
2854 if(kondycja_gracza[client] != limit_kondycji)
2855 {
2856 if(kondycja_gracza[client] + ilosc <= limit_kondycji)
2857 {
2858 kondycja_gracza[client] += ilosc;
2859 punkty_gracza[client] -= ilosc;
2860 }
2861 else
2862 {
2863 new punktydododania;
2864 punktydododania = limit_kondycji - kondycja_gracza[client];
2865 kondycja_gracza[client] += punktydododania;
2866 punkty_gracza[client] -= punktydododania;
2867 }
2868 }
2869 else
2870 CPrintToChat(client, "{darkred}[COD:MW]{green} Maksymalny poziom kondycji osiagniety!");
2871 }
2872 if(punkty_gracza[client])
2873 PrzydzielPunkty(client);
2874
2875 if(!zapisz_dane[client])
2876 zapisz_dane[client] = 1;
2877 }
2878 }
2879 else if(action == MenuAction_End)
2880 CloseHandle(classhandle);
2881}
2882public Action:ResetujPunkty(client)
2883{
2884 punkty_gracza[client] = poziom_gracza[client]/co_ile_lv_punkt;
2885 inteligencja_gracza[client] = 0;
2886 zdrowie_gracza[client] = 0;
2887 obrazenia_gracza[client] = 0;
2888 wytrzymalosc_gracza[client] = 0;
2889 kondycja_gracza[client] = 0;
2890 CPrintToChat(client, "{darkred}[COD:MW]{green} Umiejetnosci zostaly zresetowane.");
2891
2892 if(punkty_gracza[client])
2893 {
2894 PrzydzielPunkty(client);
2895 if(!zapisz_dane[client])
2896 zapisz_dane[client] = 1;
2897 }
2898}
2899public Action:OpisItemu(client)
2900{
2901 new String:opis_itemu[128];
2902 new String:losowa_wartosc[4];
2903 IntToString(informacje_itemu_gracza[client][1], losowa_wartosc, 3);
2904 Format(opis_itemu, sizeof(opis_itemu), opisy_itemow[informacje_itemu_gracza[client][0]]);
2905 ReplaceString(opis_itemu, sizeof(opis_itemu), "LW", losowa_wartosc);
2906
2907 CPrintToChat(client, "{darkred}[COD:MW]{green} Item: %s [%i%%].", nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]);
2908 CPrintToChat(client, "{darkred}[COD:MW]{green} Opis: %s.", opis_itemu);
2909}
2910public Action:WyrzucItem(client)
2911{
2912 if(informacje_itemu_gracza[client][0])
2913 {
2914 UsunItem(client);
2915 CPrintToChat(client, "{darkred}[COD:MW]{green} Wyrzuciles swoj item.");
2916 }
2917 else
2918 CPrintToChat(client, "{darkred}[COD:MW]{green} Nie masz zadnego itemu.");
2919}
2920public Action:ZmienDruzyne(client)
2921{
2922 if(GetClientTeam(client) == CS_TEAM_SPECTATOR)
2923 {
2924 switch(GetRandomInt(0, 1))
2925 {
2926 case 0:
2927 {
2928 ChangeClientTeam(client, CS_TEAM_T);
2929 CPrintToChat(client, "{darkred}[COD:MW]{green} Zostales przeniesiony do TT.");
2930 }
2931 case 1:
2932 {
2933 ChangeClientTeam(client, CS_TEAM_CT);
2934 CPrintToChat(client, "{darkred}[COD:MW]{green} Zostales przeniesiony do CT.");
2935 }
2936 }
2937 }
2938 else
2939 ChangeClientTeam(client, CS_TEAM_SPECTATOR);
2940}
2941public Action:CmdExp(client, args)
2942{
2943 new String:arg1[32];
2944 new String:arg2[6];
2945 GetCmdArg(1, arg1, sizeof(arg1));
2946 GetCmdArg(2, arg2, sizeof(arg2));
2947 new target = FindTarget(client, arg1);
2948 new zmienna = StringToInt(arg2);
2949
2950 if(!(target == -1))
2951 {
2952 if((-zmienna) > doswiadczenie_gracza[target])
2953 PrintToConsole(client, "[COD:MW] Chciales odjac graczowi zbyt duzo doswiadczenia.");
2954 else
2955 {
2956 DodajDoswiadczenie(target, zmienna);
2957 LogMessage("%s - dal graczowi %s (%i expa).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
2958 PrintToConsole(client, "[COD:MW] Dales graczowi %s (%i expa).", nazwa_gracza[target], zmienna);
2959 }
2960 }
2961}
2962public Action:CmdLvl(client, args)
2963{
2964 new String:arg1[32];
2965 new String:arg2[6];
2966 GetCmdArg(1, arg1, sizeof(arg1));
2967 GetCmdArg(2, arg2, sizeof(arg2));
2968 new target = FindTarget(client, arg1);
2969 new zmienna = StringToInt(arg2);
2970
2971 if(!(target == -1))
2972 {
2973 if((-zmienna) > poziom_gracza[target])
2974 PrintToConsole(client, "[COD:MW] Chciales ustawic graczowi zbyt maly poziom.");
2975 else
2976 {
2977 if(poziom_gracza[target] + zmienna > limit_poziomu)
2978 PrintToConsole(client, "[COD:MW] Chciales ustawic graczowi zbyt duzy poziom.");
2979 else
2980 {
2981 DodajDoswiadczenie(target, doswiadczenie_poziomu[poziom_gracza[target] += zmienna]);
2982 LogMessage("%s - dal graczowi %s (%i Lv).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
2983 PrintToConsole(client, "[COD:MW] Dales graczowi %s (%i Lv).", nazwa_gracza[target], zmienna);
2984 }
2985 }
2986 }
2987}
2988public Action:CmdItem(client, args)
2989{
2990 new String:arg1[32];
2991 new String:arg2[6];
2992 GetCmdArg(1, arg1, sizeof(arg1));
2993 GetCmdArg(2, arg2, sizeof(arg2));
2994 new target = FindTarget(client, arg1);
2995 new zmienna = StringToInt(arg2);
2996
2997 if(!(target == -1))
2998 {
2999 if(zmienna < 1 || zmienna > sizeof nazwy_itemow-1)
3000 PrintToConsole(client, "[COD:MW] Podales nieprawidlowy numer itemu.");
3001 else
3002 {
3003 DajItem(target, zmienna);
3004 LogMessage("%s - dal graczowi %s (%i item).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
3005 PrintToConsole(client, "[COD:MW] Dales graczowi %s (%i item).", nazwa_gracza[target], zmienna);
3006 }
3007 }
3008}
3009public Action:DataBaseConnect()
3010{
3011 sql = SQL_Connect("codmod_lvl_sql", true, dbError, sizeof(dbError));
3012 if(sql == INVALID_HANDLE)
3013 PrintToServer("Could not connect: %s", dbError);
3014
3015 SQL_LockDatabase(sql);
3016 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;");
3017 SQL_UnlockDatabase(sql);
3018}
3019public Action:TaskZapiszDane(Handle:timer, any:client)
3020{
3021 if(!IsValidClient(client))
3022 return;
3023
3024 if(zapisz_dane[client])
3025 {
3026 zapisz_dane[client] = 0;
3027 ZapiszDane(client);
3028 }
3029
3030 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
3031}
3032public Action:ZapiszDane(client)
3033{
3034 if(!klasa_gracza[client])
3035 return;
3036
3037 new String:tmp[1024];
3038 new String:authid[64];
3039 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
3040 return;
3041
3042 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], zabicia_gracza[client]);
3043 SQL_TQuery(sql, ZapiszDane_Handler, tmp, client);
3044}
3045public ZapiszDane_Handler(Handle:owner, Handle:query, const String:error[], any:client)
3046{
3047 if(query == INVALID_HANDLE)
3048 {
3049 LogError("Save error: %s", error);
3050 return;
3051 }
3052}
3053public Action:WczytajDane(client, klasa)
3054{
3055 poziom_gracza[client] = poziom_klasy_gracza[client][klasa];
3056 doswiadczenie_gracza[client] = doswiadczenie_klasy_gracza[client][klasa];
3057 inteligencja_gracza[client] = inteligencja_klasy_gracza[client][klasa];
3058 zdrowie_gracza[client] = zdrowie_klasy_gracza[client][klasa];
3059 obrazenia_gracza[client] = obrazenia_klasy_gracza[client][klasa];
3060 wytrzymalosc_gracza[client] = wytrzymalosc_klasy_gracza[client][klasa];
3061 kondycja_gracza[client] = kondycja_klasy_gracza[client][klasa];
3062 misja_gracza[client] = misja_klasy_gracza[client][klasa];
3063 zabicia_gracza[client] = zabicia_klasy_gracza[client][klasa];
3064 punkty_gracza[client] = (poziom_gracza[client]/co_ile_lv_punkt)-inteligencja_gracza[client]-zdrowie_gracza[client]-obrazenia_gracza[client]-wytrzymalosc_gracza[client]-kondycja_gracza[client];
3065 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
3066}
3067public Action:WybierzMisje(client)
3068{
3069 if(klasa_gracza[client])
3070 {
3071 if(misja_gracza[client])
3072 {
3073 new Handle:menu = CreateMenu(WybierzMisje_Handler);
3074 SetMenuTitle(menu, "Menu Misje:");
3075 AddMenuItem(menu, "1", "Opis Misji");
3076 AddMenuItem(menu, "2", "Anuluj Misje");
3077 DisplayMenu(menu, client, 250);
3078 }
3079 else
3080 {
3081 new String:misja[512];
3082 new Handle:menu = CreateMenu(WybierzMisje_Handler);
3083 SetMenuTitle(menu, "Wybierz Misje:");
3084 for(new i = 1; i <sizeof nazwy_misji; i ++)
3085 {
3086 Format(misja, sizeof(misja), "%s (Od %dLv)", opisy_misji[i], nazwy_misji[i][0]);
3087 AddMenuItem(menu, "3", misja);
3088 }
3089
3090 DisplayMenu(menu, client, 250);
3091 }
3092 }
3093 else
3094 CPrintToChat(client, "{darkred}[COD:MW]{green} Musisz miec wybrana klase aby moc wlaczyc misje!");
3095}
3096public WybierzMisje_Handler(Handle:classhandle, MenuAction:action, client, Position)
3097{
3098 if(action == MenuAction_Select)
3099 {
3100 new String:Item[32];
3101 GetMenuItem(classhandle, Position, Item, sizeof(Item));
3102 Position++;
3103
3104 if(StrEqual(Item, "1"))
3105 OpisMisji(client);
3106 else if(StrEqual(Item, "2"))
3107 {
3108 misja_gracza[client] = 0;
3109 zabicia_gracza[client] = 0;
3110 if(!zapisz_dane[client])
3111 zapisz_dane[client] = 1;
3112
3113 CPrintToChat(client, "{darkred}[COD:MW]{green} Anulowales swoje aktualne zadanie! Wpisz /misja aby rozpoczac.");
3114 }
3115 else if(StrEqual(Item, "3"))
3116 {
3117 if(poziom_gracza[client] >= nazwy_misji[Position][0])
3118 {
3119 misja_gracza[client] = Position;
3120 if(!zapisz_dane[client])
3121 zapisz_dane[client] = 1;
3122
3123 CPrintToChat(client, "{darkred}[COD:MW]{green} Wybrales zadanie: [%s]. Powodzenia!", opisy_misji[Position]);
3124 }
3125 else
3126 {
3127 WybierzMisje(client);
3128 CPrintToChat(client, "{darkred}[COD:MW]{green} Wybrane zadanie dostepne jest od %dLv!", nazwy_misji[Position][0]);
3129 }
3130 }
3131 }
3132 else if(action == MenuAction_End)
3133 CloseHandle(classhandle);
3134}
3135public Action:StworzRakiete(client)
3136{
3137 if(ilosc_rakiet_gracza[client])
3138 {
3139 new ent = CreateEntityByName("hegrenade_projectile");
3140 if(ent == -1)
3141 return;
3142
3143 new Float:OwnerAng[3];
3144 new Float:OwnerPos[3];
3145 new Float:InitialPos[3];
3146 new Float:InitialVec[3];
3147 new Float:InitialAng[3];
3148 SetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity", client);
3149 GetClientEyeAngles(client, OwnerAng);
3150 GetClientEyePosition(client, OwnerPos);
3151 TR_TraceRayFilter(OwnerPos, OwnerAng, MASK_SOLID, RayType_Infinite, WybuchEnta, ent);
3152 TR_GetEndPosition(InitialPos);
3153 MakeVectorFromPoints(OwnerPos, InitialPos, InitialVec);
3154 NormalizeVector(InitialVec, InitialVec);
3155 ScaleVector(InitialVec, 1000.0);
3156 GetVectorAngles(InitialVec, InitialAng);
3157 DispatchSpawn(ent);
3158 ActivateEntity(ent);
3159 SetEntityModel(ent, modele_serwera[11]);
3160 SetEntityMoveType(ent, MOVETYPE_FLY);
3161 TeleportEntity(ent, OwnerPos, InitialAng, InitialVec);
3162 SDKHook(ent, SDKHook_StartTouchPost, DotykRakiety);
3163 ilosc_rakiet_gracza[client]--;
3164 }
3165 else
3166 CPrintToChat(client, "{darkred}[COD:MW]{green} Wykorzystales juz moc swojej klasy w tej rundzie!");
3167}
3168public Action:DotykRakiety(ent, other)
3169{
3170 if(GetEntProp(other, Prop_Data, "m_nSolidType") && !(GetEntProp(other, Prop_Data, "m_usSolidFlags") & 0x0004))
3171 {
3172 new MissileOwner = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity");
3173 if(IsValidClient(MissileOwner))
3174 {
3175 new Float:MissilePos[3];
3176 new MissileOwnerTeam = GetEntProp(MissileOwner, Prop_Send, "m_iTeamNum");
3177 new ExplosionIndex = CreateEntityByName("env_explosion");
3178 GetEntPropVector(ent, Prop_Send, "m_vecOrigin", MissilePos);
3179 SetEntProp(ent, Prop_Send, "m_iTeamNum", MissileOwnerTeam);
3180 DispatchKeyValue(ExplosionIndex,"classname","hegrenade_projectile");
3181 SetEntProp(ExplosionIndex, Prop_Data, "m_spawnflags", 6146);
3182 SetEntProp(ExplosionIndex, Prop_Data, "m_iMagnitude", 40+(inteligencja_gracza[MissileOwner]+bonusowa_inteligencja_gracza[MissileOwner])/6);
3183 SetEntProp(ExplosionIndex, Prop_Data, "m_iRadiusOverride", 200);
3184 DispatchSpawn(ExplosionIndex);
3185 ActivateEntity(ExplosionIndex);
3186 TeleportEntity(ExplosionIndex, MissilePos, NULL_VECTOR, NULL_VECTOR);
3187 SetEntPropEnt(ExplosionIndex, Prop_Send, "m_hOwnerEntity", MissileOwner);
3188 SetEntProp(ExplosionIndex, Prop_Send, "m_iTeamNum", MissileOwnerTeam);
3189 EmitSoundToAll("weapons/hegrenade/explode5.wav", ExplosionIndex, 1, 90);
3190 AcceptEntityInput(ExplosionIndex, "Explode");
3191 DispatchKeyValue(ExplosionIndex,"classname","env_explosion");
3192 AcceptEntityInput(ExplosionIndex, "Kill");
3193 AcceptEntityInput(ent, "Kill");
3194 }
3195 else
3196 AcceptEntityInput(ent, "Kill");
3197 }
3198}
3199public bool:WybuchEnta(ent, contentsMask, any:data)
3200{
3201 return false;
3202}
3203public Action:OpisMisji(client)
3204{
3205 if(klasa_gracza[client])
3206 CPrintToChat(client, "{darkred}[COD:MW]{green} Postep misji: %i/%i osob - Twoje zadanie: %s.", zabicia_gracza[client], nazwy_misji[misja_gracza[client]][1], opisy_misji[misja_gracza[client]]);
3207 else
3208 CPrintToChat(client, "{darkred}[COD:MW]{green} Musisz miec wybrana klase aby moc sprawdzic misje!");
3209}
3210public Action:Wskrzes(Handle:timer, any:client)
3211{
3212 if(!IsValidClient(client))
3213 return;
3214
3215 CS_RespawnPlayer(client);
3216}
3217public Action:RankSerwera(client)
3218{
3219 if(klasa_gracza[client])
3220 {
3221 new String:tmp[512];
3222 new String:authid[64];
3223 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
3224 return;
3225
3226 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]]);
3227 new Handle:query = SQL_Query(sql, tmp);
3228
3229 new pozycja;
3230 if(query == INVALID_HANDLE)
3231 {
3232 SQL_GetError(sql, dbError, sizeof(dbError));
3233 PrintToServer("Failed to INSERT query (error: %s)", dbError);
3234 return;
3235 }
3236 if(SQL_FetchRow(query))
3237 pozycja = SQL_FetchInt(query, 0);
3238
3239 CPrintToChat(client, "{darkred}[COD:MW]{green} Twoja pozycja w CodRanku: %i miejsce - Wymagane: %i doswiadczenie do nastepnego poziomu.", pozycja, doswiadczenie_poziomu[poziom_gracza[client]]-doswiadczenie_gracza[client]);
3240 CloseHandle(query);
3241 }
3242 else
3243 CPrintToChat(client, "{darkred}[COD:MW]{green} Musisz miec wybrana klase aby moc sprawdzic rank!");
3244}
3245public Action:Top15Serwera(client)
3246{
3247 PrintToConsole(client, top_string);
3248 CPrintToChat(client, "{darkred}[COD:MW]{green} Lista CodTop15 Serwera zostala wyswietlona w twojej konsoli.");
3249}
3250public Action:UstawWidocznosc(client, widocznosc)
3251{
3252 SetEntityRenderMode(client, RENDER_TRANSCOLOR);
3253 SetEntityRenderColor(client, 255, 255, 255, widocznosc);
3254}
3255public Action:WczytajTopke()
3256{
3257 new String:tmp[512];
3258 Format(tmp, sizeof(tmp), "SELECT lvl, xp, klasa, steamid FROM codmod ORDER BY xp DESC LIMIT 15;");
3259 new Handle:query = SQL_Query(sql, tmp);
3260
3261 if(query == INVALID_HANDLE)
3262 {
3263 SQL_GetError(sql, dbError, sizeof(dbError));
3264 PrintToServer("Failed to readClassFromDB query (error: %s)", dbError);
3265 return;
3266 }
3267
3268 new String:klasa[512];
3269 new String:authid[64];
3270 new poziom;
3271 new doswiadczenie;
3272 new len = Format(top_string, sizeof(top_string), "Lista CodTop15 Serwera:\nMiejsce | Steam | Klasa | Poziom | Doswiadczenie");
3273 for(new i = 1; SQL_FetchRow(query); i ++)
3274 {
3275 poziom = SQL_FetchInt(query, 0);
3276 doswiadczenie = SQL_FetchInt(query, 1);
3277 SQL_FetchString(query, 2, klasa, sizeof(klasa));
3278 SQL_FetchString(query, 3, authid, sizeof(authid));
3279 len += Format(top_string[len], sizeof(top_string) - len, "\n%i. %s - %s - %i - %i", i, authid, klasa, poziom, doswiadczenie);
3280 }
3281
3282 CloseHandle(query);
3283}
3284public bool:IsValidClient(client)
3285{
3286 if(client >= 1 && client <= MaxClients && IsClientInGame(client))
3287 return true;
3288
3289 return false;
3290}
3291
3292public Action SetSzpiegModels(Handle timer, int client)
3293{
3294 if (IsValidClient(client) && IsPlayerAlive(client) && !IsFakeClient(client))
3295 {
3296 int team = GetClientTeam(client);
3297 int randomct = GetRandomPlayer(3);
3298 int randomtt = GetRandomPlayer(2);
3299
3300 if (team == 2 && randomct != -1)
3301 {
3302 char sModelCT[128];
3303 GetEntPropString(randomct, Prop_Data, "m_ModelName", sModelCT, sizeof(sModelCT));
3304
3305 SetEntityModel(client,sModelCT);
3306 }
3307 else if (team == 3 && randomtt != -1)
3308 {
3309 char sModelT[128];
3310 GetEntPropString(randomtt, Prop_Data, "m_ModelName", sModelT, sizeof(sModelT));
3311
3312 SetEntityModel(client,sModelT);
3313 }
3314 else if(team == 2 && randomct == -1)
3315 {
3316 SetEntityModel(client,"models/player/custom_player/legacy/ctm_gsg9_variantD.mdl");
3317 }
3318 else if(team == 3 && randomtt == -1)
3319 {
3320 SetEntityModel(client,"models/player/custom_player/legacy/tm_phoenix_variantD.mdl");
3321 }
3322 }
3323}
3324
3325//===============Wymiana perka===================
3326
3327void WymienPerk(int client)
3328{
3329 if(IsPlayerAlive(client))
3330 {
3331 if(wymiana[client])
3332 {
3333 wymiana[client] = false;
3334
3335 Menu menu = new Menu(MenuHandler_PlayerEdit);
3336 SetMenuTitle(menu, "Wybierz gracza do wymiany:");
3337
3338 for (int i=1;i<= MaxClients; i++)
3339 {
3340 if(IsValidClient(i))
3341 {
3342 if(GetClientTeam(i) == GetClientTeam(client) && i != client && IsPlayerAlive(i))
3343 {
3344 char username[MAX_NAME_LENGTH];
3345 char userid[4];
3346 GetClientName(i, username, sizeof(username));
3347 IntToString(i, userid, sizeof(userid));
3348 menu.AddItem(userid, username);
3349 }
3350 }
3351 }
3352 menu.Display(client, 0);
3353 }
3354 else
3355 {
3356 CPrintToChat(client, "{darkred}[COD:MW]{green} Probowales juz wymieniac sie w tej rundzie, sprobuj w nastepnej!");
3357 }
3358 }
3359 else
3360 {
3361 CPrintToChat(client, "{darkred}[COD:MW]{green} Tylko zywi moga sie wymieniac!");
3362 }
3363}
3364
3365public int MenuHandler_PlayerEdit(Menu menu, MenuAction action, int client, int item)
3366{
3367 switch(action)
3368 {
3369 case MenuAction_Select:
3370 {
3371 char buffer[64];
3372 char info[32];
3373 char username[MAX_NAME_LENGTH];
3374 char clientstring[4];
3375 GetMenuItem(menu, item, info, sizeof(info));
3376
3377 int customclient = StringToInt(info);
3378 GetClientName(customclient, username, sizeof(username));
3379
3380 Menu menu2 = new Menu(MenuHandler_PlayerEditSave);
3381 Format(buffer, sizeof(buffer), "%s\nJego item to: %s", username, nazwy_itemow[informacje_itemu_gracza[customclient][0]]);
3382 SetMenuTitle(menu2, buffer);
3383
3384 char wyslij[50] = "wyslij-";
3385 char stop[50] = "stop-";
3386
3387 IntToString(customclient, clientstring, sizeof(clientstring));
3388 StrCat(wyslij, sizeof(wyslij), clientstring);
3389 StrCat(stop, sizeof(stop), clientstring);
3390
3391 menu2.AddItem(wyslij, "Wyslij");
3392 menu2.AddItem(stop, "Przerwij");
3393 menu2.Display(client, 0);
3394 }
3395 }
3396}
3397
3398public int MenuHandler_PlayerEditSave(Menu menu, MenuAction action, int client, int item)
3399{
3400 switch(action)
3401 {
3402 case MenuAction_Select:
3403 {
3404 char info[32];
3405 GetMenuItem(menu, item, info, sizeof(info));
3406
3407 char brake[4][40];
3408 ExplodeString(info, "-", brake, sizeof(brake), sizeof(brake[]));
3409 int newclient = StringToInt(brake[1]);
3410
3411 if(StrEqual(brake[0], "wyslij"))
3412 {
3413 StartMenuAcceptTrade(newclient, client);
3414 }
3415 if(StrEqual(brake[0], "stop"))
3416 {
3417 CPrintToChat(client, "{darkred}[COD:MW]{green} Przerwano wymiane!");
3418 }
3419 }
3420 }
3421}
3422
3423void StartMenuAcceptTrade(int newclient, int client)
3424{
3425 char buffer[64];
3426 Menu menu = new Menu(MenuHandler_Akceptacja);
3427
3428 Format(buffer, sizeof(buffer),"Gracz: %N wyslal oferte wymiany\nJego item to: %s", client, nazwy_itemow[informacje_itemu_gracza[client][0]]);
3429 SetMenuTitle(menu, buffer);
3430
3431 char userid[4];
3432 IntToString(client, userid, sizeof(userid));
3433
3434 menu.AddItem(userid, "Akceptuj");
3435 menu.AddItem("odrzuc", "Odrzuc wymiane");
3436
3437 menu.Display(newclient, 0);
3438}
3439
3440public int MenuHandler_Akceptacja(Menu menu, MenuAction action, int client, int item)
3441{
3442 switch(action)
3443 {
3444 case MenuAction_Select:
3445 {
3446 char info[32];
3447 GetMenuItem(menu, item, info, sizeof(info));
3448
3449 int customclient = StringToInt(info);
3450
3451 if(StrEqual(info, "odrzuc"))
3452 {
3453 CPrintToChat(client,"{darkred}[COD:MW]{green} Odrzuciles propozycje wymiany!");
3454 CPrintToChat(customclient,"{darkred}[COD:MW]{green} Gracz %N odrzucil twoja propozycje wymiany!", client);
3455 }
3456 else
3457 {
3458 int itemcustomclient = informacje_itemu_gracza[customclient][0];
3459 int mocitemucustomclient = moc_itemu[customclient];
3460
3461 DajItem(customclient, informacje_itemu_gracza[client][0]);
3462 moc_itemu[customclient] = moc_itemu[client];
3463
3464 DajItem(client, itemcustomclient);
3465 moc_itemu[client] = mocitemucustomclient;
3466
3467 CPrintToChat(client,"{darkred}[COD:MW]{green} Akceptowales wymiane z graczem!");
3468 CPrintToChat(customclient,"{darkred}[COD:MW]{green} Gracz akceptowal twoja propozycje wymiany!");
3469 }
3470 }
3471 }
3472}
3473
3474stock GetRandomPlayer(team)
3475{
3476 new clients[MaxClients+1], clientCount;
3477 for (new i = 1; i <= MaxClients; i++)
3478 {
3479 if(IsValidClient(i) && GetClientTeam(i) == team && klasa_gracza[i] != Szpieg)
3480 {
3481 clients[clientCount++] = i;
3482 }
3483 }
3484 return (clientCount == 0) ? -1 : clients[GetRandomInt(0, clientCount-1)];
3485}