#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>
#include <engine>
#include <colorchat>
#include <jailbreak>
#include <amxmisc>
 
#define VIP ADMIN_LEVEL_A
#define SVIP ADMIN_LEVEL_B

native cs_set_player_model(id, newmodel[]);
 
#define SMOKE_SCALE 30
#define SMOKE_FRAMERATE 12
#define SMOKE_GROUND_OFFSET 6
 
new const PLUGIN[] = "NaFarcie"
new const WERSJA[] = "0.3"
new const AUTOR[] = "NaFarcie"
new const TAG[] = "RULETKA"
 
new msgFade;
new c_blind_min, c_blind_max;
new c_karma_num_min, c_karma_num_max;
new c_karma_dmg_min, c_karma_dmg_max;
new pCvarAP, pCvarZatrucie, pCvarSkoki, pCvarWolno, pCvarSzybko, pCvarGrawitacja, pCvarWolnoCzas, pCvarSzybkoCzas, pCvarGrawitacjaCzas, pCvarZatrucieCzas, pCvarNowaMapaCzas, pCvarPoczekajCzas, pCvarMIN, pCvarMAX, pCvarhazardmin, pCvarhazardmax
new Wolno[33]
new Szybko[33]
new Grawitacja[33]
new NoRecoil[33]
new Zatrucie[33]
new Slapowanie[33]
new Skoki[33], DodatkoweSkoki[33]
new SmiertelneSmoke[33], GraczSmokeHit[33], TeleportSmoke[33]
new AutoBH[33]
new Niewidzialnosc[33]
new LongJump[33], Skoczyl[33]
new Obrazenia[33]
new Obrazenia2[33]
new OnlyHS[33]
new slepy[33]
new JedenCios[33]
new dmg[33]
new Ammo[33]
new AntyFlash[33]
new WiecejDMG[33]
new Odliczanie[33]
new Float:punchangle[3]
new OstatnieUzycie[33] = 0
new RuletkaZajeta
new nick[32]
new hud, hud2
new maxpl
new Float:CzasGry
 
new const Float:g_sign[4][2] = {{1.0, 1.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.0, 1.0}}
 
new g_spriteid_steam1
 
public plugin_init() {
        register_plugin(PLUGIN, WERSJA, AUTOR)
 
        register_clcmd("jail_ruletka", "Sprawdz")
        register_clcmd("say /los", "Sprawdz")
        register_clcmd("say /ruletka", "Sprawdz")
 
        register_logevent("RestartGry", 2, "0=World triggered", "1=Game_Commencing")
        register_logevent("KoniecRundy", 2, "1=Round_End")
        register_event("TextMsg", "RestartContin", "a", "2&#Game_C")
        register_event("CurWeapon", "UnlimitedAmmo", "be", "1=1")
        register_message(get_user_msgid("ScreenFade"), "NoFlash")
        register_forward(FM_CmdStart, "RealStartCMD")
        register_forward(FM_PlayerPreThink, "PreThinkBHop")
        register_forward(FM_PlayerPreThink, "PreThinkLJ")
        register_forward(FM_PlayerPreThink, "PreThinkWspinanie")
        RegisterHam(Ham_TakeDamage, "player", "WiekszeObrazenia")
        RegisterHam(Ham_TakeDamage, "player", "MniejszeObrazenia")
        RegisterHam(Ham_TakeDamage, "player", "ObrazeniaJedenCios")
        RegisterHam(Ham_TraceAttack, "player", "TylkoHS");
        register_forward(FM_EmitSound, "forward_emitsound")
        register_forward(FM_PlaybackEvent, "forward_playbackevent")
 
        // we do not precaching, but retrieving the indexes
        g_spriteid_steam1 = engfunc(EngFunc_PrecacheModel, "sprites/steam1.spr")
       
        pCvarAP = register_cvar("jb_ruletka_kamizelka", "200")
        pCvarZatrucie = register_cvar("jb_ruletka_zatrucie", "4")
        pCvarSkoki = register_cvar("jb_ruletka_skoki", "4")
        pCvarWolno = register_cvar("jb_ruletka_wolno_speed", "100")
        pCvarSzybko = register_cvar("jb_ruletka_szybko_speed", "610")
        pCvarGrawitacja = register_cvar("jb_ruletka_grawitacja", "0.6")
 
        pCvarNowaMapaCzas = register_cvar("jb_ruletka_nowamapa_czas", "120")
        pCvarPoczekajCzas = register_cvar("jb_ruletka_poczekaj_czas", "240")
        pCvarWolnoCzas = register_cvar("jb_ruletka_wolno_czas", "25")
        pCvarSzybkoCzas = register_cvar("jb_ruletka_szybko_czas", "15")
        pCvarGrawitacjaCzas = register_cvar("jb_ruletka_grawitacja_czas", "25")
        pCvarZatrucieCzas = register_cvar("jb_ruletka_zatrucie_czas", "23")
        pCvarMIN = register_cvar("jb_ruletka_niewidkamin", "5")
        pCvarMAX = register_cvar("jb_ruletka_niewidkamax", "17")
        c_karma_num_min=register_cvar("roulette_karma_num_min", "1")
        c_karma_num_max=register_cvar("roulette_karma_num_max", "9")
        c_karma_dmg_min=register_cvar("roulette_karma_dmg_min", "1")
        c_karma_dmg_max=register_cvar("roulette_karma_dmg_max", "5")
        c_blind_min=register_cvar("roulette_blind_min", "10")
        c_blind_max=register_cvar("roulette_blind_max", "15")
       
        pCvarhazardmin = register_cvar("jb_ruletka_hazardmin", "1")
        pCvarhazardmax= register_cvar("jb_ruletka_hazardmax", "9743")
 
        hud = CreateHudSyncObj()
        hud2 = CreateHudSyncObj()
        maxpl = get_maxplayers()
        msgFade = get_user_msgid("ScreenFade");
}
 
 
public RealStartCMD(id, uc_handle, seed) {
        if(is_user_alive(id) && is_user_connected(id)) {
                if(NoRecoil[id]) entity_set_vector(id, EV_VEC_punchangle, punchangle)
                if(Szybko[id]) fm_set_user_maxspeed(id, get_pcvar_float(pCvarSzybko))
                if(Wolno[id]) fm_set_user_maxspeed(id, get_pcvar_float(pCvarWolno))
                if(Grawitacja[id]) fm_set_user_gravity(id, fm_get_user_gravity(id) - get_pcvar_float(pCvarGrawitacja));
                if(Niewidzialnosc[id]) fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAdd, 0);
                if(DodatkoweSkoki[id]) {
                        new flagi = pev(id, pev_flags)
 
                        if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flagi & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && Skoki[id]) {
                                Skoki[id]--
                                new Float:velocity[3]
                                pev(id, pev_velocity,velocity)
                                velocity[2] = random_float(265.0, 285.0)
                                set_pev(id, pev_velocity, velocity)
                        }
                        else if(flagi & FL_ONGROUND) Skoki[id] = get_pcvar_num(pCvarSkoki)
                }
        }
        return 0
}
 
