Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
CoD Nowy

Errory w silniku COD'a m.in. Run time error 4: index out of bounds

cod nowy

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
6 odpowiedzi w tym temacie

#1 Chrupek2352

    Początkujący

  • Użytkownik

Reputacja: 2
Nowy

  • Postów:12
  • Imię:Dawid
Offline

Napisano 14.05.2016 10:51

Witam,
 
Mam problem z silnikiem swojego coda, od wczoraj sypie mi dziwnymi errorami, z którymi nie mogę sobie poradzić, więc postanowiłem zaczerpnąć pomocy z tej strony.
 
Oto logi

 

L 05/13/2016 - 20:02:14: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 05/13/2016 - 20:02:14: [AMXX] Run time error 3: stack error
L 05/13/2016 - 20:02:14: [AMXX]    [0] QTM_CodMod.sma::CurWeapon (line 797)
L 05/13/2016 - 20:02:20: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 05/13/2016 - 20:02:20: [AMXX] Run time error 3: stack error
L 05/13/2016 - 20:02:20: [AMXX]    [0] QTM_CodMod.sma::CurWeapon (line 797)
L 05/13/2016 - 20:51:18: Start of error session.
L 05/13/2016 - 20:51:18: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20160513.log")
L 05/13/2016 - 20:51:18: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 05/13/2016 - 20:51:18: [AMXX] Run time error 4: index out of bounds
L 05/13/2016 - 20:51:18: [AMXX]    [0] QTM_CodMod.sma::WezBron (line 1166)
L 05/13/2016 - 20:51:18: Unhandled dynamic native error
L 05/13/2016 - 20:51:18: [AMXX] Run time error 10 (plugin "codperk_awpsnajper.amxx") (native "cod_take_weapon") - debug not enabled!
L 05/13/2016 - 20:51:18: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).

  • +
  • -
  • 0

#2 Robiin

    Godlike

  • Support Team

Reputacja: 1 120
Super Hero

  • Postów:2 070
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 14.05.2016 12:24

L 05/13/2016 - 20:02:14: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 05/13/2016 - 20:02:14: [AMXX] Run time error 3: stack error
L 05/13/2016 - 20:02:14: [AMXX]    [0] QTM_CodMod.sma::CurWeapon (line 797)

Błąd CurWeapon na lini 797 w QTM_CodMod.sma

L 05/13/2016 - 20:02:20: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 05/13/2016 - 20:02:20: [AMXX] Run time error 3: stack error
L 05/13/2016 - 20:02:20: [AMXX]    [0] QTM_CodMod.sma::CurWeapon (line 797)

To samo co wyżej

L 05/13/2016 - 20:51:18: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 05/13/2016 - 20:51:18: [AMXX] Run time error 4: index out of bounds
L 05/13/2016 - 20:51:18: [AMXX]    [0] QTM_CodMod.sma::WezBron (line 1166)

Linia 1166 QTM_CodMod.sma, 

index poza granicą, czyli (z tego co pamiętam) źle postawione klamry

L 05/13/2016 - 20:51:18: [AMXX] Run time error 10 (plugin "codperk_awpsnajper.amxx") (native "cod_take_weapon") - debug not enabled!
L 05/13/2016 - 20:51:18: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).

plugin codperk_awpsnajper.amxx, natyw cod_take_weapon

Zdebuguj plugin w plugins.ini/plugins-cod.ini


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#3 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 137
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 14.05.2016 13:06

L 05/13/2016 - 20:51:18: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 05/13/2016 - 20:51:18: [AMXX] Run time error 4: index out of bounds
L 05/13/2016 - 20:51:18: [AMXX]    [0] QTM_CodMod.sma::WezBron (line 1166)
Linia 1166 QTM_CodMod.sma, 
index poza granicą, czyli (z tego co pamiętam) źle postawione klamry

 


Źle pamiętasz. Mogę się z tobą zgodzić co do początku czyli jak to ująłeś " " index poza granicą " ", ale nie do źle postawionych klamer. 

Po pierwsze to błędne użycie klamer przerwało by operację kompilacji, nawet wtedy gdy próbowano by tablicy n-elementowej przypisać n+1 elementów.

 

Po drugie błąd ten jest spowodowany odwołaniem się do nieistniejącego elementu tablicy bądź komórki. Przykład - jeżeli mamy 20-elementową tablicę i próbujemy odwołać się do np. 25 elementu tej tablicy otrzymamy w/w błąd.

 

Dla zobrazowania: 

new Moja_Tablica[20] // 20 elementowa tablica typu INT

[...]

public moja_funkcja()
{

 new wartosc19 = Moja_Tablica[18] <-- poprawne odwołanie się do 19 elementu tablicy

 new wartosc25 = Moja_Tablica[24] <-- błąd. Tablica ma przecież tylko 20 elementów. Próbujesz pobrać wartość nieistniejącego elementu. W tym miejscu otrzymamy w/w error.

}

  • +
  • -
  • 1

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#4 Robiin

    Godlike

  • Support Team

Reputacja: 1 120
Super Hero

  • Postów:2 070
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 14.05.2016 13:10

 

L 05/13/2016 - 20:51:18: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 05/13/2016 - 20:51:18: [AMXX] Run time error 4: index out of bounds
L 05/13/2016 - 20:51:18: [AMXX]    [0] QTM_CodMod.sma::WezBron (line 1166)
Linia 1166 QTM_CodMod.sma, 
index poza granicą, czyli (z tego co pamiętam) źle postawione klamry

 


Źle pamiętasz. Mogę się z tobą zgodzić co do początku czyli jak to ująłeś " " index poza granicą " ", ale nie do źle postawionych klamer. 

Po pierwsze to błędne użycie klamer przerwało by operację kompilacji, nawet wtedy gdy próbowano by tablicy n-elementowej przypisać n+1 elementów.

 

Po drugie błąd ten jest spowodowany odwołaniem się do nieistniejącego elementu tablicy bądź komórki. Przykład - jeżeli mamy 20-elementową tablicę i próbujemy odwołać się do np. 25 elementu tej tablicy otrzymamy w/w błąd.

 

Dla zobrazowania: 

new Moja_Tablica[20] // 20 elementowa tablica typu INT

[...]

public moja_funkcja()
{

 new wartosc19 = Moja_Tablica[18] <-- poprawne odwołanie się do 19 elementu tablicy

 new wartosc25 = Moja_Tablica[24] <-- błąd. Tablica ma przecież tylko 20 elementów. Próbujesz pobrać wartość nieistniejącego elementu. W tym miejscu otrzymamy w/w error.

}

Przy okazji zrozumiałem swój błąd :V

Czyli w *.sma będzie;

 

new tablica[33]

 

a w kodzie

new cos = tablica[32]

 

tak?


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#5 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 137
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 14.05.2016 13:22

Przy okazji zrozumiałem swój błąd :V
Czyli w *.sma będzie;
 
new tablica[33]
 
a w kodzie
new cos = tablica[32]
 
tak?


Indexowanie elementów odbywa się nie od 1, a od 0 do wielkość tablicy - 1.

Czyli jeśli masz 5 elementową tablice to:

new Asik[5]

pierwszy element ma index 0 czyli new cos = Asik[0];
drugi element ma index 1 czyli new cos = Asik[1];
trzeci element ma index 2 czyli new cos = Asik[2];
czwarty element ma index 3 czyli new cos = Asik[3];
A ostatni ( piąty ) element ma index 4 czyli new cos = Asik[4];

I to jest poprawne użycie tablicy. 

 

Błędna zaś będzie gdy: 

Spróbujesz dostać się do new cos = Asik[5]; 

Bo index 5 będzie miał 6 element, a nasza tablica miała przecież tylko 5 elementów ( patrz przykład wyżej )

  • +
  • -
  • 1

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#6 Chrupek2352

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:12
  • Imię:Dawid
Offline

Napisano 14.05.2016 14:39

Czy dla zażegnania błędu CurWeapon wystarczy wgrać łatkę od DarkGL?

 

https://amxx.pl/topi...rawa-curweapon/

 

co do tego erroru z perkiem to jak sobie poradzić? :)


  • +
  • -
  • 0

#7 Chrupek2352

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:12
  • Imię:Dawid
Offline

Napisano 14.05.2016 16:33

Mógłby ktoś umieścić tą łatkę CurWeapon od DarkGL w tym silniku? Bo ja próbowałem to robić i po wgraniu edytowanego silnika cały cod mod sie posypał.

 

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>
#include <engine>

