Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

RSSFix this plugins for linux


MYGO.pl
 Udostępnij

Rekomendowane odpowiedzi

  • RSSy
Hello, can someone fix this plugins and make it work for linux? it doesn't crash in HLDS windows. When i try to upload it on my linux server it crash.

Holy sword divine order:
PHP Code:

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>
#include <zp50_core>
#include <zp50_class_nemesis>
#include <crxknives>

#pragma compress 1

#define NAME     "[ZE] Knife: Holy Sword Divine Order"
#define VER        "1.0"
#define AUTHOR     "Asdian DX"

#define CSW_HOLYSWORD CSW_KNIFE
#define weapon_holysword "weapon_knife"

#define v_model "models/gcg_csze/v_holysword.mdl"
#define p_model "models/gcg_csze/p_holysword.mdl"
#define spr_wpn    "gcg_csze/knife_holysword"

#define anim_ext "knife"

new const weapon_sound[][] =
{
    
"weapons/holysword_slash1.wav",                // 0
    
"weapons/holysword_slash2.wav",                // 1
    
"weapons/holysword_slash3.wav",                // 2
    
"weapons/tomahawk_slash1_hit.wav",            // 3
    
"weapons/tomahawk_slash2_hit.wav",            // 4
    
"weapons/combatknife_wall.wav",                // 5
    
    // specials
    
"weapons/holysword_cannon.wav",    // 6
    
"weapons/holysword_cannon_exp.wav",    // 7
    
"weapons/holysword_charge_loop.wav",    // 8
    
"weapons/holysword_charge_slash.wav",    // 9
    
"weapons/holysword_paring_slash.wav",    // 10
    
"weapons/holysword_parryattack.wav"    // 11
    
}

new const 
entity_models[][] = 
{
    
"models/gcg_csze/ef_holysword_chargecannon.mdl",
    
"models/gcg_csze/ef_holysword_parryattack.mdl",
    
"models/gcg_csze/ef_holysword_parryattack2.mdl"
}

//SLASH
#define    SLASH_ANGLE            30.0
#define SLASH_DAMAGE            110.0
#define SLASH_RANGE            120.0
#define SLASH_KNOCKBACK         1.0    
    
//STACK
#define    STACK_ANGLE            40.0
#define STACK_DAMAGE            125.0
#define STACK_RANGE            150.0
#define STACK_KNOCKBACK         3.0        

//CHARGE
#define CHARGE_DAMAGE            90.0    
#define    CHARGE_RADIUS            10.0
#define CHARGE_KNOCKBACK         5.0                

//BLAST-DEF
#define BLAST_DAMAGE            400.0    
#define    BLAST_RADIUS            179.0
#define    BLAST_RANGE            120.0
#define BLAST_KNOCKBACK         15.0    
            
new const Float:AttackDamage_Mul[3] =  { 1.01.52.0 }
    
//Hit
#define    RESULT_HIT_NONE             0
#define    RESULT_HIT_PLAYER            1
#define    RESULT_HIT_WORLD            2

#define DMG_GIB_CORPSE (DMG_CRUSH | DMG_FALL | DMG_BLAST | DMG_SONIC)// | DMG_CLUB)
#define DMG_SHOWNHUD (DMG_POISON | DMG_ACID | DMG_FREEZE | DMG_SLOWFREEZE | DMG_DROWN | DMG_BURN | DMG_SLOWBURN | DMG_NERVEGAS | DMG_RADIATION | DMG_SHOCK)
#define DMG_ALL (DMG_GIB_CORPSE | DMG_SHOWNHUD)

enum _:iAnim
{
    
ANIM_IDLE 0,
    
ANIM_DRAW,
    
ANIM_SLASH1,
    
ANIM_SLASH2,
    
ANIM_SLASH3,
    
ANIM_SLASH_CHARGE,
    
ANIM_CHARGE_START,
    
ANIM_CHARGE_LOOP,
    
ANIM_CHARGE_SLASH1,
    
ANIM_CHARGE_SLASH2,
    
ANIM_PARING,
    
ANIM_PARING_SLASH1,
    
ANIM_PARING_SLASH2
}

new 
g_had_holysword[33], g_isStack[33], Float:g_fTimer[33], g_isDef[33]
new 
spr_blood_sprayspr_blood_dropspr1spr2szAnimation[64]

new const 
ATTRIBUTE_BONUS_XP[] = "HOLYSWORD"

public plugin_init() 
{
    
register_plugin(NAMEVERAUTHOR)
    
    
register_event("CurWeapon""Event_CurWeapon""be""1=1")
    
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
    
register_forward(FM_ClientCommand "Fw_ClientCommand")

    
register_event("HLTV""event_newround""a""1=0""2=0")
    
    
RegisterHam(Ham_Item_PostFrameweapon_holysword"fw_Item_PostFrame")
    
RegisterHam(Ham_Think"info_target""fw_MF_Think")
    
RegisterHam(Ham_Touch"info_target""fw_HS_Touch")
    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
    
    
register_clcmd(spr_wpn"hook_hs")
}

public 
plugin_precache()
{
    
precache_model(v_model)
    
precache_model(p_model)
    
    new 
i
    
for(0sizeof(weapon_sound); i++) precache_sound(weapon_sound[i])
    for(
0sizeof(entity_models); i++) precache_model(entity_models[i])
    
    
spr1 precache_model("sprites/gcg_csze/muzzleflash65.spr")
    
spr2 precache_model("sprites/gcg_csze/muzzleflash78.spr")
    
    
spr_blood_spray precache_model("sprites/bloodspray.spr")
    
spr_blood_drop precache_model("sprites/blood.spr")
    
    new 
Txt[64]
    
format(Txt63"sprites/%s.txt"spr_wpn)
    
engfunc(EngFunc_PrecacheGenericTxt)
}

public 
hook_hs(id)
{
    
engclient_cmd(idweapon_holysword)
    return 
PLUGIN_HANDLED
}

public 
zp_fw_core_infect_post(idremove_hsword(id)

public 
crxknives_knife_updated(idiKnifebool:bOnConnect)
{
    static 
iValue
    
    
if(crxknives_get_attribute_int(idATTRIBUTE_BONUS_XPiValue) && iValue == 1)
    {
        
g_had_holysword[id] = 1
    
}
    else
    {
        
g_had_holysword[id] = 0
    
}
}

public 
zp_fw_core_cure_post(idcrxknives_get_attribute_int(idATTRIBUTE_BONUS_XPg_had_holysword[id])

public 
event_newround()
{
    new 
iPlayers[32], iPnumiPlayer
    
for(new 0iPnumi++)
    {
        
iPlayer iPlayers[i]
        
crxknives_get_attribute_int(iPlayerATTRIBUTE_BONUS_XPg_had_holysword[iPlayer])
    }
}

public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if (!
is_user_alive(attacker))
        return 
HAM_IGNORED;
    
    if (
g_isDef[victim] && !(damage_type DMG_ALL))
    {
        if (
g_isDef[victim] == 1)
        {
            
g_isDef[victim] = 2
            
return HAM_SUPERCEDE
        
}
        return 
HAM_SUPERCEDE
    
}
    return 
HAM_IGNORED
}

public 
Fw_ClientCommand(id)
{
    new 
sCmd[32]
    
read_argv(0,sCmd,31)
    
    if(
equal(sCmd,"lastinv") || equal(sCmd,"weapon_",7))
        if(
g_isDef[id]) return FMRES_SUPERCEDE
    
    
return FMRES_IGNORED
}

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

    
g_had_holysword[id] = 1
    g_isStack
[id] = 0
    g_isDef
[id] = 0
    
    
if (get_user_weapon(id) == CSW_HOLYSWORDEvent_CurWeapon(id)
    else 
engclient_cmd(id,weapon_holysword)
    
    
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("WeaponList"), _id)
    
write_string(g_had_holysword[id] == spr_wpn weapon_holysword)
    
write_byte(-1)
    
write_byte(-1)
    
write_byte(-1)
    
write_byte(-1)
    
write_byte(2)
    
write_byte(1)
    
write_byte(CSW_HOLYSWORD)
    
write_byte(0)
    
message_end()
}

public 
remove_hsword(id)
{
    
g_had_holysword[id] = 0
}

public 
Event_CurWeapon(id)
{
    if(!
is_user_alive(id))
        return 
PLUGIN_HANDLED
    
if(get_user_weapon(id) != CSW_HOLYSWORD)
        return 
PLUGIN_HANDLED
    
if(!g_had_holysword[id])
        return 
PLUGIN_HANDLED
        
    
new IsSpec = (g_isStack[id] == 5)
    
set_pev(idpev_viewmodel2v_model)
    
set_pev(idpev_weaponmodel2p_model)
    
    
Set_WeaponAnim(idIsSpec?ANIM_DRAW+13:ANIM_DRAW)
    
    static 
iEntiEnt fm_get_user_weapon_entity(idCSW_HOLYSWORD)
    if(!
pev_valid(iEnt)) return 1
    
    set_pdata_float
(id831.0)
    
set_pdata_float(iEnt461.03);
    
set_pdata_float(iEnt471.03);
    
set_pdata_float(iEnt481.03);
    
    
g_isDef[id] = 0
    set_pev
(iEntpev_iuser10)
    
set_pev(iEntpev_iuser20)
    
set_pev(iEntpev_iuser30)
    
set_pev(iEntpev_iuser40)
    return 
PLUGIN_CONTINUE
}