public RestartContin() usun()
public KoniecRundy() usun()
public RestartGry() CzasGry = get_gametime()
public usun() {
        for(new i = 1; i <= maxpl; i ++) {
                if(is_user_connected(i)) {
                        Wolno[i] = false
                        Szybko[i] = false
                        Grawitacja[i] = false
                        NoRecoil[i] = false
                        Zatrucie[i] = false
                        Skoki[i] = 1
                        DodatkoweSkoki[i] = false
                        SmiertelneSmoke[i] = false
                        GraczSmokeHit[i] = 0
                        AutoBH[i] = false
                        LongJump[i] = false
                        WiecejDMG[i] = false
                        Skoczyl[i] = false
                        Ammo[i] = false
                        Niewidzialnosc[i] = false
                        Obrazenia[i] = false
                        slepy[i] = false
                        Obrazenia2[i] = false
                        TeleportSmoke[i] = false
                        JedenCios[i] = false
                        AntyFlash[i] = false
                        dmg[i] = false
                        OnlyHS[i] = false
                        Slapowanie[i] = false
                        fm_reset_user_model(i)
                        fm_set_nofootsteps(i, 0)
                }
        }
}
 
public client_connect(id) {
        OstatnieUzycie[id] = 0
        set_user_info(id, "lang", "pl")
}
 
public Sprawdz(id) {
 
        if(get_gametime() - CzasGry < get_pcvar_float(pCvarNowaMapaCzas)) {
                ColorChat(id, GREEN, "[%s]^x01 Za wczesnie na ruletke! Poczekaj jeszcze troche.", TAG)
                return 1
        }
 
        if(get_systime() - OstatnieUzycie[id] < get_pcvar_num(pCvarPoczekajCzas)){
                ColorChat(id, GREEN, "[%s]^x01 Poczekaj jeszcze^x03 %d^x01 sekund.", TAG, get_pcvar_num(pCvarPoczekajCzas) - get_systime() + OstatnieUzycie[id])
                return 1
        }
        if(!is_user_alive(id))
        {
       
                ColorChat(id, GREEN, "[%s]^x01 Aby uzyc ruletki musisz^x01 byc zywy.", TAG)
                return 1
        }
        if(jail_get_play_game_id() > 7 || jail_get_days() == KILLDAY_DAY)
        {
                ColorChat(id, GREEN, "[%s]^x01 Podczas zabaw ^x03nie^x01 mozesz, uzywac ruletki.", TAG)
                return 1
        }
        if(RuletkaZajeta > 0)
        {
                ColorChat(id, GREEN, "[%s]^x01 Ruletka ^x03jest^x01 zajeta, sprobuj ponownie za chwile.", TAG)
                return 1
        }
       
        switch(get_user_team(id)) {
                case 1: RuletkaTT(id)
                case 2: RuletkaCT(id)
        }
        RuletkaZajeta = 1
        set_task(8.0, "MoznaUzyc")
        return 1
}
public MoznaUzyc() {
        if(RuletkaZajeta > 0) RuletkaZajeta = 0
}      
       
