AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Plugin crashes on server, but works on local (https://forums.alliedmods.net/showthread.php?t=313538)

SaBBa 01-13-2019 05:47

Plugin crashes on server, but works on local
 
3 Attachment(s)
Hello, I have modified Zombie plugin [CSO] Dual Sword Phantom Slayer, for normal, but it only works on local enviroment (windows).

Code:

./hlds_run: line 255: 13827 Segmentation fault $HL_CMD
I am getting this on linux server.

Original plugin

Code:

/* Plugin generated by AMXX-Studio */
#pragma compress 1

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>
#include <zombieplague>

#define PLUGIN "CSO Dual Sword Phantom Slayer"
#define VERSION "1.0"
#define AUTHOR "Natasha aka Asdian"

#define CSW_DPS CSW_KNIFE
#define weapon_dps "weapon_knife"

#define v_model "models/v_dualsword.mdl"
#define p_model "models/p_dualsword_a.mdl"
#define p_model2 "models/p_dualsword_b.mdl"
#define spr_wpn        "knife_dualsword"

new const weapon_sound[][] =
{
        "weapons/dualsword_stab1.wav",                                // 0
        "weapons/dualsword_stab2.wav",                                // 1
        "weapons/dualsword_stab1_hit.wav",                        // 2
        "weapons/dualsword_stab2_hit.wav",                        // 3
        "weapons/katanad_hitwall.wav",                                // 4
       
        "weapons/dualsword_slash_1.wav",                        // 5
        "weapons/dualsword_slash_2.wav",                        // 6
        "weapons/dualsword_slash_3.wav",                        // 7
        "weapons/dualsword_slash_4.wav",                        // 8
        "weapons/dualsword_hit1.wav",                                // 9
        "weapons/dualsword_hit2.wav",                                // 10
        "weapons/dualsword_hit3.wav",                                // 11
        "weapons/dualsword_slash_4_1.wav",                        // 12
        "weapons/dualsword_slash_4_2.wav",                        // 13
        "weapons/dualsword_skill_end.wav",                        // 14
       
        "weapons/dualsword_fly1.wav",                                // 15
        "weapons/dualsword_fly2.wav",                                // 16
        "weapons/dualsword_fly3.wav",                                // 17
        "weapons/dualsword_fly4.wav",                                // 18
        "weapons/dualsword_fly5.wav",                                // 19
        "weapons/dualsword_skill_start.wav"
}

//Hit
#define        RESULT_HIT_NONE                        0
#define        RESULT_HIT_PLAYER                        1
#define        RESULT_HIT_WORLD                        2

enum _:WpnAnim
{
        ANIM_IDLEA = 0,
        ANIM_SLASH1,
        ANIM_SLASH2,
        ANIM_SLASH3,
        ANIM_SLASH4,
        ANIM_SLASHEND,
        ANIM_DRAWA,
        ANIM_IDLEB,
        ANIM_STAB1,
        ANIM_STAB2,
        ANIM_STABEND,
        ANIM_DRAWB
}

new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_dps, g_soundmode[33]
new ef_sakura[4]
new Float:g_Sound[33]

new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range
new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range
new cvar_damage_special, cvar_special_range
new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr

public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
       
        register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
        register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
        register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
        register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1);

        register_think("dps_entytyd", "Fw_DPSEnt_Think")
       
        RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame")
       
        g_dps = zp_register_extra_item("Dual Sword Phantom Slayer", 0, ZP_TEAM_HUMAN)
        register_clcmd(spr_wpn, "hook_rb")
       
        cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0")
        cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0")
        cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0")
        cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0")
        cvar_slash_radius = register_cvar("dps_slashradius","120.0")
        cvar_slash_range = register_cvar("dps_slashrange","95.0")
       
        cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0")
        cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0")
        cvar_stab_radius = register_cvar("dps_stabradius","90.0")
        cvar_stab_range = register_cvar("dps_stabrange","150.0")
       
        cvar_damage_special = register_cvar("dps_specialdamage","95.0")
        cvar_special_range = register_cvar("dps_specialrange","120.0")
       
        cvar_knockback[0] = register_cvar("dps_slashknockback","0.0")
        cvar_knockback[1] = register_cvar("dps_stabknockback","0.0")
        cvar_knockback[2] = register_cvar("dps_specialknockback","0.0")
       
        cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "0")
        cvar_remove = register_cvar("dps_remove_onnewround", "0")
        cvar_spr = register_cvar("dps_enable_sprites", "1")
       
        g_dps = zp_register_extra_item("Dual Sword Phantom Slayer", 10, ZP_TEAM_HUMAN)
}

public plugin_precache()
{
        precache_model(v_model)
        precache_model(p_model)
        precache_model(p_model2)
       
        for(new i = 0; i < sizeof(weapon_sound); i++)
                precache_sound(weapon_sound[i])
       
        precache_model("models/dualswordfx.mdl")
        precache_model("models/dualsword_skill.mdl")
        precache_model("models/dualsword_skillfx1.mdl")
        precache_model("models/dualsword_skillfx2.mdl")
       
        ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr")
        ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr")
        ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr")
        ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr")
       
        new Txt[32]
        format(Txt, 31, "sprites/%s.txt", spr_wpn)
        engfunc(EngFunc_PrecacheGeneric, Txt)
}

public zp_extra_item_selected(i, d) if(d == g_dps) get_dps(i)
public zp_user_infected_post(i) remove_dps(i)
public zp_user_humanized_post(i) remove_dps(i)

public hook_rb(id)
{
        engclient_cmd(id, weapon_dps)
        return PLUGIN_HANDLED
}

public get_dps(id)
{
        if (!is_user_alive(id))
                return

        g_had_dps[id] = 1
        g_mode[id] = 0
        g_slashend[id] = 0
        g_check[id] = 0
        g_soundmode[id] = 0
       
        fm_give_item(id, weapon_dps)
       
        if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id)
        else engclient_cmd(id,weapon_dps)
}

public client_connect(id) remove_dps(id)
public client_disconnect(id) remove_dps(id)

public Event_NewRound()
{
        if(!get_pcvar_num(cvar_remove))
                return
       
        for(new i = 0; i < get_maxplayers(); i++)
                remove_dps(i)
}

public remove_dps(id)
{
        g_had_dps[id] = 0
        g_slashend[id] = 0
        g_check[id] = 0
       
        static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
        if(!pev_valid(iEnt)) return
       
        set_pev(iEnt, pev_iuser1, 0)
        set_pev(iEnt, pev_iuser2, 0)
        set_pev(iEnt, pev_iuser3, 0)
        set_pev(iEnt, pev_iuser4, 0)
        set_pev(iEnt, pev_fuser1, 0.0)
}

public Event_CurWeapon(id)
{
        if(!is_user_alive(id))
                return 1
        if(get_user_weapon(id) != CSW_DPS)
                return 1
        if(!g_had_dps[id])
                return 1
        if(zp_get_user_zombie(id))
                return 1
               
        set_pev(id, pev_viewmodel2, v_model)
        set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model)
       
        Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
       
        static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
        if(!pev_valid(iEnt)) return 1
       
        set_pev(iEnt, pev_iuser1, 0)
        set_pev(iEnt, pev_iuser2, 0)
        set_pev(iEnt, pev_iuser3, 0)
        set_pev(iEnt, pev_iuser4, 0)
        set_pev(iEnt, pev_fuser1, 0.0)
               
        g_slashend[id] = 0
        g_check[id] = 0
       
        set_pdata_float(id, 83, 0.23)
        set_pdata_float(iEnt, 46, 0.25);
        set_pdata_float(iEnt, 47, 0.25);
        set_pdata_float(iEnt, 48, 0.25);
       
        if(get_pcvar_num(cvar_spr))
        {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id)
                write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps)
                write_byte(-1)
                write_byte(-1)
                write_byte(-1)
                write_byte(-1)
                write_byte(2)
                write_byte(1)
                write_byte(CSW_DPS)
                write_byte(0)
                message_end()
        }
        return 0
}

public message_DeathMsg(msg_id, msg_dest, msg_ent)
{
        new szWeapon[64]
        get_msg_arg_string(4, szWeapon, charsmax(szWeapon))
       
        if (strcmp(szWeapon, "knife"))
                return PLUGIN_CONTINUE

        new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373)
        if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)])
                return PLUGIN_CONTINUE

        set_msg_arg_string(4, "dualsword")
        return PLUGIN_CONTINUE
}

