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