public RuletkaTT(id)
{
        new flagi       = is_user_admin(id)
        set_hudmessage(0, 255, 255, 0.02, 0.35, 2, 0.02, 5.0, 0.01, 0.1, 1)
        get_user_name(id, nick, 31)
        switch(random_num(1, 30)) {
                case 1 : {
                        ShowSyncHudMsg(0, hud2, "[%s] %s otrzymal %d KEVLARA!", TAG, nick, get_pcvar_num(pCvarAP))
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales %d punktow kamizelki.", TAG, get_pcvar_num(pCvarAP))
                        fm_set_user_armor(id, get_pcvar_num(pCvarAP))
                }
                case 2 :
                {
                        if (flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed spowolnieniem. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                                ShowSyncHudMsg(0, hud2, "[%s] %s JEST WOLNIEJSZY!", TAG, nick)
                                ColorChat(id, GREEN, "[%s]^x01 Wylosowales spowolnienie.", TAG)
                                Wolno[id] = true
                               
                                Odliczanie[id] = get_pcvar_num(pCvarWolnoCzas)
                                set_task(1.0, "OdliczWolno", id, _, _, "a", Odliczanie[id])
                        }
 
                }
                case 3: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed dedem. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                                show_hudmessage(0, "[%s] %s Zezgonowal :(", TAG, nick)
                                ColorChat(id, GREEN, "[%s]^x01 Wylosowales smierc.", TAG)
                                user_silentkill(id)
                        }
 
                }
                case 4: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s JEST SZYBSZY!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales przyspieszenie.", TAG)
                        Szybko[id] = true
 
                        Odliczanie[id] = get_pcvar_num(pCvarSzybkoCzas)
                        set_task(1.0, "OdliczSzybko", id, _, _, "a", Odliczanie[id])
                }
                case 5: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s Ma 2 razy nizsza grawitacje.", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales 2x nizsza grawitacje.", TAG)
                        Grawitacja[id] = true
 
                        Odliczanie[id] = get_pcvar_num(pCvarGrawitacjaCzas)
                        set_task(1.0, "OdliczGrawitacja", id, _, _, "a", Odliczanie[id])
                }
                case 6: {
                        new zycie = random_num(20, 120)
                        ShowSyncHudMsg(0, hud2, "[%s] %s dostal +%i HP", TAG, nick, zycie)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales +%iHP.", TAG, zycie)
                        fm_set_user_health(id, get_user_health(id) + zycie)
                }
                case 7: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes vipem! Zostales uratowany przed 1 hp. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                                ShowSyncHudMsg(0, hud2, "[%s] %s ma 1 HP", TAG, nick)
                                ColorChat(id, GREEN, "[%s]^x01 Wylosowales ma 1HP", TAG)
                                fm_set_user_health(id, 1)
                        }
                }
                case 8: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s OTRZYMAL DEAGLE z 1 AMMO!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales Deagle z 1 nabojem.", TAG)
                        cs_set_weapon_ammo(fm_give_item(id, "weapon_deagle"), 1)
                }
                case 9: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s otrzymal HEJDZA!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales granat odlamkowy.", TAG)
                        fm_give_item(id, "weapon_hegrenade")
                }
                case 10: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s otrzymal FLASHA!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales granat oslepiajacy.", TAG)
                        fm_give_item(id, "weapon_flashbang")
                }
                case 11: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s otrzymal SMOKE!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales granat dymny.", TAG)
                        fm_give_item(id, "weapon_smokegrenade")
                }
                case 12: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed zatruciem. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                        ShowSyncHudMsg(0, hud2, "[%s] %s wygral ZATRUCIE!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales zatrucie. Zabiera ci %dHP co sekunde przez %d sekund.", TAG, get_pcvar_num(pCvarZatrucie), get_pcvar_num(pCvarZatrucieCzas))
                        Zatrucie[id] = true
                       
                        Odliczanie[id] = get_pcvar_num(pCvarZatrucieCzas)
                        set_task(1.0, "OdliczZatrucie", id, _, _, "a", Odliczanie[id])
                        }
 
                }
                case 13: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s wygral DODATKOWE SKOKI", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales %i dodatkowe skoki w powietrzu.", TAG, get_pcvar_num(pCvarSkoki))
                        Skoki[id] = get_pcvar_num(pCvarSkoki)
                        DodatkoweSkoki[id] = true
                }
                case 14: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s wygral SMIERTELNEGO SMOKE", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales smiertelnego smoke, gdy trafisz nim w straznika to on od razu zginie.", TAG)
                        if(get_user_weapon(id) == CSW_SMOKEGRENADE) return PLUGIN_HANDLED
                        else fm_give_item(id, "weapon_smokegrenade")
                               
                        SmiertelneSmoke[id] = true
                        GraczSmokeHit[id] = 1
                }
                case 16: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s wygral LONG JUMPA", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales Long Jump'a. Usiadz, aby wybilo Cie do przodu.", TAG)
                        LongJump[id] = true
                }
                case 17: {
                        show_hudmessage(0, "[%s] %s wylosowal STROJ STRAZNIKA", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales stroj straznika. Wygladasz jak straznik, sprobuj ich oszukac i uciekaj.", TAG)
                         cs_set_player_model(id, "klawisz_ultra");
                         set_pev(id, pev_body, 0);
                }
                case 18: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s ma 2x WIEKSZE DMG", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales 2x wieksze obrazenia.", TAG)
                        Obrazenia[id] = true
                }
                case 19: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s zabija JEDNYM CIOSEM!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales zabijanie jednym ciosem z piesci.", TAG)
                        JedenCios[id] = true
                }
                case 20: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s ma CICHE BUTY.", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales ciche buty, nie slychac Cie jak biegasz.", TAG)
                        fm_set_nofootsteps(id, 1)
                }
                case 21:{
                        if(flagi)
                        {
                        ShowSyncHudMsg(0, hud2, "[%s] %s ma SCOUTA.", TAG, nick)
                        ColorChat(id, GREEN,"[%s]^x01 Wylosowales scouta i 2 ammo.", TAG)
                        cs_set_weapon_ammo(fm_give_item(id, "weapon_scout"), 2)
                        }
                        else
                        {
                        ShowSyncHudMsg(0, hud2, "[%s] %s Nic nie wylosowal", TAG, nick)
                        ColorChat(id, GREEN,"[%s]^x01 Wylosowal bys scouta lecz nie jestes vipem :(.", TAG, nick)
                        }
 
                }
                case 22: {
                        new ile
                        ile = random_num(get_pcvar_num(pCvarMIN), get_pcvar_num(pCvarMAX));
                        ShowSyncHudMsg(0, hud2, "[%s] %s ma niewidzialnosc.", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales niewidzialnosc na %d sekund.", TAG, ile)
                        Niewidzialnosc[id] = true
 
                        Odliczanie[id] = ile
                        set_task(1.0, "OdliczNiewidzialnosc", id, _, _, "a", Odliczanie[id])
                }
                case 23: {
                        new ile
                        ile = random_num(get_pcvar_num(pCvarhazardmin), get_pcvar_num(pCvarhazardmax));
                        ShowSyncHudMsg(0, hud2, "[%s] %s wylosowal zmieniona walute.", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Po zmienieniu waluty masz %d $.", TAG, ile)
                       
                        cs_set_user_money(id, ile);
                }
                case 24: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed slapowaniem. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                        new ile
                        ile = random_num(get_pcvar_num(c_karma_num_min), get_pcvar_num(c_karma_num_max))
                        ShowSyncHudMsg(0, hud2, "[%s] %s bedzie slapowany przez %d sekund.", TAG, nick, ile)
                        ColorChat(id, GREEN, "[%s]^x01 jestes slapowany przez %d sekund.", TAG, ile)
                        Slapowanie[id] = true
                       
                        Odliczanie[id] = ile
                        set_task(1.0, "OdliczSlapowanie", id, _, _, "a", Odliczanie[id])
                        }
 
                }
                case 25:
                {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed kopniakiem. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                        new zycie = random_num(20, 100)
                        ShowSyncHudMsg(0, hud2, "[%s] %s dostal kopniaka za %i HP", TAG, nick, zycie)
                        ColorChat(id, GREEN, "[%s]^x01 dostales kopniaka za %i HP.", TAG, zycie)
                        kick_forward_up(id,1000,500);
                        screen_flash(id,100,0,0,100);
                        user_slap(id, zycie);
                       
                        for(new i=1; i<=maxpl; ++i)
                                {
                                        if(i!=id && !is_user_alive(i) && pev(i, pev_iuser2)==id)
                                        {
                                        screen_flash(i,100,0,0,100);
                                        }
                                }
                        }
 
                }
                case 26:
                {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed oslepieniem. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                        new ile
                        ile = random_num(get_pcvar_num(c_blind_min), get_pcvar_num(c_blind_max));
                        ShowSyncHudMsg(0, hud2, "[%s] %s Zostal slepy na %d sekund!", TAG, nick, ile)
                        ColorChat(id, GREEN, "[%s]^x01 Jestes slepy na %d sekund!.", TAG, ile)
                        slepy[id] = true
                       
                        message_begin(MSG_ONE_UNRELIABLE, msgFade, {0,0,0}, id);
                        write_short(5120);
                        write_short(5120);
                        write_short(5120);
                        write_byte(0);
                        write_byte(0);
                        write_byte(0);
                        write_byte(255);
                        message_end();
                       
                        Odliczanie[id] = ile
                        set_task(1.0, "OdliczSlepy", id, _, _, "a", Odliczanie[id])
                        }
 
                }
                case 27: {
                        if( jail_get_days() == SOBOTA || jail_get_days() == NIEDZIELA )
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Podczas zabawy nie mozesz wylosowac FD! Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                        ShowSyncHudMsg(0, hud2, "[%s] %s Wylosowal FreeDay!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales FD, masz dzien WOLNY od polecen.", TAG)
                        jail_set_prisoner_free(id, true, false)
          
                        }
                }
                case 29:
                {
                        ShowSyncHudMsg(0, hud2, "[%s] %s wygral TELEPORTUJACEGO SMOKE", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales teleportujacy granat, musi dotknac podloza lub sciany aby zadzialal.", TAG)
                        if(get_user_weapon(id) == CSW_SMOKEGRENADE) return PLUGIN_HANDLED
                        else fm_give_item(id, "weapon_smokegrenade")
                        if(get_user_weapon(id) == CSW_FLASHBANG) return PLUGIN_HANDLED
                        else fm_give_item(id, "weapon_flashbang")
                               
                        TeleportSmoke[id] = true
                }
        }
        OstatnieUzycie[id] = get_systime()
        return 1
}
 