#define PLUGIN "Call of Duty: MW Mod"
#define VERSION "1.0-3"
#define AUTHOR "QTM_Peyote"

#define MAX_WIELKOSC_NAZWY 32
#define MAX_WIELKOSC_OPISU 1024
#define MAX_ILOSC_PERKOW 120
#define MAX_ILOSC_KLAS 100

#define STANDARDOWA_SZYBKOSC 250.0

#define ZADANIE_POKAZ_INFORMACJE 672
#define ZADANIE_USTAW_SZYBKOSC 832

new const maxAmmo[31] = {0, 52, 0, 90, 1, 31, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 31, 90, 120,
 90, 2, 35, 90, 90,0, 100};

new const co_ile[] = { 1, 5, 15, 25} // Wlasnie tutaj zmieniamy co ile maja rosnac punkty.
new szybkosc_rozdania[33];
 
new MsgScreenfade;

new vault;

new SyncHudObj, SyncHudObj2;
 
new cvar_doswiadczenie_za_zabojstwo,
     cvar_doswiadczenie_za_obrazenia,
     cvar_doswiadczenie_za_wygrana,
     cvar_typ_zapisu,
     cvar_blokada_broni;
     
new perk_zmieniony,
     klasa_zmieniona;

     
new nazwy_perkow[MAX_ILOSC_PERKOW+1][MAX_WIELKOSC_NAZWY+1],
     opisy_perkow[MAX_ILOSC_PERKOW+1][MAX_WIELKOSC_OPISU+1],
     max_wartosci_perkow[MAX_ILOSC_PERKOW+1],
     min_wartosci_perkow[MAX_ILOSC_PERKOW+1],
     pluginy_perkow[MAX_ILOSC_PERKOW+1],
     ilosc_perkow;

     
new nazwa_gracza[33][64],
     klasa_gracza[33],
     nowa_klasa_gracza[33],
     poziom_gracza[33],
     doswiadczenie_gracza[33],
     perk_gracza[33],
     wartosc_perku_gracza[33];

new Float:maksymalne_zdrowie_gracza[33],
     Float:szybkosc_gracza[33],
     Float:redukcja_obrazen_gracza[33];
     
new punkty_gracza[33],
     zdrowie_gracza[33],
     inteligencja_gracza[33],
     wytrzymalosc_gracza[33],
     kondycja_gracza[33];

new bool:gracz_ma_tarcze[33],
     bool:gracz_ma_noktowizor[33];     

new bonusowe_bronie_gracza[33],
     bonusowe_zdrowie_gracza[33],
     bonusowa_inteligencja_gracza[33],
     bonusowa_wytrzymalosc_gracza[33],
     bonusowa_kondycja_gracza[33];

new bronie_klasy[MAX_ILOSC_KLAS+1],
     zdrowie_klas[MAX_ILOSC_KLAS+1],
     kondycja_klas[MAX_ILOSC_KLAS+1],
     inteligencja_klas[MAX_ILOSC_KLAS+1],
     wytrzymalosc_klas[MAX_ILOSC_KLAS+1],
     nazwy_klas[MAX_ILOSC_KLAS+1][MAX_WIELKOSC_NAZWY+1],
     pluginy_klas[MAX_ILOSC_KLAS+1],
     ilosc_klas;
     
new awanse[MAX_ILOSC_KLAS+1][3], awansuje_do[MAX_ILOSC_KLAS+1], awansuje_z[MAX_ILOSC_KLAS+1];
new ilosc_awansow;

new bronie_druzyny[] = {0, 0, 0},
     bronie_dozwolone = 1<<CSW_KNIFE | 1<<CSW_C4;

new bool:freezetime = true;

new const doswiadczenie_poziomu[] = {
    0,
    79, 180, 347, 635, 986, 1374, 1885, 2550, 3324, 4302,
    5282, 6389, 7558, 8923, 10293, 11683, 13363, 15130, 16929, 18799,
    20809, 22859, 24936, 27129, 29621, 32168, 34718, 37369, 40167, 43149,
    46228, 49378, 52631, 55930, 59345, 62836, 66475, 70154, 73970, 77969,
    82028, 86184, 90386, 94627, 98979, 103564, 108245, 112941, 117737, 122694,
    127691, 132811, 137951, 143151, 148519, 153936, 159366, 164885, 170483, 176214,
    182189, 188235, 194533, 200886, 207332, 213879, 220536, 227292, 234122, 240973,
    247927, 254926, 262207, 269503, 276931, 284493, 292098, 299733, 307600, 315591,
    323643, 331821, 340054, 348310, 356592, 364897, 373211, 381870, 390706, 399643,
    408629, 417663, 426808, 436203, 445681, 455168, 464697, 474295, 484051, 493951,
    503994, 514132, 524343, 534698, 545075, 555488, 566075, 576767, 587584, 598457,
    609479, 620626, 631856, 643214, 654665, 666172, 677870, 689624, 701519, 713433,
    725532, 737679, 749906, 762185, 774677, 787210, 799749, 812462, 825198, 838073,
    851155, 864342, 877572, 890926, 904400, 917960, 931564, 945318, 959073, 972935,
    986892, 1000886, 1015082, 1029415, 1043772, 1058184, 1072799, 1087420, 1102295, 1117212,
    1132159, 1147286, 1162532, 1177796, 1193168, 1208614, 1224233, 1239936, 1255665, 1271439,
    1287309, 1303267, 1319294, 1335503, 1351821, 1368365, 1385038, 1401818, 1418655, 1435576,
    1452645, 1469783, 1486972, 1504217, 1521509, 1538881, 1556311, 1573951, 1591673, 1609478,
    1627526, 1645667, 1663858, 1682106, 1700361, 1718631, 1737204, 1755906, 1774643, 1793604,
    1812597, 1831665, 1850765, 1869966, 1889398, 1908996, 1928631, 1948304, 1967981, 1987957,
    2007960, 2028035, 2048253, 2068594, 2089060, 2109647, 2130280, 2151076, 2171944, 2192888,
    2213859, 2234841, 2255917, 2277269, 2298693, 2320158, 2341712, 2363364, 2385017, 2406833,
    2428834, 2450915, 2473088, 2495353, 2517819, 2540366, 2563065, 2585794, 2608673, 2631672,
    2654729, 2677808, 2701029, 2724412, 2747821, 2771370, 2795047, 2818739, 2842580, 2866468,
    2890405, 2914541, 2938749, 2962995, 2987384, 3011783, 3036437, 3061190, 3085973, 3110821,
    3135696, 3160599, 3185610, 3210780, 3236278, 3261834, 3287498, 3313217, 3339091, 3365030,
    3391020, 3417148, 3443292, 3469626, 3496059, 3522559, 3549187, 3575970, 3602848, 3629726,
    3656789, 3683863, 3711056, 3738323, 3765805, 3793296, 3820957, 3848670, 3876394, 3904223,
    3932280, 3960365, 3988508, 4016766, 4045245, 4073741, 4102256, 4130779, 4159429, 4188399,
    4217398, 4246583, 4275808, 4305098, 4334539, 4364049, 4393682, 4423321, 4453096, 4483025,
    4513114, 4543303, 4573553, 4603935, 4634433, 4664936, 4695507, 4726235, 4757134, 4788087,
    4819142, 4850309, 4881491, 4912743, 4944086, 4975462, 5006978, 5038728, 5070497, 5102293,
    5134348, 5166456, 5198699, 5231006, 5263349, 5295789, 5328455, 5361226, 5394030, 5426869,
    5459778, 5492899, 5526170, 5559538, 5593033, 5626611, 5660296, 5694091, 5727929, 5761846,
    5795869, 5830066, 5864304, 5898684, 5933082, 5967681, 6002356, 6037098, 6071942, 6106932,
    6141968, 6177084, 6212322, 6247598, 6282902, 6318428, 6353987, 6389600, 6425336, 6461113,
    6496996, 6533146, 6569367, 6605637, 6642063, 6678489, 6715099, 6751852, 6788681, 6825586,
    6862521, 6899613, 6936799, 6974060, 7011507, 7049104, 7086799, 7124573, 7162396, 7200310,
    7238260, 7276375, 7314645, 7352961, 7391375, 7429838, 7468500, 7507293, 7546147, 7585018,
    7624029, 7663109, 7702225, 7741478, 7780746, 7820133, 7859589, 7899125, 7938899, 7978766,
    8018843
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    cvar_doswiadczenie_za_zabojstwo = register_cvar("cod_killxp", "200");
    cvar_doswiadczenie_za_obrazenia = register_cvar("cod_damagexp", "0"); // ilosc doswiadczenia za 20 obrazen
    cvar_doswiadczenie_za_wygrana = register_cvar("cod_winxp", "100");
    cvar_typ_zapisu = register_cvar("cod_savetype", "1");  // 1-Nick; 2-SID dla Steam; 3-IP
    cvar_blokada_broni = register_cvar("cod_weaponsblocking", "1");
    
    register_clcmd("say /klasa", "WybierzKlase");
    register_clcmd("say /class", "WybierzKlase");
    register_clcmd("say /perk", "KomendaOpisPerku");
    register_clcmd("say /perki", "OpisPerkow");
    register_clcmd("say /perks", "OpisPerkow");
    register_clcmd("say /item", "Pomoc");
    register_clcmd("say /przedmiot", "OpisPerku");
    register_clcmd("say /drop", "WyrzucPerk");
    register_clcmd("say /wyrzuc", "WyrzucPerk");
    register_clcmd("say /reset", "KomendaResetujPunkty");
    register_clcmd("say /statystyki", "PrzydzielPunkty");
    register_clcmd("say /staty", "PrzydzielPunkty");
    register_clcmd("say /pomoc", "Pomoc");
    register_clcmd("useperk", "UzyjPerku");
    register_clcmd("radio3", "UzyjPerku");
    register_clcmd("fullupdate", "BlokujKomende");
    
    RegisterHam(Ham_TakeDamage, "player", "Obrazenia");
    RegisterHam(Ham_TakeDamage, "player", "ObrazeniaPost", 1);
    RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
    RegisterHam(Ham_Killed, "player", "SmiercGraczaPost", 1);
    
    RegisterHam(Ham_Touch, "armoury_entity", "DotykBroni");
    RegisterHam(Ham_Touch, "weapon_shield", "DotykTarczy");
    RegisterHam(Ham_Touch, "weaponbox", "DotykBroni");
    
    register_forward(FM_CmdStart, "CmdStart");
    register_forward(FM_EmitSound, "EmitSound");
    
    register_logevent("PoczatekRundy", 2, "1=Round_Start");
    
    register_event("SendAudio", "WygranaTerro" , "a", "2&%!MRAD_terwin");
    register_event("SendAudio", "WygranaCT", "a", "2&%!MRAD_ctwin");
    register_event("CurWeapon","CurWeapon","be", "1=1");
    register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");
    
    vault = nvault_open("CodMod");
    
    MsgScreenfade = get_user_msgid("ScreenFade");
    
    SyncHudObj = CreateHudSyncObj();
    SyncHudObj2 = CreateHudSyncObj();
    
    perk_zmieniony = CreateMultiForward("cod_perk_changed", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL);
    klasa_zmieniona = CreateMultiForward("cod_class_changed", ET_CONTINUE, FP_CELL, FP_CELL);

    copy(nazwy_perkow[0], MAX_WIELKOSC_NAZWY, "Brak");
    copy(opisy_perkow[0], MAX_WIELKOSC_OPISU, "Zabij kogos, aby otrzymac przedmiot");
    copy(nazwy_klas[0], MAX_WIELKOSC_NAZWY, "Brak");
    
    set_task(1.0, "plugin_cfg");
}        