public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
{
        if (!pev_valid(iEnt))
                return;
        if (pev(iEnt, pev_flags) & FL_KILLME)
                return;

        new classname[32];
        pev(iEnt, pev_classname, classname, 31);

        if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4))
        {
                if (iHost != pev(iEnt, pev_owner))
                        set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW));
        }
}

public Fw_DPSEnt_Think(iEnt)
{
        if(!pev_valid(iEnt))
                return
       
        new iOwner
        iOwner = pev(iEnt, pev_owner)
       
        if(!is_user_alive(iOwner) || !is_user_connected(iOwner) || zp_get_user_zombie(iOwner))
        {
                remove_entity(iEnt)
                g_soundmode[iOwner] = 0
                return
        }
       
        if(!Get_Entity_Mode(iEnt))
        {
                new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3];
                iWpn = pev(iEnt, pev_iuser1)
                iState = pev(iWpn, pev_iuser4)
                Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin);
               
                pev(iOwner, pev_v_angle, vecAngle);
                vecAngle[0] = -vecAngle[0];
               
                set_pev(iEnt, pev_origin, vecOrigin);
                set_pev(iEnt, pev_angles, vecAngle);
               
                if(!iState || get_user_weapon(iOwner) != CSW_DPS)
                {
                        new Float:fRenderAmount;
                        pev(iEnt, pev_renderamt, fRenderAmount);

                        fRenderAmount -= 4.5;

                        if (fRenderAmount <= 5.0)
                        {
                                remove_entity(iEnt);
                                return;
                        }
                        set_pev(iEnt, pev_renderamt, fRenderAmount);
                }
        }
       
        if(Get_Entity_Mode(iEnt) == 1)
        {
                set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
       
                static Float:Origin[3]; pev(iOwner, pev_origin, Origin)
                Origin[2] -= 25.0
               
                Stock_Hook_Ent(iEnt, Origin, 0.01)
               
                if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner))
                {
                        set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
                        return
                }
                       
                set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0});
                set_pev(iEnt, pev_origin, Origin);
        }
       
        if(Get_Entity_Mode(iEnt) == 2)
        {
                new Float:vecOrigin[3]
                GetGunPosition(iOwner, vecOrigin);
               
                new Float:fOldOrigin[3];
                pev(iEnt, pev_oldorigin, fOldOrigin);
               
                new Float:vecNewOrigin[3];
                pev(iEnt, pev_origin, vecNewOrigin);
               
                new Float:vecfff[3];
                xs_vec_sub(vecOrigin, fOldOrigin, vecfff);
                xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin);
               
                set_pev(iEnt, pev_origin, vecNewOrigin);
                set_pev(iEnt, pev_oldorigin, vecOrigin);
               
                if (pev(iEnt, pev_iuser1) == 2)
                {
                        new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin);
                        if (fDist > 175.0 * 0.5)
                        {
                                remove_entity(iEnt);
                                return;
                        }
                }
               
                if(g_Sound[iOwner] < get_gametime())
                {
                        if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                        if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                        if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                        if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                       
                        g_soundmode[iOwner]++
                        if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0
                       
                        g_Sound[iOwner] = get_gametime()+0.088;
                }
        }
        set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
       
        if(Get_Entity_Mode(iEnt) == 2)
        {
                new Float:fTimeLast;
                pev(iEnt, pev_fuser1, fTimeLast);
               
                if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime())
                {
                        if (pev(iEnt, pev_iuser1) == 1)
                        {
                                new Float:fRenderAmount;
                                pev(iEnt, pev_renderamt, fRenderAmount);
                                fRenderAmount -= 7.5;
                               
                                if (fRenderAmount <= 5.0)
                                {
                                        remove_entity(iEnt);
                                        return;
                                }
                                set_pev(iEnt, pev_renderamt, fRenderAmount);
                        } else remove_entity(iEnt);
                       
                        g_soundmode[iOwner] = 0
                }
        }
}

public fw_Item_PostFrame(ent)
{
        new id = pev(ent, pev_owner)
       
        if(!is_user_connected(id))
                return HAM_IGNORED
        if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id])
                return HAM_IGNORED

        if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id]))
        {
                if(g_check[id] < 6) g_check[id] = 0
                set_pev(ent, pev_iuser3, 0)
                Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
                set_pdata_float(ent, 48, 4.03, 4)
        }
       
        new iButton = pev(id,pev_button)
        return AurezBotac(id, ent, iButton)
}

public AurezBotac(id, iEnt, iButton)
{
        new iState = pev(iEnt, pev_iuser3)
        new iState2 = pev(iEnt, pev_iuser2)
        new iSlash = pev(iEnt, pev_iuser4)
        new Float:fSound; pev(iEnt, pev_fuser1, fSound)
        new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range)
       
        if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2)
        {
                if(!iState || iState == 1)
                {
                        Set_WeaponAnim(id, ANIM_STABEND)
                        set_pev(iEnt, pev_iuser2, 0)
                        set_pdata_float(iEnt, 48, 1.45,4)
                }
        }
       
        if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id])
        {
                Set_WeaponAnim(id, ANIM_SLASHEND)
                set_pdata_float(iEnt, 48, 2.03,4)
                g_slashend[id] = 0
        }
       
        if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1))
        {
                new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius)
                new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState])
               
                new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]]))
                switch (iHitResult)
                {
                        case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2])
                        case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4])
                }
                set_pev(iEnt, pev_iuser1, 0);
        }
       
        if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4)
        {
                set_pev(iEnt, pev_iuser4, 1 + iSlash)
                Set_WeaponAnim(id, 1 + iSlash)
               
                set_pdata_float(id, 83, 0.06)
               
                if(!get_pcvar_num(cvar_fast_attack))
                        set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
               
                set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
                set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4);
                 
                set_pev(iEnt, pev_iuser1, 1)
                set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
                SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash])
                Create_Slash(id,iEnt,iSlash)
               
                if(iSlash == 3)
                {
                        g_slashend[id] = 1
                       
                        set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5))
                        set_pev(iEnt, pev_iuser4, 0)
                }
        }
       
        if(fSound && fSound < get_gametime())
        {
                SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12])
                set_pev(iEnt, pev_fuser1, 0.0)
               
                if(g_check[id] == 5)
                {
                        Set_WeaponAnim(id, 14)
                        SendSound(id,CHAN_ITEM,weapon_sound[20])
                        g_check[id] = 6
                       
                        set_pdata_float(iEnt, 46, 1.03,4)
                        set_pdata_float(iEnt, 47, 1.03,4)
                        set_pdata_float(iEnt, 48, 1.03,4)
                       
                        set_pev(iEnt, pev_fuser4, get_gametime()+1.7);
                        DPS_Special(id, 0, 2.0)
                }
        }
       
        if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0)
        {
                set_pdata_float(iEnt, 46, 11.36,4)
                set_pdata_float(iEnt, 47, 11.36,4)
                set_pdata_float(iEnt, 48, 11.36,4)
               
                g_check[id] = 7
                set_pev(iEnt, pev_fuser1, get_gametime() + 10.6)
                Set_WeaponAnim(id, 15)
        }
       
        // NANI?!
        if(g_check[id] == 7 && fSound && fSound < get_gametime())
        {
                SendSound(id,CHAN_VOICE,weapon_sound[14])
                set_pev(iEnt, pev_fuser1, 0.0)
                g_check[id] = 0
               
                DPS_Special(id, 1, 1.46)
        }
       
        DPS_RealSpecial(id, iEnt, fRange)
       
        if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0)
        {
                g_mode[id] = 0
                g_slashend[id] = 0
               
                set_pev(iEnt, pev_iuser2, 1)
                set_pev(iEnt, pev_iuser4, 0)
               
                switch(iState)
                {
                        case 0:
                        {
                                set_pdata_float(id, 83, 0.16)
                                set_pdata_float(iEnt, 46, 0.4,4);
                               
                                if(!get_pcvar_num(cvar_fast_attack))
                                        set_pdata_float(iEnt, 47, 0.4,4);
                                       
                                set_pdata_float(iEnt, 48, 1.0,4);
                               
                                set_pev(iEnt, pev_iuser1, 1)
                                set_pev(iEnt, pev_iuser3, 1)
                                set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
                               
                                Set_WeaponAnim(id, ANIM_STAB1)
                                SendSound(id, CHAN_WEAPON, weapon_sound[0])
                               
                                if(!g_check[id]) g_check[id] = 1
                                else if(g_check[id] == 2) g_check[id] = 3
                                else g_check[id] = 0
                        }
                        case 1:
                        {
                                set_pdata_float(id, 83, 0.16)
                                set_pdata_float(iEnt, 46, 0.83,4);
                               
                                if(!get_pcvar_num(cvar_fast_attack))
                                        set_pdata_float(iEnt, 47, 0.83,4);
                               
                                set_pdata_float(iEnt, 48, 1.5,4);
                               
                                set_pev(iEnt, pev_iuser1, 1)
                                set_pev(iEnt, pev_iuser3, 0)
                                set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
                               
                                Set_WeaponAnim(id, ANIM_STAB2)
                                SendSound(id, CHAN_WEAPON, weapon_sound[1])
                               
                                if(g_check[id] == 3) g_check[id] = 4
                                else g_check[id] = 0
                        }
                }
        }
       
        if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash)
        {
                g_mode[id] = 1
               
                set_pdata_float(id, 83, 0.04)
               
                if(!get_pcvar_num(cvar_fast_attack))
                        set_pdata_float(iEnt, 46, 0.13,4);
               
                set_pdata_float(iEnt, 47, 0.13,4);
                set_pdata_float(iEnt, 48, 0.5,4);
               
                set_pev(iEnt, pev_iuser1, 1)
                set_pev(iEnt, pev_iuser2, 0)
                set_pev(iEnt, pev_iuser3, 0)
                set_pev(iEnt, pev_iuser4, 1)
                set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
               
                Set_WeaponAnim(id, ANIM_SLASH1)
                SendSound(id, CHAN_WEAPON, weapon_sound[5])
               
                Create_Slash(id,iEnt,0)
               
                if(g_check[id] == 1) g_check[id] = 2
                else if(g_check[id] == 4) g_check[id] = 5
                else g_check[id] = 0
        }
       
        iButton &= ~IN_ATTACK;
        iButton &= ~IN_ATTACK2;
        set_pev(id, pev_button, iButton);
        return HAM_IGNORED
}