public RuletkaCT(id) {
        new flagi       = is_user_admin(id)
        set_hudmessage(0, 255, 255, 0.02, 0.35, 2, 0.02, 5.0, 0.01, 0.1, 1)
        get_user_name(id, nick, 31)
        switch(random_num(1, 18)) {
                case 1 : {
                        ShowSyncHudMsg(0, hud2, "[%s] %s otrzymal %d KEVLARA!", TAG, nick, get_pcvar_num(pCvarAP))
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales %d punktow kamizelki.", TAG, get_pcvar_num(pCvarAP))
                        fm_set_user_armor(id, get_pcvar_num(pCvarAP))
                }
                case 2 : {
                        ShowSyncHudMsg(0, hud2, "[%s] %s JEST WOLNIEJSZY!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales spowolnienie.", TAG)
                        Wolno[id] = true
                       
                        Odliczanie[id] = get_pcvar_num(pCvarWolnoCzas)
                        set_task(1.0, "OdliczWolno", id, _, _, "a", Odliczanie[id])
                }
                case 3: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes vipem! Zostales uratowany przed dedem. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                                ShowSyncHudMsg(0, hud2, "[%s] %s Padl", TAG, nick)
                                ColorChat(id, GREEN, "[%s]^x01 Wylosowales smierc.", TAG)
                                user_silentkill(id)
                        }
 
                }
                case 4: {
                        new zycie = random_num(20, 100)
                        ShowSyncHudMsg(0, hud2, "[%s] %s wylosowal +%i HP", TAG, nick, zycie)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales +%i HP.", TAG, zycie )
                        fm_set_user_health(id, get_user_health(id) + zycie)
                }
                case 5: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes vipem! Zostales uratowany przed 1 hp.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                                ShowSyncHudMsg(0, hud2, "[%s] %s ma 1 HP", TAG, nick)
                                ColorChat(id, GREEN, "[%s]^x01 Wylosowales 1HP.", TAG)
                                fm_set_user_health(id, 1)
                        }
 
                }
                case 6: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed zatruciem. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1       
                        }
                        else
                        {
                        ShowSyncHudMsg(0, hud2, "[%s] %s wygral ZATRUCIE", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales zatrucie. Zabiera ci %dHP co sekunde przez %d sekund.", TAG, get_pcvar_num(pCvarZatrucie), get_pcvar_num(pCvarZatrucieCzas))
                        Zatrucie[id] = true
                       
                        Odliczanie[id] = get_pcvar_num(pCvarZatrucieCzas)
                        set_task(1.0, "OdliczZatrucie", id, _, _, "a", Odliczanie[id])
                        }
 
                }
                case 7: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s OTRZYMAL NO RECOIL!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales eliminator rozrzutu w broniach.", TAG)
                        NoRecoil[id] = true
                }
                case 8: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s wygral UNLIMITED AMMO!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales nieskonczonsc amunicji. Strzelaj do bolu :)", TAG)
                        Ammo[id] = true
                        set_user_clip(id, 31)
                }
                case 9: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s wygral ANTY FLASHA!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales anty flash'a. Nie dzialaja na Ciebie granaty oslepiajace.", TAG)
                        AntyFlash[id] = true
                }
                case 10: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed strata broni. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                        ShowSyncHudMsg(0, hud2, "[%s] %s STRACIL BRONIE!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Straciles wszystkie bronie.", TAG)
                        fm_strip_user_weapons(id)
                        }
                }
                case 11: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s dostal KROWE!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales krowe. Dostajesz bron M249.", TAG)
                        fm_give_item(id, "weapon_m249")
                        cs_set_user_bpammo(id, CSW_M249, 200)
                }
                case 12: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s dostal DODATKOWE SKOKI!", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales %i dodatkowe skoki w powietrzu.", TAG, get_pcvar_num(pCvarSkoki))
                        Skoki[id] = get_pcvar_num(pCvarSkoki)
                        DodatkoweSkoki[id] = true
                }
                case 14: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s wygral LONG JUMPA", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales Long Jump'a. Usiadz, aby wybilo Cie do przodu.", TAG)
                        LongJump[id] = true
                }
                case 15: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed mniejszym dmg. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                        ShowSyncHudMsg(0, hud2, "[%s] %s ma 2x MNIEJSZE DMG", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Wylosowales 2x mniejsze obrazenia.", TAG)
                        Obrazenia2[id] = true
                        }
 
                }
                case 16: {
                        if(flagi)
                        {
                                ColorChat(id, GREEN, "[%s]^x01 Masz szczescie ze jestes VIP! Zostales uratowany przed czyms zlym. Mozesz losowac drugi raz.", TAG)
                                OstatnieUzycie[id] = 0
                                return 1
                        }
                        else
                        {
                        ShowSyncHudMsg(0, hud2, "[%s] %s Moze zabic tylko HS", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Zabijasz tylko HS.", TAG)
                        OnlyHS[id] = true
                        }
 
                }
                case 17: {
                        ShowSyncHudMsg(0, hud2, "[%s] %s Otrzymuje 2x wiecej DMG", TAG, nick)
                        ColorChat(id, GREEN, "[%s]^x01 Otrzymujesz 2x wiecej DMG.", TAG)
                        WiecejDMG[id] = true
                }
 
        }
        OstatnieUzycie[id] = get_systime()
        return 1
}
public OdliczWolno(id) {
        if(is_user_connected(id) && is_user_alive(id) && Wolno[id]) {
                get_user_name(id, nick, 31)
                set_hudmessage(255, 255, 0, 0.3, 0.6, 2, 0.5, 0.1, 0.0, 1.0, -1)
                if(--Odliczanie[id] <= 0) {
                        if (task_exists(id)) remove_task(id)
 
                        fm_set_user_maxspeed(id, 250.0)
                        Wolno[id] = false
                        show_hudmessage(0,"%s przestal byc wolny!", nick)
                        return
                }
                ShowSyncHudMsg(0, hud, "%s przestanie byc wolny za: %d", nick, Odliczanie[id])
        }
}
 
