· 9 years ago · Dec 02, 2016, 05:42 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
2332 }
2333 if(informacje_itemu_gracza[client][0])
2334 {
2335 if(moc_itemu[client] > 20)
2336 moc_itemu[client] -= 20;
2337 else
2338 {
2339 UsunItem(client);
2340 PrintToChat(client, "[\x02COD MOD\x01]\x04 Twój item uległ zniszczeniu.");
2341 }
2342 }
2343}
2344public Action:PlayerBlind(Handle:event, const String:name[], bool:dontBroadcast)
2345{
2346 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2347 if(!IsValidClient(oslepiajacy_gracz) || !IsValidClient(client))
2348 return;
2349
2350 if(client == oslepiajacy_gracz)
2351 return;
2352
2353 if(GetClientTeam(client) == GetClientTeam(oslepiajacy_gracz) || informacje_itemu_gracza[client][0] == 39 && informacje_itemu_gracza[oslepiajacy_gracz][0] != 29)
2354 SetEntDataFloat(client, FindSendPropOffs("CCSPlayer", "m_flFlashMaxAlpha"), 0.5);
2355}
2356public Action:HeDetonate(Handle:event, const String:name[], bool:dontBroadcast)
2357{
2358 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2359 if(!IsValidClient(client))
2360 return;
2361
2362 new damage = 0;
2363 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)
2364 damage = 1;
2365
2366 new Float:fOrigin[3];
2367 new Float:iOrigin[3];
2368 fOrigin[0] = GetEventFloat(event, "x");
2369 fOrigin[1] = GetEventFloat(event, "y");
2370 fOrigin[2] = GetEventFloat(event, "z");
2371
2372 for(new i = 1; i <= MaxClients; i++)
2373 {
2374 if(!IsClientInGame(i) || !IsPlayerAlive(i))
2375 continue;
2376
2377 GetClientAbsOrigin(i, Float:iOrigin);
2378 if(GetClientTeam(client) != GetClientTeam(i) && damage)
2379 {
2380 if(GetVectorDistance(fOrigin, iOrigin) <= 200.0)
2381 {
2382 if(GetEntProp(i, Prop_Send, "m_ArmorValue"))
2383 SetEntProp(i, Prop_Send, "m_ArmorValue", 0);
2384
2385 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);
2386 }
2387 }
2388 else if(client == i)
2389 {
2390 new Float:dystans = GetVectorDistance(fOrigin, iOrigin);
2391 if(dystans <= 200.0)
2392 SlapPlayer(i, 201-RoundFloat(dystans), true);
2393 }
2394 }
2395 if(damage)
2396 {
2397 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);
2398 TE_SendToAll();
2399 }
2400}
2401public Action:FbDetonate(Handle:event, const String:name[], bool:dontBroadcast)
2402{
2403 new client = GetClientOfUserId(GetEventInt(event, "userid"));
2404 if(!IsValidClient(client))
2405 return;
2406
2407 oslepiajacy_gracz = client;
2408}
2409public Action:SprawdzPoziom(client)
2410{
2411 if(!IsValidClient(client) || !klasa_gracza[client])
2412 return;
2413
2414 while(doswiadczenie_gracza[client] >= doswiadczenie_poziomu[poziom_gracza[client]] && poziom_gracza[client] < limit_poziomu)
2415 {
2416 poziom_gracza[client] ++;
2417 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];
2418 ClientCommand(client, "play *%s", dzwieki_serwera[1]);
2419 }
2420 while(doswiadczenie_gracza[client] < doswiadczenie_poziomu[poziom_gracza[client]-1])
2421 {
2422 poziom_gracza[client] --;
2423 ResetujPunkty(client);
2424 }
2425 if(poziom_gracza[client] > limit_poziomu)
2426 {
2427 poziom_gracza[client] = limit_poziomu;
2428 ResetujPunkty(client);
2429 }
2430 if(!zapisz_dane[client])
2431 zapisz_dane[client] = true;
2432}
2433public Action:PrzydzielPunkty(client)
2434{
2435 new String:tytul[512];
2436 new String:szybkosc[512];
2437 new String:inteligencja[512];
2438 new String:zdrowie[512];
2439 new String:obrazenia[512];
2440 new String:wytrzymalosc[512];
2441 new String:kondycja[512];
2442 Format(tytul, sizeof(tytul), "Przydziel Punkty (%i):", punkty_gracza[client]);
2443 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
2444 Format(szybkosc, sizeof(szybkosc), "Ile dodawac: ALL (Po ile punktow dodawac do statystyk)");
2445 else
2446 Format(szybkosc, sizeof(szybkosc), "Ile dodawać: %i (Po ile punktów dodawać do statystyk)", ile_rozdawac[szybkosc_rozdania[client]]);
2447 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);
2448 Format(zdrowie, sizeof(zdrowie), "Zdrowie: %i/%i (Zwieksza zdrowie o %i punktow)", zdrowie_gracza[client], limit_zdrowia, zdrowie_gracza[client]);
2449 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));
2450 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));
2451 Format(kondycja, sizeof(kondycja), "Kondycja: %i/%i (Zwiększa tempo chodu o %i%%)", kondycja_gracza[client], limit_kondycji, RoundFloat(kondycja_gracza[client]*0.15));
2452
2453 new Handle:menu = CreateMenu(PrzydzielPunkty_Handler);
2454 SetMenuTitle(menu, tytul);
2455 AddMenuItem(menu, "1", szybkosc);
2456 AddMenuItem(menu, "2", inteligencja);
2457 AddMenuItem(menu, "3", zdrowie);
2458 AddMenuItem(menu, "4", obrazenia);
2459 AddMenuItem(menu, "5", wytrzymalosc);
2460 AddMenuItem(menu, "6", kondycja);
2461 DisplayMenu(menu, client, 250);
2462}
2463public PrzydzielPunkty_Handler(Handle:classhandle, MenuAction:action, client, Position)
2464{
2465 if(action == MenuAction_Select)
2466 {
2467 if(punkty_gracza[client])
2468 {
2469 new String:Item[32];
2470 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2471 new ilosc;
2472
2473 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
2474 ilosc = punkty_gracza[client];
2475 else
2476 ilosc = (ile_rozdawac[szybkosc_rozdania[client]] > punkty_gracza[client])? punkty_gracza[client]: ile_rozdawac[szybkosc_rozdania[client]];
2477
2478 if(StrEqual(Item, "1"))
2479 {
2480 if(szybkosc_rozdania[client] == 2)
2481 szybkosc_rozdania[client] = 0;
2482 else
2483 szybkosc_rozdania[client] ++;
2484 }
2485 else if(StrEqual(Item, "2"))
2486 {
2487 if(inteligencja_gracza[client] != limit_inteligencji)
2488 {
2489 if(inteligencja_gracza[client] + ilosc <= limit_inteligencji)
2490 {
2491 inteligencja_gracza[client] += ilosc;
2492 punkty_gracza[client] -= ilosc;
2493 }
2494 else
2495 {
2496 new punktydododania;
2497 punktydododania = limit_inteligencji - inteligencja_gracza[client];
2498 inteligencja_gracza[client] += punktydododania;
2499 punkty_gracza[client] -= punktydododania;
2500 }
2501 }
2502 else
2503 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom inteligencji osiągnięty!");
2504 }
2505 else if(StrEqual(Item, "3"))
2506 {
2507 if(zdrowie_gracza[client] != limit_zdrowia)
2508 {
2509 if(zdrowie_gracza[client] + ilosc <= limit_zdrowia)
2510 {
2511 zdrowie_gracza[client] += ilosc;
2512 punkty_gracza[client] -= ilosc;
2513 }
2514 else
2515 {
2516 new punktydododania;
2517 punktydododania = limit_zdrowia - zdrowie_gracza[client];
2518 zdrowie_gracza[client] += punktydododania;
2519 punkty_gracza[client] -= punktydododania;
2520 }
2521 }
2522 else
2523 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom zdrowia osiągnięty!");
2524 }
2525 else if(StrEqual(Item, "4"))
2526 {
2527 if(obrazenia_gracza[client] != limit_obrazen)
2528 {
2529 if(obrazenia_gracza[client] + ilosc <= limit_obrazen)
2530 {
2531 obrazenia_gracza[client] += ilosc;
2532 punkty_gracza[client] -= ilosc;
2533 }
2534 else
2535 {
2536 new punktydododania;
2537 punktydododania = limit_obrazen - obrazenia_gracza[client];
2538 obrazenia_gracza[client] += punktydododania;
2539 punkty_gracza[client] -= punktydododania;
2540 }
2541 }
2542 else
2543 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom obrażeń osiągnięty!");
2544 }
2545 else if(StrEqual(Item, "5"))
2546 {
2547 if(wytrzymalosc_gracza[client] != limit_wytrzymalosci)
2548 {
2549 if(wytrzymalosc_gracza[client] + ilosc <= limit_wytrzymalosci)
2550 {
2551 wytrzymalosc_gracza[client] += ilosc;
2552 punkty_gracza[client] -= ilosc;
2553 }
2554 else
2555 {
2556 new punktydododania;
2557 punktydododania = limit_wytrzymalosci - wytrzymalosc_gracza[client];
2558 wytrzymalosc_gracza[client] += punktydododania;
2559 punkty_gracza[client] -= punktydododania;
2560 }
2561 }
2562 else
2563 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom wytrzymałości osiągnięty!");
2564 }
2565 else if(StrEqual(Item, "6"))
2566 {
2567 if(kondycja_gracza[client] != limit_kondycji)
2568 {
2569 if(kondycja_gracza[client] + ilosc <= limit_kondycji)
2570 {
2571 kondycja_gracza[client] += ilosc;
2572 punkty_gracza[client] -= ilosc;
2573 }
2574 else
2575 {
2576 new punktydododania;
2577 punktydododania = limit_kondycji - kondycja_gracza[client];
2578 kondycja_gracza[client] += punktydododania;
2579 punkty_gracza[client] -= punktydododania;
2580 }
2581 }
2582 else
2583 PrintToChat(client, "[\x02COD MOD\x01]\x04 Maksymalny poziom kondycji osiągnięty!");
2584 }
2585 if(punkty_gracza[client])
2586 PrzydzielPunkty(client);
2587
2588 if(!zapisz_dane[client])
2589 zapisz_dane[client] = true;
2590 }
2591 }
2592 else if(action == MenuAction_End)
2593 CloseHandle(classhandle);
2594}
2595public Action:ResetujPunkty(client)
2596{
2597 punkty_gracza[client] = poziom_gracza[client]/co_ile_lv_punkt-1;
2598 inteligencja_gracza[client] = 0;
2599 zdrowie_gracza[client] = 0;
2600 obrazenia_gracza[client] = 0;
2601 wytrzymalosc_gracza[client] = 0;
2602 kondycja_gracza[client] = 0;
2603 PrintToChat(client, "[\x02COD MOD\x01]\x04 Umiejętności zostały zresetowane.");
2604
2605 if(punkty_gracza[client])
2606 {
2607 PrzydzielPunkty(client);
2608 if(!zapisz_dane[client])
2609 zapisz_dane[client] = true;
2610 }
2611}
2612public Action:OpisItemu(client)
2613{
2614 new String:opis_itemu[128];
2615 new String:losowa_wartosc[4];
2616 IntToString(informacje_itemu_gracza[client][1], losowa_wartosc, 3);
2617 Format(opis_itemu, sizeof(opis_itemu), opisy_itemow[informacje_itemu_gracza[client][0]]);
2618 ReplaceString(opis_itemu, sizeof(opis_itemu), "LW", losowa_wartosc);
2619
2620 PrintToChat(client, "[\x02COD MOD\x01]\x04 Item: %s [%i%%].", nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]);
2621 PrintToChat(client, "[\x02COD MOD\x01]\x04 Opis: %s.", opis_itemu);
2622}
2623public Action:WyrzucItem(client)
2624{
2625 if(informacje_itemu_gracza[client][0])
2626 {
2627 UsunItem(client);
2628 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wyrzuciłeś swój item.");
2629 }
2630 else
2631 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie masz żadnego itemu.");
2632}
2633public Action:ZmienDruzyne(client)
2634{
2635 if(GetClientTeam(client) == CS_TEAM_SPECTATOR)
2636 {
2637 switch(GetRandomInt(0, 1))
2638 {
2639 case 0:
2640 {
2641 ChangeClientTeam(client, CS_TEAM_T);
2642 PrintToChat(client, "[\x02COD MOD\x01]\x04 Zostałeś przeniesiony do TT.");
2643 }
2644 case 1:
2645 {
2646 ChangeClientTeam(client, CS_TEAM_CT);
2647 PrintToChat(client, "[\x02COD MOD\x01]\x04 Zostałeś przeniesiony do CT.");
2648 }
2649 }
2650 }
2651 else
2652 ChangeClientTeam(client, CS_TEAM_SPECTATOR);
2653}
2654public Action:OddajItem(client)
2655{
2656 if(klasa_gracza[client])
2657 {
2658 new Handle:menu = CreateMenu(OddajItem_Handler);
2659 SetMenuTitle(menu, "Oddaj Item:");
2660 for(new i = 1; i <= MaxClients; i++)
2661 {
2662 if(!IsClientInGame(i) || i == client)
2663 continue;
2664
2665 AddMenuItem(menu, nazwa_gracza[i], nazwa_gracza[i]);
2666 }
2667
2668 DisplayMenu(menu, client, 250);
2669 }
2670 else
2671 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz mieć wybraną klasę aby móc oddać item!");
2672}
2673public OddajItem_Handler(Handle:classhandle, MenuAction:action, client, Position)
2674{
2675 if(action == MenuAction_Select)
2676 {
2677 new String:Item[64];
2678 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2679 Position ++;
2680
2681 new userid = FindTarget(0, Item);
2682 if(!IsValidClient(userid) || userid == -1)
2683 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie odnaleziono wybranego gracza!");
2684 else if(!klasa_gracza[userid])
2685 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz musi mieć klasę by móc mu przekazać item!");
2686 else if(informacje_itemu_gracza[userid][0])
2687 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz ma już item!");
2688 else if(!informacje_itemu_gracza[client][0])
2689 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie masz żadnego itemu!");
2690 else
2691 {
2692 new String:nazwa[512];
2693 Format(nazwa, sizeof(nazwa), "Czy chcesz przyjac item od %s?", nazwa_gracza[client]);
2694 new Handle:menu = CreateMenu(OddajItem_Handler2);
2695 SetMenuTitle(menu, nazwa);
2696 AddMenuItem(menu, "1", "Tak");
2697 AddMenuItem(menu, "2", "Nie");
2698 DisplayMenu(menu, userid, 250);
2699 client_gracza[userid] = client;
2700 }
2701 }
2702 else if(action == MenuAction_End)
2703 CloseHandle(classhandle);
2704}
2705public OddajItem_Handler2(Handle:classhandle, MenuAction:action, client, Position)
2706{
2707 if(action == MenuAction_Select)
2708 {
2709 new String:Item[32];
2710 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2711 new userid = client_gracza[client];
2712
2713 if(StrEqual(Item, "1"))
2714 {
2715 if(!IsValidClient(userid))
2716 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie odnaleziono wybranego gracza!");
2717 else if(!klasa_gracza[userid])
2718 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz musi mieć klasę by móc od niego odebrać item!");
2719 else if(!informacje_itemu_gracza[userid][0])
2720 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz nie ma żadnego itemu!");
2721 else if(informacje_itemu_gracza[client][0])
2722 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz już item!");
2723 else
2724 {
2725 DajItem(client, informacje_itemu_gracza[userid][0]);
2726 informacje_itemu_gracza[client][1] = informacje_itemu_gracza[userid][1];
2727 UsunItem(userid);
2728
2729 PrintToChatAll("[\x02COD MOD\x01]\x04 Gracz %s przekazał item graczowi %s.", nazwa_gracza[userid], nazwa_gracza[client]);
2730 }
2731 }
2732 else if(StrEqual(Item, "2"))
2733 {
2734 if(IsValidClient(userid))
2735 PrintToChat(userid, "[\x02COD MOD\x01]\x04 Wybrany gracz nie zgodził się na przyjęcie itemu!");
2736 }
2737 }
2738 else if(action == MenuAction_End)
2739 CloseHandle(classhandle);
2740}
2741public Action:WymienItem(client)
2742{
2743 if(klasa_gracza[client])
2744 {
2745 new Handle:menu = CreateMenu(WymienItem_Handler);
2746 SetMenuTitle(menu, "Oddaj Item:");
2747 for(new i = 1; i <= MaxClients; i++)
2748 {
2749 if(!IsClientInGame(i) || i == client)
2750 continue;
2751
2752 AddMenuItem(menu, nazwa_gracza[i], nazwa_gracza[i]);
2753 }
2754
2755 DisplayMenu(menu, client, 250);
2756 }
2757 else
2758 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz mieć wybraną klasę aby móc wymienić item!");
2759}
2760public WymienItem_Handler(Handle:classhandle, MenuAction:action, client, Position)
2761{
2762 if(action == MenuAction_Select)
2763 {
2764 new String:Item[64];
2765 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2766 Position ++;
2767
2768 new userid = FindTarget(0, Item);
2769 if(!IsValidClient(userid) || userid == -1)
2770 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie odnaleziono wybranego gracza!");
2771 else if(!klasa_gracza[userid])
2772 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz musi mieć klasę by móc mu przekazać item!");
2773 else if(!informacje_itemu_gracza[userid][0])
2774 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz nie ma żadnego itemu!");
2775 else if(!informacje_itemu_gracza[client][0])
2776 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie masz żadnego itemu!");
2777 else if(informacje_itemu_gracza[client][0] == informacje_itemu_gracza[userid][0])
2778 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie możesz wymienić swojego itemu na ten sam!");
2779 else if(wymiana_gracza[userid])
2780 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz wymieniał już swój item!");
2781 else if(wymiana_gracza[client])
2782 PrintToChat(client, "[\x02COD MOD\x01]\x04 Możesz wymienić item tylko raz na mapę!");
2783 else if(blokada_gracza[userid])
2784 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz zablokował wymianę itemu!");
2785 else if(blokada_gracza[client])
2786 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz zablokowanÄ… wymianÄ™ itemu!");
2787 else
2788 {
2789 new String:nazwa[512];
2790 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]);
2791 new Handle:menu = CreateMenu(WymienItem_Handler2);
2792 SetMenuTitle(menu, nazwa);
2793 AddMenuItem(menu, "1", "Tak");
2794 AddMenuItem(menu, "2", "Nie");
2795 DisplayMenu(menu, userid, 250);
2796 client_gracza[userid] = client;
2797 }
2798 }
2799 else if(action == MenuAction_End)
2800 CloseHandle(classhandle);
2801}
2802public WymienItem_Handler2(Handle:classhandle, MenuAction:action, client, Position)
2803{
2804 if(action == MenuAction_Select)
2805 {
2806 new String:Item[32];
2807 GetMenuItem(classhandle, Position, Item, sizeof(Item));
2808 new userid = client_gracza[client];
2809
2810 if(StrEqual(Item, "1"))
2811 {
2812 if(!IsValidClient(userid))
2813 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie odnaleziono wybranego gracza!");
2814 else if(!klasa_gracza[userid])
2815 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz musi mieć klasę by móc od niego odebrać item!");
2816 else if(!informacje_itemu_gracza[userid][0])
2817 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz nie ma żadnego itemu!");
2818 else if(!informacje_itemu_gracza[client][0])
2819 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie masz żadnego itemu!");
2820 else if(informacje_itemu_gracza[client][0] == informacje_itemu_gracza[userid][0])
2821 PrintToChat(client, "[\x02COD MOD\x01]\x04 Nie możesz wymienić swojego itemu na ten sam!");
2822 else if(wymiana_gracza[userid])
2823 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz wymieniał już swój item!");
2824 else if(wymiana_gracza[client])
2825 PrintToChat(client, "[\x02COD MOD\x01]\x04 Mozesz wymienić item tylko raz na mapę!");
2826 else if(blokada_gracza[userid])
2827 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrany gracz zablokował wymianę itemu!");
2828 else if(blokada_gracza[client])
2829 PrintToChat(client, "[\x02COD MOD\x01]\x04 Masz zablokowanÄ… wymianÄ™ itemu!");
2830 else
2831 {
2832 new item_zmienny[4];
2833 item_zmienny[0] = informacje_itemu_gracza[userid][0];
2834 item_zmienny[1] = informacje_itemu_gracza[client][0];
2835 item_zmienny[2] = informacje_itemu_gracza[userid][1];
2836 item_zmienny[3] = informacje_itemu_gracza[client][1];
2837
2838 DajItem(client, item_zmienny[0]);
2839 DajItem(userid, item_zmienny[1]);
2840 informacje_itemu_gracza[client][1] = item_zmienny[2];
2841 informacje_itemu_gracza[userid][1] = item_zmienny[3];
2842
2843 wymiana_gracza[userid] = true;
2844 wymiana_gracza[client] = true;
2845
2846 PrintToChatAll("[\x02COD MOD\x01]\x04 Gracz %s oraz %s wymienili sie itemami.", nazwa_gracza[userid], nazwa_gracza[client]);
2847 }
2848 }
2849 else if(StrEqual(Item, "2"))
2850 {
2851 if(IsValidClient(userid))
2852 PrintToChat(userid, "[\x02COD MOD\x01]\x04 Wybrany gracz nie zgodził się na wymianę itemu!");
2853 }
2854 }
2855 else if(action == MenuAction_End)
2856 CloseHandle(classhandle);
2857}
2858public Action:CmdExp(client, args)
2859{
2860 new String:arg1[32];
2861 new String:arg2[6];
2862 GetCmdArg(1, arg1, sizeof(arg1));
2863 GetCmdArg(2, arg2, sizeof(arg2));
2864 new target = FindTarget(client, arg1);
2865 new zmienna = StringToInt(arg2)-1;
2866 if(target != -1)
2867 {
2868 if((-zmienna) > doswiadczenie_gracza[target])
2869 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Chciałeś odjąć graczowi zbyt dużo doświadczenia.");
2870 else
2871 {
2872 doswiadczenie_gracza[target] += zmienna;
2873 SprawdzPoziom(target);
2874
2875 LogMessage("%s - dał graczowi %s (%i expa).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
2876 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Dałeś graczowi %s (%i expa).", nazwa_gracza[target], zmienna);
2877 }
2878 }
2879}
2880public Action:CmdLvl(client, args)
2881{
2882 new String:arg1[32];
2883 new String:arg2[6];
2884 GetCmdArg(1, arg1, sizeof(arg1));
2885 GetCmdArg(2, arg2, sizeof(arg2));
2886 new target = FindTarget(client, arg1);
2887 new zmienna = StringToInt(arg2)-1;
2888 if(target != -1)
2889 {
2890 if((-zmienna) > poziom_gracza[target])
2891 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Chciałeś ustawić graczowi zbyt mały poziom.");
2892 else
2893 {
2894 if(poziom_gracza[target] + zmienna > limit_poziomu)
2895 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Chciałeś ustawić graczowi zbyt duzy poziom.");
2896 else
2897 {
2898 doswiadczenie_gracza[target] += doswiadczenie_poziomu[zmienna];
2899 SprawdzPoziom(target);
2900
2901 LogMessage("%s - dal graczowi %s (%i Lv).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
2902 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Dałeś graczowi %s (%i Lv).", nazwa_gracza[target], zmienna);
2903 }
2904 }
2905 }
2906}
2907public Action:CmdItem(client, args)
2908{
2909 new String:arg1[32];
2910 new String:arg2[6];
2911 GetCmdArg(1, arg1, sizeof(arg1));
2912 GetCmdArg(2, arg2, sizeof(arg2));
2913 new target = FindTarget(client, arg1);
2914 new zmienna = StringToInt(arg2);
2915 if(target != -1)
2916 {
2917 if(zmienna < 1 || zmienna > sizeof nazwy_itemow-1)
2918 PrintToConsole(client, "[\x02COD MOD\x01]\x04 Podałeś nieprawidłowy numer itemu.");
2919 else
2920 {
2921 DajItem(target, zmienna);
2922 LogMessage("%s - dal graczowi %s (%i item).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
2923 PrintToConsole(client, "[\x02COD MOD\x01]\x04 DaleÅ› graczowi %s (%i item).", nazwa_gracza[target], zmienna);
2924 }
2925 }
2926}
2927public Action:DataBaseConnect()
2928{
2929 sql = SQL_Connect("codmod_lvl_sql", true, dbError, sizeof(dbError));
2930 if(sql == INVALID_HANDLE)
2931 {
2932 LogError("Could not connect: %s", dbError);
2933 sql_baza = 0;
2934 }
2935 else
2936 {
2937 SQL_LockDatabase(sql);
2938 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;");
2939 SQL_UnlockDatabase(sql);
2940 sql_baza = 1;
2941 }
2942}
2943public Action:TaskZapiszDane(Handle:timer, any:client)
2944{
2945 if(!IsValidClient(client))
2946 return;
2947
2948 if(zapisz_dane[client])
2949 {
2950 ZapiszDane(client);
2951 zapisz_dane[client] = false;
2952 }
2953
2954 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
2955}
2956public Action:ZapiszDane(client)
2957{
2958 if(!sql_baza || !klasa_gracza[client])
2959 return;
2960
2961 new String:tmp[1024];
2962 new String:authid[64];
2963 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
2964 return;
2965
2966 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])
2967 SQL_TQuery(sql, ZapiszDane_Handler, tmp, client);
2968}
2969public ZapiszDane_Handler(Handle:owner, Handle:query, const String:error[], any:client)
2970{
2971 if(query == INVALID_HANDLE)
2972 {
2973 LogError("Save error: %s", error);
2974 return;
2975 }
2976}
2977public Action:WczytajDane(client, klasa)
2978{
2979 poziom_gracza[client] = poziom_klasy_gracza[client][klasa];
2980 doswiadczenie_gracza[client] = doswiadczenie_klasy_gracza[client][klasa];
2981 inteligencja_gracza[client] = inteligencja_klasy_gracza[client][klasa];
2982 zdrowie_gracza[client] = zdrowie_klasy_gracza[client][klasa];
2983 obrazenia_gracza[client] = obrazenia_klasy_gracza[client][klasa];
2984 wytrzymalosc_gracza[client] = wytrzymalosc_klasy_gracza[client][klasa];
2985 kondycja_gracza[client] = kondycja_klasy_gracza[client][klasa];
2986 misja_gracza[client] = misja_klasy_gracza[client][klasa];
2987 zabicia_gracza[client] = zabicia_klasy_gracza[client][klasa];
2988 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];
2989 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
2990}
2991public Action:WybierzMisje(client)
2992{
2993 if(klasa_gracza[client])
2994 {
2995 if(misja_gracza[client])
2996 {
2997 new Handle:menu = CreateMenu(WybierzMisje_Handler);
2998 SetMenuTitle(menu, "Menu Misje:");
2999 AddMenuItem(menu, "1", "Opis Misji");
3000 AddMenuItem(menu, "2", "Anuluj Misje");
3001 DisplayMenu(menu, client, 250);
3002 }
3003 else
3004 {
3005 new String:misja[512];
3006 new Handle:menu = CreateMenu(WybierzMisje_Handler);
3007 SetMenuTitle(menu, "Wybierz MisjÄ™:");
3008 for(new i = 1; i <sizeof nazwy_misji; i ++)
3009 {
3010 Format(misja, sizeof(misja), "%s (Od %dLv)", opisy_misji[i], nazwy_misji[i][0]);
3011 AddMenuItem(menu, "3", misja);
3012 }
3013
3014 DisplayMenu(menu, client, 250);
3015 }
3016 }
3017 else
3018 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz mieć wybraną klasę aby móc włączyć misję!");
3019}
3020public WybierzMisje_Handler(Handle:classhandle, MenuAction:action, client, Position)
3021{
3022 if(action == MenuAction_Select)
3023 {
3024 new String:Item[32];
3025 GetMenuItem(classhandle, Position, Item, sizeof(Item));
3026 Position++;
3027
3028 if(StrEqual(Item, "1"))
3029 OpisMisji(client);
3030 else if(StrEqual(Item, "2"))
3031 {
3032 misja_gracza[client] = 0;
3033 zabicia_gracza[client] = 0;
3034 if(!zapisz_dane[client])
3035 zapisz_dane[client] = true;
3036
3037 PrintToChat(client, "[\x02COD MOD\x01]\x04 Anulowałeś swoje aktualne zadanie! Wpisz /misja aby rozpocząć.");
3038 }
3039 else if(StrEqual(Item, "3"))
3040 {
3041 if(poziom_gracza[client] >= nazwy_misji[Position][0])
3042 {
3043 misja_gracza[client] = Position;
3044 if(!zapisz_dane[client])
3045 zapisz_dane[client] = true;
3046
3047 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrałeś zadanie: [%s]. Powodzenia!", opisy_misji[Position]);
3048 }
3049 else
3050 {
3051 WybierzMisje(client);
3052 PrintToChat(client, "[\x02COD MOD\x01]\x04 Wybrane zadanie dostępne jest od %dLv!", nazwy_misji[Position][0]);
3053 }
3054 }
3055 }
3056 else if(action == MenuAction_End)
3057 CloseHandle(classhandle);
3058}
3059public Action:OpisMisji(client)
3060{
3061 if(klasa_gracza[client])
3062 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]]);
3063 else
3064 PrintToChat(client, "[\x02COD MOD\x01]\x04 Musisz mieć wybraną klasę aby móc sprawdzić misje!");
3065}
3066public Action:PokazInformacje(Handle:timer, any:client)
3067{
3068 if(!IsValidClient(client))
3069 return;
3070
3071 if(IsPlayerAlive(client))
3072 {
3073 new ile = poziom_gracza[client]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[client]-1]: 0;
3074 new Float:procent_gracza = (float(doswiadczenie_gracza[client]-ile)/float(doswiadczenie_poziomu[poziom_gracza[client]]-ile))*100.0;
3075 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]);
3076 }
3077 else
3078 {
3079 new spect = GetEntProp(client, Prop_Send, "m_iObserverMode");
3080 if(spect == 4 || spect == 5)
3081 {
3082 new target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
3083 if(target != -1 && IsValidClient(target))
3084 {
3085 new ile = poziom_gracza[target]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[target]-1]: 0;
3086 new Float:procent_gracza = (float(doswiadczenie_gracza[target]-ile)/float(doswiadczenie_poziomu[poziom_gracza[target]]-ile))*100.0;
3087 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]);
3088 }
3089 }
3090 }
3091
3092 hud_task[client] = CreateTimer(REFRESH_HUD, PokazInformacje, client, TIMER_FLAG_NO_MAPCHANGE);
3093}
3094public Action:Wskrzes(Handle:timer, any:client)
3095{
3096 if(!IsValidClient(client))
3097 return;
3098
3099 CS_RespawnPlayer(client);
3100}
3101public bool:IsValidClient(client)
3102{
3103 if(client >= 1 && client <= MaxClients && IsClientInGame(client))
3104 return true;
3105
3106 return false;
3107}