public plugin_cfg()
{
    new lokalizacja_cfg[33];
    get_configsdir(lokalizacja_cfg, charsmax(lokalizacja_cfg));
    server_cmd("exec %s/codmod.cfg", lokalizacja_cfg);
    server_exec();
}
    

public plugin_precache()
{    
    precache_sound("QTM_CodMod/select.wav");
    precache_sound("QTM_CodMod/start.wav");
    precache_sound("QTM_CodMod/start2.wav");
    precache_sound("QTM_CodMod/levelup.wav");
}

public plugin_natives()
{
    register_native("cod_set_user_xp", "UstawDoswiadczenie", 1);
    register_native("cod_set_user_class", "UstawKlase", 1);
    register_native("cod_set_user_perk", "UstawPerk", 1);
    register_native("cod_set_user_bonus_health", "UstawBonusoweZdrowie", 1);
    register_native("cod_set_user_bonus_intelligence", "UstawBonusowaInteligencje", 1);
    register_native("cod_set_user_bonus_trim", "UstawBonusowaKondycje", 1);
    register_native("cod_set_user_bonus_stamina", "UstawBonusowaWytrzymalosc", 1);
    
    register_native("cod_points_to_health", "PrzydzielZdrowie", 1);    
    register_native("cod_points_to_intelligence", "PrzydzielInteligencje", 1);    
    register_native("cod_points_to_trim", "PrzydzielKondycje", 1);    
    register_native("cod_points_to_stamina", "PrzydzielWytrzymalosc", 1);    
    
    register_native("cod_get_user_xp", "PobierzDoswiadczenie", 1);
    register_native("cod_get_user_level", "PobierzPoziom", 1);
    register_native("cod_get_user_points", "PobierzPunkty", 1);
    register_native("cod_get_user_class", "PobierzKlase", 1);
    register_native("cod_get_user_perk", "PobierzPerk", 1);
    register_native("cod_get_user_health", "PobierzZdrowie", 1);
    register_native("cod_get_user_intelligence", "PobierzInteligencje", 1);
    register_native("cod_get_user_trim", "PobierzKondycje", 1);
    register_native("cod_get_user_stamina", "PobierzWytrzymalosc", 1);
    
    register_native("cod_get_level_xp", "PobierzDoswiadczeniePoziomu", 1);
    
    register_native("cod_get_perkid", "PobierzPerkPrzezNazwe", 1);
    register_native("cod_get_perks_num", "PobierzIloscPerkow", 1);
    register_native("cod_get_perk_name", "PobierzNazwePerku", 1);
    register_native("cod_get_perk_desc", "PobierzOpisPerku", 1);
    
    register_native("cod_get_classid", "PobierzKlasePrzezNazwe", 1);
    register_native("cod_get_classes_num", "PobierzIloscKlas", 1);
    register_native("cod_get_class_name", "PobierzNazweKlasy", 1);
    
    register_native("cod_get_class_health", "PobierzZdrowieKlasy", 1);
    register_native("cod_get_class_intelligence", "PobierzInteligencjeKlasy", 1);
    register_native("cod_get_class_trim", "PobierzKondycjeKlasy", 1);
    register_native("cod_get_class_stamina", "PobierzWytrzymaloscKlasy", 1);
    
    register_native("cod_give_weapon", "DajBron", 1);
    register_native("cod_take_weapon", "WezBron", 1);
    register_native("cod_set_user_shield", "UstawTarcze", 1);
    register_native("cod_set_user_nightvision", "UstawNoktowizor", 1);
    
    register_native("cod_inflict_damage", "ZadajObrazenia", 1);
    
    register_native("cod_register_perk", "ZarejestrujPerk");
    register_native("cod_register_class", "ZarejestrujKlase");
    register_native("cod_register_advance", "ZarejestrujAwans");
}

public CmdStart(id, uc_handle)
{        
    if(!is_user_alive(id))
        return FMRES_IGNORED;

    new Float: velocity[3];
    pev(id, pev_velocity, velocity);
    new Float: speed = vector_length(velocity);
    if(szybkosc_gracza[id] > speed*1.8)
        set_pev(id, pev_flTimeStepSound, 300);
    
    return FMRES_IGNORED;
}

public Odrodzenie(id)
{    
    if(!task_exists(id+ZADANIE_POKAZ_INFORMACJE))
        set_task(0.1, "PokazInformacje", id+ZADANIE_POKAZ_INFORMACJE, _, _, "b");
    
    if(nowa_klasa_gracza[id])
        UstawNowaKlase(id);
    
    if(!klasa_gracza[id])
    {
        WybierzKlase(id);
        return PLUGIN_CONTINUE;
    }
    
    DajBronie(id);
    ZastosujAtrybuty(id);
    
    if(punkty_gracza[id] > 0)
        PrzydzielPunkty(id);

    return PLUGIN_CONTINUE;
}