stock Create_Slash(id,iEnt,seq)
{
        new Float:vecOrigin[3], Float:vecAngle[3];
        GetGunPosition(id, vecOrigin);
        pev(id, pev_v_angle, vecAngle);
        vecAngle[0] = -vecAngle[0];
       
        new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
               
        // Set info for ent       
        Set_Entity_Mode(pEntity, 0)
        set_pev(pEntity, pev_scale, 0.1);
        set_pev(pEntity, pev_iuser1, iEnt);
        set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
        set_pev(pEntity, pev_angles, vecAngle);
        set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
}

stock DPS_Special(id, seq, Float:fTime)
{
        new Float:VecOrig[3], Float:VecAng[3]
        pev(id, pev_origin, VecOrig)
        pev(id, pev_angles, VecAng)
       
        new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
        set_pev(iEfx, pev_classname, "dps_entytyd");
        set_pev(iEfx, pev_origin, VecOrig)
        set_pev(iEfx, pev_frame, 0.0)
        set_pev(iEfx, pev_animtime, get_gametime())
        set_pev(iEfx, pev_framerate, 1.0)
        set_pev(iEfx, pev_sequence, seq)
        engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl")
        dllfunc(DLLFunc_Spawn, iEfx)
        Set_Entity_Mode(iEfx, 1)
        set_pev(iEfx, pev_angles, VecAng)
        set_pev(iEfx, pev_solid, SOLID_NOT)
        set_pev(iEfx, pev_owner, id)
        set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01});
        set_pev(iEfx, pev_fuser1, get_gametime() + fTime)
        set_pev(iEfx, pev_nextthink, get_gametime() + 0.01)
}

stock DPS_RealSpecial(id, iEnt, Float:fRange)
{
        new Float:fTimeEffect;
        pev(iEnt, pev_fuser4, fTimeEffect);
       
        if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime())
        {
                KnifeAttack_Global(id, false, get_pcvar_float(cvar_special_range)*2.0, 180.0, get_pcvar_float(cvar_damage_special), get_pcvar_float(cvar_knockback[2]))
                       
                new Float:vecOrigin3[2][3], Float:vecOrigin[3];
                pev(id, pev_origin, vecOrigin3[0]);
                pev(id, pev_origin, vecOrigin);
                xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
               
                new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85);
                vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0);
               
                switch (random(3))
                {
                        case 0:
                        {
                                vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
                               
                                vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
                        }
                        case 1:
                        {
                                vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
                               
                                vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
                        }
                        case 2:
                        {
                                vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
                               
                                vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
                        }
                        case 3:
                        {
                                vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
                               
                                vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
                        }
                }
               
                if (random_num(0,9) > 8)
                {
                        new Float:vecAngle2[3];
                        vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0);
                        vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0);
                       
                        new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0)       
                        set_pev(pEntity, pev_angles, vecAngle2);
                        set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
                        set_pev(pEntity, pev_iuser1, 1);
                        set_pev(pEntity, pev_iuser2, iEnt);
                        set_pev(pEntity, pev_frame, 0.0);
                        Set_Entity_Mode(pEntity, 2)
                        set_pev(pEntity, pev_fuser1, get_gametime()+0.53);
                        set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
                        set_pev(pEntity, pev_fuser3, get_gametime()+0.31);
                        set_pev(pEntity, pev_oldorigin, vecOrigin);
                        set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
                }
               
                new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0)       
                set_pev(pEntity, pev_iuser1, 2);
                set_pev(pEntity, pev_iuser2, iEnt);
                Set_Entity_Mode(pEntity, 2)
                set_pev(pEntity, pev_frame, 0.0);
                set_pev(pEntity, pev_oldorigin, vecOrigin);
                set_pev(pEntity, pev_fuser1, get_gametime()+0.2);
                set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
                set_pev(pEntity, pev_fuser3, get_gametime()+0.3);
                set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
               
                set_pev(iEnt, pev_fuser4, get_gametime()+0.05);
        }
}

stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY)
{
        new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
               
        // Set info for ent       
        set_pev(pEntity, pev_movetype, move);
        set_pev(pEntity, pev_owner, id);
        engfunc(EngFunc_SetModel, pEntity, models);
        set_pev(pEntity, pev_classname, "dps_entytyd");
        set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0});
        set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0});
        set_pev(pEntity, pev_origin, Start);
        set_pev(pEntity, pev_gravity, 0.01);
        set_pev(pEntity, pev_solid, solid);
       
        static Float:Velocity[3];
        Stock_Get_Speed_Vector(Start, End, speed, Velocity);
        set_pev(pEntity, pev_velocity, Velocity);

        new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle);
        vector_to_angle(Velocity, vecVAngle)
       
        if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]);
        set_pev(pEntity, pev_angles, vecVAngle);
       
        set_pev(pEntity, pev_rendermode, kRenderTransAdd);
        set_pev(pEntity, pev_renderamt, 255.0);
        set_pev(pEntity, pev_sequence, seq)
        set_pev(pEntity, pev_animtime, get_gametime());
        set_pev(pEntity, pev_framerate, 1.0)
        return pEntity;
}

stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode)
stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)

stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
        xs_vec_sub(origin2, origin1, new_velocity)
        new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
        xs_vec_mul_scalar(new_velocity, num, new_velocity)
}
stock GetGunPosition(id, Float:vecSrc[3])
{
        new Float:vecViewOfs[3];
        pev(id, pev_origin, vecSrc);
        pev(id, pev_view_ofs, vecViewOfs);
        xs_vec_add(vecSrc, vecViewOfs, vecSrc);
}
stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
{
        new iHitResult
        if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
        else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)

        return iHitResult
}

stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
{
        new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
        GetGunPosition(id, vecSrc);

        pev(id, pev_v_angle, v_angle);
        engfunc(EngFunc_MakeVectors, v_angle);

        global_get(glb_v_forward, vecForward);
        xs_vec_mul_scalar(vecForward, flRange, vecForward);
        xs_vec_add(vecSrc, vecForward, vecEnd);

        new tr = create_tr2();
        engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);

        new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
        if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
       
        get_tr2(tr, TR_flFraction, flFraction);

        new iHitResult = RESULT_HIT_NONE;
       
        if (flFraction < 1.0)
        {
                new pEntity = get_tr2(tr, TR_pHit);
                iHitResult = RESULT_HIT_WORLD;
               
                if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
                {
                        if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
                                flDamage *= 1.0;

                        iHitResult = RESULT_HIT_PLAYER;
                }

                if (pev_valid(pEntity))
                {
                        engfunc(EngFunc_MakeVectors, v_angle);
                        global_get(glb_v_forward, vecForward);

                        if (iHitgroup != -1)
                                set_tr2(tr, TR_iHitgroup, iHitgroup);

                        ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
                        ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
                        Stock_Fake_KnockBack(id, pEntity, flKnockBack)
                       
                        if (IsAlive(pEntity))
                        {
                                free_tr2(tr);
                                return iHitResult;
                        }
                }
        }
        free_tr2(tr);
        return iHitResult;
}

stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
{
        new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
        pev(id, pev_origin, vecOrigin);

        new iHitResult = RESULT_HIT_NONE;
        GetGunPosition(id, vecSrc);

        pev(id, pev_v_angle, v_angle);
        engfunc(EngFunc_MakeVectors, v_angle);

        global_get(glb_v_forward, vecForward);
        xs_vec_mul_scalar(vecForward, flRange, vecForward);
        xs_vec_add(vecSrc, vecForward, vecEnd);

        new tr = create_tr2();
        engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
       
        new Float:EndPos2[3]
        get_tr2(tr, TR_vecEndPos, EndPos2)
       
        new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
        if (flFraction < 1.0)
        {
                iHitResult = RESULT_HIT_WORLD;
                if(bStab) Stock_SakuraEffect(id, EndPos2)
        }
       
        new Float:vecEndZ = vecEnd[2];
       
        new pEntity = -1;
        while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
        {
                if (!pev_valid(pEntity))
                        continue;
                if (id == pEntity)
                        continue;
                if (!IsAlive(pEntity))
                        continue;
                if (!CheckAngle(id, pEntity, fAngle))
                        continue;

                GetGunPosition(id, vecSrc);
                Stock_Get_Origin(pEntity, vecEnd);

                vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);

                xs_vec_sub(vecEnd, vecSrc, vecForward);
                xs_vec_normalize(vecForward, vecForward);
                xs_vec_mul_scalar(vecForward, flRange, vecForward);
                xs_vec_add(vecSrc, vecForward, vecEnd);

                engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
                get_tr2(tr, TR_flFraction, flFraction);

                if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
                get_tr2(tr, TR_flFraction, flFraction);

                if (flFraction < 1.0)
                {
                        if (IsPlayer(pEntity) || IsHostage(pEntity))
                        {
                                iHitResult = RESULT_HIT_PLAYER;
                                if(bStab) Stock_SakuraEffect(id, vecEnd)
                               
                                if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
                                        flDamage *= 1.0;
                        }

                        if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
                        {
                                engfunc(EngFunc_MakeVectors, v_angle);
                                global_get(glb_v_forward, vecForward);

                                if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);

                                ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
                                ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
                               
                                Stock_Fake_KnockBack(id, pEntity, flKnockBack)
                        }
                }
                free_tr2(tr);
        }
        return iHitResult;
}

stock Set_WeaponAnim(id, anim)
{
        set_pev(id, pev_weaponanim, anim)
       
        message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
        write_byte(anim)
        write_byte(pev(id, pev_body))
        message_end()
}

stock Stock_Set_Vis(iEnt, iVis = 1)
        set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW)

stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0)
{
        static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
        pev(ent, pev_origin, EntOrigin)
       
        if(!mode)
        {
                distance_f = get_distance_f(EntOrigin, TargetOrigin)
                fl_Time = distance_f / Speed
                       
                pev(ent, pev_velocity, fl_Velocity)
                       
                fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time
                fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time
                fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time

                if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity)
                else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01})
        } else {
                static Float:fl_EntVelocity[3], Float:fl_Acc[3]
                Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity)
                xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity)
               
                for(new i =0; i<3; i++)
                {
                        if(fl_Velocity[i] > fl_EntVelocity[i])
                        {
                                fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
                                fl_Acc[i] = floatmin(70.0, fl_Acc[i])
                                fl_EntVelocity[i] += fl_Acc[i]
                        }
                        else if(fl_Velocity[i] < fl_EntVelocity[i])
                        {
                                fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i]
                                fl_Acc[i] = floatmin(70.0, fl_Acc[i])
                                fl_EntVelocity[i] -= fl_Acc[i]
                        }
                }
                set_pev(ent, pev_velocity, fl_EntVelocity)
        }
}

stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3])
{       
        new Float:v3[3],i
        for(i=0;i<3;i++) v3[i]=start[i]-end[i]

        new Float:vl = vector_length(v3)
        for(i=0;i<3;i++) reOri[i] = v3[i] / vl
}

stock Stock_Get_Postion(id,Float:forw,Float:right,Float:up,Float:vStart[])
{
        static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
        pev(id, pev_origin, vOrigin)
        pev(id, pev_view_ofs,vUp)
        xs_vec_add(vOrigin,vUp,vOrigin)
        pev(id, pev_v_angle, vAngle)
       
        engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, vUp)
       
        vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
        vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
        vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}

stock IsPlayer(pEntity) return is_user_connected(pEntity)

stock IsHostage(pEntity)
{
        new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
        return equal(classname, "hostage_entity")
}

stock IsAlive(pEntity)
{
        if (pEntity < 1) return 0
        return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
}

stock CheckBack(iEnemy,id)
{
        new Float:anglea[3], Float:anglev[3]
        pev(iEnemy, pev_v_angle, anglea)
        pev(id, pev_v_angle, anglev)
        new Float:angle = anglea[1] - anglev[1]
        if (angle < -180.0) angle += 360.0
        if (angle <= 45.0 && angle >= -45.0) return 1
        return 0
}

stock CheckAngle(iAttacker, iVictim, Float:fAngle)  return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))

stock Float:Stock_CheckAngle(id,iTarget)
{
        new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
        Stock_Get_Origin(id, vId_ori)
        Stock_Get_Origin(iTarget, vTar_ori)
       
        pev(id,pev_angles,vId_ang)
        for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
       
        fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
       
        if (fLength<=0.0)
        {
                vOricross[0]=0.0
                vOricross[1]=0.0
        } else {
                vOricross[0]=vOricross[0]*(1.0/fLength)
                vOricross[1]=vOricross[1]*(1.0/fLength)
        }
       
        engfunc(EngFunc_MakeVectors,vId_ang)
        global_get(glb_v_forward,vForward)
       
        fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
        return fRad  //->  RAD 90' = 0.5rad
}

stock Stock_Get_Origin(id, Float:origin[3])
{
        new Float:maxs[3],Float:mins[3]
        if (pev(id, pev_solid) == SOLID_BSP)
        {
                pev(id,pev_maxs,maxs)
                pev(id,pev_mins,mins)
                origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
                origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
                origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
        } else pev(id, pev_origin, origin)
}

public Stock_Fake_KnockBack(id, iVic, Float:iKb)
{
        if(iVic > 32) return
       
        new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
        pev(id, pev_origin, vAttacker)
        pev(iVic, pev_origin, vVictim)
        vAttacker[2] = vVictim[2] = 0.0
        flags = pev(id, pev_flags)
       
        xs_vec_sub(vVictim, vAttacker, vVictim)
        new Float:fDistance
        fDistance = xs_vec_len(vVictim)
        xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
       
        pev(iVic, pev_velocity, vVelocity)
        xs_vec_mul_scalar(vVictim, iKb, vVictim)
        xs_vec_mul_scalar(vVictim, 50.0, vVictim)
        vVictim[2] = xs_vec_len(vVictim) * 0.15
       
        if(flags &~ FL_ONGROUND)
        {
                xs_vec_mul_scalar(vVictim, 1.2, vVictim)
                vVictim[2] *= 0.4
        }
        if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
}       

stock Float:Stock_Get_Body_Dmg(iBody)
{
        switch (iBody)
        {
                case HIT_GENERIC: return 0.75
                case 1: return 4.0
                case 2: return 1.0
                case 3: return 1.25
                case 4,5,6,7: return 0.75
                default: return 0.75
        }
        return 1.0
}

stock Stock_SakuraEffect(id, Float:vecOri[3])
{
        engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri)
        write_byte(TE_BLOODSPRITE)
        engfunc(EngFunc_WriteCoord,vecOri[0])
        engfunc(EngFunc_WriteCoord,vecOri[1])
        engfunc(EngFunc_WriteCoord,vecOri[2])
        write_short(ef_sakura[g_mode[id]?2:0])
        write_short(ef_sakura[g_mode[id]?3:1])
        write_byte(g_mode[id]?178:128)
        write_byte(random_num(2,3))
        message_end()
}