public 
message_DeathMsg(msg_idmsg_destmsg_ent)
{
    new 
szWeapon[64]
    
get_msg_arg_string(4szWeaponcharsmax(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(iEntity434) != CSW_HOLYSWORD || !g_had_holysword[get_msg_arg_int(1)])
        return 
PLUGIN_CONTINUE

    set_msg_arg_string
(4"holysword")
    return 
PLUGIN_CONTINUE
}

public 
fw_Item_PostFrame(ent)
{
    new 
id pev(entpev_owner)
    
    if(!
is_user_connected(id))
        return 
HAM_IGNORED
    
if(get_user_weapon(id) != CSW_HOLYSWORD || !g_had_holysword[id])
        return 
HAM_IGNORED

    
new iButton pev(id,pev_button)
    new 
IsSpec = (g_isStack[id] == 5)
    
    if (
get_pdata_float(ent484) <= 0.0)
    {
        if(
g_isDef[id] == 1g_isDef[id] = 0
        set_pev
(entpev_iuser40)
        
set_pev(idpev_bodyIsSpec)
        
        
Set_WeaponAnim(idIsSpec?ANIM_IDLE+13:ANIM_IDLE)
        
set_pdata_float(ent488.06,4);
    }
    
    return 
AurezLegendOfBotac(identiButton)
}

public 
Float:DmgAdjust(IsSpec,iSlash,iType)
{
    if(!
iType) return (IsSpec)?STACK_ANGLE:SLASH_ANGLE
    
else if(iType == 1) return (IsSpec?STACK_DAMAGE:SLASH_DAMAGE) * AttackDamage_Mul[iSlash]
    else if(
iType == 2) return (IsSpec)?STACK_KNOCKBACK:SLASH_KNOCKBACK
    
else if(iType == 3) return (IsSpec)?STACK_RANGE:SLASH_RANGE
    
return 1.0
}

public 
AurezLegendOfBotac(idiEntiButton)
{
    new 
bStab2 pev(iEntpev_iuser2);
    new 
iState pev(iEntpev_iuser3)
    new 
iHold pev(iEntpev_iuser4)
    new 
IsSpec = (g_isStack[id] == 5)
    new 
Float:flCheckpev(iEntpev_fuser1flCheck)
    
    if(
g_isDef[id] == 2)
    {
        
Set_WeaponAnim(id, !IsSpec?ANIM_PARING_SLASH1:ANIM_PARING_SLASH1+13)
        
g_isDef[id] = 3
        
        Gunkata_Blast
(idIsSpec)
        
SendSound(idCHAN_WEAPONweapon_sound[11])
        
client_cmd(id"spk %s"weapon_sound[10])
        
        
set_pdata_float(id830.5)
        
set_pdata_float(iEnt462.03,4);
        
set_pdata_float(iEnt472.03,4);
        
set_pdata_float(iEnt482.03,4);
    }

    if(
get_pdata_float(id83) <= 0.0 && g_isDef[id] == 3
    {
        
KnifeAttack2(idIsSpecBLAST_RANGEBLAST_RADIUSBLAST_DAMAGEBLAST_KNOCKBACK)
        
        
g_isDef[id] = 4
        
if(IsSpecg_isStack[id] = 0
        set_pev
(iEntpev_fuser1get_gametime() + 2.03)
    }
    
    if(
pev(iEntpev_fuser1) < get_gametime() && g_isDef[id] == 4)
    {
        
set_pev(iEntpev_iuser40)
        
g_isDef[id] = 0
    
}
    
    if (!(
iButton IN_ATTACK))
    {
        if (
iState == 2)
        {
            
set_pdata_float(id830.7)
            
set_pdata_float(iEnt461.7,4);
            
set_pdata_float(iEnt471.7,4);
            
set_pdata_float(iEnt481.7,4);

            
//client_print(id, print_center, "Play player knife sequence")
            //formatex(szAnimation, charsmax(szAnimation), pev(id, pev_flags) & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", anim_ext)
            //UTIL_PlayerAnimation(id, szAnimation)
            
Set_WeaponAnim(idIsSpec?ANIM_CHARGE_SLASH1+13:ANIM_CHARGE_SLASH1)
            
SendSound(idCHAN_WEAPONweapon_sound[9])
            
g_isStack[id] = 6
            
            set_pev
(iEntpev_iuser11)
            
set_pev(iEntpev_iuser20)
            
set_pev(iEntpev_iuser30)
            
set_pev(iEntpev_iuser40)
            
            
set_pev(iEntpev_fuser4get_gametime() + get_pdata_float(id83))
        }
        
        if (
iState 2)
        {
            if(
g_fTimer[id] < get_gametime() && bStab2)
            {
                
//UTIL_PlayerAnimation(id, szAnimation)
                
Set_WeaponAnim(idANIM_SLASH_CHARGE)
                
set_pdata_float(iEnt481.36,4);
                
                
set_pev(iEntpev_iuser20)
            }
            
set_pev(iEntpev_iuser30)
        }
    }
    
    if (
get_pdata_float(id83) <= 0.0 && pev(iEntpev_iuser1) && !g_isDef[id])
    {
        
// range angle dmg knockback
        
new iHitResult
        iHitResult 
KnifeAttack_Global(idIsSpecDmgAdjust(IsSpec,iHold,3),DmgAdjust(IsSpec,iHold,0),DmgAdjust(IsSpec,iHold,1),DmgAdjust(IsSpec,iHold,2))
        
        switch (
iHitResult)
        {
            case 
RESULT_HIT_PLAYER SendSound(idCHAN_VOICEweapon_sound[random_num(34)])
            case 
RESULT_HIT_WORLD SendSound(idCHAN_VOICEweapon_sound[5])
        }
        
        new 
Float:vecSrc[3], Float:vecEnd[3], Float:vecForward[3];
        
GetGunPosition(idvecSrc);

        
global_get(glb_v_forwardvecForward);
        
xs_vec_mul_scalar(vecForwardDmgAdjust(IsSpec,iHold,3), vecForward);
        
xs_vec_add(vecSrcvecForwardvecEnd);

        new 
tr create_tr2();
        
engfunc(EngFunc_TraceLinevecSrcvecEnd0idtr);

        new 
Float:EndPos2[3]
        
get_tr2(trTR_vecEndPosEndPos2)
        
        if(
iHitResult != RESULT_HIT_NONE)
        {
            new 
Float:iVicOrig[3], pEntity = -1;
            new 
Float:realOrig[3]; pev(idpev_originrealOrig)
            
            if(
iHitResult == RESULT_HIT_PLAYER)
            {
                while ((
pEntity engfunc(EngFunc_FindEntityInSpherepEntityrealOrigDmgAdjust(IsSpec,iHold,3))) != 0)
                {
                    if (!
pev_valid(pEntity))
                        continue;
                    if (
id == pEntity)
                        continue;
                    if (!
IsAlive(pEntity))
                        continue;
                    if (!
CheckAngle(idpEntityDmgAdjust(IsSpec,iHold,0)))
                        continue;    
                    
                    if(
g_isStack[id] < && can_damage(idpEntity))
                    {
                        if(
g_isStack[id] < 5)
                        {
                            
g_isStack[id]++ 
                            if(
g_isStack[id] == 5set_pev(iEntpev_iuser21)
                        } else 
g_isStack[id] = 5
                    
}
                    
                    
Stock_Get_Origin(pEntityiVicOrig);
                    
                    
iVicOrig[2] -= 15.0
                    Make_EffSprite
(iVicOrig,0)
                }
            } else 
Make_EffSprite(EndPos2,(g_isStack[id] == 6))
        } 
            
        if(
iHold == 2iHold 0
        
else iHold += 1
        
        
if(g_isStack[id] == 6)
        {
            
MakeMuzzleFlash(id)
            
g_isStack[id] = 0
            iHold 
0
        
}
        
        
set_pev(iEntpev_iuser10);
        
set_pev(iEntpev_iuser4iHold)
    }
    
    if(
get_pdata_float(iEnt464) > 0.0)
        return 
HAM_IGNORED
    
    
if(iButton IN_ATTACK)
    {
        switch(
iState)
        {
            case 
0:
            {
                if(
iHold == 1)
                {
                    
set_pdata_float(id830.16)
                    
set_pdata_float(iEnt460.66,4);
                    
set_pdata_float(iEnt470.66,4);
                    
set_pdata_float(iEnt482.03,4);
                    
                    
//client_print(id, print_center, "Play player knife sequence slash 2")
                    
formatex(szAnimationcharsmax(szAnimation), pev(idpev_flags) & FL_DUCKING "crouch_shoot_%s" "ref_shoot_%s"anim_ext)
                    
UTIL_PlayerAnimation(idszAnimation)
                    
Set_WeaponAnim(id, !IsSpec?ANIM_SLASH2:ANIM_SLASH2+13)
                    
g_fTimer[id] = get_gametime() + 0.66
                
} else {
                    
set_pdata_float(id830.3)
                    
set_pdata_float(iEnt460.76,4);
                    
set_pdata_float(iEnt470.76,4);
                    
set_pdata_float(iEnt482.03,4);
                    
                    
//client_print(id, print_center, "Play player knife sequence slash 1 & 3")
                    
formatex(szAnimationcharsmax(szAnimation), pev(idpev_flags) & FL_DUCKING "crouch_shoot_%s" "ref_shoot_%s"anim_ext)
                    
UTIL_PlayerAnimation(idszAnimation)
                    
Set_WeaponAnim(id, !IsSpec?(!iHold?ANIM_SLASH1:ANIM_SLASH3):(!iHold?ANIM_SLASH1+13:ANIM_SLASH3+13))
                    
g_fTimer[id] = get_gametime() + 0.76
                
}
                
SendSound(idCHAN_WEAPONweapon_sound[random(2)])
                
                
set_pev(iEntpev_iuser11)
                
set_pev(iEntpev_iuser31)
                
set_pev(iEntpev_fuser4get_gametime() + get_pdata_float(id83))
            }

            case 
1:
            {
                
set_pdata_float(iEnt460.7,4);
                
set_pdata_float(iEnt470.7,4);
                
set_pdata_float(iEnt480.7,4);
        
                
Set_WeaponAnim(id, !IsSpec?ANIM_CHARGE_START:ANIM_CHARGE_START+12)
                
set_pev(iEntpev_iuser32)
            }

            case 
2:
            {
                
set_pdata_float(iEnt461.7,4);
                
set_pdata_float(iEnt471.7,4);
                
set_pdata_float(iEnt481.7,4);
                
                
Set_WeaponAnim(id, !IsSpec?ANIM_CHARGE_LOOP:ANIM_CHARGE_LOOP+12)
                
SendSound(idCHAN_WEAPONweapon_sound[8])
            }
        }
    }

    if(
iButton IN_ATTACK2)
    {
        
set_pdata_float(iEnt463.03,4);
        
set_pdata_float(iEnt473.03,4);
        
set_pdata_float(iEnt483.03,4);
        
        
g_isDef[id] = 1
        Set_WeaponAnim
(id, !IsSpec?ANIM_PARING:ANIM_PARING+12)
    }
    
    
iButton &= ~IN_ATTACK;
    
iButton &= ~IN_ATTACK2;
    
set_pev(idpev_buttoniButton);
    return 
HAM_IGNORED
}

public 
fw_MF_Think(iEnt)
{
    if(!
pev_valid(iEnt))
        return
    
    static 
Classname[32], iOwneriStat
    pev
(iEntpev_classnameClassnamesizeof(Classname))
    
iOwner pev(iEntpev_owner)
    
iStat pev(iEntpev_iuser1)
    
    if(
equal(Classname"hsword_special"))
    {
        if(!
iStat)
        {
            if(
entity_range(iEntiOwner) > 600.0)
            {
                
mleduk(iEntiOwner)
                
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME)
                return;
            }
            
set_pev(iEntpev_nextthinkget_gametime() + 0.01)
        } else if(
iStat == 1set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME)
    }
}

public 
fw_HS_Touch(iPtr,iPtd)
{
    if(!
pev_valid(iPtr))
        return
    
    static 
Classname[32], iOwner
    pev
(iPtrpev_classnameClassnamesizeof(Classname))
    
iOwner pev(iPtrpev_owner)
    
    new 
Float:fOrigin[3]
    
pev(iPtrpev_originfOrigin)
    
    if(
equal(Classname"hsword_special"))
    {
        if(!
iPtd || !is_user_alive(iPtd)) 
        {
            
mleduk(iPtriOwner)
            
set_pev(iPtrpev_flagspev(iPtrpev_flags) | FL_KILLME)
        } else if(
IsPlayer(iPtd))
        {
            if(
iPtd == iOwner) return
            
            new 
pEntity = -1;
            while ((
pEntity engfunc(EngFunc_FindEntityInSpherepEntityfOrigin30.0)) != 0)
            {
                if (!
pev_valid(pEntity))
                    continue;
                if (
iOwner == pEntity)
                    continue;
                if (!
IsAlive(pEntity))
                    continue;
                if (!
CheckAngle(iOwnerpEntity179.0))
                    continue;
                    
                
mleduk(iPtriOwner)
            }
        }
        
set_pev(iPtrpev_nextthinkget_gametime() + 0.01)
    }
}

public 
mleduk(iPtriOwner)
{
    new 
Float:fOrigin[3]
    
pev(iPtrpev_originfOrigin)
    
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYfOrigin0)
    
write_byte(TE_EXPLOSION)
    
engfunc(EngFunc_WriteCoordfOrigin[0])
    
engfunc(EngFunc_WriteCoordfOrigin[1])
    
engfunc(EngFunc_WriteCoordfOrigin[2])
    
write_short(spr1
    
write_byte(6)
    
write_byte(15)
    
write_byte(TE_EXPLFLAG_NODLIGHTS TE_EXPLFLAG_NOPARTICLES TE_EXPLFLAG_NOSOUND)
    
message_end()
    
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYfOrigin0)
    
write_byte(TE_EXPLOSION)
    
engfunc(EngFunc_WriteCoordfOrigin[0])
    
engfunc(EngFunc_WriteCoordfOrigin[1])
    
engfunc(EngFunc_WriteCoordfOrigin[2])
    
write_short(spr2
    
write_byte(9)
    
write_byte(15)
    
write_byte(TE_EXPLFLAG_NODLIGHTS TE_EXPLFLAG_NOPARTICLES TE_EXPLFLAG_NOSOUND)
    
message_end()
    
    
SendSound(iPtrCHAN_VOICEweapon_sound[7])
    
Stock_RadiusDamage(fOriginiPtriOwnerCHARGE_DAMAGECHARGE_RADIUSCHARGE_KNOCKBACK, (1<<24))
}

stock Gunkata_Blast(idIsSpec)
{
    new 
Float:origin[3]
    
pev(idpev_originorigin)

    
origin[2] -= 15.0
    
    
new pEntity engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"))
    
set_pev(pEntitypev_movetypeMOVETYPE_NONE);
    
set_pev(pEntitypev_ownerid);
    
engfunc(EngFunc_SetModelpEntityentity_models[1+IsSpec]);
    
set_pev(pEntitypev_classname"hsword_special");
    
set_pev(pEntitypev_solidSOLID_NOT);
    
set_pev(pEntitypev_iuser11)
    
set_pev(pEntitypev_originorigin)
    
set_pev(pEntitypev_frame0.0)
    
set_pev(pEntitypev_animtimeget_gametime())
    
set_pev(pEntitypev_framerate1.0)
    
set_pev(pEntitypev_sequence1)
    
engfunc(EngFunc_SetSizepEntityFloat:{-1.0, -1.0, -1.0}, Float:{1.01.01.0})
    
dllfunc(DLLFunc_SpawnpEntity)
    
set_pev(pEntitypev_scale1.0);
    
    
set_pev(pEntitypev_nextthinkget_gametime() + 0.55)
}

public 
MakeMuzzleFlash(id)
{
    static 
Float:vAvel[3],Float:targetOri[3], Float:vAngle[3], Float:vVelocity[3],Float:fOrigin2[3], Float:vPlayerVelocity[3];
    
pev(idpev_originfOrigin2)
    
pev(idpev_v_anglevAngle)
    
pev(idpev_velocityvPlayerVelocity);
    
fm_get_aim_origin(idtargetOri)
    
    new 
iFlame engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"))
    
Stock_GetSpeedVector(fOrigin2targetOri1050.0vVelocity);
    
xs_vec_add(vVelocityvPlayerVelocityvVelocity);
    
    
vector_to_angle(vVelocityvAngle)
    if(
vAngle[0] > 90.0vAngle[0] = -(360.0 vAngle[0]);
    
    
dllfunc(DLLFunc_SpawniFlame)
    
set_pev(iFlamepev_classname"hsword_special")
    
set_pev(iFlamepev_animtimeget_gametime())
    
set_pev(iFlamepev_framerate1.0)
    
set_pev(iFlame ,pev_anglesvAngle)
    
set_pev(iFlamepev_movetypeMOVETYPE_FLY)        
    
set_pev(iFlamepev_frame1.0)
    
set_pev(iFlamepev_scale1.5)
    
set_pev(iFlamepev_rendermodekRenderTransAdd)
    
set_pev(iFlamepev_renderamt255.0)
    
engfunc(EngFunc_SetModeliFlameentity_models[0])
    
engfunc(EngFunc_SetSizeiFlame, {2.0,2.0,2.0}, {2.0,2.0,2.0})
    
set_pev(iFlamepev_originfOrigin2)
    
set_pev(iFlamepev_iuser10)
    
    
vAvel[2] = random_float(-200.0200.0)
    
set_pev(iFlamepev_avelocityvAvel)
    
set_pev(iFlamepev_velocityvVelocity)
    
set_pev(iFlamepev_solidSOLID_TRIGGER)
    
set_pev(iFlamepev_ownerid)
    
set_pev(iFlamepev_nextthinkget_gametime() + 0.01)
    
    
client_cmd(id"spk %s"weapon_sound[6])
}

stock Stock_GetSpeedVector(const Float:origin1[3], const Float:origin2[3], Float:speedFloat:new_velocity[3])
{
    
xs_vec_sub(origin2origin1new_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_velocitynumnew_velocity)
}
stock Stock_Get_Velocity_Angle(entityFloat:output[3])
{
    static 
Float:velocity[3]
    
pev(entitypev_velocityvelocity)
    
vector_to_angle(velocityoutput)
    if( 
output[0] > 90.0 output[0] = -(360.0 output[0])
}

stock SendSound(idchansample[]) emit_sound(idchansampleVOL_NORMATTN_NORM0PITCH_NORM)

stock KnifeAttack_Global(idbStabFloat:flRangeFloat:fAngleFloat:flDamageFloat:flKnockBack)
{
    new 
iHitResult
    
if(fAngle 0.0iHitResult KnifeAttack2(idbStabFloat:flRangeFloat:fAngleFloat:flDamageFloat:flKnockBack)
    else 
iHitResult KnifeAttack(idbStabFloat:flRangeFloat:flDamageFloat:flKnockBack)

    return 
iHitResult
}

stock KnifeAttack(idbStabFloat:flRangeFloat:flDamageFloat:flKnockBackiHitgroup = -1bitsDamageType DMG_NEVERGIB DMG_CLUB)
{
    new 
Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
    
GetGunPosition(idvecSrc);

    
pev(idpev_v_anglev_angle);
    
engfunc(EngFunc_MakeVectorsv_angle);

    
global_get(glb_v_forwardvecForward);
    
xs_vec_mul_scalar(vecForwardflRangevecForward);
    
xs_vec_add(vecSrcvecForwardvecEnd);

    new 
tr create_tr2();
    
engfunc(EngFunc_TraceLinevecSrcvecEnd0idtr);

    new 
Float:flFractionget_tr2(trTR_flFractionflFraction);
    if (
flFraction >= 1.0engfunc(EngFunc_TraceHullvecSrcvecEnd03idtr);
    
    
get_tr2(trTR_flFractionflFraction);

    new 
Float:EndPos2[3]
    
get_tr2(trTR_vecEndPosEndPos2)
    
    new 
iHitResult RESULT_HIT_NONE;
    
    if (
flFraction 1.0)
    {
        new 
pEntity get_tr2(trTR_pHit);
        
iHitResult RESULT_HIT_WORLD;
        
        if (
pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
        {
            if (
CheckBack(idpEntity) && bStab && iHitgroup == -1)
                
flDamage *= 3.0;

            
iHitResult RESULT_HIT_PLAYER;
        }

        if (
pev_valid(pEntity) && id != pEntity)
        {
            
engfunc(EngFunc_MakeVectorsv_angle);
            
global_get(glb_v_forwardvecForward);

            if (
iHitgroup != -1)
                
set_tr2(trTR_iHitgroupiHitgroup);

            
ExecuteHamB(Ham_TraceAttackpEntityidflDamagevecForwardtrbitsDamageType);
            
ExecuteHamB(Ham_TakeDamagepEntityididflDamagebitsDamageType);
            
Stock_Fake_KnockBack(idpEntityflKnockBack)
            
            if (
IsAlive(pEntity))
            {
                
free_tr2(tr);
                return 
iHitResult;
            }
        }
    }
    
free_tr2(tr);
    return 
iHitResult;
}

stock KnifeAttack2(idbStabFloat:flRangeFloat:fAngleFloat:flDamageFloat:flKnockBackiHitgroup = -1bNoTraceCheck 0)
{
    new 
Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
    
pev(idpev_originvecOrigin);

    new 
iHitResult RESULT_HIT_NONE;
    
GetGunPosition(idvecSrc);

    
pev(idpev_v_anglev_angle);
    
engfunc(EngFunc_MakeVectorsv_angle);

    
global_get(glb_v_forwardvecForward);
    
xs_vec_mul_scalar(vecForwardflRangevecForward);
    
xs_vec_add(vecSrcvecForwardvecEnd);

    new 
tr create_tr2();
    
engfunc(EngFunc_TraceLinevecSrcvecEnd0idtr);
    
    new 
Float:EndPos2[3]
    
get_tr2(trTR_vecEndPosEndPos2)
    
    new 
Float:flFractionget_tr2(trTR_flFractionflFraction);
    if (
flFraction 1.0iHitResult RESULT_HIT_WORLD;
    
    new 
Float:vecEndZ vecEnd[2];
    
    new 
pEntity = -1;
    while ((
pEntity engfunc(EngFunc_FindEntityInSpherepEntityvecOriginflRange)) != 0)
    {
        if (!
pev_valid(pEntity))
            continue;
        if (
id == pEntity)
            continue;
        if (!
IsAlive(pEntity))
            continue;
        if (!
CheckAngle(idpEntityfAngle))
            continue;
            
        
GetGunPosition(idvecSrc);
        
Stock_Get_Origin(pEntityvecEnd);
        
        
vecEnd[2] = vecSrc[2] + (vecEndZ vecSrc[2]) * (get_distance_f(vecSrcvecEnd) / flRange);

        
xs_vec_sub(vecEndvecSrcvecForward);
        
xs_vec_normalize(vecForwardvecForward);
        
xs_vec_mul_scalar(vecForwardflRangevecForward);
        
xs_vec_add(vecSrcvecForwardvecEnd);

        
engfunc(EngFunc_TraceLinevecSrcvecEnd0idtr);
        
get_tr2(trTR_flFractionflFraction);

        if (
flFraction >= 1.0engfunc(EngFunc_TraceHullvecSrcvecEnd03idtr);

        
get_tr2(trTR_flFractionflFraction);
        
        if (
flFraction 1.0)
        {
            if (
IsPlayer(pEntity) || IsHostage(pEntity))
            {
                
iHitResult RESULT_HIT_PLAYER;
                
                if (
CheckBack(idpEntity) && bStab && iHitgroup == -1)
                    
flDamage *= 3.0;
            }

            if (
get_tr2(trTR_pHit) == pEntity || bNoTraceCheck)
            {
                
engfunc(EngFunc_MakeVectorsv_angle);
                
global_get(glb_v_forwardvecForward);

                if (
iHitgroup != -1set_tr2(trTR_iHitgroupiHitgroup);

                
ExecuteHamB(Ham_TraceAttackpEntityidflDamagevecForwardtrDMG_NEVERGIB DMG_CLUB);
                
ExecuteHamB(Ham_TakeDamagepEntityididflDamageDMG_NEVERGIB DMG_CLUB);
                
Stock_Fake_KnockBack(idpEntityflKnockBack)
            }
        }
        
free_tr2(tr);
    }
    return 
iHitResult;
}

stock Stock_RadiusDamage(Float:vecSrc[3], pevInflictorpevAttackerFloat:flDamageFloat:flRadiusFloat:fKnockBackbitsDamageTypebool:bSkipAttacker=truebool:bCheckTeam=false)
{
    new 
pEntity = -1tr create_tr2(), Float:flAdjustedDamageFloat:falloffiHitResult RESULT_HIT_NONE

    falloff 
flDamage flRadius
    
new bInWater = (engfunc(EngFunc_PointContentsvecSrc) == CONTENTS_WATER)
    
vecSrc[2] += 1.0
    
if(!pevAttackerpevAttacker pevInflictor
    
    
while((pEntity engfunc(EngFunc_FindEntityInSpherepEntityvecSrcflRadius)) != 0)
    {
        if(
pev(pEntitypev_takedamage) == DAMAGE_NO)
            continue
        if(
bInWater && !pev(pEntitypev_waterlevel))
            continue
        if(!
bInWater && pev(pEntitypev_waterlevel) == 3)
            continue
        if(
bCheckTeam && IsPlayer(pEntity) && pEntity != pevAttacker)
            if(!
can_damage(pEntitypevAttacker))
                continue
        if(
bSkipAttacker && pEntity == pevAttacker)
            continue
        
        new 
Float:vecEnd[3]
        
pev(pEntitypev_originvecEnd)

        
engfunc(EngFunc_TraceLinevecSrcvecEnd00tr)

        new 
Float:flFraction
        get_tr2
(trTR_flFractionflFraction)

        if(
flFraction >= 1.0engfunc(EngFunc_TraceHullvecSrcvecEnd030tr)
        
        if(
pev_valid(pEntity))
        {
            
pev(pEntitypev_originvecEnd)
            
xs_vec_sub(vecEndvecSrcvecEnd)

            new 
Float:fDistance xs_vec_len(vecEnd)
            if(
fDistance 1.0fDistance 0.0

            flAdjustedDamage 
fDistance falloff
            
            
if(get_tr2(trTR_pHit) != pEntityflAdjustedDamage *= 0.3

            
if(flAdjustedDamage <= 0)
                continue

            
ExecuteHamB(Ham_TraceAttackpEntitypevAttackerflAdjustedDamagevecEndtrbitsDamageType)
            
ExecuteHamB(Ham_TakeDamagepEntitypevAttackerpevAttackerflAdjustedDamagebitsDamageType);
            
Stock_Fake_KnockBack(pevAttackerpEntityfKnockBack)
            
            
iHitResult RESULT_HIT_PLAYER
        
}
    }
    
free_tr2(tr)
    return 
iHitResult
}

stock Set_WeaponAnim(idanim)
{
    
set_pev(idpev_weaponanimanim)
    
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, {000}, id)
    
write_byte(anim)
    
write_byte(pev(idpev_body))
    
message_end()
}

stock Set_WeaponIdleTime(idWeaponId ,Float:TimeIdle)
{
    static 
entwpnentwpn fm_get_user_weapon_entity(idWeaponId)
    if(!
pev_valid(entwpn)) 
        return
        
    
set_pdata_float(entwpn46TimeIdle4)
    
set_pdata_float(entwpn47TimeIdle4)
    
set_pdata_float(entwpn48TimeIdle 0.54)
}

stock Set_PlayerNextAttack(idFloat:nexttime)
{
    
set_pdata_float(id83nexttime5)
}

stock Make_EffSprite(Float:fOrigin[3],bStab)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYfOrigin0)
    
write_byte(TE_EXPLOSION)
    
engfunc(EngFunc_WriteCoordfOrigin[0])
    
engfunc(EngFunc_WriteCoordfOrigin[1])
    
engfunc(EngFunc_WriteCoordfOrigin[2])
    
write_short(bStab?spr1:spr2
    
write_byte(bStab?2:3)
    
write_byte(40)
    
write_byte(TE_EXPLFLAG_NODLIGHTS TE_EXPLFLAG_NOPARTICLES TE_EXPLFLAG_NOSOUND)
    
message_end()
}

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(idpev_originvOrigin)
    
pev(idpev_view_ofs,vUp)
    
xs_vec_add(vOrigin,vUp,vOrigin)
    
pev(idpev_v_anglevAngle)
    
    
engfunc(EngFunc_AngleVectorsvAnglevForwardvRightvUp)
    
    
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(pEntitypev_classnameclassnamecharsmax(classname))
    return 
equal(classname"hostage_entity")
}

stock IsAlive(pEntity)
{
    if (
pEntity 1) return 0
    
return (pev(pEntitypev_deadflag) == DEAD_NO && pev(pEntitypev_health) > 0)
}

stock GetGunPosition(idFloat:vecScr[3])
{
    new 
Float:vecViewOfs[3]
    
pev(idpev_originvecScr)
    
pev(idpev_view_ofsvecViewOfs)
    
xs_vec_add(vecScrvecViewOfsvecScr)
}

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

stock CheckAngle(iAttackeriVictimFloat:fAngle)  return(Stock_CheckAngle(iAttackeriVictim) > 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(idvId_ori)
    
Stock_Get_Origin(iTargetvTar_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(idFloat:origin[3])
{
    new 
Float:maxs[3],Float:mins[3]
    if (
pev(idpev_solid) == SOLID_BSP)
    {
        
pev(id,pev_maxs,maxs)
        
pev(id,pev_mins,mins)
        
origin[0] = (maxs[0] - mins[0]) / mins[0]
        
origin[1] = (maxs[1] - mins[1]) / mins[1]
        
origin[2] = (maxs[2] - mins[2]) / mins[2]
    } else 
pev(idpev_originorigin)
}

stock SpawnBlood(const Float:vecOrigin[3], iColoriAmount)
{
    if(
iAmount == 0)
    return

    if (!
iColor)
    return

    
iAmount *= 2
    
if(iAmount 255iAmount 255
    engfunc
(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvecOrigin)
    
write_byte(TE_BLOODSPRITE)
    
engfunc(EngFunc_WriteCoordvecOrigin[0])
    
engfunc(EngFunc_WriteCoordvecOrigin[1])
    
engfunc(EngFunc_WriteCoordvecOrigin[2])
    
write_short(spr_blood_spray)
    
write_short(spr_blood_drop)
    
write_byte(iColor)
    
write_byte(min(max(3iAmount 10), 16))
    
message_end()
}

public 
Stock_Fake_KnockBack(idiVicFloat:iKb)
{
    if(
iVic 32) return
    
    new 
Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
    pev
(idpev_originvAttacker)
    
pev(iVicpev_originvVictim)
    
vAttacker[2] = vVictim[2] = 0.0
    flags 
pev(idpev_flags)
    
    
xs_vec_sub(vVictimvAttackervVictim)
    new 
Float:fDistance
    fDistance 
xs_vec_len(vVictim)
    
xs_vec_mul_scalar(vVictimfDistancevVictim)
    
    
pev(iVicpev_velocityvVelocity)
    
xs_vec_mul_scalar(vVictimiKbvVictim)
    
xs_vec_mul_scalar(vVictim50.0vVictim)
    
vVictim[2] = xs_vec_len(vVictim) * 0.15
    
    
if(flags &~ FL_ONGROUND)
    {
        
xs_vec_mul_scalar(vVictim1.2vVictim)
        
vVictim[2] *= 0.4
    
}
    if(
xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVicpev_velocityvVictim)
}    

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_BloodEffect(Float:vecOri[3], scale)
{
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY
    
write_byte(TE_BLOODSPRITE)
    
engfunc(EngFunc_WriteCoord,vecOri[0])
    
engfunc(EngFunc_WriteCoord,vecOri[1])
    
engfunc(EngFunc_WriteCoord,vecOri[2])
    
write_short(spr_blood_spray)
    
write_short(spr_blood_drop)
    
write_byte(75)
    
write_byte(scale)
    
message_end()
}

stock can_damage(id1id2)
{
    if(
id1 <= || id1 >= 33 || id2 <= || id2 >= 33)
        return 
1
        
    
// Check team
    
return(get_pdata_int(id1114) != get_pdata_int(id2114))
}

stock UTIL_PlayerAnimation(idszAnimation[]) 
{
    static 
iAnimDesiredFloat:fFrameRateFloat:fGroundSpeedbool:bLoops;
    if((
iAnimDesired lookup_sequence(idszAnimationfFrameRatebLoopsfGroundSpeed)) == -1iAnimDesired 0;
    static 
Float:fGameTime;
    
fGameTime get_gametime();
    
set_pev(idpev_frame0.0);
    
set_pev(idpev_framerate1.0);
    
set_pev(idpev_animtimefGameTime);
    
set_pev(idpev_sequenceiAnimDesired);
    
set_pdata_int(id40bLoops4);
    
set_pdata_int(id3904);
    
set_pdata_float(id36fFrameRate4);
    
set_pdata_float(id37fGroundSpeed4);
    
set_pdata_float(id38fGameTime4);
    
set_pdata_int(id7328);
    
set_pdata_int(id7428);   
    
set_pdata_float(id220fGameTime);


Dual phantom sword:
PHP Code:

#include <amxmodx>
#include <engine>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>
#include <zp50_core>
#include <crxknives>
#include <reapi>

// Anti Decompile
#pragma compress 1

#define CSW_DPS CSW_KNIFE
#define weapon_dps "weapon_knife"

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

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_radiuscvar_slash_range
new cvar_damage_stab[2], cvar_stab_radiuscvar_stab_range
new cvar_damage_specialcvar_special_range
new cvar_knockback[3], cvar_fast_attack

new const ATTRIBUTE_BONUS_XP[] = "DPS"

public plugin_init() 
{
    
register_plugin("[ZE] Knife: Dual Phantom Sword""1.0""Asdian DX")
    
    
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_PostFrameweapon_dps"fw_Item_PostFrame")
    
    
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")
}

public 
plugin_precache()
{
    
precache_model(v_model)
    
precache_model(p_model)
    
precache_model(p_model2)
    
    for(new 
0sizeof(weapon_sound); i++)
        
precache_sound(weapon_sound[i])
    
    
precache_model("models/gcg_csze/dualswordfx.mdl")
    
precache_model("models/gcg_csze/dualsword_skill.mdl")
    
precache_model("models/gcg_csze/dualsword_skillfx1.mdl")
    
precache_model("models/gcg_csze/dualsword_skillfx2.mdl")
    
    
ef_sakura[0] = precache_model("sprites/gcg_csze/leaf01_dualsword.spr")
    
ef_sakura[1] = precache_model("sprites/gcg_csze/leaf02_dualsword.spr")
    
ef_sakura[2] = precache_model("sprites/gcg_csze/petal01_dualsword.spr")
    
ef_sakura[3] = precache_model("sprites/gcg_csze/petal02_dualsword.spr")
    
}

public 
crxknives_knife_updated(idiKnifebool:bOnConnect)
{
    static 
iValue

    
if(crxknives_get_attribute_int(idATTRIBUTE_BONUS_XPiValue) && iValue == 1)
    {
        
get_dps(id)
    }
    else
    {
        
remove_dps(id)
    }
}

public 
Event_NewRound()
{
    new 
iPlayers[32], iPnumiPlayer
    get_players
(iPlayersiPnum)

    for(new 
0iPnumi++)
    {
        
iPlayer iPlayers[i]

        
crxknives_get_attribute_int(iPlayerATTRIBUTE_BONUS_XPg_had_dps[iPlayer])
    } 
}

public 
zp_fw_core_infect_post(iremove_dps(i)

public 
zp_fw_core_cure_post(id)
{
    static 
iValue

    
if(crxknives_get_attribute_int(idATTRIBUTE_BONUS_XPiValue) && iValue == 1)
    {
        
get_dps(id)
    }
    else
    {
        
g_had_dps[id] = 0
    
}
}

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
    
    give_item
(idweapon_dps)
    
    if (
get_user_weapon(id) == CSW_DPSEvent_CurWeapon(id)
}

public 
client_connect(idremove_dps(id)
public 
client_disconnected(idremove_dps(id)

public 
remove_dps(id)
{
    
g_had_dps[id] = 0
    g_slashend
[id] = 0
    g_check
[id] = 0
    
    
static iEntiEnt fm_get_user_weapon_entity(idCSW_DPS)
    if(!
pev_valid(iEnt)) return
    
    
set_pev(iEntpev_iuser10)
    
set_pev(iEntpev_iuser20)
    
set_pev(iEntpev_iuser30)
    
set_pev(iEntpev_iuser40)
    
set_pev(iEntpev_fuser10.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_core_is_zombie(id))
        return 
1
        
    set_pev
(idpev_viewmodel2v_model)
    
set_pev(idpev_weaponmodel2g_mode[id] ? p_model2:p_model)
    
    
Set_WeaponAnim(idg_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
    
    static 
iEntiEnt fm_get_user_weapon_entity(idCSW_DPS)
    if(!
pev_valid(iEnt)) return 1
    
    set_pev
(iEntpev_iuser10)
    
set_pev(iEntpev_iuser20)
    
set_pev(iEntpev_iuser30)
    
set_pev(iEntpev_iuser40)
    
set_pev(iEntpev_fuser10.0)
        
    
g_slashend[id] = 0
    g_check
[id] = 0
    
    set_pdata_float
(id830.23)
    
set_pdata_float(iEnt460.25);
    
set_pdata_float(iEnt470.25);
    
set_pdata_float(iEnt480.25);

    return 
0
}

public 
message_DeathMsg(msg_idmsg_destmsg_ent)
{
    new 
szWeapon[64]
    
get_msg_arg_string(4szWeaponcharsmax(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(iEntity434) != 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(esStateiEiEntiHostiHostFlagsiPlayerpSet)
{
    if (!
pev_valid(iEnt))
        return;
    if (
pev(iEntpev_flags) & FL_KILLME
        return;

    new 
classname[32];
    
pev(iEntpev_classnameclassname31);

    if (
equal(classname,"dps_entytyd") && pev(iEntpev_iuser4))
    {
        if (
iHost != pev(iEntpev_owner))
            
set_es(esStateES_Effects, (get_es(esStateES_Effects) | EF_NODRAW));
    }
}

public 
Fw_DPSEnt_Think(iEnt)
{
    if(!
pev_valid(iEnt)) 
        return
    
    new 
iOwner
    iOwner 
pev(iEntpev_owner)
    
    if(!
is_user_alive(iOwner) || !is_user_connected(iOwner) || zp_core_is_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(iEntpev_iuser1)
        
iState pev(iWpnpev_iuser4)
        
Stock_Get_Postion(iOwner0.00.00.0vecOrigin);
        
        
pev(iOwnerpev_v_anglevecAngle);
        
vecAngle[0] = -vecAngle[0];
        
        
set_pev(iEntpev_originvecOrigin);
        
set_pev(iEntpev_anglesvecAngle);
        
        if(!
iState || get_user_weapon(iOwner) != CSW_DPS)
        {
            new 
Float:fRenderAmount;
            
pev(iEntpev_renderamtfRenderAmount);

            
fRenderAmount -= 4.5;

            if (
fRenderAmount <= 5.0)
            {
                
remove_entity(iEnt);
                return;
            }
            
set_pev(iEntpev_renderamtfRenderAmount);
        }
    }
    
    if(
Get_Entity_Mode(iEnt) == 1)
    {
        
set_pev(iEntpev_movetypeMOVETYPE_FLY)
    
        static 
Float:Origin[3]; pev(iOwnerpev_originOrigin)
        
Origin[2] -= 25.0
        
        Stock_Hook_Ent
(iEntOrigin0.01)
        
        if(
pev(iEntpev_fuser1) < get_gametime() || !IsAlive(iOwner))
        {
            
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME)
            return
        }
            
        
set_pev(iEntpev_velocityFloat:{1.0,1.0,1.0});
        
set_pev(iEntpev_originOrigin);
    }
    
    if(
Get_Entity_Mode(iEnt) == 2)
    {
        new 
Float:vecOrigin[3]
        
GetGunPosition(iOwnervecOrigin);
        
        new 
Float:fOldOrigin[3];
        
pev(iEntpev_oldoriginfOldOrigin);
        
        new 
Float:vecNewOrigin[3];
        
pev(iEntpev_originvecNewOrigin);
        
        new 
Float:vecfff[3];
        
xs_vec_sub(vecOriginfOldOriginvecfff);
        
xs_vec_add(vecNewOriginvecfffvecNewOrigin);
        
        
set_pev(iEntpev_originvecNewOrigin);
        
set_pev(iEntpev_oldoriginvecOrigin);
        
        if (
pev(iEntpev_iuser1) == 2)
        {
            new 
Float:fDist get_distance_f(vecOriginvecNewOrigin);
            if (
fDist 175.0 0.5)
            {
                
remove_entity(iEnt);
                return;
            }
        }
        
        if(
g_Sound[iOwner] < get_gametime())
        {
            if(!
g_soundmode[iOwner]) emit_sound(iOwnerCHAN_ITEMweapon_sound[random_num(15,19)], VOL_NORMATTN_NORM0PITCH_NORM)
            if(
g_soundmode[iOwner] == 1emit_sound(iOwnerCHAN_BODYweapon_sound[random_num(15,19)], VOL_NORMATTN_NORM0PITCH_NORM)
            if(
g_soundmode[iOwner] == 2emit_sound(iOwnerCHAN_VOICEweapon_sound[random_num(15,19)], VOL_NORMATTN_NORM0PITCH_NORM)
            if(
g_soundmode[iOwner] == 3emit_sound(iOwnerCHAN_WEAPONweapon_sound[random_num(15,19)], VOL_NORMATTN_NORM0PITCH_NORM)
            
            
g_soundmode[iOwner]++
            if(
g_soundmode[iOwner] > 3g_soundmode[iOwner] = 0
            
            g_Sound
[iOwner] = get_gametime()+0.088;
        }
    }
    
set_pev(iEntpev_nextthinkget_gametime() + 0.01)
    
    if(
Get_Entity_Mode(iEnt) == 2)
    {
        new 
Float:fTimeLast;
        
pev(iEntpev_fuser1fTimeLast);
        
        if (
fTimeLast get_gametime() || pev(pev(iEntpev_iuser2), pev_fuser1) < get_gametime())
        {
            if (
pev(iEntpev_iuser1) == 1)
            {
                new 
Float:fRenderAmount;
                
pev(iEntpev_renderamtfRenderAmount);
                
fRenderAmount -= 7.5;
                
                if (
fRenderAmount <= 5.0)
                {
                    
remove_entity(iEnt);
                    return;
                }
                
set_pev(iEntpev_renderamtfRenderAmount);
            } else 
remove_entity(iEnt);
            
            
g_soundmode[iOwner] = 0
        
}
    }
}

public 
fw_Item_PostFrame(ent)
{
    new 
id pev(entpev_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(ent484) <= 0.01 && (!pev(entpev_iuser2) || !g_slashend[id]))
    {
        if(
g_check[id] < 6g_check[id] = 0
        set_pev
(entpev_iuser30)
        
Set_WeaponAnim(idg_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
        
set_pdata_float(ent484.034)
    }
    
    new 
iButton pev(id,pev_button)
    return 
AurezBotac(identiButton)
}

public 
AurezBotac(idiEntiButton)
{
    new 
iState pev(iEntpev_iuser3)
    new 
iState2 pev(iEntpev_iuser2)
    new 
iSlash pev(iEntpev_iuser4)
    new 
Float:fSoundpev(iEntpev_fuser1fSound)
    new 
Float:fRange get_pcvar_float(g_mode[id] ? cvar_slash_range cvar_stab_range)
    
    if(!(
iButton IN_ATTACK) && get_pdata_float(iEnt46,4) <= 0.0 && iState2)
    {
        if(!
iState || iState == 1)
        {
            
Set_WeaponAnim(idANIM_STABEND)
            
set_pev(iEntpev_iuser20)
            
set_pdata_float(iEnt481.45,4)
        }
    }
    
    if(!(
iButton IN_ATTACK2) && get_pdata_float(iEnt47,4) <= 0.0 && g_slashend[id])
    {
        
Set_WeaponAnim(idANIM_SLASHEND)
        
set_pdata_float(iEnt482.03,4)
        
g_slashend[id] = 0
    
}
    
    if (
get_pdata_float(id83) <= 0.0 && pev(iEntpev_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(idtruefRangefAnglefDamageget_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(iEntpev_iuser10);
    }
    
    if(
get_pdata_float(iEnt47,4) <= 0.0 && iSlash && iSlash <= 4)
    {
        
set_pev(iEntpev_iuser4iSlash)
        
Set_WeaponAnim(idiSlash)
        
        
set_pdata_float(id830.06)
        
        if(!
get_pcvar_num(cvar_fast_attack)) 
            
set_pdata_float(iEnt46iSlash == ? (g_check[id] == 0.43 0.7) : 0.13,4);
        
        
set_pdata_float(iEnt47iSlash == ? (g_check[id] == 0.43 0.7) : 0.13,4);
        
set_pdata_float(iEnt48iSlash == 1.4 1.0,4);
          
        
set_pev(iEntpev_iuser11)
        
set_pev(iEntpev_fuser4get_gametime() + get_pdata_float(id83))
        
SendSound(idCHAN_WEAPONweapon_sound[iSlash])
        
Create_Slash(id,iEnt,iSlash)
        
        if(
iSlash == 3
        {
            
g_slashend[id] = 1
            
            set_pev
(iEntpev_fuser1get_gametime() + (g_check[id] == 0.43 0.5))
            
set_pev(iEntpev_iuser40)
        }
    }
    
    if(
fSound && fSound get_gametime())
    {
        
SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 13 12])
        
set_pev(iEntpev_fuser10.0)
        
        if(
g_check[id] == 5
        {
            
Set_WeaponAnim(id14)
            
SendSound(id,CHAN_ITEM,weapon_sound[20])
            
g_check[id] = 6
            
            set_pdata_float
(iEnt461.03,4)
            
set_pdata_float(iEnt471.03,4)
            
set_pdata_float(iEnt481.03,4)
            
            
set_pev(iEntpev_fuser4get_gametime()+1.7);
            
DPS_Special(id02.0)
        }
    }
    
    if(
g_check[id] == && get_pdata_float(iEnt46,4) <= 0.0)
    {
        
set_pdata_float(iEnt4611.36,4)
        
set_pdata_float(iEnt4711.36,4)
        
set_pdata_float(iEnt4811.36,4)
        
        
g_check[id] = 7
        set_pev
(iEntpev_fuser1get_gametime() + 10.6)
        
Set_WeaponAnim(id15)
    }
    
    
// NANI?!
    
if(g_check[id] == && fSound && fSound get_gametime())
    {
        
SendSound(id,CHAN_VOICE,weapon_sound[14])
        
set_pev(iEntpev_fuser10.0)
        
g_check[id] = 0
        
        DPS_Special
(id11.46)
    }
    
    
DPS_RealSpecial(idiEntfRange)
    
    if(
iButton IN_ATTACK && get_pdata_float(iEnt46,4) <= 0.0)
    {
        
g_mode[id] = 0
        g_slashend
[id] = 0
        
        set_pev
(iEntpev_iuser21)
        
set_pev(iEntpev_iuser40)
        
        switch(
iState)
        {
            case 
0:
            {
                
set_pdata_float(id830.16)
                
set_pdata_float(iEnt460.4,4);
                
                if(!
get_pcvar_num(cvar_fast_attack)) 
                    
set_pdata_float(iEnt470.4,4);
                    
                
set_pdata_float(iEnt481.0,4);
                
                
set_pev(iEntpev_iuser11)
                
set_pev(iEntpev_iuser31)
                
set_pev(iEntpev_fuser4get_gametime() + get_pdata_float(id83))
                
                
Set_WeaponAnim(idANIM_STAB1)
                
SendSound(idCHAN_WEAPONweapon_sound[0])
                
                if(!
g_check[id]) g_check[id] = 1
                
else if(g_check[id] == 2g_check[id] = 3
                
else g_check[id] = 0
            
}
            case 
1:
            {
                
set_pdata_float(id830.16)
                
set_pdata_float(iEnt460.83,4);
                
                if(!
get_pcvar_num(cvar_fast_attack)) 
                    
set_pdata_float(iEnt470.83,4);
                
                
set_pdata_float(iEnt481.5,4);
                
                
set_pev(iEntpev_iuser11)
                
set_pev(iEntpev_iuser30)
                
set_pev(iEntpev_fuser4get_gametime() + get_pdata_float(id83))
                
                
Set_WeaponAnim(idANIM_STAB2)
                
SendSound(idCHAN_WEAPONweapon_sound[1])
                
                if(
g_check[id] == 3g_check[id] = 4
                
else g_check[id] = 0
            
}
        }
    }
    
    if(
iButton IN_ATTACK2 && get_pdata_float(iEnt47) <= 0.0 && !iSlash)
    {
        
g_mode[id] = 1
        
        set_pdata_float
(id830.04)
        
        if(!
get_pcvar_num(cvar_fast_attack)) 
            
set_pdata_float(iEnt460.13,4);
        
        
set_pdata_float(iEnt470.13,4);
        
set_pdata_float(iEnt480.5,4);
        
        
set_pev(iEntpev_iuser11)
        
set_pev(iEntpev_iuser20)
        
set_pev(iEntpev_iuser30)
        
set_pev(iEntpev_iuser41)
        
set_pev(iEntpev_fuser4get_gametime() + get_pdata_float(id83))
        
        
Set_WeaponAnim(idANIM_SLASH1)
        
SendSound(idCHAN_WEAPONweapon_sound[5])
        
        
Create_Slash(id,iEnt,0)
        
        if(
g_check[id] == 1g_check[id] = 2
        
else if(g_check[id] == 4g_check[id] = 5
        
else g_check[id] = 0
    
}
    
    
iButton &= ~IN_ATTACK;
    
iButton &= ~IN_ATTACK2;
    
set_pev(idpev_buttoniButton);
    return 
HAM_IGNORED
}

stock Create_Slash(id,iEnt,seq)
{
    new 
Float:vecOrigin[3], Float:vecAngle[3];
    
GetGunPosition(idvecOrigin);
    
pev(idpev_v_anglevecAngle);
    
vecAngle[0] = -vecAngle[0];
    
    new 
pEntity DPS_Entites(id,"models/gcg_csze/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
        
    
// Set info for ent    
    
Set_Entity_Mode(pEntity0)
    
set_pev(pEntitypev_scale0.1);
    
set_pev(pEntitypev_iuser1iEnt);
    
set_pev(pEntitypev_velocityFloat:{0.01,0.01,0.01});
    
set_pev(pEntitypev_anglesvecAngle);
    
set_pev(pEntitypev_nextthinkget_gametime()+0.01);
}

stock DPS_Special(idseqFloat:fTime)
{
    new 
Float:VecOrig[3], Float:VecAng[3]
    
pev(idpev_originVecOrig)
    
pev(idpev_anglesVecAng)
    
    new 
iEfx engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"))
    
set_pev(iEfxpev_classname"dps_entytyd");
    
set_pev(iEfxpev_originVecOrig)
    
set_pev(iEfxpev_frame0.0)
    
set_pev(iEfxpev_animtimeget_gametime())
    
set_pev(iEfxpev_framerate1.0)
    
set_pev(iEfxpev_sequenceseq)
    
engfunc(EngFunc_SetModeliEfx"models/gcg_csze/dualsword_skill.mdl")
    
dllfunc(DLLFunc_SpawniEfx)
    
Set_Entity_Mode(iEfx1)
    
set_pev(iEfxpev_anglesVecAng)
    
set_pev(iEfxpev_solidSOLID_NOT)
    
set_pev(iEfxpev_ownerid)
    
set_pev(iEfxpev_velocityFloat:{0.01,0.01,0.01});
    
set_pev(iEfxpev_fuser1get_gametime() + fTime)
    
set_pev(iEfxpev_nextthinkget_gametime() + 0.01)
}

stock DPS_RealSpecial(idiEntFloat:fRange)
{
    new 
Float:fTimeEffect;
    
pev(iEntpev_fuser4fTimeEffect);
    
    if (
g_check[id] == && fTimeEffect && fTimeEffect <= get_gametime())
    {
        
KnifeAttack_Global(idfalseget_pcvar_float(cvar_special_range)*2.0180.0get_pcvar_float(cvar_damage_special), get_pcvar_float(cvar_knockback[2]))
            
        new 
Float:vecOrigin3[2][3], Float:vecOrigin[3];
        
pev(idpev_originvecOrigin3[0]);
        
pev(idpev_originvecOrigin);
        
xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
        
        new 
Float:fFloat random_float(fRange * -0.85fRange 0.85);
        
vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.065.0);
        
        switch (
random(3))
        {
            case 
0:
            {
                
vecOrigin3[0][0] += fFloat*random_float(-1.01.0);
                
vecOrigin3[0][1] += fFloat*random_float(-1.01.0);
                
                
vecOrigin3[1][0] -= fFloat*random_float(-1.01.0);
                
vecOrigin3[1][1] -= fFloat*random_float(-1.01.0);
            }
            case 
1:
            {
                
vecOrigin3[0][0] += fFloat*random_float(-1.01.0);
                
vecOrigin3[0][1] -= fFloat*random_float(-1.01.0);
                
                
vecOrigin3[1][0] -= fFloat*random_float(-1.01.0);
                
vecOrigin3[1][1] += fFloat*random_float(-1.01.0);
            }
            case 
2:
            {
                
vecOrigin3[0][0] -= fFloat*random_float(-1.01.0);
                
vecOrigin3[0][1] += fFloat*random_float(-1.01.0);
                
                
vecOrigin3[1][0] += fFloat*random_float(-1.01.0);
                
vecOrigin3[1][1] -= fFloat*random_float(-1.01.0);
            }
            case 
3:
            {
                
vecOrigin3[0][0] -= fFloat*random_float(-1.01.0);
                
vecOrigin3[0][1] -= fFloat*random_float(-1.01.0);
                
                
vecOrigin3[1][0] += fFloat*random_float(-1.01.0);
                
vecOrigin3[1][1] += fFloat*random_float(-1.01.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.030.0);
            
vecAngle2[1] = random_num(0,1) ? random_float(-180.00.0) : random_float(0.0180.0);
            
            new 
pEntity DPS_Entites(id,"models/gcg_csze/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0)    
            
set_pev(pEntitypev_anglesvecAngle2);
            
set_pev(pEntitypev_velocityFloat:{0.01,0.01,0.01});
            
set_pev(pEntitypev_iuser11);
            
set_pev(pEntitypev_iuser2iEnt);
            
set_pev(pEntitypev_frame0.0);
            
Set_Entity_Mode(pEntity2)
            
set_pev(pEntitypev_fuser1get_gametime()+0.53);
            
set_pev(pEntitypev_fuser2get_gametime()+0.5);
            
set_pev(pEntitypev_fuser3get_gametime()+0.31);
            
set_pev(pEntitypev_oldoriginvecOrigin);
            
set_pev(pEntitypev_nextthinkget_gametime()+0.01);
        }
        
        new 
pEntity DPS_Entites(id,"models/gcg_csze/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0)    
        
set_pev(pEntitypev_iuser12);
        
set_pev(pEntitypev_iuser2iEnt);
        
Set_Entity_Mode(pEntity2)
        
set_pev(pEntitypev_frame0.0);
        
set_pev(pEntitypev_oldoriginvecOrigin);
        
set_pev(pEntitypev_fuser1get_gametime()+0.2);
        
set_pev(pEntitypev_fuser2get_gametime()+0.5);
        
set_pev(pEntitypev_fuser3get_gametime()+0.3);
        
set_pev(pEntitypev_nextthinkget_gametime()+0.01);
        
        
set_pev(iEntpev_fuser4get_gametime()+0.05);
    }
}

stock DPS_Entites(idmodels[], Float:Start[3], Float:End[3], Float:speedsolidseqmove=MOVETYPE_FLY)
{
    new 
pEntity engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"));
        
    
// Set info for ent    
    
set_pev(pEntitypev_movetypemove);
    
set_pev(pEntitypev_ownerid);
    
engfunc(EngFunc_SetModelpEntitymodels);
    
set_pev(pEntitypev_classname"dps_entytyd");
    
set_pev(pEntitypev_minsFloat:{-1.0, -1.0, -1.0});
    
set_pev(pEntitypev_maxsFloat:{1.01.01.0});
    
set_pev(pEntitypev_originStart);
    
set_pev(pEntitypev_gravity0.01);
    
set_pev(pEntitypev_solidsolid);
    
    static 
Float:Velocity[3];
    
Stock_Get_Speed_Vector(StartEndspeedVelocity);
    
set_pev(pEntitypev_velocityVelocity);

    new 
Float:vecVAngle[3]; pev(idpev_v_anglevecVAngle);
    
vector_to_angle(VelocityvecVAngle)
    
    if(
vecVAngle[0] > 90.0vecVAngle[0] = -(360.0 vecVAngle[0]);
    
set_pev(pEntitypev_anglesvecVAngle);
    
    
set_pev(pEntitypev_rendermodekRenderTransAdd);
    
set_pev(pEntitypev_renderamt255.0);
    
set_pev(pEntitypev_sequenceseq)
    
set_pev(pEntitypev_animtimeget_gametime());
    
set_pev(pEntitypev_framerate1.0)
    return 
pEntity;
}

stock Set_Entity_Mode(iEntmodeset_pev(iEntpev_iuser3mode)
stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)

stock SendSound(idchansample[]) emit_sound(idchansampleVOL_NORMATTN_NORM0PITCH_NORM)

stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speedFloat:new_velocity[3])
{
    
xs_vec_sub(origin2origin1new_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_velocitynumnew_velocity)
}
stock GetGunPosition(idFloat:vecSrc[3])
{
    new 
Float:vecViewOfs[3];
    
pev(idpev_originvecSrc);
    
pev(idpev_view_ofsvecViewOfs);
    
xs_vec_add(vecSrcvecViewOfsvecSrc);
}
stock KnifeAttack_Global(idbStabFloat:flRangeFloat:fAngleFloat:flDamageFloat:flKnockBack)
{
    new 
iHitResult
    
if(fAngle 0.0iHitResult KnifeAttack2(idbStabFloat:flRangeFloat:fAngleFloat:flDamageFloat:flKnockBack)
    else 
iHitResult KnifeAttack(idbStabFloat:flRangeFloat:flDamageFloat:flKnockBack)

    return 
iHitResult
}

stock KnifeAttack(idbStabFloat:flRangeFloat:flDamageFloat:flKnockBackiHitgroup = -1bitsDamageType DMG_NEVERGIB DMG_CLUB)
{
    new 
Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
    
GetGunPosition(idvecSrc);

    
pev(idpev_v_anglev_angle);
    
engfunc(EngFunc_MakeVectorsv_angle);

    
global_get(glb_v_forwardvecForward);
    
xs_vec_mul_scalar(vecForwardflRangevecForward);
    
xs_vec_add(vecSrcvecForwardvecEnd);

    new 
tr create_tr2();
    
engfunc(EngFunc_TraceLinevecSrcvecEnd0idtr);

    new 
Float:flFractionget_tr2(trTR_flFractionflFraction);
    if (
flFraction >= 1.0engfunc(EngFunc_TraceHullvecSrcvecEnd03idtr);
    
    
get_tr2(trTR_flFractionflFraction);

    new 
iHitResult RESULT_HIT_NONE;
    
    if (
flFraction 1.0)
    {
        new 
pEntity get_tr2(trTR_pHit);
        
iHitResult RESULT_HIT_WORLD;
        
        if (
pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
        {
            if (
CheckBack(idpEntity) && bStab && iHitgroup == -1)
                
flDamage *= 1.0;

            
iHitResult RESULT_HIT_PLAYER;
        }

        if (
pev_valid(pEntity))
        {
            
engfunc(EngFunc_MakeVectorsv_angle);
            
global_get(glb_v_forwardvecForward);

            if (
iHitgroup != -1)
                
set_tr2(trTR_iHitgroupiHitgroup);

            
ExecuteHamB(Ham_TraceAttackpEntityidflDamagevecForwardtrbitsDamageType);
            
ExecuteHamB(Ham_TakeDamagepEntityididflDamagebitsDamageType)
            
Stock_Fake_KnockBack(idpEntityflKnockBack)
            
            if (
IsAlive(pEntity))
            {
                
free_tr2(tr);
                return 
iHitResult;
            }
        }
    }
    
free_tr2(tr);
    return 
iHitResult;
}

stock KnifeAttack2(idbStabFloat:flRangeFloat:fAngleFloat:flDamageFloat:flKnockBackiHitgroup = -1bNoTraceCheck 0)
{
    new 
Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
    
pev(idpev_originvecOrigin);

    new 
iHitResult RESULT_HIT_NONE;
    
GetGunPosition(idvecSrc);

    
pev(idpev_v_anglev_angle);
    
engfunc(EngFunc_MakeVectorsv_angle);

    
global_get(glb_v_forwardvecForward);
    
xs_vec_mul_scalar(vecForwardflRangevecForward);
    
xs_vec_add(vecSrcvecForwardvecEnd);

    new 
tr create_tr2();
    
engfunc(EngFunc_TraceLinevecSrcvecEnd0idtr);
    
    new 
Float:EndPos2[3]
    
get_tr2(trTR_vecEndPosEndPos2)
    
    new 
Float:flFractionget_tr2(trTR_flFractionflFraction);
    if (
flFraction 1.0
    {
        
iHitResult RESULT_HIT_WORLD;
        if(
bStabStock_SakuraEffect(idEndPos2)
    }
    
    new 
Float:vecEndZ vecEnd[2];
    
    new 
pEntity = -1;
    while ((
pEntity engfunc(EngFunc_FindEntityInSpherepEntityvecOriginflRange)) != 0)
    {
        if (!
pev_valid(pEntity))
            continue;
        if (
id == pEntity)
            continue;
        if (!
IsAlive(pEntity))
            continue;
        if (!
CheckAngle(idpEntityfAngle))
            continue;

        
GetGunPosition(idvecSrc);
        
Stock_Get_Origin(pEntityvecEnd);

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

        
xs_vec_sub(vecEndvecSrcvecForward);
        
xs_vec_normalize(vecForwardvecForward);
        
xs_vec_mul_scalar(vecForwardflRangevecForward);
        
xs_vec_add(vecSrcvecForwardvecEnd);

        
engfunc(EngFunc_TraceLinevecSrcvecEnd0idtr);
        
get_tr2(trTR_flFractionflFraction);

        if (
flFraction >= 1.0engfunc(EngFunc_TraceHullvecSrcvecEnd03idtr);
        
get_tr2(trTR_flFractionflFraction);

        if (
flFraction 1.0)
        {
            if (
IsPlayer(pEntity) || IsHostage(pEntity))
            {
                
iHitResult RESULT_HIT_PLAYER;
                if(
bStabStock_SakuraEffect(idvecEnd)
                
                if (
CheckBack(idpEntity) && bStab && iHitgroup == -1)
                    
flDamage *= 1.0;
            }

            if (
get_tr2(trTR_pHit) == pEntity || bNoTraceCheck)
            {
                
engfunc(EngFunc_MakeVectorsv_angle);
                
global_get(glb_v_forwardvecForward);

                if (
iHitgroup != -1set_tr2(trTR_iHitgroupiHitgroup);

                
ExecuteHamB(Ham_TraceAttackpEntityidflDamagevecForwardtrDMG_NEVERGIB DMG_CLUB);
                
ExecuteHamB(Ham_TakeDamagepEntityididflDamageDMG_NEVERGIB DMG_CLUB)
                
                
Stock_Fake_KnockBack(idpEntityflKnockBack)
            }
        }
        
free_tr2(tr);
    }
    return 
iHitResult;
}

stock Set_WeaponAnim(idanim)
{
    
set_pev(idpev_weaponanimanim)
    
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, {000}, id)
    
write_byte(anim)
    
write_byte(pev(idpev_body))
    
message_end()
}

stock Stock_Set_Vis(iEntiVis 1)
    
set_pev(iEntpev_effectsiVis == pev(iEntpev_effects) & ~EF_NODRAW pev(iEntpev_effects) | EF_NODRAW)

stock Stock_Hook_Ent(entFloat:TargetOrigin[3], Float:Speedmode=0)
{
    static 
Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
    pev
(entpev_originEntOrigin)
    
    if(!
mode)
    {
        
distance_f get_distance_f(EntOriginTargetOrigin)
        
fl_Time distance_f Speed
            
        pev
(entpev_velocityfl_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.0set_pev(entpev_velocityfl_Velocity)
        else 
set_pev(entpev_velocityFloat:{0.010.010.01})
    } else {
        static 
Float:fl_EntVelocity[3], Float:fl_Acc[3]
        
Stock_Directed_Vector(TargetOriginEntOriginfl_Velocity)
        
xs_vec_mul_scalar(fl_VelocitySpeedfl_Velocity)
        
        for(new 
=0i<3i++)
        {
            if(
fl_Velocity[i] > fl_EntVelocity[i]) 
            {
                
fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
                
fl_Acc[i] = floatmin(70.0fl_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.0fl_Acc[i])
                
fl_EntVelocity[i] -= fl_Acc[i]
            }
        }
        
set_pev(entpev_velocityfl_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(idpev_originvOrigin)
    
pev(idpev_view_ofs,vUp)
    
xs_vec_add(vOrigin,vUp,vOrigin)
    
pev(idpev_v_anglevAngle)
    
    
engfunc(EngFunc_AngleVectorsvAnglevForwardvRightvUp)
    
    
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(pEntitypev_classnameclassnamecharsmax(classname))
    return 
equal(classname"hostage_entity")
}

stock IsAlive(pEntity)
{
    if (
pEntity 1) return 0
    
return (pev(pEntitypev_deadflag) == DEAD_NO && pev(pEntitypev_health) > 0)
}

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

stock CheckAngle(iAttackeriVictimFloat:fAngle)  return(Stock_CheckAngle(iAttackeriVictim) > 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(idvId_ori)
    
Stock_Get_Origin(iTargetvTar_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(idFloat:origin[3])
{
    new 
Float:maxs[3],Float:mins[3]
    if (
pev(idpev_solid) == SOLID_BSP)
    {
        
pev(id,pev_maxs,maxs)
        
pev(id,pev_mins,mins)
        
origin[0] = (maxs[0] - mins[0]) / mins[0]
        
origin[1] = (maxs[1] - mins[1]) / mins[1]
        
origin[2] = (maxs[2] - mins[2]) / mins[2]
    } else 
pev(idpev_originorigin)
}

public 
Stock_Fake_KnockBack(idiVicFloat:iKb)
{
    if(
iVic 32) return
    
    new 
Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
    pev
(idpev_originvAttacker)
    
pev(iVicpev_originvVictim)
    
vAttacker[2] = vVictim[2] = 0.0
    flags 
pev(idpev_flags)
    
    
xs_vec_sub(vVictimvAttackervVictim)
    new 
Float:fDistance
    fDistance 
xs_vec_len(vVictim)
    
xs_vec_mul_scalar(vVictimfDistancevVictim)
    
    
pev(iVicpev_velocityvVelocity)
    
xs_vec_mul_scalar(vVictimiKbvVictim)
    
xs_vec_mul_scalar(vVictim50.0vVictim)
    
vVictim[2] = xs_vec_len(vVictim) * 0.15
    
    
if(flags &~ FL_ONGROUND)
    {
        
xs_vec_mul_scalar(vVictim1.2vVictim)
        
vVictim[2] *= 0.4
    
}
    if(
xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVicpev_velocityvVictim)
}    

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(idFloat:vecOri[3])
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvecOri)
    
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(id1id2)
{
    if(
id1 <= || id1 >= 33 || id2 <= || id2 >= 33)
        return 
1
        
    
// Check team
    
return(get_pdata_int(id1114) != get_pdata_int(id2114))


Przeczytaj cały wpis

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...