public UstawNowaKlase(id)
{
    new ret;
        
    ExecuteForward(klasa_zmieniona, ret, id, klasa_gracza[id]);
    
    if(ret == 4)    
    {
        klasa_gracza[id] = 0;
        return PLUGIN_CONTINUE;
    }

    new forward_handle = CreateOneForward(pluginy_klas[klasa_gracza[id]], "cod_class_disabled", FP_CELL, FP_CELL);
    ExecuteForward(forward_handle, ret, id, klasa_gracza[id]);
    DestroyForward(forward_handle);
        
    forward_handle = CreateOneForward(pluginy_klas[nowa_klasa_gracza[id]], "cod_class_enabled", FP_CELL, FP_CELL);
    ExecuteForward(forward_handle, ret, id, nowa_klasa_gracza[id]);
    DestroyForward(forward_handle);
    
    
    if(ret == 4)    
    {
        klasa_gracza[id] = 0;
        return PLUGIN_CONTINUE;
    }
    
    klasa_gracza[id] = nowa_klasa_gracza[id];
    nowa_klasa_gracza[id] = 0;
    UstawPerk(id, perk_gracza[id], wartosc_perku_gracza[id], 0);
    
    WczytajDane(id, klasa_gracza[id]);
    return PLUGIN_CONTINUE;
}

public DajBronie(id)
{
    for(new i=1; i < 32; i++)
    {
        if((1<<i) & (bronie_klasy[klasa_gracza[id]] | bonusowe_bronie_gracza[id]))
        {
            new weaponname[22];
            get_weaponname(i, weaponname, 21);
            fm_give_item(id, weaponname);
        }
    }
    
    if(gracz_ma_tarcze[id])
        fm_give_item(id, "weapon_shield");
        
    if(gracz_ma_noktowizor[id])
        cs_set_user_nvg(id, 1);
    
    new weapons[32];
    new weaponsnum;
    get_user_weapons(id, weapons, weaponsnum);
    for(new i=0; i<weaponsnum; i++)
        if(is_user_alive(id))
            if(maxAmmo[weapons[i]] > 0)
                cs_set_user_bpammo(id, weapons[i], maxAmmo[weapons[i]]);
}

public ZastosujAtrybuty(id)
{
    redukcja_obrazen_gracza[id] = 0.7*(1.0-floatpower(1.1, -0.112311341*PobierzWytrzymalosc(id, 1, 1, 1)));
    
    maksymalne_zdrowie_gracza[id] = 100.0+PobierzZdrowie(id, 1, 1, 1);
    
    szybkosc_gracza[id] = STANDARDOWA_SZYBKOSC+PobierzKondycje(id, 1, 1, 1)*1.3;
    
    set_pev(id, pev_health, maksymalne_zdrowie_gracza[id]);
}

public PoczatekRundy()    
{
    freezetime = false;
    for(new id=0;id<=32;id++)
    {
        if(!is_user_alive(id))
            continue;

        Display_Fade(id, 1<<9, 1<<9, 1<<12, 0, 255, 70, 100);
        
        set_task(0.1, "UstawSzybkosc", id+ZADANIE_USTAW_SZYBKOSC);
        
        switch(get_user_team(id))
        {
            case 1: client_cmd(id, "spk QTM_CodMod/start2");
            case 2: client_cmd(id, "spk QTM_CodMod/start");
        }
    }
}

public NowaRunda()
    freezetime = true;

public Obrazenia(this, idinflictor, idattacker, Float:damage, damagebits)
{
    if(!is_user_alive(idattacker))
        return HAM_IGNORED;

    if(get_user_team(this) == get_user_team(idattacker))
        return HAM_IGNORED;
        
    if(get_user_health(this) <= 1)
        return HAM_IGNORED;
    
    SetHamParamFloat(4, damage*(1.0-redukcja_obrazen_gracza[this]));
        
    return HAM_IGNORED;
}

public ObrazeniaPost(id, idinflictor, attacker, Float:damage, damagebits)
{
    if(!is_user_connected(attacker) || !klasa_gracza[attacker])
        return HAM_IGNORED;
    
    if(get_user_team(id) != get_user_team(attacker))
    {
        new doswiadczenie_za_obrazenia = get_pcvar_num(cvar_doswiadczenie_za_obrazenia);
        while(damage>20)
        {
            damage -= 20;
            doswiadczenie_gracza[attacker] += doswiadczenie_za_obrazenia;
        }
    }
    SprawdzPoziom(attacker);
    return HAM_IGNORED;
}

public SmiercGraczaPost(id, attacker, shouldgib)
{       
        if(!is_user_connected(attacker))
                return PLUGIN_CONTINUE;
        if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
        {
                new nowe_doswiadczenie = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
                if(!perk_gracza[attacker])
                        UstawPerk(attacker, -1, -1, 1);
                doswiadczenie_gracza[attacker] += nowe_doswiadczenie;
                set_hudmessage(255, 212, 0, 0.50, 0.33, 1, 6.0, 7.0)
                ShowSyncHudMsg(attacker, SyncHudObj2, "+%i", nowe_doswiadczenie);
        }
        SprawdzPoziom(attacker);
        return PLUGIN_CONTINUE;
}

public client_authorized(id)
{
    UsunUmiejetnosci(id);

    get_user_name(id, nazwa_gracza[id], 63);
    
    UsunZadania(id);
}

public client_disconnect(id)
{
    ZapiszDane(id);
    UsunUmiejetnosci(id);
    UsunZadania(id);
}

public UsunUmiejetnosci(id)
{
    nowa_klasa_gracza[id] = 0;
    UstawNowaKlase(id);
    klasa_gracza[id] = 0;
    poziom_gracza[id] = 0;
    doswiadczenie_gracza[id] = 0;
    punkty_gracza[id] = 0;
    zdrowie_gracza[id] = 0;
    inteligencja_gracza[id] = 0;
    wytrzymalosc_gracza[id] = 0;
    kondycja_gracza[id] = 0;
    bonusowe_zdrowie_gracza[id] = 0;
    bonusowa_wytrzymalosc_gracza[id] = 0;
    bonusowa_inteligencja_gracza[id] = 0;
    bonusowa_kondycja_gracza[id] = 0;
    maksymalne_zdrowie_gracza[id] = 0.0;
    szybkosc_gracza[id] = 0.0;
    UstawPerk(id, 0, 0, 0);
}

public UsunZadania(id)
{
    remove_task(id+ZADANIE_POKAZ_INFORMACJE);    
    remove_task(id+ZADANIE_USTAW_SZYBKOSC);
}
    
public WygranaTerro()
    WygranaRunda("TERRORIST");
    
public WygranaCT()
    WygranaRunda("CT");

public WygranaRunda(const Team[])
{
    new Players[32], playerCount, id;
    get_players(Players, playerCount, "aeh", Team);
    new doswiadczenie_za_wygrana = get_pcvar_num(cvar_doswiadczenie_za_wygrana);
    
    if(get_playersnum() < 3)
        return;
        
    for (new i=0; i<playerCount; i++)
    {
        id = Players[i];
        if(!klasa_gracza[id])
            continue;
        
        doswiadczenie_gracza[id] += doswiadczenie_za_wygrana;
        client_print(id, print_chat, "[COD:MW] Dostales %i doswiadczenia za wygrana runde.", doswiadczenie_za_wygrana);
        SprawdzPoziom(id);
    }
}

public KomendaOpisPerku(id)
    OpisPerku(id, perk_gracza[id], wartosc_perku_gracza[id]);

public OpisPerku(id, perk, wartosc)
{
    new opis_perku[MAX_WIELKOSC_OPISU];
    new losowa_wartosc[15];
    if(wartosc > -1)
        num_to_str(wartosc, losowa_wartosc, 14);
    else
        format(losowa_wartosc, charsmax(losowa_wartosc), "%i-%i", min_wartosci_perkow[perk], max_wartosci_perkow[perk]);
        
    format(opis_perku, charsmax(opis_perku), opisy_perkow[perk]);
    replace_all(opis_perku, charsmax(opis_perku), "LW", losowa_wartosc);
    
    client_print(id, print_chat, "Perk: %s.", nazwy_perkow[perk]);
    client_print(id, print_chat, "Opis: %s.", opis_perku);
}

public OpisPerkow(id)
{
    new menu = menu_create("Wybierz Perk:", "OpisPerkow_Handle");
    for(new i=1; i <= ilosc_perkow; i++)
        menu_additem(menu, nazwy_perkow[i]);
    menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
    menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
    menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");
    menu_display(id, menu);
    client_cmd(id, "spk QTM_CodMod/select");
}

public OpisPerkow_Handle(id, menu, item)
{
    if(item++ == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_CONTINUE;
    }
    OpisPerku(id, item, -1);
    OpisPerkow(id);
    return PLUGIN_CONTINUE;
}

