AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Problem Compiling =/ (https://forums.alliedmods.net/showthread.php?t=90227)

speed4weed 04-15-2009 13:11

Problem Compiling =/
 
1 Attachment(s)
Alright i fixed up a few things but i get 3 errors, the undifined crap on these lines.

Code:

if (player_class[id] == 0) select_class(id)


LoadXP(id, player_class[id])


and


select_class(id)


Any help?

speed4weed 04-15-2009 15:39

Re: Problem Compiling =/
 
Fixed up. Just the 3 lines left =/

ot_207 04-15-2009 15:51

Re: Problem Compiling =/
 
/home/groups/alliedmodders/forums/files/4/1/1/0/5/40704.attach(893) : error 088: number of arguments does not match definition
/home/groups/alliedmodders/forums/files/4/1/1/0/5/40704.attach(4024) : error 088: number of arguments does not match definition

That means that the function doesn't hjave the argument number that it needs.
Ex: instead of calling cs_set_user_team(id,CS_TEAM_T) i just use cs_set_user_team(id).
This is for you to know for the future plugins that you will do.

Edit: change
public select_class(id,lx[]) to public select_class(id)

and
select_class(id)) to select_class

and
LoadXP(id, player_class[id]) to LoadXP(id)

This is the script corrected by me:
Code:

/* ================================================================================================ /
*
*        Diablo Mod:
*        ------------------
*
*        Need:                This compiled and items files
*        Works with:        AMXX § Cs 1.6
*
*        Installation:
*        -------------------
*        Copy script into plugins and edit plugins.ini
*        Copy item diablo directory into addons/amxmodx
*        If you amx directory is not called addons/amxmodx/.. just create a new path
*
*        Credits:
*        -----------------
*        Spacedude
*        Some others back when amx mod started :]
*        twistedeuphoria
*
*        diablo_xpbonus = Xp on each kill (without bonus)
*        diablo_durability = Will your item loose durability on damage? And how much each time
*        diablo_saveitems = Save items when map changes
*        diablo_spawnchance = 1/x chance to spawn powerup on each roundstart
*
*        Contact:
*        -----------------
*        email: [email protected]
*
/ ================================================================================================= */

new Basepath[128]        //Path from Cstrike base directory

#include <amxmodx>
#include <amxmisc>

#include <engine>
#include <fakemeta>
#include <cstrike>

#include <fun>
#include <fakemeta_util>
#include <nvault>


#define RESTORETIME 30.0        //How long from server start can players still get their item trasferred (s)
#define MAX 32                        //Max number of valid player entities

//#define CHEAT 1                //Cheat for testing purposes
#define CS_PLAYER_HEIGHT 72.0
#define GLOBAL_COOLDOWN 0.5
#define TASK_GREET 240
#define TASK_HUD 120
#define TASK_HOOK 360
#define MAX_PLAYERS 32
#define BASE_SPEED        245.0
#define GLUTON 95841
new Float:agi=BASE_SPEED
new round_status
new DemageTake[33]
new DemageTake1[33]
new weapon, clip, ammo
#define x 0
#define y 1
#define z 2

#define TASK_CHARGE 100
#define TASK_NAME 48424
#define TASK_FLASH_LIGHT 81184

#define TASKID_REVIVE        1337
#define TASKID_RESPAWN        1338
#define TASKID_CHECKRE        1339
#define TASKID_CHECKST        13310
#define TASKID_ORIGIN        13311
#define TASKID_SETUSER        13312

#define pev_zorigin        pev_fuser4
#define seconds(%1) ((1<<12) * (%1))

#define OFFSET_CAN_LONGJUMP    356

#define MAX_FLASH 15                //pojemnosc barejii maga (sekund)

new SOUND_START[]        = "items/medshot4.wav"
new SOUND_FINISHED[]        = "items/smallmedkit2.wav"
new SOUND_FAILED[]        = "items/medshotno1.wav"
new SOUND_EQUIP[]        = "items/ammopickup2.wav"

enum
{
        ICON_HIDE = 0,
        ICON_SHOW,
        ICON_FLASH
}

new g_haskit[MAX+1]
new Float:g_revive_delay[MAX+1]
new Float:g_body_origin[MAX+1][3]
new bool:g_wasducking[MAX+1]

new g_vault

new g_msg_bartime
new g_msg_screenfade
new g_msg_statusicon
new g_msg_clcorpse

new cvar_revival_time
new cvar_revival_health
new cvar_revival_dis


new attacker
new attacker1
new flashlight[33]
new flashbattery[33]
new flashlight_r
new flashlight_g
new flashlight_b

new planter
new defuser

new map_end = 0

// max clip
stock const maxClip[31] = { -1, 13, -1, 10,  1,  7,  1,  30, 30,  1,  30,  20,  25, 30, 35, 25,  12,  20,
                        10,  30, 100,  8, 30,  30, 20,  2,  7, 30, 30, -1,  50 };

// max bpammo
stock const maxAmmo[31] = { -1, 52, -1, 90, -1, 32, -1, 100, 90, -1, 120, 100, 100, 90, 90, 90, 100, 100,
                        30, 120, 200, 32, 90, 120, 60, -1, 35, 90, 90, -1, 100 };

new gmsgDeathMsg
new gmsgStatusText
new gmsgBartimer
new gmsgScoreInfo
new gmsgHealth

new bool:freeze_ended
new c4state[33]
new c4bombc[33][3]
new c4fake[33]
new fired[33]
new bool:ghost_check
new ghosttime[33]
new ghoststate[33]

new sprite_blood_drop = 0
new sprite_blood_spray = 0
new sprite_gibs = 0
new sprite_white = 0
new sprite_fire = 0
new sprite_beam = 0
new sprite_boom = 0
new sprite_line = 0
new sprite_lgt = 0
new sprite_laser = 0
new sprite_ignite = 0
new sprite_smoke = 0

new player_xp[33] = 0                //Holds players experience
new player_lvl[33] = 1                        //Holds players level
new player_point[33] = 0                //Holds players level points
new player_item_id[33] = 0        //Items id
new player_item_name[33][128]  //The items name
new player_intelligence[33]
new player_strength[33]
new player_agility[33]
new Float:player_damreduction[33]
new player_dextery[33]
new player_class[33]               
new Float:player_huddelay[33]

//Item attributes
new player_b_vampire[33] = 1        //Vampyric damage
new player_b_damage[33] = 1        //Bonus damage
new player_b_money[33] = 1        //Money bonus
new player_b_gravity[33] = 1        //Gravity bonus : 1 = best
new player_b_inv[33] = 1                //Invisibility bonus
new player_b_grenade[33] = 1        //Grenade bonus = 1/chance to kill
new player_b_reduceH[33] = 1        //Reduces player health each round start
new player_b_theif[33] = 1        //Amount of money to steal
new player_b_respawn[33] = 1        //Chance to respawn upon death
new player_b_explode[33] = 1        //Radius to explode upon death
new player_b_heal[33] = 1        //Ammount of hp to heal each 5 second
new player_b_gamble[33] = 1        //Random skill each round : value = vararity
new player_b_blind[33] = 1        //Chance 1/Value to blind the enemy
new player_b_fireshield[33] = 1        //Protects against explode and grenade bonus
new player_b_meekstone[33] = 1        //Ability to lay a fake c4 and detonate
new player_b_teamheal[33] = 1        //How many hp to heal when shooting a teammate
new player_b_redirect[33] = 1        //How much damage will the player redirect
new player_b_fireball[33] = 1        //Ability to shot off a fireball value = radius
new player_b_ghost[33] = 1        //Ability to walk through stuff
new player_b_eye[33] = 1                //Ability to place camera
new player_b_blink[33] = 1        //Ability to get a railgun
new player_b_windwalk[33] = 1        //Ability to windwalk away
new player_b_usingwind[33] = 1        //Is player using windwalk
new player_b_froglegs[33] = 1        //Ability to hold down duck for 4 sec to frog-jump
new player_b_silent[33]        = 1        //Is player silent
new player_b_dagon[33] = 1        //Ability to nuke an opponent
new player_b_sniper[33] = 1        //Ability to kill in 1/sniper with scout
new player_b_jumpx[33] = 1        //Ability to double jump
new player_b_smokehit[33] = 1        //Ability to hit and kill with smoke :]
new player_b_extrastats[33] = 1        //Ability to gain extra stats
new player_b_firetotem[33] = 1        //Ability to put down a fire totem that explodes after 7 seconds
new player_b_hook[33] = 1        //Ability to grap a player a hook him towards you
new player_b_darksteel[33] = 1        //Ability to damage double from behind the target       
new player_b_illusionist[33] = 1        //Ability to use the illusionist escape
new player_b_mine[33] = 1        //Ability to lay down mines
new skinchanged[33]
new player_dc_name[33][99]        //Information about last disconnected players name
new player_dc_item[33]                //Information about last disconnected players item
new player_sword[33]                //nowyitem
new player_ring[33]                //ring stats bust +5

new Float:player_b_oldsen[33]        //Players old sens

new bool:player_b_dagfired[33]        //Fired dagoon?
new bool:used_item[33]
new jumps[33]                        //Keeps charge with the number of jumps the user has made
new bool:dojump[33]                //Are we jumping?
new item_boosted[33]                //Has this user boosted his item?
new earthstomp[33]
new bool:falling[33]
new gravitytimer[33]
new item_durability[33]        //Durability of hold item
new CTSkins[4][]={"sas","gsg9","urban","gign"}
new TSkins[4][]={"arctic","leet","guerilla","terror"}
new SWORD_VIEW[]        = "models/diablomod/v_knife.mdl"
new SWORD_PLAYER[]      = "models/diablomod/p_knife.mdl"
new KNIFE_VIEW[]        = "models/v_knife.mdl"
new KNIFE_PLAYER[]        = "models/p_knife.mdl"
new C4_VIEW[]                = "models/v_c4.mdl"
new C4_PLAYER[]        = "models/p_c4.mdl"
new HE_VIEW[] = "models/v_hegrenade.mdl"
new HE_PLAYER[] = "models/p_hegrenade.mdl"
new FL_VIEW[] = "models/v_flashbang.mdl"
new FL_PLAYER[] = "models/p_flashbang.mdl"
new SE_VIEW[] = "models/v_smokegrenade.mdl"
new SE_PLAYER[] = "models/p_smokegrenade.mdl"

new cbow_VIEW[]  = "models/diablomod/v_crossbow.mdl"
new cvow_PLAYER[]= "models/diablomod/p_crossbow.mdl"
new cbow_bolt[]  = "models/diablomod/Crossbow_bolt.mdl"

new LeaderCT = -1
new LeaderT = -1

new JumpsLeft[33]
new JumpsMax[33]

new loaded_xp[33]

enum { NONE = 0, Mag, Mnich, Paladyn, Zabojca, Nekromanta, Barbarzynca, Ninja, Hunter }
new Race[9][18] = { "None","Mag","Mnich","Paladyn","Zabojca","Nekromanta","Barbarzynca", "Ninja", "Lowca" }
new race_heal[9] = { 100,95,150,130,100,90,110,170,120 }

new LevelXP[101] = { 0,50,125,225,340,510,765,1150,1500,1950,2550,3300,4000,4800,5800,7000,8500,9500,10500,11750,13000, //21
14300,15730,17300,19030,20900,23000,24000,25200,26400,27700,29000,30500,32000,33600,35300,37000,39000,41000,43000,45100,//41
47400,49800,52300,55000,57800,60700,63700,66900,70200,73700,77400,80000,82400,84900,87500,90000,92700,95500,98300,101000,//61
104000,107000,110000,113000,116000,120000,123000,126700,130000,134000,138000,142000,146000,150000,154000,158000,163000,168000,173000,178000,//81
183000,188000,194000,200000,206000,212000,218000,225000,232000,239000,246000,253000,261000,269000,277000,285000,294000,303000,500000,9999999/*101*/}

new player_class_lvl[33][9]
new player_class_lvl_save[33]

new player_xp_old[33]

new database_user_created[33]

//Used for powerupsystem
new CTstart[3]
new Tstart[3]
new NextPowerup[3]
new bool:spawnset = false
new bool:havespawn = false
new bool:powerup_taken = false

//For Hook and powerup sy
new hooked[33]
new Float:player_global_cooldown[33]

//For optimization
new last_update_xp[33]
new Float:last_update_perc[33]
new bool:use_addtofullpack
#define ICON_HIDE 0
#define ICON_SHOW 1
#define ICON_FLASH 2
#define ICON_S "suithelmet_full"


new wear_sun[33]


//Flags a user can have
enum
{
        Flag_Ignite = 0,
        Flag_Hooking,
        Flag_Rot,
        Flag_Dazed,
        Flag_Illusion,
        Flag_Moneyshield,
        Flag_Teamshield,
        Flag_Teamshield_Target,
        num_of_flags
}


//Flags
new afflicted[33][num_of_flags]

//noze

new max_knife[33]
new player_knife[33]
new Float:tossdelay[33]

//luk

new Float:bowdelay[33]
new bow[33]
new button[33]

// hunter - slad

#define TARACE_TASK 91203

new trace_bool[33]

#define NADE_VELOCITY        EV_INT_iuser1
#define NADE_ACTIVE        EV_INT_iuser2       
#define NADE_TEAM        EV_INT_iuser3       
#define NADE_PAUSE        EV_INT_iuser4

new cvar_throw_vel = 90 // def: 90
new cvar_activate_dis = 175 // def 190
new cvar_nade_vel = 280 //def 280
new Float: cvar_explode_delay = 0.5 // def 0.50


new g_TrapMode[33]
new g_GrenadeTrap[33] = {0, ... }
new Float:g_PreThinkDelay[33]

/* PLUGIN CORE REDIRECTING TO FUNCTIONS ========================================================== */


public plugin_init()
{
        new map[32]
        get_mapname(map,31)
        new times[64]
        get_time("%m/%d/%Y - %H:%M:%S" ,times,63)
        log_to_file("addons/amxmodx/logs/diablo.log","%s ### MAPA: %s ### ",times,map)
       
        g_vault = nvault_open("Diablo_stats")
       
        cvar_revival_time        = register_cvar("amx_revkit_time",        "3")
        cvar_revival_health        = register_cvar("amx_revkit_health",        "25")
        cvar_revival_dis        = register_cvar("amx_revkit_distance",        "70.0")
       
        g_msg_bartime        = get_user_msgid("BarTime")
        g_msg_clcorpse        = get_user_msgid("ClCorpse")
        g_msg_screenfade= get_user_msgid("ScreenFade")
        g_msg_statusicon= get_user_msgid("StatusIcon")

        register_message(g_msg_clcorpse, "message_clcorpse")
       
        register_event("HLTV",                "event_hltv",        "a", "1=0", "2=0")
       
        register_forward(FM_Touch,                "fwd_touch")
        register_forward(FM_EmitSound,                "fwd_emitsound")
        register_forward(FM_PlayerPostThink,        "fwd_playerpostthink")

       
        register_plugin("DiabloMod","5.8a PL","Miczu & GuTeK")
        register_cvar("diablomod_version","5.8a PL",FCVAR_SERVER)
       
        register_cvar("flashlight_custom","1");
        register_cvar("flashlight_drain","1.0");
        register_cvar("flashlight_charge","0.5");
        register_cvar("flashlight_radius","8");
        register_cvar("flashlight_decay","90");
        register_event("Flashlight","event_flashlight","b");
               
        register_event("CurWeapon","CurWeapon","be")
        register_event("ResetHUD", "ResetHUD", "abe")
        register_event("ScreenFade","det_fade","be","1!0","2!0","7!0")
        register_event("DeathMsg","DeathMsg","ade")
        register_event("Damage", "Damage", "b", "2!0")
        register_event("SendAudio","freeze_over","b","2=%!MRAD_GO","2=%!MRAD_MOVEOUT","2=%!MRAD_LETSGO","2=%!MRAD_LOCKNLOAD")
        register_event("SendAudio","freeze_begin","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw")
       
        register_event("SendAudio", "award_defuse", "a", "2&%!MRAD_BOMBDEF")         
        register_event("BarTime", "bomb_defusing", "be", "1=10", "1=5")
       
        register_logevent("award_plant", 3, "2=Planted_The_Bomb");       
        register_event("StatusIcon", "got_bomb", "be", "1=1", "1=2", "2=c4")
               
        register_event("TextMsg", "award_hostageALL", "a", "2&#All_Hostages_R" );
        register_event("TextMsg","host_killed","b","2&#Killed_Hostage")
        register_event("SendAudio","eventGrenade","bc","2=%!MRAD_FIREINHOLE")
        register_event("TextMsg", "freeze_begin", "a", "2=#Game_will_restart_in")
        register_clcmd("say drop","dropitem")
        register_clcmd("say /drop","dropitem")
        register_clcmd("say /przedmiot","iteminfo")
        register_clcmd("say /item","iteminfo")
        register_clcmd("say /noweitemy","show_menu_item")
        register_clcmd("say /itemy","show_menu_item")
        register_clcmd("przedmiot","iteminfo")
        register_clcmd("/przedmiot","iteminfo")
        register_clcmd("say /przedmiot","iteminfo")
        register_clcmd("say /Pomoc","helpme")
        register_clcmd("say /Klasa","changerace")
        register_clcmd("say /speed","speed")
       
        register_clcmd("say klasa","changerace")
        //register_clcmd("say /gracze","cmd_who")               
        register_clcmd("klasa","changerace")
        register_clcmd("say /klasa","changerace")
        register_clcmd("say /klasy","show_menu_klasy")
        register_clcmd("say /zmianaklasy","changerace")
        register_clcmd("say zmianaklasy","changerace")
        register_clcmd("say /czary", "showskills")
        register_clcmd("say czary", "showskills")
        register_clcmd("say /menu","showmenu")
        register_clcmd("menu","showmenu")
        register_clcmd("say /komendy","komendy")
        register_clcmd("pomoc","helpme")
        register_clcmd("say /rune","buyrune")
        register_clcmd("/rune","buyrune")
        register_clcmd("rune","buyrune")       
        register_clcmd("/czary","showskills")
        register_clcmd("/czary","showskills")
        register_clcmd("say /czary","showskills")
        register_clcmd("say /czary","showskills")
        register_clcmd("say /savexp","savexpcom")
        //register_clcmd("say /loadxp","LoadXP")
        register_clcmd("say /reset","reset_skill")
        register_clcmd("reset","reset_skill")       
        register_clcmd("/reset","reset_skill")
       
        register_clcmd("mod","mod_info")
       
        register_menucmd(register_menuid("Wybierz Staty"), 1023, "skill_menu")
        register_menucmd(register_menuid("info klas"), 1023, "klasy")
        register_menucmd(register_menuid("Opcje"), 1023, "option_menu")
        register_menucmd(register_menuid("Wybierz Klase"), 1023, "select_class_menu")
        register_menucmd(register_menuid("Sklep z runami"), 1023, "select_rune_menu")
        register_menucmd(register_menuid("Nowe Itemy"), 1023, "nowe_itemy")
        gmsgDeathMsg = get_user_msgid("DeathMsg")
        gmsgStatusText = get_user_msgid("StatusText")
        gmsgBartimer = get_user_msgid("BarTime")
        gmsgScoreInfo = get_user_msgid("ScoreInfo")
        register_cvar("diablo_xpbonus","10",0)
        register_cvar("diablo_xpbonus2","100",0)
        register_cvar("diablo_durability","10",0)
        register_cvar("diablo_spawnchance","2",0)
        register_cvar("SaveXP", "1")
        set_msg_block ( gmsgDeathMsg, BLOCK_SET )
        set_task(5.0, "Timed_Healing", 0, "", 0, "b")
        set_task(1.0, "Timed_Ghost_Check", 0, "", 0, "b")
        set_task(0.8, "UpdateHUD",0,"",0,"b")
        register_think("PlayerCamera","Think_PlayerCamera");
        register_think("PowerUp","Think_PowerUp")
        register_think("Effect_Rot","Effect_Rot_Think")
        register_logevent("RoundStart", 2, "0=World triggered", "1=Round_Start")
        register_clcmd("fullupdate","fullupdate")
        register_forward(FM_WriteString, "FW_WriteString")
        register_think("Effect_Ignite_Totem", "Effect_Ignite_Totem_Think")
        register_think("Effect_Ignite", "Effect_Ignite_Think")
        register_think("Effect_Slow","Effect_Slow_Think")
        register_think("Effect_Timedflag","Effect_Timedflag_Think")
        register_think("Effect_MShield","Effect_MShield_Think")
        register_think("Mine","Mine_Think")
        register_think("Effect_Teamshield","Effect_Teamshield_Think")
        register_think("Effect_Healing_Totem","Effect_Healing_Totem_Think")
        register_forward(FM_AddToFullPack, "client_AddToFullPack")
        register_event("Damage", "Damage1", "b", "2!0")
        register_event("SendAudio","freeze_over1","b","2=%!MRAD_GO","2=%!MRAD_MOVEOUT","2=%!MRAD_LETSGO","2=%!MRAD_LOCKNLOAD")
        register_event("SendAudio","freeze_begin1","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw")

        register_forward(FM_PlayerPreThink, "Forward_FM_PlayerPreThink")
               
        register_cvar("diablo_dir", "addons/amxmodx/diablo/")
       
        get_cvar_string("diablo_dir",Basepath,127)
       
        register_event("Health", "Health", "be", "1!255")
        register_cvar("diablo_show_health","1")
        gmsgHealth = get_user_msgid("Health")
        //noze
       
        register_touch("throwing_knife", "player", "touchKnife")
        register_touch("throwing_knife", "worldspawn",                "touchWorld")
        register_touch("throwing_knife", "func_wall",                "touchWorld")
        register_touch("throwing_knife", "func_door",                "touchWorld")
        register_touch("throwing_knife", "func_door_rotating",        "touchWorld")
        register_touch("throwing_knife", "func_wall_toggle",        "touchWorld")
        register_touch("throwing_knife", "func_breakable",        "touchWorld")
        register_cvar("diablo_knife","20")
        register_cvar("diablo_knife_speed","1000")
       
        register_touch("xbow_arrow", "player",                        "toucharrow")
        register_touch("xbow_arrow", "worldspawn",                "touchWorld2")
        register_touch("xbow_arrow", "func_wall",                "touchWorld2")
        register_touch("xbow_arrow", "func_door",                "touchWorld2")
        register_touch("xbow_arrow", "func_door_rotating",        "touchWorld2")
        register_touch("xbow_arrow", "func_wall_toggle",        "touchWorld2")
        register_touch("xbow_arrow", "func_breakable",                "touchWorld2")
        register_cvar("diablo_arrow","120")
        register_cvar("diablo_arrow_speed","1500")
       
        register_cvar("diablo_klass_delay","2.5")
       
        //Koniec noze
       
        register_think("grenade", "think_Grenade")
        register_think("think_bot", "think_Bot")
        _create_ThinkBot()
       
       
       
        return PLUGIN_CONTINUE 
}

public Health(id)
{
        if(get_cvar_num("diablo_show_health")==1)
        {
                new health = read_data(1)
                if(health>255)
                {
                        message_begin( MSG_ONE, gmsgHealth, {0,0,0}, id )
                        write_byte( 255 )
                        message_end()
                }
        }
}

public speed(id)
{
        new Float:spd = get_user_maxspeed(id)
        client_print(id,print_chat,"Max: %f",spd)
       
        new Float:vect[3]
        entity_get_vector(id,EV_VEC_velocity,vect)
        new Float: sped= floatsqroot(vect[0]*vect[0]+vect[1]*vect[1]+vect[2]*vect[2])
       
        client_print(id,print_chat,"Teraz: %f",sped)
}

public plugin_precache()
{
        precache_model("models/rpgrocket.mdl")
        precache_model("models/bag.mdl")
        precache_model("models/zombie.mdl")
        precache_model("addons/amxmodx/diablo/mine.mdl")
        precache_model("addons/amxmodx/diablo/totem_ignite.mdl")
        precache_model("addons/amxmodx/diablo/totem_heal.mdl")
        precache_model("models/player/arctic/arctic.mdl")
        precache_model("models/player/leet/leet.mdl")
        precache_model("models/player/guerilla/guerilla.mdl")
        precache_model("models/player/terror/terror.mdl")
        precache_model("models/player/urban/urban.mdl")
        precache_model("models/player/sas/sas.mdl")
        precache_model("models/player/gsg9/gsg9.mdl")
        precache_model("models/player/gign/gign.mdl")
        precache_model(SWORD_VIEW)   
        precache_model(SWORD_PLAYER)
        precache_model(KNIFE_VIEW)   
        precache_model(KNIFE_PLAYER)
        precache_model(C4_VIEW)   
        precache_model(C4_PLAYER)
        precache_model(HE_VIEW)   
        precache_model(HE_PLAYER)
        precache_model(FL_VIEW)   
        precache_model(FL_PLAYER)
        precache_model(SE_VIEW)   
        precache_model(SE_PLAYER)       
        precache_sound("weapons/xbow_hit2.wav")
        precache_sound("weapons/xbow_fire1.wav")
        sprite_blood_drop = precache_model("sprites/blood.spr")
        sprite_blood_spray = precache_model("sprites/bloodspray.spr")
        sprite_ignite = precache_model("addons/amxmodx/diablo/flame.spr")
        sprite_smoke = precache_model("sprites/steam1.spr")
        sprite_laser = precache_model("sprites/laserbeam.spr")
        sprite_boom = precache_model("sprites/zerogxplode.spr")
        sprite_line = precache_model("sprites/dot.spr")
        sprite_lgt = precache_model("sprites/lgtning.spr")
        sprite_white = precache_model("sprites/white.spr")
        sprite_fire = precache_model("sprites/explode1.spr")
        sprite_gibs = precache_model("models/hgibs.mdl")
        sprite_beam = precache_model("sprites/zbeam4.spr")
       
        precache_model("models/player/arctic/arctic.mdl")
        precache_model("models/player/terror/terror.mdl")
        precache_model("models/player/leet/leet.mdl")
        precache_model("models/player/guerilla/guerilla.mdl")
        precache_model("models/player/gign/gign.mdl")
        precache_model("models/player/sas/sas.mdl")
        precache_model("models/player/gsg9/gsg9.mdl")
        precache_model("models/player/urban/urban.mdl")
        precache_model("models/player/vip/vip.mdl")
               
        precache_sound(SOUND_START)
        precache_sound(SOUND_FINISHED)
        precache_sound(SOUND_FAILED)
        precache_sound(SOUND_EQUIP)

        precache_sound("weapons/knife_hitwall1.wav")
        precache_sound("weapons/knife_hit4.wav")
        precache_sound("weapons/knife_deploy1.wav")
        precache_model("models/diablomod/w_throwingknife.mdl")
       
        precache_model(cbow_VIEW)
        precache_model(cvow_PLAYER)
        precache_model(cbow_bolt)
}

public plugin_cfg() {
       
        server_cmd("sv_maxspeed 1500")
       
}

public savexpcom(id)
{
        if(get_cvar_num("SaveXP") == 1)
        {
   
        SaveXP(id)
        }
}

public SaveXP(id){
        new name[32];   
        get_user_name(id,name,31);
       
        replace_all(name, 31, " ", "'")
       
        new vaultkey[64],vaultdata[256]
        format(vaultkey,63,"%s-Dbmod",name)
        format(vaultdata,255,"%i#%i#%i#%i#%i#%i#%i#%i",player_class[id],player_xp[id],player_lvl[id],player_intelligence[id],player_strength[id],player_point[id],player_agility[id],player_dextery[id])
        nvault_set(g_vault,vaultkey,vaultdata)
        return PLUGIN_HANDLED
}
   
public LoadXP(id){
        new name[32];   
        get_user_name(id,name,31);
       
        replace_all(name, 31, " ", "'")
       
        new vaultkey[64],vaultdata[256]
        format(vaultkey,63,"%s-Dbmod",name)
        format(vaultdata,255,"%i#%i#%i#%i#%i#%i#%i#%i",player_class[id],player_xp[id],player_lvl[id],player_intelligence[id],player_strength[id],player_point[id],player_agility[id],player_dextery[id])
        nvault_get(g_vault,vaultkey,vaultdata,255)
       
        replace_all(vaultdata, 255, "#", " ")
       
        new playerclass[33], playerxp[33],playerlvl[33],playerintelligence[33],playerstrength[33],playerpoint[33],playeragility[33],playerdextery[33]
       
        parse(vaultdata, playerclass, 32, playerxp, 32, playerlvl, 32, playerintelligence, 32, playerstrength, 32, playerpoint, 32, playeragility, 32, playerdextery, 32)
       
        player_class[id] = str_to_num(playerclass)
        player_xp[id] = str_to_num(playerxp)
        player_lvl[id] = str_to_num(playerlvl)
        player_intelligence[id] = str_to_num(playerintelligence)
        player_strength[id] = str_to_num(playerstrength)
        player_point[id] = str_to_num(playerpoint)
        player_agility[id] = str_to_num(playeragility)
        player_dextery[id] = str_to_num(playerdextery)
       
        player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)
       
        give_knife(id)
       
        return PLUGIN_HANDLED
}

public reset_skill(id)
{       
        client_print(id,print_chat,"Reset skill'ow")
        player_point[id] = player_lvl[id]*2-2
        player_intelligence[id] = 0
        player_strength[id] = 0
        player_agility[id] = 0
       
        player_dextery[id] = 0
        skilltree(id)
        set_speedchange(id)
        player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)
}


public freeze_over()
{
        //new Float: timea
        //timea=get_cvar_float("diablo_klass_delay")
        set_task(get_cvar_float("diablo_klass_delay"), "freezeover", 3659, "", 0, "")
}

public freezeover()
{
        freeze_ended = true
}

public freeze_begin()
{
        freeze_ended = false
}


public RoundStart(){
        for (new i=0; i < 33; i++){
                used_item[i] = false
                DemageTake1[i]=1
                count_jumps(i)
                give_knife(i)
                JumpsLeft[i]=JumpsMax[i]
               
                if(player_class[i] == Nekromanta) g_haskit[i]=1
                else g_haskit[i]=0
               
                set_renderchange(i)       
        }
               
        kill_all_entity("throwing_knife")
       
        Bot_Setup()               
        ghost_check = false
        check_class()
        use_addtofullpack = false
        SpawnPowerup()
}

#if defined CHEAT
public giveitem(id)
{
        award_item(id, 25)
        return PLUGIN_HANDLED
}

public benchmark(id)
{
        new Float:nowtime = halflife_time();
        new iterations = 10
       
        for (new i=0; i < iterations; i++)
        {
                UpdateHUD()
        }
       
        new Float:timespent = halflife_time()-nowtime
       
        client_print(id,print_chat,"Benchmark on: UpdateHUD() with %i iterations done in %f seconds",iterations,timespent)
}

#endif

/* BASIC FUNCTIONS ================================================================================ */
public csw_c44(id)
{
        client_cmd(id,"weapon_knife")
}