stock can_damage(id1, id2)
{
        if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
                return 1
               
        // Check team
        return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114))
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/


My modified version
Code:

/* Plugin generated by AMXX-Studio */
#pragma compress 1

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>

#define PLUGIN "CSO Dual Sword Phantom Slayer"
#define VERSION "1.1"
#define AUTHOR "Natasha aka Asdian"

#define CSW_DPS CSW_KNIFE
#define weapon_dps "weapon_knife"

#define v_model "models/v_dualsword.mdl"
#define p_model "models/p_dualsword_a.mdl"
#define p_model2 "models/p_dualsword_b.mdl"
#define spr_wpn        "knife_dualsword"

new const weapon_sound[][] =
{
        "weapons/dualsword_stab1.wav",                                // 0
        "weapons/dualsword_stab2.wav",                                // 1
        "weapons/dualsword_stab1_hit.wav",                        // 2
        "weapons/dualsword_stab2_hit.wav",                        // 3
        "weapons/katanad_hitwall.wav",                                // 4
       
        "weapons/dualsword_slash_1.wav",                        // 5
        "weapons/dualsword_slash_2.wav",                        // 6
        "weapons/dualsword_slash_3.wav",                        // 7
        "weapons/dualsword_slash_4.wav",                        // 8
        "weapons/dualsword_hit1.wav",                                // 9
        "weapons/dualsword_hit2.wav",                                // 10
        "weapons/dualsword_hit3.wav",                                // 11
        "weapons/dualsword_slash_4_1.wav",                        // 12
        "weapons/dualsword_slash_4_2.wav",                        // 13
        "weapons/dualsword_skill_end.wav",                        // 14
       
        "weapons/dualsword_fly1.wav",                                // 15
        "weapons/dualsword_fly2.wav",                                // 16
        "weapons/dualsword_fly3.wav",                                // 17
        "weapons/dualsword_fly4.wav",                                // 18
        "weapons/dualsword_fly5.wav",                                // 19
        "weapons/dualsword_skill_start.wav"
}

//Hit
#define        RESULT_HIT_NONE                        0
#define        RESULT_HIT_PLAYER                        1
#define        RESULT_HIT_WORLD                        2

enum _:WpnAnim
{
        ANIM_IDLEA = 0,
        ANIM_SLASH1,
        ANIM_SLASH2,
        ANIM_SLASH3,
        ANIM_SLASH4,
        ANIM_SLASHEND,
        ANIM_DRAWA,
        ANIM_IDLEB,
        ANIM_STAB1,
        ANIM_STAB2,
        ANIM_STABEND,
        ANIM_DRAWB
}

new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_soundmode[33]
new ef_sakura[4]
new Float:g_Sound[33]

new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range
new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range
new cvar_damage_special, cvar_special_range
new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr

public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
       
        register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
        register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
        register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
        register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1);

        register_think("dps_entytyd", "Fw_DPSEnt_Think")
       
        RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame")
        register_clcmd(spr_wpn, "hook_rb")
        register_clcmd("dualsword", "get_dps", ADMIN_RCON)
        register_clcmd("say", "buy_dps")
       
        cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0")
        cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0")
        cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0")
        cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0")
        cvar_slash_radius = register_cvar("dps_slashradius","150.0")
        cvar_slash_range = register_cvar("dps_slashrange","115.0")
       
        cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0")
        cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0")
        cvar_stab_radius = register_cvar("dps_stabradius","100.0")
        cvar_stab_range = register_cvar("dps_stabrange","190.0")
       
        cvar_damage_special = register_cvar("dps_specialdamage","95.0")
        cvar_special_range = register_cvar("dps_specialrange","120.0")
       
        cvar_knockback[0] = register_cvar("dps_slashknockback","0.0")
        cvar_knockback[1] = register_cvar("dps_stabknockback","0.0")
        cvar_knockback[2] = register_cvar("dps_specialknockback","0.0")
       
        cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "1")
        cvar_remove = register_cvar("dps_remove_onnewround", "1")
        cvar_spr = register_cvar("dps_enable_sprites", "0")
       
}

public plugin_precache()
{
        precache_model(v_model)
        precache_model(p_model)
        precache_model(p_model2)
       
        for(new i = 0; i < sizeof(weapon_sound); i++)
                precache_sound(weapon_sound[i])
       
        precache_model("models/dualswordfx.mdl")
        precache_model("models/dualsword_skill.mdl")
        precache_model("models/dualsword_skillfx1.mdl")
        precache_model("models/dualsword_skillfx2.mdl")
       
        ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr")
        ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr")
        ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr")
        ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr")
       
        new Txt[32]
        format(Txt, 31, "sprites/%s.txt", spr_wpn)
        engfunc(EngFunc_PrecacheGeneric, Txt)
}


public hook_rb(id)
{
        engclient_cmd(id, weapon_dps)
        return PLUGIN_HANDLED
}

public buy_dps(id)
{
        new said[32]
        read_argv(1,said,31);
        if(equali(said,"/sword"))
                get_dps(id)
}

public get_dps(id)
{
        if (!is_user_alive(id))
                return

        g_had_dps[id] = 1
        g_mode[id] = 0
        g_slashend[id] = 0
        g_check[id] = 0
        g_soundmode[id] = 0
       
        fm_give_item(id, weapon_dps)
       
        if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id)
        else engclient_cmd(id,weapon_dps)
}

public client_connect(id) remove_dps(id)
public client_disconnect(id) remove_dps(id)

public Event_NewRound()
{
        if(!get_pcvar_num(cvar_remove))
                return
       
        for(new i = 0; i < get_maxplayers(); i++)
                remove_dps(i)
}

public remove_dps(id)
{
        g_had_dps[id] = 0
        g_slashend[id] = 0
        g_check[id] = 0
       
        static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
        if(!pev_valid(iEnt)) return
       
        set_pev(iEnt, pev_iuser1, 0)
        set_pev(iEnt, pev_iuser2, 0)
        set_pev(iEnt, pev_iuser3, 0)
        set_pev(iEnt, pev_iuser4, 0)
        set_pev(iEnt, pev_fuser1, 0.0)
}

public Event_CurWeapon(id)
{
        if(!is_user_alive(id))
                return 1
        if(get_user_weapon(id) != CSW_DPS)
                return 1
        if(!g_had_dps[id])
                return 1
               
        set_pev(id, pev_viewmodel2, v_model)
        set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model)
       
        Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
       
        static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
        if(!pev_valid(iEnt)) return 1
       
        set_pev(iEnt, pev_iuser1, 0)
        set_pev(iEnt, pev_iuser2, 0)
        set_pev(iEnt, pev_iuser3, 0)
        set_pev(iEnt, pev_iuser4, 0)
        set_pev(iEnt, pev_fuser1, 0.0)
               
        g_slashend[id] = 0
        g_check[id] = 0
       
        set_pdata_float(id, 83, 0.23)
        set_pdata_float(iEnt, 46, 0.25);
        set_pdata_float(iEnt, 47, 0.25);
        set_pdata_float(iEnt, 48, 0.25);
       
        if(get_pcvar_num(cvar_spr))
        {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id)
                write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps)
                write_byte(-1)
                write_byte(-1)
                write_byte(-1)
                write_byte(-1)
                write_byte(2)
                write_byte(1)
                write_byte(CSW_DPS)
                write_byte(0)
                message_end()
        }
        return 0
}

public message_DeathMsg(msg_id, msg_dest, msg_ent)
{
        new szWeapon[64]
        get_msg_arg_string(4, szWeapon, charsmax(szWeapon))
       
        if (strcmp(szWeapon, "knife"))
                return PLUGIN_CONTINUE

        new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373)
        if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)])
                return PLUGIN_CONTINUE

        set_msg_arg_string(4, "dualsword")
        return PLUGIN_CONTINUE
}

public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
{
        if (!pev_valid(iEnt))
                return;
        if (pev(iEnt, pev_flags) & FL_KILLME)
                return;

        new classname[32];
        pev(iEnt, pev_classname, classname, 31);

        if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4))
        {
                if (iHost != pev(iEnt, pev_owner))
                        set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW));
        }
}