public WybierzKlase(id)
{
    new menu = menu_create("Wybierz klase:", "WybierzKlase_Handle");
 
    new klasa[50], dana_klasa, numer[10];
    for(new i=1; i <= ilosc_klas; i++)
    {
        if(JestAwansem(i))
            continue;
        WczytajDane(id, i);
        dana_klasa = i;
      
        for(;;)
        {
            if(awansuje_do[dana_klasa] && poziom_gracza[id] >= awanse[ZnajdzAwans(dana_klasa, awansuje_do[dana_klasa])][2])
            {
                dana_klasa = awansuje_do[dana_klasa];
                WczytajDane(id, dana_klasa);
            }
            else break;
        }
        formatex(klasa, charsmax(klasa), "%s \yPoziom: %i", nazwy_klas[dana_klasa], poziom_gracza[id]);
        num_to_str(dana_klasa, numer, 9);
        menu_additem(menu, klasa, numer);
    }
 
    WczytajDane(id, klasa_gracza[id]);
 
    menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
    menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
    menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");
    menu_display(id, menu);
 
    client_cmd(id, "spk QTM_CodMod/select");
}
public WybierzKlase_Handle(id, menu, item)
{
    client_cmd(id, "spk QTM_CodMod/select");
 
    if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_CONTINUE;
    }  
 
    new data[65], name[65], acces, callback
    menu_item_getinfo(menu, item, acces, data, 64, name, 64, callback)    
    item = str_to_num(data);
 
    if(item == klasa_gracza[id] && !nowa_klasa_gracza[id])
        return PLUGIN_CONTINUE;
 
    nowa_klasa_gracza[id] = item;
 
    if(klasa_gracza[id])
        client_print(id, print_chat, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie.");
    else
    {
        UstawNowaKlase(id);
        DajBronie(id);
        ZastosujAtrybuty(id);
    }
 
    return PLUGIN_CONTINUE;
}

public PrzydzielPunkty(id)
{
    new inteligencja[65];
    new zdrowie[60];
    new wytrzymalosc[60];
    new kondycja[60];
    new tytul[25];
    new szybkosc[60];
    format(inteligencja, charsmax(inteligencja), "Inteligencja: \r%i \y(Zwieksza sile perkow i umiejetnosci klasy)", PobierzInteligencje(id, 1, 1, 1));
    format(zdrowie, charsmax(zdrowie), "Zdrowie: \r%i \y(Zwieksza zdrowie)", PobierzZdrowie(id, 1, 1, 1));
    format(wytrzymalosc, charsmax(wytrzymalosc), "Wytrzymalosc: \r%i \y(Zmniejsza obrazenia)", PobierzWytrzymalosc(id, 1, 1, 1));
    format(kondycja, charsmax(kondycja), "Kondycja: \r%i \y(Zwieksza tempo chodu)", PobierzKondycje(id, 1, 1, 1));
    format(tytul, charsmax(tytul), "Przydziel Punkty(%i):", punkty_gracza[id]);
    format(szybkosc, charsmax(szybkosc), "Ile dodawac: \r%d \y(Ile pkt dodac do statow)", co_ile[szybkosc_rozdania[id]]);
    new menu = menu_create(tytul, "PrzydzielPunkty_Handler");
    menu_additem(menu, inteligencja);
    menu_additem(menu, zdrowie);
    menu_additem(menu, wytrzymalosc);
    menu_additem(menu, kondycja);
    menu_addblank(menu, 0);
    menu_additem(menu, szybkosc);
    menu_setprop(menu, MPROP_EXIT, 0);
    menu_display(id, menu);
}

public PrzydzielPunkty_Handler(id, menu, item)
{
    client_cmd(id, "spk QTM_CodMod/select");
    
    if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_CONTINUE;
    }
    
    if(punkty_gracza[id] < 1)
        return PLUGIN_CONTINUE;
    
    new limit_poziomu = sizeof doswiadczenie_poziomu-1;
    
    new ilosc = (co_ile[szybkosc_rozdania[id]] > punkty_gracza[id]) ? punkty_gracza[id] : co_ile[szybkosc_rozdania[id]]
    
    switch(item)
    {
        case 0:
        {    
            if(inteligencja_gracza[id] < limit_poziomu/2)
            {
            if(ilosc > limit_poziomu/2 - inteligencja_gracza[id])

                ilosc = limit_poziomu/2 - inteligencja_gracza[id];

            inteligencja_gracza[id]+=ilosc;

            punkty_gracza[id]-=ilosc;

            }
            else
                client_print(id, print_chat, "[COD:MW] Maxymalny poziom inteligencji osiagniety");

            
        }
        case 1:
        {    
            if(zdrowie_gracza[id] < limit_poziomu/2) {

            if(ilosc > limit_poziomu/2 - zdrowie_gracza[id])

                ilosc = limit_poziomu/2 - zdrowie_gracza[id];

            zdrowie_gracza[id]+=ilosc;

            punkty_gracza[id]-=ilosc;
            }
            else
                client_print(id, print_chat, "[COD:MW] Maxymalny poziom sily osiagniety");
        }
        case 2:
        {    
            if(wytrzymalosc_gracza[id] < limit_poziomu/2) {

            if(ilosc > limit_poziomu/2 - wytrzymalosc_gracza[id])

                ilosc = limit_poziomu/2 - wytrzymalosc_gracza[id];

            wytrzymalosc_gracza[id]+=ilosc;

            punkty_gracza[id]-=ilosc;
            }
            else
                client_print(id, print_chat, "[COD:MW] Maxymalny poziom zrecznosci osiagniety");
            
        }
        case 3:
        {    
            if(kondycja_gracza[id] < limit_poziomu/2) {

            if(ilosc > limit_poziomu/2 - kondycja_gracza[id])

                ilosc = limit_poziomu/2 - kondycja_gracza[id];

            kondycja_gracza[id]+=ilosc;

            punkty_gracza[id]-=ilosc;
            }
            else
                client_print(id, print_chat, "[COD:MW] Maxymalny poziom kondycji osiagniety");
        }
        case 4:
        {
            if(szybkosc_rozdania[id] < charsmax(co_ile)) szybkosc_rozdania[id]++;

            else szybkosc_rozdania[id] = 0;

        }
    }
    
    if(punkty_gracza[id] > 0)
        PrzydzielPunkty(id);
        
    return PLUGIN_CONTINUE;
}

public KomendaResetujPunkty(id)
{    
    client_print(id, print_chat, "[COD:MW] Umiejetnosci zostana zresetowane.");
    client_cmd(id, "spk QTM_CodMod/select");
    
    ResetujPunkty(id);
}

public ResetujPunkty(id)
{
    punkty_gracza[id] = (poziom_gracza[id]-1)*2;
    inteligencja_gracza[id] = 0;
    zdrowie_gracza[id] = 0;
    kondycja_gracza[id] = 0;
    wytrzymalosc_gracza[id] = 0;
    
    if(punkty_gracza[id])
        PrzydzielPunkty(id);
}

public CurWeapon(id)
{
    if(!is_user_connected(id))
        return;
        
    new team = get_user_team(id);
    
    if(team > 2)
        return;
        
    new bron = read_data(2);
        
    new bronie = (bronie_klasy[klasa_gracza[id]] | bonusowe_bronie_gracza[id] | bronie_druzyny[team] | bronie_dozwolone);
    
    if(!(1<<bron & bronie))
    {
        new weaponname[22];
        
        get_weaponname(bron, weaponname, 21);
        ham_strip_weapon(id, weaponname);
    }
    
    if(cs_get_user_shield(id) && !gracz_ma_tarcze[id])
        engclient_cmd(id, "drop", "weapon_shield");    
        
    UstawSzybkosc(id);
}

public EmitSound(id, iChannel, szSound[], Float:fVol, Float:fAttn, iFlags, iPitch )
{
    if(!is_user_alive(id))
        return FMRES_IGNORED;
        
    if(equal(szSound, "common/wpn_denyselect.wav"))
    {
        new forward_handle = CreateOneForward(pluginy_klas[klasa_gracza[id]], "cod_class_skill_used", FP_CELL);
        ExecuteForward(forward_handle, id, id);
        DestroyForward(forward_handle);
        return FMRES_SUPERCEDE;
    }

    if(equal(szSound, "items/ammopickup2.wav"))
    {
        cs_set_user_armor(id, 0, CS_ARMOR_NONE);
        return FMRES_SUPERCEDE;
    }
    
    if(equal(szSound, "items/equip_nvg.wav") && !gracz_ma_noktowizor[id])
    {
        cs_set_user_nvg(id, 0);
        return FMRES_SUPERCEDE;
    }
    
    return FMRES_IGNORED;
}