public CurWeapon(id)
{       
        new clip,ammo
        new weapon=get_user_weapon(id,clip,ammo)
        if ((weapon !=6) && (weapon !=29) && (player_class[id] == Ninja)) engclient_cmd(id,"weapon_knife")
       

        if (is_user_connected(id))
        {
                if(player_class[id]==Paladyn && weapon == CSW_KNIFE && JumpsLeft[id]>0){
                        fm_set_user_longjump(id,true,true)
                }
                else{
                        fm_set_user_longjump(id,false,true)
                }

                //if (player_item_id[id] == 17 || player_b_usingwind[id] == 1)// engclient_cmd(id,"weapon_knife")       
                               
                if(player_sword[id] == 1)
                {
                       
                        if(weapon == CSW_KNIFE){
                                entity_set_string(id, EV_SZ_viewmodel, SWORD_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, SWORD_PLAYER) 
                        }
                        if(weapon == CSW_C4){
                                entity_set_string(id, EV_SZ_viewmodel, C4_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, C4_PLAYER) 
                        }
                        if(weapon == CSW_HEGRENADE){
                                entity_set_string(id, EV_SZ_viewmodel, HE_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, HE_PLAYER) 
                        }
                        if(weapon == CSW_FLASHBANG){
                                entity_set_string(id, EV_SZ_viewmodel, FL_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, FL_PLAYER) 
                        }
                        if(weapon == CSW_SMOKEGRENADE){
                                entity_set_string(id, EV_SZ_viewmodel, SE_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, SE_PLAYER) 
                        }
                       
                }
                if(player_sword[id] == 0)
                {       
                        if(weapon == CSW_KNIFE){
                                entity_set_string(id, EV_SZ_viewmodel, KNIFE_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, KNIFE_PLAYER) 
                        }
                        if(weapon == CSW_C4){
                                entity_set_string(id, EV_SZ_viewmodel, C4_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, C4_PLAYER) 
                        }
                        if(weapon == CSW_HEGRENADE){
                                entity_set_string(id, EV_SZ_viewmodel, HE_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, HE_PLAYER) 
                        }
                        if(weapon == CSW_FLASHBANG){
                                entity_set_string(id, EV_SZ_viewmodel, FL_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, FL_PLAYER) 
                        }
                        if(weapon == CSW_SMOKEGRENADE){
                                entity_set_string(id, EV_SZ_viewmodel, SE_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, SE_PLAYER) 
                        }                       
                }
               
                if(bow[id]==1)
                {
                        bow[id]=0
                        if(weapon == CSW_KNIFE)
                        {
                                entity_set_string(id, EV_SZ_viewmodel, KNIFE_VIEW) 
                                entity_set_string(id, EV_SZ_weaponmodel, KNIFE_PLAYER) 
                        }
                }
               
                set_gravitychange(id)
                set_speedchange(id)
                set_renderchange(id)
               
                if(player_class[id] == Nekromanta) g_haskit[id] = true
                else g_haskit[id] = false
               
                write_hud(id)
        }
}


public ResetHUD(id)
{
       
        if (is_user_connected(id))
        {       
                remove_task(id+GLUTON)
                add_strength_bonus(id)
               
               
               
                if (c4fake[id] > 0)
                {
                        remove_entity(c4fake[id])
                        c4fake[id] = 0
                }
               
                if ((player_intelligence[id]+player_strength[id]+player_point[id]+player_agility[id]+player_dextery[id])>(player_lvl[id]*2+12)) reset_skill(id)
               
                fired[id] = 0
                player_b_dagfired[id] = false
                ghoststate[id] = 0
                earthstomp[id] = 0
               
                if (player_b_blink[id] > 0)
                        player_b_blink[id] = 1
               
                if (player_b_usingwind[id] > 0)
                {
                        player_b_usingwind[id] = 0
                }
               
                if (player_point[id] > 0 ) skilltree(id)
                if (player_class[id] == 0) select_class(id)

                add_bonus_gamble(id)                                //MUST be first
                c4state[id] = 0
                client_cmd(id,"hud_centerid 0") 
                auto_help(id)
                add_money_bonus(id)
                set_gravitychange(id)
                add_redhealth_bonus(id)
                SelectBotRace(id)
                set_renderchange(id)
        }
}

public DeathMsg(id)
{
        new weaponname[20]
        new kid = read_data(1)
        new vid = read_data(2)
        new headshot = read_data(3)
        read_data(4,weaponname,31)
               
        reset_player(vid)
        msg_bartime(id, 0)
        static Float:minsize[3]
        pev(vid, pev_mins, minsize)
        if(minsize[2] == -18.0)
                g_wasducking[vid] = true
        else
                g_wasducking[vid] = false
       
        set_task(0.5, "task_check_dead_flag", vid)

        flashbattery[vid] = MAX_FLASH;
        flashlight[vid] = 0;
       
        if(player_sword[id] == 1){
                new clip,ammo
                new weaponID=get_user_weapon(id,clip,ammo)
                if(weaponID == CSW_KNIFE){
                        if(get_user_team(kid) != get_user_team(vid)) {
                                set_user_frags(kid, get_user_frags(kid) + 1)
                                award_kill(kid,vid)
                        }
                }
        }
        if (is_user_connected(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid))
        {
                show_deadmessage(kid,vid,headshot,weaponname)
                award_item(kid,0)
                award_kill(kid,vid)
                add_respawn_bonus(vid)
                add_bonus_explode(vid)
                add_barbarian_bonus(kid)
                register_place(kid)
                if (player_class[kid] == Barbarzynca)
                refill_ammo(kid)
                set_renderchange(kid)
                savexpcom(vid)
        }
}

public Damage(id)
{
        if (is_user_connected(id))
        {
                new damage = read_data(2)
                new weapon
                new bodypart
                new attacker_id = get_user_attacker(id,weapon,bodypart)
                if (is_user_connected(attacker_id) && attacker_id != id)
                {
                               
                        add_damage_bonus(id,damage,attacker_id)
                        add_vampire_bonus(id,damage,attacker_id)
                        add_grenade_bonus(id,attacker_id,weapon)
                        add_theif_bonus(id,attacker_id)
                        add_bonus_blind(id,attacker_id,weapon,damage)
                        add_bonus_redirect(id)
                        add_bonus_necromancer(attacker_id,id)
                        add_bonus_scoutdamage(attacker_id,id,weapon)       
                        add_bonus_darksteel(attacker_id,id,damage)
                        add_bonus_illusion(attacker_id,id,weapon)
                        item_take_damage(id,damage)
                       
                        if (player_class[attacker_id] == Paladyn){
                                new Float:VOLWO[3]
                                new Float:Volvo[3]
                               
                                entity_get_vector(id,EV_VEC_velocity,VOLWO)
                                entity_get_vector(attacker_id,EV_VEC_velocity,Volvo)
                               
                                for(new i=0;i<2;i++) VOLWO[i]+=(Volvo[i]*3.15)
                               
                                entity_set_vector(id,EV_VEC_velocity,VOLWO)
                        }
                        if(player_sword[attacker_id] == 1 && weapon==CSW_KNIFE ){
                               
                                Hurt_Entity(attacker_id,id,35.0)
                               
                        }
                        if (HasFlag(attacker_id,Flag_Ignite))
                                RemoveFlag(attacker_id,Flag_Ignite)
                       
                        if((HasFlag(id,Flag_Illusion) || HasFlag(id,Flag_Teamshield))&& get_user_health(id) - damage > 0)
                        {
                                new weaponname[32]; get_weaponname( weapon, weaponname, 31 ); replace(weaponname, 31, "weapon_", "")
                                UTIL_Kill(attacker_id,id,weaponname)
                        }
                       
                        if (HasFlag(id,Flag_Moneyshield))
                        {
                                if (get_user_health(id)+damage/2 < race_heal[player_class[id]]+player_strength[id])
                                        set_user_health(id,get_user_health(id)+damage/2)
                        }
                               
                        //Add the agility damage reduction, around 45% the curve flattens
                        if (damage > 0 && player_agility[id] > 0)
                        {       
                                new heal = floatround(player_damreduction[id]*damage)
                                if (is_user_alive(id)) set_user_health(id,get_user_health(id)+heal)
                        }       
                       
                        if (HasFlag(id,Flag_Teamshield_Target))
                        {
                                //Find the owner of the shield
                                new owner = find_owner_by_euser(id,"Effect_Teamshield")
                                new weaponname[32]; get_weaponname( weapon, weaponname, 31 ); replace(weaponname, 31, "weapon_", "")
                                if (is_user_alive(owner))
                                {
                                        if(get_user_health(attacker_id)-damage<1) UTIL_Kill(owner,attacker_id,weaponname)
                                        else set_user_health(attacker_id,get_user_health(attacker_id)-damage)
                                       
                                        set_user_health(id,get_user_health(id)+damage/2)
                                }
                        }
                }
                       
                #if defined CHEAT
                new name[32]
                get_user_name(id,name,31)
                if (equal(name,"Admin"))
                {
                        set_user_health(id,race_heal[player_class[id]]+player_strength[id])
                        set_user_hitzones(0, id, 0)
                }

                #endif
                       
        }
}
public un_rander(task_id)
{
        new id = task_id - TASK_FLASH_LIGHT
        if(is_user_connected(id)) set_renderchange(id)
}

public client_PreThink ( id )
{       
        new clip,ammo
        new weapon = get_user_weapon(id,clip,ammo)
        new button2 = get_user_button(id);
       
        if(flashlight[id] && flashbattery[id] && (get_cvar_num("flashlight_custom")) && (player_class[id] == Mag)) {
                new num1, num2, num3
                num1=random_num(0,2)
                num2=random_num(-1,1)
                num3=random_num(-1,1)
                flashlight_r+=1+num1
                if (flashlight_r>250) flashlight_r-=245
                flashlight_g+=1+num2
                if (flashlight_g>250) flashlight_g-=245
                flashlight_b+=-1+num3
                if (flashlight_b<5) flashlight_b+=240               
                new origin[3];
                get_user_origin(id,origin,3);
                message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
                write_byte(27); // TE_DLIGHT
                write_coord(origin[0]); // X
                write_coord(origin[1]); // Y
                write_coord(origin[2]); // Z
                write_byte(get_cvar_num("flashlight_radius")); // radius
                write_byte(flashlight_r); // R
                write_byte(flashlight_g); // G
                write_byte(flashlight_b); // B
                write_byte(1); // life
                write_byte(get_cvar_num("flashlight_decay")); // decay rate
                message_end();
               
                new index1, bodypart1
                get_user_aiming(id,index1,bodypart1)
                if ((get_user_team(id)!=get_user_team(index1)) && (index1!=0))
                {
                        if ((index1!=54) && (is_user_connected(index1))) set_user_rendering(index1,kRenderFxGlowShell,flashlight_r,flashlight_g,flashlight_b,kRenderNormal,4)       
                        remove_task(TASK_FLASH_LIGHT+index1);
                        set_task(7.5, "un_rander",TASK_FLASH_LIGHT+index1)
                        //set_task(15.0,"un_rander",TASK_NAME,index1)
                }
        }

        //Before freeze_ended check
        if (((player_b_silent[id] > 0) || (player_class[id] == Zabojca)) && is_user_alive(id))
                entity_set_int(id, EV_INT_flTimeStepSound, 300)
               
        new Float:vect[3]
        entity_get_vector(id,EV_VEC_velocity,vect)
        new Float: sped= floatsqroot(vect[0]*vect[0]+vect[1]*vect[1]+vect[2]*vect[2])
        if((get_user_maxspeed(id)*5)>(sped*9))
                entity_set_int(id, EV_INT_flTimeStepSound, 300)
       
        //bow model
        if (button2 & IN_RELOAD && (weapon == CSW_KNIFE) && button[id]==0 && player_class[id]==Hunter){
                bow[id]++
                button[id] = 1;
                command_bow(id)
        }
       
        if ((!(button2 & IN_RELOAD)) && (weapon == CSW_KNIFE) && button[id]==1) button[id]=0
        //
       
        if (!freeze_ended)
                return PLUGIN_CONTINUE
       
        if (earthstomp[id] != 0 && is_user_alive(id))
        {
                static Float:fallVelocity;
                pev(id,pev_flFallVelocity,fallVelocity);

                if(fallVelocity) falling[id] = true
                else falling[id] = false;
        }

       
        if (player_b_jumpx[id] > 0) Prethink_Doublejump(id)
        if (player_b_blink[id] > 0) Prethink_Blink(id)       
        if (player_b_usingwind[id] == 1) Prethink_usingwind(id)
        if (player_b_oldsen[id] > 0) Prethink_confuseme(id)
        if (player_b_froglegs[id] > 0) Prethink_froglegs(id)

       
        //USE Button actives USEMAGIC
        if (pev(id,pev_button) & IN_USE )
                Use_Spell(id)
       
        if(player_class[id]==Ninja && (pev(id,pev_button) & IN_RELOAD)) command_knife(id)
        else if (pev(id,pev_button) & IN_RELOAD && (weapon == CSW_KNIFE) && max_knife[id]>0) command_knife(id)
               
        ///////////////////// BOW /////////////////////////
        if(player_class[id]==Hunter)
        {
                //xbow               
               
                if(bow[id] == 1)
                {
                        if((bowdelay[id] + 4.25 - float(player_intelligence[id]/25))< get_gametime() && button2 & IN_ATTACK)
                        {
                                bowdelay[id] = get_gametime()
                                command_arrow(id)
                        }
                        entity_set_int(id, EV_INT_button, (button2 & ~IN_ATTACK) & ~IN_ATTACK2)
                }
       
               
               
               
                // nade
               
                if(g_GrenadeTrap[id] && button2 & IN_ATTACK2)
                {
                        switch(weapon)
                        {
                                case CSW_HEGRENADE, CSW_FLASHBANG, CSW_SMOKEGRENADE:
                                {
                                        if((g_PreThinkDelay[id] + 0.28) < get_gametime())
                                        {
                                                switch(g_TrapMode[id])
                                                {
                                                        case 0: g_TrapMode[id] = 1
                                                        case 1: g_TrapMode[id] = 0
                                                }
                                                client_print(id, print_center, "Grenade Trap %s", g_TrapMode[id] ? "[ON]" : "[OFF]")
                                                g_PreThinkDelay[id] = get_gametime()
                                        }
                                }
                                default: g_TrapMode[id] = 0
                        }
                }
               
        }
        ///////////////////////////////////////////////////
       
        return PLUGIN_CONTINUE               
}

public client_PostThink( id )
{
        if (player_b_jumpx[id] > 0) Postthink_Doubeljump(id)
        if (earthstomp[id] != 0 && is_user_alive(id))
        {
                        if (!falling[id]) add_bonus_stomp(id)
                        else set_pev(id,pev_watertype,-3)
        }
       
}

public client_AddToFullPack(ent_state,e,edict_t_ent,edict_t_host,hostflags,player,pSet)
{
        //No players need this rather cpu consuming function - dont run
        if (!use_addtofullpack)
                return FMRES_HANDLED
               
        if (!pev_valid(e)|| !pev_valid(edict_t_ent) || !pev_valid(edict_t_host))
                return FMRES_HANDLED
                       
        new classname[32]
        pev(e,pev_classname,classname,31)
       
        new hostclassname[32]
        pev(edict_t_host,pev_classname,hostclassname,31)
               
       
        if (equal(classname,"player") && equal(hostclassname,"player") && player)
        {
                // only take effect if both players are alive & and not somthing else like a ladder
                if (is_user_alive(e) && is_user_alive(edict_t_host) && e != edict_t_host)
                {
                        //host looks at e
                        if (HasFlag(e,Flag_Illusion))
                                return FMRES_SUPERCEDE
                                               
                        //E Is looking at t and t has the flag
                        if (HasFlag(edict_t_host,Flag_Illusion))
                                return FMRES_SUPERCEDE                       
                }
                                       
        }
                       
        return FMRES_HANDLED
               
}

/* FUNCTIONS ====================================================================================== */

public skilltree(id)
{
        new text[513]
        new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)
       
       
        format(text, 512, "\yWybierz Staty- \rPunkty: %i^n^n\w1. Inteligencja [%i] [Wieksze obrazenia czarami]^n\w2. Sila [%i] [Wiecej zycia]^n\w3. Zrecznosc [%i] [Bronie zadaja ci mniejsze obrazenia]^n\w4. Zwinnosc [%i] [Szybciej biegasz i magia zadaje ci mniejsze obrazenia]",player_point[id],player_intelligence[id],player_strength[id],player_agility[id],player_dextery[id])
       
        keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)
        show_menu(id, keys, text)
        return PLUGIN_HANDLED 
}


public skill_menu(id, key)
{
        switch(key)
        {
                case 0:
                {       
                        if (player_intelligence[id]<50){
                                player_point[id]-=1
                                player_intelligence[id]+=1
                        }
                        else client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
                       
                }
                case 1:
                {       
                        if (player_strength[id]<50){
                                player_point[id]-=1       
                                player_strength[id]+=1
                        }
                        else client_print(id,print_center,"Maxymalny poziom sily osiagniety")
                }
                case 2:
                {       
                        if (player_agility[id]<50){
                                player_point[id]-=1
                                player_agility[id]+=1
                                player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)
                        }
                        else client_print(id,print_center,"Maxymalny poziom zrecznosci osiagniety")
                       
                }
                case 3:
                {       
                        if (player_dextery[id]<50){
                                player_point[id]-=1
                                player_dextery[id]+=1
                                set_speedchange(id)
                        }
                        else client_print(id,print_center,"Maxymalny poziom zwinnosci osiagniety")
                }
        }
       
        if (player_point[id] > 0)
                skilltree(id)
       
       
        return PLUGIN_HANDLED
}

/* ==================================================================================================== */

public show_deadmessage(killer_id,victim_id,headshot,weaponname[])
{
        if (!(killer_id==victim_id && !headshot && equal(weaponname,"world")))
        {
                message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
                write_byte(killer_id)
                write_byte(victim_id)
                write_byte(headshot)
                write_string(weaponname)
                message_end()
        }
}

/* ==================================================================================================== */

public got_bomb(id){
    planter = id;
    return PLUGIN_CONTINUE
}

public award_plant()
{
        new Players[32], playerCount, id
        get_players(Players, playerCount, "aeh", "TERRORIST")
               
        for (new i=0; i<playerCount; i++)
        {
                id = Players[i]
                Give_Xp(id,get_cvar_num("diablo_xpbonus"))       
                client_print(id,print_chat,"Dostales *%i* doswiadczenia za polozenie bomby przez twoj team",get_cvar_num("diablo_xpbonus2"))
        }       
        Give_Xp(planter,get_cvar_num("diablo_xpbonus2"))
}

public bomb_defusing(id){
    defuser = id;
    return PLUGIN_CONTINUE
}

public award_defuse()
{
        new Players[32], playerCount, id
        get_players(Players, playerCount, "aeh", "CT")
               
        for (new i=0; i<playerCount; i++)
        {
                id = Players[i]
                Give_Xp(id,get_cvar_num("diablo_xpbonus"))       
                client_print(id,print_chat,"Dostales *%i* doswiadczenia za rozbrojenie bomby przez twoj team",get_cvar_num("diablo_xpbonus2"))
        }
        Give_Xp(defuser,get_cvar_num("diablo_xpbonus2"))
}

public award_hostageALL(id)
{
        if (is_user_connected(id) == 1)
                Give_Xp(id,get_cvar_num("diablo_xpbonus2")/2)       
}

/* ==================================================================================================== */

public award_kill(killer_id,victim_id)
{
        if (!is_user_connected(killer_id) || !is_user_connected(victim_id))
                return PLUGIN_CONTINUE
               
        new xp_award = get_cvar_num("diablo_xpbonus")
               
        new Team[32]
        get_user_team(killer_id,Team,31)
       
        if (LeaderCT > 0 && equal(Team,"CT") && !is_user_alive(LeaderCT))
                xp_award-= get_cvar_num("diablo_xpbonus")/4
       
        if (LeaderT > 0 && equal(Team,"TERRORIST") && !is_user_alive(LeaderT))
                xp_award-= get_cvar_num("diablo_xpbonus")/4
       
        if (player_class[killer_id] == Mnich)
                xp_award+=get_cvar_num("diablo_xpbonus")/4
       
        if (player_xp[killer_id]<player_xp[victim_id])
                xp_award+=get_cvar_num("diablo_xpbonus")/4
               
        new more_lvl=player_lvl[victim_id]-player_lvl[killer_id]
       
        if(more_lvl>0) xp_award += floatround((get_cvar_num("diablo_xpbonus")/7)*(more_lvl*((2.0-more_lvl/40.0)/3.0)))
        else if(more_lvl<-50)xp_award -= get_cvar_num("diablo_xpbonus")*(2/3)
        else if(more_lvl<-40)xp_award -= get_cvar_num("diablo_xpbonus")/2
        else if(more_lvl<-30)xp_award -= get_cvar_num("diablo_xpbonus")/3
        else if(more_lvl<-20)xp_award -= get_cvar_num("diablo_xpbonus")/4
        else if(more_lvl<-10)xp_award -= get_cvar_num("diablo_xpbonus")/7
       
        Give_Xp(killer_id,xp_award)

        return PLUGIN_CONTINUE
       
}

public Give_Xp(id,amount)
{       
        if(player_class_lvl[id][player_class[id]]==player_lvl[id])
        {
                if(player_xp[id]+amount!=0 && get_playersnum()>1){
                        player_xp[id]+=amount
                        if (player_xp[id] > LevelXP[player_lvl[id]])
                        {
                                player_lvl[id]+=1
                                player_point[id]+=2
                                set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2)
                                show_hudmessage(id, "Awansowales do poziomu %i", player_lvl[id])
                                savexpcom(id)
                                player_class_lvl[id][player_class[id]]=player_lvl[id]
                        }
                       
                        if (player_xp[id] < LevelXP[player_lvl[id]-1])
                        {
                                player_lvl[id]-=1
                                player_point[id]-=2
                                set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2)
                                show_hudmessage(id, "Spadles do poziomu %i", player_lvl[id])
                                savexpcom(id)
                                player_class_lvl[id][player_class[id]]=player_lvl[id]
                        }
                        write_hud(id)
                }
        }
}

/* ==================================================================================================== */
public client_connect(id)
{
//        reset_item_skills(id)  - nie tutaj bo nie loaduje poziomow O.o
        flashbattery[id] = MAX_FLASH
        player_xp[id] = 0               
        player_lvl[id] = 1               
        player_point[id] = 0       
        player_item_id[id] = 0                       
        player_agility[id] = 0
        player_strength[id] = 0
        player_intelligence[id] = 0
        player_dextery[id] = 0
        player_b_oldsen[id] = 0.0
        player_class[id] = 0
        player_damreduction[id] = 0.0
        last_update_xp[id] = -1
        player_item_name[id] = "None"
        DemageTake[id]=0
        player_b_gamble[id]=0
       
        g_GrenadeTrap[id] = 0
        g_TrapMode[id] = 0
               
        player_ring[id]=0
       
        reset_item_skills(id) // Juz zaladowalo xp wiec juz nic nie zepsuje <lol2>
        reset_player(id)
        set_task(10.0, "Greet_Player", id+TASK_GREET, "", 0, "a", 1)
}

public client_putinserver(id)
{
        loaded_xp[id]=0
        player_class_lvl_save[id]=0
        database_user_created[id]=0
        count_jumps(id)
        JumpsLeft[id]=JumpsMax[id]
}

public client_disconnect(id)
{
        new ent
        new playername[40]
        get_user_name(id,playername,39)
        player_dc_name[id] = playername
        player_dc_item[id] = player_item_id[id]       
        if (player_b_oldsen[id] > 0.0) client_cmd(id,"sensitivity %f",player_b_oldsen[id])
        savexpcom(id)
       
        remove_task(TASK_CHARGE+id)   
   
        while((ent = fm_find_ent_by_owner(ent, "fake_corpse", id)) != 0)
                fm_remove_entity(ent)
       
        player_class_lvl_save[id]=0
        loaded_xp[id]=0
}

/* ==================================================================================================== */

public write_hud(id)
{
        if (player_lvl[id] == 0)
                player_lvl[id] = 1
                       
        new tpstring[1024]
       
        new Float:xp_now
        new Float:xp_need
        new Float:perc
       
        if (last_update_xp[id] == player_xp[id])
        {
                perc = last_update_perc[id]
        }
        else
        {
                //Calculate percentage of xp required to level
                if (player_lvl[id] == 1)
                {
                        xp_now = float(player_xp[id])
                        xp_need = float(LevelXP[player_lvl[id]])
                        perc = xp_now*100.0/xp_need
                }
                else
                {
                        xp_now = float(player_xp[id])-float( LevelXP[player_lvl[id]-1])
                        xp_need = float(LevelXP[player_lvl[id]])-float(LevelXP[player_lvl[id]-1])
                        perc = xp_now*100.0/xp_need
                }
        }
       
        last_update_xp[id] = player_xp[id]
        last_update_perc[id] = perc
       
        if(player_class[id]!=Paladyn)
                format(tpstring,1023,"Klasa: %s Level: %i (%0.0f%s) Item: %s", Race[player_class[id]], player_lvl[id], perc,"%%",player_item_name[id])
        else
                format(tpstring,1023,"Klasa: %s Level: %i (%0.0f%s) Item: %s Skoki: %i/%i", Race[player_class[id]], player_lvl[id], perc,"%%",player_item_name[id],JumpsLeft[id],JumpsMax[id])
               
        message_begin(MSG_ONE,gmsgStatusText,{0,0,0}, id)
        write_byte(0)
        write_string(tpstring)
        message_end()
}

/* ==================================================================================================== */

public UpdateHUD()
{   
        //Update HUD for each player
        for (new id=0; id < 32; id++)
        {       
                //If user is not connected, don't do anything
                if (!is_user_connected(id))
                        continue
               
               
                if (is_user_alive(id)) write_hud(id)
                else
                {
                        //Show info about the player we're looking at
                        new index,bodypart
                        get_user_aiming(id,index,bodypart) 
                       
                        if(index >= 0 && index < MAX && is_user_connected(index) && is_user_alive(index))
                        {
                                new pname[32]
                                get_user_name(index,pname,31)
                               
                                new Msg[512]
                                set_hudmessage(255, 255, 255, 0.78, 0.65, 0, 6.0, 3.0)
                                format(Msg,511,"Nick: %s^nPoziom: %i^nKlasa: %s^nPrzedmiot: %s^nInteligencja: %i^nSila: %i^nZwinnosc: %i^nZrecznosc: %i",pname,player_lvl[index],Race[player_class[index]],player_item_name[index], player_intelligence[index],player_strength[index], player_dextery[index], player_agility[index])               
                                show_hudmessage(id, Msg)
                               
                        }
                }
        }
}

/* ==================================================================================================== */

public check_magic(id)                                        //Redirect and check which items will be triggered
{
        if (player_b_meekstone[id] > 0) item_c4fake(id)
        if (player_b_fireball[id] > 0) item_fireball(id)
        if (player_b_ghost[id] > 0) item_ghost(id)
        if (player_b_eye[id] != 0) item_eye(id)
        if (player_b_windwalk[id] > 0) item_windwalk(id)
        if (player_b_dagon[id] > 0) item_dagon(id)
        if (player_b_theif[id] > 0) item_convertmoney(id)
        if (player_b_firetotem[id] > 0) item_firetotem(id)
        if (player_b_hook[id] > 0) item_hook(id)
        if (player_b_gravity[id] > 0) item_gravitybomb(id)
        if (player_b_fireshield[id] > 0) item_rot(id)
        if (player_b_illusionist[id] > 0) item_illusion(id)
        if (player_b_money[id] > 0) item_money_shield(id)
        if (player_b_mine[id] > 0) item_mine(id)
        if (player_b_teamheal[id] > 0) item_teamshield(id)
        if (player_b_heal[id] > 0) item_totemheal(id)
       
        return PLUGIN_HANDLED
}

/* ==================================================================================================== */

public dropitem(id)
{
        if (player_item_id[id] == 0)
        {
                hudmsg(id,2.0,"Nie masz przedmiotu do wyrzucenia!")
                return PLUGIN_HANDLED
        }
               
        if (item_durability[id] <= 0)
        {
                hudmsg(id,3.0,"Przedmiot stracil swoja wytrzymalosc!")
        }
        else
        {
                set_hudmessage(100, 200, 55, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
                show_hudmessage(id, "Przedmiot wyrzucony")
        }
       
        player_item_id[id] = 0
        player_item_name[id] = "Nic"
        player_b_gamble[id] = 0        //Because gamble uses reset skills
       
        if (player_b_extrastats[id] > 0)
        {
                SubtractStats(id,player_b_extrastats[id])
        }
        if(player_ring[id]>0) SubtractRing(id)
        player_ring[id]=0
       
        reset_item_skills(id)
        set_task(3.0,"changeskin_id_1",id)
        write_hud(id)
       
        set_renderchange(id)
        set_gravitychange(id)
       
        if (player_b_oldsen[id] > 0.0)
        {
                client_cmd(id,"sensitivity %f",player_b_oldsen[id])
                player_b_oldsen[id] = 0.0
        }
       
       
        return PLUGIN_HANDLED
}

/* ==================================================================================================== */

public pfn_touch ( ptr, ptd )
{       
        if (ptd == 0)
                return PLUGIN_CONTINUE
       
        new szClassName[32]
        if(pev_valid(ptd)){
                entity_get_string(ptd, EV_SZ_classname, szClassName, 31)
        }
        else return PLUGIN_HANDLED
       
        if(equal(szClassName, "fireball"))
                {
                        new owner = pev(ptd,pev_owner)
                        //Touch
                        if (get_user_team(owner) != get_user_team(ptr))
                        {
                                new Float:origin[3]
                                pev(ptd,pev_origin,origin)
                                Explode_Origin(owner,origin,55+player_intelligence[owner],150)
                                remove_entity(ptd)
                        }
                }
       
        if (ptr != 0 && pev_valid(ptr))
        {
                new szClassNameOther[32]
                entity_get_string(ptr, EV_SZ_classname, szClassNameOther, 31)
               
               
                if(equal(szClassName, "PowerUp") && equal(szClassNameOther, "player"))
                {
                        entity_set_int(ptd,EV_INT_iuser2,1)
                        award_powerup(ptr)
                }
               
                if(equal(szClassName, "Mine") && equal(szClassNameOther, "player"))
                {
                        new owner = pev(ptd,pev_owner)
                        //Touch
                        if (get_user_team(owner) != get_user_team(ptr))
                        {
                                new Float:origin[3]
                                pev(ptd,pev_origin,origin)
                                Explode_Origin(owner,origin,55+player_intelligence[owner],150)
                                remove_entity(ptd)
                        }
                }
               
               
                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_connected(id)
                                && is_user_connected(ptr)
                                && is_user_alive(ptr)
                                && player_b_smokehit[id] > 0
                                && get_user_team(id) != get_user_team(ptr))
                                UTIL_Kill(id,ptr,"grenade")
                        }
                       
                       
                }
               
        }
       
       
        /*if(equal(szClassName, "fireball"))
        {
                new Float:origin[3]
                pev(ptd,pev_origin,origin)
                new id = pev(ptd,pev_owner)
                Explode_Origin(id,origin,100,player_b_fireball[id] + player_intelligence[id])
                remove_entity(ptd)
        }*/
       
               
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

