· 9 years ago · Nov 30, 2016, 04:02 PM
1#include <sourcemod>
2#include <sdkhooks>
3#include <sdktools>
4#include <cstrike>
5
6#define VIP_FLAG ADMFLAG_CUSTOM1 // konto premium
7#define MAX_PLAYERS 32 // maksymalna ilosc graczy na serwerze
8#define MAX_CLASS 32 // maksymalna ilosc klas na serwerze
9#define REFRESH_HUD 1.0
10
11enum
12{
13 Brak,
14 Snajper,
15 Komandos,
16 Obronca,
17 Medyk,
18 WsparcieOgniowe,
19 Saper,
20 Rusher,
21 Kangur,
22 Admiral,
23 Rebeliant,
24 Szturmowiec,
25 LekkiZolnierz,
26 Terrorysta,
27 Kamikadze,
28 Thief,
29 Strzelec,
30 Partyzant,
31 DGLMaster,
32 Szturmen,
33 Szpieg,
34 Mauser,
35 Scouter,
36 Terminator,
37 Rambo
38};
39
40new limit_poziomu = 401;
41new limit_inteligencji = 100;
42new limit_zdrowia = 50;
43new limit_obrazen = 50;
44new limit_wytrzymalosci = 100;
45new limit_kondycji = 100;
46new co_ile_lv_punkt = 1;
47new ile_rozdawac[] = {1, 10, -1};
48
49new xp_kill = 10;
50new xp_kill_hs = 5;
51new xp_winround = 10;
52new xp_objectives = 10;
53
54new xp_kill_vip = 20;
55new xp_kill_hs_vip = 10;
56new xp_winround_vip = 20;
57new xp_objectives_vip = 20;
58
59new co_ile_zapisywac = 30; // co ile sekund nadpisywac dane graczowi (tylko gdy zdobyl/stracil poziom/doswiadczenie lub rozdal/zresetowal statystyki)
60
61new Handle:sql,
62 Handle:sql_task[MAX_PLAYERS+1],
63 Handle:hud_task[MAX_PLAYERS+1],
64 sql_baza;
65
66new String:dbError[512],
67 String:nazwa_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
68 poziom_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
69 doswiadczenie_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
70 inteligencja_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
71 zdrowie_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
72 obrazenia_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
73 wytrzymalosc_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
74 kondycja_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
75 misja_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1],
76 zabicia_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1];
77
78new poziom_gracza[MAX_PLAYERS+1],
79 doswiadczenie_gracza[MAX_PLAYERS+1],
80 inteligencja_gracza[MAX_PLAYERS+1],
81 zdrowie_gracza[MAX_PLAYERS+1],
82 obrazenia_gracza[MAX_PLAYERS+1],
83 wytrzymalosc_gracza[MAX_PLAYERS+1],
84 kondycja_gracza[MAX_PLAYERS+1],
85 misja_gracza[MAX_PLAYERS+1],
86 zabicia_gracza[MAX_PLAYERS+1],
87 bonusowa_inteligencja_gracza[MAX_PLAYERS+1],
88 bonusowe_zdrowie_gracza[MAX_PLAYERS+1],
89 bonusowe_obrazenia_gracza[MAX_PLAYERS+1],
90 bonusowa_wytrzymalosc_gracza[MAX_PLAYERS+1],
91 bonusowa_kondycja_gracza[MAX_PLAYERS+1];
92
93new maksymalna_inteligencja_gracza[MAX_PLAYERS+1],
94 maksymalne_zdrowie_gracza[MAX_PLAYERS+1],
95 Float:maksymalne_obrazenia_gracza[MAX_PLAYERS+1],
96 Float:maksymalna_wytrzymalosc_gracza[MAX_PLAYERS+1],
97 Float:maksymalna_kondycja_gracza[MAX_PLAYERS+1];
98
99new bool:polaczony_raz[MAX_PLAYERS+1],
100 bool:zapisz_dane[MAX_PLAYERS+1],
101 nowa_klasa_gracza[MAX_PLAYERS+1],
102 klasa_gracza[MAX_PLAYERS+1],
103 bool:vip_gracza[MAX_PLAYERS+1],
104 szybkosc_rozdania[MAX_PLAYERS+1],
105 punkty_gracza[MAX_PLAYERS+1],
106 client_gracza[MAX_PLAYERS+1],
107 moc_itemu[MAX_PLAYERS+1],
108 bool:umiejetnosc_gracza[MAX_PLAYERS+1],
109 bool:wymiana_gracza[MAX_PLAYERS+1],
110 bool:blokada_gracza[MAX_PLAYERS+1],
111 bool:headshot[MAX_PLAYERS+1],
112 bool:tulow[MAX_PLAYERS+1],
113 bool:oldbuttons1[MAX_PLAYERS+1],
114 bool:oldbuttons2[MAX_PLAYERS+1],
115 ilosc_apteczek_gracza[MAX_PLAYERS+1],
116 czas_skokow_gracza[MAX_PLAYERS+1];
117
118new sprite_blue,
119 sprite_laser,
120 sprite_halo,
121 oslepiajacy_gracz,
122 bool:freezetime;
123
124new String:dzwieki_serwera[][] =
125{
126 "", // 0
127 "cod/levelup.mp3", // 1
128 "cod/headshot.mp3", // 2
129 "cod/headshot2.mp3", // 3
130 "cod/lebshot.mp3", // 4
131 "cod/headhunter.mp3" // 5
132};
133new String:modele_serwera[][] =
134{
135 "", // 0
136 "models/player/ctm_fbi.mdl", // 1
137 "models/player/ctm_gign.mdl", // 2
138 "models/player/ctm_gsg9.mdl", // 3
139 "models/player/ctm_sas.mdl", // 4
140 "models/player/ctm_st6.mdl", // 5
141 "models/player/tm_anarchist.mdl", // 6
142 "models/player/tm_phoenix.mdl", // 7
143 "models/player/tm_pirate.mdl", // 8
144 "models/player/tm_balkan_variantA.mdl", // 9
145 "models/player/tm_leet_variantA.mdl", // 10
146};
147new informacje_itemu_gracza[MAX_PLAYERS+1][2];
148new String:nazwy_itemow[][] =
149{
150 "Brak", // 0
151 "Wytrenowany Weteran", // 1
152 "Wytrenowany Rekrut", // 2
153 "Wyszkolenie Wojenne", // 3
154 "Apteczka", // 4
155 "Adrenalina", // 5
156 "Regenerator", // 6
157 "Morfina", // 7
158 "Księga Expa", // 8
159 "Portfel Turysty", // 9
160 "Kamizelka Nasa", // 10
161 "Sandały Gaudentego", // 11
162 "Mózg Einsteina", // 12
163 "Zestaw Predatora", // 13
164 "Notatki Kapitana", // 14
165 "Tytanowe Naboje", // 15
166 "Naboje Pulkownika", // 16
167 "Weteran Noza", // 17
168 "Nóż Mysliwego", // 18
169 "Notatki Ninji", // 19
170 "Pancerny Hełm", // 20
171 "Pancerz Neomexowy", // 21
172 "Moduł Odrzutowy", // 22
173 "Zaskoczenie Wroga", // 23
174 "Płaszczowe Naboje", // 24
175 "Luneta Wojskowego", // 25
176 "Tajemnica Molotova", // 26
177 "Tajemnica Zabojcy", // 27
178 "Płonące Naboje", // 28
179 "Tarcza Swat", // 29
180 "Nano Kamizelka", // 30
181 "Ogranicznik Rozrzutu", // 31
182 "Podręcznik Szpiega", // 32
183 "Tajemnica Generala", // 33
184 "Bezdenny Magazynek", // 34
185 "Szybkostrzelność", // 35
186 "Buty Ninji", // 36
187 "Autodestrukcja", // 37
188 "Rozbłysk Słoneczny", // 38
189 "Tajemnica Rambo", // 39
190 "Izraelskie Naboje", // 40
191 "Opaska Rambo", // 41
192 "Fart Strzelca", // 42
193 "Tajemnica Thiefa", // 43
194 "Pierścień Expa", // 44
195 "Sakwa Szczęścia", // 45
196 "Oko Snajpera", // 46
197 "Platynowe Naboje", // 47
198 "Krytyczne Naboje", // 48
199 "Taktyczne Naboje" // 49
200};
201new String:opisy_itemow[][] =
202{
203 "Zabij kogoś aby dostać item", // 0
204 "Dostajesz dodatkowo 30 punktów zdrowia. Wolniej biegasz", // 1
205 "Dostajesz dodatkowo 15 punktów zdrowia. Wolniej biegasz", // 2
206 "Regenerujesz 10 zdrowia, co 10 sekund", // 3
207 "Regenerujesz zdrowie do pełna (Użycie: E)", // 4
208 "Regenerujesz 15 zdrowia za zabicie przeciwnika", // 5
209 "Regenerujesz 30 procent zadanych obrażeń w postaci zdrowia", // 6
210 "Posiadasz 1/LW szans na ponowne odrodzenie się po śmierci", // 7
211 "Dostajesz dodatkowo 10 doświadczenia za zabicie przeciwnika", // 8
212 "Dostajesz dodatkowo 300 dolarów za zabicie przeciwnika", // 9
213 "Dostajesz dodatkowo 25 punktów wytrzymałości", // 10
214 "Dostajesz dodatkowo 50 punktów kondycji", // 11
215 "Dostajesz dodatkowo 25 punktów inteligencji", // 12
216 "Dostajesz noktowizor (Użycie: E). Jesteś odporny na zadane obrażenia od upadku", // 13
217 "Jesteś odporny na 3 pierwsze zadane obrażenia przez przeciwnika", // 14
218 "Zadajesz o 10 obrażeń przeciwnikowi więcej z każdej broni", // 15
219 "Zadajesz o 15 obrażeń przeciwnikowi więcej z każdej broni", // 16
220 "Zadajesz o 40 obrażeń przeciwnikowi więcej z noża", // 17
221 "Posiadasz natychmiastowe zabicie przeciwnika z noża (PPM)", // 18
222 "Możesz wykonać podwójny skok (Użycie: podczas skoku SPACE)", // 19
223 "Jesteś odporny na zadane obrażenia przez przeciwnika w głowę", // 20
224 "Posiadasz 1/LW szans na odbicie zadanych obrażeń przez przeciwnika", // 21
225 "Zostajesz wyrzucony z dużą prędkościa (Użycie: podczas biegu i skoku E)", // 22
226 "Zadajesz 140 procent obrażeń przeciwnikowi gdy atakujesz w dół tułowia", // 23
227 "Zadajesz 140 procent obrażeń przeciwnikowi z każdej pobocznej broni", // 24
228 "Posiadasz przybliżenie w każdej broni palnej (Użycie: ATTACK2)", // 25
229 "Dostajesz koktajl molotova, co 20 sekund", // 26
230 "Posiadasz 1/LW szans na wyrzucenie broni przeciwnika", // 27
231 "Posiadasz 1/LW szans na podpalenie przeciwnika", // 28
232 "Nie działaja na Ciebie itemy przeciwnika", // 29
233 "Nie działają na Ciebie umiejętności klas przeciwnika", // 30
234 "Posiadasz zmniejszony rozrzut broni", // 31
235 "Posiadasz 1/LW szans na natychmiastowe zabicie z HE. Masz ubranie przeciwnika", // 32
236 "Posiadasz natychmiastowe zabicie z HE. Zadajesz o LW obrażeń więcej", // 33
237 "Posiadasz nieskończoną ilość amunicji", // 34
238 "Posiadasz zwiększona szybkostrzelność broni", // 35
239 "Posiadasz zmniejszonÄ… grawitacjÄ™", // 36
240 "Wybuchasz po śmierci zabijając wszystkich przeciwników w pobliżu", // 37
241 "Podpalasz wszystkich przeciwników w pobliżu (Użycie: E)", // 38
242 "Regenerujesz 20 zdrowia za zabicie przeciwnika. Nie działają na Ciebie FB przeciwnika", // 39
243 "Dostajesz dodatkowo 25 punktów obrażeń", // 40
244 "Dostajesz dodatkowo 15 punktów do każdej statystyki", // 41
245 "Posiadasz 1/LW szans na natychmiastowe zabicie przeciwnika", // 42
246 "Możesz podnosić bronie należące do wszystkich klas", // 43
247 "Dostajesz dodatkowo 20 doświadczenia za zabicie przeciwnika", // 44
248 "Dostajesz dodatkowo 1500 dolarów podczas odrodzenia", // 45
249 "Posiadasz natychmiastowe zabicie przeciwnika w głowę", // 46
250 "Zadajesz o LW obrażeń przeciwnikowi więcej z każdej broni", // 47
251 "Posiadasz 1/LW szans na zadanie 140 procent obrażeń przeciwnikowi", // 48
252 "Posiadasz 1/LW szans na opróżnienie magazynku przeciwnika" // 49
253};
254new String:nazwy_klas[][] =
255{
256 "Brak", // 0
257 "Snajper", // 1
258 "Komandos", // 2
259 "Obrońca", // 3
260 "Medyk", // 4
261 "Wsparcie Ogniowe", // 5
262 "Saper", // 6
263 "Rusher", // 7
264 "Kangur", // 8
265 "Admiral", // 9
266 "Rebeliant", // 10
267 "Szturmowiec", // 11
268 "Lekki Żołnierz", // 12
269 "Terrorysta [Od 100Lv]", // 13
270 "Kamikadze [Od 125Lv]", // 14
271 "Thief [Od 150Lv]", // 15
272 "Strzelec [Od 175Lv]", // 16
273 "Partyzant [Od 200Lv]", // 17
274 "DGLMaster [Od 225Lv]", // 18
275 "Szturmen [Od 250Lv]", // 19
276 "Szpieg [Od 275Lv]", // 20
277 "Mauser [Od 300Lv]", // 21
278 "Scouter [Od 325Lv]", // 22
279 "Terminator [Od 350Lv]", // 23
280 "Rambo [Od 375Lv]" // 24
281};
282new String:nazwy_broni[][] =
283{
284 "", // 0
285 "weapon_glock", // 1
286 "weapon_usp_silencer", // 2
287 "weapon_tec9", // 3
288 "weapon_cz75a", // 4
289 "weapon_hkp2000", // 5
290 "weapon_p250", // 6
291 "weapon_deagle", // 7
292 "weapon_elite", // 8
293 "weapon_fiveseven", // 9
294 "weapon_nova", // 10
295 "weapon_xm1014", // 11
296 "weapon_mag7", // 12
297 "weapon_sawedoff", // 13
298 "weapon_mac10", // 14
299 "weapon_mp9", // 15
300 "weapon_mp7", // 16
301 "weapon_ump45", // 17
302 "weapon_p90", // 18
303 "weapon_bizon", // 19
304 "weapon_galilar", // 20
305 "weapon_famas", // 21
306 "weapon_ak47", // 22
307 "weapon_m4a1", // 23
308 "weapon_m4a1_silencer", // 24
309 "weapon_aug", // 25
310 "weapon_sg556", // 26
311 "weapon_ssg08", // 27
312 "weapon_awp", // 28
313 "weapon_g3sg1", // 29
314 "weapon_scar20", // 30
315 "weapon_m249", // 31
316 "weapon_negev", //32
317 "weapon_decoy", // 33
318 "weapon_molotov", // 34
319 "weapon_incgrenade", // 35
320 "weapon_hegrenade", // 36
321 "weapon_flashbang", // 37
322 "weapon_smokegrenade", // 38
323 "weapon_taser", // 39
324 "weapon_knife", // 40
325 "weapon_c4" // 41
326};
327new bronie_klas[][] =
328{ // numer broni odpowiadajacy za jej nazwe (patrz wyzej) // musi byc 5 broni w jednej kolumnie
329 {0, 0, 0, 0, 0}, // 0
330 {28, 7, 0, 0, 0}, // 1
331 {7, 37, 37, 0, 0}, // 2
332 {31, 1, 36, 37, 38}, // 3
333 {15, 9, 0, 0, 0}, // 4
334 {16, 9, 0, 0, 0}, // 5
335 {18, 9, 0, 0, 0}, // 6
336 {10, 6, 0, 0, 0}, // 7
337 {11, 6, 0, 0, 0}, // 8
338 {22, 1, 37, 37, 38}, // 9
339 {26, 1, 36, 0, 0}, // 10
340 {23, 7, 36, 0, 0}, // 11
341 {20, 6, 0, 0, 0}, // 12
342 {14, 8, 35, 0, 0}, // 13
343 {7, 35, 0, 0, 0}, // 14
344 {19, 6, 35, 0, 0}, // 15
345 {29, 1, 0, 0, 0}, // 16
346 {21, 7, 36, 0, 0}, // 17
347 {7, 37, 37, 38, 0}, // 18
348 {24, 2, 34, 0, 0}, // 19
349 {25, 1, 35, 0, 0}, // 20
350 {29, 1, 37, 37, 0}, // 21
351 {27, 8, 36, 0, 0}, // 22
352 {32, 4, 35, 37, 38}, // 23
353 {13, 1, 37, 37, 0} // 24
354};
355new umiejetnosci_klas[][] =
356{ // Lvl - 0 // Zdr - 1 // Wyt - 2 // Kon - 3
357 {0, 100, 0, 100}, // 0
358 {0, 120, 100, 110}, // 1
359 {0, 135, 100, 125}, // 2
360 {0, 120, 150, 80}, // 3
361 {0, 100, 100, 100}, // 4
362 {0, 100, 100, 100}, // 5
363 {0, 100, 100, 100}, // 6
364 {0, 100, 50, 120}, // 7
365 {0, 100, 50, 100}, // 8
366 {0, 150, 150, 100}, // 9
367 {0, 105, 150, 80}, // 10
368 {0, 150, 150, 100}, // 11
369 {0, 100, 100, 115}, // 12
370 {100, 120, 50, 100}, // 13
371 {125, 180, 0, 120}, // 14
372 {150, 80, 80, 80}, // 15
373 {175, 125, 0, 80}, // 16
374 {200, 140, 25, 125}, // 17
375 {225, 115, 25, 110}, // 18
376 {250, 130, 50, 115}, // 19
377 {275, 125, 100, 100}, // 20
378 {300, 120, 100, 110}, // 21
379 {325, 105, 50, 105}, // 22
380 {350, 175, 175, 100}, // 23
381 {375, 200, 100, 120} // 24
382};
383new String:opisy_klas[][] =
384{
385 "Brak", // 0
386 "Zadaje obrażenia z awp +int. Posiada 120hp, 110% biegu, 100 wytrzymałości", // 1
387 "Zadaje o 50 obrażeń więcej z noża +int (Uzycie: PPM). Posiada 135hp, 135% biegu, 100 wytrzymałości", // 2
388 "Jest odporny na umiejetnosci wszystkich klas przeciwnika. Posiada 120hp, 80% biegu, 150 wytrzymałości", // 3
389 "Posiada 100hp, 100% biegu, 100 wytrzymałości, posiada dwie apteczki", // 4
390 "Posiada 100hp, 100% biegu, 100 wytrzymałości", // 5
391 "Posiada 100hp, 100% biegu, 100 wytrzymałości", // 6
392 "Posiada 100hp, 120% biegu, 50 wytrzymałości", // 7
393 "Posiada dlugi skok, 100hp, 100% biegu, 50 wytrzymałości", // 8
394 "Posiada 150hp, 80% biegu, 150 wytrzymałości", // 9
395 "Posiada 105hp, 80% biegu, 150 wytrzymałości", // 10
396 "Posiada 150hp, 80% biegu, 150 wytrzymałości", // 11
397 "Posiada 100hp, 115% biegu, 100 wytrzymałości", // 12
398 "Wybucha po śmierci zadając 80 zdrowia +int. Posiada 120hp, 100% biegu, 50 wytrzymałości", // 13
399 "Posiada 180hp, 120% biegu", // 14
400 "Może podnosić wszystkie bronie. Posiada 80hp, 80% biegu, 80 wytrzymałości", // 15
401 "Posiada 125hp, 80% biegu", // 16
402 "Zadaje o 50 obrażeń więcej z HE +int. Posiada 120hp, 110% biegu, 25 wytrzymałości", // 17
403 "Zadaje obrażenia z deagla +int. Posiada 115hp, 110% biegu, 25 wytrzymałości", // 18
404 "Może wykonać podwójny skok (Użycie: podczas skoku SPACE), dostaje 30 zdrowia za zabicie przeciwnika. Posiada 130hp, 115% biegu, 50 wytrzymałości", // 19
405 "Posiada przebranie wroga, 125hp, 100% biegu, 100 wytrzymałości", // 20
406 "Jest odporny na zadane obrażeń w dół tułowia. Posiada 120hp, 110% biegu, 100 wytrzymałości", // 21
407 "Posiada 1/3 szans na natychmiastowe zabicie z ssg08, 105hp, 105% biegu, 50 wytrzymałości", // 22
408 "Posiada 175hp, 100% biegu, 175 wytrzymałości", // 23
409 "Regeneruje 10 procent zadanych obrażeń w postaci zdrowia. Posiada 1/2 szans na natychmiastowe zabicie z noża (PPM), 200hp, 130% biegu, 100 wytrzymałości", // 24
410};
411new nazwy_misji[][] =
412{ // Lvl // Zabicia // Kogo // Nagroda
413 {0, 0, 0, 0}, // 0
414 {0, 10, Snajper, 2500}, // 1
415 {0, 10, Komandos, 2500}, // 2
416 {0, 10, Admiral, 2500}, // 3
417 {0, 10, Terminator, 7500}, // 4
418 {0, 10, Rambo, 10000}, // 5
419 {0, 10, 14, 10000}, // 6
420 {0, 10, 20, 10000}, // 7
421};
422new String:opisy_misji[][] =
423{
424 "Brak. Wpisz /misja aby rozpoczac", // 0
425 "Zabij 10 Snajperów - 2500 Dośw.", // 1
426 "Zabij 10 Komandosów - 2500 Dośw.", // 2
427 "Zabij 10 Admirałów - 2500 Dośw.", // 3
428 "Zabij 10 Terminatorów - 7500 Dośw.", // 4
429 "Zabij 10 Rambo - 10000 Dośw.", // 5
430 "Zabij 10 osób z Notatkami Kapitana - 10000 Dośw.", // 6
431 "Zabij 10 osób z Pancernym Hełmem - 10000 Dośw.", // 7
432};
433new doswiadczenie_poziomu[] =
434{
435 0, 19, 58, 107, 179, 252, 361, 474, 607, 766,
436 938, 1119, 1313, 1509, 1739, 1986, 2249, 2537, 2837, 3137,
437 3461, 3787, 4124, 4493, 4886, 5279, 5694, 6132, 6595, 7064,
438 7555, 8053, 8569, 9102, 9645, 10196, 10772, 11374, 11997, 12625,
439 13258, 13925, 14596, 15279, 15983, 16718, 17456, 18209, 18987, 19786,
440 20601, 21430, 22263, 23096, 23945, 24822, 25726, 26630, 27543, 28501,
441 29459, 30435, 31435, 32447, 33487, 34538, 35590, 36672, 37766, 38878,
442 39997, 41135, 42282, 43452, 44640, 45844, 47068, 48299, 49563, 50843,
443 52126, 53420, 54742, 56075, 57429, 58790, 60167, 61560, 62965, 64377,
444 65789, 67228, 68684, 70176, 71679, 73205, 74745, 76301, 77884, 79482,
445 81096, 82723, 84371, 86023, 87685, 89362, 91057, 92783, 94521, 96275,
446 98051, 99833, 101633, 103439, 105269, 107110, 108969, 110831, 112727, 114640,
447 116557, 118508, 120475, 122450, 124446, 126448, 128465, 130507, 132566, 134633,
448 136714, 138824, 140939, 143058, 145216, 147389, 149580, 151771, 153977, 156201,
449 158429, 160665, 162905, 165155, 167424, 169749, 172089, 174429, 176800, 179189,
450 181586, 183984, 186414, 188867, 191346, 193832, 196326, 198830, 201368, 203917,
451 206478, 209049, 211631, 214252, 216889, 219534, 222199, 224867, 227563, 230279,
452 233006, 235736, 238477, 241251, 244041, 246840, 249649, 252472, 255296, 258139,
453 261025, 263918, 266822, 269727, 272660, 275595, 278568, 281551, 284568, 287596,
454 290646, 293717, 296788, 299875, 302992, 306116, 309257, 312420, 315596, 318779,
455 321983, 325205, 328450, 331700, 334980, 338271, 341567, 344878, 348201, 351543,
456 354894, 358247, 361639, 365031, 368456, 371896, 375349, 378832, 382324, 385834,
457 389344, 392854, 396414, 399980, 403568, 407174, 410794, 414432, 418080, 421752,
458 425424, 429107, 432831, 436555, 440290, 444060, 447837, 451618, 455424, 459233,
459 463056, 466881, 470734, 474593, 478466, 482366, 486301, 490263, 494243, 498226,
460 502239, 506258, 510281, 514323, 518402, 522482, 526592, 530717, 534858, 539002,
461 543150, 547304, 551465, 555669, 559884, 564111, 568362, 572618, 576892, 581174,
462 585471, 589817, 594165, 598530, 602913, 607323, 611740, 616182, 620624, 625072,
463 629526, 634012, 638537, 643081, 647632, 652187, 656761, 661365, 665978, 670607,
464 675242, 679907, 684576, 689276, 693995, 698723, 703452, 708219, 712999, 717787,
465 722599, 727430, 732267, 737120, 741990, 746879, 751773, 756694, 761616, 766569,
466 771536, 776527, 781528, 786552, 791577, 796613, 801658, 806703, 811749, 816849,
467 821969, 827101, 832246, 837419, 842612, 847817, 853031, 858271, 863515, 868787,
468 874061, 879372, 884683, 890020, 895379, 900744, 906114, 911505, 916901, 922310,
469 927745, 933203, 938689, 944178, 949685, 955194, 960705, 966265, 971848, 977440,
470 983037, 988659, 994291, 999936, 1005614, 1011304, 1017013, 1022735, 1028459, 1034185,
471 1039931, 1045714, 1051497, 1057306, 1063145, 1068985, 1074853, 1080728, 1086607, 1092516,
472 1098442, 1104369, 1110333, 1116298, 1122279, 1128289, 1134308, 1140350, 1146404, 1152467,
473 1158543, 1164650, 1170770, 1176897, 1183052, 1189224, 1195396, 1201583, 1207799, 1214015,
474 1220240, 1226466, 1232701, 1238975, 1245249, 1251573, 1257898, 1264256, 1270629, 1277002,
475 1283395, 1289810, 1296256, 1302714, 1309172, 1315667, 1322167, 1328693, 1335223, 1341781
476};
477public OnPluginStart()
478{
479 CreateConVar("Call of Duty", "1.0", "Linux`");
480 RegAdminCmd("sm_exp", CmdExp, ADMFLAG_RCON);
481 RegAdminCmd("sm_lvl", CmdLvl, ADMFLAG_RCON);
482 RegAdminCmd("sm_item", CmdItem, ADMFLAG_RCON);
483
484 RegConsoleCmd("say", Komendy);
485 RegConsoleCmd("say_team", Komendy);
486
487 RegConsoleCmd("buy", BlokujKomende);
488 RegConsoleCmd("buyequip", BlokujKomende);
489 RegConsoleCmd("buyammo1", BlokujKomende);
490 RegConsoleCmd("buyammo2", BlokujKomende);
491 RegConsoleCmd("cl_setautobuy", BlokujKomende);
492 RegConsoleCmd("cl_autobuy", BlokujKomende);
493 RegConsoleCmd("rebuy", BlokujKomende);
494 RegConsoleCmd("autobuy", BlokujKomende);
495 RegConsoleCmd("fullupdate", BlokujKomende);
496 RegConsoleCmd("autobuy", CodMenu);
497
498 HookEvent("round_freeze_end", PoczatekRundy);
499 HookEvent("round_start", NowaRunda);
500 HookEvent("round_end", KoniecRundy);
501
502 HookEvent("bomb_planted", BombaPodlozona);
503 HookEvent("bomb_defused", BombaRozbrojona);
504 HookEvent("hostage_rescued", ZakladnikUratowany);
505
506 HookEvent("player_spawn", PlayerSpawn);
507 HookEvent("player_death", PlayerDeath);
508 HookEvent("player_blind", PlayerBlind);
509 HookEvent("hegrenade_detonate", HeDetonate);
510 HookEvent("flashbang_detonate", FbDetonate);
511
512 HookUserMessage(GetUserMessageId("TextMsg"), TextMessage, true);
513 LoadTranslations("common.phrases");
514 DataBaseConnect();
515}
516public OnMapStart()
517{
518 for(new i = 1; i < sizeof dzwieki_serwera; i ++)
519 {
520 new String:sound_serwer[512];
521 Format(sound_serwer, sizeof(sound_serwer), "sound/%s", dzwieki_serwera[i]);
522 AddFileToDownloadsTable(sound_serwer);
523 }
524 for(new i = 1; i < sizeof modele_serwera; i ++)
525 PrecacheModel(modele_serwera[i]);
526
527 sprite_laser = PrecacheModel("materials/sprites/laserbeam.vmt");
528 sprite_halo = PrecacheModel("materials/sprites/halo.vmt");
529 sprite_blue = PrecacheModel("materials/sprites/blueflare1.vmt");
530}
531public OnClientAuthorized(client)
532{
533 GetClientName(client, nazwa_gracza[client], 64);
534 UsunUmiejetnosci(client);
535}
536public OnClientPutInServer(client)
537{
538 SDKHook(client, SDKHook_TraceAttack, TraceAttack);
539 SDKHook(client, SDKHook_OnTakeDamage, TakeDamage);
540 SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
541}
542public OnClientDisconnect(client)
543{
544 SDKUnhook(client, SDKHook_TraceAttack, TraceAttack);
545 SDKUnhook(client, SDKHook_OnTakeDamage, TakeDamage);
546 SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
547
548 ZapiszDane(client);
549 UsunUmiejetnosci(client);
550 UsunZadania(client);
551}
552public Action:UsunUmiejetnosci(client)
553{
554 for(new i = 1; i < sizeof nazwy_klas; i ++)
555 {
556 poziom_klasy_gracza[client][i] = 1;
557 doswiadczenie_klasy_gracza[client][i] = 0;
558 inteligencja_klasy_gracza[client][i] = 0;
559 zdrowie_klasy_gracza[client][i] = 0;
560 obrazenia_klasy_gracza[client][i] = 0;
561 wytrzymalosc_klasy_gracza[client][i] = 0;
562 kondycja_klasy_gracza[client][i] = 0;
563 misja_klasy_gracza[client][i] = 0;
564 zabicia_klasy_gracza[client][i] = 0;
565 }
566
567 polaczony_raz[client] = false;
568 zapisz_dane[client] = false;
569 wymiana_gracza[client] = false;
570 blokada_gracza[client] = false;
571 vip_gracza[client] = false;
572 nowa_klasa_gracza[client] = 0;
573 klasa_gracza[client] = 0;
574 doswiadczenie_gracza[client] = 0
575 poziom_gracza[client] = 1;
576 punkty_gracza[client] = 0;
577 inteligencja_gracza[client] = 0;
578 zdrowie_gracza[client] = 0;
579 obrazenia_gracza[client] = 0;
580 wytrzymalosc_gracza[client] = 0;
581 kondycja_gracza[client] = 0;
582 misja_gracza[client] = 0;
583 zabicia_gracza[client] = 0;
584 bonusowa_inteligencja_gracza[client] = 0;
585 bonusowe_zdrowie_gracza[client] = 0;
586 bonusowe_obrazenia_gracza[client] = 0;
587 bonusowa_wytrzymalosc_gracza[client] = 0;
588 bonusowa_kondycja_gracza[client] = 0;
589
590 ilosc_apteczek_gracza[client] = 0;
591 UsunItem(client);
592}
593public Action:UsunZadania(client)
594{
595 if(sql_task[client] != null)
596 {
597 KillTimer(sql_task[client]);
598 sql_task[client] = null;
599 }
600 if(hud_task[client] != null)
601 {
602 KillTimer(hud_task[client]);
603 hud_task[client] = null;
604 }
605}
606public Action:Komendy(client, args)
607{
608 new String:text[192];
609 GetCmdArg(1, text, sizeof(text));
610
611 new ReplySource:old = SetCmdReplySource(SM_REPLY_TO_CHAT);
612 if(strcmp(text, "/m", false) == 0 || strcmp(text, "/menu", false) == 0)
613 CodMenu(client, args);
614 else if(strcmp(text, "/s", false) == 0 || strcmp(text, "/sklep", false) == 0)
615 CodSklep(client);
616 else if(strcmp(text, "/misja", false) == 0 || strcmp(text, "/misje", false) == 0 || strcmp(text, "/quest", false) == 0 || strcmp(text, "/zadania", false) == 0)
617 WybierzMisje(client);
618 else if(strcmp(text, "/info", false) == 0 || strcmp(text, "/infomisja", false) == 0 || strcmp(text, "/sprawdz", false) == 0 || strcmp(text, "/sprawdzmisje", false) == 0)
619 OpisMisji(client);
620 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)
621 OpisStatystyk(client);
622 else if(strcmp(text, "/k", false) == 0 || strcmp(text, "/klasa", false) == 0)
623 WybierzKlase(client);
624 else if(strcmp(text, "/klasy", false) == 0)
625 OpisKlasy(client);
626 else if(strcmp(text, "/items", false) == 0 || strcmp(text, "/itemy", false) == 0 || strcmp(text, "/przedmioty", false) == 0 || strcmp(text, "/perki", false) == 0)
627 OpisItemow(client);
628 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)
629 OpisItemu(client);
630 else if(strcmp(text, "/n", false) == 0 || strcmp(text, "/napraw", false) == 0)
631 NaprawItem(client);
632 else if(strcmp(text, "/staty", false) == 0 || strcmp(text, "/statystyki", false) == 0)
633 PrzydzielPunkty(client);
634 else if(strcmp(text, "/r", false) == 0 || strcmp(text, "/reset", false) == 0)
635 ResetujPunkty(client);
636 else if(strcmp(text, "/d", false) == 0 || strcmp(text, "/drop", false) == 0 || strcmp(text, "/wyrzuc", false) == 0)
637 WyrzucItem(client);
638 else if(strcmp(text, "/spect", false) == 0 || strcmp(text, "/spec", false) == 0)
639 ZmienDruzyne(client);
640 else if(strcmp(text, "/daj", false) == 0 || strcmp(text, "/oddaj", false) == 0)
641 OddajItem(client);
642 else if(strcmp(text, "/wymien", false) == 0 || strcmp(text, "/zamien", false) == 0)
643 WymienItem(client);
644
645 SetCmdReplySource(old);
646 return Plugin_Continue;
647}
648public Action:BlokujKomende(client, args)
649{
650 return Plugin_Handled;
651}
652public Action:TextMessage(UserMsg:msg_text, Handle:pb, const players[], playersNum, bool:reliable, bool:init)
653{
654 if(!reliable || PbReadInt(pb, "msg_dst") != 3)
655 return Plugin_Continue;
656
657 new String:buffer[256];
658 PbReadString(pb, "params", buffer, sizeof(buffer), 0);
659 if(StrContains(buffer, "#Player_Cash_Award_") == 0 || StrContains(buffer, "#Team_Cash_Award_") == 0)
660 return Plugin_Handled;
661
662 return Plugin_Continue;
663}
664public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapons)
665{
666 if(!IsValidClient(client) || !IsPlayerAlive(client) || freezetime)
667 return;
668
669 new String:weapon[32];
670 GetClientWeapon(client, weapon, sizeof(weapon));
671 switch(klasa_gracza[client])
672 {
673 case Medyk:
674 {
675 if(!oldbuttons1[client] && buttons & IN_USE)
676 {
677 if(ilosc_apteczek_gracza[client])
678 {
679 new Float:fOrigin[3];
680 new Float:iOrigin[3];
681 GetClientEyePosition(client, Float:fOrigin);
682 for(new i = 1; i <= MaxClients; i++)
683 {
684 if(!IsClientInGame(i) || !IsPlayerAlive(i))
685 continue;
686
687 if(GetClientTeam(client) != GetClientTeam(i))
688 continue;
689
690 GetClientEyePosition(i, Float:iOrigin);
691 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
692 {
693 new heal = 40+maksymalna_inteligencja_gracza[client];
694 SetEntData(i, FindDataMapOffs(i, "m_iHealth"), GetClientHealth(i)+heal<maksymalne_zdrowie_gracza[i]? GetClientHealth(i)+heal: maksymalne_zdrowie_gracza[i]);
695 }
696 }
697
698 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);
699 TE_SendToAll();
700
701 ilosc_apteczek_gracza[client]--;
702 }
703 else
704 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wykorzystałeś już moc swojej klasy w tej rundzie!");
705
706 oldbuttons1[client] = true;
707 }
708 else if(oldbuttons1[client] && !(buttons & IN_USE))
709 oldbuttons1[client] = false;
710 }
711 case Kangur:
712 {
713 if(!oldbuttons1[client] && buttons & IN_JUMP)
714 {
715 if(GetGameTime() >= czas_skokow_gracza[client]+1.0)
716 {
717 new Float:fOrigin[3];
718 fOrigin[0] = GetEntDataFloat(client, FindSendPropOffs("CBasePlayer","m_vecVelocity[0]"))*0.8/2.0;
719 fOrigin[1] = GetEntDataFloat(client, FindSendPropOffs("CBasePlayer","m_vecVelocity[1]"))*0.8/2.0;
720 fOrigin[2] = 0.8*50.0;
721 SetEntDataVector(client, FindSendPropOffs("CBasePlayer","m_vecBaseVelocity"), fOrigin, true);
722 czas_skokow_gracza[client] = RoundFloat(GetGameTime());
723 }
724
725 oldbuttons1[client] = true;
726 }
727 else if(oldbuttons1[client] && !(buttons & IN_JUMP))
728 oldbuttons1[client] = false;
729 }
730 case Szturmen:
731 {
732 if(!oldbuttons1[client] && buttons & IN_JUMP)
733 {
734 new flags = GetEntityFlags(client);
735 if(!(flags & FL_ONGROUND) && umiejetnosc_gracza[client])
736 {
737 new Float:fOrigin[3];
738 GetEntPropVector(client, Prop_Data, "m_vecVelocity", fOrigin);
739 fOrigin[2] += 250.0;
740 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fOrigin);
741 umiejetnosc_gracza[client] = false;
742 }
743 else if(flags & FL_ONGROUND)
744 umiejetnosc_gracza[client] = true;
745
746 oldbuttons1[client] = true;
747 }
748 else if(oldbuttons1[client] && !(buttons & IN_JUMP))
749 oldbuttons1[client] = false;
750 }
751 }
752 switch(informacje_itemu_gracza[client][0])
753 {
754 case 3:
755 {
756 if(GetGameTime() >= informacje_itemu_gracza[client][1]+10.0)
757 {
758 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)+10<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+10: maksymalne_zdrowie_gracza[client]);
759 informacje_itemu_gracza[client][1] = RoundFloat(GetGameTime());
760 }
761 }
762 case 4:
763 {
764 if(!oldbuttons2[client] && buttons & IN_USE)
765 {
766 if(informacje_itemu_gracza[client][1])
767 {
768 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), maksymalne_zdrowie_gracza[client]);
769 informacje_itemu_gracza[client][1] --;
770 }
771 else
772 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wykorzystałeś już moc swojego itemu w tej rundzie!");
773
774 oldbuttons2[client] = true;
775 }
776 else if(oldbuttons2[client] && !(buttons & IN_USE))
777 oldbuttons2[client] = false;
778 }
779 case 13:
780 {
781 if(!oldbuttons2[client] && buttons & IN_USE)
782 {
783 if(GetEntProp(client, Prop_Send, "m_bNightVisionOn"))
784 SetEntProp(client, Prop_Send, "m_bNightVisionOn", 0);
785 else
786 SetEntProp(client, Prop_Send, "m_bNightVisionOn", 1);
787
788 oldbuttons2[client] = true;
789 }
790 else if(oldbuttons2[client] && !(buttons & IN_USE))
791 oldbuttons2[client] = false;
792 }
793 case 19:
794 {
795 if(!oldbuttons2[client] && buttons & IN_JUMP)
796 {
797 new flags = GetEntityFlags(client);
798 if(!(flags & FL_ONGROUND) && informacje_itemu_gracza[client][1])
799 {
800 new Float:fOrigin[3];
801 GetEntPropVector(client, Prop_Data, "m_vecVelocity", fOrigin);
802 fOrigin[2] += 250.0;
803 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fOrigin);
804 informacje_itemu_gracza[client][1] --;
805 }
806 else if(flags & FL_ONGROUND)
807 informacje_itemu_gracza[client][1] = 1;
808
809 oldbuttons2[client] = true;
810 }
811 else if(oldbuttons2[client] && !(buttons & IN_JUMP))
812 oldbuttons2[client] = false;
813 }
814 case 22:
815 {
816 if(!oldbuttons2[client] && buttons & IN_USE)
817 {
818 if(GetGameTime() >= informacje_itemu_gracza[client][1]+4.0)
819 {
820 new Float:velocity[3];
821 new Float:velocity0;
822 new Float:velocity1;
823 velocity0 = GetEntPropFloat(client, Prop_Send, "m_vecVelocity[0]");
824 velocity1 = GetEntPropFloat(client, Prop_Send, "m_vecVelocity[1]");
825 velocity[0] = (7.0*velocity0)*(1.0/4.1);
826 velocity[1] = (7.0*velocity1)*(1.0/4.1);
827 velocity[2] = 0.0;
828 SetEntPropVector(client, Prop_Send, "m_vecBaseVelocity", velocity);
829 informacje_itemu_gracza[client][1] = RoundFloat(GetGameTime());
830 }
831
832 oldbuttons2[client] = true;
833 }
834 else if(oldbuttons2[client] && !(buttons & IN_USE))
835 oldbuttons2[client] = false;
836 }
837 case 25:
838 {
839 if(!oldbuttons2[client] && buttons & IN_ATTACK2)
840 {
841 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]))
842 {
843 if(informacje_itemu_gracza[client][1])
844 {
845 informacje_itemu_gracza[client][1] --;
846 SetEntProp(client, Prop_Send, "m_iFOV", 270);
847 }
848 else
849 {
850 informacje_itemu_gracza[client][1] = 1;
851 SetEntProp(client, Prop_Send, "m_iFOV", 90);
852 }
853 }
854
855 oldbuttons2[client] = true;
856 }
857 else if(oldbuttons2[client] && !(buttons & IN_ATTACK2))
858 oldbuttons2[client] = false;
859 }
860 case 26:
861 {
862 if(GetGameTime() >= informacje_itemu_gracza[client][1]+20.0)
863 {
864 GivePlayerItem(client, nazwy_broni[34]);
865 informacje_itemu_gracza[client][1] = RoundFloat(GetGameTime());
866 }
867 }
868 case 31:
869 {
870 if(buttons & IN_ATTACK)
871 {
872 new ent = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
873 if(ent != -1)
874 SetEntData(ent, FindSendPropOffs("CWeaponCSBase", "m_iRecoilIndex"), 0);
875 }
876 }
877 case 34:
878 {
879 if(!StrEqual(weapon, nazwy_broni[33]) && !StrEqual(weapon, nazwy_broni[34]) && !StrEqual(weapon, nazwy_broni[35]) && !StrEqual(weapon, nazwy_broni[36]) && !StrEqual(weapon, nazwy_broni[37]) && !StrEqual(weapon, nazwy_broni[38]) && !StrEqual(weapon, nazwy_broni[39]) && !StrEqual(weapon, nazwy_broni[41]))
880 {
881 if(buttons & IN_ATTACK)
882 {
883 new ent = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
884 if(ent != -1)
885 SetEntData(ent, FindSendPropOffs("CWeaponCSBase", "m_iClip1"), 5);
886 }
887 }
888 }
889 case 35:
890 {
891 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]))
892 {
893 if(buttons & IN_ATTACK)
894 {
895 new ent = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
896 if(ent != -1)
897 {
898 new Float:flNextPrimaryAttack = GetEntDataFloat(ent, FindSendPropOffs("CBaseCombatWeapon", "m_flNextPrimaryAttack"))-GetGameTime();
899 SetEntDataFloat(ent, FindSendPropOffs("CBaseCombatWeapon", "m_flNextPrimaryAttack"), (flNextPrimaryAttack/1.4)+GetGameTime());
900 }
901 }
902 }
903 }
904 case 38:
905 {
906 if(!oldbuttons2[client] && buttons & IN_USE)
907 {
908 if(informacje_itemu_gracza[client][1])
909 {
910 new Float:fOrigin[3];
911 new Float:iOrigin[3];
912 GetClientEyePosition(client, Float:fOrigin);
913 for(new i = 1; i <= MaxClients; i++)
914 {
915 if(!IsClientInGame(i) || !IsPlayerAlive(i))
916 continue;
917
918 if(GetClientTeam(client) == GetClientTeam(i))
919 continue;
920
921 if(informacje_itemu_gracza[i][0] == 29)
922 continue;
923
924 GetClientEyePosition(i, Float:iOrigin);
925 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
926 {
927 if(GetEntProp(i, Prop_Send, "m_ArmorValue"))
928 SetEntProp(i, Prop_Send, "m_ArmorValue", 0);
929
930 IgniteEntity(i, 15.0);
931 }
932 }
933
934 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);
935 TE_SendToAll();
936
937 informacje_itemu_gracza[client][1] --;
938 }
939 else
940 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wykorzystałeś już moc swojego itemu w tej rundzie!");
941
942 oldbuttons2[client] = true;
943 }
944 else if(oldbuttons2[client] && !(buttons & IN_USE))
945 oldbuttons2[client] = false;
946 }
947 }
948}
949public Action:TraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
950{
951 if(!IsValidClient(victim) || !IsValidClient(attacker))
952 return Plugin_Continue;
953
954 if(GetClientTeam(victim) == GetClientTeam(attacker))
955 return Plugin_Continue;
956
957 if(klasa_gracza[attacker])
958 {
959 doswiadczenie_gracza[attacker] += RoundFloat(damage);
960 SprawdzPoziom(attacker);
961 }
962 if(hitgroup == 1)
963 headshot[victim] = true;
964 else
965 headshot[victim] = false;
966
967 if(hitgroup == 3)
968 tulow[victim] = true;
969 else
970 tulow[victim] = false;
971
972 return Plugin_Continue;
973}
974public Action:TakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
975{
976 if(!IsValidClient(victim))
977 return Plugin_Continue;
978
979 if(informacje_itemu_gracza[victim][0] == 13 && damagetype & DMG_FALL)
980 return Plugin_Handled;
981
982 if(IsValidClient(attacker) && GetClientTeam(victim) != GetClientTeam(attacker))
983 {
984 new dmg = 0;
985 new zabicie = 0;
986 new odpornosc = 0;
987
988 new String:weapon[32];
989 GetClientWeapon(attacker, weapon, sizeof(weapon));
990 switch(klasa_gracza[attacker])
991 {
992 case Snajper:
993 {
994 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
995 {
996 if(StrEqual(weapon, nazwy_broni[28]) && damagetype & DMG_BULLET)
997 dmg += 50+maksymalna_inteligencja_gracza[attacker];
998 }
999 }
1000 case Komandos:
1001 {
1002 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1003 {
1004 if(StrEqual(weapon, nazwy_broni[40]) && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2)
1005 dmg += 50+maksymalna_inteligencja_gracza[attacker];
1006 }
1007 }
1008 case DGLMaster:
1009 {
1010 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1011 {
1012 if(StrEqual(weapon, nazwy_broni[7]) && damagetype & DMG_BULLET)
1013 dmg += maksymalna_inteligencja_gracza[attacker];
1014 }
1015 }
1016 case Scouter:
1017 {
1018 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1019 {
1020 if(GetRandomInt(1, 3) == 1 && StrEqual(weapon, nazwy_broni[27]) && damagetype & DMG_BULLET)
1021 {
1022 dmg += GetClientHealth(victim)+1;
1023 zabicie = 1;
1024 }
1025 }
1026 }
1027 case Rambo:
1028 {
1029 if(klasa_gracza[victim] != Obronca && informacje_itemu_gracza[victim][0] != 30)
1030 {
1031 if(GetRandomInt(1, 2) == 1 && StrEqual(weapon, nazwy_broni[40]) && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2)
1032 {
1033 dmg += GetClientHealth(victim)+1;
1034 zabicie = 1;
1035 }
1036
1037 SetEntData(attacker, FindDataMapOffs(attacker, "m_iHealth"), (GetClientHealth(attacker)+RoundFloat(damage*0.1) > maksymalne_zdrowie_gracza[attacker])? maksymalne_zdrowie_gracza[attacker]: GetClientHealth(attacker)+RoundFloat(damage*0.1));
1038 }
1039 }
1040 }
1041 switch(klasa_gracza[victim])
1042 {
1043 case Mauser:
1044 {
1045 if(klasa_gracza[attacker] != Obronca && informacje_itemu_gracza[attacker][0] != 30)
1046 {
1047 if(tulow[victim])
1048 odpornosc = 1;
1049 }
1050 }
1051 }
1052 switch(informacje_itemu_gracza[attacker][0])
1053 {
1054 case 6:
1055 {
1056 if(informacje_itemu_gracza[victim][0] != 29)
1057 SetEntData(attacker, FindDataMapOffs(attacker, "m_iHealth"), (GetClientHealth(attacker)+RoundFloat(damage*0.3) > maksymalne_zdrowie_gracza[attacker])? maksymalne_zdrowie_gracza[attacker]: GetClientHealth(attacker)+RoundFloat(damage*0.3));
1058 }
1059 case 15:
1060 {
1061 if(informacje_itemu_gracza[victim][0] != 29)
1062 dmg += 10;
1063 }
1064 case 16:
1065 {
1066 if(informacje_itemu_gracza[victim][0] != 29)
1067 dmg += 15;
1068 }
1069 case 17:
1070 {
1071 if(informacje_itemu_gracza[victim][0] != 29)
1072 {
1073 if(StrEqual(weapon, nazwy_broni[40]) && damagetype & DMG_SLASH)
1074 dmg += 40;
1075 }
1076 }
1077 case 18:
1078 {
1079 if(informacje_itemu_gracza[victim][0] != 29)
1080 {
1081 if(StrEqual(weapon, nazwy_broni[40]) && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2)
1082 {
1083 dmg += GetClientHealth(victim)+1;
1084 zabicie = 1;
1085 }
1086 }
1087 }
1088 case 23:
1089 {
1090 if(informacje_itemu_gracza[victim][0] != 29)
1091 {
1092 if(tulow[victim])
1093 dmg += RoundFloat(damage*0.4);
1094 }
1095 }
1096 case 24:
1097 {
1098 if(informacje_itemu_gracza[victim][0] != 29)
1099 {
1100 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)
1101 dmg += RoundFloat(damage*0.4);
1102 }
1103 }
1104 case 27:
1105 {
1106 if(informacje_itemu_gracza[victim][0] != 29)
1107 {
1108 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
1109 ClientCommand(victim, "drop");
1110 }
1111 }
1112 case 28:
1113 {
1114 if(informacje_itemu_gracza[victim][0] != 29)
1115 {
1116 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
1117 {
1118 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
1119 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
1120
1121 IgniteEntity(victim, 3.0);
1122 }
1123 }
1124 }
1125 case 33:
1126 {
1127 if(informacje_itemu_gracza[victim][0] != 29)
1128 dmg += informacje_itemu_gracza[attacker][1];
1129 }
1130 case 42:
1131 {
1132 if(informacje_itemu_gracza[victim][0] != 29)
1133 {
1134 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
1135 {
1136 dmg += GetClientHealth(victim)+1;
1137 zabicie = 1;
1138 }
1139 }
1140 }
1141 case 46:
1142 {
1143 if(informacje_itemu_gracza[victim][0] != 29)
1144 {
1145 if(headshot[victim])
1146 {
1147 dmg += GetClientHealth(victim)+1;
1148 zabicie = 1;
1149 }
1150 }
1151 }
1152 case 47:
1153 {
1154 if(informacje_itemu_gracza[victim][0] != 29)
1155 dmg += informacje_itemu_gracza[attacker][1];
1156 }
1157 case 48:
1158 {
1159 if(informacje_itemu_gracza[victim][0] != 29)
1160 {
1161 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
1162 dmg += RoundFloat(damage*0.4);
1163 }
1164 }
1165 case 49:
1166 {
1167 if(informacje_itemu_gracza[victim][0] != 29)
1168 {
1169 if(GetRandomInt(1, informacje_itemu_gracza[attacker][1]) == 1)
1170 {
1171 new ent = GetEntPropEnt(victim, Prop_Send, "m_hActiveWeapon");
1172 if(ent != -1)
1173 SetEntData(ent, FindSendPropOffs("CWeaponCSBase", "m_iClip1"), 0);
1174 }
1175 }
1176 }
1177 }
1178 switch(informacje_itemu_gracza[victim][0])
1179 {
1180 case 14:
1181 {
1182 if(informacje_itemu_gracza[attacker][0] != 29)
1183 {
1184 if(informacje_itemu_gracza[victim][1])
1185 {
1186 informacje_itemu_gracza[victim][1] --;
1187 odpornosc = 1;
1188 }
1189 }
1190 }
1191 case 20:
1192 {
1193 if(informacje_itemu_gracza[attacker][0] != 29)
1194 {
1195 if(headshot[victim])
1196 odpornosc = 1;
1197 }
1198 }
1199 case 21:
1200 {
1201 if(informacje_itemu_gracza[attacker][0] != 29 && IsPlayerAlive(attacker))
1202 {
1203 if(GetRandomInt(1, informacje_itemu_gracza[victim][1]) == 1)
1204 {
1205 SDKHooks_TakeDamage(attacker, victim, victim, 0.0+float(RoundFloat(damage)), DMG_GENERIC);
1206 odpornosc = 1;
1207 }
1208 }
1209 }
1210 }
1211 if(odpornosc)
1212 {
1213 if(damagetype & (DMG_BULLET | DMG_SLASH))
1214 return Plugin_Handled;
1215 }
1216 else
1217 {
1218 if(zabicie)
1219 {
1220 if(GetEntProp(victim, Prop_Send, "m_ArmorValue"))
1221 SetEntProp(victim, Prop_Send, "m_ArmorValue", 0);
1222
1223 damage = RoundFloat(damage+dmg)*(1.0+maksymalne_obrazenia_gracza[attacker]);
1224 }
1225 else
1226 damage = RoundFloat(damage+dmg)*(1.0+maksymalne_obrazenia_gracza[attacker]-maksymalna_wytrzymalosc_gracza[victim]);
1227
1228 return Plugin_Changed;
1229 }
1230 }
1231
1232 return Plugin_Continue;
1233}
1234public Action:WeaponCanUse(client, bron)
1235{
1236 if(!IsValidClient(client) || IsFakeClient(client))
1237 return Plugin_Continue;
1238
1239 new String:weapon[32];
1240 GetEdictClassname(bron, weapon, sizeof(weapon));
1241 switch(informacje_itemu_gracza[client][0])
1242 {
1243 case 26:
1244 {
1245 if(StrEqual(weapon, nazwy_broni[34]))
1246 return Plugin_Continue;
1247 }
1248 case 32:
1249 {
1250 if(StrEqual(weapon, nazwy_broni[36]))
1251 return Plugin_Continue;
1252 }
1253 case 33:
1254 {
1255 if(StrEqual(weapon, nazwy_broni[36]))
1256 return Plugin_Continue;
1257 }
1258 case 36: SetEntityGravity(client, 0.5);
1259 case 43: return Plugin_Continue;
1260 }
1261 switch(klasa_gracza[client])
1262 {
1263 case Thief: return Plugin_Continue;
1264 case Terminator:
1265 {
1266 if(StrEqual(weapon, nazwy_broni[6]))
1267 return Plugin_Continue;
1268 }
1269 case Szturmen:
1270 {
1271 if(StrEqual(weapon, nazwy_broni[5]) || StrEqual(weapon, nazwy_broni[23]))
1272 return Plugin_Continue;
1273 }
1274 }
1275 if(StrEqual(weapon, nazwy_broni[40]) || StrEqual(weapon, nazwy_broni[41]))
1276 return Plugin_Continue;
1277
1278 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]]))
1279 return Plugin_Handled;
1280
1281 return Plugin_Continue;
1282}
1283public Action:NowaRunda(Handle:event, const String:name[],bool:dontBroadcast)
1284{
1285 freezetime = true;
1286}
1287public Action:PoczatekRundy(Handle:event, const String:name[], bool:dontBroadcast)
1288{
1289 freezetime = false;
1290}
1291public Action:KoniecRundy(Handle:event, const String:name[],bool:dontBroadcast)
1292{
1293 for(new i = 1; i <= MaxClients; i++)
1294 {
1295 if(!IsClientInGame(i) || !klasa_gracza[i])
1296 continue;
1297
1298 new doswiadczenie = 0;
1299 new druzyna = GetEventInt(event, "winner");
1300 if(druzyna == 2 && GetClientTeam(i) == CS_TEAM_T || druzyna == 3 && GetClientTeam(i) == CS_TEAM_CT)
1301 {
1302 if(vip_gracza[i])
1303 doswiadczenie += xp_winround_vip;
1304 else
1305 doswiadczenie += xp_winround;
1306
1307 if(IsPlayerAlive(i))
1308 {
1309 PrintToChat(i, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za wygranie rundy.", doswiadczenie);
1310 doswiadczenie_gracza[i] += doswiadczenie;
1311 }
1312 else
1313 {
1314 PrintToChat(i, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za wygranie rundy przez Twoją drużynę.", doswiadczenie/2);
1315 doswiadczenie_gracza[i] += doswiadczenie/2;
1316 }
1317
1318 SprawdzPoziom(i);
1319 }
1320 }
1321}
1322public Action:BombaPodlozona(Handle:event, const String:name[], bool:dontBroadcast)
1323{
1324 new client = GetClientOfUserId(GetEventInt(event, "userid"));
1325 if(StrEqual(name, "bomb_planted"))
1326 {
1327 for(new i = 1; i <= MaxClients; i++)
1328 {
1329 if(!IsClientInGame(i) || !klasa_gracza[i])
1330 continue;
1331
1332 if(GetClientTeam(i) != CS_TEAM_T)
1333 continue;
1334
1335 new doswiadczenie = 0;
1336 if(vip_gracza[i])
1337 doswiadczenie += xp_objectives_vip;
1338 else
1339 doswiadczenie += xp_objectives;
1340
1341 if(i == client)
1342 {
1343 PrintToChat(i, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za podłożenie bomby.", doswiadczenie);
1344 doswiadczenie_gracza[i] += doswiadczenie;
1345 }
1346 else
1347 {
1348 PrintToChat(i, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za podłożenie bomby przez Twoją drużynę.", doswiadczenie/2);
1349 doswiadczenie_gracza[i] += doswiadczenie/2;
1350 }
1351
1352 SprawdzPoziom(i);
1353 }
1354 }
1355}
1356public Action:BombaRozbrojona(Handle:event, const String:name[], bool:dontBroadcast)
1357{
1358 new client = GetClientOfUserId(GetEventInt(event, "userid"));
1359 if(StrEqual(name, "bomb_defused"))
1360 {
1361 for(new i = 1; i <= MaxClients; i++)
1362 {
1363 if(!IsClientInGame(i) || !klasa_gracza[i])
1364 continue;
1365
1366 if(GetClientTeam(i) != CS_TEAM_CT)
1367 continue;
1368
1369 new doswiadczenie = 0;
1370 if(vip_gracza[i])
1371 doswiadczenie += xp_objectives_vip;
1372 else
1373 doswiadczenie += xp_objectives;
1374
1375 if(i == client)
1376 {
1377 PrintToChat(i, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za rozbrojenie bomby.", doswiadczenie);
1378 doswiadczenie_gracza[i] += doswiadczenie;
1379 }
1380 else
1381 {
1382 PrintToChat(i, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za rozbrojenie bomby przez Twoją druzynę.", doswiadczenie/2);
1383 doswiadczenie_gracza[i] += doswiadczenie/2;
1384 }
1385
1386 SprawdzPoziom(i);
1387 }
1388 }
1389}
1390public Action:ZakladnikUratowany(Handle:event, const String:name[], bool:dontBroadcast)
1391{
1392 new client = GetClientOfUserId(GetEventInt(event, "userid"));
1393 if(StrEqual(name, "hostage_rescued"))
1394 {
1395 for(new i = 1; i <= MaxClients; i++)
1396 {
1397 if(!IsClientInGame(i) || !klasa_gracza[i])
1398 continue;
1399
1400 if(GetClientTeam(i) != CS_TEAM_CT)
1401 continue;
1402
1403 new doswiadczenie = 0;
1404 if(vip_gracza[i])
1405 doswiadczenie += xp_objectives_vip;
1406 else
1407 doswiadczenie += xp_objectives;
1408
1409 if(i == client)
1410 {
1411 PrintToChat(i, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za uratowanie zakładnika.", doswiadczenie);
1412 doswiadczenie_gracza[i] += doswiadczenie;
1413 }
1414 else
1415 {
1416 PrintToChat(i, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za uratowanie zakładnika przez Twoją drużynę.", doswiadczenie/2);
1417 doswiadczenie_gracza[i] += doswiadczenie/2;
1418 }
1419
1420 SprawdzPoziom(i);
1421 }
1422 }
1423}
1424public Action:CodMenu(client, args)
1425{
1426 new Handle:menu = CreateMenu(CodMenu_Handler);
1427 SetMenuTitle(menu, "CodMenu:");
1428 AddMenuItem(menu, "1", "Sklep");
1429 AddMenuItem(menu, "2", "Wybierz KlasÄ™");
1430 AddMenuItem(menu, "3", "Wyrzuć Item");
1431 AddMenuItem(menu, "4", "Napraw Item");
1432 AddMenuItem(menu, "5", "Opis Itemu");
1433 AddMenuItem(menu, "6", "Menu Admina");
1434 DisplayMenu(menu, client, 250);
1435 return Plugin_Handled;
1436}
1437public CodMenu_Handler(Handle:classhandle, MenuAction:action, client, Position)
1438{
1439 if(action == MenuAction_Select)
1440 {
1441 new String:Item[32];
1442 GetMenuItem(classhandle, Position, Item, sizeof(Item));
1443
1444 if(StrEqual(Item, "1"))
1445 CodSklep(client);
1446 else if(StrEqual(Item, "2"))
1447 WybierzKlase(client);
1448 else if(StrEqual(Item, "3"))
1449 WyrzucItem(client);
1450 else if(StrEqual(Item, "4"))
1451 NaprawItem(client);
1452 else if(StrEqual(Item, "5"))
1453 OpisItemu(client);
1454 else if(StrEqual(Item, "6"))
1455 ClientCommand(client, "sm_admin");
1456 }
1457 else if(action == MenuAction_End)
1458 CloseHandle(classhandle);
1459}
1460public Action:CodSklep(client)
1461{
1462 if(klasa_gracza[client])
1463 {
1464 new Handle:menu = CreateMenu(CodSklep_Handler);
1465 SetMenuTitle(menu, "Cod Mod Sklep:");
1466 AddMenuItem(menu, "1", "Mała Apteczka [Leczy 20 HP] Koszt: 2000$");
1467 AddMenuItem(menu, "2", "Åšrednia Apteczka [Leczy 50 HP] Koszt: 5000$");
1468 AddMenuItem(menu, "3", "Duża Apteczka [Leczy 100 HP] Koszt: 10000$");
1469 AddMenuItem(menu, "4", "Duży Lotek [Wygraj Kasę] Koszt: 2000$");
1470 AddMenuItem(menu, "5", "Doświadczenie [Dostajesz 100 Dośw.] Koszt: 6000$");
1471 AddMenuItem(menu, "6", "Super Doświadczenie [Dostajesz 225 Dośw.] Koszt: 12000$");
1472 AddMenuItem(menu, "7", "Losowy Item [Dostajesz Losowy Item] Koszt: 3000$");
1473 AddMenuItem(menu, "8", "Sprzedaż Itemu [Dostajesz $ za Item] Dostajesz: 1500$");
1474 AddMenuItem(menu, "9", "Moc Itemu [+20 Procent Mocy Itemu] Koszt: 8000$");
1475 DisplayMenu(menu, client, 250);
1476 }
1477 else
1478 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz mieć wybraną klasę aby móc włączyć sklep!");
1479}
1480public CodSklep_Handler(Handle:classhandle, MenuAction:action, client, Position)
1481{
1482 if(action == MenuAction_Select)
1483 {
1484 new String:Item[32];
1485 GetMenuItem(classhandle, Position, Item, sizeof(Item));
1486 CodSklep(client);
1487
1488 if(StrEqual(Item, "1"))
1489 {
1490 if(GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount")) >= 2000)
1491 {
1492 if(IsPlayerAlive(client))
1493 {
1494 if(maksymalne_zdrowie_gracza[client] > GetClientHealth(client))
1495 {
1496 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))-2000);
1497 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)+20<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+20: maksymalne_zdrowie_gracza[client]);
1498 PrintToChat(client, "[\x02COD MOD\x01]\x04 Kupiłeś Małą Apteczkę.");
1499 }
1500 else
1501 PrintToChat(client, "[\x02COD MOD\x01]\x04 Jesteś w pełni uleczony!");
1502 }
1503 else
1504 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz być żywy aby móc kupić Małą Apteczkę!");
1505 }
1506 else
1507 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz za mało pieniędzy!");
1508 }
1509 else if(StrEqual(Item, "2"))
1510 {
1511 if(GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount")) >= 5000)
1512 {
1513 if(IsPlayerAlive(client))
1514 {
1515 if(maksymalne_zdrowie_gracza[client] > GetClientHealth(client))
1516 {
1517 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))-5000);
1518 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)+50<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+50: maksymalne_zdrowie_gracza[client]);
1519 PrintToChat(client, "[\x02COD MOD\x01]\x04 Kupiłeś Średnią Apteczkę.");
1520 }
1521 else
1522 PrintToChat(client, "[\x02COD MOD\x01]\x04 Jesteś w pełni uleczony!");
1523 }
1524 else
1525 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz być żywy aby móc kupić Średnią Apteczkę!");
1526 }
1527 else
1528 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz za mało pieniędzy!");
1529 }
1530 else if(StrEqual(Item, "3"))
1531 {
1532 if(GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount")) >= 10000)
1533 {
1534 if(IsPlayerAlive(client))
1535 {
1536 if(maksymalne_zdrowie_gracza[client] > GetClientHealth(client))
1537 {
1538 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))-10000);
1539 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)+100<maksymalne_zdrowie_gracza[client]? GetClientHealth(client)+100: maksymalne_zdrowie_gracza[client]);
1540 PrintToChat(client, "[\x02COD MOD\x01]\x04 Kupiłeś Dużą Apteczkę.");
1541 }
1542 else
1543 PrintToChat(client, "[\x02COD MOD\x01]\x04 Jesteś w pełni uleczony!");
1544 }
1545 else
1546 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz być żywy aby móc kupić Dużą Apteczkę!");
1547 }
1548 else
1549 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz za mało pieniędzy!");
1550 }
1551 else if(StrEqual(Item, "4"))
1552 {
1553 if(GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount")) >= 2000)
1554 {
1555 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))-2000);
1556 PrintToChat(client, "[\x02COD MOD\x01]\x04 Zagrałeś w lotto...");
1557 switch(GetRandomInt(0, 29))
1558 {
1559 case 0: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1560 case 1:
1561 {
1562 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+300);
1563 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 300$!");
1564 }
1565 case 2: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1566 case 3:
1567 {
1568 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+600);
1569 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 600$!");
1570 }
1571 case 4: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1572 case 5:
1573 {
1574 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+900);
1575 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 900$!");
1576 }
1577 case 6: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1578 case 7:
1579 {
1580 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+1200);
1581 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 1200$!");
1582 }
1583 case 8: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1584 case 9:
1585 {
1586 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+1500);
1587 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 1500$!");
1588 }
1589 case 10: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1590 case 11:
1591 {
1592 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+1800);
1593 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 1800$!");
1594 }
1595 case 12: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1596 case 13:
1597 {
1598 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+2100);
1599 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 2100$!");
1600 }
1601 case 14: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1602 case 15:
1603 {
1604 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+2400);
1605 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 2400$!");
1606 }
1607 case 16: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1608 case 17:
1609 {
1610 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+2700);
1611 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 2700$!");
1612 }
1613 case 18: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1614 case 19:
1615 {
1616 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+3000);
1617 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 3000$!");
1618 }
1619 case 20: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1620 case 21:
1621 {
1622 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+3300);
1623 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 3300$!");
1624 }
1625 case 22: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1626 case 23:
1627 {
1628 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+3600);
1629 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 3600$!");
1630 }
1631 case 24: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1632 case 25:
1633 {
1634 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+4200);
1635 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 4200$!");
1636 }
1637 case 26: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1638 case 27:
1639 {
1640 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+4800);
1641 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 4800$!");
1642 }
1643 case 28: PrintToChat(client, "[\x02COD MOD\x01]\x04 Niestety nic nie wygrałeś...");
1644 case 29:
1645 {
1646 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+5400);
1647 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wygrałeś 5400$!");
1648 }
1649 }
1650 }
1651 else
1652 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz za mało pieniędzy!");
1653 }
1654 else if(StrEqual(Item, "5"))
1655 {
1656 if(GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount")) >= 6000)
1657 {
1658 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))-6000);
1659 PrintToChat(client, "[\x02COD MOD\x01]\x04 Kupiłeś Doświadczenie.");
1660
1661 doswiadczenie_gracza[client] += 100;
1662 SprawdzPoziom(client);
1663 }
1664 else
1665 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz za mało pieniędzy!");
1666 }
1667 else if(StrEqual(Item, "6"))
1668 {
1669 if(GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount")) >= 12000)
1670 {
1671 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))-12000);
1672 PrintToChat(client, "[\x02COD MOD\x01]\x04 Kupiłeś Super Doświadczenie.");
1673
1674 doswiadczenie_gracza[client] += 225;
1675 SprawdzPoziom(client);
1676 }
1677 else
1678 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz za mało pieniędzy!");
1679 }
1680 else if(StrEqual(Item, "7"))
1681 {
1682 if(GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount")) >= 3000)
1683 {
1684 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))-3000);
1685 DajItem(client, GetRandomInt(1, sizeof nazwy_itemow-1));
1686 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wylosowałeś %s.", nazwy_itemow[informacje_itemu_gracza[client][0]]);
1687 }
1688 else
1689 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz za mało pieniędzy!");
1690 }
1691 else if(StrEqual(Item, "8"))
1692 {
1693 if(GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount")) >= 1000)
1694 {
1695 if(informacje_itemu_gracza[client][0])
1696 {
1697 new losowanie = GetRandomInt(500, 1500);
1698 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+1000+losowanie);
1699 UsunItem(client);
1700 PrintToChat(client, "[\x02COD MOD\x01]\x04 Dostałeś +%i$ za sprzedaz swojego itemu.", losowanie);
1701 }
1702 else
1703 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie masz żadnego itemu!");
1704 }
1705 else
1706 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz za mało pieniędzy!");
1707 }
1708 else if(StrEqual(Item, "9"))
1709 NaprawItem(client);
1710 }
1711 else if(action == MenuAction_End)
1712 CloseHandle(classhandle);
1713}
1714public Action:NaprawItem(client)
1715{
1716 if(GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount")) >= 8000)
1717 {
1718 if(informacje_itemu_gracza[client][0] && moc_itemu[client] < 100)
1719 {
1720 SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))-8000);
1721 moc_itemu[client] += 20;
1722 PrintToChat(client, "[\x02COD MOD\x01]\x04 Kupiłeś +20%% Mocy Itemu.");
1723 }
1724 else
1725 PrintToChat(client, "[\x02COD MOD\x01]\x04 Twoj item nie jest uszkodzony!");
1726 }
1727 else
1728 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz za mało pieniędzy!");
1729}
1730public Action:OpisStatystyk(client)
1731{
1732 new String:opis[512];
1733 Format(opis, sizeof(opis), "Klasa: %s\nPoziom: %i/%i\nDoświadczenie: %i\nKonto Premium: %s", nazwy_klas[klasa_gracza[client]], poziom_gracza[client], limit_poziomu, doswiadczenie_gracza[client], vip_gracza[client]? "Aktywne": "Nie Aktywne");
1734
1735 new Handle:menu = CreateMenu(OpisStatystyk_Handler);
1736 SetMenuTitle(menu, opis);
1737 AddMenuItem(menu, "1", "Punkty Klasy");
1738
1739 DisplayMenu(menu, client, 250);
1740}
1741public OpisStatystyk_Handler(Handle:classhandle, MenuAction:action, client, Position)
1742{
1743 if(action == MenuAction_Select)
1744 {
1745 new String:Item[32];
1746 GetMenuItem(classhandle, Position, Item, sizeof(Item));
1747 if(StrEqual(Item, "1"))
1748 PrzydzielPunkty(client);
1749 }
1750 else if(action == MenuAction_End)
1751 CloseHandle(classhandle);
1752}
1753public Action:WybierzKlase(client)
1754{
1755 if(!sql_baza)
1756 {
1757 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wystąpił błąd podczas pobierania danych z bazy!");
1758 return;
1759 }
1760 if(polaczony_raz[client])
1761 PrintToChat(client, "[\x02COD MOD\x01]\x04 Trwa wczytywanie klas...");
1762 else
1763 {
1764 if(klasa_gracza[client])
1765 {
1766 new klasa_g = klasa_gracza[client];
1767 poziom_klasy_gracza[client][klasa_g] = poziom_gracza[client];
1768 doswiadczenie_klasy_gracza[client][klasa_g] = doswiadczenie_gracza[client];
1769 inteligencja_klasy_gracza[client][klasa_g] = inteligencja_gracza[client];
1770 zdrowie_klasy_gracza[client][klasa_g] = zdrowie_gracza[client];
1771 obrazenia_klasy_gracza[client][klasa_g] = obrazenia_gracza[client];
1772 wytrzymalosc_klasy_gracza[client][klasa_g] = wytrzymalosc_gracza[client];
1773 kondycja_klasy_gracza[client][klasa_g] = kondycja_gracza[client];
1774 misja_klasy_gracza[client][klasa_g] = misja_gracza[client];
1775 zabicia_klasy_gracza[client][klasa_g] = zabicia_gracza[client];
1776 WybierzKlaseMenu(client);
1777 }
1778 else
1779 {
1780 new String:tmp[1024];
1781 new String:authid[64];
1782 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
1783 return;
1784
1785 Format(tmp, sizeof(tmp), "SELECT `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `misja`, `zabicia`, `klasa` FROM `codmod` WHERE steamid = '%s';", authid);
1786 SQL_TQuery(sql, WybierzKlase2, tmp, client);
1787 polaczony_raz[client] = true;
1788 }
1789 }
1790}
1791public WybierzKlase2(Handle:owner, Handle:query, const String:error[], any:client)
1792{
1793 if(query == INVALID_HANDLE)
1794 {
1795 LogError("Load error: %s", error);
1796 return;
1797 }
1798 if(SQL_GetRowCount(query))
1799 {
1800 new poziom = 1, doswiadczenie = 0, inteligencja = 0, zdrowie = 0, obrazenia = 0, wytrzymalosc = 0, kondycja = 0, misja = 0, zabicia = 0;
1801 new String:klasa[512];
1802 while(SQL_MoreRows(query))
1803 {
1804 while(SQL_FetchRow(query))
1805 {
1806 poziom = SQL_FetchInt(query, 0);
1807 doswiadczenie = SQL_FetchInt(query, 1);
1808 inteligencja = SQL_FetchInt(query, 2);
1809 zdrowie = SQL_FetchInt(query, 3);
1810 obrazenia = SQL_FetchInt(query, 4);
1811 wytrzymalosc = SQL_FetchInt(query, 5);
1812 kondycja = SQL_FetchInt(query, 6);
1813 misja = SQL_FetchInt(query, 7);
1814 zabicia = SQL_FetchInt(query, 8);
1815 SQL_FetchString(query, 9, klasa, sizeof(klasa));
1816 for(new i = 1; i < sizeof nazwy_klas; i ++)
1817 {
1818 if(StrEqual(nazwy_klas[i], klasa))
1819 {
1820 poziom_klasy_gracza[client][i] = poziom;
1821 doswiadczenie_klasy_gracza[client][i] = doswiadczenie;
1822 inteligencja_klasy_gracza[client][i] = inteligencja;
1823 zdrowie_klasy_gracza[client][i] = zdrowie;
1824 obrazenia_klasy_gracza[client][i] = obrazenia;
1825 wytrzymalosc_klasy_gracza[client][i] = wytrzymalosc;
1826 kondycja_klasy_gracza[client][i] = kondycja;
1827 misja_klasy_gracza[client][i] = misja;
1828 zabicia_klasy_gracza[client][i] = zabicia;
1829 }
1830 }
1831 }
1832 }
1833 }
1834
1835 WybierzKlaseMenu(client);
1836 polaczony_raz[client] = false;
1837}
1838public Action:WybierzKlaseMenu(client)
1839{
1840 new String:klasa[512];
1841 new Handle:menu = CreateMenu(WybierzKlase_Handler);
1842 SetMenuTitle(menu, "Wybierz KlasÄ™:");
1843 for(new i = 1; i < sizeof nazwy_klas; i ++)
1844 {
1845 Format(klasa, sizeof(klasa), "%s (Lv: %i)", nazwy_klas[i], poziom_klasy_gracza[client][i]);
1846 AddMenuItem(menu, "1", klasa);
1847 }
1848
1849 DisplayMenu(menu, client, 250);
1850}
1851public WybierzKlase_Handler(Handle:classhandle, MenuAction:action, client, Position)
1852{
1853 if(action == MenuAction_Select)
1854 {
1855 new String:Item[32];
1856 GetMenuItem(classhandle, Position, Item, sizeof(Item));
1857 Position ++;
1858
1859 if(StrEqual(Item, "1"))
1860 {
1861 if(Position == klasa_gracza[client])
1862 return;
1863
1864 new ma_poziom = 0;
1865 for(new i = 1; i < sizeof nazwy_klas; i ++)
1866 {
1867 if(poziom_klasy_gracza[client][i] >= umiejetnosci_klas[Position][0])
1868 ma_poziom = 1;
1869 }
1870 if(ma_poziom)
1871 {
1872 if(klasa_gracza[client])
1873 {
1874 nowa_klasa_gracza[client] = Position;
1875 PrintToChat(client, "[\x02COD MOD\x01]\x04 Klasa zostanie zmieniona w następnej rundzie.");
1876 }
1877 else
1878 {
1879 klasa_gracza[client] = Position;
1880 WczytajDane(client, klasa_gracza[client]);
1881 Odrodzenie(client);
1882 }
1883 }
1884 else
1885 {
1886 WybierzKlase(client)
1887 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrana klasa dostępna jest od %dLv!", umiejetnosci_klas[Position][0]);
1888 }
1889 }
1890 }
1891 else if(action == MenuAction_End)
1892 CloseHandle(classhandle);
1893}
1894public Action:OpisKlasy(client)
1895{
1896 new String:klasa[512];
1897 new Handle:menu = CreateMenu(OpisKlasy_Handler);
1898 SetMenuTitle(menu, "Wybierz KlasÄ™:");
1899 for(new i = 1; i < sizeof nazwy_klas; i ++)
1900 {
1901 Format(klasa, sizeof(klasa), "%s", nazwy_klas[i]);
1902 AddMenuItem(menu, "1", klasa);
1903 }
1904
1905 DisplayMenu(menu, client, 250);
1906}
1907public OpisKlasy_Handler(Handle:classhandle, MenuAction:action, client, Position)
1908{
1909 if(action == MenuAction_Select)
1910 {
1911 new String:Item[32];
1912 GetMenuItem(classhandle, Position, Item, sizeof(Item));
1913 Position ++;
1914
1915 if(StrEqual(Item, "1"))
1916 {
1917 new String:bronie_klasy[512];
1918 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]]);
1919 ReplaceString(bronie_klasy, sizeof(bronie_klasy), "weapon_", "");
1920
1921 PrintToChat(client, "[\x02COD MOD\x01]\x04 Klasa: %s - %s - %s.", nazwy_klas[Position], bronie_klasy, opisy_klas[Position]);
1922 OpisKlasy(client);
1923 }
1924 }
1925 else if(action == MenuAction_End)
1926 CloseHandle(classhandle);
1927}
1928public Action:OpisItemow(client)
1929{
1930 new String:item[512];
1931 new Handle:menu = CreateMenu(OpisItemow_Handler);
1932 SetMenuTitle(menu, "Wybierz Item:");
1933 for(new i = 1; i <sizeof nazwy_itemow; i ++)
1934 {
1935 Format(item, sizeof(item), "%s", nazwy_itemow[i]);
1936 AddMenuItem(menu, "1", item);
1937 }
1938
1939 DisplayMenu(menu, client, 250);
1940}
1941public OpisItemow_Handler(Handle:classhandle, MenuAction:action, client, Position)
1942{
1943 if(action == MenuAction_Select)
1944 {
1945 new String:Item[32];
1946 GetMenuItem(classhandle, Position, Item, sizeof(Item));
1947 Position ++;
1948
1949 if(StrEqual(Item, "1"))
1950 {
1951 PrintToChat(client, "[\x02COD MOD\x01]\x04 Item: %s - %s.", nazwy_itemow[Position], opisy_itemow[Position]);
1952 OpisItemow(client);
1953 }
1954 }
1955 else if(action == MenuAction_End)
1956 CloseHandle(classhandle);
1957}
1958public Action:Odrodzenie(client)
1959{
1960 if(!IsValidClient(client) || !IsPlayerAlive(client))
1961 return;
1962
1963 if(nowa_klasa_gracza[client])
1964 {
1965 if(zapisz_dane[client])
1966 {
1967 ZapiszDane(client);
1968 zapisz_dane[client] = false;
1969 }
1970
1971 klasa_gracza[client] = nowa_klasa_gracza[client];
1972 nowa_klasa_gracza[client] = 0;
1973 ilosc_apteczek_gracza[client] = 0;
1974 CS_UpdateClientModel(client);
1975 WczytajDane(client, klasa_gracza[client]);
1976 }
1977 if(!klasa_gracza[client])
1978 WybierzKlase(client);
1979 else
1980 {
1981 switch(klasa_gracza[client])
1982 {
1983 case Medyk: ilosc_apteczek_gracza[client] = 2;
1984 case Kangur: czas_skokow_gracza[client] = 0;
1985 case Szpieg: SetEntityModel(client, (GetClientTeam(client) == CS_TEAM_CT)? modele_serwera[GetRandomInt(6, 10)]: modele_serwera[GetRandomInt(1, 5)]);
1986 }
1987 switch(informacje_itemu_gracza[client][0])
1988 {
1989 case 4: informacje_itemu_gracza[client][1] = 1;
1990 case 14: informacje_itemu_gracza[client][1] = 3;
1991 case 19: informacje_itemu_gracza[client][1] = 1;
1992 case 22: informacje_itemu_gracza[client][1] = 0;
1993 case 25: informacje_itemu_gracza[client][1] = 1;
1994 case 32:
1995 {
1996 if(klasa_gracza[client] != Szpieg)
1997 SetEntityModel(client, (GetClientTeam(client) == CS_TEAM_CT)? modele_serwera[GetRandomInt(6, 10)]: modele_serwera[GetRandomInt(1, 5)]);
1998
1999 GivePlayerItem(client, nazwy_broni[36]);
2000 }
2001 case 33: GivePlayerItem(client, nazwy_broni[36]);
2002 case 38: informacje_itemu_gracza[client][1] = 1;
2003 case 45: SetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(client, FindSendPropOffs("CCSPlayer", "m_iAccount"))+1500);
2004 }
2005 if(punkty_gracza[client])
2006 PrzydzielPunkty(client);
2007
2008 for(new slot = 0; slot < 5; slot ++)
2009 {
2010 if(!StrEqual(nazwy_broni[0], nazwy_broni[bronie_klas[klasa_gracza[client]][slot]]))
2011 GivePlayerItem(client, nazwy_broni[bronie_klas[klasa_gracza[client]][slot]]);
2012 }
2013 }
2014
2015 maksymalna_inteligencja_gracza[client] = (inteligencja_gracza[client]+bonusowa_inteligencja_gracza[client])/6;
2016 maksymalne_zdrowie_gracza[client] = umiejetnosci_klas[klasa_gracza[client]][1]+zdrowie_gracza[client]+bonusowe_zdrowie_gracza[client];
2017 maksymalne_obrazenia_gracza[client] = (obrazenia_gracza[client]+bonusowe_obrazenia_gracza[client])*0.003;
2018 maksymalna_wytrzymalosc_gracza[client] = (umiejetnosci_klas[klasa_gracza[client]][2]+wytrzymalosc_gracza[client]+bonusowa_wytrzymalosc_gracza[client])*0.001;
2019 maksymalna_kondycja_gracza[client] = 0.9*(umiejetnosci_klas[klasa_gracza[client]][3]*0.01)+(kondycja_gracza[client]+bonusowa_kondycja_gracza[client])*0.0015;
2020
2021 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), maksymalne_zdrowie_gracza[client]);
2022 SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", maksymalna_kondycja_gracza[client]);
2023}
2024public Action:DajItem(client, item)
2025{
2026 if(informacje_itemu_gracza[client][0])
2027 UsunItem(client);
2028
2029 moc_itemu[client] = 100;
2030 informacje_itemu_gracza[client][0] = item;
2031
2032 switch(item)
2033 {
2034 case 1:
2035 {
2036 if(IsPlayerAlive(client))
2037 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)+30);
2038
2039 bonusowe_zdrowie_gracza[client] += 30;
2040 bonusowa_kondycja_gracza[client] -= 30;
2041 }
2042 case 2:
2043 {
2044 if(IsPlayerAlive(client))
2045 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)+15);
2046
2047 bonusowe_zdrowie_gracza[client] += 15;
2048 bonusowa_kondycja_gracza[client] -= 15;
2049 }
2050 case 4: informacje_itemu_gracza[client][1] = 1;
2051 case 7: informacje_itemu_gracza[client][1] = GetRandomInt(2, 4);
2052 case 10: bonusowa_wytrzymalosc_gracza[client] += 25;
2053 case 11: bonusowa_kondycja_gracza[client] += 50;
2054 case 12: bonusowa_inteligencja_gracza[client] += 25;
2055 case 14: informacje_itemu_gracza[client][1] = 3;
2056 case 19: informacje_itemu_gracza[client][1] = 1;
2057 case 21: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
2058 case 25: informacje_itemu_gracza[client][1] = 1;
2059 case 27: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
2060 case 28: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
2061 case 32:
2062 {
2063 if(IsPlayerAlive(client) && klasa_gracza[client] != Szpieg)
2064 {
2065 SetEntityModel(client, (GetClientTeam(client) == CS_TEAM_CT)? modele_serwera[GetRandomInt(6, 10)]: modele_serwera[GetRandomInt(1, 5)]);
2066 GivePlayerItem(client, nazwy_broni[36]);
2067 }
2068
2069 informacje_itemu_gracza[client][1] = GetRandomInt(1, 3);
2070 }
2071 case 33:
2072 {
2073 if(IsPlayerAlive(client))
2074 GivePlayerItem(client, nazwy_broni[36]);
2075
2076 informacje_itemu_gracza[client][1] = GetRandomInt(4, 8);
2077 }
2078 case 36:
2079 {
2080 if(IsPlayerAlive(client))
2081 SetEntityGravity(client, 0.5);
2082 }
2083 case 38: informacje_itemu_gracza[client][1] = 1;
2084 case 40: bonusowe_obrazenia_gracza[client] += 25;
2085 case 41:
2086 {
2087 if(IsPlayerAlive(client))
2088 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)+25);
2089
2090 bonusowa_inteligencja_gracza[client] += 15;
2091 bonusowe_zdrowie_gracza[client] += 15;
2092 bonusowe_obrazenia_gracza[client] += 15;
2093 bonusowa_wytrzymalosc_gracza[client] += 15;
2094 bonusowa_kondycja_gracza[client] += 15;
2095 }
2096 case 42: informacje_itemu_gracza[client][1] = GetRandomInt(10, 15);
2097 case 47: informacje_itemu_gracza[client][1] = GetRandomInt(15, 25);
2098 case 48: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
2099 case 49: informacje_itemu_gracza[client][1] = GetRandomInt(3, 6);
2100 }
2101}
2102public Action:UsunItem(client)
2103{
2104 switch(informacje_itemu_gracza[client][0])
2105 {
2106 case 1:
2107 {
2108 if(IsPlayerAlive(client) && GetClientHealth(client) > 100)
2109 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)-100);
2110
2111 bonusowe_zdrowie_gracza[client] -= 30;
2112 bonusowa_kondycja_gracza[client] += 30;
2113 }
2114 case 2:
2115 {
2116 if(IsPlayerAlive(client) && GetClientHealth(client) > 50)
2117 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)-50);
2118
2119 bonusowe_zdrowie_gracza[client] -= 15;
2120 bonusowa_kondycja_gracza[client] += 15;
2121 }
2122 case 10: bonusowa_wytrzymalosc_gracza[client] -= 100;
2123 case 11: bonusowa_kondycja_gracza[client] -= 100;
2124 case 12: bonusowa_inteligencja_gracza[client] -= 100;
2125 case 13:
2126 {
2127 if(GetEntProp(client, Prop_Send, "m_bNightVisionOn"))
2128 SetEntProp(client, Prop_Send, "m_bNightVisionOn", 0);
2129 }
2130 case 32:
2131 {
2132 if(IsPlayerAlive(client) && klasa_gracza[client] != Szpieg)
2133 CS_UpdateClientModel(client);
2134 }
2135 case 36: SetEntityGravity(client, 1.0);
2136 case 40: bonusowe_obrazenia_gracza[client] -= 50;
2137 case 41:
2138 {
2139 if(IsPlayerAlive(client) && GetClientHealth(client) > 25)
2140 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), GetClientHealth(client)-25);
2141
2142 bonusowa_inteligencja_gracza[client] -= 25;
2143 bonusowe_zdrowie_gracza[client] -= 25;
2144 bonusowe_obrazenia_gracza[client] -= 25;
2145 bonusowa_wytrzymalosc_gracza[client] -= 25;
2146 bonusowa_kondycja_gracza[client] -= 25;
2147 }
2148 }
2149
2150 moc_itemu[client] = 0;
2151 informacje_itemu_gracza[client][0] = 0;
2152 informacje_itemu_gracza[client][1] = 0;
2153}
2154public Action:PlayerSpawn(Handle:event, String:name[], bool:dontBroadcast)
2155{
2156 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2157 if(!IsValidClient(client) || IsFakeClient(client))
2158 return;
2159
2160 if(hud_task[client] == null)
2161 hud_task[client] = CreateTimer(REFRESH_HUD, PokazInformacje, client, TIMER_FLAG_NO_MAPCHANGE);
2162
2163 if(GetUserFlagBits(client) & VIP_FLAG && !vip_gracza[client])
2164 {
2165 CS_SetClientClanTag(client, "[★VIP★]");
2166 bonusowe_zdrowie_gracza[client] += 15;
2167 bonusowa_wytrzymalosc_gracza[client] += 20;
2168 bonusowa_kondycja_gracza[client] += 20;
2169 vip_gracza[client] = true;
2170 }
2171 for(new slot = 0; slot < 4; slot ++)
2172 {
2173 new weapon_index = -1;
2174 while((weapon_index = GetPlayerWeaponSlot(client, slot)) != -1)
2175 {
2176 if(IsValidEntity(weapon_index))
2177 {
2178 RemovePlayerItem(client, weapon_index);
2179 AcceptEntityInput(weapon_index, "kill");
2180 }
2181 }
2182 }
2183
2184 GivePlayerItem(client, nazwy_broni[40]);
2185 Odrodzenie(client);
2186}
2187public Action:PlayerDeath(Handle:event, String:name[], bool:dontBroadcast)
2188{
2189 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2190 new killer = GetClientOfUserId(GetEventInt(event, "attacker"));
2191 if(!IsValidClient(client) || !IsValidClient(killer))
2192 return;
2193
2194 if(klasa_gracza[killer] && GetClientTeam(client) != GetClientTeam(killer))
2195 {
2196 new doswiadczenie = 0;
2197 switch(klasa_gracza[killer])
2198 {
2199 case Szturmen:
2200 {
2201 if(klasa_gracza[client] != Obronca && informacje_itemu_gracza[client][0] != 30)
2202 SetEntData(killer, FindDataMapOffs(killer, "m_iHealth"), GetClientHealth(killer)+30<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+30: maksymalne_zdrowie_gracza[killer]);
2203 }
2204 }
2205 switch(informacje_itemu_gracza[killer][0])
2206 {
2207 case 0:
2208 {
2209 DajItem(killer, GetRandomInt(1, sizeof nazwy_itemow-1));
2210 PrintToChat(killer, "[\x02COD MOD\x01]\x04 Zdobyłeś %s.", nazwy_itemow[informacje_itemu_gracza[killer][0]]);
2211 }
2212 case 5:
2213 {
2214 if(informacje_itemu_gracza[client][0] != 29)
2215 SetEntData(killer, FindDataMapOffs(killer, "m_iHealth"), GetClientHealth(killer)+15<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+15: maksymalne_zdrowie_gracza[killer]);
2216 }
2217 case 8:
2218 {
2219 if(informacje_itemu_gracza[client][0] != 29)
2220 doswiadczenie += 10;
2221 }
2222 case 9:
2223 {
2224 if(informacje_itemu_gracza[client][0] != 29)
2225 SetEntData(killer, FindSendPropOffs("CCSPlayer", "m_iAccount"), GetEntData(killer, FindSendPropOffs("CCSPlayer", "m_iAccount"))+300);
2226 }
2227 case 39:
2228 {
2229 if(informacje_itemu_gracza[client][0] != 29)
2230 SetEntData(killer, FindDataMapOffs(killer, "m_iHealth"), GetClientHealth(killer)+20<maksymalne_zdrowie_gracza[killer]? GetClientHealth(killer)+20: maksymalne_zdrowie_gracza[killer]);
2231 }
2232 case 44:
2233 {
2234 if(informacje_itemu_gracza[client][0] != 29)
2235 doswiadczenie += 20;
2236 }
2237 }
2238 if(misja_gracza[killer])
2239 {
2240 if(klasa_gracza[client] == nazwy_misji[misja_gracza[killer]][2] || informacje_itemu_gracza[client][0] == nazwy_misji[misja_gracza[killer]][2])
2241 zabicia_gracza[killer] ++;
2242
2243 if(zabicia_gracza[killer] == nazwy_misji[misja_gracza[killer]][1])
2244 {
2245 doswiadczenie += nazwy_misji[misja_gracza[killer]][3];
2246 PrintToChat(killer, "[\x02COD MOD\x01]\x04 Wykonałeś zadanie: [%s]. Gratulacje!", opisy_misji[misja_gracza[killer]]);
2247 misja_gracza[killer] = 0;
2248 zabicia_gracza[killer] = 0;
2249 }
2250 }
2251 if(headshot[client])
2252 {
2253 new String:godzina_str[8];
2254 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
2255 new godzina = StringToInt(godzina_str);
2256 if(godzina >= 6 && godzina < 24)
2257 {
2258 if(vip_gracza[killer])
2259 {
2260 {
2261 if(informacje_itemu_gracza[client][20])
2262 doswiadczenie += xp_kill_vip+xp_kill_hs_vip;
2263 else
2264 doswiadczenie += RoundFloat(poziom_gracza[client]*0.75+xp_kill_vip+xp_kill_hs_vip);
2265 }
2266 }
2267 else
2268 {
2269 {
2270 if(informacje_itemu_gracza[client][20])
2271 doswiadczenie += xp_kill_vip+xp_kill_hs_vip*2;
2272 else
2273 doswiadczenie += RoundFloat(poziom_gracza[client]*0.75+xp_kill_vip+xp_kill_hs_vip*2);
2274 }
2275 }
2276
2277 PrintToChat(killer, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za zabicie przeciwnika strzałem w głowę.", doswiadczenie);
2278 ClientCommand(killer, "play *%s", dzwieki_serwera[GetRandomInt(2, 5)]);
2279 }
2280 else
2281 {
2282 if(vip_gracza[killer])
2283 {
2284 if(informacje_itemu_gracza[client][20])
2285 doswiadczenie += RoundFloat(poziom_gracza[client]*0.75+xp_kill_vip);
2286 else
2287 doswiadczenie += RoundFloat(poziom_gracza[client]*0.375+xp_kill);
2288
2289 PrintToChat(killer, "[\x02COD MOD\x01]\x04 Dostałeś %i doświadczenia za zabicie przeciwnika.", doswiadczenie);
2290 }
2291 }
2292
2293 doswiadczenie_gracza[killer] += doswiadczenie;
2294 SprawdzPoziom(killer);
2295 }
2296 switch(klasa_gracza[client])
2297 {
2298 case Terrorysta:
2299 {
2300 if(informacje_itemu_gracza[client][0] != 37)
2301 {
2302 new Float:fOrigin[3];
2303 new Float:iOrigin[3];
2304 GetClientEyePosition(client, Float:fOrigin);
2305
2306 for(new i = 1; i <= MaxClients; i++)
2307 {
2308 if(!IsClientInGame(i) || !IsPlayerAlive(i))
2309 continue;
2310
2311 if(GetClientTeam(client) == GetClientTeam(i))
2312 continue;
2313
2314 GetClientEyePosition(i, Float:iOrigin);
2315 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
2316 SDKHooks_TakeDamage(i, client, client, ((klasa_gracza[i] == Obronca || informacje_itemu_gracza[i][0] == 30)? 0.0: 80.0+float(maksymalna_inteligencja_gracza[client])), DMG_GENERIC);
2317 }
2318
2319 TE_SetupExplosion(fOrigin, sprite_blue, 10.0, 1, 0, 100, 100);
2320 TE_SendToAll();
2321 }
2322 }
2323 }
2324 switch(informacje_itemu_gracza[client][0])
2325 {
2326 case 7:
2327 {
2328 if(GetRandomInt(1, informacje_itemu_gracza[client][1]) == 1)
2329 CreateTimer(0.1, Wskrzes, client, TIMER_FLAG_NO_MAPCHANGE);
2330 }
2331 case 37:
2332 {
2333 new Float:fOrigin[3];
2334 new Float:iOrigin[3];
2335 GetClientEyePosition(client, Float:fOrigin);
2336
2337 for(new i = 1; i <= MaxClients; i++)
2338 {
2339 if(!IsClientInGame(i) || !IsPlayerAlive(i))
2340 continue;
2341
2342 if(GetClientTeam(client) == GetClientTeam(i))
2343 continue;
2344
2345 GetClientEyePosition(i, Float:iOrigin);
2346 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
2347 {
2348 if(GetEntProp(i, Prop_Send, "m_ArmorValue"))
2349 SetEntProp(i, Prop_Send, "m_ArmorValue", 0);
2350
2351 SDKHooks_TakeDamage(i, client, client, ((informacje_itemu_gracza[i][0] == 29)? 0.0: 1.0+float(GetClientHealth(i))), DMG_GENERIC);
2352 }
2353 }
2354
2355 TE_SetupExplosion(fOrigin, sprite_blue, 10.0, 1, 0, 100, 100);
2356 TE_SendToAll();
2357 }
2358 }
2359 if(informacje_itemu_gracza[client][0])
2360 {
2361 if(moc_itemu[client] > 20)
2362 moc_itemu[client] -= 20;
2363 else
2364 {
2365 UsunItem(client);
2366 PrintToChat(client, "[\x02COD MOD\x01]\x04 Twój item uległ zniszczeniu.");
2367 }
2368 }
2369}
2370public Action:PlayerBlind(Handle:event, const String:name[], bool:dontBroadcast)
2371{
2372 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2373 if(!IsValidClient(oslepiajacy_gracz) || !IsValidClient(client))
2374 return;
2375
2376 if(client == oslepiajacy_gracz)
2377 return;
2378
2379 if(GetClientTeam(client) == GetClientTeam(oslepiajacy_gracz) || informacje_itemu_gracza[client][0] == 39 && informacje_itemu_gracza[oslepiajacy_gracz][0] != 29)
2380 SetEntDataFloat(client, FindSendPropOffs("CCSPlayer", "m_flFlashMaxAlpha"), 0.5);
2381}
2382public Action:HeDetonate(Handle:event, const String:name[], bool:dontBroadcast)
2383{
2384 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2385 if(!IsValidClient(client))
2386 return;
2387
2388 new damage = 0;
2389 if(klasa_gracza[client] == Partyzant || informacje_itemu_gracza[client][0] == 32 && GetRandomInt(1, informacje_itemu_gracza[client][1]) == 1 || informacje_itemu_gracza[client][0] == 33)
2390 damage = 1;
2391
2392 new Float:fOrigin[3];
2393 new Float:iOrigin[3];
2394 fOrigin[0] = GetEventFloat(event, "x");
2395 fOrigin[1] = GetEventFloat(event, "y");
2396 fOrigin[2] = GetEventFloat(event, "z");
2397
2398 for(new i = 1; i <= MaxClients; i++)
2399 {
2400 if(!IsClientInGame(i) || !IsPlayerAlive(i))
2401 continue;
2402
2403 GetClientAbsOrigin(i, Float:iOrigin);
2404 if(GetClientTeam(client) != GetClientTeam(i) && damage)
2405 {
2406 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
2407 {
2408 if(GetEntProp(i, Prop_Send, "m_ArmorValue"))
2409 SetEntProp(i, Prop_Send, "m_ArmorValue", 0);
2410
2411 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+float(GetClientHealth(i))): ((klasa_gracza[i] == Obronca || informacje_itemu_gracza[i][0] == 30)? 0.0: 50.0+float(maksymalna_inteligencja_gracza[client])), DMG_GENERIC);
2412 }
2413 }
2414 else if(client == i)
2415 {
2416 new Float:dystans = GetVectorDistance(fOrigin, iOrigin);
2417 if(dystans <= 200.0)
2418 SlapPlayer(i, 201-RoundFloat(dystans), true);
2419 }
2420 }
2421 if(damage)
2422 {
2423 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);
2424 TE_SendToAll();
2425 }
2426}
2427public Action:FbDetonate(Handle:event, const String:name[], bool:dontBroadcast)
2428{
2429 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2430 if(!IsValidClient(client))
2431 return;
2432
2433 oslepiajacy_gracz = client;
2434}
2435public Action:SprawdzPoziom(client)
2436{
2437 if(!IsValidClient(client) || !klasa_gracza[client])
2438 return;
2439
2440 while(doswiadczenie_gracza[client] >= doswiadczenie_poziomu[poziom_gracza[client]] && poziom_gracza[client] < limit_poziomu)
2441 {
2442 poziom_gracza[client] ++;
2443 punkty_gracza[client] = (poziom_gracza[client]/co_ile_lv_punkt-1)-inteligencja_gracza[client]-zdrowie_gracza[client]-obrazenia_gracza[client]-wytrzymalosc_gracza[client]-kondycja_gracza[client];
2444 ClientCommand(client, "play *%s", dzwieki_serwera[1]);
2445 }
2446 while(doswiadczenie_gracza[client] < doswiadczenie_poziomu[poziom_gracza[client]-1])
2447 {
2448 poziom_gracza[client] --;
2449 ResetujPunkty(client);
2450 }
2451 if(poziom_gracza[client] > limit_poziomu)
2452 {
2453 poziom_gracza[client] = limit_poziomu;
2454 ResetujPunkty(client);
2455 }
2456 if(!zapisz_dane[client])
2457 zapisz_dane[client] = true;
2458}
2459public Action:PrzydzielPunkty(client)
2460{
2461 new String:tytul[512];
2462 new String:szybkosc[512];
2463 new String:inteligencja[512];
2464 new String:zdrowie[512];
2465 new String:obrazenia[512];
2466 new String:wytrzymalosc[512];
2467 new String:kondycja[512];
2468 Format(tytul, sizeof(tytul), "Przydziel Punkty (%i):", punkty_gracza[client]);
2469 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
2470 Format(szybkosc, sizeof(szybkosc), "Ile dodawac: ALL (Po ile punktow dodawac do statystyk)");
2471 else
2472 Format(szybkosc, sizeof(szybkosc), "Ile dodawać: %i (Po ile punktów dodawać do statystyk)", ile_rozdawac[szybkosc_rozdania[client]]);
2473 Format(inteligencja, sizeof(inteligencja), "Inteligencja: %i/%i (Zwiększa umiejętności klasy o %i punktow)", inteligencja_gracza[client], limit_inteligencji, inteligencja_gracza[client]/6);
2474 Format(zdrowie, sizeof(zdrowie), "Zdrowie: %i/%i (Zwieksza zdrowie o %i punktow)", zdrowie_gracza[client], limit_zdrowia, zdrowie_gracza[client]);
2475 Format(obrazenia, sizeof(obrazenia), "Obrażenia: %i/%i (Zwiększa zadawane obrażenia o %i%%)", obrazenia_gracza[client], limit_obrazen, RoundFloat(obrazenia_gracza[client]*0.3));
2476 Format(wytrzymalosc, sizeof(wytrzymalosc), "Wytrzymałość: %i/%i (Zmniejsza otrzymywane obrażenia o %i%%)", wytrzymalosc_gracza[client], limit_wytrzymalosci, RoundFloat(wytrzymalosc_gracza[client]*0.1));
2477 Format(kondycja, sizeof(kondycja), "Kondycja: %i/%i (Zwiększa tempo chodu o %i%%)", kondycja_gracza[client], limit_kondycji, RoundFloat(kondycja_gracza[client]*0.15));
2478
2479 new Handle:menu = CreateMenu(PrzydzielPunkty_Handler);
2480 SetMenuTitle(menu, tytul);
2481 AddMenuItem(menu, "1", szybkosc);
2482 AddMenuItem(menu, "2", inteligencja);
2483 AddMenuItem(menu, "3", zdrowie);
2484 AddMenuItem(menu, "4", obrazenia);
2485 AddMenuItem(menu, "5", wytrzymalosc);
2486 AddMenuItem(menu, "6", kondycja);
2487 DisplayMenu(menu, client, 250);
2488}
2489public PrzydzielPunkty_Handler(Handle:classhandle, MenuAction:action, client, Position)
2490{
2491 if(action == MenuAction_Select)
2492 {
2493 if(punkty_gracza[client])
2494 {
2495 new String:Item[32];
2496 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2497 new ilosc;
2498
2499 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
2500 ilosc = punkty_gracza[client];
2501 else
2502 ilosc = (ile_rozdawac[szybkosc_rozdania[client]] > punkty_gracza[client])? punkty_gracza[client]: ile_rozdawac[szybkosc_rozdania[client]];
2503
2504 if(StrEqual(Item, "1"))
2505 {
2506 if(szybkosc_rozdania[client] == 2)
2507 szybkosc_rozdania[client] = 0;
2508 else
2509 szybkosc_rozdania[client] ++;
2510 }
2511 else if(StrEqual(Item, "2"))
2512 {
2513 if(inteligencja_gracza[client] != limit_inteligencji)
2514 {
2515 if(inteligencja_gracza[client] + ilosc <= limit_inteligencji)
2516 {
2517 inteligencja_gracza[client] += ilosc;
2518 punkty_gracza[client] -= ilosc;
2519 }
2520 else
2521 {
2522 new punktydododania;
2523 punktydododania = limit_inteligencji - inteligencja_gracza[client];
2524 inteligencja_gracza[client] += punktydododania;
2525 punkty_gracza[client] -= punktydododania;
2526 }
2527 }
2528 else
2529 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom inteligencji osiągnięty!");
2530 }
2531 else if(StrEqual(Item, "3"))
2532 {
2533 if(zdrowie_gracza[client] != limit_zdrowia)
2534 {
2535 if(zdrowie_gracza[client] + ilosc <= limit_zdrowia)
2536 {
2537 zdrowie_gracza[client] += ilosc;
2538 punkty_gracza[client] -= ilosc;
2539 }
2540 else
2541 {
2542 new punktydododania;
2543 punktydododania = limit_zdrowia - zdrowie_gracza[client];
2544 zdrowie_gracza[client] += punktydododania;
2545 punkty_gracza[client] -= punktydododania;
2546 }
2547 }
2548 else
2549 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom zdrowia osiągnięty!");
2550 }
2551 else if(StrEqual(Item, "4"))
2552 {
2553 if(obrazenia_gracza[client] != limit_obrazen)
2554 {
2555 if(obrazenia_gracza[client] + ilosc <= limit_obrazen)
2556 {
2557 obrazenia_gracza[client] += ilosc;
2558 punkty_gracza[client] -= ilosc;
2559 }
2560 else
2561 {
2562 new punktydododania;
2563 punktydododania = limit_obrazen - obrazenia_gracza[client];
2564 obrazenia_gracza[client] += punktydododania;
2565 punkty_gracza[client] -= punktydododania;
2566 }
2567 }
2568 else
2569 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom obrażeń osiągnięty!");
2570 }
2571 else if(StrEqual(Item, "5"))
2572 {
2573 if(wytrzymalosc_gracza[client] != limit_wytrzymalosci)
2574 {
2575 if(wytrzymalosc_gracza[client] + ilosc <= limit_wytrzymalosci)
2576 {
2577 wytrzymalosc_gracza[client] += ilosc;
2578 punkty_gracza[client] -= ilosc;
2579 }
2580 else
2581 {
2582 new punktydododania;
2583 punktydododania = limit_wytrzymalosci - wytrzymalosc_gracza[client];
2584 wytrzymalosc_gracza[client] += punktydododania;
2585 punkty_gracza[client] -= punktydododania;
2586 }
2587 }
2588 else
2589 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom wytrzymałości osiągnięty!");
2590 }
2591 else if(StrEqual(Item, "6"))
2592 {
2593 if(kondycja_gracza[client] != limit_kondycji)
2594 {
2595 if(kondycja_gracza[client] + ilosc <= limit_kondycji)
2596 {
2597 kondycja_gracza[client] += ilosc;
2598 punkty_gracza[client] -= ilosc;
2599 }
2600 else
2601 {
2602 new punktydododania;
2603 punktydododania = limit_kondycji - kondycja_gracza[client];
2604 kondycja_gracza[client] += punktydododania;
2605 punkty_gracza[client] -= punktydododania;
2606 }
2607 }
2608 else
2609 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom kondycji osiągnięty!");
2610 }
2611 if(punkty_gracza[client])
2612 PrzydzielPunkty(client);
2613
2614 if(!zapisz_dane[client])
2615 zapisz_dane[client] = true;
2616 }
2617 }
2618 else if(action == MenuAction_End)
2619 CloseHandle(classhandle);
2620}
2621public Action:ResetujPunkty(client)
2622{
2623 punkty_gracza[client] = poziom_gracza[client]/co_ile_lv_punkt-1;
2624 inteligencja_gracza[client] = 0;
2625 zdrowie_gracza[client] = 0;
2626 obrazenia_gracza[client] = 0;
2627 wytrzymalosc_gracza[client] = 0;
2628 kondycja_gracza[client] = 0;
2629 PrintToChat(client, "[\x02COD MOD\x01]\x04 Umiejętności zostały zresetowane.");
2630
2631 if(punkty_gracza[client])
2632 {
2633 PrzydzielPunkty(client);
2634 if(!zapisz_dane[client])
2635 zapisz_dane[client] = true;
2636 }
2637}
2638public Action:OpisItemu(client)
2639{
2640 new String:opis_itemu[128];
2641 new String:losowa_wartosc[4];
2642 IntToString(informacje_itemu_gracza[client][1], losowa_wartosc, 3);
2643 Format(opis_itemu, sizeof(opis_itemu), opisy_itemow[informacje_itemu_gracza[client][0]]);
2644 ReplaceString(opis_itemu, sizeof(opis_itemu), "LW", losowa_wartosc);
2645
2646 PrintToChat(client, "[\x02COD MOD\x01]\x04 Item: %s [%i%%].", nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]);
2647 PrintToChat(client, "[\x02COD MOD\x01]\x04 Opis: %s.", opis_itemu);
2648}
2649public Action:WyrzucItem(client)
2650{
2651 if(informacje_itemu_gracza[client][0])
2652 {
2653 UsunItem(client);
2654 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wyrzuciłeś swój item.");
2655 }
2656 else
2657 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie masz żadnego itemu.");
2658}
2659public Action:ZmienDruzyne(client)
2660{
2661 if(GetClientTeam(client) == CS_TEAM_SPECTATOR)
2662 {
2663 switch(GetRandomInt(0, 1))
2664 {
2665 case 0:
2666 {
2667 ChangeClientTeam(client, CS_TEAM_T);
2668 PrintToChat(client, "[\x02COD MOD\x01]\x04 Zostałeś przeniesiony do TT.");
2669 }
2670 case 1:
2671 {
2672 ChangeClientTeam(client, CS_TEAM_CT);
2673 PrintToChat(client, "[\x02COD MOD\x01]\x04 Zostałeś przeniesiony do CT.");
2674 }
2675 }
2676 }
2677 else
2678 ChangeClientTeam(client, CS_TEAM_SPECTATOR);
2679}
2680public Action:OddajItem(client)
2681{
2682 if(klasa_gracza[client])
2683 {
2684 new Handle:menu = CreateMenu(OddajItem_Handler);
2685 SetMenuTitle(menu, "Oddaj Item:");
2686 for(new i = 1; i <= MaxClients; i++)
2687 {
2688 if(!IsClientInGame(i) || i == client)
2689 continue;
2690
2691 AddMenuItem(menu, nazwa_gracza[i], nazwa_gracza[i]);
2692 }
2693
2694 DisplayMenu(menu, client, 250);
2695 }
2696 else
2697 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz mieć wybraną klasę aby móc oddać item!");
2698}
2699public OddajItem_Handler(Handle:classhandle, MenuAction:action, client, Position)
2700{
2701 if(action == MenuAction_Select)
2702 {
2703 new String:Item[64];
2704 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2705 Position ++;
2706
2707 new userid = FindTarget(0, Item);
2708 if(!IsValidClient(userid) || userid == -1)
2709 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie odnaleziono wybranego gracza!");
2710 else if(!klasa_gracza[userid])
2711 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz musi mieć klasę by móc mu przekazać item!");
2712 else if(informacje_itemu_gracza[userid][0])
2713 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz ma już item!");
2714 else if(!informacje_itemu_gracza[client][0])
2715 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie masz żadnego itemu!");
2716 else
2717 {
2718 new String:nazwa[512];
2719 Format(nazwa, sizeof(nazwa), "Czy chcesz przyjac item od %s?", nazwa_gracza[client]);
2720 new Handle:menu = CreateMenu(OddajItem_Handler2);
2721 SetMenuTitle(menu, nazwa);
2722 AddMenuItem(menu, "1", "Tak");
2723 AddMenuItem(menu, "2", "Nie");
2724 DisplayMenu(menu, userid, 250);
2725 client_gracza[userid] = client;
2726 }
2727 }
2728 else if(action == MenuAction_End)
2729 CloseHandle(classhandle);
2730}
2731public OddajItem_Handler2(Handle:classhandle, MenuAction:action, client, Position)
2732{
2733 if(action == MenuAction_Select)
2734 {
2735 new String:Item[32];
2736 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2737 new userid = client_gracza[client];
2738
2739 if(StrEqual(Item, "1"))
2740 {
2741 if(!IsValidClient(userid))
2742 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie odnaleziono wybranego gracza!");
2743 else if(!klasa_gracza[userid])
2744 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz musi mieć klasę by móc od niego odebrać item!");
2745 else if(!informacje_itemu_gracza[userid][0])
2746 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz nie ma żadnego itemu!");
2747 else if(informacje_itemu_gracza[client][0])
2748 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz już item!");
2749 else
2750 {
2751 DajItem(client, informacje_itemu_gracza[userid][0]);
2752 informacje_itemu_gracza[client][1] = informacje_itemu_gracza[userid][1];
2753 UsunItem(userid);
2754
2755 PrintToChatAll("[\x02COD MOD\x01]\x04 Gracz %s przekazał item graczowi %s.", nazwa_gracza[userid], nazwa_gracza[client]);
2756 }
2757 }
2758 else if(StrEqual(Item, "2"))
2759 {
2760 if(IsValidClient(userid))
2761 PrintToChat(userid, "[\x02COD MOD\x01]\x04 Wybrany gracz nie zgodził się na przyjęcie itemu!");
2762 }
2763 }
2764 else if(action == MenuAction_End)
2765 CloseHandle(classhandle);
2766}
2767public Action:WymienItem(client)
2768{
2769 if(klasa_gracza[client])
2770 {
2771 new Handle:menu = CreateMenu(WymienItem_Handler);
2772 SetMenuTitle(menu, "Oddaj Item:");
2773 for(new i = 1; i <= MaxClients; i++)
2774 {
2775 if(!IsClientInGame(i) || i == client)
2776 continue;
2777
2778 AddMenuItem(menu, nazwa_gracza[i], nazwa_gracza[i]);
2779 }
2780
2781 DisplayMenu(menu, client, 250);
2782 }
2783 else
2784 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz mieć wybraną klasę aby móc wymienić item!");
2785}
2786public WymienItem_Handler(Handle:classhandle, MenuAction:action, client, Position)
2787{
2788 if(action == MenuAction_Select)
2789 {
2790 new String:Item[64];
2791 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2792 Position ++;
2793
2794 new userid = FindTarget(0, Item);
2795 if(!IsValidClient(userid) || userid == -1)
2796 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie odnaleziono wybranego gracza!");
2797 else if(!klasa_gracza[userid])
2798 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz musi mieć klasę by móc mu przekazać item!");
2799 else if(!informacje_itemu_gracza[userid][0])
2800 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz nie ma żadnego itemu!");
2801 else if(!informacje_itemu_gracza[client][0])
2802 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie masz żadnego itemu!");
2803 else if(informacje_itemu_gracza[client][0] == informacje_itemu_gracza[userid][0])
2804 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie możesz wymienić swojego itemu na ten sam!");
2805 else if(wymiana_gracza[userid])
2806 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz wymieniał już swój item!");
2807 else if(wymiana_gracza[client])
2808 PrintToChat(client, "[\x02COD MOD\x01]\x04 Możesz wymienić item tylko raz na mapę!");
2809 else if(blokada_gracza[userid])
2810 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz zablokował wymianę itemu!");
2811 else if(blokada_gracza[client])
2812 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz zablokowanÄ… wymianÄ™ itemu!");
2813 else
2814 {
2815 new String:nazwa[512];
2816 Format(nazwa, sizeof(nazwa), "Czy chcesz wymienic swój item na %s z graczem %s?", nazwy_itemow[informacje_itemu_gracza[client][0]], nazwa_gracza[client]);
2817 new Handle:menu = CreateMenu(WymienItem_Handler2);
2818 SetMenuTitle(menu, nazwa);
2819 AddMenuItem(menu, "1", "Tak");
2820 AddMenuItem(menu, "2", "Nie");
2821 DisplayMenu(menu, userid, 250);
2822 client_gracza[userid] = client;
2823 }
2824 }
2825 else if(action == MenuAction_End)
2826 CloseHandle(classhandle);
2827}
2828public WymienItem_Handler2(Handle:classhandle, MenuAction:action, client, Position)
2829{
2830 if(action == MenuAction_Select)
2831 {
2832 new String:Item[32];
2833 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2834 new userid = client_gracza[client];
2835
2836 if(StrEqual(Item, "1"))
2837 {
2838 if(!IsValidClient(userid))
2839 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie odnaleziono wybranego gracza!");
2840 else if(!klasa_gracza[userid])
2841 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz musi mieć klasę by móc od niego odebrać item!");
2842 else if(!informacje_itemu_gracza[userid][0])
2843 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz nie ma żadnego itemu!");
2844 else if(!informacje_itemu_gracza[client][0])
2845 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie masz żadnego itemu!");
2846 else if(informacje_itemu_gracza[client][0] == informacje_itemu_gracza[userid][0])
2847 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie możesz wymienić swojego itemu na ten sam!");
2848 else if(wymiana_gracza[userid])
2849 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz wymieniał już swój item!");
2850 else if(wymiana_gracza[client])
2851 PrintToChat(client, "[\x02COD MOD\x01]\x04 Mozesz wymienić item tylko raz na mapę!");
2852 else if(blokada_gracza[userid])
2853 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz zablokował wymianę itemu!");
2854 else if(blokada_gracza[client])
2855 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz zablokowanÄ… wymianÄ™ itemu!");
2856 else
2857 {
2858 new item_zmienny[4];
2859 item_zmienny[0] = informacje_itemu_gracza[userid][0];
2860 item_zmienny[1] = informacje_itemu_gracza[client][0];
2861 item_zmienny[2] = informacje_itemu_gracza[userid][1];
2862 item_zmienny[3] = informacje_itemu_gracza[client][1];
2863
2864 DajItem(client, item_zmienny[0]);
2865 DajItem(userid, item_zmienny[1]);
2866 informacje_itemu_gracza[client][1] = item_zmienny[2];
2867 informacje_itemu_gracza[userid][1] = item_zmienny[3];
2868
2869 wymiana_gracza[userid] = true;
2870 wymiana_gracza[client] = true;
2871
2872 PrintToChatAll("[\x02COD MOD\x01]\x04 Gracz %s oraz %s wymienili sie itemami.", nazwa_gracza[userid], nazwa_gracza[client]);
2873 }
2874 }
2875 else if(StrEqual(Item, "2"))
2876 {
2877 if(IsValidClient(userid))
2878 PrintToChat(userid, "[\x02COD MOD\x01]\x04 Wybrany gracz nie zgodził się na wymianę itemu!");
2879 }
2880 }
2881 else if(action == MenuAction_End)
2882 CloseHandle(classhandle);
2883}
2884public Action:CmdExp(client, args)
2885{
2886 new String:arg1[32];
2887 new String:arg2[6];
2888 GetCmdArg(1, arg1, sizeof(arg1));
2889 GetCmdArg(2, arg2, sizeof(arg2));
2890 new target = FindTarget(client, arg1);
2891 new zmienna = StringToInt(arg2)-1;
2892 if(target != -1)
2893 {
2894 if((-zmienna) > doswiadczenie_gracza[target])
2895 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Chciałeś odjąć graczowi zbyt dużo doświadczenia.");
2896 else
2897 {
2898 doswiadczenie_gracza[target] += zmienna;
2899 SprawdzPoziom(target);
2900
2901 LogMessage("%s - dał graczowi %s (%i expa).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
2902 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Dałeś graczowi %s (%i expa).", nazwa_gracza[target], zmienna);
2903 }
2904 }
2905}
2906public Action:CmdLvl(client, args)
2907{
2908 new String:arg1[32];
2909 new String:arg2[6];
2910 GetCmdArg(1, arg1, sizeof(arg1));
2911 GetCmdArg(2, arg2, sizeof(arg2));
2912 new target = FindTarget(client, arg1);
2913 new zmienna = StringToInt(arg2)-1;
2914 if(target != -1)
2915 {
2916 if((-zmienna) > poziom_gracza[target])
2917 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Chciałeś ustawić graczowi zbyt mały poziom.");
2918 else
2919 {
2920 if(poziom_gracza[target] + zmienna > limit_poziomu)
2921 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Chciałeś ustawić graczowi zbyt duzy poziom.");
2922 else
2923 {
2924 doswiadczenie_gracza[target] += doswiadczenie_poziomu[zmienna];
2925 SprawdzPoziom(target);
2926
2927 LogMessage("%s - dal graczowi %s (%i Lv).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
2928 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Dałeś graczowi %s (%i Lv).", nazwa_gracza[target], zmienna);
2929 }
2930 }
2931 }
2932}
2933public Action:CmdItem(client, args)
2934{
2935 new String:arg1[32];
2936 new String:arg2[6];
2937 GetCmdArg(1, arg1, sizeof(arg1));
2938 GetCmdArg(2, arg2, sizeof(arg2));
2939 new target = FindTarget(client, arg1);
2940 new zmienna = StringToInt(arg2);
2941 if(target != -1)
2942 {
2943 if(zmienna < 1 || zmienna > sizeof nazwy_itemow-1)
2944 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Podałeś nieprawidłowy numer itemu.");
2945 else
2946 {
2947 DajItem(target, zmienna);
2948 LogMessage("%s - dal graczowi %s (%i item).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
2949 PrintToConsole(client, "[\x02COD MOD\x01]\x04 DaleÅ› graczowi %s (%i item).", nazwa_gracza[target], zmienna);
2950 }
2951 }
2952}
2953public Action:DataBaseConnect()
2954{
2955 sql = SQL_Connect("codmod_lvl_sql", true, dbError, sizeof(dbError));
2956 if(sql == INVALID_HANDLE)
2957 {
2958 LogError("Could not connect: %s", dbError);
2959 sql_baza = 0;
2960 }
2961 else
2962 {
2963 SQL_LockDatabase(sql);
2964 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;");
2965 SQL_UnlockDatabase(sql);
2966 sql_baza = 1;
2967 }
2968}
2969public Action:TaskZapiszDane(Handle:timer, any:client)
2970{
2971 if(!IsValidClient(client))
2972 return;
2973
2974 if(zapisz_dane[client])
2975 {
2976 ZapiszDane(client);
2977 zapisz_dane[client] = false;
2978 }
2979
2980 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
2981}
2982public Action:ZapiszDane(client)
2983{
2984 if(!sql_baza || !klasa_gracza[client])
2985 return;
2986
2987 new String:tmp[1024];
2988 new String:authid[64];
2989 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
2990 return;
2991
2992 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])
2993 SQL_TQuery(sql, ZapiszDane_Handler, tmp, client);
2994}
2995public ZapiszDane_Handler(Handle:owner, Handle:query, const String:error[], any:client)
2996{
2997 if(query == INVALID_HANDLE)
2998 {
2999 LogError("Save error: %s", error);
3000 return;
3001 }
3002}
3003public Action:WczytajDane(client, klasa)
3004{
3005 poziom_gracza[client] = poziom_klasy_gracza[client][klasa];
3006 doswiadczenie_gracza[client] = doswiadczenie_klasy_gracza[client][klasa];
3007 inteligencja_gracza[client] = inteligencja_klasy_gracza[client][klasa];
3008 zdrowie_gracza[client] = zdrowie_klasy_gracza[client][klasa];
3009 obrazenia_gracza[client] = obrazenia_klasy_gracza[client][klasa];
3010 wytrzymalosc_gracza[client] = wytrzymalosc_klasy_gracza[client][klasa];
3011 kondycja_gracza[client] = kondycja_klasy_gracza[client][klasa];
3012 misja_gracza[client] = misja_klasy_gracza[client][klasa];
3013 zabicia_gracza[client] = zabicia_klasy_gracza[client][klasa];
3014 punkty_gracza[client] = (poziom_gracza[client]/co_ile_lv_punkt-1)-inteligencja_gracza[client]-zdrowie_gracza[client]-obrazenia_gracza[client]-wytrzymalosc_gracza[client]-kondycja_gracza[client];
3015 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
3016}
3017public Action:WybierzMisje(client)
3018{
3019 if(klasa_gracza[client])
3020 {
3021 if(misja_gracza[client])
3022 {
3023 new Handle:menu = CreateMenu(WybierzMisje_Handler);
3024 SetMenuTitle(menu, "Menu Misje:");
3025 AddMenuItem(menu, "1", "Opis Misji");
3026 AddMenuItem(menu, "2", "Anuluj Misje");
3027 DisplayMenu(menu, client, 250);
3028 }
3029 else
3030 {
3031 new String:misja[512];
3032 new Handle:menu = CreateMenu(WybierzMisje_Handler);
3033 SetMenuTitle(menu, "Wybierz MisjÄ™:");
3034 for(new i = 1; i <sizeof nazwy_misji; i ++)
3035 {
3036 Format(misja, sizeof(misja), "%s (Od %dLv)", opisy_misji[i], nazwy_misji[i][0]);
3037 AddMenuItem(menu, "3", misja);
3038 }
3039
3040 DisplayMenu(menu, client, 250);
3041 }
3042 }
3043 else
3044 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz mieć wybraną klasę aby móc włączyć misję!");
3045}
3046public WybierzMisje_Handler(Handle:classhandle, MenuAction:action, client, Position)
3047{
3048 if(action == MenuAction_Select)
3049 {
3050 new String:Item[32];
3051 GetMenuItem(classhandle, Position, Item, sizeof(Item));
3052 Position++;
3053
3054 if(StrEqual(Item, "1"))
3055 OpisMisji(client);
3056 else if(StrEqual(Item, "2"))
3057 {
3058 misja_gracza[client] = 0;
3059 zabicia_gracza[client] = 0;
3060 if(!zapisz_dane[client])
3061 zapisz_dane[client] = true;
3062
3063 PrintToChat(client, "[\x02COD MOD\x01]\x04 Anulowałeś swoje aktualne zadanie! Wpisz /misja aby rozpocząć.");
3064 }
3065 else if(StrEqual(Item, "3"))
3066 {
3067 if(poziom_gracza[client] >= nazwy_misji[Position][0])
3068 {
3069 misja_gracza[client] = Position;
3070 if(!zapisz_dane[client])
3071 zapisz_dane[client] = true;
3072
3073 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrałeś zadanie: [%s]. Powodzenia!", opisy_misji[Position]);
3074 }
3075 else
3076 {
3077 WybierzMisje(client);
3078 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrane zadanie dostępne jest od %dLv!", nazwy_misji[Position][0]);
3079 }
3080 }
3081 }
3082 else if(action == MenuAction_End)
3083 CloseHandle(classhandle);
3084}
3085public Action:OpisMisji(client)
3086{
3087 if(klasa_gracza[client])
3088 PrintToChat(client, "[\x02COD MOD\x01]\x04 Postep misji: %i/%i osob - Twoje zadanie: %s.", zabicia_gracza[client], nazwy_misji[misja_gracza[client]][1], opisy_misji[misja_gracza[client]]);
3089 else
3090 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz mieć wybraną klasę aby móc sprawdzić misje!");
3091}
3092public Action:PokazInformacje(Handle:timer, any:client)
3093{
3094 if(!IsValidClient(client))
3095 return;
3096
3097 if(IsPlayerAlive(client))
3098 {
3099 new ile = poziom_gracza[client]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[client]-1]: 0;
3100 new Float:procent_gracza = (float(doswiadczenie_gracza[client]-ile)/float(doswiadczenie_poziomu[poziom_gracza[client]]-ile))*100.0;
3101 PrintHintText(client, "[Klasa: <b>%s</b>]\n[<font color='#FF3333'>Xp: <b>%0.1f</b>/<b>100.0%%</b></font> | <font color='#FF3333'>Lv: <b>%i</b></font>]\n[Item:</font> <b>%s</b> [<b>%i%%</b>]]", nazwy_klas[klasa_gracza[client]], procent_gracza, poziom_gracza[client], nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]);
3102 }
3103 else
3104 {
3105 new spect = GetEntProp(client, Prop_Send, "m_iObserverMode");
3106 if(spect == 4 || spect == 5)
3107 {
3108 new target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
3109 if(target != -1 && IsValidClient(target))
3110 {
3111 new ile = poziom_gracza[target]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[target]-1]: 0;
3112 new Float:procent_gracza = (float(doswiadczenie_gracza[target]-ile)/float(doswiadczenie_poziomu[poziom_gracza[target]]-ile))*100.0;
3113 PrintHintText(client, "[Klasa: <b>%s</b>]\n[<font color='#FF3333'>Xp: <b>%0.1f</b>/<b>100.0%%</b></font> | <font color='#FF3333'>Lv: <b>%i</b></font>]\n[Item:</font> <b>%s</b> [<b>%i%%</b>]]", nazwy_klas[klasa_gracza[target]], procent_gracza, poziom_gracza[target], nazwy_itemow[informacje_itemu_gracza[target][0]], moc_itemu[target]);
3114 }
3115 }
3116 }
3117
3118 hud_task[client] = CreateTimer(REFRESH_HUD, PokazInformacje, client, TIMER_FLAG_NO_MAPCHANGE);
3119}
3120public Action:Wskrzes(Handle:timer, any:client)
3121{
3122 if(!IsValidClient(client))
3123 return;
3124
3125 CS_RespawnPlayer(client);
3126}
3127public bool:IsValidClient(client)
3128{
3129 if(client >= 1 && client <= MaxClients && IsClientInGame(client))
3130 return true;
3131
3132 return false;
3133}