public OdliczSzybko(id) {
        if(is_user_connected(id) && is_user_alive(id) && Szybko[id]) {
                get_user_name(id, nick, 31)
                set_hudmessage(255, 255, 0, 0.3, 0.6, 2, 0.5, 0.1, 0.0, 1.0, -1)
                if(--Odliczanie[id] <= 0) {
                        if (task_exists(id)) remove_task(id)
 
                        fm_set_user_maxspeed(id, 250.0)
                        Szybko[id] = false
                        show_hudmessage(0, "%s przestal byc szybki!", nick)
                        return
                }
                ShowSyncHudMsg(0, hud, "%s przestanie byc szybki za: %d", nick, Odliczanie[id])
        }
}
public OdliczSlepy(id) {
        if(is_user_connected(id) && is_user_alive(id) && slepy[id]) {
                get_user_name(id, nick, 31)
                set_hudmessage(255, 255, 0, 0.3, 0.6, 2, 0.5, 0.1, 0.0, 1.0, -1)
                if(--Odliczanie[id] <= 0) {
                        if (task_exists(id)) remove_task(id)
                       
                        slepy[id] = false
                        player_unblind(id);
                        show_hudmessage(0, "%s przestal byc slepy!", nick)
                        return
                }
                ShowSyncHudMsg(0, hud, "%s przestanie byc slepy za: %d", nick, Odliczanie[id])
               
                message_begin(MSG_ONE_UNRELIABLE, msgFade, {0,0,0}, id);
                write_short(5120);
                write_short(5120);
                write_short(5120);
                write_byte(0);
                write_byte(0);
                write_byte(0);
                write_byte(255);
                message_end();
        }
}
public OdliczGrawitacja(id) {
        if(is_user_connected(id) && is_user_alive(id) && Grawitacja[id]) {
                get_user_name(id, nick, 31)
                set_hudmessage(255, 255, 0, 0.3, 0.6, 2, 0.5, 0.1, 0.0, 1.0, -1)
                if(--Odliczanie[id] <= 0) {
                        if (task_exists(id)) remove_task(id)
 
                        Grawitacja[id] = false
                        fm_set_user_gravity(id, 1.0)
                        show_hudmessage(0, "%s skonczyla sie grawitacja!", nick)
                        return
                }
                ShowSyncHudMsg(0, hud, "%s skonczy sie nizsza grawitacja za: %d", nick, Odliczanie[id])
        }
}
public OdliczNiewidzialnosc(id) {
        if(is_user_connected(id) && is_user_alive(id) && Niewidzialnosc[id]) {
                get_user_name(id, nick, 31)
                set_hudmessage(255, 255, 0, 0.3, 0.6, 2, 0.5, 0.1, 0.0, 1.0, -1)
                if(--Odliczanie[id] <= 0) {
                        if (task_exists(id)) remove_task(id)
 
                        Niewidzialnosc[id] = false
                        fm_set_user_rendering(id, kRenderFxNone, 255, 255, 255, kRenderNormal, 16);
                        show_hudmessage(0, "%s nie jest juz niewidzialny!", nick)
                        return
                }
                ShowSyncHudMsg(0, hud, "%s przestanie byc niewidzialny za: %d", nick, Odliczanie[id])
        }
}
 