public Explode_Origin(id,Float:origin[3],damage,dist)
{
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
        write_byte(3)
        write_coord(floatround(origin[0]))
        write_coord(floatround(origin[1]))
        write_coord(floatround(origin[2]))
        write_short(sprite_boom)
        write_byte(50)
        write_byte(15)
        write_byte(0)
        message_end()
       
        new Players[32], playerCount, a
        get_players(Players, playerCount, "ah")
       
        for (new i=0; i<playerCount; i++)
        {
                a = Players[i]
               
                new Float:aOrigin[3]
                pev(a,pev_origin,aOrigin)
                               
                if (get_user_team(id) != get_user_team(a) && get_distance_f(aOrigin,origin) < dist+0.0)
                {
                        new dam = damage-player_dextery[a]*2
                                       
                        if (get_user_health(a)-dam < 5)
                                UTIL_Kill(id,a,"grenade")
                        else
                        {
                                set_user_health(a,get_user_health(a)-dam)
                                Effect_Bleed(a,248)
                        }
                                       
                }
               
        }
}

/* ==================================================================================================== */

public Timed_Healing()
{
        new Players[32], playerCount, a
        get_players(Players, playerCount, "ah")
       
        for (new i=0; i<playerCount; i++)
        {
                a = Players[i]
                if (player_b_heal[a] <= 0)
                        continue
               
                if (get_user_health(a)+player_b_heal[a] <= race_heal[player_class[a]]+player_strength[a]*2)
                        set_user_health(a,get_user_health(a) + player_b_heal[a])
                else
                        set_user_health(a,race_heal[player_class[a]]+player_strength[a]*2)
        }
}


/* ==================================================================================================== */

public Timed_Ghost_Check(id)
{
        if (ghost_check == true)
        {       
                new Globaltime = floatround(halflife_time())
               
                new Players[32], playerCount, a
                get_players(Players, playerCount, "h")
               
                for (new i=0; i<playerCount; i++)
                {
                        a = Players[i]
                       
                        if (ghoststate[a] == 2 && Globaltime - player_b_ghost[a] > ghosttime[a])
                        {
                                ghoststate[a] = 3
                                ghosttime[a] = 0
                                set_user_noclip(a,0)
                                ghost_check = false
                                new Float:aOrigin[3]
                                entity_get_vector(a,EV_VEC_origin,aOrigin)       
                               
                                if (PointContents (aOrigin) != -1)
                                {
                                        user_kill(a,1)       
                                }
                                else
                                {
                                        aOrigin[2]+=10
                                        entity_set_vector(a,EV_VEC_origin,aOrigin)
                                }
                               
                               
                               
                        }
                       
                }
               
        }
}

public reset_item_skills(id){
        item_boosted[id] = 0
        item_durability[id] = 0
        jumps[id] = 0
        gravitytimer[id] = 0
        player_b_vampire[id] = 0        //Vampyric damage
        player_b_damage[id] = 0                //Bonus damage
        player_b_money[id] = 0                //Money bonus
        player_b_gravity[id] = 0        //Gravity bonus : 1 = best
        player_b_inv[id] = 0                //Invisibility bonus
        player_b_grenade[id] = 0        //Grenade bonus = 1/chance to kill
        player_b_reduceH[id] = 0        //Reduces player health each round start
        player_b_theif[id] = 0                //Amount of money to steal
        player_b_respawn[id] = 0        //Chance to respawn upon death
        player_b_explode[id] = 0        //Radius to explode upon death
        player_b_heal[id] = 0                //Ammount of hp to heal each 5 second
        player_b_blind[id] = 0                //Chance 1/Value to blind the enemy
        player_b_fireshield[id] = 0        //Protects against explode and grenade bonus
        player_b_meekstone[id] = 0        //Ability to lay a fake c4 and detonate
        player_b_teamheal[id] = 0        //How many hp to heal when shooting a teammate
        player_b_redirect[id] = 0        //How much damage will the player redirect
        player_b_fireball[id] = 0        //Ability to shot off a fireball value = radius *
        player_b_ghost[id] = 0                //Ability to walk through walls
        player_b_eye[id] = 0                //Ability to snarkattack
        player_b_blink[id] = 0        //Abiliy to use railgun
        player_b_windwalk[id] = 0        //Ability to windwalk
        player_b_usingwind[id] = 0        //Is player using windwalk
        player_b_froglegs[id] = 0
        player_b_silent[id] = 0
        player_b_dagon[id] = 0                //Abliity to nuke opponents
        player_b_sniper[id] = 0                //Ability to kill faster with scout
        player_b_jumpx[id] = 0
        player_b_smokehit[id] = 0
        player_b_extrastats[id] = 0
        player_b_firetotem[id] = 0
        player_b_hook[id] = 0
        player_b_darksteel[id] = 0
        player_b_illusionist[id] = 0
        player_b_mine[id] = 0
        wear_sun[id] = 0
        player_sword[id] = 0
}

public changeskin_id_1(id)
{
        changeskin(id,1)
}
/* =================================================================================================== */

public show_menu_klasy(id)
{
        new text[513]

        format(text, 512, "\yinfo klas - ^n\w1. Mag^n\w2. Paladyn^n\w3. Mnich^n\w4. Barbarzynca^n\w5. Zabojca^n\w6. Nekromanta^n\w7. Ninja^n\w8. Lowca^n^n\w0 Exit")

        new keys
        keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<9)
        show_menu(id, keys, text)
        return PLUGIN_HANDLED 
}

public klasy(id, key)
{
        switch(key)
        {
                case 0:
                {       
                        mag(id)
                       
                }
                case 1:
                {       
                        paladyn(id)
                }
                case 2:
                {       
                        mnich(id)
                }
                case 3:
                {
                        barbarzynca(id)
                }
                case 4:
                {
                        zabojca(id)
                }
                case 5:
                {
                        nekromanta(id)
                }
                case 6:
                {
                        ninja(id)
                }
                case 7:
                {
                        Lowca(id)
                }
                case 9:
                {
                        return PLUGIN_HANDLED
                }
        }
       
        return PLUGIN_HANDLED
}
public mag(id){
        showitem(id,"Mag"," "," ","<br>Strzelajac z pistoletu zamrazasz wroga i zabierasz mu 5hp co 2 sek przez 15 sek.<br> Jezeli wlaczysz latarke i najedziesz na ninje robi sie widzialny <br><br>")
}
public paladyn(id){
        showitem(id,"Paladyn"," "," ","<br>Na start ma 125hp i moze wykonywac tzw. Long Jump.<br> <br><br>")
}
public mnich(id){
        showitem(id,"Mnich"," "," ","<br>Zdobywa szybciej doswiadczenie<br>i na start ma 140hp<br><br>")
}
public barbarzynca(id){
        showitem(id,"Barbarzynca"," "," ","<br>Zabijajac wroga dostajesz 200 armoru i<br>dostaniesz dodatkowy magazynek <br>i odzyskuje czesc hp.<br><br>")       
}
public zabojca(id){
        showitem(id,"Zabojca"," "," ","<br>Nie slychac jego krokow i jest troche szybszy od pozostalych.<br>Jak postrzelisz wroga z pistoletu wyrzuca go do gory<br><br>")
}
public nekromanta(id){
        showitem(id,"Nekromanta"," "," ","<br>Atakujac zabierasz 10hp wiecej<br>i moze wskrzeszac umarlych.<br><br>")
}
public ninja(id){
        showitem(id,"Ninja"," "," ","<br>Jest prawie niewidoczny, ma 165 hp na start<br>ale moze chodzic tylko z nozem<br><br>")
}
public Lowca(id){
        showitem(id,"Ninja"," "," ","<br>Posiada Kusze (wybierz noz a potem reload by wyjac<br>Moze zastawiac pulapki z granatow (zmiana trybow PPM)<br>Gdy postrzeli przeciwnika pistoletem, zostawia on za soba slad<br><br>")
}



/* =====================================*/
/* ==================================================================================================== */

public auto_help(id)
{
        new rnd = random_num(1,5+player_lvl[id])
        if (rnd <= 5)
                set_hudmessage(0, 180, 0, -1.0, 0.70, 0, 10.0, 5.0, 0.1, 0.5, 11)       
        if (rnd == 1)
                show_hudmessage(id, "Mozesz upuscic przedmiot jak napiszesz /drop i zobaczyc informacje o przedmocie jak napiszesz /przedmiot")
        if (rnd == 2)
                show_hudmessage(id, "Mozesz uzywac konkretnych przedmiotow za pomoca klawisza E")
        if (rnd == 3)
                show_hudmessage(id, "Mozesz dostac wiecej pomocy jak napiszesz /pomoc lub zobaczyc wszystkie komendy jak napiszesz /komendy")
        if (rnd == 4)
                show_hudmessage(id, "Zeby bylo prosciej grac mozesz zbindowac diablo menu (bind klawisz say /menu")
        if (rnd == 5)
                show_hudmessage(id, "Niektore przedmioty moga byc ulepszone przez Runy. Napisz /rune zeby otworzyc sklep z runami")
}

/* ==================================================================================================== */

public helpme(id)
{       
        showitem(id,"Helpmenu","Common","None","Dostajesz przedmioty i doswiadczenie za zabijanie innych. Mozesz dostac go tylko wtedy, gdy nie masz na sobie innego<br><br>Aby dowiedziec sie wiecej o swoim przedmiocie napisz /przedmiot lub /item, a jak chcesz wyrzucic napisz /drop<br><br>Niektore przedmoty da sie uzyc za pomoca klawisza E<br><br>Napisz /czary zeby zobaczyc jakie masz staty<br><br>")
}


/* ==================================================================================================== */



/* ==================================================================================================== */

public komendy(id)
{
showitem(id,"Komendy","Common","None","<br>/klasa - zmiana klasy postaci<br>/klasy - opis postaci<br>/rune - sklep z runami<br>/przedmiot - informacja o przedmiocie<br>/menu - wyswietla menu diablo mod<br>/czary - stan statystyk<br>/drop - wyrzuca aktualny przedmiot<br>/noweitemy - opis nowych itemow<br>/reset -resetuje twoje staty<br>/savexp - zapisuje lvl,exp,staty<br>/gracze - wyswietla liste graczy<br>Polska zmodyfikowana wersja diablo mod by GuTeK & Miczu<br><br>")
}

/* ==================================================================================================== */