public UzyjPerku(id)
{
    if(!is_user_alive(id))
        return PLUGIN_HANDLED;
        
    new forward_handle = CreateOneForward(pluginy_perkow[perk_gracza[id]], "cod_perk_used", FP_CELL);
    ExecuteForward(forward_handle, id, id);
    DestroyForward(forward_handle);
    return PLUGIN_HANDLED;
}

public ZapiszDane(id)
{
    if(!klasa_gracza[id])
        return PLUGIN_CONTINUE;
        
    new vaultkey[128],vaultdata[256], identyfikator[64];
    format(vaultdata, charsmax(vaultdata),"#%i#%i#%i#%i#%i#%i", doswiadczenie_gracza[id], poziom_gracza[id], inteligencja_gracza[id], zdrowie_gracza[id], wytrzymalosc_gracza[id], kondycja_gracza[id]);
    
    new typ_zapisu = get_pcvar_num(cvar_typ_zapisu);
    
    switch(typ_zapisu)
    {
        case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
        case 2: get_user_authid(id, identyfikator, charsmax(identyfikator));
        case 3: get_user_ip(id, identyfikator, charsmax(identyfikator));
    }
        
    format(vaultkey, charsmax(vaultkey),"%s-%s-%i-cod", identyfikator, nazwy_klas[klasa_gracza[id]], typ_zapisu);
    nvault_set(vault,vaultkey,vaultdata);
    
    return PLUGIN_CONTINUE;
}

public WczytajDane(id, klasa)
{
    new vaultkey[128],vaultdata[256], identyfikator[64];
    
    new typ_zapisu = get_pcvar_num(cvar_typ_zapisu);
    
    switch(typ_zapisu)
    {
        case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
        case 2: get_user_authid(id, identyfikator, charsmax(identyfikator));
        case 3: get_user_ip(id, identyfikator, charsmax(identyfikator));
    }
    
    format(vaultkey, charsmax(vaultkey),"%s-%s-%i-cod", identyfikator, nazwy_klas[klasa], typ_zapisu);
    

    if(!nvault_get(vault,vaultkey,vaultdata,255)) // Jezeli nie ma danych gracza sprawdza stary zapis.
    {
        format(vaultkey, charsmax(vaultkey), "%s-%i-cod", nazwa_gracza[id], klasa);
        nvault_get(vault,vaultkey,vaultdata,255);
    }

    replace_all(vaultdata, 255, "#", " ");
    
    new danegracza[6][32];
    
    parse(vaultdata, danegracza[0], 31, danegracza[1], 31, danegracza[2], 31, danegracza[3], 31, danegracza[4], 31, danegracza[5], 31);
    
    doswiadczenie_gracza[id] = str_to_num(danegracza[0]);
    poziom_gracza[id] = str_to_num(danegracza[1])>0?str_to_num(danegracza[1]):1;
    inteligencja_gracza[id] = str_to_num(danegracza[2]);
    zdrowie_gracza[id] = str_to_num(danegracza[3]);
    wytrzymalosc_gracza[id] = str_to_num(danegracza[4]);
    kondycja_gracza[id] = str_to_num(danegracza[5]);
    punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
    
    return PLUGIN_CONTINUE;
}


public WyrzucPerk(id)
{
    if(perk_gracza[id])
    {
        client_print(id, print_chat, "[COD:MW] Wyrzuciles %s.", nazwy_perkow[perk_gracza[id]]);
        UstawPerk(id, 0, 0, 0);
    }
    else
        client_print(id, print_chat, "[COD:MW] Nie masz zadnego perku.");
}

public SprawdzPoziom(id)
{    
    if(!is_user_connected(id))
        return;
        
    new limit_poziomu = sizeof doswiadczenie_poziomu-1;
    
    new bool:zdobyl_poziom = false, bool:stracil_poziom = false;
    
    while(doswiadczenie_gracza[id] >= PobierzDoswiadczeniePoziomu(poziom_gracza[id]) && poziom_gracza[id] < limit_poziomu)
    {
        poziom_gracza[id]++;
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
        zdobyl_poziom = true;
    }
        
    while(doswiadczenie_gracza[id] < PobierzDoswiadczeniePoziomu(poziom_gracza[id]-1))
    {
        poziom_gracza[id]--;
        stracil_poziom = true;
    }
        
    if(poziom_gracza[id] > limit_poziomu)
    {
        poziom_gracza[id] = limit_poziomu;
        ResetujPunkty(id);
    }
    
    if(stracil_poziom)
    {
        ResetujPunkty(id);
        set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        ShowSyncHudMsg(id, SyncHudObj2,"Spadles do %i poziomu!", poziom_gracza[id]);
    }
    else if(zdobyl_poziom)
    {
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
        set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu!", poziom_gracza[id]);
        client_cmd(id, "spk QTM_CodMod/levelup");
    }
        
            
    ZapiszDane(id);
    
    if(awansuje_do[klasa_gracza[id]])
    {
        if(poziom_gracza[id] >= awanse[ZnajdzAwans(klasa_gracza[id], awansuje_do[klasa_gracza[id]])][2])
        {
            set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
            ShowSyncHudMsg(id, SyncHudObj2,"Osiagajac poziom %i, awansowales do klasy %s!", poziom_gracza[id], nazwy_klas[awansuje_do[klasa_gracza[id]]]);
            new temp_int = inteligencja_gracza[id], temp_zdr = zdrowie_gracza[id], temp_kon = kondycja_gracza[id], temp_wyt = wytrzymalosc_gracza[id], temp_exp = doswiadczenie_gracza[id], temp_lvl = poziom_gracza[id];
            nowa_klasa_gracza[id] = awansuje_do[klasa_gracza[id]];
            UstawNowaKlase(id);
            poziom_gracza[id] = temp_lvl;
            doswiadczenie_gracza[id] = temp_exp;
            wytrzymalosc_gracza[id] = temp_wyt;
            zdrowie_gracza[id] = temp_zdr;
            kondycja_gracza[id] = temp_kon;
            inteligencja_gracza[id] = temp_int;
            punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
            DajBronie(id);
            ZastosujAtrybuty(id);
            ZapiszDane(id);
        }
    }
}

public PokazInformacje(id)
{
    id -= ZADANIE_POKAZ_INFORMACJE;
        
    if(!is_user_connected(id))
    {
        remove_task(id+ZADANIE_POKAZ_INFORMACJE);
        return PLUGIN_CONTINUE;
    }
    
    if(!is_user_alive(id))
    {
        new target = pev(id, pev_iuser2);
    
        if(!target)
            return PLUGIN_CONTINUE;
        
        new ileMa = doswiadczenie_gracza[target],ilePotrzeba = PobierzDoswiadczeniePoziomu(poziom_gracza[target]),ilePotrzebaBylo = poziom_gracza[target]-1 >= 0 ? PobierzDoswiadczeniePoziomu(poziom_gracza[target]-1) : 0;
        new Float:fProcent = 0.0;
        fProcent = (float((ileMa - ilePotrzebaBylo)) / float((ilePotrzeba - ilePotrzebaBylo))) * 100.0;
        
        new hp = get_user_health(target);
        
        set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2);
        ShowSyncHudMsg(id, SyncHudObj, "|Klasa : %s^n|Doswiadczenie : %i / %i | %0.1f%%^n|Poziom : %i^n|Perk : %s^n|HP : %d", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], PobierzDoswiadczeniePoziomu(poziom_gracza[target]),fProcent, poziom_gracza[target], nazwy_perkow[perk_gracza[target]], hp);
        return PLUGIN_CONTINUE;
    }
    
    new ileMa = doswiadczenie_gracza[id],ilePotrzeba = PobierzDoswiadczeniePoziomu(poziom_gracza[id]),ilePotrzebaBylo = poziom_gracza[id]-1 >= 0 ?PobierzDoswiadczeniePoziomu(poziom_gracza[id]-1) : 0
    new Float:fProcent = 0.0;
    fProcent = (float((ileMa - ilePotrzebaBylo)) / float((ilePotrzeba - ilePotrzebaBylo))) * 100.0;
    
    new hp = get_user_health(id);
    
    set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
    ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i | %0.1f%%]^n[Poziom : %i]^n[Perk : %s]^n[HP : %d]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), fProcent, poziom_gracza[id], nazwy_perkow[perk_gracza[id]], hp);
    
    return PLUGIN_CONTINUE;
}  