public OdliczZatrucie(id) {
        if(is_user_connected(id) && is_user_alive(id) && Zatrucie[id]) {
                get_user_name(id, nick, 31)
                set_hudmessage(255, 255, 0, 0.3, 0.6, 2, 0.5, 0.1, 0.0, 1.0, -1)
                if (--Odliczanie[id]<=0) {
                        if (task_exists(id)) remove_task(id)
 
                        Zatrucie[id] = false
                        show_hudmessage(0, "%s przestal sie truc!", nick)
                        return
                }
                ShowSyncHudMsg(0, hud, "%s skonczy sie truc za: %d", nick, Odliczanie[id])
 
                if(Zatrucie[id]) fm_set_user_health(id, get_user_health(id) - get_pcvar_num(pCvarZatrucie))
        }
}
public OdliczSlapowanie(id) {
        if(is_user_connected(id) && is_user_alive(id) && Slapowanie[id]) {
                get_user_name(id, nick, 31)
                set_hudmessage(255, 255, 0, 0.3, 0.6, 2, 0.5, 0.1, 0.0, 1.0, -1)
                if (--Odliczanie[id]<=0) {
                        if (task_exists(id)) remove_task(id)
 
                        Slapowanie[id] = false
                        show_hudmessage(0, "%s przestal byc slapowany!", nick)
                        return
                }
                ShowSyncHudMsg(0, hud, "%s przestanie byc slapowany za: %d", nick, Odliczanie[id])
 
                if(Slapowanie[id]) user_slap(id, random_num(get_pcvar_num(c_karma_dmg_min), get_pcvar_num(c_karma_dmg_max)));
        }
}
public pfn_touch(ptr, ptd) {   
        if(!is_valid_ent(ptd)) return 0
 
        new szClassName[32]
        entity_get_string(ptd, EV_SZ_classname, szClassName, 31)
 
        if(is_valid_ent(ptr)) {
                new szClassNameOther[32]
                entity_get_string(ptr, EV_SZ_classname, szClassNameOther, 31)
 
                if(equal(szClassName, "grenade") && equal(szClassNameOther, "player")) {
                        new greModel[64]
                        entity_get_string(ptd, EV_SZ_model, greModel, 63)
 
                        if(equali(greModel, "models/w_smokegrenade.mdl")) {
                                new id = entity_get_edict(ptd,EV_ENT_owner)
 
                                if(is_user_alive(id) && is_user_alive(ptr) && GraczSmokeHit[id] > 0 && get_user_team(id) != get_user_team(ptr)) Zabij(id, ptr, "world")
                        }
                }
        }
        return 0
}
public player_unblind(id){
        message_begin(MSG_ONE_UNRELIABLE, msgFade, {0,0,0}, id);
        write_short(1<<12);
        write_short(1<<8);
        write_short(1<<1);
        write_byte(0);
        write_byte(0);
        write_byte(0);
        write_byte(128);
        message_end();
}
 