public showitem(id,itemname[],itemvalue[],itemeffect[],Durability[])
{
        new diabloDir[64]       
        new g_ItemFile[64]
        new amxbasedir[64]
        get_basedir(amxbasedir,63)
       
        format(diabloDir,63,"%s/diablo",amxbasedir)
       
        if (!dir_exists(diabloDir))
        {
                new errormsg[512]
                format(errormsg,511,"Blad: Folder %s/diablo nie mog³ byæ znaleziony. Prosze skopiowac ten folder z archiwum do folderu amxmodx",amxbasedir)
                show_motd(id, errormsg, "An error has occured")       
                return PLUGIN_HANDLED
        }
       
       
        format(g_ItemFile,63,"%s/diablo/item.txt",amxbasedir)
        if(file_exists(g_ItemFile))
                delete_file(g_ItemFile)
       
        new Data[768]
       
        //Header
        format(Data,767,"<html><head><title>Informacje o przedmiocie</title></head>")
        write_file(g_ItemFile,Data,-1)
       
        //Background
        format(Data,767,"<body text=^"#FFFF00^" bgcolor=^"#000000^" background=^"%sdrkmotr.jpg^">",Basepath)
        write_file(g_ItemFile,Data,-1)
       
        //Table stuff
        format(Data,767,"<table border=^"0^" cellpadding=^"0^" cellspacing=^"0^" style=^"border-collapse: collapse^" width=^"100%s^"><tr><td width=^"0^">","^%")
        write_file(g_ItemFile,Data,-1)
       
        //ss.gif image
        format(Data,767,"<p align=^"center^"><img border=^"0^" src=^"%sss.gif^"></td>",Basepath)
        write_file(g_ItemFile,Data,-1)
       

        //item name
        format(Data,767,"<td width=^"0^"><p align=^"center^"><font face=^"Arial^"><font color=^"#FFCC00^"><b>Przedmiot: </b>%s</font><br>",itemname)
        write_file(g_ItemFile,Data,-1)
       
        //item value
        format(Data,767,"<font color=^"#FFCC00^"><b><br>Wartosc: </b>%s</font><br>",itemvalue)
        write_file(g_ItemFile,Data,-1)
       
        //Durability
        format(Data,767,"<font color=^"#FFCC00^"><b><br>Wytrzymalosc: </b>%s</font><br><br>",Durability)
        write_file(g_ItemFile,Data,-1)
       
        //Effects
        format(Data,767,"<font color=^"#FFCC00^"><b>Efekt:</b> %s</font></font></td>",itemeffect)
        write_file(g_ItemFile,Data,-1)
       
        //image ss
        format(Data,767,"<td width=^"0^"><p align=^"center^"><img border=^"0^" src=^"%sgf.gif^"></td>", Basepath)
        write_file(g_ItemFile,Data,-1)
       
        //end
        format(Data,767,"</tr></table></body></html>")
        write_file(g_ItemFile,Data,-1)
       
        //show window with message
        show_motd(id, g_ItemFile, "Informacje Przedmiotu")
       
        return PLUGIN_HANDLED
       
}


/* ==================================================================================================== */

public iteminfo(id)
{
        new itemvalue[100]
       
        if (player_item_id[id] <= 10) itemvalue = "Common"
        if (player_item_id[id] <= 30)
                itemvalue = "Uncommon"
        else
                itemvalue = "Rare"
       
        if (player_item_id[id] > 42) itemvalue = "Unique"
       
        new itemEffect[200]
       
        new TempSkill[11]                                        //There must be a smarter way
       
        if (player_b_vampire[id] > 0)
        {
                num_to_str(player_b_vampire[id],TempSkill,10)
                add(itemEffect,199,"Kradnie ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," hp jak uderzysz wroga<br>")
        }
        if (player_b_damage[id] > 0)
        {
                num_to_str(player_b_damage[id],TempSkill,10)
                add(itemEffect,199,"Zadaje ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," dodatkowe obrazenia za kazdym razem jak uderzysz wroga<br>")
        }
        if (player_b_money[id] > 0)
        {
                num_to_str(player_b_money[id],TempSkill,10)
                add(itemEffect,199,"Dadaje ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," zlota i w kazdej rundzie na start otrzymasz 50 zlota. Mozesz takze uzyc tego przedmiotu by zredukowac normalne obrazenia o 50%<br>")
        }
        if (player_b_gravity[id] > 0)
        {
                num_to_str(player_b_gravity[id],TempSkill,10)
                add(itemEffect,199,"Wysoki skok jest zredukowany do ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199,". Uzyj tego przedmiotu jak bedziesz w powietrzu. Uszkodzenia zaleza od wysokosci skoku i twojej sily<br>")
        }
        if (player_b_inv[id] > 0)
        {
                num_to_str(player_b_inv[id],TempSkill,10)
                add(itemEffect,199,"Twoja widocznosc jest zredukowana z 255 do ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199,"<br>")
        }
        if (player_b_grenade[id] > 0)
        {
                num_to_str(player_b_grenade[id],TempSkill,10)
                add(itemEffect,199,"Masz 1/")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," szanse do natychmiastowego zabicia HE<br>")
        }
        if (player_b_reduceH[id] > 0)
        {
                num_to_str(player_b_reduceH[id],TempSkill,10)
                add(itemEffect,199,"Twoje zdrowie jest zredukowane o ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," z kazdej rundy, sila nie liczy sie tu<br>")
        }
        if (player_b_theif[id] > 0)
        {
                num_to_str(player_b_theif[id],TempSkill,10)
                add(itemEffect,199,"Masz 1/7 szans na okradniecie kogos z")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," zlota, za kazdym razem gdy uderzysz swojego wroga. Mozesz uzyc tego przedmiotu zeby zamienic 1000 zlota na 15 HP<br>")
        }
        if (player_b_respawn[id] > 0)
        {
                num_to_str(player_b_respawn[id],TempSkill,10)
                add(itemEffect,199,"Masz 1/")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," szanse do odrodzenia sie po zgonie<br>")
        }
        if (player_b_explode[id] > 0)
        {
                num_to_str(player_b_explode[id],TempSkill,10)
                add(itemEffect,199,"Gdy umierasz wybuchniesz w promieniu ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," zadaje 75 obrazen wokol ciebie - im wiecej masz inteligencji tym wiekszy zasieg wybuchu<br>")
        }
        if (player_b_heal[id] > 0)
        {
                num_to_str(player_b_heal[id],TempSkill,10)
                add(itemEffect,199,"Zyskasz +")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," HP co kazde 5 sekund. Uzyj aby polozyc leczacy totem na 7 sekund<br>")
        }
        if (player_b_gamble[id] > 0)
        {
                num_to_str(player_b_gamble[id],TempSkill,10)
                add(itemEffect,199,"Zyskasz losowa umiejetnosc na poczatku rundy, Masz na to 1/")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," szans<br>")
        }
        if (player_b_blind[id] > 0)
        {
                num_to_str(player_b_blind[id],TempSkill,10)
                add(itemEffect,199,"Masz 1/")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199,"szans zeby twoj przeciwnik stracil wzrok<br>")
        }
        if (player_b_fireshield[id] > 0)
        {
                num_to_str(player_b_fireshield[id],TempSkill,10)
                add(itemEffect,199,"Nie mozesz byc zabity przez chaos orb, hell orb albo firerope<br>")
                add(itemEffect,199,"Uzyj, zeby zadac obrazenia, spowolnic i oslepic kazdego wroga wokol ciebie<br>")
        }
        if (player_b_meekstone[id] > 0)
        {
                num_to_str(player_b_meekstone[id],TempSkill,10)
                add(itemEffect,199,"Mozesz polozyc falszywa bombe uzywajac klawisz E. Gdy przeciwna druzyna zblizy sie do niej, wybuchnie zadajac obrazenia<br>")
        }
        if (player_b_teamheal[id] > 0)
        {
                num_to_str(player_b_teamheal[id],TempSkill,10)
                add(itemEffect,199,"Uzyj, aby aktywowac tarcze na graczu.<br>")
                add(itemEffect,199," Cale uszkodzenia tarczy sa odzwierciedlone. Umrzesz jezeli zostaniesz trafiony")
        }
        if (player_b_redirect[id] > 0)
        {
                num_to_str(player_b_redirect[id],TempSkill,10)
                add(itemEffect,199,"Obrazenia sa zredukowane o")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," hitpoints<br>")
        }
        if (player_b_fireball[id] > 0)
        {
                num_to_str(player_b_fireball[id],TempSkill,10)
                add(itemEffect,199,"Mozesz wyczarowac ognista kule uzywajac tego przedmiotu. Zabije ona ludzi w zasiegu ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199,". Im wiecej masz inteligencji tym wieksze zadasz obrazenia<br>")
        }
        if (player_b_ghost[id] > 0)
        {
                num_to_str(player_b_ghost[id],TempSkill,10)
                add(itemEffect,199,"Uzyj tego przedmiotu, aby przenikac przez sciany przez")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," sekund<br>")
        }
        if (player_b_eye[id] > 0)
        {
                add(itemEffect,199,"Uzyj, aby polozyc magiczne oko(da sie tylko raz podlozyc) i uzyj ponownie zeby wlaczyc i wylaczyc je")
               
        }
        if (player_b_blink[id] > 0)
        {
                add(itemEffect,199,"Mozesz teleportowac sie przez uzywanie alternatywnego ataku twoim nozem (PPM). Im wiecej masz inteligencji tym teleportujesz sie na wiekszy dystans")
        }
       
        if (player_b_windwalk[id] > 0)
        {
                num_to_str(player_b_windwalk[id],TempSkill,10)
                add(itemEffect,199,"Uzyj, zeby stac sie niewidzialny. W tym czasie nie bedziesz mogl atakowac, ale za to staniesz sie szybszy na ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," sekund<br>")
        }
       
        if (player_b_froglegs[id] > 0)
        {
                add(itemEffect,199,"Kucnij na 3 sekundy, a zrobisz dlugi skok")
        }
        if (player_b_dagon[id] == 1)
        {
                add(itemEffect,199,"Uzyj, zeby udezyc wroga ognistym promieniem - mozesz ulepszyc ten przedmiot kupujac odpowiednie runy ")
                add(itemEffect,199,"Inteligencja zwiekszy zasieg przedmiotu")
        }
        if (player_b_sniper[id] > 0)
        {
                num_to_str(player_b_sniper[id],TempSkill,10)
                add(itemEffect,199,"Masz 1/")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199,"na natychmiastowe zabicie przeciwnika ze scouta<br>")
        }
        if (player_b_jumpx[id] > 0)
        {
                num_to_str(player_b_jumpx[id],TempSkill,10)
                add(itemEffect,199,"Mozesz podskoczyc ")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," razy w loscie, uzywajac klawisza, ktorym skaczesz<br>")       
        }
        if (player_b_smokehit[id] > 0)
        {
                add(itemEffect,199,"Twoje granaty dymne zabija natychmiast wroga jezeli go dotknie")
        }
        if (player_b_extrastats[id] > 0)
        {
                num_to_str(player_b_extrastats[id],TempSkill,10)
                add(itemEffect,199,"Zyskasz +")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," do wszystkich statystyk majac ten przedmiot<br>")
        }
        if (player_b_firetotem[id] > 0)
        {
                num_to_str(player_b_firetotem[id],TempSkill,10)
                add(itemEffect,199,"Uzyj tego przedmiotu, zeby polozyc eksplodujacy totem na ziemie. Totem wybuchnie po 7 sekundach. I zapali osoby w zasiegu ")
                add(itemEffect,199,TempSkill)
        }
        if (player_b_hook[id] > 0)
        {
                num_to_str(player_b_hook[id],TempSkill,10)
                add(itemEffect,199,"Uzyj, zeby wyrzucic hak na zasieg 600 jezeli kogos trafisz przyciagnie go do siebie. Im wiecej masz inteligencji tym szybszy bedzie hak")
        }
        if (player_b_darksteel[id] > 0)
        {               
                new ddam = floatround(player_strength[id]*2*player_b_darksteel[id]/10.0)*3

                num_to_str(player_b_darksteel[id],TempSkill,10)
                add(itemEffect,199,"Dostales 15 + 0.")
                add(itemEffect,199,TempSkill)
                add(itemEffect,199,"*sila: ")
                num_to_str(ddam,TempSkill,10)
                add(itemEffect,199,TempSkill)
                add(itemEffect,199," dodatkowych obrazen kiedy uderzysz swojego wroga od tylu ")
        }
        if (player_b_illusionist[id] > 0)
        {
                add(itemEffect,199,"Uzyj tego przedmiotu, zeby stac sie niewiedzialnym przez 7sekund. Kazde obrazenia jak bedziesz niewidzialny zabija cie")
        }
        if (player_b_mine[id] > 0)
        {
                add(itemEffect,199,"Uzyj, zeby polozyc niewidzialna mine. Kiedy mina ekspoduje zada 50hp+obrazenia magia. 3 miny mozesz polozyc w jednej rundzie")
        }
        if (player_item_id[id]==66)
        {
                add(itemEffect,199,"Wygladasz jak przeciwnik! Postaraj sie nie dac zdemaskowac.")
        }
       
       
        new Durability[10]
        num_to_str(item_durability[id],Durability,9)
        if (equal(itemEffect,"")) showitem(id,"None","None","Zabij kogos, aby dostac item albo kup (/rune)","None")
        if (!equal(itemEffect,"")) showitem(id,player_item_name[id],itemvalue,itemEffect,Durability)
       
}

/* ==================================================================================================== */

public award_item(id, itemnum)
{
        if (player_item_id[id] != 0)
                return PLUGIN_HANDLED
       
        set_hudmessage(220, 115, 70, -1.0, 0.40, 0, 3.0, 4.0, 0.2, 0.3, 5)
        new rannum = random_num(1,66)
       
        new maxfind = player_agility[id]
        if (maxfind > 15) maxfind = 15
       
        new rf = random_num(1,25-maxfind)
       
        if (itemnum > 0) rannum = itemnum
        else if (itemnum < 0) return PLUGIN_HANDLED
               
        if (rf == 3 && itemnum == 0)                                                //We found a rare item                       
        {
                award_unique_item(id)       
                rannum = -1
        }
       
        //Set durability, make this item dependant?
        item_durability[id] = 250
        switch(rannum)
        {
                case 1:
                {
                        player_item_name[id] = "Bronze Amplifier"
                        player_item_id[id] = rannum
                        player_b_damage[id] = random_num(1,3)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: dodaje obrazenia +%i",player_item_name[id],player_b_damage[id])
                }
               
                case 2:
                {
                        player_item_name[id] = "Silver Amplifier"
                        player_item_id[id] = rannum
                        player_b_damage[id] = random_num(3,6)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: dodaje obrazenia +%i ",player_item_name[id],player_b_damage[id])
                }
               
                case 3:
                {
                        player_item_name[id] = "Gold Amplifier"
                        player_item_id[id] = rannum
                        player_b_damage[id] = random_num(6,10)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: dodaje obrazenia +%i ",player_item_name[id],player_b_damage[id])       
                }
                case 4:
                {
                        player_item_name[id] = "Vampyric Staff"
                        player_item_id[id] = rannum
                        player_b_vampire[id] = random_num(1,4)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: wysysasz %i hp przeciwnikowi",player_item_name[id],player_b_vampire[id])       
                }
                case 5:
                {
                        player_item_name[id] = "Vampyric Amulet"
                        player_item_id[id] = rannum
                        player_b_vampire[id] = random_num(4,6)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: wysysasz %i hp przeciwnikowi",player_item_name[id],player_b_vampire[id])       
                }
                case 6:
                {
                        player_item_name[id] = "Vampyric Scepter"
                        player_item_id[id] = rannum
                        player_b_vampire[id] = random_num(6,9)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: wysysasz %i hp przeciwnikowi",player_item_name[id],player_b_vampire[id])       
                }
                case 7:
                {
                        player_item_name[id] = "Small bronze bag"
                        player_item_id[id] = rannum
                        player_b_money[id] = random_num(150,500)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: dostajesz %i zloto w kazdej rundzie. Uzyj, zeby chronil cie.",player_item_name[id],player_b_money[id]+player_intelligence[id]*50)       
                }
                case 8:
                {
                        player_item_name[id] = "Medium silver bag"
                        player_item_id[id] = rannum
                        player_b_money[id] = random_num(500,1200)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: dostajesz %i zloto w kazdej rundzie. Uzyj, zeby chronil cie.",player_item_name[id],player_b_money[id]+player_intelligence[id]*50)       
                }
                case 9:
                {
                        player_item_name[id] = "Large gold bag"
                        player_item_id[id] = rannum
                        player_b_money[id] = random_num(1200,3000)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: dostajesz %i zloto w kazdej rundzie. Uzyj, zeby chronil cie.",player_item_name[id],player_b_money[id]+player_intelligence[id]*50)       
                }
                case 10:
                {
                        player_item_name[id] = "Small angel wings"
                        player_item_id[id] = rannum
                        player_b_gravity[id] = random_num(1,5)
                       
                        if (is_user_alive(id))
                                set_gravitychange(id)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i premia wyzszego skoku - Wcisnij e zeby uzyc",player_item_name[id],player_b_gravity[id])       
                }
                case 11:
                {
                        player_item_name[id] = "Arch angel wings"
                        player_item_id[id] = rannum
                        player_b_gravity[id] = random_num(5,9)
                       
                        if (is_user_alive(id))
                                set_gravitychange(id)
                               
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i premia wyzszego skoku - Wcisnij e zeby uzyc",player_item_name[id],player_b_gravity[id])       
                       
                }
                case 12:
                {
                        player_item_name[id] = "Invisibility Rope"
                        player_item_id[id] = rannum
                        player_b_inv[id] = random_num(150,200)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i premii niewidocznosci",player_item_name[id],255-player_b_inv[id])       
                }
                case 13:
                {
                        player_item_name[id] = "Invisibility Coat"
                        player_item_id[id] = rannum
                        player_b_inv[id] = random_num(110,150)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i premii niewidocznosci",player_item_name[id],255-player_b_inv[id])       
                }
                case 14:
                {
                        player_item_name[id] = "Invisibility Armor"
                        player_item_id[id] = rannum
                        player_b_inv[id] = random_num(70,110)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i premii niewidocznosci",player_item_name[id],255-player_b_inv[id])       
                }
                case 15:
                {
                        player_item_name[id] = "Firerope"
                        player_item_id[id] = rannum
                        player_b_grenade[id] = random_num(3,6)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +1/%i szans natychmiastowego zabicia granatem HE",player_item_name[id],player_b_grenade[id])       
                }
                case 16:
                {
                        player_item_name[id] = "Fire Amulet"
                        player_item_id[id] = rannum
                        player_b_grenade[id] = random_num(2,4)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +1/%i szans natychmiastowego zabicia granatem HE",player_item_name[id],player_b_grenade[id])       
                }
                case 17:
                {
                        player_item_name[id] = "Stalkers ring"
                        player_item_id[id] = rannum
                        player_b_reduceH[id] = 95
                        player_b_inv[id] = 8       
                        item_durability[id] = 100
                       
                        if (is_user_alive(id)) set_user_health(id,5)               
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Masz 5 zycia i noz, jestes prawie niewidoczny",player_item_name[id])       
                }
                case 18:
                {
                        player_item_name[id] = "Arabian Boots"
                        player_item_id[id] = rannum
                        player_b_theif[id] = random_num(500,1000)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: 1/5 szans by krasc zloto%i za kazdym razem jak uderzasz. Uzyj zeby zamienic zloto w zycia",player_item_name[id],player_b_theif[id])       
                }
                case 19:
                {
                        player_item_name[id] = "Phoenix Ring"
                        player_item_id[id] = rannum
                        player_b_respawn[id] = random_num(3,6)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: 1/%i szans do ponownego odrodzenia sie po smierci",player_item_name[id],player_b_respawn[id])       
                }
                case 20:
                {
                        player_item_name[id] = "Sorcerers ring"
                        player_item_id[id] = rannum
                        player_b_respawn[id] = random_num(2,3)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: 1/%i szans do ponownego odrodzenia sie po smierci",player_item_name[id],player_b_respawn[id])       
                }
                case 21:
                {
                        player_item_name[id] = "Chaos Orb"
                        player_item_id[id] = rannum
                        player_b_explode[id] = random_num(150,275)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Wybuchniesz zaraz po smierci w promieniu %i",player_item_name[id],player_b_explode[id])       
                }
                case 22:
                {
                        player_item_name[id] = "Hell Orb"
                        player_item_id[id] = rannum
                        player_b_explode[id] = random_num(200,400)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Wybuchniesz zaraz po smierci w promieniu %i",player_item_name[id],player_b_explode[id])       
                }
                case 23:
                {
                        player_item_name[id] = "Gold statue"
                        player_item_id[id] = rannum
                        player_b_heal[id] = random_num(5,10)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Regeneruje %i hp co kazde 5 sekund. Uzyj, zeby polozyc totem ktory bedzie leczyl wszystkich w zasiegu %i",player_item_name[id],player_b_heal[id],player_b_heal[id])       
                }
                case 24:
                {
                        player_item_name[id] = "Daylight Diamond"
                        player_item_id[id] = rannum
                        player_b_heal[id] = random_num(10,20)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Regeneruje %i hp co kazde 5 sekund. Uzyj, zeby polozyc totem ktory bedzie leczyl wszystkich w zasiegu %i",player_item_name[id],player_b_heal[id],player_b_heal[id])       
                }
                case 25:
                {
                        player_item_name[id] = "Blood Diamond"
                        player_item_id[id] = rannum
                        player_b_heal[id] = random_num(20,35)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Regeneruje %i hp co kazde 5 sekund. Uzyj, zeby polozyc totem ktory bedzie leczyl wszystkich w zasiegu %i",player_item_name[id],player_b_heal[id],player_b_heal[id])       
                }
                case 26:
                {
                        player_item_name[id] = "Wheel of Fortune"
                        player_item_id[id] = rannum
                        player_b_gamble[id] = random_num(2,3)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i daje ci dodatkowa premie w kazdej rundzie",player_item_name[id],player_b_gamble[id])       
                }
                case 27:
                {
                        player_item_name[id] = "Four leaf Clover"
                        player_item_id[id] = rannum
                        player_b_gamble[id] = random_num(4,5)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i daje ci dodatkowa premie w kazdej rundzie",player_item_name[id],player_b_gamble[id])       
                }
                case 28:
                {
                        player_item_name[id] = "Amulet of the sun"
                        player_item_id[id] = rannum
                        player_b_blind[id] = random_num(6,9)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: 1/%i szans na utrate wzroku kiedy uszkadzasz wroga",player_item_name[id],player_b_blind[id])       
                }
                case 29:
                {
                        player_item_name[id] = "Sword of the sun"
                        player_item_id[id] = rannum
                        player_b_blind[id] = random_num(2,5)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: 1/%i szans na utrate wzroku kiedy uszkadzasz wroga",player_item_name[id],player_b_blind[id])       
                }
                case 30:
                {
                        player_item_name[id] = "Fireshield"
                        player_item_id[id] = rannum
                        player_b_fireshield[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Chroni od natychmiastowego zabicia HE i orbami. Wcisnij e zeby go uzyc",player_item_name[id],player_b_fireshield[id])       
                }
                case 31:
                {
                        player_item_name[id] = "Stealth Shoes"
                        player_item_id[id] = rannum
                        player_b_silent[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Twoj bieg cichnie",player_item_name[id])       
                }
                case 32:
                {
                        player_item_name[id] = "Meekstone"
                        player_item_id[id] = rannum
                        player_b_meekstone[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uzyj, aby podlozyc sztuczna bombe",player_item_name[id])       
                }
                case 33:
                {
                        player_item_name[id] = "Medicine Glar"
                        player_item_id[id] = rannum
                        player_b_teamheal[id] = random_num(10,20)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Strzel do swojego, aby uleczyc %i hp - wcisnij E, zeby uzyc",player_item_name[id],player_b_teamheal[id])       
                }
                case 34:
                {
                        player_item_name[id] = "Medicine Totem"
                        player_item_id[id] = rannum
                        player_b_teamheal[id] = random_num(20,30)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Strzel do swojego, aby uleczyc %i hp - wcisnij E, zeby uzyc",player_item_name[id],player_b_teamheal[id])       
                }
                case 35:
                {
                        player_item_name[id] = "Iron Armor"
                        player_item_id[id] = rannum
                        player_b_redirect[id] = random_num(3,6)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i Obniza uszkodzenia zadawane graczowi",player_item_name[id],player_b_redirect[id])       
                }
                case 36:
                {
                        player_item_name[id] = "Mitril Armor"
                        player_item_id[id] = rannum
                        player_b_redirect[id] = random_num(6,11)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i Obniza uszkodzenia zadawane graczowi",player_item_name[id],player_b_redirect[id])       
                }
                case 37:
                {
                        player_item_name[id] = "Godly Armor"
                        player_item_id[id] = rannum
                        player_b_redirect[id] = random_num(10,15)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: +%i Obniza uszkodzenia zadawane graczowi",player_item_name[id],player_b_redirect[id])       
                }
                case 38:
                {
                        player_item_name[id] = "Fireball staff"
                        player_item_id[id] = rannum
                        player_b_fireball[id] = random_num(50,100)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uszkadza wszystko w promieniu %i",player_item_name[id],player_b_fireball[id])       
                }
                case 39:
                {
                        player_item_name[id] = "Fireball scepter"
                        player_item_id[id] = rannum
                        player_b_fireball[id] = random_num(100,200)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uszkadza wszystko w promieniu %i",player_item_name[id],player_b_fireball[id])       
                }
                case 40:
                {
                        player_item_name[id] = "Ghost Rope"
                        player_item_id[id] = rannum
                        player_b_ghost[id] = random_num(3,6)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Mozesz przenikac przez sciany przez %i sekund",player_item_name[id],player_b_ghost[id])       
                }
                case 41:
                {
                        player_item_name[id] = "Nicolas Eye"
                        player_item_id[id] = rannum
                        player_b_eye[id] = -1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uzyj aby polozyc kamere i uzyj ponownie zeby uzyc i zatrzymac",player_item_name[id])       
                }
                case 42:
                {
                        player_item_name[id] = "Knife Ruby"
                        player_item_id[id] = rannum
                        player_b_blink[id] = floatround(halflife_time())
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Twoj noz pozwala ci teleportowac sie raz na 3 sekundy",player_item_name[id])       
                }
                case 43:
                {
                        player_item_name[id] = "Lothars Edge"
                        player_item_id[id] = rannum
                        player_b_windwalk[id] = random_num(4,7)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uzyj a staniesz sie niewidzialny przez %i sekund i w tym czasie nie mozesz atakowac ale za to szybko biegasz",player_item_name[id],player_b_windwalk[id])       
                }
                case 44:
                {
                        player_item_name[id] = "Sword"
                        player_item_id[id] = rannum
                        player_sword[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: zadajesz wieksze obrazenia nozem",player_item_name[id])               
                }
                case 45:
                {
                        player_item_name[id] = "Magic Booster"
                        player_item_id[id] = rannum
                        player_b_froglegs[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Kucnij na 3 sekundy, a zrobisz dlugi skok",player_item_name[id])       
                }
                case 46:
                {
                        player_item_name[id] = "Dagon I"
                        player_item_id[id] = rannum
                        player_b_dagon[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uzyj zeby uderzyc twojego przeciwnika piorunem ognia",player_item_name[id])       
                }
                case 47:
                {
                        player_item_name[id] = "Scout Extender"
                        player_item_id[id] = rannum
                        player_b_sniper[id] = random_num(3,4)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: 1/%i szans do natychmiastowego zabicia scoutem",player_item_name[id],player_b_sniper[id])       
                }
                case 48:
                {
                        player_item_name[id] = "Scout Amplifier"
                        player_item_id[id] = rannum
                        player_b_sniper[id] = random_num(2,3)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: 1/%i szans do natychmiastowego zabicia scoutem",player_item_name[id],player_b_sniper[id])       
                }
                case 49:
                {
                        player_item_name[id] = "Air booster"
                        player_item_id[id] = rannum
                        player_b_jumpx[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Mozesz zrobic podwojny skok w powietrzu",player_item_name[id],player_b_sniper[id])       
                }
                case 50:
                {
                        player_item_name[id] = "Iron Spikes"
                        player_item_id[id] = rannum
                        player_b_smokehit[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Jezeli uderzasz kogos granatami dymym, to on zginie",player_item_name[id])       
                }
                case 51:
                {
                        player_item_name[id] = "Point Booster"
                        player_item_id[id] = rannum
                        player_b_extrastats[id] = random_num(1,3)
                        BoostStats(id,player_b_extrastats[id])
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Zyskasz +%i do wszystkich statystyk",player_item_name[id],player_b_extrastats[id])       
                }
                case 52:
                {
                        player_item_name[id] = "Totem amulet"
                        player_item_id[id] = rannum
                        player_b_firetotem[id] = random_num(250,400)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uzyj, aby polozyc wybuchowy totem ognia",player_item_name[id])       
                }
                case 53:
                {
                        player_item_name[id] = "Magic Hook"
                        player_item_id[id] = rannum
                        player_b_hook[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uzyj, aby rzucic hakiem",player_item_name[id])       
                }
                case 54:
                {
                        player_item_name[id] = "Darksteel Glove"
                        player_item_id[id] = rannum
                        player_b_darksteel[id] = random_num(1,5)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Dodatkowe uszkodzenia, gdy trafisz kogos od ty³u",player_item_name[id])       
                }
                case 55:
                {
                        player_item_name[id] = "Darksteel Gaunlet"
                        player_item_id[id] = rannum
                        player_b_darksteel[id] = random_num(7,9)
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Dodatkowe uszkodzenia, gdy trafisz kogos od ty³u",player_item_name[id])       
                }
                case 56:
                {
                        player_item_name[id] = "Illusionists Cape"
                        player_item_id[id] = rannum
                        player_b_illusionist[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uzyj, aby stac sie niewidoczny dla wszystkich",player_item_name[id])       
                }
                case 57:
                {
                        player_item_name[id] = "Techies scepter"
                        player_item_id[id] = rannum
                        player_b_mine[id] = 3
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Uzyj, zeby polozyc niewidzialna mine",player_item_name[id])
                }
               
                case 58:
                {
                        player_item_name[id] = "Ninja ring"
                        player_item_id[id] = rannum
                        player_b_blink[id] = floatround(halflife_time())
                        player_b_froglegs[id] = 1
                        show_hudmessage(id, "Znalazles przedmiot: %s :: Twoj noz pozwala ci teleportowac sie co 3 sekundy i zrobic dlugi skok jak kucniesz na 3 sekundy",player_item_name[id])
                }
                case 59:       
                {
                        player_item_name[id] = "Mag ring"
                        player_item_id[id] = rannum
                        player_ring[id]=1
                        player_b_fireball[id] = random_num(50,80)
                        show_hudmessage(id, "Znalazles przedmiot : %s :: Ten przedmiot dodaje ci +5 inteligencji i robi ognista kule, wcisnij E aby urzyc",player_item_name[id])
                }       
                case 60:       
                {
                        player_item_name[id] = "Nekromanta ring"
                        player_item_id[id] = rannum
                        player_b_respawn[id] = random_num(2,4)
                        player_b_vampire[id] = random_num(3,5)       
                        show_hudmessage(id, "Znalazles przedmiot : %s :: Dzieki temu itemowi masz szanse na ponowne odrodzenie sie i wysysasz zycie wrogowi",player_item_name[id])
                }
                case 61:
                {
                        player_item_name[id] = "Barbarzynca ring"
                        player_item_id[id] = rannum
                        player_b_explode[id] = random_num(120,330)
                        player_ring[id]=2
                        show_hudmessage(id, "Znalazles przedmiot : %s :: Ten item dodaje ci +5 sily i jak zginiesz wybuchasz",player_item_name[id])
                }
                case 62:
                {
                        player_item_name[id] = "Paladyn ring"
                        player_item_id[id] = rannum       
                        player_b_redirect[id] = random_num(7,17)
                        player_b_blind[id] = random_num(3,4)
                        show_hudmessage(id, "Znalazles przedmiot : %s :: Redukuje normalne obrazenia i masz szanse na oslepienie wroga",player_item_name[id])               
                }
                case 63:
                {
                        player_item_name[id] = "Mnich ring"
                        player_item_id[id] = rannum       
                        player_b_grenade[id] = random_num(1,4)
                        player_b_heal[id] = random_num(20,35)
                        show_hudmessage(id, "Znalazles przedmiot : %s :: Masz szanse na natychmiastowe zabicie z HE. Twoje hp bedzie sie regenerowac co 5 sekund oraz mozesz polozyc leczacy totem na 7 sekund",player_item_name[id])
                }       
                case 64:
                {
                        player_item_name[id] = "Zabojca ring"
                        player_item_id[id] = rannum
                        player_b_jumpx[id] = 1
                        player_ring[id]=3
                        show_hudmessage(id, "Znalazles przedmiot : %s :: Dostajesz +5 do zwinnosci. Mozesz zrobic podwojny skok w powietrzu",player_item_name[id])       
                }       
                case 65:
                {
                        player_item_name[id] = "Flashbang necklace"       
                        player_item_id[id] = rannum       
                        wear_sun[id] = 1
                        show_hudmessage (id, "Znalazles przedmiot : %s :: Flashbangi na ciebie nie dzialaja",player_item_name[id])
                }
                case 66:
                {
                        player_item_name[id] = "Chameleon"       
                        player_item_id[id] = rannum       
                        changeskin(id,0) 
                        show_hudmessage (id, "Znalazles przedmiot : %s :: Wygladasz jak przeciwnik",player_item_name[id])
                }
        }
        BoostRing(id)
       
       
        return PLUGIN_CONTINUE
}

/* UNIQUE ITEMS ============================================================================================ */
//Names are generated from an array

public award_unique_item(id)
{
        new Unique_names_Suffix[10][100]
        new Unique_names_Prefix[10][100]
       
        Unique_names_Suffix[1] = "Saintly amulet "
        Unique_names_Suffix[2] = "Holy sword "
        Unique_names_Suffix[3] = "Small staff "
        Unique_names_Suffix[4] = "Bright rope "
        Unique_names_Suffix[5] = "Shiny scepter "
       
        Unique_names_Prefix[1] = "of the stars"
        Unique_names_Prefix[2] = "of power"
        Unique_names_Prefix[3] = "of zod"
        Unique_names_Prefix[4] = "of life"
        Unique_names_Prefix[5] = "of the sun"
       
        //Generate the items name
       
        new roll_1 = random_num(1,4)
        new roll_2 = random_num(1,4)
       
        new Unique_name[100]
        add(Unique_name,99,Unique_names_Suffix[roll_1])
        add(Unique_name,99,Unique_names_Prefix[roll_2])
       
        player_item_name[id] = Unique_name
        player_item_id[id] = 100                               
       
        //Generate and apply the stats
       
        if (roll_1 == 1) player_b_damage[id] = random_num(1,5)
        if (roll_1 == 2) player_b_vampire[id] = random_num(1,5)
        if (roll_1 == 3) player_b_money[id] = random_num(2500,5000)
        if (roll_1 == 4) player_b_reduceH[id] = random_num(20,50)
        if (roll_1 == 5) player_b_blind[id] = random_num(3,5)
       
       
       
        if (roll_2 == 1) player_b_grenade[id] = random_num(1,4)
        if (roll_2 == 2) player_b_respawn[id] = random_num(2,4)
        if (roll_2 == 3) player_b_explode[id] = random_num(150,400)
        if (roll_2 == 4) player_b_redirect[id] = random_num(5,10)
        if (roll_2 == 5) player_b_heal[id] = random_num(1,15)
       
        item_durability[id] = 350
       
        set_hudmessage(220, 115, 70, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
        show_hudmessage(id, "Uniqie Znalazles przedmiot: %s", Unique_name)
       
}
/* EFFECTS ================================================================================================= */

public add_damage_bonus(id,damage,attacker_id)
{
        if (player_b_damage[attacker_id] > 0)
        {
                if (get_user_health(id) > player_b_damage[attacker_id])
                {
                        set_user_health(id,get_user_health(id) - player_b_damage[attacker_id])
                       
                        if (random_num(1,2) == 1) Effect_Bleed(id,248)
                }
                else
                {
                        set_user_health(id,random_num(1,5))
                }
        }
}

/* ==================================================================================================== */

public add_vampire_bonus(id,damage,attacker_id)
{
        if (player_b_vampire[attacker_id] > 0)
        {
                new maxhealth = race_heal[player_class[attacker_id]]+player_strength[attacker_id]*2
               
               
                if (get_user_health(attacker_id)+player_b_vampire[attacker_id] <= maxhealth)
                {
                        set_user_health(attacker_id,get_user_health(attacker_id)+player_b_vampire[attacker_id])
                }
                else
                {
                        set_user_health(attacker_id,maxhealth)
                }
        }
}

/* ==================================================================================================== */

public add_money_bonus(id)
{
        if (player_b_money[id] > 0)
        {
                if (cs_get_user_money(id) < 16000 - player_b_money[id]+player_intelligence[id]*50)
                {
                        cs_set_user_money(id,cs_get_user_money(id)+ player_b_money[id]+player_intelligence[id]*50)
                }
                else
                {
                        cs_set_user_money(id,16000)
                }
        }
}



/* ==================================================================================================== */

public add_grenade_bonus(id,attacker_id,weapon)
{
        if (player_b_grenade[attacker_id] > 0 && weapon == CSW_HEGRENADE && player_b_fireshield[id] == 0)        //Fireshield check
        {
                new roll = random_num(1,player_b_grenade[attacker_id])
                if (roll == 1)
                {
                        set_user_health(id, 0)
                        message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
                        write_byte(attacker_id)
                        write_byte(id)
                        write_byte(0)
                        write_string("grenade")
                        message_end()
                        set_user_frags(attacker_id, get_user_frags(attacker_id)+1)
                        set_user_frags(id, get_user_frags(id)+1)
                        cs_set_user_money(attacker_id, cs_get_user_money(attacker_id)+150)
                }
        }
}

/* ==================================================================================================== */

public add_redhealth_bonus(id)
{
        if (player_b_reduceH[id] > 0)
                set_user_health(id,get_user_health(id)-player_b_reduceH[id])
        if(player_item_id[id]==17)        //stalker ring
                set_user_health(id,5)
}

/* ==================================================================================================== */

public add_theif_bonus(id,attacker_id)
{
        if (player_b_theif[attacker_id] > 0)
        {
                new roll1 = random_num(1,5)
                if (roll1 == 1)
                {
                        if (cs_get_user_money(id) > player_b_theif[attacker_id])
                        {
                                cs_set_user_money(id,cs_get_user_money(id)-player_b_theif[attacker_id])
                                if (cs_get_user_money(attacker_id) + player_b_theif[attacker_id] <= 16000)
                                {
                                        cs_set_user_money(attacker_id,cs_get_user_money(attacker_id)+player_b_theif[attacker_id])               
                                }
                        }
                        else
                        {
                                new allthatsleft = cs_get_user_money(id)
                                cs_set_user_money(id,0)
                                if (cs_get_user_money(attacker_id) + allthatsleft <= 16000)
                                {
                                        cs_set_user_money(attacker_id,cs_get_user_money(id) + allthatsleft)                       
                                }
                        }
                }
        }
}

/* ==================================================================================================== */

public add_respawn_bonus(id)
{
        if (player_b_respawn[id] > 0)
        {
                new svIndex[32]
                num_to_str(id,svIndex,32)
                new roll = random_num(1,player_b_respawn[id])
                if (roll == 1)
                {
                        new maxpl,players[32]
                        get_players(players, maxpl)
                        if (maxpl > 2)
                        {
                                cs_set_user_money(id,cs_get_user_money(id)+4000)
                                set_task(0.5,"respawn",0,svIndex,32)               
                        }
                        else
                        {
                                set_hudmessage(220, 115, 70, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
                                show_hudmessage(id, "Wiecej niz 2 graczy jest wymagane do ponownego odrodzenia sie")       
                        }
                       
                }
        }
}

public respawn(svIndex[])
{
        new vIndex = str_to_num(svIndex)
        spawn(vIndex);
}

/* ==================================================================================================== */

public add_bonus_explode(id)
{
        if (player_b_explode[id] > 0)
        {
               
                new origin[3]
                get_user_origin(id,origin)
                explode(origin,id,0)
               
               
                for(new a = 0; a < MAX; a++)
                {
                        if (!is_user_connected(a) || !is_user_alive(a) || player_b_fireshield[a] != 0 ||  get_user_team(a) == get_user_team(id))
                                continue       
                       
                        new origin1[3]
                        get_user_origin(a,origin1)
                       
                        if(get_distance(origin,origin1) < player_b_explode[id] + player_intelligence[id]*2)
                        {
                                new dam = 75-(player_dextery[a]*2)
                                if(dam<1) dam=1
                               
                                if (get_user_health(a) - dam < 5)
                                        UTIL_Kill(id,a,"grenade")       
                                else
                                {
                                        set_user_health(a,get_user_health(a)-dam)
                                        Display_Fade(id,2600,2600,0,255,0,0,15)
                                }
                        }
                }
        }
}

public explode(vec1[3],playerid, trigger)
{
        message_begin( MSG_BROADCAST,SVC_TEMPENTITY,vec1)
        write_byte( 21 )
        write_coord(vec1[0])
        write_coord(vec1[1])
        write_coord(vec1[2] + 32)
        write_coord(vec1[0])
        write_coord(vec1[1])
        write_coord(vec1[2] + 1000)
        write_short( sprite_white )
        write_byte( 0 )
        write_byte( 0 )
        write_byte( 3 )
        write_byte( 10 )
        write_byte( 0 )
        write_byte( 188 )
        write_byte( 220 )
        write_byte( 255 )
        write_byte( 255 )
        write_byte( 0 )
        message_end()
       
        message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte( 12 )
        write_coord(vec1[0])
        write_coord(vec1[1])
        write_coord(vec1[2])
        write_byte( 188 )
        write_byte( 10 )
        message_end()
       
        message_begin( MSG_BROADCAST,SVC_TEMPENTITY,vec1)
        write_byte( 3 )
        write_coord(vec1[0])
        write_coord(vec1[1])
        write_coord(vec1[2])
        write_short( sprite_fire )
        write_byte( 65 )
        write_byte( 10 )
        write_byte( 0 )
        message_end()
       
        message_begin(MSG_BROADCAST,SVC_TEMPENTITY,{0,0,0},playerid)
        write_byte(107)
        write_coord(vec1[0])
        write_coord(vec1[1])
        write_coord(vec1[2])
        write_coord(175)
        write_short (sprite_gibs)
        write_short (25) 
        write_byte (10)
        message_end()
        if (trigger == 1)
        {
                set_user_rendering(playerid,kRenderFxNone, 0,0,0, kRenderTransAdd,0)
        }
}

/* ==================================================================================================== */

public add_bonus_gamble(id)
{       
        if (player_b_gamble[id] > 0 && is_user_alive(id))
        {
                new durba=item_durability[id]
                reset_item_skills(id)
                item_durability[id]=durba
                set_hudmessage(220, 115, 70, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
                new roll = random_num(1,player_b_gamble[id])
                if (roll == 1)
                {
                        show_hudmessage(id, "Premia rundy: +5 obrazen")
                        player_b_damage[id] = 5
                }
                if (roll == 2)
                {
                        show_hudmessage(id, "Premia rundy: +5 do wyzszego skoku")
                        player_b_gravity[id] = 5
                }
                if (roll == 3)
                {
                        show_hudmessage(id, "Premia rundy: +5 obrazen wampira")
                        player_b_vampire[id] = 5
                }
                if (roll == 4)
                {
                        show_hudmessage(id, "Premia rundy: +10 hp co kazde 5 sekund")
                        player_b_heal[id] = 10
                }
                if (roll == 5)
                {
                        show_hudmessage(id, "Premia rundy: 1/3 szans do natychmiastowego zabicia HE")
                        player_b_grenade[id] = 3
                }
        }
}

/* ==================================================================================================== */

public add_bonus_blind(id,attacker_id,weapon,damage)
{
        if (player_b_blind[attacker_id] > 0 && weapon != 4)
        {
                new roll = random_num(1,player_b_blind[attacker_id])
                if (roll == 1)
                {
                        message_begin(MSG_ONE,g_msg_screenfade,{0,0,0},id)
                        write_short( 1<<14 )
                        write_short( 1<<14 )
                        write_short( 1<<16 )
                        write_byte( 255 )
                        write_byte( 155 )
                        write_byte( 50 )
                        write_byte( 230 )
                        message_end()
                }
               
        }
}

/* ==================================================================================================== */

public item_c4fake(id)
{
        if (c4state[id] > 1)
        {
                hudmsg(id,2.0,"Meekstone mozesz uzyc raz na runde!")
                return PLUGIN_CONTINUE
        }
       
        if (player_b_meekstone[id] > 0 && c4state[id] == 1 && is_user_alive(id) == 1 && freeze_ended == true)
        {
                explode(c4bombc[id],id,0)
               
                for(new a = 0; a < MAX; a++)
                {
                        if (is_user_connected(a) && is_user_alive(a))
                        {                       
                                new origin1[3]
                                get_user_origin(a,origin1)
                               
                                if(get_distance(c4bombc[id],origin1) < 300 && get_user_team(a) != get_user_team(id))
                                {
                                        UTIL_Kill(id,a,"grenade")
                                }
                        }
                }
               
                c4state[id] = 2
                remove_entity(c4fake[id])
                c4fake[id] = 0
        }
       
        if (player_b_meekstone[id] > 0 && c4state[id] == 0 && c4fake[id] == 0 && is_user_alive(id) == 1 && freeze_ended == true)
        {
                new Float:pOrigin[3]
                entity_get_vector(id,EV_VEC_origin, pOrigin)
                c4fake[id] = create_entity("info_target")
               
                entity_set_model(c4fake[id],"models/w_backpack.mdl")
                entity_set_origin(c4fake[id],pOrigin)
                entity_set_string(c4fake[id],EV_SZ_classname,"fakec4")
                entity_set_edict(c4fake[id],EV_ENT_owner,id)
                entity_set_int(c4fake[id],EV_INT_movetype,6)
               
               
                new Float:aOrigin[3]
                entity_get_vector(c4fake[id],EV_VEC_origin, aOrigin)
                c4bombc[id][0] = floatround(aOrigin[0])
                c4bombc[id][1] = floatround(aOrigin[1])
                c4bombc[id][2] = floatround(aOrigin[2])
                c4state[id] = 1
        }
       
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

public item_fireball(id)
{
        if (fired[id] > 0)
        {
                hudmsg(id,2.0,"Ognistej kuli mozesz uzyc raz na runde!")
                return PLUGIN_HANDLED
        }
       
        if (fired[id] == 0 && player_b_fireball[id] > 0 && is_user_alive(id) == 1)
        {
                fired[id] = 1
                new Float:vOrigin[3]
                new fEntity
                entity_get_vector(id,EV_VEC_origin, vOrigin)
                fEntity = create_entity("info_target")
                entity_set_model(fEntity, "models/rpgrocket.mdl")
                entity_set_origin(fEntity, vOrigin)
                entity_set_int(fEntity,EV_INT_effects,64)
                entity_set_string(fEntity,EV_SZ_classname,"fireball")
                entity_set_int(fEntity, EV_INT_solid, SOLID_BBOX)
                entity_set_int(fEntity,EV_INT_movetype,5)
                entity_set_edict(fEntity,EV_ENT_owner,id)
               
               
               
                //Send forward
                new Float:fl_iNewVelocity[3]
                VelocityByAim(id, 500, fl_iNewVelocity)
                entity_set_vector(fEntity, EV_VEC_velocity, fl_iNewVelocity)
               
               
                message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                write_byte(22)
                write_short(fEntity)
                write_short(sprite_beam)
                write_byte(45)
                write_byte(4)
                write_byte(255)
                write_byte(0)
                write_byte(0)
                write_byte(25)
                message_end()
        }       
        return PLUGIN_HANDLED
}

/* ==================================================================================================== */

public add_bonus_redirect(id)
{
        if (player_b_redirect[id] > 0)
        {
                if (get_user_health(id)+player_b_redirect[id] <= race_heal[player_class[id]]+player_strength[id]*1)
                {
                        set_user_health(id,get_user_health(id)+player_b_redirect[id])
                }
               
        }
}

/* ==================================================================================================== */

public item_ghost(id)
{
        if (ghoststate[id] == 0 && player_b_ghost[id] > 0 && is_user_alive(id) && !ghost_check)
        {
                set_user_noclip(id,1)
                ghoststate[id] = 2
                ghosttime[id] = floatround(halflife_time())
                ghost_check = true
               
                message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
                write_byte( player_b_ghost[id]+1 )
                write_byte( 0 )
                message_end()
        }
        else
        {
                hudmsg(id,3.0,"Tylko jeden gracz moze uzywac Ducha w tym samym czasie! / Przedmiot zostal uzyty!")
        }
}

/* ==================================================================================================== */

public add_strength_bonus(id)
{
        set_user_health(id,race_heal[player_class[id]]+player_strength[id]*2)
}

/* ==================================================================================================== */

public add_bonus_darksteel(attacker,id,damage)
{
        if (player_b_darksteel[attacker] > 0)
        {
                if (UTIL_In_FOV(attacker,id) && !UTIL_In_FOV(id,attacker))
                {
                       
                        new dam = floatround (15+player_strength[id]*2*player_b_darksteel[id]/10.0)
                       
                        Effect_Bleed(id,248)
                        Hurt_Entity(attacker,id,dam+0.0)
                }
        }
}

/* ==================================================================================================== */

public item_eye(id)
{
        if (player_b_eye[id] == -1)
        {
                //place camera
                new Float:playerOrigin[3]
                entity_get_vector(id,EV_VEC_origin,playerOrigin)
                new ent = create_entity("info_target")
                entity_set_string(ent, EV_SZ_classname, "PlayerCamera")
                entity_set_int(ent, EV_INT_movetype, MOVETYPE_NOCLIP)
                entity_set_int(ent, EV_INT_solid, SOLID_NOT)
                entity_set_edict(ent, EV_ENT_owner, id)
                entity_set_model(ent, "models/rpgrocket.mdl")                                  //Just something
                entity_set_origin(ent,playerOrigin)
                entity_set_int(ent,EV_INT_iuser1,0)                //Viewing through this camera                                               
                set_rendering (ent,kRenderFxNone, 0,0,0, kRenderTransTexture,0)
                entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)
                player_b_eye[id] = ent
        }
        else
        {
                //view through camera or stop viewing
                new ent = player_b_eye[id]
                if (!is_valid_ent(ent))
                {
                        attach_view(id,id)
                        return PLUGIN_HANDLED
                }
                new viewing = entity_get_int(ent,EV_INT_iuser1)
               
                if (viewing)
                {       
                        entity_set_int(ent,EV_INT_iuser1,0)
                        attach_view(id,id)
                }       
                else
                {
                        entity_set_int(ent,EV_INT_iuser1,1)
                        attach_view(id,ent)
                }
        }
       
        return PLUGIN_HANDLED
}

/* ==================================================================================================== */

//Called when PlayerCamera thinks
public Think_PlayerCamera(ent)
{
        new id = entity_get_edict(ent,EV_ENT_owner)
       
        //Check if player is still having the item and is still online
        if (!is_valid_ent(id) || player_b_eye[id] == 0 || !is_user_connected(id))
        {
                //remove entity
                if (is_valid_ent(id) && is_user_connected(id)) attach_view(id,id)
                remove_entity(ent)
        }
        else
        {
                //Dont use cpu when not alive anyway or not viewing
                if (!is_user_alive(id))
                {
                        entity_set_float(ent,EV_FL_nextthink,halflife_time() + 3.0)
                        return PLUGIN_HANDLED
                }
               
                if (!entity_get_int(ent,EV_INT_iuser1))
                {
                        entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.5)
                        return PLUGIN_HANDLED
                }
               
                entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)
               
                //Find nearest player to camera
                new Float:pOrigin[3],Float:plOrigin[3],Float:ret[3]
                entity_get_vector(ent,EV_VEC_origin,plOrigin)
                new Float:distrec = 2000.0, winent = -1
               
                for (new i=0; i<MAX; i++)
                {
                        if (is_user_connected(i) && is_user_alive(i))
                        {
                                entity_get_vector(i,EV_VEC_origin,pOrigin)
                                pOrigin[2]+=10.0
                                if (trace_line ( 0, plOrigin, pOrigin, ret ) == i && vector_distance(pOrigin,plOrigin) < distrec)
                                {
                                        winent = i
                                        distrec = vector_distance(pOrigin,plOrigin)
                                }
                        }       
                }
               
                //Traceline and updown is still revresed
                if (winent > -1)
                {
                        new Float:toplayer[3], Float:ideal[3],Float:pOrigin[3]
                        entity_get_vector(winent,EV_VEC_origin,pOrigin)
                        pOrigin[2]+=10.0
                        toplayer[0] = pOrigin[0]-plOrigin[0]
                        toplayer[1] = pOrigin[1]-plOrigin[1]
                        toplayer[2] = pOrigin[2]-plOrigin[2]
                        vector_to_angle ( toplayer, ideal )
                        ideal[0] = ideal[0]*-1
                        entity_set_vector(ent,EV_VEC_angles,ideal)
                }
        }
       
        return PLUGIN_CONTINUE
}

public Create_Line(id,origin1[3],origin2[3],bool:draw)
{
        if (draw)
        {
                message_begin(MSG_ONE,SVC_TEMPENTITY,{0,0,0},id)
                write_byte(0)
                write_coord(origin1[0])        // starting pos
                write_coord(origin1[1])
                write_coord(origin1[2])
                write_coord(origin2[0])        // ending pos
                write_coord(origin2[1])
                write_coord(origin2[2])
                write_short(sprite_line)        // sprite index
                write_byte(1)                // starting frame
                write_byte(5)                // frame rate
                write_byte(2)                // life
                write_byte(3)                // line width
                write_byte(0)                // noise
                write_byte(255)        // RED
                write_byte(50)        // GREEN
                write_byte(50)        // BLUE                                       
                write_byte(155)                // brightness
                write_byte(5)                // scroll speed
                message_end()
        }
       
        new Float:ret[3],Float:fOrigin1[3],Float:fOrigin2[3]
        //So we dont hit ourself
        origin1[2]+=50
        IVecFVec(origin1,fOrigin1)
        IVecFVec(origin2,fOrigin2)
        new hit = trace_line ( 0, fOrigin1, fOrigin2, ret )
        return hit
       
}

/* ==================================================================================================== */

public Prethink_Blink(id)
{
        if( get_user_button(id) & IN_ATTACK2 && !(get_user_oldbutton(id) & IN_ATTACK2) && is_user_alive(id))
        {                       
                new clip, ammo
                new weapon = get_user_weapon(id,clip,ammo)
               
                if (weapon == CSW_KNIFE)
                {
                        if (halflife_time()-player_b_blink[id] <= 3) return PLUGIN_HANDLED               
                        player_b_blink[id] = floatround(halflife_time())       
                        UTIL_Teleport(id,300+15*player_intelligence[id])                       
                }
        }
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

/*
Called on end or mapchange -- Save items for players
public plugin_end()
{
        new Datafile[64], amxbasedir[64]
        //build_path(Datafile,63,"$basedir/diablo/datafile.txt")
       
        get_basedir(amxbasedir,63)
        format(Datafile,63,"%s/diablo/datafile.txt",amxbasedir)
       
        if(file_exists(Datafile)) delete_file(Datafile)
       
        //Write name and item for each player
        for (new i=0; i < MAX; i++)
        {
                if (player_dc_item[i] > 0 && player_dc_item[i] != 100) //unique
                {
                        new data[100]
                        format(data,99,"%s^"%i^"",player_dc_name[i],player_dc_item[i])
                        write_file(Datafile,data)
                }
        }
}
*/

/* ==================================================================================================== */


/* ==================================================================================================== */



/* ==================================================================================================== */



/* ==================================================================================================== */

public item_convertmoney(id)
{
        new maxhealth = race_heal[player_class[id]]+player_strength[id]*2
       
        if (cs_get_user_money(id) < 1000)
                hudmsg(id,2.0,"Nie masz wystarczajacej ilosci zlota, zeby zamienic je w zycie")
        else if (get_user_health(id) == maxhealth)
                hudmsg(id,2.0,"Masz maksymalna ilosc zycia")
        else
        {
                cs_set_user_money(id,cs_get_user_money(id)-1000)
               
                if (get_user_health(id)+15<= maxhealth)
                        set_user_health(id,get_user_health(id)+15)
                else
                        set_user_health(id,maxhealth)       
               
                Display_Fade(id,2600,2600,0,0,255,0,15)
        }
}

public item_windwalk(id)
{
        //First time this round
        if (player_b_usingwind[id] == 0)
        {
                new szId[10]
                num_to_str(id,szId,9)
                player_b_usingwind[id] = 1
               
                set_renderchange(id)
               
                engclient_cmd(id,"weapon_knife")
                set_user_maxspeed(id,500.0)
               
                new Float:val = player_b_windwalk[id] + 0.0
                set_task(val,"resetwindwalk",0,szId,32)
               
                message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
                write_byte( player_b_windwalk[id])
                write_byte( 0 )
                message_end()
        }
       
        //Disable again
        else if (player_b_usingwind[id] == 1)
        {
                player_b_usingwind[id] = 2
               
                set_renderchange(id)
               
                set_user_maxspeed(id,270.0)
                message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
                write_byte( 0)
                write_byte( 0 )
                message_end()
        }
       
        //Already used
        else if (player_b_usingwind[id] == 2)
        {
                set_hudmessage(220, 30, 30, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
                show_hudmessage(id, "Ten przedmiot mozesz uzyc raz na runde!")
        }
       
}

public resetwindwalk(szId[])
{
        new id = str_to_num(szId)
        if (id < 0 || id > MAX)
        {
                log_amx("Error in resetwindwalk, id: %i out of bounds", id)
        }
       
        if (player_b_usingwind[id] == 1)
        {
                player_b_usingwind[id] = 2
               
                set_renderchange(id)
               
                set_user_maxspeed(id,270.0)
                message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
                write_byte( 0)
                write_byte( 0 )
                message_end()
        }
       
}

/* ==================================================================================================== */

public Prethink_usingwind(id)
{
       
        if( get_user_button(id) & IN_ATTACK && is_user_alive(id))
        {
                new buttons = pev(id,pev_button)
                set_pev(id,pev_button,(buttons & ~IN_ATTACK));
                return FMRES_HANDLED;       
        }
       
        if( get_user_button(id) & IN_ATTACK2 && is_user_alive(id))
        {
                new buttons = pev(id,pev_button)
                set_pev(id,pev_button,(buttons & ~IN_ATTACK2));
                return FMRES_HANDLED;       
        }
       
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

public cvar_result_func(id, const cvar[], const value[])
{
        player_b_oldsen[id] = str_to_float(value)
        new svIndex[32]
        num_to_str(id,svIndex,32)
        set_task(2.5,"resetsens",0,svIndex,32)               
       
       
}

public resetsens(svIndex[])
{
        new id = str_to_num(svIndex)
       
        if (player_b_oldsen[id] > 0.0)
        {
                client_cmd(id,"sensitivity %f",player_b_oldsen[id])
                player_b_oldsen[id] = 0.0
        }
       
        message_begin( MSG_ONE, get_user_msgid("StatusIcon"), {0,0,0}, id )
        write_byte( 0 )   
        write_string( "dmg_chem")
        write_byte( 100 ) // red
        write_byte( 100 ) // green
        write_byte( 100 ) // blue
        message_end() 
       
       
}


/* ==================================================================================================== */

public Prethink_confuseme(id)
{
        if (player_b_oldsen[id] > 0.0)
                client_cmd(id,"sensitivity %f", 25.0)
       
}

public Bot_Setup()
{
        for (new id=0; id < MAX; id++)
        {
                if (is_user_connected(id) && is_user_bot(id))
                {
                        if (random_num(1,3) == 1 && player_item_id[id] > 0)
                                client_cmd(id,"say /drop")
                       
                        while (player_point[id] > 0)
                        {
                                player_point[id]--
                                switch(random_num(1,4))
                                {
                                        case 1: {
                                                player_agility[id]++
                                        }
                                        case 2: {
                                                player_strength[id]++
                                        }
                                        case 3: {
                                                player_intelligence[id]++
                                        }
                                        case 4: {
                                                player_dextery[id]++
                                        }
                                }
                        }
                }
        }
}

/* ==================================================================================================== */

public host_killed(id)
{
        if (player_lvl[id] > 1)
        {
                hudmsg(id,2.0,"Straciles doswiadczenie za zabicie zakladnikow")
                Give_Xp(id,-floatround(3*player_lvl[id]/(1.65-player_lvl[id]/60)))
        }
       
}


/* ==================================================================================================== */
public show_menu_item(id)
{
        new text[513]

        format(text, 512, "\yNowe Itemy - ^n\w1. Mag ring^n\w2. Paladyn ring^n\w3. Mnich ring^n\w4. Barbarzynca ring^n\w5. Zabojca ring^n\w6. Nekromanta ring^n\w7. Ninja ring^n\w8. Flashbang necklace^n\w9. Zamknij")

        new keys
        keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)
        show_menu(id, keys, text)
        return PLUGIN_HANDLED 
}

public nowe_itemy(id, key)
{
        switch(key)
        {
                case 0:
                {       
              magring(id)
                       
                }
                case 1:
                {       
                        paladynring(id)
                }
                case 2:
                {       
                        mnichring(id)
                }
                case 3:
                {
                        barbarzyncaring(id)
                }
                case 4:
                {
                        zabojcaring(id)
                }
                case 5:
                {
                        nekromantaring(id)
                }
                case 6:
                {
                        ninjaring(id)
                }
                case 7:
                {
                        flashbangnecklace(id)
                }
                case 8:
                {
                        return PLUGIN_HANDLED
                }
        }
       
        return PLUGIN_HANDLED
}
public magring(id)
{
showitem(id,"Mag ring","Common","None","<br>Dostajesz +5 inteligencji.<br>Druga funcja: Mozesz wytworzyc ognista kule<br><br>")
}
public paladynring(id)
{
showitem(id,"Paladyn ring","Common","None","<br>Redukuje normalne obrazenia i masz szanse na oslepienie gracza<br><br>")
}
public mnichring(id)
{
showitem(id,"Mnich ring","Common","None","<br>Mozesz leczyc osoby z teamu, klasc totem ktory leczy cie i towje hp jest odnawiane co 5 sek<br><br>")
}
public barbarzyncaring(id)
{
showitem(id,"Barbarzynca ring","Common","None","<br>Ten item dodaje ci +5 sily i jak zginiesz wybuchasz<br><br>")
}
public zabojcaring(id)
{
showitem(id,"Zabojca ring","Common","None","<br>Dodaje ci +5 agility i mozesz zrobic podwojny skok<br><br>")
}
public nekromantaring(id)
{
showitem(id,"Nekromanta ring","Common","None","<br>Mozesz ponownie odrodzic sie.<br>Dostajesz vampiric obraznia<br><br>")
}
public ninjaring(id)
{
showitem(id,"Ninja ring","Common","None","<br>Mozesz teleportowac sie co 3 sekundy jesli uzyjesz prawego ataku noza.<br>Druga funkcja : kucnij aby zrobic dlugi skok<br><br>")
}
public flashbangnecklace(id)
{
showitem(id,"Flashbang necklece","Common","None","<br>Flashbangi na ciebie nie dzialaja<br><br>")
}

/* ==================================================================================================== */


public showmenu(id)
{
        new text[513]
        new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<9)
       
       
        format(text, 512, "\yOpcje - ^n\w1. Informacje o przedmiocie^n\w2. Upusc obecny przedmiot^n\w3. Pokaz pomoc^n\w4. Uzyj mocy przedmiotu^n\w5. Kup Rune^n\w6. Informacje o statystykach^n^n\w0. Zamknij")
       
        show_menu(id, keys, text)
        return PLUGIN_HANDLED 
}


public option_menu(id, key)
{
        switch(key)
        {
                case 0:
                {       
                        iteminfo(id)
                       
                }
                case 1:
                {       
                        dropitem(id)
                }
                case 2:
                {       
                        helpme(id)
                }
                case 3:
                {
                        Use_Spell(id)
                }
                case 4:
                {
                        buyrune(id)
                }
                case 5:
                {
                        showskills(id)
                }
                case 9:
                {
                        return PLUGIN_HANDLED
                }
        }
       
        return PLUGIN_HANDLED
}

public Prethink_froglegs(id)
{
        if (get_user_button(id) & IN_DUCK)
        {
                //start holding down button here, set to halflife time
                if (player_b_froglegs[id] == 1)
                {
                        player_b_froglegs[id] = floatround(halflife_time())
                }
                else
                {
                        if (floatround(halflife_time())-player_b_froglegs[id] >= 2.0)
                        {
                                new Float:fl_iNewVelocity[3]
                                VelocityByAim(id, 1000, fl_iNewVelocity)
                                fl_iNewVelocity[2] = 210.0
                                entity_set_vector(id, EV_VEC_velocity, fl_iNewVelocity)
                                player_b_froglegs[id] = 1
                        }
                }
        }
        else
        {
                player_b_froglegs[id] = 1
        }
}

/* ==================================================================================================== */

public select_class(id)
{
        if(is_user_bot(id)) return
       
        new lx[9]

        new text[512]
        new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)
               
        format(text, 511,"\yWybierz Klase - ^n\w1. Mag^t^tLevel :%d ^n\w2. Paladyn^tLevel :%d ^n\w3. Mnich^t^tLevel :%d ^n\w4. Zabojca^tLevel :%d ^n\w5. Barbarzynca^tLevel :%d ^n\w6. Nekromanta^tLevel :%d ^n\w7. Ninja^t^tLevel :%d ^n\w8. Lowca^t^tLevel :%d",lx[Mag],lx[Paladyn],lx[Mnich],lx[Zabojca],lx[Barbarzynca],lx[Nekromanta],lx[Ninja],lx[Hunter])

        keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)
        show_menu(id, keys, text)
}

public select_class_menu(id, key)
{
        g_haskit[id] = 0
        switch(key)
        {
                case 0:
                {       
                        player_class[id] = Mag                       
                }
                case 1:
                {       
                        player_class[id] = Paladyn
                }
                case 2:
                {       
                        player_class[id] = Mnich
                }
                case 3:
                {       
                        player_class[id] = Zabojca
                }
                case 4:
                {       
                        player_class[id] = Barbarzynca
                }
                case 5:
                {       
                        player_class[id] = Nekromanta
                        g_haskit[id] = 1
                       
                }
                case 6:
                {       
                        player_class[id] = Ninja
                }
                case 7:
                {       
                        player_class[id] = Hunter
                        g_GrenadeTrap[id] = 1
                }
                case 8:
                {
                        return PLUGIN_HANDLED
                }
               
        }
               
        LoadXP(id)
        CurWeapon(id)
       
        give_knife(id)
       
        return PLUGIN_HANDLED
}

/* ==================================================================================================== */
public check_class()
{
        for (new id=0; id < 33; id++)
        {
                  if((player_class[id] == Ninja) && (is_user_connected(id)))
                {
                       
                       
                        if (is_user_alive(id)) set_user_armor(id,100)       
                }
                set_gravitychange(id)
                set_renderchange(id)
        }
}
                       

/* ==================================================================================================== */

public add_barbarian_bonus(id)
{
        if (player_class[id] == Barbarzynca)
        {       
                new maxhealth = race_heal[player_class[id]]+player_strength[id]*2
               
               
                if (get_user_health(id)+25 <= maxhealth)
                {
                        set_user_health(id,get_user_health(id)+25)
                }
                else
                {
                        set_user_health(id,maxhealth)
                }
        }
}

/* ==================================================================================================== */

public add_bonus_necromancer(attacker_id,id)
{
        if (player_class[attacker_id] == Nekromanta)
        {
                if (get_user_health(id) - 10 <= 0)
                {
                        set_user_health(id,random_num(1,3))
                }
                else
                {
                        set_user_health(id,get_user_health(id)-10)
                }
        }
}

/* ==================================================================================================== */

//What modules are required
public plugin_modules()
{
        require_module("engine")
        require_module("cstrike")
        require_module("fun")
        require_module("fakemeta")
}

/* ==================================================================================================== */

//Find the nearest alive opponent in our view
public UTIL_FindNearestOpponent(id,maxdist)
{
        new best = 99999
        new entfound = -1
        new MyOrigin[3]
        get_user_origin(id,MyOrigin)
       
        for (new i=1; i < MAX; i++)
        {
                if (i == id || !is_user_connected(i) || !is_user_alive(i) || get_user_team(id) == get_user_team(i))
                        continue
               
                new TempOrigin[3],Float:fTempOrigin[3]
                get_user_origin(i,TempOrigin)
                IVecFVec(TempOrigin,fTempOrigin)
               
                if (!UTIL_IsInView(id,i))
                        continue
               
               
                new dist = get_distance ( MyOrigin,TempOrigin )
               
                if ( dist < maxdist && dist < best)
                {
                        best = dist
                        entfound = i
                }               
        }
       
        return entfound
}

/* ==================================================================================================== */

//Basicly see's if we can draw a straight line to the target without interference
public bool:UTIL_IsInView(id,target)
{
        new Float:IdOrigin[3], Float:TargetOrigin[3], Float:ret[3]
        new iIdOrigin[3], iTargetOrigin[3]
       
        get_user_origin(id,iIdOrigin,1)
        get_user_origin(target,iTargetOrigin,1)
       
        IVecFVec(iIdOrigin,IdOrigin)
        IVecFVec(iTargetOrigin, TargetOrigin)
       
        if ( trace_line ( 1, IdOrigin, TargetOrigin, ret ) == target)
                return true
       
        if ( get_distance_f(TargetOrigin,ret) < 10.0)
                return true
       
        return false
       
}
/* ==================================================================================================== */

public item_dagon(id)
{
        if (player_b_dagfired[id])
        {
                set_hudmessage(220, 30, 30, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
                show_hudmessage(id, "Tego przedmiotu mozesz uzyc raz na runde")
                return PLUGIN_HANDLED
        }
        //Target nearest non-friendly player
        new target = UTIL_FindNearestOpponent(id,600+player_intelligence[id]*20)
       
        if (target == -1)
                return PLUGIN_HANDLED
       
        new DagonDamage = player_b_dagon[id]*20
        new Red = 0
       
        if (player_b_dagon[id] == 1) Red = 175
        else if (player_b_dagon[id] == 2) Red = 225
        else if (player_b_dagon[id] > 2) Red = 255
       
       
        //Dagon damage done is reduced by the targets dextery
        DagonDamage-=player_dextery[target]*2
       
        if (DagonDamage < 0)
                DagonDamage = 0
       
        new Hit[3]
        get_user_origin(target,Hit)

        //Create Lightning
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
        write_byte(1) // TE_BEAMENTPOINT
        write_short(id)
        write_coord(Hit[0])
        write_coord(Hit[1])
        write_coord(Hit[2])
        write_short(sprite_lgt)
        write_byte(0)
        write_byte(1)
        write_byte(3)
        write_byte(10)        //WITD
        write_byte(60)
        write_byte(Red)
        write_byte(0)
        write_byte(0)
        write_byte(100)        //BRIGT
        write_byte(0)
        message_end()
       
        player_b_dagfired[id] = true
       
        //Apply damage
        if (get_user_health(target) - DagonDamage <= 0)
                UTIL_Kill(id,target,"world")
        else
        {
                set_user_health(target,get_user_health(target)-DagonDamage)
                Display_Fade(target,2600,2600,0,255,0,0,15)
                hudmsg(id,2.0,"Twoje ciosy dagon przyjol %i, %i", DagonDamage, player_dextery[target]*2)
        }
       
       
        return PLUGIN_HANDLED
       
       
}

/* ==================================================================================================== */

public UTIL_Kill(attacker,id,weapon[])
{
        if( is_user_alive(id)){
                if(get_user_team(attacker)!=get_user_team(id))
                        set_user_frags(attacker,get_user_frags(attacker) +1);
       
                if(get_user_team(attacker)==get_user_team(id))
                        set_user_frags(attacker,get_user_frags(attacker) -1);
               
                if (cs_get_user_money(attacker) + 150 <= 16000)
                        cs_set_user_money(attacker,cs_get_user_money(attacker)+150)
                else
                        cs_set_user_money(attacker,16000)
       
                cs_set_user_deaths(id, cs_get_user_deaths(id)+1)
                user_kill(id,1)
               
                if(is_user_connected(attacker) && attacker!=id)
                {
                        award_kill(attacker,id)
                        if(is_user_alive(attacker)) award_item(attacker,0)
                }
                               
                message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
                write_byte(attacker)
                write_byte(id)
                write_byte(0)
                write_string(weapon)
                message_end()
       
                message_begin(MSG_ALL,gmsgScoreInfo)
                write_byte(attacker)
                write_short(get_user_frags(attacker))
                write_short(get_user_deaths(attacker))
                write_short(0)
                write_short(get_user_team(attacker))
                message_end()
       
                message_begin(MSG_ALL,gmsgScoreInfo)
                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()
       
                new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
       
                get_user_name(attacker, kname, 31);
                get_user_team(attacker, kteam, 9);
                get_user_authid(attacker, kauthid, 31);
       
                get_user_name(id, vname, 31);
                get_user_team(id, vteam, 9);
                get_user_authid(id, vauthid, 31);
       
                log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
                kname, get_user_userid(attacker), kauthid, kteam,
                vname, get_user_userid(id), vauthid, vteam, weapon);
        }
}

/* ==================================================================================================== */

//Will return 1 if user has amount of money and then substract
public bool:UTIL_Buyformoney(id,amount)
{
        if (cs_get_user_money(id) >= amount)
        {
                cs_set_user_money(id,cs_get_user_money(id)-amount)
                return true
        }
        else
        {
                hudmsg(id,2.0,"Nie masz tyle zlota")
                return false
        }
       
        return false
}
public buyrune(id)
{
        new text[513]
       
        format(text, 512, "\ySklep z runami - ^n\w1. Upgrade [Moze ulepszyc item] - \r$9000^n\w Uwaga nie kazdy item sie da ulepszyc ^n\Slabe itemy latwo ulepszyc ^n\w4 Mocne itemy moga ulec uszkodzeniu ^n\w5. Sol [Dostajesz losowy przedmiot] \r$5000^n\w6. Zal [Dostajesz doswiadczenia] \r$14500^n^n\w0. Zamknij")
       
        new keys = (1<<0)|(1<<4)|(1<<5)|(1<<9)
        show_menu(id, keys, text)
        return PLUGIN_HANDLED 
}


public select_rune_menu(id, key)
{
        switch(key)
        {
                case 0:
                {
                        if (!UTIL_Buyformoney(id,9000))
                                return PLUGIN_HANDLED

                        upgrade_item(id)
                }
                               
                case 4:
                {       
                        if (!UTIL_Buyformoney(id,5000))
                                return PLUGIN_HANDLED
                        award_item(id,0)
                        return PLUGIN_HANDLED
                }
                case 5:
                {
                        if (!UTIL_Buyformoney(id,14500))
                                return PLUGIN_HANDLED
                        new exp = get_cvar_num("diablo_xpbonus")*random_num(3,10)+player_lvl[id]*get_cvar_num("diablo_xpbonus")/20
                        Give_Xp(id,exp)
                        client_print(id,print_center,"dostales %d expa!",exp)
                        return PLUGIN_HANDLED
                }
                case 9:
                {       
                        return PLUGIN_HANDLED
                }
               

        }
       
        return PLUGIN_HANDLED
}

public upgrade_item(id)
{
        if(item_durability[id]>0) item_durability[id] += random_num(-50,50)
        if(player_b_jumpx[id]>0) player_b_jumpx[id] += random_num(0,1)
       
        if(player_b_vampire[id]>0)
        {
                if(player_b_vampire[id]>20) player_b_vampire[id] += random_num(-1,2)
                else if(player_b_vampire[id]>10) player_b_vampire[id] += random_num(0,2)
                else player_b_vampire[id]+= random_num(1,3)
        }
        if(player_b_damage[id]>0) player_b_damage[id] += random_num(0,3)
        if(player_b_money[id]!=0) player_b_money[id]+= random_num(-100,300)       
        if(player_b_gravity[id]>0)
        {
                if(player_b_gravity[id]<3) player_b_gravity[id]+=random_num(0,2)
                else if(player_b_gravity[id]<5) player_b_gravity[id]+=random_num(1,3)
                else if(player_b_gravity[id]<8) player_b_gravity[id]+=random_num(-1,3)
                else if(player_b_gravity[id]<10) player_b_gravity[id]+=random_num(0,1)
        }
        if(player_b_inv[id]>0)
        {
                if(player_b_inv[id]>200) player_b_inv[id]-=random_num(0,50)
                else if(player_b_inv[id]>100) player_b_inv[id]-=random_num(-25,50)
                else if(player_b_inv[id]>50) player_b_inv[id]-=random_num(-10,20)
                else if(player_b_inv[id]>25) player_b_inv[id]-=random_num(-10,10)
        }
        if(player_b_grenade[id]>0)
        {
                if(player_b_grenade[id]>4) player_b_grenade[id]-=random_num(0,2)
                else if(player_b_grenade[id]>2) player_b_grenade[id]-=random_num(0,1)
                else if(player_b_grenade[id]==2) player_b_grenade[id]-=random_num(-1,1)
        }
        if(player_b_reduceH[id]>0) player_b_reduceH[id]-=random_num(0,player_b_reduceH[id])
        if(player_b_theif[id]>0) player_b_theif[id] += random_num(0,250)
        if(player_b_respawn[id]>0)
        {
                if(player_b_respawn[id]>2) player_b_respawn[id]-=random_num(0,1)
                else if(player_b_respawn[id]>1) player_b_respawn[id]-=random_num(-1,1)
        }
        if(player_b_explode[id]>0)player_b_explode[id] += random_num(0,50)
        if(player_b_heal[id]>0)
        {
                if(player_b_heal[id]>20) player_b_heal[id]+= random_num(-1,3)
                else if(player_b_heal[id]>10) player_b_heal[id]+= random_num(0,4)
                else player_b_heal[id]+= random_num(2,6)
        }
        if(player_b_blind[id]>0)
        {
                if(player_b_blind[id]>5) player_b_blind[id]-= random_num(0,2)
                else if(player_b_blind[id]>1) player_b_blind[id]-= random_num(0,1)
        }
               
        if(player_b_teamheal[id]>0) player_b_teamheal[id] += random_num(0,5)
       
        if(player_b_redirect[id]>0) player_b_redirect[id]+= random_num(0,2)
        if(player_b_fireball[id]>0) player_b_fireball[id]+= random_num(0,33)
        if(player_b_ghost[id]>0) player_b_ghost[id]+= random_num(0,1)
        if(player_b_windwalk[id]>0) player_b_windwalk[id] += random_num(0,1)

        if(player_b_dagon[id]>0) player_b_dagon[id] += random_num(0,1)
        if(player_b_sniper[id]>0)
        {
                if(player_b_sniper[id]>5) player_b_sniper[id]-=random_num(0,2)
                else if(player_b_sniper[id]>2) player_b_sniper[id]-=random_num(0,1)
                else if(player_b_sniper[id]>1) player_b_sniper[id]-=random_num(-1,1)
        }

        if(player_b_extrastats[id]>0) player_b_extrastats[id] += random_num(0,2)
        if(player_b_firetotem[id]>0) player_b_firetotem[id] += random_num(0,50)

        if(player_b_darksteel[id]>0) player_b_darksteel[id] += random_num(0,2)
        if(player_b_mine[id]>0) player_b_mine[id] += random_num(0,1)
        if(player_sword[id]>0)
        {
                if(player_b_jumpx[id]==0 && random_num(0,10)==10) player_b_jumpx[id]=1
                if(player_b_vampire[id]==0 && random_num(0,10)==10) player_b_vampire[id]=1
                if(player_b_gravity[id]==0 && random_num(0,10)==10) player_b_gravity[id]=1
                if(player_b_respawn[id]==0 && random_num(0,10)==5) player_b_respawn[id]=15
                else if(player_b_respawn[id]>2 && random_num(0,10)==5) player_b_respawn[id]+=random_num(0,1)
                if(player_b_ghost[id]==0 && random_num(0,10)==10) player_b_ghost[id]=1
                if(player_b_darksteel[id]==0 && random_num(0,10)==10) player_b_darksteel[id]=1
        }
       
}

/* ==================================================================================================== */

//Blocks fullupdate (can reset hud)
public fullupdate(id)
{
        return PLUGIN_HANDLED
}

/* ==================================================================================================== */

public add_bonus_scoutdamage(attacker_id,id,weapon)
{
        if (player_b_sniper[attacker_id] > 0 && get_user_team(attacker_id) != get_user_team(id) && weapon == CSW_SCOUT && player_class[id]!=Ninja)
        {
               
                if (!is_user_alive(id))
                        return PLUGIN_HANDLED
               
                if (random_num(1,player_b_sniper[attacker_id]) == 1)
                        UTIL_Kill(attacker_id,id,"scout")
               
        }
       
        return PLUGIN_HANDLED
}

/* ==================================================================================================== */

public add_bonus_illusion(attacker_id,id,weapon)
{
        if(HasFlag(id,Flag_Illusion))
        {
                new weaponname[32]
                get_weaponname( weapon, weaponname, 31 )
                replace(weaponname, 31, "weapon_", "")
                UTIL_Kill(attacker_id,id,weaponname)
        }
}

/* ==================================================================================================== */

public item_take_damage(id,damage)
{
        new itemdamage = get_cvar_num("diablo_durability")
       
        if (player_item_id[id] > 0 && item_durability[id] >= 0 && itemdamage> 0 && damage > 5)
        {
                //Make item take damage
                if (item_durability[id] - itemdamage <= 0)
                {
                        item_durability[id]-=itemdamage
                        dropitem(id)
                }
                else
                {
                        item_durability[id]-=itemdamage
                }
               
        }
}

/* ==================================================================================================== */

//From twistedeuphoria plugin
public Prethink_Doublejump(id)
{
        if(!is_user_alive(id))
                return PLUGIN_HANDLED
       
        if((get_user_button(id) & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(get_user_oldbutton(id) & IN_JUMP))
        {
                if(jumps[id] < player_b_jumpx[id])
                {
                        dojump[id] = true
                        jumps[id]++
                        return PLUGIN_HANDLED
                }
        }
        if((get_user_button(id) & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
        {
                jumps[id] = 0
                return PLUGIN_CONTINUE
        }
       
        return PLUGIN_HANDLED
}

public Postthink_Doubeljump(id)
{
        if(!is_user_alive(id))
                return PLUGIN_HANDLED
       
        if(dojump[id] == true)
        {
                new Float:velocity[3]       
                entity_get_vector(id,EV_VEC_velocity,velocity)
                velocity[2] = random_float(265.0,285.0)
                entity_set_vector(id,EV_VEC_velocity,velocity)
                dojump[id] = false
                return PLUGIN_CONTINUE
        }
       
        return PLUGIN_HANDLED
}

/* ==================================================================================================== */

public spawn_powerup(Float:sOrigin[3])
{
        new ent = create_entity("info_target")
        entity_set_string(ent, EV_SZ_classname, "PowerUp")
        entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS)
        entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
        entity_set_model(ent, "models/bag.mdl")                         
        set_rendering(ent, kRenderFxGlowShell, 0,0,0, kRenderNormal, 255)
        entity_set_origin(ent,sOrigin)
        entity_set_int(ent,EV_INT_iuser1,0)        //Amount of color glow
        new Float:maxs[3] = {16.0,16.0,6.0}
        new Float:mins[3] = {-16.0,-16.0,-6.0}
        entity_set_size(ent,mins,maxs)
        powerup_taken = false
        entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)
       
}

public award_powerup(id)
{
        if (is_user_connected(id) && is_user_alive(id) && !powerup_taken)
        {
                if (random_num(1,2) == 1)
                {
                        if (cs_get_user_money(id) < 5000)
                                cs_set_user_money(id,5000)
                        else if (cs_get_user_money(id) < 10000)
                                cs_set_user_money(id,10000)
                        else if (cs_get_user_money(id) < 16000)
                                cs_set_user_money(id,16000)
                       
                        set_hudmessage(100, 200, 55, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
                        show_hudmessage(id, "Powerup: Prezent pieniezny")
                }
                else
                {
                        Give_Xp(id,get_cvar_num("diablo_xpbonus")*2)
                        set_hudmessage(100, 200, 55, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
                        show_hudmessage(id, "Powerup: Doswiadczenie")
                }
               
                powerup_taken = true
        }
}

public Think_PowerUp(ent)
{
        //If set to delete
        if (entity_get_int(ent,EV_INT_iuser2) == 1)
        {
                remove_entity(ent)
                return PLUGIN_HANDLED
        }
       
        new glow = entity_get_int(ent,EV_INT_iuser1)
       
        if (glow < 255)
        {
                glow++
                entity_set_int(ent,EV_INT_iuser1,glow)
        }
       
        set_rendering(ent, kRenderFxGlowShell, 0,glow,0, kRenderNormal, 255)
        entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.5)
       
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

public register_place(kid)
{
        if (!spawnset)
                return PLUGIN_HANDLED
       
        new Place[3]
        get_user_origin(kid,Place,0)
       
        new distCTstart = get_distance(Place,CTstart)
        new distTstart = get_distance(Place,Tstart)
       
        if (distCTstart > 300 && distTstart > 300 && abs(distCTstart - distTstart) < 150)
        {
                if (havespawn)
                {
                        if (random_num(1,3) == 3)
                                NextPowerup = Place
                }
                else
                {
                        havespawn = true
                        NextPowerup = Place
                }
               
        }
       
        return PLUGIN_CONTINUE
       
       
}

/* ==================================================================================================== */

public SpawnPowerup()
{
        if (!spawnset || !havespawn)
                return PLUGIN_HANDLED
       
        new chance = get_cvar_num("diablo_spawnchance")
       
        if (random_num(1,chance) == 1)
        {       
               
                //Dont spawn if one is already there
                if (find_ent_by_class(-1,"PowerUp") > 0)
                        return PLUGIN_HANDLED
               
                //Spawn powerup
                new Float:spawnplace[3]
                IVecFVec(NextPowerup,spawnplace)
                spawn_powerup(spawnplace)
        }
       
        return PLUGIN_CONTINUE
       
       
}

/* ==================================================================================================== */

public eventGrenade(id)
{
        new id = read_data(1)
        if (player_b_grenade[id] > 0 || player_b_smokehit[id] > 0)
        {
                set_task(0.1, "makeGlow", id)
        }
}

public makeGlow(id)
{
        new grenade
        new greModel[100]
        grenade = get_grenade(id)
       
        if( grenade )
        {       
                entity_get_string(grenade, EV_SZ_model, greModel, 99)
               
                if(equali(greModel, "models/w_hegrenade.mdl" ) && player_b_grenade[id] > 0 )       
                        set_rendering(grenade, kRenderFxGlowShell, 255,0,0, kRenderNormal, 255)
               
                if(equali(greModel, "models/w_smokegrenade.mdl" ) && player_b_smokehit[id] > 0 )       
                {
                        set_rendering(grenade, kRenderFxGlowShell, 0,255,255, kRenderNormal, 255)
                }
        }
}

/* ==================================================================================================== */

public BoostStats(id,amount)
{
        player_strength[id]+=amount
        player_dextery[id]+=amount
        player_agility[id]+=amount
        player_intelligence[id]+=amount
}

public SubtractStats(id,amount)
{
        player_strength[id]-=amount
        player_dextery[id]-=amount
        player_agility[id]-=amount
        player_intelligence[id]-=amount
}

public BoostRing(id)
{
        switch(player_ring[id])
        {
                case 1: player_intelligence[id]+=5
                case 2: player_strength[id]+=5
                case 3: player_agility[id]+=5
        }
}

public SubtractRing(id)
{
        switch(player_ring[id])
        {
                case 1: player_intelligence[id]-=5
                case 2: player_strength[id]-=5
                case 3: player_agility[id]-=5
        }
}

/* ==================================================================================================== */

public SelectBotRace(id)
{
        if (!is_user_bot(id))
                return PLUGIN_HANDLED
       
       
       
        if (player_class[id] == 0)
        {
                player_class[id] = random_num(1,7)
                //load_xp(id)
        }
       
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

public showskills(id)
{
        new Skillsinfo[768]
        format(Skillsinfo,767,"Masz %i sily - to daje tobie %i zycia<br><br>Masz %i zwinnosci - to daje tobie szybsze bieganie o %i punkow i redukuje sile atakow magia %i%%<br><br>Masz %i zrecznosci - Redukuje obrazenia z normalnych atkow %0.0f%%<br><br>Masz %i inteligencji - to daje im wieksza moc przedmiotom ktorych da sie uzyc<br>",
        player_strength[id],
        player_strength[id]*2,
        player_dextery[id],
        floatround(player_dextery[id]*1.3),
        player_dextery[id]*3,
        player_agility[id],
        player_damreduction[id]*100,
        player_intelligence[id])
       
        showitem(id,"Skills","None","None", Skillsinfo)
}

/* ==================================================================================================== */

public UTIL_Teleport(id,distance)
{       
        Set_Origin_Forward(id,distance)
       
        new origin[3]
        get_user_origin(id,origin)
       
        //Particle burst ie. teleport effect       
        message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) //message begin
        write_byte(TE_PARTICLEBURST )
        write_coord(origin[0]) // origin
        write_coord(origin[1]) // origin
        write_coord(origin[2]) // origin
        write_short(20) // radius
        write_byte(1) // particle color
        write_byte(4) // duration * 10 will be randomized a bit
        message_end()
       
       
}

stock Set_Origin_Forward(id, distance)
{
        new Float:origin[3]
        new Float:angles[3]
        new Float:teleport[3]
        new Float:heightplus = 10.0
        new Float:playerheight = 64.0
        new bool:recalculate = false
        new bool:foundheight = false
        pev(id,pev_origin,origin)
        pev(id,pev_angles,angles)
       
        teleport[0] = origin[0] + distance * floatcos(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
        teleport[1] = origin[1] + distance * floatsin(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
        teleport[2] = origin[2]+heightplus
       
        while (!Can_Trace_Line_Origin(origin,teleport) || Is_Point_Stuck(teleport,48.0))
        {       
                if (distance < 10)
                        break;
               
                //First see if we can raise the height to MAX playerheight, if we can, it's a hill and we can teleport there       
                for (new i=1; i < playerheight+20.0; i++)
                {
                        teleport[2]+=i
                        if (Can_Trace_Line_Origin(origin,teleport) && !Is_Point_Stuck(teleport,48.0))
                        {
                                foundheight = true
                                heightplus += i
                                break
                        }
                       
                        teleport[2]-=i
                }
               
                if (foundheight)
                        break
               
                recalculate = true
                distance-=10
                teleport[0] = origin[0] + (distance+32) * floatcos(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
                teleport[1] = origin[1] + (distance+32) * floatsin(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
                teleport[2] = origin[2]+heightplus
        }
       
        if (!recalculate)
        {
                set_pev(id,pev_origin,teleport)
                return PLUGIN_CONTINUE
        }
       
        teleport[0] = origin[0] + distance * floatcos(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
        teleport[1] = origin[1] + distance * floatsin(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
        teleport[2] = origin[2]+heightplus
        set_pev(id,pev_origin,teleport)
       
        return PLUGIN_CONTINUE
}

stock bool:Can_Trace_Line_Origin(Float:origin1[3], Float:origin2[3])
{       
        new Float:Origin_Return[3]       
        new Float:temp1[3]
        new Float:temp2[3]
       
        temp1[x] = origin1[x]
        temp1[y] = origin1[y]
        temp1[z] = origin1[z]-30
       
        temp2[x] = origin2[x]
        temp2[y] = origin2[y]
        temp2[z] = origin2[z]-30
       
        trace_line(-1, temp1, temp2, Origin_Return)
       
        if (get_distance_f(Origin_Return,temp2) < 1.0)
                return true
       
        return false
}

stock bool:Is_Point_Stuck(Float:Origin[3], Float:hullsize)
{
        new Float:temp[3]
        new Float:iterator = hullsize/3
       
        temp[2] = Origin[2]
       
        for (new Float:i=Origin[0]-hullsize; i < Origin[0]+hullsize; i+=iterator)
        {
                for (new Float:j=Origin[1]-hullsize; j < Origin[1]+hullsize; j+=iterator)
                {
                        //72 mod 6 = 0
                        for (new Float:k=Origin[2]-CS_PLAYER_HEIGHT; k < Origin[2]+CS_PLAYER_HEIGHT; k+=6)
                        {
                                temp[0] = i
                                temp[1] = j
                                temp[2] = k
                               
                                if (point_contents(temp) != -1)
                                        return true
                        }
                }
        }
       
        return false
}

stock Effect_Bleed(id,color)
{
        new origin[3]
        get_user_origin(id,origin)
       
        new dx, dy, dz
       
        for(new i = 0; i < 3; i++)
        {
                dx = random_num(-15,15)
                dy = random_num(-15,15)
                dz = random_num(-20,25)
               
                for(new j = 0; j < 2; j++)
                {
                        message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
                        write_byte(TE_BLOODSPRITE)
                        write_coord(origin[0]+(dx*j))
                        write_coord(origin[1]+(dy*j))
                        write_coord(origin[2]+(dz*j))
                        write_short(sprite_blood_spray)
                        write_short(sprite_blood_drop)
                        write_byte(color) // color index
                        write_byte(8) // size
                        message_end()
                }
        }
}

/* ==================================================================================================== */

public Use_Spell(id)
{
        if (player_global_cooldown[id] + GLOBAL_COOLDOWN >= halflife_time())
                return PLUGIN_CONTINUE
        else
                player_global_cooldown[id] = halflife_time()
               
        if (!is_user_alive(id) || !freeze_ended)
                return PLUGIN_CONTINUE
       
        /*See if USE button is used for anything else..
        1) Close to bomb
        2) Close to hostage
        3) Close to switch
        4) Close to door
        */
       
        new Float:origin[3]
        pev(id, pev_origin, origin)
       
        //Func door and func door rotating
        new aimid, body
        get_user_aiming ( id, aimid, body )
       
        if (aimid > 0)
        {
                new classname[32]
                pev(aimid,pev_classname,classname,31)
               
                if (equal(classname,"func_door_rotating") || equal(classname,"func_door") || equal(classname,"func_button"))
                {
                        new Float:doororigin[3]
                        pev(aimid, pev_origin, doororigin)
                       
                        if (get_distance_f(origin, doororigin) < 70 && UTIL_In_FOV(id,aimid))
                                return PLUGIN_CONTINUE
                }
               
        }
       
        //Bomb condition
        new bomb
        if ((bomb = find_ent_by_model(-1, "grenade", "models/w_c4.mdl")))
        {
                new Float:bombpos[3]
                pev(bomb, pev_origin, bombpos)
                       
                //We are near the bomb and have it in FOV.
                if (get_distance_f(origin, bombpos) < 100 && UTIL_In_FOV(id,bomb))
                        return PLUGIN_CONTINUE
        }

       
        //Hostage
        new hostage = engfunc(EngFunc_FindEntityByString, -1,"classname", "hostage_entity")
       
        while (hostage)
        {
                new Float:hospos[3]
                pev(hostage, pev_origin, hospos)
                if (get_distance_f(origin, hospos) < 70 && UTIL_In_FOV(id,hostage))
                        return PLUGIN_CONTINUE
               
                hostage = engfunc(EngFunc_FindEntityByString, hostage,"classname", "hostage_entity")
        }
       
        check_magic(id)
       
       
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

//Angle to all targets in fov
stock Float:Find_Angle(Core,Target,Float:dist)
{
        new Float:vec2LOS[2]
        new Float:flDot       
        new Float:CoreOrigin[3]
        new Float:TargetOrigin[3]
        new Float:CoreAngles[3]
       
        pev(Core,pev_origin,CoreOrigin)
        pev(Target,pev_origin,TargetOrigin)
       
        if (get_distance_f(CoreOrigin,TargetOrigin) > dist)
                return 0.0
       
        pev(Core,pev_angles, CoreAngles)
       
        for ( new i = 0; i < 2; i++ )
                vec2LOS[i] = TargetOrigin[i] - CoreOrigin[i]
       
        new Float:veclength = Vec2DLength(vec2LOS)
       
        //Normalize V2LOS
        if (veclength <= 0.0)
        {
                vec2LOS[x] = 0.0
                vec2LOS[y] = 0.0
        }
        else
        {
                new Float:flLen = 1.0 / veclength;
                vec2LOS[x] = vec2LOS[x]*flLen
                vec2LOS[y] = vec2LOS[y]*flLen
        }
       
        //Do a makevector to make v_forward right
        engfunc(EngFunc_MakeVectors,CoreAngles)
       
        new Float:v_forward[3]
        new Float:v_forward2D[2]
        get_global_vector(GL_v_forward, v_forward)
       
        v_forward2D[x] = v_forward[x]
        v_forward2D[y] = v_forward[y]
       
        flDot = vec2LOS[x]*v_forward2D[x]+vec2LOS[y]*v_forward2D[y]
       
        if ( flDot > 0.5 )
        {
                return flDot
        }
       
        return 0.0       
}

stock Float:Vec2DLength( Float:Vec[2] ) 
{
        return floatsqroot(Vec[x]*Vec[x] + Vec[y]*Vec[y] )
}

stock bool:UTIL_In_FOV(id,target)
{
        if (Find_Angle(id,target,9999.9) > 0.0)
                return true
       
        return false
}

/* ==================================================================================================== */

public Greet_Player(id)
{
        id-=TASK_GREET
        new name[32]
        get_user_name(id,name,31)
        client_print(id,print_chat, "Witaj %s w Diablo Mod PL edited by GuTeK & Miczu  napisz /komendy, zeby zobaczec liste komend /pomoc aby dowiedziec sie jak grac", name, "5.6 PL")
}

/* ==================================================================================================== */

stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)
{
        message_begin( MSG_ONE,get_user_msgid("ScreenFade"),{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()
}

/* ==================================================================================================== */

public changerace(id)
{
        if(freeze_ended && player_class[id]!=NONE ) set_user_health(id,0)
        if(player_class[id]!=NONE) savexpcom(id)
        player_class[id]=NONE
        client_connect(id)
        select_class(id)
}

/* ==================================================================================================== */

//Disable autohelp messages and display our own.
public FW_WriteString(string[])
{
        if (equal(string,""))
                return FMRES_IGNORED
       
        //Disable autohelp
        if (equal(string,"#Hint_press_buy_to_purchase") || equal(string,"#Hint_press_buy_to_purchase "))
        {
                write_string( "" );
                return FMRES_SUPERCEDE
        }
       
        if (equal(string, "#Hint_spotted_a_friend") || equal(string, "#Hint_you_have_the_bomb"))
        {
                write_string( "" );
                return FMRES_SUPERCEDE
        }
       
        return FMRES_IGNORED
       
}

stock hudmsg(id,Float:display_time,const fmt[], {Float,Sql,Result,_}:...)
{       
        if (player_huddelay[id] >= 0.03*4)
                return PLUGIN_CONTINUE
       
        new buffer[512]
        vformat(buffer, 511, fmt, 4)
       
        set_hudmessage ( 255, 0, 0, -1.0, 0.4 + player_huddelay[id], 0, display_time/2, display_time, 0.1, 0.2, -1 )       
        show_hudmessage(id, buffer)
       
        player_huddelay[id]+=0.03
       
        remove_task(id+TASK_HUD)
        set_task(display_time, "hudmsg_clear", id+TASK_HUD, "", 0, "a", 3)
       
       
        return PLUGIN_CONTINUE
       
}

public hudmsg_clear(id)
{
        new pid = id-TASK_HUD
        player_huddelay[pid]=0.0
}

/* ==================================================================================================== */

public item_firetotem(id)
{
        if (used_item[id])
        {
                hudmsg(id,2.0,"Mozesz uzyc raz w rundzie totemu ognia")
        }
        else
        {
                used_item[id] = true
                Effect_Ignite_Totem(id,7)
        }
}

stock Effect_Ignite_Totem(id,seconds)
{
        new origin[3]
        pev(id,pev_origin,origin)
       
        new ent = Spawn_Ent("info_target")
        set_pev(ent,pev_classname,"Effect_Ignite_Totem")
        set_pev(ent,pev_owner,id)
        set_pev(ent,pev_solid,SOLID_TRIGGER)
        set_pev(ent,pev_origin,origin)
        set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)
       
        engfunc(EngFunc_SetModel, ent, "addons/amxmodx/diablo/totem_ignite.mdl")         
        set_rendering ( ent, kRenderFxGlowShell, 250,150,0, kRenderFxNone, 255 )       
        engfunc(EngFunc_DropToFloor,ent)
       
        set_pev(ent,pev_euser3,0)
        set_pev(ent,pev_nextthink, halflife_time() + 0.1)
}

public Effect_Ignite_Totem_Think(ent)
{
        //Safe check because effect on death
        if (!freeze_ended)
                remove_entity(ent)
       
        if (!is_valid_ent(ent))
                return PLUGIN_CONTINUE
       
        new id = pev(ent,pev_owner)
       
        //Apply and destroy
        if (pev(ent,pev_euser3) == 1)
        {
                new entlist[513]
                new numfound = find_sphere_class(ent,"player",player_b_firetotem[id]+0.0,entlist,512)
               
                for (new i=0; i < numfound; i++)
                {               
                        new pid = entlist[i]
                       
                        //This totem can hit the caster
                        if (pid == id && is_user_alive(id))
                        {
                                Effect_Ignite(pid,id,4)
                                hudmsg(pid,3.0,"Palisz sie. Strzel do kogos aby przestac sie palic!")
                                continue
                        }
                       
                        if (!is_user_alive(pid) || get_user_team(id) == get_user_team(pid))
                                continue
                       
                        //Dextery makes the fire damage less
                        if (player_dextery[pid] > 20)
                                Effect_Ignite(pid,id,1)
                        else if (player_dextery[pid] > 15)
                                Effect_Ignite(pid,id,2)
                        else if (player_dextery[pid] > 10)
                                Effect_Ignite(pid,id,3)
                        else
                                Effect_Ignite(pid,id,4)
                       
                        hudmsg(pid,3.0,"Palisz sie. Strzel do kogos aby przestac sie palic!")
                }
               
                remove_entity(ent)
                return PLUGIN_CONTINUE
        }
       
       
       
        //Entity should be destroyed because livetime is over
        if (pev(ent,pev_ltime) < halflife_time())
        {
                set_pev(ent,pev_euser3,1)
               
                //Show animation and die
               
                new Float:forigin[3], origin[3]
                pev(ent,pev_origin,forigin)       
                FVecIVec(forigin,origin)
               
                //Find people near and give them health
                message_begin( MSG_BROADCAST, SVC_TEMPENTITY, origin );
                write_byte( TE_BEAMCYLINDER );
                write_coord( origin[0] );
                write_coord( origin[1] );
                write_coord( origin[2] );
                write_coord( origin[0] );
                write_coord( origin[1] + player_b_firetotem[id]);
                write_coord( origin[2] + player_b_firetotem[id]);
                write_short( sprite_white );
                write_byte( 0 ); // startframe
                write_byte( 0 ); // framerate
                write_byte( 10 ); // life
                write_byte( 10 ); // width
                write_byte( 255 ); // noise
                write_byte( 150 ); // r, g, b
                write_byte( 150 ); // r, g, b
                write_byte( 0 ); // r, g, b
                write_byte( 128 ); // brightness
                write_byte( 5 ); // speed
                message_end();
               
                set_pev(ent,pev_nextthink, halflife_time() + 0.2)
               
        }
        else       
        {
                set_pev(ent,pev_nextthink, halflife_time() + 1.5)
        }
       
        return PLUGIN_CONTINUE
}

stock Spawn_Ent(const classname[])
{
        new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, classname))
        set_pev(ent, pev_origin, {0.0, 0.0, 0.0})   
        dllfunc(DLLFunc_Spawn, ent)
        return ent
}

stock Effect_Ignite(id,attacker,damage)
{
        new ent = Spawn_Ent("info_target")
        set_pev(ent,pev_classname,"Effect_Ignite")
        set_pev(ent,pev_owner,id)
        set_pev(ent,pev_ltime, halflife_time() + 99 + 0.1)
        set_pev(ent,pev_solid,SOLID_NOT)
        set_pev(ent,pev_euser1,attacker)
        set_pev(ent,pev_euser2,damage)
        set_pev(ent,pev_nextthink, halflife_time() + 0.1)       
       
        AddFlag(id,Flag_Ignite)
}

//euser3 = destroy and apply effect
public Effect_Ignite_Think(ent)
{
        new id = pev(ent,pev_owner)
        attacker = pev(ent,pev_euser1)
        new damage = pev(ent,pev_euser2)
       
        if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id) || !HasFlag(id,Flag_Ignite))
        {
                RemoveFlag(id,Flag_Ignite)
                Remove_All_Tents(id)
                Display_Icon(id,200,0,0,"dmg_heat",0)
                remove_entity(ent)               
                return PLUGIN_CONTINUE
        }
       
       
        //Display ignite tent and icon
        Display_Tent(id,sprite_ignite,2)
        Display_Icon(id,200,0,0,"dmg_heat",1)
       
        new origin[3]
        get_user_origin(id,origin)
       
        //Make some burning effects
        message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte( TE_SMOKE ) // 5
        write_coord(origin[0])
        write_coord(origin[1])
        write_coord(origin[2])
        write_short( sprite_smoke )
        write_byte( 22 )  // 10
        write_byte( 10 )  // 10
        message_end()
       
        //Decals
        message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte( TE_GUNSHOTDECAL ) // decal and ricochet sound
        write_coord( origin[0] ) //pos
        write_coord( origin[1] )
        write_coord( origin[2] )
        write_short (0) // I have no idea what thats supposed to be
        write_byte (random_num(199,201)) //decal
        message_end()
       
       
        //Do the actual damage
        Hurt_Entity(attacker,id,damage+0.0)
       
        set_pev(ent,pev_nextthink, halflife_time() + 1.5)
       
       
        return PLUGIN_CONTINUE
}

stock AddFlag(id,flag)
{
        afflicted[id][flag] = 1       
}

stock RemoveFlag(id,flag)
{
        afflicted[id][flag] = 0
}

stock bool:HasFlag(id,flag)
{
        if (afflicted[id][flag])
                return true
       
        return false
}

stock Display_Tent(id,sprite, seconds)
{
        message_begin(MSG_ALL,SVC_TEMPENTITY)
        write_byte(TE_PLAYERATTACHMENT)
        write_byte(id)
        write_coord(40) //Offset
        write_short(sprite)
        write_short(seconds*10)
        message_end()
}

stock Remove_All_Tents(id)
{
        message_begin(MSG_ALL ,SVC_TEMPENTITY) //message begin
        write_byte(TE_KILLPLAYERATTACHMENTS)
        write_byte(id) // entity index of player
        message_end()
}

stock Display_Icon(id,red,green,blue,name[], enable)
{
        if (!pev_valid(id))
        {
                return PLUGIN_HANDLED
        }
       
        message_begin( MSG_ONE, get_user_msgid("StatusIcon"), {0,0,0}, id )
        write_byte( enable )       
        write_string( name )
        write_byte( red ) // red
        write_byte( green ) // green
        write_byte( blue ) // blue
        message_end()
       
        return PLUGIN_CONTINUE
}

stock Hurt_Entity(attacker,victim,Float:amount)
{
        if (get_user_health(victim)-amount <= 0)
        {
                UTIL_Kill(attacker,victim,"world")
        }
        else
        {
                fakedamage(victim,"player",amount,DMG_ENERGYBEAM)
        }
}

stock Find_Best_Angle(id,Float:dist, same_team = false)
{
        new Float:bestangle = 0.0
        new winner = -1
       
        for (new i=0; i < MAX; i++)
        {
                if (!is_user_alive(i) || i == id || (get_user_team(i) == get_user_team(id) && !same_team))
                        continue
               
                if (get_user_team(i) != get_user_team(id) && same_team)
                        continue
               
                //User has spell immunity, don't target
               
                new Float:c_angle = Find_Angle(id,i,dist)
               
                if (c_angle > bestangle && Can_Trace_Line(id,i))
                {
                        winner = i
                        bestangle = c_angle
                }
               
        }
       
        return winner
}

//This is an interpolation. We make tree lines with different height as to make sure
stock bool:Can_Trace_Line(id, target)
{       
        for (new i=-35; i < 60; i+=35)
        {               
                new Float:Origin_Id[3]
                new Float:Origin_Target[3]
                new Float:Origin_Return[3]
               
                pev(id,pev_origin,Origin_Id)
                pev(target,pev_origin,Origin_Target)
               
                Origin_Id[z] = Origin_Id[z] + i
                Origin_Target[z] = Origin_Target[z] + i
               
                trace_line(-1, Origin_Id, Origin_Target, Origin_Return)
               
                if (get_distance_f(Origin_Return,Origin_Target) < 25.0)
                        return true
               
        }
       
        return false
}

public item_hook(id)
{
        if (used_item[id])
        {
                hudmsg(id,2.0,"Haku mozesz uzyc raz na runde!")
                return PLUGIN_CONTINUE       
        }
       
        new target = Find_Best_Angle(id,1000.0,false)
       
        if (!is_valid_ent(target))
        {
                hudmsg(id,2.0,"Obiekt jest poza zasiegiem.")
                return PLUGIN_CONTINUE
        }
       
        AddFlag(id,Flag_Hooking)
       
        set_user_gravity(target,0.0)
        set_task(0.1,"hook_prethink",id+TASK_HOOK,"",0,"b")
        hooked[id] = target
        hook_prethink(id+TASK_HOOK)
        emit_sound(id,CHAN_VOICE,"weapons/xbow_hit2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
       
        used_item[id] = true       
        return PLUGIN_HANDLED
       
}

public hook_prethink(id)
{
        id -= TASK_HOOK
        if(!is_user_alive(id) || !is_user_alive(hooked[id]))
        {
                RemoveFlag(id,Flag_Hooking)
                return PLUGIN_HANDLED
        }
        if (get_user_button(id) & ~IN_USE)
        {
                RemoveFlag(id,Flag_Hooking)
                return PLUGIN_HANDLED       
        }
        if(!HasFlag(id,Flag_Hooking))
        {
                if (is_user_alive(hooked[id]))
                        set_user_gravity(id,1.0)
                remove_task(id+TASK_HOOK)
                return PLUGIN_HANDLED
        }
       
        //Get Id's origin
        static origin1[3]
        get_user_origin(id,origin1)
       
        static origin2[3]
        get_user_origin(hooked[id],origin2)
       
        //Create blue beam
        message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte(1)                //TE_BEAMENTPOINT
        write_short(id)                // start entity
        write_coord(origin2[0])
        write_coord(origin2[1])
        write_coord(origin2[2])
        write_short(sprite_line)
        write_byte(1)                // framestart
        write_byte(1)                // framerate
        write_byte(2)                // life in 0.1's
        write_byte(5)                // width
        write_byte(0)                // noise
        write_byte(0)                // red
        write_byte(0)                // green
        write_byte(255)                // blue
        write_byte(200)                // brightness
        write_byte(0)                // speed
        message_end()
       
        //Calculate Velocity
        new Float:velocity[3]
        velocity[0] = (float(origin1[0]) - float(origin2[0])) * 3.0
        velocity[1] = (float(origin1[1]) - float(origin2[1])) * 3.0
        velocity[2] = (float(origin1[2]) - float(origin2[2])) * 3.0
       
        new Float:dy
        dy = velocity[0]*velocity[0] + velocity[1]*velocity[1] + velocity[2]*velocity[2]
       
        new Float:dx
        dx = (4+player_intelligence[id]/2) * 120.0 / floatsqroot(dy)
       
        velocity[0] *= dx
        velocity[1] *= dx
        velocity[2] *= dx
       
        set_pev(hooked[id],pev_velocity,velocity)
       
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

public item_gravitybomb(id)
{       
        if (pev(id,pev_flags) & FL_ONGROUND)
        {
                hudmsg(id,2.0,"Musisz byc w powietrzu!")
                return PLUGIN_CONTINUE
        }
       
        if (halflife_time()-gravitytimer[id] <= 3)
        {
                hudmsg(id,2.0,"Ten przedmiot, moze byc uzyty co kazde 3 sekundy")
                return PLUGIN_CONTINUE
        }
       
        gravitytimer[id] = floatround(halflife_time())
       
        new origin[3]
        get_user_origin(id,origin)
       
        if (origin[2] == 0)
                earthstomp[id] = 1
        else
                earthstomp[id] = origin[2]
       
        set_user_gravity(id,5.0)
        falling[id] = true
       
               
        return PLUGIN_CONTINUE
       
}

public add_bonus_stomp(id)
{
        set_gravitychange(id)
       
        new origin[3]
        get_user_origin(id,origin)
       
        new dam = earthstomp[id]-origin[2]
       
        earthstomp[id] = 0
       
        //If jump is is high enough, apply some shake effect and deal damage, 300 = down from BOMB A in dust2
        if (dam < 80)
                return PLUGIN_CONTINUE
               
        dam = dam-80
       
        message_begin(MSG_ONE , get_user_msgid("ScreenShake") , {0,0,0} ,id)
        write_short( 1<<14 );
        write_short( 1<<12 );
        write_short( 1<<14 );
        message_end();
               
        new entlist[513]
        new numfound = find_sphere_class(id,"player",230.0+player_strength[id]*2,entlist,512)
       

        for (new i=0; i < numfound; i++)
        {               
                new pid = entlist[i]
                       
                if (pid == id || !is_user_alive(pid))
                        continue
                       
                if (get_user_team(id) == get_user_team(pid))
                        continue
                       
                new Float:id_origin[3]
                new Float:pid_origin[3]
                new Float:delta_vec[3]
               
                pev(id,pev_origin,id_origin)
                pev(pid,pev_origin,pid_origin)
               
               
                delta_vec[x] = (pid_origin[x]-id_origin[x])+10
                delta_vec[y] = (pid_origin[y]-id_origin[y])+10
                delta_vec[z] = (pid_origin[z]-id_origin[z])+200
               
                set_pev(pid,pev_velocity,delta_vec)
                                               
                message_begin(MSG_ONE , get_user_msgid("ScreenShake") , {0,0,0} ,pid)
                write_short( 1<<14 );
                write_short( 1<<12 );
                write_short( 1<<14 );
                message_end();
               
                if (get_user_health(pid) - dam <= 0)
                        UTIL_Kill(id,pid,"world")
                else
                        set_user_health(pid,get_user_health(pid)-dam)
                       
                               
                               
        }
               
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

public item_rot(id)
{
        if (used_item[id])
        {
                RemoveFlag(id,Flag_Rot)
                used_item[id] = false
        }
        else
        {
                if (find_ent_by_owner(-1,"Effect_Rot",id) > 0)
                        return PLUGIN_CONTINUE
                       
                Create_Rot(id)
                used_item[id] = true
        }
       
        return PLUGIN_CONTINUE
}

public Create_Rot(id)
{               
        new ent = Spawn_Ent("info_target")
        set_pev(ent,pev_classname,"Effect_Rot")
        set_pev(ent,pev_owner,id)
        set_pev(ent,pev_solid,SOLID_NOT)
        AddFlag(id,Flag_Rot)
        set_pev(ent,pev_nextthink, halflife_time() + 0.1)       
                       
}

public Effect_Rot_Think(ent)
{
        new id = pev(ent,pev_owner)
        if (!is_user_alive(id) || !HasFlag(id,Flag_Rot) || !freeze_ended)
        {
                Display_Icon(id,255,255,0,"dmg_bio",0)       
                set_user_maxspeed(id,245.0+player_dextery[id])
               
                set_renderchange(id)
               
                remove_entity(ent)
                return PLUGIN_CONTINUE
        }
       
        set_user_maxspeed(id,252.0+player_dextery[id]+15)
        Display_Icon(id,255,150,0,"dmg_bio",1)       
       
        set_renderchange(id)
       
        new entlist[513]
        new numfound = find_sphere_class(id,"player",250.0,entlist,512)
       
        for (new i=0; i < numfound; i++)
        {               
                new pid = entlist[i]
                       
                if (pid == id || !is_user_alive(pid))
                        continue
                       
                if (get_user_team(id) == get_user_team(pid))
                        continue
               
                //Rot him!
                if (random_num(1,2) == 1)
                {
                        message_begin(MSG_ONE,g_msg_screenfade,{0,0,0},pid)
                        write_short( 1<<14 )
                        write_short( 1<<14 )
                        write_short( 1<<16 )
                        write_byte( 255 )
                        write_byte( 155 )
                        write_byte( 50 )
                        write_byte( 230 )
                        message_end()
                }
               
                Hurt_Entity(id,pid,45.0)
                Effect_Bleed(pid,100)
                Create_Slow(pid,3)
               
        }
       
        if (get_user_health(id)-10 <= 0)
                UTIL_Kill(id,id,"world")
        else
                set_user_health(id,get_user_health(id)-10)
               
        set_pev(ent,pev_nextthink, halflife_time() + 0.8)
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

//Daze player
stock Create_Slow(id,seconds)
{               
        new ent = Spawn_Ent("info_target")
        set_pev(ent,pev_classname,"Effect_Slow")
        set_pev(ent,pev_owner,id)
        set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)
        set_pev(ent,pev_solid,SOLID_NOT)
        set_pev(ent,pev_nextthink, halflife_time() + 0.1)       
                       
        AddFlag(id,Flag_Dazed)
}

public Effect_Slow_Think(ent)
{
        new id = pev(ent,pev_owner)
        if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))
        {
                Display_Icon(id,255,255,0,"dmg_heat",0)       
                RemoveFlag(id,Flag_Dazed)
                set_user_maxspeed(id,245.0+player_agility[id])
                remove_entity(ent)
                return PLUGIN_CONTINUE
        }
       
        set_user_maxspeed(id,245.0-50)
        Display_Icon(id,255,255,0,"dmg_heat",1)       
        set_pev(ent,pev_nextthink, halflife_time() + 1.0)
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

stock AddTimedFlag(id,flag,seconds)
{               
        new ent = Spawn_Ent("info_target")
        set_pev(ent,pev_classname,"Effect_Timedflag")
        set_pev(ent,pev_owner,id)
        set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)
        set_pev(ent,pev_solid,SOLID_NOT)
        set_pev(ent,pev_euser3,flag)                       
        AddFlag(id,flag)       
        set_pev(ent,pev_nextthink, halflife_time() + 0.1)
}

public Effect_Timedflag_Think(ent)
{
        new id = pev(ent,pev_owner)
        if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))
        {
                RemoveFlag(id,pev(ent,pev_euser3))
                remove_entity(ent)
                return PLUGIN_CONTINUE
        }
       
        set_pev(ent,pev_nextthink, halflife_time() + 1.0)
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

public item_illusion(id)
{
        if (used_item[id])
        {
                hudmsg(id,2.0,"Ten przedmiot mozesz uzyc raz na runde!")
                return PLUGIN_CONTINUE
        }

        AddTimedFlag(id,Flag_Illusion,7)
        message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
        write_byte( 7)
        write_byte( 0 )
        message_end()
        used_item[id] = true
        use_addtofullpack = true
        return PLUGIN_CONTINUE
       
}

/* ==================================================================================================== */

public item_money_shield(id)
{
        if (used_item[id])
        {
                RemoveFlag(id,Flag_Moneyshield)
                used_item[id] = false
        }
        else
        {
                if (find_ent_by_owner(-1,"Effect_MShield",id) > 0)
                        return PLUGIN_CONTINUE
                       
                new ent = Spawn_Ent("info_target")
                set_pev(ent,pev_classname,"Effect_MShield")
                set_pev(ent,pev_owner,id)
                set_pev(ent,pev_solid,SOLID_NOT)               
                AddFlag(id,Flag_Moneyshield)       
                set_pev(ent,pev_nextthink, halflife_time() + 0.1)
                used_item[id] = true
        }
       
        return PLUGIN_CONTINUE
}

public Effect_MShield_Think(ent)
{
        new id = pev(ent,pev_owner)
        if (!is_user_alive(id) || cs_get_user_money(id) <= 0 || !HasFlag(id,Flag_Moneyshield) || !freeze_ended)
        {
                RemoveFlag(id,Flag_Moneyshield)
               
                set_renderchange(id)
               
                Display_Icon(id,255,255,255,"suithelmet_empty",0)
                remove_entity(ent)
                return PLUGIN_CONTINUE
        }
       
        if (cs_get_user_money(id)-250 < 0)
                cs_set_user_money(id,0)
        else
                cs_set_user_money(id,cs_get_user_money(id)-250)
               
        set_renderchange(id)
       
        Display_Icon(id,255,255,255,"suithelmet_empty",1)
       
        set_pev(ent,pev_nextthink, halflife_time() + 1.0)
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */

public item_mine(id)
{
        new count = 0
        new ents = -1
        ents = find_ent_by_owner(ents,"Mine",id)
        while (ents > 0)
        {
                count++
                ents = find_ent_by_owner(ents,"Mine",id)
        }
       
        if (count > 2)
        {
                hudmsg(id,2.0,"Mozesz polozyc maksymalnie 3 miny na runde")
                return PLUGIN_CONTINUE
        }
       
       
        new origin[3]
        pev(id,pev_origin,origin)
               
        new ent = Spawn_Ent("info_target")
        set_pev(ent,pev_classname,"Mine")
        set_pev(ent,pev_owner,id)
        set_pev(ent,pev_movetype,MOVETYPE_TOSS)
        set_pev(ent,pev_origin,origin)
        set_pev(ent,pev_solid,SOLID_BBOX)
       
        engfunc(EngFunc_SetModel, ent, "addons/amxmodx/diablo/mine.mdl") 
        engfunc(EngFunc_SetSize,ent,Float:{-16.0,-16.0,0.0},Float:{16.0,16.0,2.0})
       
        drop_to_floor(ent)

        entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)
       
        set_rendering(ent,kRenderFxNone, 0,0,0, kRenderTransTexture,50)       
       
        use_addtofullpack = true
       
        return PLUGIN_CONTINUE
}

public Mine_Think(ent)
{
        if (!freeze_ended)
                remove_entity(ent)
        else
                entity_set_float(ent,EV_FL_nextthink,halflife_time() + 1.0)
}

/* ==================================================================================================== */

public item_teamshield(id)
{
        if (used_item[id])
        {
                RemoveFlag(id,Flag_Teamshield)
                used_item[id] = false
                set_renderchange(id)
        }
        else
        {
                new target = Find_Best_Angle(id,1000.0,true)
               
                if (!is_valid_ent(target))
                {
                        hudmsg(id,2.0,"Zaden cel nie jest zasiegu do tarczy")
                        return PLUGIN_CONTINUE
                }
               
                if (pev(target,pev_rendermode) == kRenderTransTexture || player_item_id[target] == 17 || player_class[target] == Ninja)
                {
                        hudmsg(id,2.0,"Nie mozna wyczarowac tarczy na niewidzialnym graczu")
                        return PLUGIN_CONTINUE
                }
               
                if (find_ent_by_owner(-1,"Effect_Teamshield",id) > 0)
                        return PLUGIN_CONTINUE
                       
                if (get_user_health(target)+player_b_teamheal[id] <= race_heal[player_class[target]]+player_strength[target]*2)
                        set_user_health(target,get_user_health(target) + player_b_teamheal[id])
               
                new ent = Spawn_Ent("info_target")
                set_pev(ent,pev_classname,"Effect_Teamshield")
                set_pev(ent,pev_owner,id)
                set_pev(ent,pev_solid,SOLID_NOT)
                set_pev(ent,pev_nextthink, halflife_time() + 0.1)       
                set_pev(ent,pev_euser2, target)       
                               
                AddFlag(id,Flag_Teamshield)
                AddFlag(target,Flag_Teamshield_Target)
                used_item[id] = true
               
                set_renderchange(target)
        }
       
        return PLUGIN_CONTINUE
}

public Effect_Teamshield_Think(ent)
{
        new id = pev(ent,pev_owner)
        new victim = pev(ent,pev_euser2)
       
        new Float: vec1[3]
        new Float: vec2[3]
        new Float: vec3[3]
       
        entity_get_vector(id,EV_VEC_origin,vec1)
        entity_get_vector(victim ,EV_VEC_origin,vec2)
       
        new hit = trace_line ( id, vec1, vec2, vec3 )
       
        if (hit != victim || !is_user_alive(id) || !is_user_alive(victim) || !Can_Trace_Line(id,victim) || !UTIL_In_FOV(id,victim) || !HasFlag(id,Flag_Teamshield) || !freeze_ended)
        {
                RemoveFlag(id,Flag_Teamshield)
                RemoveFlag(victim,Flag_Teamshield_Target)
                remove_entity(ent)
                set_renderchange(victim)
                return PLUGIN_CONTINUE
        }
        else               
                set_pev(ent,pev_nextthink, halflife_time() + 0.3)
                               
        new origin1[3]
        new origin2[3]
       
       
       
        get_user_origin(id,origin1)
        get_user_origin(victim,origin2)
       
        message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte (TE_BEAMPOINTS)
        write_coord(origin1[0])
        write_coord(origin1[1])
        write_coord(origin1[2]+8)
        write_coord(origin2[0])
        write_coord(origin2[1])
        write_coord(origin2[2]+8)
        write_short(sprite_laser);
        write_byte(1) // framestart
        write_byte(1) // framerate
        write_byte(3) // life
        write_byte(5) // width
        write_byte(10) // noise
        write_byte(0) // r, g, b (red)
        write_byte(255) // r, g, b (green)
        write_byte(0) // r, g, b (blue)
        write_byte(45) // brightness
        write_byte(5) // speed
        message_end()   
       
       
               
       
        set_renderchange(victim)
       
        return PLUGIN_CONTINUE
}

/* ==================================================================================================== */       

//Find the owner that has target as target and the specific classname
public find_owner_by_euser(target,classname[])
{
        new ent = -1
        ent = find_ent_by_class(ent,classname)

        while (ent > 0)
        {
                if (pev(ent,pev_euser2) == target)
                        return pev(ent,pev_owner)
                ent = find_ent_by_class(ent,classname)
        }
       
        return -1
}

/* ==================================================================================================== */

public item_totemheal(id)
{
        if (used_item[id])
        {
                hudmsg(id,2.0,"Leczacy Totem mozesz uzyc raz na runde!")
                return PLUGIN_CONTINUE
        }
       
        used_item[id] = true
       
        new origin[3]
        pev(id,pev_origin,origin)
               
        new ent = Spawn_Ent("info_target")
        set_pev(ent,pev_classname,"Effect_Healing_Totem")
        set_pev(ent,pev_owner,id)
        set_pev(ent,pev_solid,SOLID_TRIGGER)
        set_pev(ent,pev_origin,origin)
        set_pev(ent,pev_ltime, halflife_time() + 7 + 0.1)
       
        engfunc(EngFunc_SetModel, ent, "addons/amxmodx/diablo/totem_heal.mdl")         
        set_rendering ( ent, kRenderFxGlowShell, 255,0,0, kRenderFxNone, 255 )       
        engfunc(EngFunc_DropToFloor,ent)
       
        set_pev(ent,pev_nextthink, halflife_time() + 0.1)
       
        return PLUGIN_CONTINUE       
}

public Effect_Healing_Totem_Think(ent)
{
        new id = pev(ent,pev_owner)
        new totem_dist = 300
        new amount_healed = player_b_heal[id]
       
        //We have emitted beam. Apply effect (this is delayed)
        if (pev(ent,pev_euser2) == 1)
        {               
                new Float:forigin[3], origin[3]
                pev(ent,pev_origin,forigin)       
                FVecIVec(forigin,origin)
               
                //Find people near and damage them
                new entlist[513]
                new numfound = find_sphere_class(0,"player",totem_dist+0.0,entlist,512,forigin)
               
                for (new i=0; i < numfound; i++)
                {               
                        new pid = entlist[i]
                       
                        if (get_user_team(pid) != get_user_team(id))
                                continue
                               
                               
                        if (is_user_alive(pid) && get_user_health(pid) + amount_healed < race_heal[player_class[pid]]+player_strength[pid]*2)
                                set_user_health(pid,get_user_health(pid)+amount_healed)
                        else
                                set_user_health(pid,race_heal[player_class[pid]]+player_strength[pid]*2)                               
                }
               
               
                set_pev(ent,pev_euser2,0)
                set_pev(ent,pev_nextthink, halflife_time() + 1.5)
               
                return PLUGIN_CONTINUE
        }
       
       
        //Entity should be destroyed because livetime is over
        if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))
        {
                remove_entity(ent)
                return PLUGIN_CONTINUE
        }
       
       
       
        //If this object is almost dead, apply some render to make it fade out
        if (pev(ent,pev_ltime)-2.0 < halflife_time())
                set_rendering ( ent, kRenderFxNone, 255,255,255, kRenderTransAlpha, 100 )
               
               
       
        new Float:forigin[3], origin[3]
        pev(ent,pev_origin,forigin)       
        FVecIVec(forigin,origin)
       
       
                                       
        //Find people near and give them health
        message_begin( MSG_BROADCAST, SVC_TEMPENTITY, origin );
        write_byte( TE_BEAMCYLINDER );
        write_coord( origin[0] );
        write_coord( origin[1] );
        write_coord( origin[2] );
        write_coord( origin[0] );
        write_coord( origin[1] + totem_dist );
        write_coord( origin[2] + totem_dist );
        write_short( sprite_white );
        write_byte( 0 ); // startframe
        write_byte( 0 ); // framerate
        write_byte( 10 ); // life
        write_byte( 10 ); // width
        write_byte( 255 ); // noise
        write_byte( 255 ); // r, g, b
        write_byte( 100 ); // r, g, b
        write_byte( 100 ); // r, g, b
        write_byte( 128 ); // brightness
        write_byte( 5 ); // speed
        message_end();
       
        //Time till we apply totems effect
               
        set_pev(ent,pev_euser2,1)
        set_pev(ent,pev_nextthink, halflife_time() + 0.5)
       
           
        return PLUGIN_CONTINUE

}

public freeze_over1()
{
        round_status=1
        agi = BASE_SPEED;
        new players[32], num
        get_players(players,num,"a")       
       
        for(new i=0 ; i<num ; i++)
        {
        set_speedchange(players[i])
        }
}

public freeze_begin1()
{
        round_status=0
}

public funcReleaseVic(id)
{       
        DemageTake[id]=0
        remove_task(id+GLUTON)
}

public funcReleaseVic2(id)
{       
        agi = BASE_SPEED;
        if(round_status==1)
        set_speedchange(id)
}

public funcDemageVic(id,attacker)
{
                id-=GLUTON
                if(get_user_health(id)>10)
                set_task(2.0, "funcDemageVic", id+GLUTON)
                //DoDamage(iEnemyID, iCasterID, iDamage, DMG_CAUSE_LIGHTNING_STRIKE);
                DoDamage(id, attacker1, 5);
                //        set_user_health(id,get_user_health(id)-5)
}

public Damage1(id)
{       
        attacker = get_user_attacker(id)
        if ((is_user_connected(id)) && (id!=0) && (is_user_connected(attacker)) && (attacker!=0))
        {
                weapon = get_user_weapon(attacker,clip,ammo)
               
                if(is_user_connected(attacker)&&(attacker!=id)&&player_class[attacker] == Mag)
                {       
                        if(weapon == CSW_GLOCK18 || weapon == CSW_USP || weapon == CSW_P228 || weapon == CSW_DEAGLE || weapon == CSW_ELITE || weapon == CSW_FIVESEVEN)
                        {                       
                                agi=(BASE_SPEED / 2)
                                set_speedchange(id)               
                                if(DemageTake[id]==0)
                                {
                                        DemageTake[id]=1
                                        set_task(11.0, "funcReleaseVic", id)
                                        set_task(11.0, "funcReleaseVic2", id)
                                        set_task(2.0, "funcDemageVic", id+GLUTON)
                                }
                        }
                }
                       
                if(is_user_connected(attacker)&&(attacker!=id)&&player_class[attacker] == Zabojca)
                {       
                        if(weapon == CSW_GLOCK18 || weapon == CSW_USP || weapon == CSW_P228 || weapon == CSW_DEAGLE || weapon == CSW_ELITE || weapon == CSW_FIVESEVEN)
                        {           
                                set_task(1.5, "funcDemageVic3", id)
                        }
                }
               
                if(is_user_connected(attacker)&&(attacker!=id)&&player_class[attacker] == Hunter)
                {       
                        if(weapon == CSW_GLOCK18 || weapon == CSW_USP || weapon == CSW_P228 || weapon == CSW_DEAGLE || weapon == CSW_ELITE || weapon == CSW_FIVESEVEN)
                        {           
                                new ori[3]
                                trace_bool[attacker]=id
                                get_user_origin(id,ori)
                               
                                new parms[5];
                               
                                for(new i=0;i<3;i++)
                                {
                                        parms[i] = ori[i]
                                }
                                parms[3]=attacker
                                parms[4]=id
                                set_task(0.5,"charge_hunter",attacker,parms,5)
                        }
                }
        }
}

public set_speedchange(id)
{
        if(DemageTake[id]==1) agi=(BASE_SPEED / 2)
        else agi=BASE_SPEED
       
        if (is_user_connected(id) && freeze_ended)
        {
                new speeds
                if(player_class[id] == Ninja) speeds= 40 + floatround(player_dextery[id]*1.3)
                else if(player_class[id] == Zabojca) speeds= 10 + floatround(player_dextery[id]*1.3)
                else if(player_class[id] == Barbarzynca) speeds= -10 + floatround(player_dextery[id]*1.3)
                else speeds= floatround(player_dextery[id]*1.3)
                set_user_maxspeed(id, agi + speeds)
        }
}


public set_renderchange(id)
{
        if(is_user_connected(id) && is_user_alive(id))
        {       
                if(!task_exists(id+TASK_FLASH_LIGHT))
                {
                        new render=255
                       
                        if (player_class[id] == Ninja)
                        {
                                new inv_bonus = 255 - player_b_inv[id]
                                render = 13
                               
                                if(player_b_inv[id]>0)
                                {
                                        while(inv_bonus>0)
                                        {
                                                inv_bonus-=20
                                                render--
                                        }
                                }
                               
                                if(player_b_usingwind[id]==1)
                                {
                                        render/=2
                                }
                               
                                if(render<0) render=0
                               
                                if(HasFlag(id,Flag_Moneyshield)||HasFlag(id,Flag_Rot)||HasFlag(id,Flag_Teamshield_Target)) render*=2       
                               
                                set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, render)
                        }
                        else if(HasFlag(id,Flag_Moneyshield)||HasFlag(id,Flag_Rot)||HasFlag(id,Flag_Teamshield_Target))
                        {
                                if (player_b_usingwind[id]==1) set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,75)
                               
                                if(HasFlag(id,Flag_Moneyshield)) set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderNormal,16) 
                                if(HasFlag(id,Flag_Rot)) set_rendering ( id, kRenderFxGlowShell, 255,255,0, kRenderFxNone, 10 )
                                if(HasFlag(id,Flag_Teamshield_Target)) set_rendering ( id, kRenderFxGlowShell, 0,200,0, kRenderFxNone, 0 )
                        }
                        else
                        {
                                render = 255
                                if(player_b_inv[id]>0) render = player_b_inv[id]
                               
                                set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, render)
                        }
                       
                       
                }       
                else set_user_rendering(id,kRenderFxGlowShell,flashlight_r,flashlight_g,flashlight_b,kRenderNormal,4)
        }
}

public set_gravitychange(id)
{
        if(is_user_alive(id) && is_user_connected(id))
        {
                if(player_class[id] == Ninja)
                {
                        if(player_b_gravity[id]>6) set_user_gravity(id, 0.17)
                        else if(player_b_gravity[id]>3) set_user_gravity(id, 0.2)
                        else set_user_gravity(id, 0.25)
                }
                else
                {
                        set_user_gravity(id,1.0*(1.0-player_b_gravity[id]/12.0))

                }
        }
}


public cmd_who(id){
        new name[32]
        new team[32]
        static players[32], numplayers
        get_players(players, numplayers, "a")
        new i
        new playerid
        new pos[8192]
        new pos1[8192]
       
        new whofile[64]
        get_configsdir( whofile, 63 )
        format( whofile, 63, "%s/diablo_who.txt", whofile )
        if ( file_exists( whofile ) )
                delete_file( whofile )
       
        add(pos,8191, "<body bgcolor=#000000 text=#FFB000>^n" )
        //add(pos,8191, "<center><b>Lista graczy Online</b></center><p>^n" )
        add(pos,8191, "<center><table width=700 border=1 cellpadding=4 cellspacing=4>^n" )
        add(pos,8191, "<tr><td>Name</td><td>Klasa</td><td>Level</td></tr>^n" )
        for (i=0; i< numplayers; i++){
                playerid = players[i]
                if ( get_user_team(playerid) == 1 ) team = "Terrorist"
                else if ( get_user_team(playerid) == 2 ) team = "CT"
                else team = "Spectator"
                get_user_name( playerid, name, 31 )
                format (pos1,8191, "<tr><td>%s</td><td>%s</td><td>%d</td></tr>^n", name, Race[player_class[playerid]], player_lvl[playerid])
                add(pos,8191,pos1)
        }
        add(pos,8191, "</table></center>^n" )
       

        write_file( whofile, pos,0 )

        show_motd( id, whofile, "Diablo Gracze Online" )

        return PLUGIN_CONTINUE
}

public det_fade(id)
{
        if (wear_sun[id] == 1){
                screen_icon(id,ICON_S,0,255,0,ICON_FLASH)
                screen_fade(id,0,0,0,0,0)
        }
        if (wear_sun[id] == 0){
                screen_icon(id,ICON_S,0,0,0,ICON_HIDE)
        }
}



stock screen_icon(id,icon[],r,g,b,type){
//        new string [8][32] = {"dmg_rad","item_longjump","dmg_shock","item_healthkit","dmg_heat","suit_full","cross","dmg_gas"}
        message_begin( MSG_ONE, get_user_msgid("StatusIcon"), {0,0,0}, id )
        write_byte( type ) // status
        write_string( icon ) // sprite name
        write_byte( r ) // red
        write_byte( g ) // green
        write_byte( b ) // blue
        message_end()
}

stock screen_fade(id,r,g,b,alpha,tm){
        message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
        write_short( 1<<tm ) // fade lasts this long duration
        write_short( 1<<tm ) // fade lasts this long hold time
        write_short( 1<<12 ) // fade type (in / out)
        write_byte( r ) // fade red
        write_byte( g ) // fade green
        write_byte( b ) // fade blue
        write_byte( alpha ) // fade alpha
        message_end()
}

public changeskin(id,reset){
  if (id<1 || id>32 || !is_user_connected(id)) return PLUGIN_CONTINUE
  if (reset==1){
      cs_reset_user_model(id)
      skinchanged[id]=false
      return PLUGIN_HANDLED
  }else if (reset==2){
      //cs_set_user_model(id,"goomba")
      cs_set_user_model(id,"zombie")
      skinchanged[id]=true
      return PLUGIN_HANDLED
  }else{
      //new newSkin[32]
      new num = random_num(0,3)

      if (get_user_team(id)==1){
        //add(newSkin,31,CTSkins[num])
        cs_set_user_model(id,CTSkins[num])
      }else{
        //client_print(0, print_console, "CT mole, using new skin %s", TSkins[num])
        //add(newSkin,31,TSkins[num])
        cs_set_user_model(id,TSkins[num])
      }

      skinchanged[id]=true
  }

  return PLUGIN_CONTINUE
}
 
 stock refill_ammo(id)
{       
        new wpnid
        if(!is_user_alive(id) || pev(id,pev_iuser1)) return;

        cs_set_user_armor(id,200,CS_ARMOR_VESTHELM);
       
        new wpn[32]
        wpnid = get_user_weapon(id, clip, ammo)
        get_weaponname(wpnid,wpn,31)

        new wEnt;
       
        // set clip ammo
        wpnid = get_weaponid(wpn)
        //wEnt = get_weapon_ent(id,wpnid);
        wEnt = get_weapon_ent(id,wpnid);
        cs_set_weapon_ammo(wEnt,maxClip[wpnid]);

}

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
        // who knows what wpnName will be
        static newName[32];

        // need to find the name
        if(wpnid) get_weaponname(wpnid,newName,31);

        // go with what we were told
        else formatex(newName,31,"%s",wpnName);

        // prefix it if we need to
        if(!equal(newName,"weapon_",7))
                format(newName,31,"weapon_%s",newName);

        new ent;
        while((ent = engfunc(EngFunc_FindEntityByString,ent,"classname",newName)) && pev(ent,pev_owner) != id) {}

        return ent;
}

DoDamage(iTargetID, iShooterID, iDamage/*, iDamageCause, bIsWeaponID = false, iHeadShot = 0*/)
{
        if(is_user_connected(iTargetID)&&is_user_connected(iShooterID))
        if ( is_user_alive(iTargetID))
        {       
                new bool:bPlayerDied = false;
                new iHP = get_user_health(iTargetID);
       
                if ( ( iHP - iDamage ) <= 0 )
                        bPlayerDied = true;
               
                if (bPlayerDied)
                {
                        // engine.inc set_msg_block function
                        //set_msg_block(g_iGameMsgDeath, BLOCK_ONCE);
                        user_kill(iTargetID, 1);
                }
                else
                        set_user_health(iTargetID, iHP - iDamage);
               
                new sShooterName[32];
                get_user_name(iShooterID, sShooterName, 31);
               
                if (bPlayerDied)
                {
                        if ( iShooterID != iTargetID )
                        {
                                if ( get_user_team(iShooterID) != get_user_team(iTargetID) )
                                        set_user_frags(iShooterID, get_user_frags(iShooterID) + 1);
                                else
                                        set_user_frags(iShooterID, get_user_frags(iShooterID) - 1);
                               
                                //LogKill(iShooterID, iTargetID, sWeaponOrMagicName);
                        }
                       
                        //AddXP(iShooterID, BM_XP_KILL, iTargetID); // bmxphandler.inc
                        award_item(iShooterID,0)
                        award_kill(iShooterID,iTargetID)
                        add_respawn_bonus(iTargetID)
                        add_bonus_explode(iTargetID)
                        add_barbarian_bonus(iShooterID)
                        register_place(iShooterID)
                        if (player_class[iShooterID] == Barbarzynca)
                        refill_ammo(iShooterID)
                }
        }
}

public funcDemageVic3(id)
{
        if(DemageTake1[id]==1)
        {
          DemageTake1[id]=0
          set_task(5.0, "funcReleaseVic3", id)
          user_slap(id, 0, 1);
          user_slap(id, 0, 1);
          user_slap(id, 0, 1);
        }
}


public funcReleaseVic3(id)
{       
        DemageTake1[id]=1
}
 
public event_flashlight(id) {
        if(!get_cvar_num("flashlight_custom")) {
                return;
        }

        if(flashlight[id]) {
                flashlight[id] = 0;
        }
        else {
                if(flashbattery[id] > 0) {
                        flashlight[id] = 1;
                }
        }

        if(!task_exists(TASK_CHARGE+id)) {
                new parms[1];
                parms[0] = id;
                set_task((flashlight[id]) ? get_cvar_float("flashlight_drain") : get_cvar_float("flashlight_charge"),"charge",TASK_CHARGE+id,parms,1);
        }

        message_begin(MSG_ONE,get_user_msgid("Flashlight"),{0,0,0},id);
        write_byte(flashlight[id]);
        write_byte(flashbattery[id]);
        message_end();

        entity_set_int(id,EV_INT_effects,entity_get_int(id,EV_INT_effects) & ~EF_DIMLIGHT);
}

public charge(parms[]) {
        if(!get_cvar_num("flashlight_custom")) {
                return;
        }

        new id = parms[0];

        if(flashlight[id]) {
                flashbattery[id] -= 1;
        }
        else {
                flashbattery[id] += 1;
        }

        message_begin(MSG_ONE,get_user_msgid("FlashBat"),{0,0,0},id);
        write_byte(flashbattery[id]);
        message_end();

        if(flashbattery[id] <= 0) {
                flashbattery[id] = 0;
                flashlight[id] = 0;

                message_begin(MSG_ONE,get_user_msgid("Flashlight"),{0,0,0},id);
                write_byte(flashlight[id]);
                write_byte(flashbattery[id]);
                message_end();

                // don't return so we can charge it back up to full
        }
        else if(flashbattery[id] >= MAX_FLASH)
        {
                flashbattery[id] = MAX_FLASH
                return; // return because we don't need to charge anymore
        }

        set_task((flashlight[id]) ? get_cvar_float("flashlight_drain") : get_cvar_float("flashlight_charge"),"charge",TASK_CHARGE+id,parms,1)
}
////////////////////////////////////////////////////////////////////////////////
//                        REVIVAL KIT - NOT ALL                              //
////////////////////////////////////////////////////////////////////////////////

public message_clcorpse()
{       
        return PLUGIN_HANDLED
}

public event_hltv()
{
        fm_remove_entity_name("fake_corpse")
       
        static players[32], num
        get_players(players, num, "a")
        for(new i = 0; i < num; i++)
        {
                if(is_user_connected(players[i]))
                {
                        set_task(0.0, "funcReleaseVic", i)
                        reset_player(players[i])
                        msg_bartime(players[i], 0)
                        trace_bool[players[i]] = 0
                }
        }
}

public reset_player(id)
{
        remove_task(TASKID_REVIVE + id)
        remove_task(TASKID_RESPAWN + id)
        remove_task(TASKID_CHECKRE + id)
        remove_task(TASKID_CHECKST + id)
        remove_task(TASKID_ORIGIN + id)
        remove_task(TASKID_SETUSER + id)
        remove_task(GLUTON+id)
       
       
        g_revive_delay[id]        = 0.0
        g_wasducking[id]        = false
        g_body_origin[id]        = Float:{0.0, 0.0, 0.0}
       
}

public fwd_playerpostthink(id)
{
        if(!is_user_connected(id)) return FMRES_IGNORED
               
        if(g_haskit[id]==0) return FMRES_IGNORED
       
        if(!is_user_alive(id))
        {
                msg_statusicon(id, ICON_HIDE)
                return FMRES_IGNORED
        }
       
        new body = find_dead_body(id)
        if(fm_is_valid_ent(body))
        {
                new lucky_bastard = pev(body, pev_owner)
       
                if(!is_user_connected(lucky_bastard))
                        return FMRES_IGNORED

                new lb_team = get_user_team(lucky_bastard)
                if(lb_team == 1 || lb_team == 2 )
                        msg_statusicon(id, ICON_FLASH)
        }
        else
                msg_statusicon(id, ICON_SHOW)
       
        return FMRES_IGNORED
}


public task_check_dead_flag(id)
{
        if(!is_user_connected(id))
                return
       
        if(pev(id, pev_deadflag) == DEAD_DEAD)
                create_fake_corpse(id)
        else
                set_task(0.5, "task_check_dead_flag", id)
}       

public create_fake_corpse(id)
{
        set_pev(id, pev_effects, EF_NODRAW)
       
        static model[32]
        cs_get_user_model(id, model, 31)
               
        static player_model[64]
        format(player_model, 63, "models/player/%s/%s.mdl", model, model)
                       
        static Float: player_origin[3]
        pev(id, pev_origin, player_origin)
               
        static Float:mins[3]
        mins[0] = -16.0
        mins[1] = -16.0
        mins[2] = -34.0
       
        static Float:maxs[3]
        maxs[0] = 16.0
        maxs[1] = 16.0
        maxs[2] = 34.0
       
        if(g_wasducking[id])
        {
                mins[2] /= 2
                maxs[2] /= 2
        }
               
        static Float:player_angles[3]
        pev(id, pev_angles, player_angles)
        player_angles[2] = 0.0
                               
        new sequence = pev(id, pev_sequence)
       
        new ent = fm_create_entity("info_target")
        if(ent)
        {
                set_pev(ent, pev_classname, "fake_corpse")
                engfunc(EngFunc_SetModel, ent, player_model)
                engfunc(EngFunc_SetOrigin, ent, player_origin)
                engfunc(EngFunc_SetSize, ent, mins, maxs)
                set_pev(ent, pev_solid, SOLID_TRIGGER)
                set_pev(ent, pev_movetype, MOVETYPE_TOSS)
                set_pev(ent, pev_owner, id)
                set_pev(ent, pev_angles, player_angles)
                set_pev(ent, pev_sequence, sequence)
                set_pev(ent, pev_frame, 9999.9)
        }       
}

public fwd_emitsound(id, channel, sound[])
{
        if(!is_user_alive(id) || !g_haskit[id])
                return FMRES_IGNORED       
       
        if(!equali(sound, "common/wpn_denyselect.wav"))
                return FMRES_IGNORED       
       
        if(task_exists(TASKID_REVIVE + id))
                return FMRES_IGNORED
       
        if(!(fm_get_user_button(id) & IN_USE))
                return FMRES_IGNORED
       
        new body = find_dead_body(id)
        if(!fm_is_valid_ent(body))
                return FMRES_IGNORED

        new lucky_bastard = pev(body, pev_owner)
        new lb_team = get_user_team(lucky_bastard)
        if(lb_team != 1 && lb_team != 2)
                return FMRES_IGNORED

        static name[32]
        get_user_name(lucky_bastard, name, 31)
        client_print(id, print_chat, "Reviving %s", name)
               
        new revivaltime = get_pcvar_num(cvar_revival_time)
        msg_bartime(id, revivaltime)
       
        new Float:gametime = get_gametime()
        g_revive_delay[id] = gametime + float(revivaltime) - 0.01

        emit_sound(id, CHAN_AUTO, SOUND_START, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        set_task(0.0, "task_revive", TASKID_REVIVE + id)
       
        return FMRES_SUPERCEDE
}

public task_revive(taskid)
{
        new id = taskid - TASKID_REVIVE
       
        if(!is_user_alive(id))
        {
                failed_revive(id)
                return FMRES_IGNORED
        }
       
        if(!(fm_get_user_button(id) & IN_USE))
        {
                failed_revive(id)
                return FMRES_IGNORED
        }
       
        new body = find_dead_body(id)
        if(!fm_is_valid_ent(body))
        {
                failed_revive(id)
                return FMRES_IGNORED
        }
       
        new lucky_bastard = pev(body, pev_owner)
        if(!is_user_connected(lucky_bastard))
        {
                failed_revive(id)
                return FMRES_IGNORED
        }
       
        new lb_team = get_user_team(lucky_bastard)
        if(lb_team != 1 && lb_team != 2)
        {
                failed_revive(id)
                return FMRES_IGNORED
        }
       
        static Float:velocity[3]
        pev(id, pev_velocity, velocity)
        velocity[0] = 0.0
        velocity[1] = 0.0
        set_pev(id, pev_velocity, velocity)
       
        new Float:gametime = get_gametime()
        if(g_revive_delay[id] < gametime)
        {
                if(findemptyloc(body, 10.0))
                {
                        fm_remove_entity(body)
                        emit_sound(id, CHAN_AUTO, SOUND_FINISHED, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                        if(get_user_team(id)!=get_user_team(lucky_bastard))
                        {
                                new necro_hp = get_user_health(id)
                                set_user_health(id,necro_hp-40)
                                set_task(0.1, "task_respawn2", TASKID_RESPAWN + lucky_bastard)
                        }
                        else
                        {
                                set_task(0.1, "task_respawn", TASKID_RESPAWN + lucky_bastard)
                                Give_Xp(id,get_cvar_num("diablo_xpbonus"))
                        }
                }
                else
                        failed_revive(id)
        }
        else
                set_task(0.1, "task_revive", TASKID_REVIVE + id)
       
        return FMRES_IGNORED
}

public failed_revive(id)
{
        msg_bartime(id, 0)
        emit_sound(id, CHAN_AUTO, SOUND_FAILED, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}

public task_origin(taskid)
{
        new id = taskid - TASKID_ORIGIN
        engfunc(EngFunc_SetOrigin, id, g_body_origin[id])
       
        static  Float:origin[3]
        pev(id, pev_origin, origin)
        set_pev(id, pev_zorigin, origin[2])
               
        set_task(0.1, "task_stuck_check", TASKID_CHECKST + id)
}

stock find_dead_body(id)
{
        static Float:origin[3]
        pev(id, pev_origin, origin)
       
        new ent
        static classname[32]       
        while((ent = fm_find_ent_in_sphere(ent, origin, get_pcvar_float(cvar_revival_dis))) != 0)
        {
                pev(ent, pev_classname, classname, 31)
                if(equali(classname, "fake_corpse") && fm_is_ent_visible(id, ent))
                        return ent
        }
        return 0
}

stock msg_bartime(id, seconds)
{
        if(is_user_bot(id)||!is_user_alive(id)||!is_user_connected(id))
                return
        new necro_hp = get_user_health(id)       
        if((fm_get_user_button(id) & IN_USE)) set_user_health(id,necro_hp-10)
       
        message_begin(MSG_ONE, g_msg_bartime, _, id)
        write_byte(seconds)
        write_byte(0)
        message_end()
}

stock msg_statusicon(id, status)
{
        if(is_user_bot(id))
                return
       
        message_begin(MSG_ONE, g_msg_statusicon, _, id)
        write_byte(status)
        write_string("rescue")
        write_byte(0)
        write_byte(160)
        write_byte(0)
        message_end()
}

 public task_respawn(taskid)
 {
        new id = taskid - TASKID_RESPAWN
       
        if (!is_user_connected(id) || is_user_alive(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR) return
               
        set_pev(id, pev_deadflag, DEAD_RESPAWNABLE)
        dllfunc(DLLFunc_Think, id)
        dllfunc(DLLFunc_Spawn, id)
        set_pev(id, pev_iuser1, 0)
       
        set_task(0.1, "task_check_respawn", TASKID_CHECKRE + id)
}

public task_check_respawn(taskid)
{
        new id = taskid - TASKID_CHECKRE
       
        if(pev(id, pev_iuser1))
                set_task(0.1, "task_respawn", TASKID_RESPAWN + id)
        else
                set_task(0.1, "task_origin", TASKID_ORIGIN + id)
}
 
public task_stuck_check(taskid)
{
        new id = taskid - TASKID_CHECKST

        static Float:origin[3]
        pev(id, pev_origin, origin)
       
        if(origin[2] == pev(id, pev_zorigin))
                set_task(0.1, "task_respawn", TASKID_RESPAWN + id)
        else
                set_task(0.1, "task_setplayer", TASKID_SETUSER + id)
}

public task_setplayer(taskid)
{
        new id = taskid - TASKID_SETUSER
       
        fm_give_item(id, "weapon_knife")
       
        if(player_item_id[id]==17) fm_set_user_health(id,5)        //stalker ring
        else fm_set_user_health(id, get_pcvar_num(cvar_revival_health))
       
        message_begin(MSG_ONE,g_msg_screenfade, _, id)     
        write_short(seconds(2))
        write_short(seconds(2)) 
        write_short(0) 
        write_byte(0)   
        write_byte(0)   
        write_byte(0)   
        write_byte(255)   
        message_end()
}



//respawn enemy

 public task_respawn2(taskid)
 {
        new id = taskid - TASKID_RESPAWN
       
        if (!is_user_connected(id) || is_user_alive(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR) return
       
               
        set_pev(id, pev_deadflag, DEAD_RESPAWNABLE)
        dllfunc(DLLFunc_Think, id)
        dllfunc(DLLFunc_Spawn, id)
        set_pev(id, pev_iuser1, 0)
       
        set_task(0.1, "task_check_respawn2", TASKID_CHECKRE + id)
}

public task_check_respawn2(taskid)
{
        new id = taskid - TASKID_CHECKRE
       
        if(pev(id, pev_iuser1))
                set_task(0.1, "task_respawn2", TASKID_RESPAWN + id)
        else
                set_task(0.1, "task_origin2", TASKID_ORIGIN + id)
}

public task_origin2(taskid)
{
        new id = taskid - TASKID_ORIGIN
        engfunc(EngFunc_SetOrigin, id, g_body_origin[id])
       
        static  Float:origin[3]
        pev(id, pev_origin, origin)
        set_pev(id, pev_zorigin, origin[2])
               
        set_task(0.1, "task_stuck_check2", TASKID_CHECKST + id)
}

public task_stuck_check2(taskid)
{
        new id = taskid - TASKID_CHECKST

        static Float:origin[3]
        pev(id, pev_origin, origin)
       
        if(origin[2] == pev(id, pev_zorigin))
                set_task(0.1, "task_respawn2", TASKID_RESPAWN + id)
        else
                set_task(0.1, "task_setplayer2", TASKID_SETUSER + id)
}

public task_setplayer2(taskid)
{
        new id = taskid - TASKID_SETUSER
       
        fm_give_item(id, "weapon_knife")
        fm_give_item(id, "weapon_mp5navy")
       
        if(player_item_id[id]==17) fm_set_user_health(id,5)        //stalker ring
        else fm_set_user_health(id, race_heal[player_class[id]]+player_strength[id]*2)
       
        set_user_godmode(id, 1)
        set_task(3.0,"god_off",id)
}

public god_off(id)
{
        set_user_godmode(id, 0)
}
//respawn enemy

stock bool:findemptyloc(ent, Float:radius)
{
        if(!fm_is_valid_ent(ent))
                return false

        static Float:origin[3]
        pev(ent, pev_origin, origin)
        origin[2] += 2.0
       
        new owner = pev(ent, pev_owner)
        new num = 0, bool:found = false
       
        while(num <= 100)
        {
                if(is_hull_vacant(origin))
                {
                        g_body_origin[owner][0] = origin[0]
                        g_body_origin[owner][1] = origin[1]
                        g_body_origin[owner][2] = origin[2]
                       
                        found = true
                        break
                }
                else
                {
                        origin[0] += random_float(-radius, radius)
                        origin[1] += random_float(-radius, radius)
                        origin[2] += random_float(-radius, radius)
                       
                        num++
                }
        }
        return found
}

stock bool:is_hull_vacant(const Float:origin[3])
{
        new tr = 0
        engfunc(EngFunc_TraceHull, origin, origin, 0, HULL_HUMAN, 0, tr)
        if(!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
                return true
       
        return false
}


public Forward_FM_PlayerPreThink(id)
{
    static Float:fPunchAngle[3]
    pev(id, pev_punchangle, fPunchAngle)
    if( fPunchAngle[0] == -5)
    {
            if(fm_get_user_longjump(id) && JumpsLeft[id]>0)JumpsLeft[id]--
       
        write_hud(id)
       
        if(JumpsLeft[id]<1) fm_set_user_longjump(id,false,true)
        return FMRES_HANDLED
    }
    return FMRES_IGNORED
}

public count_jumps(id)
{
        if( is_user_connected(id))
        {
                if( player_class[id]== Paladyn ) JumpsMax[id]=5+floatround(player_intelligence[id]/10.0)
                else JumpsMax[id]=0
       
                new clip,ammo
                new weapon=get_user_weapon(id,clip,ammo)
                if(weapon == CSW_KNIFE && JumpsMax[id]>0) fm_set_user_longjump(id,true,true)
        }
}

////////////////////////////////////////////////////////////////////////////////
//                                  Noze                                      //
////////////////////////////////////////////////////////////////////////////////

public give_knife(id)
{
        new knifes = 0
        if(player_class[id] == Ninja) knifes = 5 + floatround ( player_intelligence[id]/10.0 , floatround_floor )
        else if(player_class[id] == Zabojca) knifes = 1 + floatround ( player_intelligence[id]/20.0 , floatround_floor )
       
        max_knife[id] = knifes
        player_knife[id] = knifes
}

public command_knife(id)
{

        if(!is_user_alive(id)) return PLUGIN_HANDLED


        if(!player_knife[id])
        {
                client_print(id,print_center,"Nie masz juz nozy do rzucania")
                return PLUGIN_HANDLED
        }

        if(tossdelay[id] > get_gametime() - 0.5) return PLUGIN_HANDLED
        else tossdelay[id] = get_gametime()

        player_knife[id]--

        if (player_knife[id] == 1) {
                client_print(id,print_center,"Zostal ci tylko 1 nuz!")
        }

        new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent

        entity_get_vector(id, EV_VEC_origin , Origin)
        entity_get_vector(id, EV_VEC_v_angle, vAngle)

        Ent = create_entity("info_target")

        if (!Ent) return PLUGIN_HANDLED

        entity_set_string(Ent, EV_SZ_classname, "throwing_knife")
        entity_set_model(Ent, "models/diablomod/w_throwingknife.mdl")

        new Float:MinBox[3] = {-1.0, -7.0, -1.0}
        new Float:MaxBox[3] = {1.0, 7.0, 1.0}
        entity_set_vector(Ent, EV_VEC_mins, MinBox)
        entity_set_vector(Ent, EV_VEC_maxs, MaxBox)

        vAngle[0] -= 90

        entity_set_origin(Ent, Origin)
        entity_set_vector(Ent, EV_VEC_angles, vAngle)

        entity_set_int(Ent, EV_INT_effects, 2)
        entity_set_int(Ent, EV_INT_solid, 1)
        entity_set_int(Ent, EV_INT_movetype, 6)
        entity_set_edict(Ent, EV_ENT_owner, id)

        VelocityByAim(id, get_cvar_num("diablo_knife_speed") , Velocity)
        entity_set_vector(Ent, EV_VEC_velocity ,Velocity)
       
        return PLUGIN_HANDLED
}


public touchKnife(knife, id)
{       
        new kid = entity_get_edict(knife, EV_ENT_owner)
       
        if(is_user_alive(id))
        {
                new movetype = entity_get_int(knife, EV_INT_movetype)
               
                if(movetype == 0)
                {
                        if( player_knife[id] < max_knife[id] )
                        {
                                player_knife[id] += 1
                                client_print(id,print_center,"Obecna liczba nozy: %i",player_knife[id])
                        }
                        emit_sound(knife, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
                        remove_entity(knife)
                }
                else if (movetype != 0)
                {
                        if(kid == id) return

                        remove_entity(knife)

                        if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(id) == get_user_team(kid)) return

                        entity_set_float(id, EV_FL_dmg_take, get_cvar_num("diablo_knife") * 1.0)

                        if((get_user_health(id) - get_cvar_num("diablo_knife")) <= 0) UTIL_Kill(kid,id,"knife")
                       
                        else {
                                set_user_health(id, get_user_health(id) - get_cvar_num("diablo_knife"))
                               
                                message_begin(MSG_ONE,get_user_msgid("ScreenShake"),{0,0,0},id);
                                write_short(7<<14);
                                write_short(1<<13);
                                write_short(1<<14);
                                message_end();
                        }

                        if(get_user_team(id) == get_user_team(kid)) {
                                new name[33]
                                get_user_name(kid,name,32)
                                client_print(0,print_chat,"%s attacked a teammate",name)
                        }

                        emit_sound(id, CHAN_ITEM, "weapons/knife_hit4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)

                }
        }
}

public touchWorld(knife, world)
{
        entity_set_int(knife, EV_INT_movetype, 0)
        emit_sound(knife, CHAN_ITEM, "weapons/knife_hitwall1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}

public kill_all_entity(classname[]) {
        new iEnt = find_ent_by_class(-1, classname)
        new tEnt
        while(iEnt > 0) {
                tEnt = iEnt
                iEnt = find_ent_by_class(iEnt, classname)
                remove_entity(tEnt)
        }
}

////////////////////////////////////////////////////////////////////////////////
//                            koniec z nozami                                //
////////////////////////////////////////////////////////////////////////////////

public mod_info(id)
{
        client_print(id,print_console,"Witamy w Diablomod by Miczu & GuTeK")
        client_print(id,print_console,"")
        client_print(id,print_console,"Odlegla baza tego moda jest Diablo Mod v8.0 by N1ghtmr1 ")
        client_print(id,print_console,"Od tego czasu numeracja zostala zresetowana i zaczynalismy od v.1")
        client_print(id,print_console,"")
        client_print(id,print_console,"")
        client_print(id,print_console,"Lista osob ktore przyczynily sie zmianie kodu:")
        client_print(id,print_console,"(nie zgloszeni buga, autentyczna pomoc)")
        client_print(id,print_console,"")
        client_print(id,print_console,"SkinnerBox - poprawa transalcji (od 5.4a)")
        client_print(id,print_console,"DK - pomoc w testach wersji pod SQL")
        client_print(id,print_console,"")
        client_print(id,print_console,"")
        client_print(id,print_console,"")
        client_print(id,print_console,"Jesli kogos pominelem to zglosic sie na forum")
        client_print(id,print_console,"")
        return PLUGIN_HANDLED
}

////////////////////////////////////////////////////////////////////////////////
//                            Hunter part code                              //
////////////////////////////////////////////////////////////////////////////////

public command_arrow(id)
{

        if(!is_user_alive(id)) return PLUGIN_HANDLED


        new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent

        entity_get_vector(id, EV_VEC_origin , Origin)
        entity_get_vector(id, EV_VEC_v_angle, vAngle)

        Ent = create_entity("info_target")

        if (!Ent) return PLUGIN_HANDLED

        entity_set_string(Ent, EV_SZ_classname, "xbow_arrow")
        entity_set_model(Ent, cbow_bolt)

        new Float:MinBox[3] = {-2.8, -2.8, -0.8}
        new Float:MaxBox[3] = {2.8, 2.8, 2.0}
        entity_set_vector(Ent, EV_VEC_mins, MinBox)
        entity_set_vector(Ent, EV_VEC_maxs, MaxBox)

        vAngle[0] *= -1
        Origin[2]+=10
       
        entity_set_origin(Ent, Origin)
        entity_set_vector(Ent, EV_VEC_angles, vAngle)

        entity_set_int(Ent, EV_INT_effects, 2)
        entity_set_int(Ent, EV_INT_solid, 1)
        entity_set_int(Ent, EV_INT_movetype, 5)
        entity_set_edict(Ent, EV_ENT_owner, id)

        VelocityByAim(id, get_cvar_num("diablo_arrow_speed") , Velocity)
        set_rendering (Ent,kRenderFxGlowShell, 255,0,0, kRenderNormal,56)
        entity_set_vector(Ent, EV_VEC_velocity ,Velocity)
       
        return PLUGIN_HANDLED
}

public command_bow(id)
{
        if(!is_user_alive(id)) return PLUGIN_HANDLED
 
        if(bow[id] == 1){
                entity_set_string(id,EV_SZ_viewmodel,cbow_VIEW)
                entity_set_string(id,EV_SZ_weaponmodel,cvow_PLAYER)
                bowdelay[id] = get_gametime()
        }else if(player_sword[id] == 1)
        {
                entity_set_string(id, EV_SZ_viewmodel, SWORD_VIEW) 
                entity_set_string(id, EV_SZ_weaponmodel, SWORD_PLAYER) 
                bow[id]=0
        }
        else
        {
                entity_set_string(id,EV_SZ_viewmodel,KNIFE_VIEW)
                entity_set_string(id,EV_SZ_weaponmodel,KNIFE_PLAYER)
                bow[id]=0
        }
        return PLUGIN_CONTINUE
}

public toucharrow(arrow, id)
{       
        new kid = entity_get_edict(arrow, EV_ENT_owner)
        new lid = entity_get_edict(arrow, EV_ENT_enemy)
       
        if(is_user_alive(id))
        {
                if(kid == id || lid == id) return
               
                entity_set_edict(arrow, EV_ENT_enemy,id)
       
                //remove_entity(arrow)

                new dmg = get_cvar_num("diablo_arrow") + player_intelligence[kid] * 3
               
                if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(id) == get_user_team(kid)) return
               
                Effect_Bleed(id,248)

                if(get_user_health(id) - dmg <= 0)
                {
                        UTIL_Kill(kid,id,"knife")
                        bowdelay[kid] = get_gametime() - 3.5
                }
                else {
                        set_user_health(id, get_user_health(id) - dmg)
                       
                        message_begin(MSG_ONE,get_user_msgid("ScreenShake"),{0,0,0},id);
                        write_short(7<<14);
                        write_short(1<<13);
                        write_short(1<<14);
                        message_end();
                }

                if(get_user_team(id) == get_user_team(kid)) {
                        new name[33]
                        get_user_name(kid,name,32)
                        client_print(0,print_chat,"%s attacked a teammate",name)
                }

                emit_sound(id, CHAN_ITEM, "weapons/knife_hit4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
        }
}

public touchWorld2(arrow, world)
{
        remove_entity(arrow)
}

public hunter_Line(id,vid,end[3])
{
        if(is_user_alive(id) && is_user_alive(vid) && trace_bool[id])
        {
                new start[3]
                get_user_origin(vid,start)
               
                message_begin(MSG_ONE,SVC_TEMPENTITY,{0,0,0},id)
                write_byte(0)
                write_coord(start[0])        // starting pos
                write_coord(start[1])
                write_coord(start[2])
                write_coord(end[0])        // ending pos
                write_coord(end[1])
                write_coord(end[2])
                write_short(sprite_line)        // sprite index
                write_byte(1)                // starting frame
                write_byte(5)                // frame rate
                write_byte(100)                // life
                write_byte(1)                // line width
                write_byte(0)                // noise
                write_byte(200)        // RED
                write_byte(100)        // GREEN
                write_byte(100)        // BLUE                                       
                write_byte(75)                // brightness
                write_byte(5)                // scroll speed
                message_end()
               
                new parms[5];
               
                for(new i=0;i<3;i++)
                {
                        parms[i] = start[i]
                }
                parms[3]=id
                parms[4]=vid
               
                set_task(0.20,"charge_hunter",id+TARACE_TASK+vid*100,parms,5)
        }
}


public charge_hunter(parms[])
{
        new stop[3]
       
        for(new i=0;i<3;i++)
        {
                stop[i] =parms[i]
        }
        hunter_Line(parms[3],parms[4],stop)
}


public grenade_throw(id, ent, wID)
{       
        if(!g_TrapMode[id] || !is_valid_ent(ent))
                return PLUGIN_CONTINUE
               
        new Float:fVelocity[3]
        VelocityByAim(id, cvar_throw_vel, fVelocity)
        entity_set_vector(ent, EV_VEC_velocity, fVelocity)
       
        new Float: angle[3]
        entity_get_vector(ent,EV_VEC_angles,angle)
        angle[0]=0.00
        entity_set_vector(ent,EV_VEC_angles,angle)
       
        entity_set_float(ent,EV_FL_dmgtime,get_gametime()+3.5)
       
        entity_set_int(ent, NADE_PAUSE, 0)
        entity_set_int(ent, NADE_ACTIVE, 0)
        entity_set_int(ent, NADE_VELOCITY, 0)
        entity_set_int(ent, NADE_TEAM, get_user_team(id))
       
        new param[1]
        param[0] = ent
        set_task(3.0, "task_ActivateTrap", 0, param, 1)
       
        return PLUGIN_CONTINUE
}

public task_ActivateTrap(param[])
{
        new ent = param[0]
        if(!is_valid_ent(ent))
                return PLUGIN_CONTINUE
       
        entity_set_int(ent, NADE_PAUSE, 1)
        entity_set_int(ent, NADE_ACTIVE, 1)
       
        new Float:fOrigin[3]
        entity_get_vector(ent, EV_VEC_origin, fOrigin)
        fOrigin[2] -= 8.1*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[entity_get_edict(ent,EV_ENT_owner)])))
        entity_set_vector(ent, EV_VEC_origin, fOrigin)
       
        return PLUGIN_CONTINUE
}

public think_Grenade(ent)
{
        new entModel[33]
        entity_get_string(ent, EV_SZ_model, entModel, 32)
       
        if(!is_valid_ent(ent) || equal(entModel, "models/w_c4.mdl"))
                return PLUGIN_CONTINUE
       
        if(entity_get_int(ent, NADE_PAUSE))
                return PLUGIN_HANDLED
       
        return PLUGIN_CONTINUE
}

public think_Bot(bot)
{
        new ent = -1
        while((ent = find_ent_by_class(ent, "grenade")))
        {
                new entModel[33]
                entity_get_string(ent, EV_SZ_model, entModel, 32)
                       
                if(equal(entModel, "models/w_c4.mdl"))
                        continue

                if(!entity_get_int(ent, NADE_ACTIVE))
                        continue
                               
                new Players[32], iNum
                get_players(Players, iNum, "a")
                                               
                for(new i = 0; i < iNum; ++i)
                {
                        new id = Players[i]
                        if(entity_get_int(ent, NADE_TEAM) == get_user_team(id))
                                continue
                               
                        if(get_entity_distance(id, ent) > cvar_activate_dis || player_speed(id) <200.0)
                                continue
                       
                        if(entity_get_int(ent, NADE_VELOCITY)) continue
                       
                        new Float:fOrigin[3]
                        entity_get_vector(ent, EV_VEC_origin, fOrigin)
                        while(PointContents(fOrigin) == CONTENTS_SOLID)
                                fOrigin[2] += 100.0
               
                        entity_set_vector(ent, EV_VEC_origin, fOrigin)
                        drop_to_floor(ent)
                               
                        new Float:fVelocity[3]
                        entity_get_vector(ent, EV_VEC_velocity, fVelocity)
                        fVelocity[2] += float(cvar_nade_vel)
                        entity_set_vector(ent, EV_VEC_velocity, fVelocity)
                        entity_set_int(ent, NADE_VELOCITY, 1)
               
                        new param[1]
                        param[0] = ent
                        //set_task(cvar_explode_delay, "task_ExplodeNade", 0, param, 1)
                        entity_set_float(param[0], EV_FL_nextthink, halflife_time() + cvar_explode_delay)
                        entity_set_int(param[0], NADE_PAUSE, 0)
                }
        }
        if(get_timeleft()<2 && map_end<2)
        {
                map_end=2
        }
        else if(get_timeleft()<6 && map_end<1)
        {
                new play[32],num

                get_players(play,num)
               
                for(new i=0;i<num;i++)
                {
                        savexpcom(play[i])
                }
                map_end=1
        }
       
        entity_set_float(bot, EV_FL_nextthink, halflife_time() + 0.02)
}

stock Float:player_speed(index)
{
        new Float:vec[3]
       
        pev(index,pev_velocity,vec)
        vec[2]=0.0
       
        return floatsqroot ( vec[0]*vec[0]+vec[1]*vec[1] )
}

public _create_ThinkBot()
{
        new think_bot = create_entity("info_target")
        if(!is_valid_ent(think_bot))
                log_amx("For some reason, the universe imploded, reload your server")
        else
        {
                entity_set_string(think_bot, EV_SZ_classname, "think_bot")
                entity_set_float(think_bot, EV_FL_nextthink, halflife_time() + 1.0)
        }
}


speed4weed 04-15-2009 15:53

Re: Problem Compiling =/
 
1 Attachment(s)
Hmm, i think i get it, but how would that go with the if playerclass, and also the load xp?


Edit: Btw this is the new file. with the 3 lines of error =/




Edit2: oh ok i see, so i was just adding things that werent needed.



Edit3: Ok i did it and now i have 2 errors =/ heres the file.



Edit4: alright i did what u said, and then i copied and pasted =), lol. It compiled just had 9 warnings. lol, ty so much. The warnings wont be a problem will they?

ot_207 04-15-2009 16:00

Re: Problem Compiling =/
 
Line 3959: change:
PHP Code:

public select_class(id,lx[]) 

to
PHP Code:

public select_class(id

that LX[] string does not have any purpose!
Edit: In my above post you have the corect script take a look at it and try to see what the problems where!
Edit2: The warnings are bad for plugins!

speed4weed 04-15-2009 16:05

Re: Problem Compiling =/
 
yes i did that hehe, but the warnings, will they be a problem?

ot_207 04-15-2009 16:05

Re: Problem Compiling =/
 
They are when it comes to approval and good scripting in general.

speed4weed 04-15-2009 16:06

Re: Problem Compiling =/
 
Oh ok, its fine, this is not for approval hehe. Just working out a few scripts seeing how they work and what errors become, Thank you so much =) +karmaed already hehe.

ot_207 04-15-2009 16:07

Re: Problem Compiling =/
 
1 Attachment(s)
I suggest that you post also the warnings. It is best to learn about that too.

Edit: This is the script corrected by me. It has only one warning! That warning is because that variable isn't used!

speed4weed 04-15-2009 16:12

Re: Problem Compiling =/
 
This is what happened no the online one >< haha

/home/groups/amxmodx/compiler3/core(0) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(2) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(3) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(5) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(6) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(7) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(8) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(9) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(10) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(11) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(12) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(13) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(14) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(15) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(16) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(18) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(19) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(20) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(21) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(22) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(23) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(24) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(25) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(26) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(27) : error 075: input line too long (after substitutions)
/home/groups/amxmodx/compiler3/core(28) : error 075: input line too long (after substitutions)



But the local was a success. Do u have an msn or aim i could speak to u?


All times are GMT -4. The time now is 02:22.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.