· 9 years ago · Nov 15, 2016, 05:42 PM
1#include <sourcemod>
2#include <sdkhooks>
3#include <sdktools>
4#include <cstrike>
5#include <codmod>
6
7#define PLUGIN_NAME "Call of Duty: MW Mod"
8#define PLUGIN_VERSION "1.0"
9#define PLUGIN_AUTHOR "Linux`"
10#define PLUGIN_DESCRIPTION "Plugin oparty na kodzie QTM_CodMod by QTM_Peyote"
11#define PLUGIN_URL "http://steamcommunity.com/id/linux2006"
12
13#define MAX_ILOSC_KLAS 100
14#define MAX_ILOSC_ITEMOW 120
15#define MIN_ILOSC_GRACZY 4
16#define REFRESH_HUD 1.0
17
18new Handle:sql,
19 Handle:sql_task[65],
20 Handle:hud_task[65],
21 Handle:cvar_limit_poziomu,
22 Handle:cvar_limit_inteligencji,
23 Handle:cvar_limit_zdrowia,
24 Handle:cvar_limit_obrazen,
25 Handle:cvar_limit_wytrzymalosci,
26 Handle:cvar_limit_kondycji,
27 Handle:cvar_co_ile_punkt,
28 Handle:cvar_doswiadczenie_za_zabojstwo_hs,
29 Handle:cvar_doswiadczenie_za_zabojstwo,
30 Handle:cvar_doswiadczenie_za_obrazenia,
31 Handle:cvar_doswiadczenie_za_wygrana_runde,
32 Handle:cvar_doswiadczenie_za_cele_mapy,
33 Handle:cvar_proporcja_poziomu,
34 Handle:cvar_blokada_broni,
35 Handle:cvar_co_ile_zapisywac,
36 Handle:cvar_typ_zapisu,
37 Handle:cvar_wytrzymalosc_itemow,
38 Handle:cvar_max_wytrzymalosc_itemow,
39 sql_baza;
40
41new klasa_gracza[65],
42 nowa_klasa_gracza[65],
43 poziom_gracza[65],
44 doswiadczenie_gracza[65],
45 item_gracza[65],
46 wartosc_itemu_gracza[65],
47 wytrzymalosc_itemu_gracza[65],
48 szybkosc_rozdania[65],
49 punkty_gracza[65],
50 inteligencja_gracza[65],
51 zdrowie_gracza[65],
52 obrazenia_gracza[65],
53 wytrzymalosc_gracza[65],
54 kondycja_gracza[65];
55
56new poziom_klasy_gracza[65][MAX_ILOSC_KLAS+1],
57 doswiadczenie_klasy_gracza[65][MAX_ILOSC_KLAS+1],
58 inteligencja_klasy_gracza[65][MAX_ILOSC_KLAS+1],
59 zdrowie_klasy_gracza[65][MAX_ILOSC_KLAS+1],
60 obrazenia_klasy_gracza[65][MAX_ILOSC_KLAS+1],
61 wytrzymalosc_klasy_gracza[65][MAX_ILOSC_KLAS+1],
62 kondycja_klasy_gracza[65][MAX_ILOSC_KLAS+1];
63
64new String:bonusowe_bronie_gracza[65][256],
65 bonusowa_inteligencja_gracza[65],
66 bonusowe_zdrowie_gracza[65],
67 bonusowe_obrazenia_gracza[65],
68 bonusowa_wytrzymalosc_gracza[65],
69 bonusowa_kondycja_gracza[65];
70
71new Float:maksymalne_obrazenia_gracza[65],
72 Float:maksymalna_wytrzymalosc_gracza[65];
73
74new String:nazwy_klas[MAX_ILOSC_KLAS+1][64],
75 String:opisy_klas[MAX_ILOSC_KLAS+1][128],
76 String:bronie_klas[MAX_ILOSC_KLAS+1][512],
77 Handle:pluginy_klas[MAX_ILOSC_KLAS+1],
78 inteligencja_klas[MAX_ILOSC_KLAS+1],
79 zdrowie_klas[MAX_ILOSC_KLAS+1],
80 obrazenia_klas[MAX_ILOSC_KLAS+1],
81 wytrzymalosc_klas[MAX_ILOSC_KLAS+1],
82 kondycja_klas[MAX_ILOSC_KLAS+1],
83 ilosc_klas;
84
85new String:nazwy_itemow[MAX_ILOSC_ITEMOW+1][64],
86 String:opisy_itemow[MAX_ILOSC_ITEMOW+1][128],
87 Handle:pluginy_itemow[MAX_ILOSC_ITEMOW+1],
88 max_wartosci_itemow[MAX_ILOSC_ITEMOW+1],
89 min_wartosci_itemow[MAX_ILOSC_ITEMOW+1],
90 ilosc_itemow;
91
92new bool:oldbuttons[65],
93 bool:zapisz_dane[65],
94 bool:polaczony_raz[65],
95 bool:pokazana_reklama[65],
96 bool:freezetime;
97
98new String:bronie_dozwolone[][] = {"weapon_knife", "weapon_c4", "item_defuser"},
99 ile_rozdawac[] = {1, 10, -1};
100
101new String:frakcje_klas[MAX_ILOSC_KLAS+1][64];
102
103public Plugin:myinfo =
104{
105 name = PLUGIN_NAME,
106 author = PLUGIN_AUTHOR,
107 description = PLUGIN_DESCRIPTION,
108 version = PLUGIN_VERSION,
109 url = PLUGIN_URL
110};
111public OnPluginStart()
112{
113 CreateConVar(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
114 cvar_limit_poziomu = CreateConVar("cod_max_level", "200");
115 cvar_proporcja_poziomu = CreateConVar("cod_level_ratio", "35");
116 cvar_limit_inteligencji = CreateConVar("cod_max_intelligence", "40");
117 cvar_limit_zdrowia = CreateConVar("cod_max_health", "40");
118 cvar_limit_obrazen = CreateConVar("cod_max_damage", "40");
119 cvar_limit_wytrzymalosci = CreateConVar("cod_max_stamina", "40");
120 cvar_limit_kondycji = CreateConVar("cod_max_trim", "40");
121 cvar_co_ile_punkt = CreateConVar("cod_points_level", "1");
122 cvar_doswiadczenie_za_zabojstwo_hs = CreateConVar("cod_xp_killhs", "15");
123 cvar_doswiadczenie_za_zabojstwo = CreateConVar("cod_xp_kill", "10");
124 cvar_doswiadczenie_za_obrazenia = CreateConVar("cod_xp_damage", "1");
125 cvar_doswiadczenie_za_wygrana_runde = CreateConVar("cod_xp_winround", "25");
126 cvar_doswiadczenie_za_cele_mapy = CreateConVar("cod_xp_objectives", "50");
127 cvar_blokada_broni = CreateConVar("cod_weapons_blocking", "1");
128 cvar_co_ile_zapisywac = CreateConVar("cod_time_save", "30");
129 cvar_typ_zapisu = CreateConVar("cod_type_save", "1");
130 cvar_wytrzymalosc_itemow = CreateConVar("cod_item_stamina", "15");
131 cvar_max_wytrzymalosc_itemow = CreateConVar("cod_item_max_stamina", "100");
132
133 RegConsoleCmd("klasa", WybierzKlase);
134 RegConsoleCmd("class", WybierzKlase);
135 RegConsoleCmd("klasy", OpisKlas);
136 RegConsoleCmd("classinfo", OpisKlas);
137 RegConsoleCmd("item", OpisItemu);
138 RegConsoleCmd("perk", OpisItemu);
139 RegConsoleCmd("wyrzuc", WyrzucItem);
140 RegConsoleCmd("items", OpisItemow);
141 RegConsoleCmd("perks", OpisItemow);
142 RegConsoleCmd("perki", OpisItemow);
143 RegConsoleCmd("statystyki", PrzydzielPunkty);
144 RegConsoleCmd("staty", PrzydzielPunkty);
145 RegConsoleCmd("reset", ResetujPunkty);
146
147 RegConsoleCmd("buy", BlokujKomende);
148 RegConsoleCmd("buyequip", BlokujKomende);
149 RegConsoleCmd("buyammo1", BlokujKomende);
150 RegConsoleCmd("buyammo2", BlokujKomende);
151 RegConsoleCmd("rebuy", BlokujKomende);
152 RegConsoleCmd("autobuy", BlokujKomende);
153
154 HookEvent("round_freeze_end", PoczatekRundy);
155 HookEvent("round_start", NowaRunda);
156 HookEvent("round_end", KoniecRundy);
157
158 HookEvent("hostage_rescued", ZakladnikUratowany);
159 HookEvent("bomb_defused", BombaRozbrojona);
160 HookEvent("bomb_planted", BombaPodlozona);
161
162 HookEvent("player_spawn", OdrodzenieGracza);
163 HookEvent("player_death", SmiercGracza);
164
165 HookUserMessage(GetUserMessageId("TextMsg"), TextMessage, true);
166 LoadTranslations("common.phrases");
167 DataBaseConnect();
168
169 nazwy_klas[0] = "Brak";
170 opisy_klas[0] = "";
171 bronie_klas[0] = "";
172
173 nazwy_itemow[0] = "Brak";
174 opisy_itemow[0] = "Zabij kogos, aby otrzymac item";
175}
176public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
177{
178 CreateNative("cod_set_user_bonus_weapons", UstawBonusoweBronie);
179 CreateNative("cod_set_user_bonus_intelligence", UstawBonusowaInteligencje);
180 CreateNative("cod_set_user_bonus_health", UstawBonusoweZdrowie);
181 CreateNative("cod_set_user_bonus_damage", UstawBonusoweObrazenia);
182 CreateNative("cod_set_user_bonus_stamina", UstawBonusowaWytrzymalosc);
183 CreateNative("cod_set_user_bonus_trim", UstawBonusowaKondycje);
184
185 CreateNative("cod_get_user_bonus_weapons", PobierzBonusoweBronie);
186 CreateNative("cod_get_user_intelligence", PobierzInteligencje);
187 CreateNative("cod_get_user_health", PobierzZdrowie);
188 CreateNative("cod_get_user_damage", PobierzObrazenia);
189 CreateNative("cod_get_user_stamina", PobierzWytrzymalosc);
190 CreateNative("cod_get_user_trim", PobierzKondycje);
191 CreateNative("cod_get_user_points", PobierzPunkty);
192
193 CreateNative("cod_set_user_xp", UstawDoswiadczenie);
194 CreateNative("cod_set_user_class", UstawKlase);
195 CreateNative("cod_set_user_item", UstawItem);
196
197 CreateNative("cod_get_user_xp", PobierzDoswiadczenie);
198 CreateNative("cod_get_level_xp", PobierzDoswiadczeniePoziomu);
199 CreateNative("cod_get_user_level", PobierzPoziom);
200 CreateNative("cod_get_user_class", PobierzKlase);
201 CreateNative("cod_get_user_item", PobierzItem);
202 CreateNative("cod_get_user_item_skill", PobierzWartoscItemu);
203 CreateNative("cod_get_user_item_stamina", PobierzWytrzymaloscItemu);
204
205 CreateNative("cod_points_to_intelligence", PrzydzielInteligencjeKlasy);
206 CreateNative("cod_points_to_health", PrzydzielZdrowieKlasy);
207 CreateNative("cod_points_to_damage", PrzydzielObrazeniaKlasy);
208 CreateNative("cod_points_to_stamina", PrzydzielWytrzymaloscKlasy);
209 CreateNative("cod_points_to_trim", PrzydzielKondycjeKlasy);
210
211 CreateNative("cod_get_classes_num", PobierzIloscKlas);
212 CreateNative("cod_get_classid", PobierzKlasePrzezNazwe);
213 CreateNative("cod_get_class_name", PobierzNazweKlasy);
214 CreateNative("cod_get_class_desc", PobierzOpisKlasy);
215 CreateNative("cod_get_class_guns", PobierzBronieKlasy);
216 CreateNative("cod_get_class_intelligence", PobierzInteligencjeKlasy);
217 CreateNative("cod_get_class_health", PobierzZdrowieKlasy);
218 CreateNative("cod_get_class_damage", PobierzObrazeniaKlasy);
219 CreateNative("cod_get_class_stamina", PobierzWytrzymaloscKlasy);
220 CreateNative("cod_get_class_trim", PobierzKondycjeKlasy);
221
222 CreateNative("cod_get_items_num", PobierzIloscItemow);
223 CreateNative("cod_get_itemid", PobierzItemPrzezNazwe);
224 CreateNative("cod_get_item_name", PobierzNazweItemu);
225 CreateNative("cod_get_item_desc", PobierzOpisItemu);
226
227 CreateNative("cod_get_freezetime", PobierzFreezetime);
228 CreateNative("cod_inflict_damage", ZadajObrazenia);
229
230 CreateNative("cod_register_class", ZarejestrujKlase);
231 CreateNative("cod_register_item", ZarejestrujItem);
232}
233public OnMapStart()
234{
235 AddFileToDownloadsTable("sound/cod/levelup.mp3");
236 AutoExecConfig(true, "codmod");
237}
238public OnClientAuthorized(client)
239{
240 UsunUmiejetnosci(client);
241}
242public OnClientPutInServer(client)
243{
244 SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
245 SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
246}
247public OnClientDisconnect(client)
248{
249 SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage);
250 SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
251
252 ZapiszDane(client);
253 UsunUmiejetnosci(client);
254 UsunZadania(client);
255}
256public Action:UsunUmiejetnosci(client)
257{
258 for(new i = 0; i <= ilosc_klas; i ++)
259 {
260 poziom_klasy_gracza[client][i] = 1;
261 doswiadczenie_klasy_gracza[client][i] = 0;
262 inteligencja_klasy_gracza[client][i] = 0;
263 zdrowie_klasy_gracza[client][i] = 0;
264 obrazenia_klasy_gracza[client][i] = 0;
265 wytrzymalosc_klasy_gracza[client][i] = 0;
266 kondycja_klasy_gracza[client][i] = 0;
267 }
268
269 zapisz_dane[client] = false;
270 polaczony_raz[client] = false;
271 pokazana_reklama[client] = false;
272 nowa_klasa_gracza[client] = 0;
273 poziom_gracza[client] = 1;
274 doswiadczenie_gracza[client] = 0;
275 inteligencja_gracza[client] = 0;
276 zdrowie_gracza[client] = 0;
277 obrazenia_gracza[client] = 0;
278 wytrzymalosc_gracza[client] = 0;
279 kondycja_gracza[client] = 0;
280 bonusowe_bronie_gracza[client] = "";
281 bonusowa_inteligencja_gracza[client] = 0;
282 bonusowe_zdrowie_gracza[client] = 0;
283 bonusowe_obrazenia_gracza[client] = 0;
284 bonusowa_wytrzymalosc_gracza[client] = 0;
285 bonusowa_kondycja_gracza[client] = 0;
286 szybkosc_rozdania[client] = 0;
287 punkty_gracza[client] = 0;
288
289 UstawNowaKlase(client);
290 UstawNowyItem(client, 0, 0, 0);
291}
292public Action:UsunZadania(client)
293{
294 if(sql_task[client] != null)
295 {
296 KillTimer(sql_task[client]);
297 sql_task[client] = null;
298 }
299 if(hud_task[client] != null)
300 {
301 KillTimer(hud_task[client]);
302 hud_task[client] = null;
303 }
304}
305public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapons)
306{
307 if(!IsValidClient(client) || !IsPlayerAlive(client) || freezetime)
308 return;
309
310 if(!oldbuttons[client] && buttons & IN_USE)
311 {
312 new Function:target;
313 target = GetFunctionByName(pluginy_klas[klasa_gracza[client]], "cod_class_skill_used");
314 if(target != INVALID_FUNCTION)
315 {
316 Call_StartFunction(pluginy_klas[klasa_gracza[client]], target);
317 Call_PushCell(client);
318 Call_PushCell(klasa_gracza[client]);
319 Call_Finish();
320 }
321
322 target = GetFunctionByName(pluginy_itemow[item_gracza[client]], "cod_item_used");
323 if(target != INVALID_FUNCTION)
324 {
325 Call_StartFunction(pluginy_itemow[item_gracza[client]], target);
326 Call_PushCell(client);
327 Call_PushCell(item_gracza[client]);
328 Call_Finish();
329 }
330
331 oldbuttons[client] = true;
332 }
333 else if(oldbuttons[client] && !(buttons & IN_USE))
334 oldbuttons[client] = false;
335}
336public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
337{
338 if(!IsValidClient(victim) || !IsValidClient(attacker))
339 return Plugin_Continue;
340
341 if(!klasa_gracza[attacker] || GetClientTeam(victim) == GetClientTeam(attacker))
342 return Plugin_Continue;
343
344 new doswiadczenie_za_obrazenia = GetConVarInt(cvar_doswiadczenie_za_obrazenia);
345 if(doswiadczenie_za_obrazenia)
346 {
347 new obrazenia = RoundFloat(damage);
348 new ilosc_obrazen = 20;
349 if(obrazenia >= ilosc_obrazen)
350 {
351 doswiadczenie_gracza[attacker] += doswiadczenie_za_obrazenia*(obrazenia/ilosc_obrazen);
352 SprawdzPoziom(attacker);
353 }
354 }
355
356 damage = RoundFloat(damage)*(1.0+(maksymalne_obrazenia_gracza[attacker]-maksymalna_wytrzymalosc_gracza[victim]));
357 return Plugin_Changed;
358}
359public Action:WeaponCanUse(client, weapon)
360{
361 if(!GetConVarInt(cvar_blokada_broni))
362 return Plugin_Continue;
363
364 if(!IsValidClient(client) || !IsPlayerAlive(client))
365 return Plugin_Continue;
366
367 new String:weapons[32];
368 GetEdictClassname(weapon, weapons, sizeof(weapons));
369
370 new String:weaponsclass[10][32];
371 ExplodeString(bronie_klas[klasa_gracza[client]], "#", weaponsclass, sizeof(weaponsclass), sizeof(weaponsclass[]));
372 for(new i = 0; i < sizeof(weaponsclass); i ++)
373 {
374 if(StrEqual(weaponsclass[i], weapons))
375 return Plugin_Continue;
376 }
377
378 new String:weaponsbonus[5][32];
379 ExplodeString(bonusowe_bronie_gracza[client], "#", weaponsbonus, sizeof(weaponsbonus), sizeof(weaponsbonus[]));
380 for(new i = 0; i < sizeof(weaponsbonus); i ++)
381 {
382 if(StrEqual(weaponsbonus[i], weapons))
383 return Plugin_Continue;
384 }
385
386 for(new i = 0; i < sizeof(bronie_dozwolone); i ++)
387 {
388 if(StrEqual(bronie_dozwolone[i], weapons))
389 return Plugin_Continue;
390 }
391
392 return Plugin_Handled;
393}
394public Action:TextMessage(UserMsg:msg_text, Handle:pb, const players[], playersNum, bool:reliable, bool:init)
395{
396 if(!reliable || PbReadInt(pb, "msg_dst") != 3)
397 return Plugin_Continue;
398
399 new String:buffer[256];
400 PbReadString(pb, "params", buffer, sizeof(buffer), 0);
401 if(StrContains(buffer, "#Player_Cash_Award_") == 0 || StrContains(buffer, "#Team_Cash_Award_") == 0)
402 return Plugin_Handled;
403
404 return Plugin_Continue;
405}
406public Action:PoczatekRundy(Handle:event, const String:name[], bool:dontbroadcast)
407{
408 if(freezetime)
409 freezetime = false;
410}
411public Action:NowaRunda(Handle:event, const String:name[], bool:dontbroadcast)
412{
413 if(!freezetime)
414 freezetime = true;
415}
416public Action:KoniecRundy(Handle:event, const String:name[], bool:dontbroadcast)
417{
418 new doswiadczenie_za_wygrana_runde = GetConVarInt(cvar_doswiadczenie_za_wygrana_runde);
419 if(doswiadczenie_za_wygrana_runde)
420 {
421 new wygrana_druzyna = GetEventInt(event, "winner");
422 for(new i = 1; i <= MaxClients; i ++)
423 {
424 if(!IsClientInGame(i) || !klasa_gracza[i])
425 continue;
426
427 if(GetClientTeam(i) != ((wygrana_druzyna == 2)? CS_TEAM_T: CS_TEAM_CT))
428 continue;
429
430 new doswiadczenie = 0;
431 if(IsPlayerAlive(i))
432 {
433 doswiadczenie += doswiadczenie_za_wygrana_runde;
434 PrintToChat(i, "[COD:MW] Dostales %i doswiadczenia za wygranie rundy.", doswiadczenie);
435 }
436 else
437 {
438 doswiadczenie += doswiadczenie_za_wygrana_runde/2;
439 PrintToChat(i, "[COD:MW] Dostales %i doswiadczenia za wygranie rundy przez twoja druzyne.", doswiadczenie);
440 }
441
442 doswiadczenie_gracza[i] += doswiadczenie;
443 SprawdzPoziom(i);
444 }
445 }
446}
447public Action:ZakladnikUratowany(Handle:event, const String:name[], bool:dontbroadcast)
448{
449 if(!StrEqual(name, "hostage_rescued") || GetClientCount() < MIN_ILOSC_GRACZY)
450 return;
451
452 new doswiadczenie_za_cele_mapy = GetConVarInt(cvar_doswiadczenie_za_cele_mapy);
453 if(doswiadczenie_za_cele_mapy)
454 {
455 new client = GetClientOfUserId(GetEventInt(event, "userid"));
456 for(new i = 1; i <= MaxClients; i ++)
457 {
458 if(!IsClientInGame(i) || !klasa_gracza[i])
459 continue;
460
461 if(GetClientTeam(i) != CS_TEAM_CT)
462 continue;
463
464 new doswiadczenie = 0;
465 if(i == client)
466 {
467 doswiadczenie += doswiadczenie_za_cele_mapy;
468 PrintToChat(i, "[COD:MW] Dostales %i doswiadczenia za uratowanie zakladnika.", doswiadczenie);
469 }
470 else
471 {
472 doswiadczenie += doswiadczenie_za_cele_mapy/2;
473 PrintToChat(i, "[COD:MW] Dostales %i doswiadczenia za uratowanie zakladnika przez twoja druzyne.", doswiadczenie);
474 }
475
476 doswiadczenie_gracza[i] += doswiadczenie;
477 SprawdzPoziom(i);
478 }
479 }
480}
481public Action:BombaRozbrojona(Handle:event, const String:name[], bool:dontbroadcast)
482{
483 if(!StrEqual(name, "bomb_defused") || GetClientCount() < MIN_ILOSC_GRACZY)
484 return;
485
486 new doswiadczenie_za_cele_mapy = GetConVarInt(cvar_doswiadczenie_za_cele_mapy);
487 if(doswiadczenie_za_cele_mapy)
488 {
489 new client = GetClientOfUserId(GetEventInt(event, "userid"));
490 for(new i = 1; i <= MaxClients; i ++)
491 {
492 if(!IsClientInGame(i) || !klasa_gracza[i])
493 continue;
494
495 if(GetClientTeam(i) != CS_TEAM_CT)
496 continue;
497
498 new doswiadczenie = 0;
499 if(i == client)
500 {
501 doswiadczenie += doswiadczenie_za_cele_mapy;
502 PrintToChat(i, "[COD:MW] Dostales %i doswiadczenia za rozbrojenie bomby.", doswiadczenie);
503 }
504 else
505 {
506 doswiadczenie += doswiadczenie_za_cele_mapy/2;
507 PrintToChat(i, "[COD:MW] Dostales %i doswiadczenia za rozbrojenie bomby przez twoja druzyne.", doswiadczenie);
508 }
509
510 doswiadczenie_gracza[i] += doswiadczenie;
511 SprawdzPoziom(i);
512 }
513 }
514}
515public Action:BombaPodlozona(Handle:event, const String:name[], bool:dontbroadcast)
516{
517 if(!StrEqual(name, "bomb_planted") || GetClientCount() < MIN_ILOSC_GRACZY)
518 return;
519
520 new doswiadczenie_za_cele_mapy = GetConVarInt(cvar_doswiadczenie_za_cele_mapy);
521 if(doswiadczenie_za_cele_mapy)
522 {
523 new client = GetClientOfUserId(GetEventInt(event, "userid"));
524 for(new i = 1; i <= MaxClients; i ++)
525 {
526 if(!IsClientInGame(i) || !klasa_gracza[i])
527 continue;
528
529 if(GetClientTeam(i) != CS_TEAM_T)
530 continue;
531
532 new doswiadczenie = 0;
533 if(i == client)
534 {
535 doswiadczenie += doswiadczenie_za_cele_mapy;
536 PrintToChat(i, "[COD:MW] Dostales %i doswiadczenia za podlozenie bomby.", doswiadczenie);
537 }
538 else
539 {
540 doswiadczenie += doswiadczenie_za_cele_mapy/2;
541 PrintToChat(i, "[COD:MW] Dostales %i doswiadczenia za podlozenie bomby przez twoja druzyne.", doswiadczenie);
542 }
543
544 doswiadczenie_gracza[i] += doswiadczenie;
545 SprawdzPoziom(i);
546 }
547 }
548}
549public Action:OdrodzenieGracza(Handle:event, String:name[], bool:dontbroadcast)
550{
551 new client = GetClientOfUserId(GetEventInt(event, "userid"));
552 if(!IsValidClient(client))
553 return;
554
555 if(hud_task[client] == null)
556 hud_task[client] = CreateTimer(REFRESH_HUD, PokazInformacje, client, TIMER_FLAG_NO_MAPCHANGE);
557
558 if(nowa_klasa_gracza[client])
559 UstawNowaKlase(client);
560
561 if(!klasa_gracza[client])
562 {
563 WybierzKlase(client, 0);
564 return;
565 }
566 if(punkty_gracza[client])
567 PrzydzielPunkty(client, 0);
568
569 DajBronie(client);
570 ZastosujAtrybuty(client);
571}
572public Action:SmiercGracza(Handle:event, String:name[], bool:dontbroadcast)
573{
574 new client = GetClientOfUserId(GetEventInt(event, "userid"));
575 new killer = GetClientOfUserId(GetEventInt(event, "attacker"));
576 new bool:headshot = GetEventBool(event, "headshot");
577 if(!IsValidClient(client) || !IsValidClient(killer))
578 return;
579
580 if(klasa_gracza[killer] && GetClientTeam(client) != GetClientTeam(killer))
581 {
582 if(!item_gracza[killer])
583 {
584 UstawNowyItem(killer, -1, -1, -1);
585 PrintToChat(killer, "[COD:MW] Zdobyles %s.", nazwy_itemow[item_gracza[killer]]);
586 }
587
588 new doswiadczenie = 0;
589 if(headshot)
590 {
591 new doswiadczenie_za_zabojstwo_hs = GetConVarInt(cvar_doswiadczenie_za_zabojstwo_hs);
592 if(doswiadczenie_za_zabojstwo_hs)
593 {
594 PrintToChat(killer, "[COD:MW] Dostales %i doswiadczenia za zabicie przeciwnika strzalem w glowe.", doswiadczenie_za_zabojstwo_hs);
595 doswiadczenie += doswiadczenie_za_zabojstwo_hs;
596 }
597 }
598 else
599 {
600 new doswiadczenie_za_zabojstwo = GetConVarInt(cvar_doswiadczenie_za_zabojstwo);
601 if(doswiadczenie_za_zabojstwo)
602 {
603 PrintToChat(killer, "[COD:MW] Dostales %i doswiadczenia za zabicie przeciwnika.", doswiadczenie_za_zabojstwo);
604 doswiadczenie += doswiadczenie_za_zabojstwo;
605 }
606 }
607
608 doswiadczenie_gracza[killer] += poziom_gracza[client]+doswiadczenie;
609 SprawdzPoziom(killer);
610 }
611 if(wytrzymalosc_itemu_gracza[client])
612 {
613 new wytrzymalosc_itemow = GetConVarInt(cvar_wytrzymalosc_itemow);
614 if(wytrzymalosc_itemu_gracza[client] > wytrzymalosc_itemow)
615 wytrzymalosc_itemu_gracza[client] -= wytrzymalosc_itemow;
616 else
617 {
618 UstawNowyItem(client, 0, 0, 0);
619 PrintToChat(client, "[COD:MW] Twoj item ulegl zniszczeniu.");
620 }
621 }
622}
623public Action:WybierzKlase(client, args)
624{
625 if(polaczony_raz[client])
626 PrintToChat(client, "[COD:MW] Trwa wczytywanie klas...");
627 else
628 {
629 if(klasa_gracza[client])
630 {
631 new klasa_g = klasa_gracza[client];
632 poziom_klasy_gracza[client][klasa_g] = poziom_gracza[client];
633 doswiadczenie_klasy_gracza[client][klasa_g] = doswiadczenie_gracza[client];
634 inteligencja_klasy_gracza[client][klasa_g] = inteligencja_gracza[client];
635 zdrowie_klasy_gracza[client][klasa_g] = zdrowie_gracza[client];
636 obrazenia_klasy_gracza[client][klasa_g] = obrazenia_gracza[client];
637 wytrzymalosc_klasy_gracza[client][klasa_g] = wytrzymalosc_gracza[client];
638 kondycja_klasy_gracza[client][klasa_g] = kondycja_gracza[client];
639 WybierzKlaseMenu(client);
640 }
641 else
642 {
643 if(!sql_baza)
644 PrintToChat(client, "[COD:MW] Wystapil blad podczas pobierania danych z bazy!");
645 else
646 {
647 new String:zapytanie[1024];
648 if(GetConVarInt(cvar_typ_zapisu))
649 {
650 new String:authid[64];
651 GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));
652 Format(zapytanie, sizeof(zapytanie), "SELECT `level`, `xp`, `intelligence`, `health`, `damage`, `stamina`, `trim`, `class` FROM `codmod_steamid` WHERE `steamid` = '%s';", authid);
653 }
654 else
655 {
656 new String:name[64];
657 GetClientName(client, name, sizeof(name));
658 Format(zapytanie, sizeof(zapytanie), "SELECT `level`, `xp`, `intelligence`, `health`, `damage`, `stamina`, `trim`, `class` FROM `codmod_name` WHERE `name` = '%s';", name);
659 }
660
661 SQL_TQuery(sql, WybierzKlase2, zapytanie, client);
662 polaczony_raz[client] = true;
663 }
664 }
665 }
666}
667public WybierzKlase2(Handle:owner, Handle:query, const String:error[], any:client)
668{
669 if(query == INVALID_HANDLE)
670 {
671 LogError("Load error: %s", error);
672 return;
673 }
674 if(SQL_GetRowCount(query))
675 {
676 new poziom = 1, doswiadczenie = 0, inteligencja = 0, zdrowie = 0, obrazenia = 0, wytrzymalosc = 0, kondycja = 0;
677 new String:klasa[512];
678
679 while(SQL_MoreRows(query))
680 {
681 while(SQL_FetchRow(query))
682 {
683 poziom = SQL_FetchInt(query, 0);
684 doswiadczenie = SQL_FetchInt(query, 1);
685 inteligencja = SQL_FetchInt(query, 2);
686 zdrowie = SQL_FetchInt(query, 3);
687 obrazenia = SQL_FetchInt(query, 4);
688 wytrzymalosc = SQL_FetchInt(query, 5);
689 kondycja = SQL_FetchInt(query, 6);
690 SQL_FetchString(query, 7, klasa, sizeof(klasa));
691 for(new i = 1; i <= ilosc_klas; i ++)
692 {
693 if(StrEqual(nazwy_klas[i], klasa))
694 {
695 poziom_klasy_gracza[client][i] = poziom;
696 doswiadczenie_klasy_gracza[client][i] = doswiadczenie;
697 inteligencja_klasy_gracza[client][i] = inteligencja;
698 zdrowie_klasy_gracza[client][i] = zdrowie;
699 obrazenia_klasy_gracza[client][i] = obrazenia;
700 wytrzymalosc_klasy_gracza[client][i] = wytrzymalosc;
701 kondycja_klasy_gracza[client][i] = kondycja;
702 }
703 }
704 }
705 }
706 }
707
708 WybierzKlaseMenu(client);
709 polaczony_raz[client] = false;
710}
711
712public Action:WybierzKlaseMenu(client)
713{
714 new Handle:menu = CreateMenu(WybierzKlaseMenu_Handler);
715 SetMenuTitle(menu, "Wybierz Frakcje:");
716 for(new i = 1; i <= ilosc_klas; i ++)
717 {
718 if(!StrEqual(frakcje_klas[i], "") && !is_in_previous(frakcje_klas[i], i))
719 AddMenuItem(menu, frakcje_klas[i], frakcje_klas[i]);
720 }
721
722 DisplayMenu(menu, client, 250);
723}
724public WybierzKlaseMenu_Handler(Handle:classhandle, MenuAction:action, client, position)
725{
726 if(action == MenuAction_Select)
727 {
728 new String:item[64];
729 GetMenuItem(classhandle, position, item, sizeof(item));
730 position ++;
731
732 new String:menu_item[128];
733 new String:numer_klasy[10];
734 new Handle:menu = CreateMenu(WybierzKlase_Handler);
735 SetMenuTitle(menu, "Wybierz Klase:");
736 for(new i = 1; i <= ilosc_klas; i ++)
737 {
738 if(StrEqual(item, frakcje_klas[i]))
739 {
740 IntToString(i, numer_klasy, sizeof(numer_klasy));
741 Format(menu_item, sizeof(menu_item), "%s (Lv: %i)", nazwy_klas[i], poziom_klasy_gracza[client][i]);
742 AddMenuItem(menu, numer_klasy, menu_item);
743 }
744 }
745
746 DisplayMenu(menu, client, 250);
747 }
748 else if(action == MenuAction_End)
749 CloseHandle(classhandle);
750}
751
752public bool:is_in_previous(const String:frakcja[], from)
753{
754 for(new i = from - 1; i >= 1; i --)
755 {
756 if(StrEqual(frakcje_klas[i], frakcja))
757 return true;
758 }
759
760 return false;
761}
762
763public WybierzKlase_Handler(Handle:classhandle, MenuAction:action, client, position)
764{
765 if(action == MenuAction_Select)
766 {
767 new String:item[32];
768 GetMenuItem(classhandle, position, item, sizeof(item));
769 position = StringToInt(item);
770
771 if(StrEqual(item, "1"))
772 {
773 if(position == klasa_gracza[client] && !nowa_klasa_gracza[client])
774 return;
775
776 nowa_klasa_gracza[client] = position;
777 if(klasa_gracza[client])
778 PrintToChat(client, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie.");
779 else
780 {
781 if(!pokazana_reklama[client])
782 {
783 PrintToChat(client, "[COD:MW] Witaj w Modyfikacji Call of Duty stworzonej przez Linux`");
784 pokazana_reklama[client] = true;
785 }
786
787 UstawNowaKlase(client);
788 DajBronie(client);
789 ZastosujAtrybuty(client);
790 }
791 }
792 }
793 else if(action == MenuAction_End)
794 CloseHandle(classhandle);
795}
796public Action:OpisKlas(client, args)
797{
798 new String:menu_item[64];
799 new Handle:menu = CreateMenu(OpisKlas_Handler);
800 SetMenuTitle(menu, "Wybierz Klase:");
801 for(new i = 1; i <= ilosc_klas; i ++)
802 {
803 Format(menu_item, sizeof(menu_item), "%s", nazwy_klas[i]);
804 AddMenuItem(menu, "1", menu_item);
805 }
806
807 DisplayMenu(menu, client, 250);
808}
809public OpisKlas_Handler(Handle:classhandle, MenuAction:action, client, position)
810{
811 if(action == MenuAction_Select)
812 {
813 new String:item[32];
814 GetMenuItem(classhandle, position, item, sizeof(item));
815 position ++;
816
817 if(StrEqual(item, "1"))
818 {
819 new String:bronie[512];
820 Format(bronie, sizeof(bronie), "%s", bronie_klas[position]);
821 ReplaceString(bronie, sizeof(bronie), "#weapon_", "|");
822
823 new String:opis[1024];
824 Format(opis, sizeof(opis), "Klasa: %s\nInteligencja: %i\nZdrowie: %i\nObrazenia: %i\nWytrzymalosc: %i\nKondycja: %i\nBronie: %s\nOpis: %s", nazwy_klas[position], inteligencja_klas[position], zdrowie_klas[position], obrazenia_klas[position], wytrzymalosc_klas[position], kondycja_klas[position], bronie, opisy_klas[position]);
825
826 new Handle:menu = CreateMenu(OpisKlas_Handler2);
827 SetMenuTitle(menu, opis);
828 AddMenuItem(menu, "1", "Wybor Klas");
829 DisplayMenu(menu, client, 250);
830 }
831 }
832 else if(action == MenuAction_End)
833 CloseHandle(classhandle);
834}
835public OpisKlas_Handler2(Handle:classhandle, MenuAction:action, client, position)
836{
837 if(action == MenuAction_Select)
838 {
839 new String:item[32];
840 GetMenuItem(classhandle, position, item, sizeof(item));
841
842 if(StrEqual(item, "1"))
843 OpisKlas(client, 0);
844 }
845 else if(action == MenuAction_End)
846 CloseHandle(classhandle);
847}
848public Action:OpisItemu(client, args)
849{
850 new String:opis_itemu[128];
851 new String:losowa_wartosc[10];
852 IntToString(wartosc_itemu_gracza[client], losowa_wartosc, sizeof(losowa_wartosc));
853 Format(opis_itemu, sizeof(opis_itemu), opisy_itemow[item_gracza[client]]);
854 ReplaceString(opis_itemu, sizeof(opis_itemu), "LW", losowa_wartosc);
855
856 PrintToChat(client, "[COD:MW] Item: %s [%i%%].", nazwy_itemow[item_gracza[client]], wytrzymalosc_itemu_gracza[client]);
857 PrintToChat(client, "[COD:MW] Opis: %s.", opis_itemu);
858}
859public Action:WyrzucItem(client, args)
860{
861 if(item_gracza[client])
862 {
863 new item = item_gracza[client];
864 UstawNowyItem(client, 0, 0, 0);
865 PrintToChat(client, "[COD:MW] Wyrzuciles %s.", nazwy_itemow[item]);
866 }
867 else
868 PrintToChat(client, "[COD:MW] Nie masz zadnego itemu.");
869}
870public Action:OpisItemow(client, args)
871{
872 new String:menu_item[64];
873 new Handle:menu = CreateMenu(OpisItemow_Handler);
874 SetMenuTitle(menu, "Wybierz Item:");
875 for(new i = 1; i <= ilosc_itemow; i ++)
876 {
877 Format(menu_item, sizeof(menu_item), "%s", nazwy_itemow[i]);
878 AddMenuItem(menu, "1", menu_item);
879 }
880
881 DisplayMenu(menu, client, 250);
882}
883public OpisItemow_Handler(Handle:classhandle, MenuAction:action, client, position)
884{
885 if(action == MenuAction_Select)
886 {
887 new String:item[32];
888 GetMenuItem(classhandle, position, item, sizeof(item));
889 position ++;
890
891 if(StrEqual(item, "1"))
892 {
893 new String:opis_itemu[128];
894 new String:losowa_wartosc[21];
895 Format(losowa_wartosc, sizeof(losowa_wartosc), "%i-%i", min_wartosci_itemow[position], max_wartosci_itemow[position]);
896 Format(opis_itemu, sizeof(opis_itemu), opisy_itemow[position]);
897 ReplaceString(opis_itemu, sizeof(opis_itemu), "LW", losowa_wartosc);
898
899 new String:opis[1024];
900 Format(opis, sizeof(opis), "Item: %s\nOpis: %s", nazwy_itemow[position], opis_itemu);
901
902 new Handle:menu = CreateMenu(OpisItemow_Handler2);
903 SetMenuTitle(menu, opis);
904 AddMenuItem(menu, "1", "Wybor Itemow");
905 DisplayMenu(menu, client, 250);
906 }
907 }
908 else if(action == MenuAction_End)
909 CloseHandle(classhandle);
910}
911public OpisItemow_Handler2(Handle:classhandle, MenuAction:action, client, position)
912{
913 if(action == MenuAction_Select)
914 {
915 new String:item[32];
916 GetMenuItem(classhandle, position, item, sizeof(item));
917
918 if(StrEqual(item, "1"))
919 OpisItemow(client, 0);
920 }
921 else if(action == MenuAction_End)
922 CloseHandle(classhandle);
923}
924public Action:PrzydzielPunkty(client, args)
925{
926 new inteligencja = inteligencja_gracza[client];
927 new limit_inteligencji = GetConVarInt(cvar_limit_inteligencji);
928
929 new zdrowie = zdrowie_gracza[client];
930 new limit_zdrowia = GetConVarInt(cvar_limit_zdrowia);
931
932 new obrazenia = obrazenia_gracza[client];
933 new limit_obrazen = GetConVarInt(cvar_limit_obrazen);
934
935 new wytrzymalosc = wytrzymalosc_gracza[client];
936 new limit_wytrzymalosci = GetConVarInt(cvar_limit_wytrzymalosci);
937
938 new kondycja = kondycja_gracza[client];
939 new limit_kondycji = GetConVarInt(cvar_limit_kondycji);
940
941 if(inteligencja > limit_inteligencji || zdrowie > limit_zdrowia || obrazenia > limit_obrazen || wytrzymalosc > limit_wytrzymalosci || kondycja > limit_kondycji)
942 ResetujPunkty(client, 0);
943 else
944 {
945 new String:menu_item1[512];
946 Format(menu_item1, sizeof(menu_item1), "Przydziel Punkty (%i):", punkty_gracza[client]);
947
948 new String:menu_item2[512];
949 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
950 Format(menu_item2, sizeof(menu_item2), "Ile dodawac: ALL (Po ile punktow dodawac do statystyk)");
951 else
952 Format(menu_item2, sizeof(menu_item2), "Ile dodawac: %i (Po ile punktow dodawac do statystyk)", ile_rozdawac[szybkosc_rozdania[client]]);
953
954 new String:menu_item3[512];
955 if(limit_inteligencji)
956 Format(menu_item3, sizeof(menu_item3), "Inteligencja: %i/%i (Zwieksza sile itemow i umiejetnosci klas)", inteligencja, limit_inteligencji);
957 else
958 Format(menu_item3, sizeof(menu_item3), "Inteligencja: %i (Zwieksza sile itemow i umiejetnosci klas)", inteligencja);
959
960 new String:menu_item4[512];
961 if(limit_zdrowia)
962 Format(menu_item4, sizeof(menu_item4), "Zdrowie: %i/%i (Zwieksza zdrowie)", zdrowie, limit_zdrowia);
963 else
964 Format(menu_item4, sizeof(menu_item4), "Zdrowie: %i (Zwieksza zdrowie)", zdrowie);
965
966 new String:menu_item5[512];
967 if(limit_obrazen)
968 Format(menu_item5, sizeof(menu_item5), "Obrazenia: %i/%i (Zwieksza zadawane obrazenia)", obrazenia, limit_obrazen);
969 else
970 Format(menu_item5, sizeof(menu_item5), "Obrazenia: %i (Zwieksza zadawane obrazenia)", obrazenia);
971
972 new String:menu_item6[512];
973 if(limit_wytrzymalosci)
974 Format(menu_item6, sizeof(menu_item6), "Wytrzymalosc: %i/%i (Zmniejsza otrzymywane obrazenia)", wytrzymalosc, limit_wytrzymalosci);
975 else
976 Format(menu_item6, sizeof(menu_item6), "Wytrzymalosc: %i (Zmniejsza otrzymywane obrazenia)", wytrzymalosc);
977
978 new String:menu_item7[512];
979 if(limit_kondycji)
980 Format(menu_item7, sizeof(menu_item7), "Kondycja: %i/%i (Zwieksza tempo chodu)", kondycja, limit_kondycji);
981 else
982 Format(menu_item7, sizeof(menu_item7), "Kondycja: %i (Zwieksza tempo chodu)", kondycja);
983
984 new Handle:menu = CreateMenu(PrzydzielPunkty_Handler);
985 SetMenuTitle(menu, menu_item1);
986 AddMenuItem(menu, "1", menu_item2);
987 AddMenuItem(menu, "2", menu_item3);
988 AddMenuItem(menu, "3", menu_item4);
989 AddMenuItem(menu, "4", menu_item5);
990 AddMenuItem(menu, "5", menu_item6);
991 AddMenuItem(menu, "6", menu_item7);
992 DisplayMenu(menu, client, 250);
993 }
994}
995public PrzydzielPunkty_Handler(Handle:classhandle, MenuAction:action, client, position)
996{
997 if(action == MenuAction_Select)
998 {
999 new String:item[32];
1000 GetMenuItem(classhandle, position, item, sizeof(item));
1001 if(!punkty_gracza[client])
1002 return;
1003
1004 new ilosc;
1005 if(ile_rozdawac[szybkosc_rozdania[client]] == -1)
1006 ilosc = punkty_gracza[client];
1007 else
1008 ilosc = (ile_rozdawac[szybkosc_rozdania[client]] > punkty_gracza[client])? punkty_gracza[client]: ile_rozdawac[szybkosc_rozdania[client]];
1009
1010 if(StrEqual(item, "1"))
1011 {
1012 if(szybkosc_rozdania[client] < sizeof(ile_rozdawac)-1)
1013 szybkosc_rozdania[client] ++;
1014 else
1015 szybkosc_rozdania[client] = 0;
1016 }
1017 else if(StrEqual(item, "2"))
1018 {
1019 new limit_inteligencji = (GetConVarInt(cvar_limit_inteligencji) < 1)? inteligencja_gracza[client]+9999: GetConVarInt(cvar_limit_inteligencji);
1020 if(inteligencja_gracza[client] < limit_inteligencji)
1021 {
1022 if(inteligencja_gracza[client] + ilosc <= limit_inteligencji)
1023 {
1024 inteligencja_gracza[client] += ilosc;
1025 punkty_gracza[client] -= ilosc;
1026 }
1027 else
1028 {
1029 new punktydododania;
1030 punktydododania = limit_inteligencji - inteligencja_gracza[client];
1031 inteligencja_gracza[client] += punktydododania;
1032 punkty_gracza[client] -= punktydododania;
1033 }
1034 }
1035 else
1036 PrintToChat(client, "[COD:MW] Maksymalny poziom inteligencji osiagniety!");
1037 }
1038 else if(StrEqual(item, "3"))
1039 {
1040 new limit_zdrowia = (GetConVarInt(cvar_limit_zdrowia) < 1)? zdrowie_gracza[client]+9999: GetConVarInt(cvar_limit_zdrowia);
1041 if(zdrowie_gracza[client] < limit_zdrowia)
1042 {
1043 if(zdrowie_gracza[client] + ilosc <= limit_zdrowia)
1044 {
1045 zdrowie_gracza[client] += ilosc;
1046 punkty_gracza[client] -= ilosc;
1047 }
1048 else
1049 {
1050 new punktydododania;
1051 punktydododania = limit_zdrowia - zdrowie_gracza[client];
1052 zdrowie_gracza[client] += punktydododania;
1053 punkty_gracza[client] -= punktydododania;
1054 }
1055 }
1056 else
1057 PrintToChat(client, "[COD:MW] Maksymalny poziom zdrowia osiagniety!");
1058 }
1059 else if(StrEqual(item, "4"))
1060 {
1061 new limit_obrazen = (GetConVarInt(cvar_limit_obrazen) < 1)? obrazenia_gracza[client]+9999: GetConVarInt(cvar_limit_obrazen);
1062 if(obrazenia_gracza[client] < limit_obrazen)
1063 {
1064 if(obrazenia_gracza[client] + ilosc <= limit_obrazen)
1065 {
1066 obrazenia_gracza[client] += ilosc;
1067 punkty_gracza[client] -= ilosc;
1068 }
1069 else
1070 {
1071 new punktydododania;
1072 punktydododania = limit_obrazen - obrazenia_gracza[client];
1073 obrazenia_gracza[client] += punktydododania;
1074 punkty_gracza[client] -= punktydododania;
1075 }
1076 }
1077 else
1078 PrintToChat(client, "[COD:MW] Maksymalny poziom obrazen osiagniety!");
1079 }
1080 else if(StrEqual(item, "5"))
1081 {
1082 new limit_wytrzymalosci = (GetConVarInt(cvar_limit_wytrzymalosci) < 1)? wytrzymalosc_gracza[client]+9999: GetConVarInt(cvar_limit_wytrzymalosci);
1083 if(wytrzymalosc_gracza[client] < limit_wytrzymalosci)
1084 {
1085 if(wytrzymalosc_gracza[client] + ilosc <= limit_wytrzymalosci)
1086 {
1087 wytrzymalosc_gracza[client] += ilosc;
1088 punkty_gracza[client] -= ilosc;
1089 }
1090 else
1091 {
1092 new punktydododania;
1093 punktydododania = limit_wytrzymalosci - wytrzymalosc_gracza[client];
1094 wytrzymalosc_gracza[client] += punktydododania;
1095 punkty_gracza[client] -= punktydododania;
1096 }
1097 }
1098 else
1099 PrintToChat(client, "[COD:MW] Maksymalny poziom wytrzymalosci osiagniety!");
1100 }
1101 else if(StrEqual(item, "6"))
1102 {
1103 new limit_kondycji = (GetConVarInt(cvar_limit_kondycji) < 1)? kondycja_gracza[client]+9999: GetConVarInt(cvar_limit_kondycji);
1104 if(kondycja_gracza[client] < limit_kondycji)
1105 {
1106 if(kondycja_gracza[client] + ilosc <= limit_kondycji)
1107 {
1108 kondycja_gracza[client] += ilosc;
1109 punkty_gracza[client] -= ilosc;
1110 }
1111 else
1112 {
1113 new punktydododania;
1114 punktydododania = limit_kondycji - kondycja_gracza[client];
1115 kondycja_gracza[client] += punktydododania;
1116 punkty_gracza[client] -= punktydododania;
1117 }
1118 }
1119 else
1120 PrintToChat(client, "[COD:MW] Maksymalny poziom kondycji osiagniety!");
1121 }
1122 if(punkty_gracza[client])
1123 PrzydzielPunkty(client, 0);
1124
1125 if(!zapisz_dane[client])
1126 zapisz_dane[client] = true;
1127 }
1128 else if(action == MenuAction_End)
1129 CloseHandle(classhandle);
1130}
1131public Action:ResetujPunkty(client, args)
1132{
1133 punkty_gracza[client] = (GetConVarInt(cvar_co_ile_punkt) < 1)? 0: (poziom_gracza[client]/GetConVarInt(cvar_co_ile_punkt));
1134 inteligencja_gracza[client] = 0;
1135 zdrowie_gracza[client] = 0;
1136 obrazenia_gracza[client] = 0;
1137 wytrzymalosc_gracza[client] = 0;
1138 kondycja_gracza[client] = 0;
1139 if(punkty_gracza[client])
1140 {
1141 PrzydzielPunkty(client, 0);
1142 if(!zapisz_dane[client])
1143 zapisz_dane[client] = true;
1144 }
1145
1146 PrintToChat(client, "[COD:MW] Umiejetnosci zostaly zresetowane.");
1147}
1148public Action:BlokujKomende(client, args)
1149{
1150 return Plugin_Handled;
1151}
1152public Action:PokazInformacje(Handle:timer, any:client)
1153{
1154 if(!IsValidClient(client))
1155 return;
1156
1157 if(IsPlayerAlive(client))
1158 PrintHintText(client, "<font face='Stratum2'>[Klasa: <font color='#797FD4'><b>%s</b></font>]\n[Xp: <font color='#797FD4'><b>%i</b></font> | Lv: <font color='#797FD4'><b>%i</b></font>]\n[Item: <font color='#797FD4'><b>%s</b></font> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[client]], doswiadczenie_gracza[client], poziom_gracza[client], nazwy_itemow[item_gracza[client]], wytrzymalosc_itemu_gracza[client]);
1159 else
1160 {
1161 new spect = GetEntProp(client, Prop_Send, "m_iObserverMode");
1162 if(spect == 4 || spect == 5)
1163 {
1164 new target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
1165 if(target != -1 && IsValidClient(target))
1166 PrintHintText(client, "<font face='Stratum2'>[Klasa: <font color='#797FD4'><b>%s</b></font>]\n[Xp: <font color='#797FD4'><b>%i</b></font> | Lv: <font color='#797FD4'><b>%i</b></font>]\n[Item: <font color='#797FD4'><b>%s</b></font> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], poziom_gracza[target], nazwy_itemow[item_gracza[target]], wytrzymalosc_itemu_gracza[target]);
1167 }
1168 }
1169
1170 hud_task[client] = CreateTimer(REFRESH_HUD, PokazInformacje, client, TIMER_FLAG_NO_MAPCHANGE);
1171}
1172public Action:DataBaseConnect()
1173{
1174 new String:error[512];
1175 sql = SQL_Connect("codmod_lvl_sql", true, error, sizeof(error));
1176 if(sql == INVALID_HANDLE)
1177 {
1178 LogError("Could not connect: %s", error);
1179 sql_baza = 0;
1180 }
1181 else if(sql_baza < 2)
1182 {
1183 sql_baza ++;
1184 new String:zapytanie[1024];
1185 switch(sql_baza)
1186 {
1187 case 1: Format(zapytanie, sizeof(zapytanie), "CREATE TABLE IF NOT EXISTS `codmod_steamid` (`steamid` VARCHAR(64) NOT NULL, `class` VARCHAR(64) NOT NULL, `level` INT(9), `xp` INT(9), `intelligence` INT(9), `health` INT(9), `damage` INT(9), `stamina` INT(9), `trim` INT(9), UNIQUE KEY `class` (`class`, `steamid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;");
1188 case 2: Format(zapytanie, sizeof(zapytanie), "CREATE TABLE IF NOT EXISTS `codmod_name` (`name` VARCHAR(64) NOT NULL, `class` VARCHAR(64) NOT NULL, `level` INT(9), `xp` INT(9), `intelligence` INT(9), `health` INT(9), `damage` INT(9), `stamina` INT(9), `trim` INT(9), UNIQUE KEY `class` (`class`, `name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;");
1189 }
1190
1191 SQL_LockDatabase(sql);
1192 SQL_FastQuery(sql, zapytanie);
1193 SQL_UnlockDatabase(sql);
1194 DataBaseConnect();
1195 }
1196}
1197public Action:TaskZapiszDane(Handle:timer, any:client)
1198{
1199 if(!IsValidClient(client))
1200 return;
1201
1202 if(zapisz_dane[client])
1203 {
1204 ZapiszDane(client);
1205 zapisz_dane[client] = false;
1206 }
1207
1208 new ftime = GetConVarInt(cvar_co_ile_zapisywac);
1209 if(ftime)
1210 sql_task[client] = CreateTimer(float(ftime), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
1211}
1212public Action:ZapiszDane(client)
1213{
1214 if(!sql_baza || !klasa_gracza[client])
1215 return;
1216
1217 new String:zapytanie[1024];
1218 if(GetConVarInt(cvar_typ_zapisu))
1219 {
1220 new String:authid[64];
1221 GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));
1222 Format(zapytanie, sizeof(zapytanie), "INSERT INTO `codmod_steamid` (`steamid`, `class`, `level`, `xp`, `intelligence`, `health`, `damage`, `stamina`, `trim`) VALUES ('%s', '%s', '%i', '%i', '%i', '%i', '%i', '%i', '%i') ON DUPLICATE KEY UPDATE `level`=VALUES(`level`), `xp`=VALUES(`xp`), `intelligence`=VALUES(`intelligence`), `health`=VALUES(`health`), `damage`=VALUES(`damage`), `stamina`=VALUES(`stamina`), `trim`=VALUES(`trim`);", 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]);
1223 }
1224 else
1225 {
1226 new String:name[64];
1227 GetClientName(client, name, sizeof(name));
1228 Format(zapytanie, sizeof(zapytanie), "INSERT INTO `codmod_name` (`name`, `class`, `level`, `xp`, `intelligence`, `health`, `damage`, `stamina`, `trim`) VALUES ('%s', '%s', '%i', '%i', '%i', '%i', '%i', '%i', '%i') ON DUPLICATE KEY UPDATE `level`=VALUES(`level`), `xp`=VALUES(`xp`), `intelligence`=VALUES(`intelligence`), `health`=VALUES(`health`), `damage`=VALUES(`damage`), `stamina`=VALUES(`stamina`), `trim`=VALUES(`trim`);", name, 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]);
1229 }
1230
1231 SQL_TQuery(sql, ZapiszDane_Handler, zapytanie, client);
1232}
1233public ZapiszDane_Handler(Handle:owner, Handle:query, const String:error[], any:client)
1234{
1235 if(query == INVALID_HANDLE)
1236 {
1237 LogError("Save error: %s", error);
1238 return;
1239 }
1240}
1241public Action:WczytajDane(client, klasa)
1242{
1243 poziom_gracza[client] = poziom_klasy_gracza[client][klasa];
1244 doswiadczenie_gracza[client] = doswiadczenie_klasy_gracza[client][klasa];
1245 inteligencja_gracza[client] = inteligencja_klasy_gracza[client][klasa];
1246 zdrowie_gracza[client] = zdrowie_klasy_gracza[client][klasa];
1247 obrazenia_gracza[client] = obrazenia_klasy_gracza[client][klasa];
1248 wytrzymalosc_gracza[client] = wytrzymalosc_klasy_gracza[client][klasa];
1249 kondycja_gracza[client] = kondycja_klasy_gracza[client][klasa];
1250 punkty_gracza[client] = (GetConVarInt(cvar_co_ile_punkt) < 1)? 0: (poziom_gracza[client]/GetConVarInt(cvar_co_ile_punkt))-inteligencja_gracza[client]-zdrowie_gracza[client]-obrazenia_gracza[client]-wytrzymalosc_gracza[client]-kondycja_gracza[client];
1251
1252 new ftime = GetConVarInt(cvar_co_ile_zapisywac);
1253 if(ftime)
1254 sql_task[client] = CreateTimer(float(ftime), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
1255}
1256public Action:SprawdzPoziom(client)
1257{
1258 if(!IsValidClient(client) || !klasa_gracza[client])
1259 return;
1260
1261 new bool:zdobyl_poziom = false;
1262 new bool:stracil_poziom = false;
1263 new limit_poziomu = (GetConVarInt(cvar_limit_poziomu) < 1)? poziom_gracza[client]+9999: GetConVarInt(cvar_limit_poziomu);
1264 while(doswiadczenie_gracza[client] >= SprawdzDoswiadczenie(poziom_gracza[client]) && poziom_gracza[client] < limit_poziomu)
1265 {
1266 poziom_gracza[client] ++;
1267 zdobyl_poziom = true;
1268 }
1269 while(doswiadczenie_gracza[client] < SprawdzDoswiadczenie(poziom_gracza[client]-1))
1270 {
1271 poziom_gracza[client] --;
1272 stracil_poziom = true;
1273 }
1274 if(poziom_gracza[client] > limit_poziomu)
1275 {
1276 poziom_gracza[client] = limit_poziomu;
1277 ResetujPunkty(client, 0);
1278 }
1279 if(stracil_poziom)
1280 ResetujPunkty(client, 0);
1281 else if(zdobyl_poziom)
1282 {
1283 punkty_gracza[client] = (GetConVarInt(cvar_co_ile_punkt) < 1)? 0: (poziom_gracza[client]/GetConVarInt(cvar_co_ile_punkt))-inteligencja_gracza[client]-zdrowie_gracza[client]-obrazenia_gracza[client]-wytrzymalosc_gracza[client]-kondycja_gracza[client];
1284 ClientCommand(client, "play *cod/levelup.mp3");
1285 }
1286 if(!zapisz_dane[client])
1287 zapisz_dane[client] = true;
1288}
1289public SprawdzDoswiadczenie(poziom)
1290{
1291 new proporcja_poziomu = (GetConVarInt(cvar_proporcja_poziomu) < 1)? 1: GetConVarInt(cvar_proporcja_poziomu);
1292 return poziom*proporcja_poziomu;
1293}
1294public Action:DajBronie(client)
1295{
1296 new slot = -1;
1297 slot = GetPlayerWeaponSlot(client, CS_SLOT_PRIMARY);
1298 if(slot != -1)
1299 RemovePlayerItem(client, slot);
1300
1301 slot = GetPlayerWeaponSlot(client, CS_SLOT_SECONDARY);
1302 if(slot != -1)
1303 RemovePlayerItem(client, slot);
1304
1305 slot = GetPlayerWeaponSlot(client, CS_SLOT_GRENADE);
1306 if(slot != -1)
1307 RemovePlayerItem(client, slot);
1308
1309 new String:weapons[10][32];
1310 ExplodeString(bronie_klas[klasa_gracza[client]], "#", weapons, sizeof(weapons), sizeof(weapons[]));
1311 for(new i = 0; i < sizeof(weapons); i ++)
1312 {
1313 if(!StrEqual(weapons[i], ""))
1314 GivePlayerItem(client, weapons[i]);
1315 }
1316
1317 new String:weapons2[5][32];
1318 ExplodeString(bonusowe_bronie_gracza[client], "#", weapons2, sizeof(weapons2), sizeof(weapons2[]));
1319 for(new i = 0; i < sizeof(weapons2); i ++)
1320 {
1321 if(!StrEqual(weapons2[i], ""))
1322 GivePlayerItem(client, weapons2[i]);
1323 }
1324}
1325public Action:ZastosujAtrybuty(client)
1326{
1327 maksymalne_obrazenia_gracza[client] = (obrazenia_gracza[client]+bonusowe_obrazenia_gracza[client]+obrazenia_klas[klasa_gracza[client]])*0.003;
1328 maksymalna_wytrzymalosc_gracza[client] = (wytrzymalosc_gracza[client]+bonusowa_wytrzymalosc_gracza[client]+wytrzymalosc_klas[klasa_gracza[client]])*0.002;
1329
1330 SetEntData(client, FindDataMapOffs(client, "m_iHealth"), 100+(zdrowie_gracza[client]+bonusowe_zdrowie_gracza[client]+zdrowie_klas[klasa_gracza[client]]));
1331 SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", 0.8+(kondycja_gracza[client]+bonusowa_kondycja_gracza[client]+kondycja_klas[klasa_gracza[client]])*0.003);
1332}
1333public Action:UstawNowaKlase(client)
1334{
1335 if(!ilosc_klas)
1336 return;
1337
1338 new Function:target;
1339 target = GetFunctionByName(pluginy_klas[klasa_gracza[client]], "cod_class_disabled");
1340 if(target != INVALID_FUNCTION)
1341 {
1342 Call_StartFunction(pluginy_klas[klasa_gracza[client]], target);
1343 Call_PushCell(client);
1344 Call_PushCell(klasa_gracza[client]);
1345 Call_Finish();
1346 }
1347
1348 klasa_gracza[client] = nowa_klasa_gracza[client];
1349 nowa_klasa_gracza[client] = 0;
1350
1351 target = GetFunctionByName(pluginy_klas[klasa_gracza[client]], "cod_class_enabled");
1352 if(target != INVALID_FUNCTION)
1353 {
1354 Call_StartFunction(pluginy_klas[klasa_gracza[client]], target);
1355 Call_PushCell(client);
1356 Call_PushCell(klasa_gracza[client]);
1357 Call_Finish();
1358 }
1359
1360 UstawNowyItem(client, item_gracza[client], wartosc_itemu_gracza[client], wytrzymalosc_itemu_gracza[client]);
1361 WczytajDane(client, klasa_gracza[client]);
1362}
1363public Action:UstawNowyItem(client, item, wartosc, wytrzymalosc)
1364{
1365 if(!ilosc_itemow)
1366 return;
1367
1368 item = (item == -1)? GetRandomInt(1, ilosc_itemow): item;
1369 wartosc = (wartosc == -1 || min_wartosci_itemow[item] > wartosc || wartosc > max_wartosci_itemow[item])? GetRandomInt(min_wartosci_itemow[item], max_wartosci_itemow[item]): wartosc;
1370 wytrzymalosc = (wytrzymalosc == -1)? GetConVarInt(cvar_max_wytrzymalosc_itemow): wytrzymalosc;
1371
1372 new Function:target;
1373 target = GetFunctionByName(pluginy_itemow[item_gracza[client]], "cod_item_disabled");
1374 if(target != INVALID_FUNCTION)
1375 {
1376 Call_StartFunction(pluginy_itemow[item_gracza[client]], target);
1377 Call_PushCell(client);
1378 Call_PushCell(item_gracza[client]);
1379 Call_Finish();
1380 }
1381
1382 item_gracza[client] = item;
1383 wartosc_itemu_gracza[client] = wartosc;
1384 wytrzymalosc_itemu_gracza[client] = wytrzymalosc;
1385
1386 target = GetFunctionByName(pluginy_itemow[item_gracza[client]], "cod_item_enabled");
1387 if(target != INVALID_FUNCTION)
1388 {
1389 Call_StartFunction(pluginy_itemow[item_gracza[client]], target);
1390 Call_PushCell(client);
1391 Call_PushCell(item_gracza[client]);
1392 Call_Finish();
1393 }
1394}
1395public UstawBonusoweBronie(Handle:plugin, numParams)
1396{
1397 new client = GetNativeCell(1);
1398 if(IsValidClient(client))
1399 {
1400 new String:nazwa[256];
1401 GetNativeString(2, nazwa, sizeof(nazwa));
1402 bonusowe_bronie_gracza[client] = nazwa;
1403 }
1404
1405 return -1;
1406}
1407public UstawBonusowaInteligencje(Handle:plugin, numParams)
1408{
1409 new client = GetNativeCell(1);
1410 if(IsValidClient(client))
1411 bonusowa_inteligencja_gracza[client] = GetNativeCell(2);
1412
1413 return -1;
1414}
1415public UstawBonusoweZdrowie(Handle:plugin, numParams)
1416{
1417 new client = GetNativeCell(1);
1418 if(IsValidClient(client))
1419 bonusowe_zdrowie_gracza[client] = GetNativeCell(2);
1420
1421 return -1;
1422}
1423public UstawBonusoweObrazenia(Handle:plugin, numParams)
1424{
1425 new client = GetNativeCell(1);
1426 if(IsValidClient(client))
1427 bonusowe_obrazenia_gracza[client] = GetNativeCell(2);
1428
1429 return -1;
1430}
1431public UstawBonusowaWytrzymalosc(Handle:plugin, numParams)
1432{
1433 new client = GetNativeCell(1);
1434 if(IsValidClient(client))
1435 bonusowa_wytrzymalosc_gracza[client] = GetNativeCell(2);
1436
1437 return -1;
1438}
1439public UstawBonusowaKondycje(Handle:plugin, numParams)
1440{
1441 new client = GetNativeCell(1);
1442 if(IsValidClient(client))
1443 bonusowa_kondycja_gracza[client] = GetNativeCell(2);
1444
1445 return -1;
1446}
1447public PobierzBonusoweBronie(Handle:plugin, numParams)
1448{
1449 new client = GetNativeCell(1);
1450 if(IsValidClient(client))
1451 {
1452 SetNativeString(2, bonusowe_bronie_gracza[client], GetNativeCell(3));
1453 return 1;
1454 }
1455
1456 return 0;
1457}
1458public PobierzInteligencje(Handle:plugin, numParams)
1459{
1460 new client = GetNativeCell(1);
1461 if(IsValidClient(client))
1462 {
1463 new inteligencja;
1464 if(GetNativeCell(2))
1465 inteligencja += inteligencja_gracza[client];
1466 if(GetNativeCell(3))
1467 inteligencja += bonusowa_inteligencja_gracza[client];
1468 if(GetNativeCell(4))
1469 inteligencja += inteligencja_klas[klasa_gracza[client]];
1470
1471 return inteligencja;
1472 }
1473
1474 return -1;
1475}
1476public PobierzZdrowie(Handle:plugin, numParams)
1477{
1478 new client = GetNativeCell(1);
1479 if(IsValidClient(client))
1480 {
1481 new zdrowie;
1482 if(GetNativeCell(2))
1483 zdrowie += zdrowie_gracza[client];
1484 if(GetNativeCell(3))
1485 zdrowie += bonusowe_zdrowie_gracza[client];
1486 if(GetNativeCell(4))
1487 zdrowie += zdrowie_klas[klasa_gracza[client]];
1488
1489 return zdrowie;
1490 }
1491
1492 return -1;
1493}
1494public PobierzObrazenia(Handle:plugin, numParams)
1495{
1496 new client = GetNativeCell(1);
1497 if(IsValidClient(client))
1498 {
1499 new obrazenia;
1500 if(GetNativeCell(2))
1501 obrazenia += obrazenia_gracza[client];
1502 if(GetNativeCell(3))
1503 obrazenia += bonusowe_obrazenia_gracza[client];
1504 if(GetNativeCell(4))
1505 obrazenia += obrazenia_klas[klasa_gracza[client]];
1506
1507 return obrazenia;
1508 }
1509
1510 return -1;
1511}
1512public PobierzWytrzymalosc(Handle:plugin, numParams)
1513{
1514 new client = GetNativeCell(1);
1515 if(IsValidClient(client))
1516 {
1517 new wytrzymalosc;
1518 if(GetNativeCell(2))
1519 wytrzymalosc += wytrzymalosc_gracza[client];
1520 if(GetNativeCell(3))
1521 wytrzymalosc += bonusowa_wytrzymalosc_gracza[client];
1522 if(GetNativeCell(4))
1523 wytrzymalosc += wytrzymalosc_klas[klasa_gracza[client]];
1524
1525 return wytrzymalosc;
1526 }
1527
1528 return -1;
1529}
1530public PobierzKondycje(Handle:plugin, numParams)
1531{
1532 new client = GetNativeCell(1);
1533 if(IsValidClient(client))
1534 {
1535 new kondycja;
1536 if(GetNativeCell(2))
1537 kondycja += kondycja_gracza[client];
1538 if(GetNativeCell(3))
1539 kondycja += bonusowa_kondycja_gracza[client];
1540 if(GetNativeCell(4))
1541 kondycja += kondycja_klas[klasa_gracza[client]];
1542
1543 return kondycja;
1544 }
1545
1546 return -1;
1547}
1548public PobierzPunkty(Handle:plugin, numParams)
1549{
1550 new client = GetNativeCell(1);
1551 if(IsValidClient(client))
1552 return punkty_gracza[client];
1553
1554 return -1;
1555}
1556public UstawDoswiadczenie(Handle:plugin, numParams)
1557{
1558 new client = GetNativeCell(1);
1559 if(IsValidClient(client))
1560 {
1561 doswiadczenie_gracza[client] = GetNativeCell(2);
1562 SprawdzPoziom(client);
1563 }
1564
1565 return -1;
1566}
1567public UstawKlase(Handle:plugin, numParams)
1568{
1569 new client = GetNativeCell(1);
1570 if(IsValidClient(client))
1571 {
1572 nowa_klasa_gracza[client] = GetNativeCell(2);
1573 if(GetNativeCell(3))
1574 {
1575 UstawNowaKlase(client);
1576 DajBronie(client);
1577 ZastosujAtrybuty(client);
1578 }
1579 }
1580
1581 return -1;
1582}
1583public UstawItem(Handle:plugin, numParams)
1584{
1585 new client = GetNativeCell(1);
1586 if(IsValidClient(client))
1587 UstawNowyItem(client, GetNativeCell(2), GetNativeCell(3), GetNativeCell(4));
1588
1589 return -1;
1590}
1591public PobierzDoswiadczenie(Handle:plugin, numParams)
1592{
1593 new client = GetNativeCell(1);
1594 if(IsValidClient(client))
1595 return doswiadczenie_gracza[client];
1596
1597 return -1;
1598}
1599public PobierzDoswiadczeniePoziomu(Handle:plugin, numParams)
1600{
1601 new poziom = GetNativeCell(1);
1602 return SprawdzDoswiadczenie(poziom);
1603}
1604public PobierzPoziom(Handle:plugin, numParams)
1605{
1606 new client = GetNativeCell(1);
1607 if(IsValidClient(client))
1608 {
1609 new klasa = GetNativeCell(2);
1610 if(klasa <= ilosc_klas)
1611 return poziom_klasy_gracza[client][klasa];
1612
1613 }
1614
1615 return -1;
1616}
1617public PobierzKlase(Handle:plugin, numParams)
1618{
1619 new client = GetNativeCell(1);
1620 if(IsValidClient(client))
1621 return klasa_gracza[client];
1622
1623 return -1;
1624}
1625public PobierzItem(Handle:plugin, numParams)
1626{
1627 new client = GetNativeCell(1);
1628 if(IsValidClient(client))
1629 return item_gracza[client];
1630
1631 return -1;
1632}
1633public PobierzWartoscItemu(Handle:plugin, numParams)
1634{
1635 new client = GetNativeCell(1);
1636 if(IsValidClient(client))
1637 return wartosc_itemu_gracza[client];
1638
1639 return -1;
1640}
1641public PobierzWytrzymaloscItemu(Handle:plugin, numParams)
1642{
1643 new client = GetNativeCell(1);
1644 if(IsValidClient(client))
1645 return wytrzymalosc_itemu_gracza[client];
1646
1647 return -1;
1648}
1649public PrzydzielInteligencjeKlasy(Handle:plugin, numParams)
1650{
1651 new client = GetNativeCell(1);
1652 if(IsValidClient(client))
1653 {
1654 new limit_inteligencji = (GetConVarInt(cvar_limit_inteligencji) < 1)? inteligencja_gracza[client]+9999: GetConVarInt(cvar_limit_inteligencji);
1655 if(inteligencja_gracza[client] < limit_inteligencji)
1656 {
1657 new punkty = GetNativeCell(2);
1658 new ilosc = (punkty_gracza[client] < punkty)? punkty_gracza[client]: punkty;
1659 if(inteligencja_gracza[client] + ilosc <= limit_inteligencji)
1660 {
1661 inteligencja_gracza[client] += ilosc;
1662 punkty_gracza[client] -= ilosc;
1663 }
1664 else
1665 {
1666 new punktydododania;
1667 punktydododania = limit_inteligencji - inteligencja_gracza[client];
1668 inteligencja_gracza[client] += punktydododania;
1669 punkty_gracza[client] -= punktydododania;
1670 }
1671 }
1672 }
1673}
1674public PrzydzielZdrowieKlasy(Handle:plugin, numParams)
1675{
1676 new client = GetNativeCell(1);
1677 if(IsValidClient(client))
1678 {
1679 new limit_zdrowia = (GetConVarInt(cvar_limit_zdrowia) < 1)? zdrowie_gracza[client]+9999: GetConVarInt(cvar_limit_zdrowia);
1680 if(zdrowie_gracza[client] < limit_zdrowia)
1681 {
1682 new punkty = GetNativeCell(2);
1683 new ilosc = (punkty_gracza[client] < punkty)? punkty_gracza[client]: punkty;
1684 if(zdrowie_gracza[client] + ilosc <= limit_zdrowia)
1685 {
1686 zdrowie_gracza[client] += ilosc;
1687 punkty_gracza[client] -= ilosc;
1688 }
1689 else
1690 {
1691 new punktydododania;
1692 punktydododania = limit_zdrowia - zdrowie_gracza[client];
1693 zdrowie_gracza[client] += punktydododania;
1694 punkty_gracza[client] -= punktydododania;
1695 }
1696 }
1697 }
1698}
1699public PrzydzielObrazeniaKlasy(Handle:plugin, numParams)
1700{
1701 new client = GetNativeCell(1);
1702 if(IsValidClient(client))
1703 {
1704 new limit_obrazen = (GetConVarInt(cvar_limit_obrazen) < 1)? obrazenia_gracza[client]+9999: GetConVarInt(cvar_limit_obrazen);
1705 if(obrazenia_gracza[client] < limit_obrazen)
1706 {
1707 new punkty = GetNativeCell(2);
1708 new ilosc = (punkty_gracza[client] < punkty)? punkty_gracza[client]: punkty;
1709 if(obrazenia_gracza[client] + ilosc <= limit_obrazen)
1710 {
1711 obrazenia_gracza[client] += ilosc;
1712 punkty_gracza[client] -= ilosc;
1713 }
1714 else
1715 {
1716 new punktydododania;
1717 punktydododania = limit_obrazen - obrazenia_gracza[client];
1718 obrazenia_gracza[client] += punktydododania;
1719 punkty_gracza[client] -= punktydododania;
1720 }
1721 }
1722 }
1723}
1724public PrzydzielWytrzymaloscKlasy(Handle:plugin, numParams)
1725{
1726 new client = GetNativeCell(1);
1727 if(IsValidClient(client))
1728 {
1729 new limit_wytrzymalosci = (GetConVarInt(cvar_limit_wytrzymalosci) < 1)? wytrzymalosc_gracza[client]+9999: GetConVarInt(cvar_limit_wytrzymalosci);
1730 if(wytrzymalosc_gracza[client] < limit_wytrzymalosci)
1731 {
1732 new punkty = GetNativeCell(2);
1733 new ilosc = (punkty_gracza[client] < punkty)? punkty_gracza[client]: punkty;
1734 if(wytrzymalosc_gracza[client] + ilosc <= limit_wytrzymalosci)
1735 {
1736 wytrzymalosc_gracza[client] += ilosc;
1737 punkty_gracza[client] -= ilosc;
1738 }
1739 else
1740 {
1741 new punktydododania;
1742 punktydododania = limit_wytrzymalosci - wytrzymalosc_gracza[client];
1743 wytrzymalosc_gracza[client] += punktydododania;
1744 punkty_gracza[client] -= punktydododania;
1745 }
1746 }
1747 }
1748}
1749public PrzydzielKondycjeKlasy(Handle:plugin, numParams)
1750{
1751 new client = GetNativeCell(1);
1752 if(IsValidClient(client))
1753 {
1754 new limit_kondycji = (GetConVarInt(cvar_limit_kondycji) < 1)? kondycja_gracza[client]+9999: GetConVarInt(cvar_limit_kondycji);
1755 if(kondycja_gracza[client] < limit_kondycji)
1756 {
1757 new punkty = GetNativeCell(2);
1758 new ilosc = (punkty_gracza[client] < punkty)? punkty_gracza[client]: punkty;
1759 if(kondycja_gracza[client] + ilosc <= limit_kondycji)
1760 {
1761 kondycja_gracza[client] += ilosc;
1762 punkty_gracza[client] -= ilosc;
1763 }
1764 else
1765 {
1766 new punktydododania;
1767 punktydododania = limit_kondycji - kondycja_gracza[client];
1768 kondycja_gracza[client] += punktydododania;
1769 punkty_gracza[client] -= punktydododania;
1770 }
1771 }
1772 }
1773}
1774public PobierzIloscKlas(Handle:plugin, numParams)
1775{
1776 if(ilosc_klas)
1777 return ilosc_klas;
1778
1779 return -1;
1780}
1781public PobierzKlasePrzezNazwe(Handle:plugin, numParams)
1782{
1783 new String:nazwa[64];
1784 GetNativeString(1, nazwa, sizeof(nazwa));
1785 for(new i = 1; i <= ilosc_klas; i ++)
1786 {
1787 if(StrEqual(nazwa, nazwy_klas[i]))
1788 return i;
1789 }
1790
1791 return -1;
1792}
1793public PobierzNazweKlasy(Handle:plugin, numParams)
1794{
1795 new klasa = GetNativeCell(1);
1796 if(klasa <= ilosc_klas)
1797 {
1798 SetNativeString(2, nazwy_klas[klasa], GetNativeCell(3));
1799 return 1;
1800 }
1801
1802 return 0;
1803}
1804public PobierzOpisKlasy(Handle:plugin, numParams)
1805{
1806 new klasa = GetNativeCell(1);
1807 if(klasa <= ilosc_klas)
1808 {
1809 SetNativeString(2, opisy_klas[klasa], GetNativeCell(3));
1810 return 1;
1811 }
1812
1813 return 0;
1814}
1815public PobierzBronieKlasy(Handle:plugin, numParams)
1816{
1817 new klasa = GetNativeCell(1);
1818 if(klasa <= ilosc_klas)
1819 {
1820 SetNativeString(2, bronie_klas[klasa], GetNativeCell(3));
1821 return 1;
1822 }
1823
1824 return 0;
1825}
1826public PobierzInteligencjeKlasy(Handle:plugin, numParams)
1827{
1828 new klasa = GetNativeCell(1);
1829 if(klasa <= ilosc_klas)
1830 return inteligencja_klas[klasa];
1831
1832 return -1;
1833}
1834public PobierzZdrowieKlasy(Handle:plugin, numParams)
1835{
1836 new klasa = GetNativeCell(1);
1837 if(klasa <= ilosc_klas)
1838 return zdrowie_klas[klasa];
1839
1840 return -1;
1841}
1842public PobierzObrazeniaKlasy(Handle:plugin, numParams)
1843{
1844 new klasa = GetNativeCell(1);
1845 if(klasa <= ilosc_klas)
1846 return obrazenia_klas[klasa];
1847
1848 return -1;
1849}
1850public PobierzWytrzymaloscKlasy(Handle:plugin, numParams)
1851{
1852 new klasa = GetNativeCell(1);
1853 if(klasa <= ilosc_klas)
1854 return wytrzymalosc_klas[klasa];
1855
1856 return -1;
1857}
1858public PobierzKondycjeKlasy(Handle:plugin, numParams)
1859{
1860 new klasa = GetNativeCell(1);
1861 if(klasa <= ilosc_klas)
1862 return kondycja_klas[klasa];
1863
1864 return -1;
1865}
1866public PobierzIloscItemow(Handle:plugin, numParams)
1867{
1868 if(ilosc_itemow)
1869 return ilosc_itemow;
1870
1871 return -1;
1872}
1873public PobierzItemPrzezNazwe(Handle:plugin, numParams)
1874{
1875 new String:nazwa[64];
1876 GetNativeString(1, nazwa, sizeof(nazwa));
1877 for(new i = 1; i <= ilosc_itemow; i ++)
1878 {
1879 if(StrEqual(nazwa, nazwy_itemow[i]))
1880 return i;
1881 }
1882
1883 return -1;
1884}
1885public PobierzNazweItemu(Handle:plugin, numParams)
1886{
1887 new item = GetNativeCell(1);
1888 if(item <= ilosc_itemow)
1889 {
1890 SetNativeString(2, nazwy_itemow[item], GetNativeCell(3));
1891 return 1;
1892 }
1893
1894 return 0;
1895}
1896public PobierzOpisItemu(Handle:plugin, numParams)
1897{
1898 new item = GetNativeCell(1);
1899 if(item <= ilosc_itemow)
1900 {
1901 SetNativeString(2, opisy_itemow[item], GetNativeCell(3));
1902 return 1;
1903 }
1904
1905 return 0;
1906}
1907public PobierzFreezetime(Handle:plugin, numParams)
1908{
1909 return freezetime;
1910}
1911public ZadajObrazenia(Handle:plugin, numParams)
1912{
1913 new ofiara = GetNativeCell(1);
1914 new atakujacy = GetNativeCell(2);
1915 if(IsValidClient(ofiara) && IsPlayerAlive(ofiara) && IsValidClient(atakujacy))
1916 {
1917 new Float:damage = 0.0;
1918 if(!GetNativeCell(3))
1919 {
1920 if(GetEntProp(ofiara, Prop_Send, "m_ArmorValue"))
1921 SetEntProp(ofiara, Prop_Send, "m_ArmorValue", 0);
1922
1923 damage += maksymalna_wytrzymalosc_gracza[ofiara];
1924 }
1925
1926 SDKHooks_TakeDamage(ofiara, atakujacy, atakujacy, damage+float(GetNativeCell(4)), DMG_GENERIC);
1927 }
1928
1929 return -1;
1930}
1931public ZarejestrujKlase(Handle:plugin, numParams)
1932{
1933 if(numParams != 9)
1934 return -1;
1935
1936 if(++ilosc_klas > MAX_ILOSC_KLAS)
1937 return -2;
1938
1939 pluginy_klas[ilosc_klas] = plugin;
1940 GetNativeString(1, nazwy_klas[ilosc_klas], sizeof(nazwy_klas[]));
1941 GetNativeString(2, opisy_klas[ilosc_klas], sizeof(opisy_klas[]));
1942 GetNativeString(3, bronie_klas[ilosc_klas], sizeof(bronie_klas[]));
1943 inteligencja_klas[ilosc_klas] = GetNativeCell(4);
1944 zdrowie_klas[ilosc_klas] = GetNativeCell(5);
1945 obrazenia_klas[ilosc_klas] = GetNativeCell(6);
1946 wytrzymalosc_klas[ilosc_klas] = GetNativeCell(7);
1947 kondycja_klas[ilosc_klas] = GetNativeCell(8);
1948 GetNativeString(9, frakcje_klas[ilosc_klas], sizeof(frakcje_klas[]));
1949
1950 return ilosc_klas;
1951}
1952public ZarejestrujItem(Handle:plugin, numParams)
1953{
1954 if(numParams != 4)
1955 return -1;
1956
1957 if(++ilosc_itemow > MAX_ILOSC_ITEMOW)
1958 return -2;
1959
1960 pluginy_itemow[ilosc_itemow] = plugin;
1961 GetNativeString(1, nazwy_itemow[ilosc_itemow], sizeof(nazwy_itemow[]));
1962 GetNativeString(2, opisy_itemow[ilosc_itemow], sizeof(opisy_itemow[]));
1963 min_wartosci_itemow[ilosc_itemow] = GetNativeCell(3);
1964 max_wartosci_itemow[ilosc_itemow] = GetNativeCell(4);
1965
1966 return ilosc_itemow;
1967}