public Zabij(zabojca, id, weapon[]) {
        if(get_user_team(zabojca) != get_user_team(id)) fm_set_user_frags(zabojca, get_user_frags(zabojca) + 1)
 
        user_silentkill(id)
        message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0, 0, 0}, 0)
        write_byte(zabojca)
        write_byte(id)
        write_byte(0)
        write_string(weapon)
        message_end()
 
        message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
        write_byte(zabojca)
        write_short(get_user_frags(zabojca))
        write_short(get_user_deaths(zabojca))
        write_short(0)
        write_short(get_user_team(zabojca))
        message_end()
 
        message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
        write_byte(id)
        write_short(get_user_frags(id))
        write_short(get_user_deaths(id))
        write_short(0)
        write_short(get_user_team(id))
        message_end()
}
  
public PreThinkLJ(id) {
        if(!is_user_alive(id) || !LongJump[id]) return 0
 
        if(get_user_button(id) & IN_DUCK) {
                if(Skoczyl[id]) return PLUGIN_CONTINUE
 
                new Flagi = entity_get_int(id, EV_INT_flags)
                if(Flagi | FL_WATERJUMP && entity_get_int(id, EV_INT_waterlevel) < 2 && Flagi & FL_ONGROUND) {
                        new Float:fVelocity[3]
                        entity_get_vector(id, EV_VEC_velocity, fVelocity)
 
                        new Float:vAngle[3]
                        entity_get_vector(id, EV_VEC_angles, vAngle)
                        engfunc(EngFunc_MakeVectors, vAngle)
 
                        new Float:vForward[3]
                        get_global_vector(GL_v_forward, vForward)
 
                        if(fVelocity[0] == 0.0 || fVelocity[1] == 0.0) return PLUGIN_CONTINUE
 
                        fVelocity[0] = vForward[0] * 750
                        fVelocity[1] = vForward[1] * 750
                        fVelocity[2] = 310.0
 
                        entity_set_vector(id, EV_VEC_velocity, fVelocity)
                        Skoczyl[id] = true
                }
        } else if(get_user_oldbutton(id) & IN_DUCK) Skoczyl[id] = false
 
        return 0
}
 
public WiekszeObrazenia(this, idinflictor, idattacker, Float:damage, damagebits) {
        if(!is_user_connected(this) || !is_user_connected(idattacker) || this == idattacker) return HAM_IGNORED
 
        if(idattacker != 0 && is_user_alive(idattacker) && Obrazenia[idattacker]) {
                SetHamParamFloat(4, damage*2)
                return HAM_HANDLED
        }
        return HAM_IGNORED
}
public MniejszeObrazenia(this, idinflictor, idattacker, Float:damage, damagebits) {
        if(!is_user_connected(this) || !is_user_connected(idattacker) || this == idattacker) return HAM_IGNORED
 
        if(idattacker != 0 && is_user_alive(idattacker) && dmg[idattacker]) {
                SetHamParamFloat(4, damage/2)
                return HAM_HANDLED
        }
        return HAM_IGNORED
}
public TakeDmg(this, idinflictor, idattacker, Float:damage, damagebits){
        if(is_user_alive(this) && WiecejDMG[this]){
                SetHamParamFloat(4, damage*2);
                return HAM_HANDLED;
        }
        return HAM_IGNORED;
}
 
public ObrazeniaJedenCios(id, ent, attacker) {
        if(is_user_alive(attacker) && JedenCios[attacker] && get_user_weapon(attacker) == CSW_KNIFE) {
                cs_set_user_armor(id, 0, CS_ARMOR_NONE)
                SetHamParamFloat(4, float(get_user_health(id) + 1))
                return HAM_HANDLED
        }
        return HAM_IGNORED
}
public TylkoHS(vid, id, Float:damage, Float:dir[3], tr, damagebits){
        if(is_user_alive(id) && OnlyHS[id] && damagebits&DMG_BULLET && get_tr2(tr, TR_iHitgroup)!=HIT_HEAD){
                SetHamParamFloat(3, 0.0);
                return HAM_HANDLED;
        }
        return HAM_IGNORED;
}
public UnlimitedAmmo(id) {
        if(!is_user_connected(id) && !is_user_alive(id) || !Ammo[id]) return 0
 
        set_user_clip(id, 31)
 
        return 0
}
 