public Fw_DPSEnt_Think(iEnt)
{
        if(!pev_valid(iEnt))
                return
       
        new iOwner
        iOwner = pev(iEnt, pev_owner)
       
        if(!is_user_alive(iOwner) || !is_user_connected(iOwner))
        {
                remove_entity(iEnt)
                g_soundmode[iOwner] = 0
                return
        }
       
        if(!Get_Entity_Mode(iEnt))
        {
                new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3];
                iWpn = pev(iEnt, pev_iuser1)
                iState = pev(iWpn, pev_iuser4)
                Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin);
               
                pev(iOwner, pev_v_angle, vecAngle);
                vecAngle[0] = -vecAngle[0];
               
                set_pev(iEnt, pev_origin, vecOrigin);
                set_pev(iEnt, pev_angles, vecAngle);
               
                if(!iState || get_user_weapon(iOwner) != CSW_DPS)
                {
                        new Float:fRenderAmount;
                        pev(iEnt, pev_renderamt, fRenderAmount);

                        fRenderAmount -= 4.5;

                        if (fRenderAmount <= 5.0)
                        {
                                remove_entity(iEnt);
                                return;
                        }
                        set_pev(iEnt, pev_renderamt, fRenderAmount);
                }
        }
       
        if(Get_Entity_Mode(iEnt) == 1)
        {
                set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
       
                static Float:Origin[3]; pev(iOwner, pev_origin, Origin)
                Origin[2] -= 25.0
               
                Stock_Hook_Ent(iEnt, Origin, 0.01)
               
                if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner))
                {
                        set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
                        return
                }
                       
                set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0});
                set_pev(iEnt, pev_origin, Origin);
        }
       
        if(Get_Entity_Mode(iEnt) == 2)
        {
                new Float:vecOrigin[3]
                GetGunPosition(iOwner, vecOrigin);
               
                new Float:fOldOrigin[3];
                pev(iEnt, pev_oldorigin, fOldOrigin);
               
                new Float:vecNewOrigin[3];
                pev(iEnt, pev_origin, vecNewOrigin);
               
                new Float:vecfff[3];
                xs_vec_sub(vecOrigin, fOldOrigin, vecfff);
                xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin);
               
                set_pev(iEnt, pev_origin, vecNewOrigin);
                set_pev(iEnt, pev_oldorigin, vecOrigin);
               
                if (pev(iEnt, pev_iuser1) == 2)
                {
                        new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin);
                        if (fDist > 175.0 * 0.5)
                        {
                                remove_entity(iEnt);
                                return;
                        }
                }
               
                if(g_Sound[iOwner] < get_gametime())
                {
                        if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                        if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                        if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                        if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                       
                        g_soundmode[iOwner]++
                        if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0
                       
                        g_Sound[iOwner] = get_gametime()+0.088;
                }
        }
        set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
       
        if(Get_Entity_Mode(iEnt) == 2)
        {
                new Float:fTimeLast;
                pev(iEnt, pev_fuser1, fTimeLast);
               
                if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime())
                {
                        if (pev(iEnt, pev_iuser1) == 1)
                        {
                                new Float:fRenderAmount;
                                pev(iEnt, pev_renderamt, fRenderAmount);
                                fRenderAmount -= 7.5;
                               
                                if (fRenderAmount <= 5.0)
                                {
                                        remove_entity(iEnt);
                                        return;
                                }
                                set_pev(iEnt, pev_renderamt, fRenderAmount);
                        } else remove_entity(iEnt);
                       
                        g_soundmode[iOwner] = 0
                }
        }
}

public fw_Item_PostFrame(ent)
{
        new id = pev(ent, pev_owner)
       
        if(!is_user_connected(id))
                return HAM_IGNORED
        if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id])
                return HAM_IGNORED

        if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id]))
        {
                if(g_check[id] < 6) g_check[id] = 0
                set_pev(ent, pev_iuser3, 0)
                Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
                set_pdata_float(ent, 48, 4.03, 4)
        }
       
        new iButton = pev(id,pev_button)
        return AurezBotac(id, ent, iButton)
}

public AurezBotac(id, iEnt, iButton)
{
        new iState = pev(iEnt, pev_iuser3)
        new iState2 = pev(iEnt, pev_iuser2)
        new iSlash = pev(iEnt, pev_iuser4)
        new Float:fSound; pev(iEnt, pev_fuser1, fSound)
        new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range)
       
        if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2)
        {
                if(!iState || iState == 1)
                {
                        Set_WeaponAnim(id, ANIM_STABEND)
                        set_pev(iEnt, pev_iuser2, 0)
                        set_pdata_float(iEnt, 48, 1.45,4)
                }
        }
       
        if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id])
        {
                Set_WeaponAnim(id, ANIM_SLASHEND)
                set_pdata_float(iEnt, 48, 2.03,4)
                g_slashend[id] = 0
        }
       
        if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1))
        {
                new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius)
                new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState])
               
                new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]]))
                switch (iHitResult)
                {
                        case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2])
                        case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4])
                }
                set_pev(iEnt, pev_iuser1, 0);
        }
       
        if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4)
        {
                set_pev(iEnt, pev_iuser4, 1 + iSlash)
                Set_WeaponAnim(id, 1 + iSlash)
               
                set_pdata_float(id, 83, 0.06)
               
                if(!get_pcvar_num(cvar_fast_attack))
                        set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
               
                set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
                set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4);
                 
                set_pev(iEnt, pev_iuser1, 1)
                set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
                SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash])
                Create_Slash(id,iEnt,iSlash)
               
                if(iSlash == 3)
                {
                        g_slashend[id] = 1
                       
                        set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5))
                        set_pev(iEnt, pev_iuser4, 0)
                }
        }
       
        if(fSound && fSound < get_gametime())
        {
                SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12])
                set_pev(iEnt, pev_fuser1, 0.0)
               
                if(g_check[id] == 5)
                {
                        Set_WeaponAnim(id, 14)
                        SendSound(id,CHAN_ITEM,weapon_sound[20])
                        g_check[id] = 6
                       
                        set_pdata_float(iEnt, 46, 1.03,4)
                        set_pdata_float(iEnt, 47, 1.03,4)
                        set_pdata_float(iEnt, 48, 1.03,4)
                       
                        set_pev(iEnt, pev_fuser4, get_gametime()+1.7);
                        DPS_Special(id, 0, 2.0)
                }
        }
       
        if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0)
        {
                set_pdata_float(iEnt, 46, 11.36,4)
                set_pdata_float(iEnt, 47, 11.36,4)
                set_pdata_float(iEnt, 48, 11.36,4)
               
                g_check[id] = 7
                set_pev(iEnt, pev_fuser1, get_gametime() + 10.6)
                Set_WeaponAnim(id, 15)
        }
       
        // NANI?!
        if(g_check[id] == 7 && fSound && fSound < get_gametime())
        {
                SendSound(id,CHAN_VOICE,weapon_sound[14])
                set_pev(iEnt, pev_fuser1, 0.0)
                g_check[id] = 0
               
                DPS_Special(id, 1, 1.46)
        }
       
        DPS_RealSpecial(id, iEnt, fRange)
       
        if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0)
        {
                g_mode[id] = 0
                g_slashend[id] = 0
               
                set_pev(iEnt, pev_iuser2, 1)
                set_pev(iEnt, pev_iuser4, 0)
               
                switch(iState)
                {
                        case 0:
                        {
                                set_pdata_float(id, 83, 0.16)
                                set_pdata_float(iEnt, 46, 0.4,4);
                               
                                if(!get_pcvar_num(cvar_fast_attack))
                                        set_pdata_float(iEnt, 47, 0.4,4);
                                       
                                set_pdata_float(iEnt, 48, 1.0,4);
                               
                                set_pev(iEnt, pev_iuser1, 1)
                                set_pev(iEnt, pev_iuser3, 1)
                                set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
                               
                                Set_WeaponAnim(id, ANIM_STAB1)
                                SendSound(id, CHAN_WEAPON, weapon_sound[0])
                               
                                if(!g_check[id]) g_check[id] = 1
                                else if(g_check[id] == 2) g_check[id] = 3
                                else g_check[id] = 0
                        }
                        case 1:
                        {
                                set_pdata_float(id, 83, 0.16)
                                set_pdata_float(iEnt, 46, 0.83,4);
                               
                                if(!get_pcvar_num(cvar_fast_attack))
                                        set_pdata_float(iEnt, 47, 0.83,4);
                               
                                set_pdata_float(iEnt, 48, 1.5,4);
                               
                                set_pev(iEnt, pev_iuser1, 1)
                                set_pev(iEnt, pev_iuser3, 0)
                                set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
                               
                                Set_WeaponAnim(id, ANIM_STAB2)
                                SendSound(id, CHAN_WEAPON, weapon_sound[1])
                               
                                if(g_check[id] == 3) g_check[id] = 4
                                else g_check[id] = 0
                        }
                }
        }
       
        if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash)
        {
                g_mode[id] = 1
               
                set_pdata_float(id, 83, 0.04)
               
                if(!get_pcvar_num(cvar_fast_attack))
                        set_pdata_float(iEnt, 46, 0.13,4);
               
                set_pdata_float(iEnt, 47, 0.13,4);
                set_pdata_float(iEnt, 48, 0.5,4);
               
                set_pev(iEnt, pev_iuser1, 1)
                set_pev(iEnt, pev_iuser2, 0)
                set_pev(iEnt, pev_iuser3, 0)
                set_pev(iEnt, pev_iuser4, 1)
                set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
               
                Set_WeaponAnim(id, ANIM_SLASH1)
                SendSound(id, CHAN_WEAPON, weapon_sound[5])
               
                Create_Slash(id,iEnt,0)
               
                if(g_check[id] == 1) g_check[id] = 2
                else if(g_check[id] == 4) g_check[id] = 5
                else g_check[id] = 0
        }
       
        iButton &= ~IN_ATTACK;
        iButton &= ~IN_ATTACK2;
        set_pev(id, pev_button, iButton);
        return HAM_IGNORED
}