public Pomoc(id)
    show_menu(id, 1023, "\y/reset\w - resetuje statystyki^n\y/statystyki\w - wyswietla statystyki^n\y/klasa\w - uruchamia menu wyboru klas^n\y/wyrzuc\w - wyrzuca perk^n\y/perk\w - pokazuje opis twojego perku^n\y/klasy\w - pokazuje opisy klas^n\y+use\w - Uzycie umiejetnosci klasy^n\yradio3\w (standardowo C) lub  \yuseperk\w - Uzycie perku", -1, "Pomoc");

public UstawSzybkosc(id)
{
    id -= id>32? ZADANIE_USTAW_SZYBKOSC: 0;
    
    if(klasa_gracza[id] && !freezetime)
        set_pev(id, pev_maxspeed, szybkosc_gracza[id]);
}

public DotykBroni(weapon, id)
{
    if(get_pcvar_num(cvar_blokada_broni) < 1)
        return HAM_IGNORED;
    
    if(!is_user_connected(id))
        return HAM_IGNORED;
        
    new model[23];
    pev(weapon, pev_model, model, 22);
    if (pev(weapon, pev_owner) == id || containi(model, "w_backpack") != -1)
        return HAM_IGNORED;
    return HAM_SUPERCEDE;
}

public DotykTarczy(weapon, id)
{
    if(get_pcvar_num(cvar_blokada_broni) < 1)
        return HAM_IGNORED;
    
    if(!is_user_connected(id))
        return HAM_IGNORED;
        
    if(gracz_ma_tarcze[id])
        return HAM_IGNORED;
        
    return HAM_SUPERCEDE;
}
    
public UstawPerk(id, perk, wartosc, pokaz_info)
{
    if(!ilosc_perkow)
        return PLUGIN_CONTINUE;
    
    static obroty[33];
    
    if(obroty[id]++ >= 5)
    {
        UstawPerk(id, 0, 0, 0);
        obroty[id] = 0;
        return PLUGIN_CONTINUE;
    }
    
    perk = (perk == -1)? random_num(1, ilosc_perkow): perk;
    wartosc = (wartosc == -1 || min_wartosci_perkow[perk] > wartosc ||  wartosc > max_wartosci_perkow[perk])? random_num(min_wartosci_perkow[perk], max_wartosci_perkow[perk]): wartosc;
    
    new ret;
    
    new forward_handle = CreateOneForward(pluginy_perkow[perk_gracza[id]], "cod_perk_disabled", FP_CELL, FP_CELL);
    ExecuteForward(forward_handle, ret, id, perk);
    DestroyForward(forward_handle);
    
    perk_gracza[id] = 0;
    
    forward_handle = CreateOneForward(pluginy_perkow[perk], "cod_perk_enabled", FP_CELL, FP_CELL, FP_CELL);
    ExecuteForward(forward_handle, ret, id, wartosc, perk);
    DestroyForward(forward_handle);
    
    if(ret == 4)
    {
        UstawPerk(id, -1, -1, 1);
        return PLUGIN_CONTINUE;
    }
    
    ExecuteForward(perk_zmieniony, ret, id, perk, wartosc);
    
    if(ret == 4)
    {
        UstawPerk(id, -1, -1, 1);
        return PLUGIN_CONTINUE;
    }
    
    perk_gracza[id] = perk;    
    wartosc_perku_gracza[id] = wartosc;
    
    obroty[id] = 0;
    
    if(pokaz_info && perk_gracza[id])
        client_print(id, print_chat, "[COD:MW] Zdobyles %s.", nazwy_perkow[perk_gracza[id]]);
    
    return PLUGIN_CONTINUE;
}

public UstawDoswiadczenie(id, wartosc)
{
    doswiadczenie_gracza[id] = wartosc;
    SprawdzPoziom(id);
}

public UstawKlase(id, klasa, zmien)
{
    nowa_klasa_gracza[id] = klasa;
    if(zmien)
    {
        UstawNowaKlase(id);
        DajBronie(id);
        ZastosujAtrybuty(id);
    }
}

public UstawTarcze(id, wartosc)
{
    if((gracz_ma_tarcze[id] = (wartosc > 0)))
        fm_give_item(id, "weapon_shield");
}

public UstawNoktowizor(id, wartosc)
{
    if((gracz_ma_noktowizor[id] = (wartosc > 0)))
        cs_set_user_nvg(id, 1);
}

public DajBron(id, bron)
{
    bonusowe_bronie_gracza[id] |= (1<<bron);
    new weaponname[22];
    get_weaponname(bron, weaponname, 21);
    return fm_give_item(id, weaponname);
}

public WezBron(id, bron)
{
    bonusowe_bronie_gracza[id] &= ~(1<<bron);
    
    if( (1<<bron) & ( bronie_dozwolone | bronie_druzyny[get_user_team(id)] | bronie_klasy[klasa_gracza[id]] ) )  
        return;
    
    new weaponname[22];
    get_weaponname(bron, weaponname, 21);
    if(!((1<<bron) & (1<<CSW_HEGRENADE | 1<<CSW_SMOKEGRENADE | 1<<CSW_FLASHBANG)))
        engclient_cmd(id, "drop", weaponname);
}

public UstawBonusoweZdrowie(id, wartosc)
    bonusowe_zdrowie_gracza[id] = wartosc;


public UstawBonusowaInteligencje(id, wartosc)
    bonusowa_inteligencja_gracza[id] = wartosc;

    
public UstawBonusowaKondycje(id, wartosc)
    bonusowa_kondycja_gracza[id] = wartosc;

    
public UstawBonusowaWytrzymalosc(id, wartosc)
    bonusowa_wytrzymalosc_gracza[id] = wartosc;

public PrzydzielZdrowie(id, wartosc)
{
    new max_statystyka = sizeof doswiadczenie_poziomu-1/2;
    wartosc = min(min(punkty_gracza[id], wartosc), max_statystyka-zdrowie_gracza[id]);
    
    punkty_gracza[id] -= wartosc;
    zdrowie_gracza[id] += wartosc;
}

public PrzydzielInteligencje(id, wartosc)
{
    new max_statystyka = sizeof doswiadczenie_poziomu-1/2;
    wartosc = min(min(punkty_gracza[id], wartosc), max_statystyka-inteligencja_gracza[id]);
    
    punkty_gracza[id] -= wartosc;
    inteligencja_gracza[id] += wartosc;
}

public PrzydzielKondycje(id, wartosc)
{
    new max_statystyka = sizeof doswiadczenie_poziomu-1/2;
    wartosc = min(min(punkty_gracza[id], wartosc), max_statystyka-kondycja_gracza[id]);
    
    punkty_gracza[id] -= wartosc;
    kondycja_gracza[id] += wartosc;
}

public PrzydzielWytrzymalosc(id, wartosc)
{
    new max_statystyka = sizeof doswiadczenie_poziomu-1/2;
    wartosc = min(min(punkty_gracza[id], wartosc), max_statystyka-wytrzymalosc_gracza[id]);
    
    punkty_gracza[id] -= wartosc;
    wytrzymalosc_gracza[id] += wartosc;
}

public PobierzPerk(id, &wartosc)
{
    wartosc = wartosc_perku_gracza[id];
    return perk_gracza[id];
}
    
public PobierzIloscPerkow()
    return ilosc_perkow;
    
    
public PobierzNazwePerku(perk, Return[], len)
{
    if(perk <= ilosc_perkow)
    {
        param_convert(2);
        copy(Return, len, nazwy_perkow[perk]);
    }
}
        
public PobierzOpisPerku(perk, Return[], len)
{
    if(perk <= ilosc_perkow)
    {
        param_convert(2);
        copy(Return, len, opisy_perkow[perk]);
    }
}
    
public PobierzPerkPrzezNazwe(const nazwa[])
{
    param_convert(1);
    for(new i=1; i <= ilosc_perkow; i++)
        if(equal(nazwa, nazwy_perkow[i]))
            return i;
    return 0;
}

public PobierzDoswiadczeniePoziomu(poziom)
    return doswiadczenie_poziomu[poziom];

public PobierzDoswiadczenie(id)
    return doswiadczenie_gracza[id];
    