public NoFlash(id) {
        if((get_msg_arg_int(4) == 255) && (get_msg_arg_int(5) == 255) && (get_msg_arg_int(6) == 255) && (get_msg_arg_int(7) > 199)) {
                for(new i = 1; i <= maxpl; i ++) {
                        if(is_user_alive(i) && AntyFlash[i]) return 1
                }
        }
        return 0
}
 
public client_PreThink(id){
        if(!fm_get_nofootsteps(id)) return 1
 
        fm_set_nofootsteps(id, 1)
 
        return 0
}
 
// Kopniak w gore i do przodu
public kick_forward_up(id,forwardval,upval){
        new Float:Velocity[3];
        VelocityByAim(id, forwardval, Velocity);
        Velocity[2]=0.0;
        normalize(Velocity,Velocity,forwardval*1.0);
        Velocity[2]+=upval*1.0;
        entity_set_vector(id, EV_VEC_velocity ,Velocity);
}
 
// Normalizacja
public normalize(Float:Vec[3],Float:Ret[3],Float:multiplier){ // 
        new Float:len=getVecLen(Vec)
        copyVec(Vec,Ret)
        Ret[0]/=len
        Ret[1]/=len
        Ret[2]/=len
        Ret[0]*=multiplier
        Ret[1]*=multiplier
        Ret[2]*=multiplier
}
 
// Kopiowanie wektorow
public copyVec(Float:Vec[3],Float:Ret[3]){ // 
        Ret[0]=Vec[0]
        Ret[1]=Vec[1]
        Ret[2]=Vec[2]
}
 
// Pobranie dlugosci wektorow
public Float:getVecLen(Float:Vec[3]){ // 
        new Float:VecNull[3]={0.0,0.0,0.0}
        new Float:len=vector_distance(Vec,VecNull)
        return len
}
public forward_emitsound(ent) {
        static id, Float:origin[3]
        id = pev(ent, pev_owner)
       
        if(!TeleportSmoke[id])
                return FMRES_IGNORED
 
        pev(ent, pev_origin, origin)
        engfunc(EngFunc_SetOrigin, ent, Float:{8191.0, 8191.0, 8191.0})  
        origin[2] += SMOKE_GROUND_OFFSET
        create_smoke(origin)
        TeleportSmoke[id] = false;
       
        if (is_user_alive(id)) {
                static Float:mins[3], hull
                pev(id, pev_mins, mins)
                origin[2] -= mins[2] + SMOKE_GROUND_OFFSET
                hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
                if (is_hull_vacant(origin, hull))
                        engfunc(EngFunc_SetOrigin, id, origin)
                else { // close to a solid object, trying to find a vacant spot
                        static Float:vec[3]
                        vec[2] = origin[2]
                        for (new i; i < sizeof g_sign; ++i) {
                                vec[0] = origin[0] - mins[0] * g_sign[i][0]
                                vec[1] = origin[1] - mins[1] * g_sign[i][1]
                                if (is_hull_vacant(vec, hull)) {
                                        engfunc(EngFunc_SetOrigin, id, vec)
                                        break
                                }
                        }
                }
               
        }
 
        return FMRES_SUPERCEDE
}
 
create_smoke(const Float:origin[3]) {
        // engfunc because origin are float
        engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
        write_byte(TE_SMOKE)
        engfunc(EngFunc_WriteCoord, origin[0])
        engfunc(EngFunc_WriteCoord, origin[1])
        engfunc(EngFunc_WriteCoord, origin[2])
        write_short(g_spriteid_steam1)
        write_byte(SMOKE_SCALE)
        write_byte(SMOKE_FRAMERATE)
        message_end()
}
 
stock bool:is_hull_vacant(const Float:origin[3], hull) {
        new tr = 0
        engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr)
        if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
                return true
       
        return false
}
 
// Screen Flash
public screen_flash(id,red,green,blue,alpha){
        message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), _, id);
        write_short(1<<12);
        write_short(1<<12);
        write_short(1<<12);
        write_byte(red);
        write_byte(green);
        write_byte(blue);
        write_byte(alpha);
        message_end();
}
stock set_user_clip(id, ammo) {
        new weaponname[32], weaponid = 0, weapon = get_user_weapon(id, _, _)
        get_weaponname(weapon, weaponname, 31)
        while((weaponid = engfunc(EngFunc_FindEntityByString, weaponid, "classname", weaponname)) != 0)
        if(pev(weaponid, pev_owner) == id) {
                set_pdata_int(weaponid, 51, ammo, 4)
                return weaponid
        }
        return 0
}
 
stock fm_get_nofootsteps(index) return pev(index, pev_flTimeStepSound) == 999 ? true : false
stock fm_set_nofootsteps(index, nofootsteps = 0) set_pev(index, pev_flTimeStepSound, nofootsteps ? 999 : 400)
stock fm_reset_user_model(player) dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))