stock Create_Slash(id,iEnt,seq)
{
        new Float:vecOrigin[3], Float:vecAngle[3];
        GetGunPosition(id, vecOrigin);
        pev(id, pev_v_angle, vecAngle);
        vecAngle[0] = -vecAngle[0];
       
        new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
               
        // Set info for ent       
        Set_Entity_Mode(pEntity, 0)
        set_pev(pEntity, pev_scale, 0.1);
        set_pev(pEntity, pev_iuser1, iEnt);
        set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
        set_pev(pEntity, pev_angles, vecAngle);
        set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
}

stock DPS_Special(id, seq, Float:fTime)
{
        new Float:VecOrig[3], Float:VecAng[3]
        pev(id, pev_origin, VecOrig)
        pev(id, pev_angles, VecAng)
       
        new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
        set_pev(iEfx, pev_classname, "dps_entytyd");
        set_pev(iEfx, pev_origin, VecOrig)
        set_pev(iEfx, pev_frame, 0.0)
        set_pev(iEfx, pev_animtime, get_gametime())
        set_pev(iEfx, pev_framerate, 1.0)
        set_pev(iEfx, pev_sequence, seq)
        engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl")
        dllfunc(DLLFunc_Spawn, iEfx)
        Set_Entity_Mode(iEfx, 1)
        set_pev(iEfx, pev_angles, VecAng)
        set_pev(iEfx, pev_solid, SOLID_NOT)
        set_pev(iEfx, pev_owner, id)
        set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01});
        set_pev(iEfx, pev_fuser1, get_gametime() + fTime)
        set_pev(iEfx, pev_nextthink, get_gametime() + 0.01)
}

stock DPS_RealSpecial(id, iEnt, Float:fRange)
{
        new Float:fTimeEffect;
        pev(iEnt, pev_fuser4, fTimeEffect);
       
        if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime())
        {
                KnifeAttack_Global(id, false, get_pcvar_float(cvar_special_range)*2.0, 180.0, get_pcvar_float(cvar_damage_special), get_pcvar_float(cvar_knockback[2]))
                       
                new Float:vecOrigin3[2][3], Float:vecOrigin[3];
                pev(id, pev_origin, vecOrigin3[0]);
                pev(id, pev_origin, vecOrigin);
                xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
               
                new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85);
                vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0);
               
                switch (random(3))
                {
                        case 0:
                        {
                                vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
                               
                                vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
                        }
                        case 1:
                        {
                                vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
                               
                                vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
                        }
                        case 2:
                        {
                                vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
                               
                                vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
                        }
                        case 3:
                        {
                                vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
                               
                                vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
                                vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
                        }
                }
               
                if (random_num(0,9) > 8)
                {
                        new Float:vecAngle2[3];
                        vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0);
                        vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0);
                       
                        new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0)       
                        set_pev(pEntity, pev_angles, vecAngle2);
                        set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
                        set_pev(pEntity, pev_iuser1, 1);
                        set_pev(pEntity, pev_iuser2, iEnt);
                        set_pev(pEntity, pev_frame, 0.0);
                        Set_Entity_Mode(pEntity, 2)
                        set_pev(pEntity, pev_fuser1, get_gametime()+0.53);
                        set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
                        set_pev(pEntity, pev_fuser3, get_gametime()+0.31);
                        set_pev(pEntity, pev_oldorigin, vecOrigin);
                        set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
                }
               
                new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0)       
                set_pev(pEntity, pev_iuser1, 2);
                set_pev(pEntity, pev_iuser2, iEnt);
                Set_Entity_Mode(pEntity, 2)
                set_pev(pEntity, pev_frame, 0.0);
                set_pev(pEntity, pev_oldorigin, vecOrigin);
                set_pev(pEntity, pev_fuser1, get_gametime()+0.2);
                set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
                set_pev(pEntity, pev_fuser3, get_gametime()+0.3);
                set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
               
                set_pev(iEnt, pev_fuser4, get_gametime()+0.05);
        }
}

stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY)
{
        new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
               
        // Set info for ent       
        set_pev(pEntity, pev_movetype, move);
        set_pev(pEntity, pev_owner, id);
        engfunc(EngFunc_SetModel, pEntity, models);
        set_pev(pEntity, pev_classname, "dps_entytyd");
        set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0});
        set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0});
        set_pev(pEntity, pev_origin, Start);
        set_pev(pEntity, pev_gravity, 0.01);
        set_pev(pEntity, pev_solid, solid);
       
        static Float:Velocity[3];
        Stock_Get_Speed_Vector(Start, End, speed, Velocity);
        set_pev(pEntity, pev_velocity, Velocity);

        new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle);
        vector_to_angle(Velocity, vecVAngle)
       
        if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]);
        set_pev(pEntity, pev_angles, vecVAngle);
       
        set_pev(pEntity, pev_rendermode, kRenderTransAdd);
        set_pev(pEntity, pev_renderamt, 255.0);
        set_pev(pEntity, pev_sequence, seq)
        set_pev(pEntity, pev_animtime, get_gametime());
        set_pev(pEntity, pev_framerate, 1.0)
        return pEntity;
}

stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode)
stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)

stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
        xs_vec_sub(origin2, origin1, new_velocity)
        new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
        xs_vec_mul_scalar(new_velocity, num, new_velocity)
}
stock GetGunPosition(id, Float:vecSrc[3])
{
        new Float:vecViewOfs[3];
        pev(id, pev_origin, vecSrc);
        pev(id, pev_view_ofs, vecViewOfs);
        xs_vec_add(vecSrc, vecViewOfs, vecSrc);
}
stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
{
        new iHitResult
        if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
        else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)

        return iHitResult
}

stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
{
        new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
        GetGunPosition(id, vecSrc);

        pev(id, pev_v_angle, v_angle);
        engfunc(EngFunc_MakeVectors, v_angle);

        global_get(glb_v_forward, vecForward);
        xs_vec_mul_scalar(vecForward, flRange, vecForward);
        xs_vec_add(vecSrc, vecForward, vecEnd);

        new tr = create_tr2();
        engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);

        new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
        if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
       
        get_tr2(tr, TR_flFraction, flFraction);

        new iHitResult = RESULT_HIT_NONE;
       
        if (flFraction < 1.0)
        {
                new pEntity = get_tr2(tr, TR_pHit);
                iHitResult = RESULT_HIT_WORLD;
               
                if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
                {
                        if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
                                flDamage *= 1.0;

                        iHitResult = RESULT_HIT_PLAYER;
                }

                if (pev_valid(pEntity))
                {
                        engfunc(EngFunc_MakeVectors, v_angle);
                        global_get(glb_v_forward, vecForward);

                        if (iHitgroup != -1)
                                set_tr2(tr, TR_iHitgroup, iHitgroup);

                        ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
                        ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
                        Stock_Fake_KnockBack(id, pEntity, flKnockBack)
                       
                        if (IsAlive(pEntity))
                        {
                                free_tr2(tr);
                                return iHitResult;
                        }
                }
        }
        free_tr2(tr);
        return iHitResult;
}

stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
{
        new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
        pev(id, pev_origin, vecOrigin);

        new iHitResult = RESULT_HIT_NONE;
        GetGunPosition(id, vecSrc);

        pev(id, pev_v_angle, v_angle);
        engfunc(EngFunc_MakeVectors, v_angle);

        global_get(glb_v_forward, vecForward);
        xs_vec_mul_scalar(vecForward, flRange, vecForward);
        xs_vec_add(vecSrc, vecForward, vecEnd);

        new tr = create_tr2();
        engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
       
        new Float:EndPos2[3]
        get_tr2(tr, TR_vecEndPos, EndPos2)
       
        new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
        if (flFraction < 1.0)
        {
                iHitResult = RESULT_HIT_WORLD;
                if(bStab) Stock_SakuraEffect(id, EndPos2)
        }
       
        new Float:vecEndZ = vecEnd[2];
       
        new pEntity = -1;
        while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
        {
                if (!pev_valid(pEntity))
                        continue;
                if (id == pEntity)
                        continue;
                if (!IsAlive(pEntity))
                        continue;
                if (!CheckAngle(id, pEntity, fAngle))
                        continue;

                GetGunPosition(id, vecSrc);
                Stock_Get_Origin(pEntity, vecEnd);

                vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);

                xs_vec_sub(vecEnd, vecSrc, vecForward);
                xs_vec_normalize(vecForward, vecForward);
                xs_vec_mul_scalar(vecForward, flRange, vecForward);
                xs_vec_add(vecSrc, vecForward, vecEnd);

                engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
                get_tr2(tr, TR_flFraction, flFraction);

                if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
                get_tr2(tr, TR_flFraction, flFraction);

                if (flFraction < 1.0)
                {
                        if (IsPlayer(pEntity) || IsHostage(pEntity))
                        {
                                iHitResult = RESULT_HIT_PLAYER;
                                if(bStab) Stock_SakuraEffect(id, vecEnd)
                               
                                if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
                                        flDamage *= 1.0;
                        }

                        if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
                        {
                                engfunc(EngFunc_MakeVectors, v_angle);
                                global_get(glb_v_forward, vecForward);

                                if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);

                                ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
                                ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
                               
                                Stock_Fake_KnockBack(id, pEntity, flKnockBack)
                        }
                }
                free_tr2(tr);
        }
        return iHitResult;
}

stock Set_WeaponAnim(id, anim)
{
        set_pev(id, pev_weaponanim, anim)
       
        message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
        write_byte(anim)
        write_byte(pev(id, pev_body))
        message_end()
}

stock Stock_Set_Vis(iEnt, iVis = 1)
        set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW)

stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0)
{
        static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
        pev(ent, pev_origin, EntOrigin)
       
        if(!mode)
        {
                distance_f = get_distance_f(EntOrigin, TargetOrigin)
                fl_Time = distance_f / Speed
                       
                pev(ent, pev_velocity, fl_Velocity)
                       
                fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time
                fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time
                fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time

                if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity)
                else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01})
        } else {
                static Float:fl_EntVelocity[3], Float:fl_Acc[3]
                Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity)
                xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity)
               
                for(new i =0; i<3; i++)
                {
                        if(fl_Velocity[i] > fl_EntVelocity[i])
                        {
                                fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
                                fl_Acc[i] = floatmin(70.0, fl_Acc[i])
                                fl_EntVelocity[i] += fl_Acc[i]
                        }
                        else if(fl_Velocity[i] < fl_EntVelocity[i])
                        {
                                fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i]
                                fl_Acc[i] = floatmin(70.0, fl_Acc[i])
                                fl_EntVelocity[i] -= fl_Acc[i]
                        }
                }
                set_pev(ent, pev_velocity, fl_EntVelocity)
        }
}

stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3])
{       
        new Float:v3[3],i
        for(i=0;i<3;i++) v3[i]=start[i]-end[i]

        new Float:vl = vector_length(v3)
        for(i=0;i<3;i++) reOri[i] = v3[i] / vl
}

stock Stock_Get_Postion(id,Float:forw,Float:right,Float:up,Float:vStart[])
{
        static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
        pev(id, pev_origin, vOrigin)
        pev(id, pev_view_ofs,vUp)
        xs_vec_add(vOrigin,vUp,vOrigin)
        pev(id, pev_v_angle, vAngle)
       
        engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, vUp)
       
        vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
        vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
        vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}

stock IsPlayer(pEntity) return is_user_connected(pEntity)

stock IsHostage(pEntity)
{
        new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
        return equal(classname, "hostage_entity")
}

stock IsAlive(pEntity)
{
        if (pEntity < 1) return 0
        return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
}

stock CheckBack(iEnemy,id)
{
        new Float:anglea[3], Float:anglev[3]
        pev(iEnemy, pev_v_angle, anglea)
        pev(id, pev_v_angle, anglev)
        new Float:angle = anglea[1] - anglev[1]
        if (angle < -180.0) angle += 360.0
        if (angle <= 45.0 && angle >= -45.0) return 1
        return 0
}

stock CheckAngle(iAttacker, iVictim, Float:fAngle)  return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))

stock Float:Stock_CheckAngle(id,iTarget)
{
        new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
        Stock_Get_Origin(id, vId_ori)
        Stock_Get_Origin(iTarget, vTar_ori)
       
        pev(id,pev_angles,vId_ang)
        for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
       
        fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
       
        if (fLength<=0.0)
        {
                vOricross[0]=0.0
                vOricross[1]=0.0
        } else {
                vOricross[0]=vOricross[0]*(1.0/fLength)
                vOricross[1]=vOricross[1]*(1.0/fLength)
        }
       
        engfunc(EngFunc_MakeVectors,vId_ang)
        global_get(glb_v_forward,vForward)
       
        fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
        return fRad  //->  RAD 90' = 0.5rad
}

stock Stock_Get_Origin(id, Float:origin[3])
{
        new Float:maxs[3],Float:mins[3]
        if (pev(id, pev_solid) == SOLID_BSP)
        {
                pev(id,pev_maxs,maxs)
                pev(id,pev_mins,mins)
                origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
                origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
                origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
        } else pev(id, pev_origin, origin)
}

public Stock_Fake_KnockBack(id, iVic, Float:iKb)
{
        if(iVic > 32) return
       
        new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
        pev(id, pev_origin, vAttacker)
        pev(iVic, pev_origin, vVictim)
        vAttacker[2] = vVictim[2] = 0.0
        flags = pev(id, pev_flags)
       
        xs_vec_sub(vVictim, vAttacker, vVictim)
        new Float:fDistance
        fDistance = xs_vec_len(vVictim)
        xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
       
        pev(iVic, pev_velocity, vVelocity)
        xs_vec_mul_scalar(vVictim, iKb, vVictim)
        xs_vec_mul_scalar(vVictim, 50.0, vVictim)
        vVictim[2] = xs_vec_len(vVictim) * 0.15
       
        if(flags &~ FL_ONGROUND)
        {
                xs_vec_mul_scalar(vVictim, 1.2, vVictim)
                vVictim[2] *= 0.4
        }
        if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
}       

stock Float:Stock_Get_Body_Dmg(iBody)
{
        switch (iBody)
        {
                case HIT_GENERIC: return 0.75
                case 1: return 4.0
                case 2: return 1.0
                case 3: return 1.25
                case 4,5,6,7: return 0.75
                default: return 0.75
        }
        return 1.0
}

stock Stock_SakuraEffect(id, Float:vecOri[3])
{
        engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri)
        write_byte(TE_BLOODSPRITE)
        engfunc(EngFunc_WriteCoord,vecOri[0])
        engfunc(EngFunc_WriteCoord,vecOri[1])
        engfunc(EngFunc_WriteCoord,vecOri[2])
        write_short(ef_sakura[g_mode[id]?2:0])
        write_short(ef_sakura[g_mode[id]?3:1])
        write_byte(g_mode[id]?178:128)
        write_byte(random_num(2,3))
        message_end()
}

stock can_damage(id1, id2)
{
        if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
                return 1
               
        // Check team
        return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114))
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/


Any ideas?

thEsp 01-14-2019 07:22

Re: Plugin crashes on server, but works on local
 
If it crashes for others, Have you added files into the server?

Abiss32 01-22-2019 19:18

Re: Plugin crashes on server, but works on local
 
I had used this plugin and i think that the code has something to do with the crashes
also it may crash while you use special attack and switch to other weapon i have similar plugin of it but its too buggy too


All times are GMT -4. The time now is 13:03.

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