public PobierzPunkty(id)
    return punkty_gracza[id];
    
public PobierzPoziom(id)
    return poziom_gracza[id];

public PobierzZdrowie(id, zdrowie_zdobyte, zdrowie_klasy, zdrowie_bonusowe)
{
    new zdrowie;
    
    if(zdrowie_zdobyte)
        zdrowie += zdrowie_gracza[id];
    if(zdrowie_bonusowe)
        zdrowie += bonusowe_zdrowie_gracza[id];
    if(zdrowie_klasy)
        zdrowie += zdrowie_klas[klasa_gracza[id]];
    
    return zdrowie;
}

public PobierzInteligencje(id, inteligencja_zdobyta, inteligencja_klasy, inteligencja_bonusowa)
{
    new inteligencja;
    
    if(inteligencja_zdobyta)
        inteligencja += inteligencja_gracza[id];
    if(inteligencja_bonusowa)
        inteligencja += bonusowa_inteligencja_gracza[id];
    if(inteligencja_klasy)
        inteligencja += inteligencja_klas[klasa_gracza[id]];
    
    return inteligencja;
}

public PobierzKondycje(id, kondycja_zdobyta, kondycja_klasy, kondycja_bonusowa)
{
    new kondycja;
    
    if(kondycja_zdobyta)
        kondycja += kondycja_gracza[id];
    if(kondycja_bonusowa)
        kondycja += bonusowa_kondycja_gracza[id];
    if(kondycja_klasy)
        kondycja += kondycja_klas[klasa_gracza[id]];
    
    return kondycja;
}

public PobierzWytrzymalosc(id, wytrzymalosc_zdobyta, wytrzymalosc_klasy, wytrzymalosc_bonusowa)
{
    new wytrzymalosc;
    
    if(wytrzymalosc_zdobyta)
        wytrzymalosc += wytrzymalosc_gracza[id];
    if(wytrzymalosc_bonusowa)
        wytrzymalosc += bonusowa_wytrzymalosc_gracza[id];
    if(wytrzymalosc_klasy)
        wytrzymalosc += wytrzymalosc_klas[klasa_gracza[id]];
    
    return wytrzymalosc;
}

public PobierzKlase(id)
    return klasa_gracza[id];
    
public PobierzIloscKlas()
    return ilosc_klas;
    
public PobierzNazweKlasy(klasa, Return[], len)
{
    if(klasa <= ilosc_klas)
    {
        param_convert(2);
        copy(Return, len, nazwy_klas[klasa]);
    }
}

public PobierzKlasePrzezNazwe(const nazwa[])
{
    param_convert(1);
    for(new i=1; i <= ilosc_klas; i++)
        if(equal(nazwa, nazwy_klas[i]))
            return i;
    return 0;
}

public PobierzZdrowieKlasy(klasa)
{
    if(klasa <= ilosc_klas)
        return zdrowie_klas[klasa];
    return -1;
}

public PobierzInteligencjeKlasy(klasa)
{
    if(klasa <= ilosc_klas)
        return inteligencja_klas[klasa];
    return -1;
}

public PobierzKondycjeKlasy(klasa)
{
    if(klasa <= ilosc_klas)
        return kondycja_klas[klasa];
    return -1;
}

public PobierzWytrzymaloscKlasy(klasa)
{
    if(klasa <= ilosc_klas)
        return wytrzymalosc_klas[klasa];
    return -1;
}

public ZadajObrazenia(atakujacy, ofiara, Float:obrazenia, Float:czynnik_inteligencji, byt_uszkadzajacy, dodatkowe_flagi)
    ExecuteHam(Ham_TakeDamage, ofiara, byt_uszkadzajacy, atakujacy, obrazenia+PobierzInteligencje(atakujacy, 1, 1, 1)*czynnik_inteligencji, (1<<31) | dodatkowe_flagi);
    
public ZarejestrujPerk(plugin, params)
{
    if(params != 4)
        return PLUGIN_CONTINUE;
        
    if(++ilosc_perkow > MAX_ILOSC_PERKOW)
        return -1;
        
    pluginy_perkow[ilosc_perkow] = plugin;
    get_string(1, nazwy_perkow[ilosc_perkow], MAX_WIELKOSC_NAZWY);
    get_string(2, opisy_perkow[ilosc_perkow], MAX_WIELKOSC_OPISU);
    min_wartosci_perkow[ilosc_perkow] = get_param(3);
    max_wartosci_perkow[ilosc_perkow] = get_param(4);
    
    return ilosc_perkow;
}

public ZarejestrujKlase(plugin, params)
{
    if(params != 7)
        return PLUGIN_CONTINUE;
        
    if(++ilosc_klas > MAX_ILOSC_KLAS)
        return -1;

    pluginy_klas[ilosc_klas] = plugin;
    
    get_string(1, nazwy_klas[ilosc_klas], MAX_WIELKOSC_NAZWY);
    
    bronie_klasy[ilosc_klas] = get_param(3);
    zdrowie_klas[ilosc_klas] = get_param(4);
    kondycja_klas[ilosc_klas] = get_param(5);
    inteligencja_klas[ilosc_klas] = get_param(6);
    wytrzymalosc_klas[ilosc_klas] = get_param(7);
    
    return ilosc_klas;
}

public ZarejestrujAwans(plugin, params)
{
    if(params != 9)
        return PLUGIN_CONTINUE;
      
    if(++ilosc_klas > MAX_ILOSC_KLAS)
        return -1;
 
    pluginy_klas[ilosc_klas] = plugin;
 
    new awans_z = get_param(1);
    awansuje_do[awans_z] = ilosc_klas;
    awansuje_z[ilosc_klas] = awans_z;
    ilosc_awansow++;
    awanse[ilosc_awansow][1] = ilosc_klas;
    awanse[ilosc_awansow][0] = awans_z;
    awanse[ilosc_awansow][2] = get_param(2);
    get_string(3, nazwy_klas[ilosc_klas], MAX_WIELKOSC_NAZWY);
 
    bronie_klasy[ilosc_klas] = get_param(5);
    zdrowie_klas[ilosc_klas] = get_param(6);
    kondycja_klas[ilosc_klas] = get_param(7);
    inteligencja_klas[ilosc_klas] = get_param(8);
    wytrzymalosc_klas[ilosc_klas] = get_param(9);
 
    return ilosc_klas;
}
 
public ZnajdzAwans(Z, Do)
{
    new Return;
    for(new i=1; i<=ilosc_awansow; i++)
    {
        if(awanse[i][0] == Z && awanse[i][1] == Do)
        {
            Return = i;
            break;
        }
    }
    return Return;
}
 
public JestAwansem(klasa)
{
    new bool:jest;
    for(new i=1; i<=ilosc_awansow; i++)
    {
        if(awanse[i][1] == klasa)
        {
            jest = true;
            break;
        }
    }
    return jest;
}

stock ham_strip_weapon(id, weapon[])
{
    if(!equal(weapon, "weapon_", 7) ) return 0
    new wId = get_weaponid(weapon)
    if(!wId) return 0
    new wEnt
    while( (wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname", weapon) ) && pev(wEnt, pev_owner) != id) {}
    if(!wEnt) return 0
    
    if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt)
    
    if(!ExecuteHamB(Ham_RemovePlayerItem, id, wEnt)) return 0
    ExecuteHamB(Ham_Item_Kill ,wEnt)
    
    set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wId) )
    return 1
}

stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)
{
    message_begin( MSG_ONE, MsgScreenfade,{0,0,0},id );
    write_short( duration );    // Duration of fadeout
    write_short( holdtime );    // Hold time of color
    write_short( fadetype );    // Fade type
    write_byte ( red );        // Red
    write_byte ( green );        // Green
    write_byte ( blue );        // Blue
    write_byte ( alpha );    // Alpha
    message_end();
}

stock fm_give_item(index, const item[]) {
    if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
        return 0;

    new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item));
    if (!pev_valid(ent))
        return 0;

    new Float:origin[3];
    pev(index, pev_origin, origin);
    set_pev(ent, pev_origin, origin);
    set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
    dllfunc(DLLFunc_Spawn, ent);

    new save = pev(ent, pev_solid);
    dllfunc(DLLFunc_Touch, ent, index);
    if (pev(ent, pev_solid) != save)
        return ent;

    engfunc(EngFunc_RemoveEntity, ent);

    return -1;
}

public BlokujKomende()
    return PLUGIN_HANDLED;

  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: cod nowy

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych