[AMX] Tổng hợp Code, Plug do Mem chế hoặc giới thiệu

Thảo luận trong 'Counter Strike' bắt đầu bởi Orpheus, 22/1/11.

  1. teobrvt1995

    teobrvt1995 T.E.T.Я.I.S

    Tham gia ngày:
    19/9/10
    Bài viết:
    691
    Mịa, mấy chú không biết dùng weapon offset để khởi tạo đk à.:w
    duy: xem lại dùm tui cái code tui send đi. Anim idle tui còn block rồi set cái anim mới huống gì mấy cái anim khác:|
    mịa 2 ông kia có hép tui khôg đấy.
     
  2. buiducduy111

    buiducduy111 Dragon Quest

    Tham gia ngày:
    3/5/11
    Bài viết:
    1,257
    Mấy bác đọc lại code mới của em đi. Em đã dùng thêm 1 biến ghi thời gian attack lần cuối rồi đó. Thế mà... (cuối page 291)
     
  3. dias

    dias Mega Man

    Tham gia ngày:
    17/1/10
    Bài viết:
    3,226
    Nơi ở:
    SEOUL
    ^
    ^
    - cho code offset xem :)). kiểm tra nextattack = 0.0 à :))
     
  4. kungfulon

    kungfulon Fire in the hole! Lão Làng GVN Sorcerer

    Tham gia ngày:
    1/5/11
    Bài viết:
    2,535
    Nó tự remove task cũ nên sẽ ko có trường hợp ấy xảy ra, chỉ bị ko chém đc thôi (vì task remove và set liên tục)=='
     
  5. buiducduy111

    buiducduy111 Dragon Quest

    Tham gia ngày:
    3/5/11
    Bài viết:
    1,257
    P/S: không ai giúp à :(( ......... làm đủ kiểu vẫn không được ! thỉnh thoảng lại lỗi !

    PHP:
    #include <amxmodx>
    #include <cstrike>
    #include <fakemeta>
    #include <engine>
    #include <hamsandwich>
    #include <nst_wpn>
    #include <xs>

    #define PLUGIN    "Knife"
    #define AUTHOR    "Bui duc duy"
    #define VERSION    "1.0"

    enum
    {
        
    anim_idle 0,
        
    anim_slash_1,
        
    anim_slash_2,
        
    anim_draw,
        
    anim_stab,
        
    anim_stab_miss,
        
    anim_slash1_mid,
        
    anim_slash2_mid
    }

    new 
    Float:g_knife_attack[33]

    public 
    plugin_init()
    {
        
    register_plugin(PLUGINVERSIONAUTHOR)
        
    RegisterHam(Ham_Weapon_SendWeaponAnim,"weapon_knife","Fw_Weapon_SendWeaponAnim")
        
    RegisterHam(Ham_Weapon_SecondaryAttack,"weapon_knife","Fw_SecondaryAttack_Post",1)
        
    RegisterHam(Ham_Weapon_PrimaryAttack,"weapon_knife","Fw_PrimAttack_Post",1)
        
        
        
    register_forward(FM_CmdStart,"Fw_CmdStart")
        
    register_forward(FM_TraceLine,"Fw_TraceLine")
        
    register_forward(FM_TraceHull,"Fw_TraceHull")
    }

    public 
    Fw_SecondaryAttack_Post(ent)
    {
        static 
    id 
        id 
    pev(ent,pev_owner)
        if(!
    pev_valid(ent) || !is_user_connected(id))
            return 
    HAM_IGNORED
            
        set_pdata_float
    (ent,47,nst_wpn_get_float3(idNST_WPN_DATA_DELAY)+0.5,4)
        
        return 
    HAM_IGNORED
    }

    public 
    Fw_PrimAttack_Post(ent)
    {
        static 
    id 
        id 
    pev(ent,pev_owner)
        if(!
    pev_valid(ent) || !is_user_connected(id))
            return 
    HAM_IGNORED
        
        set_pdata_float
    (ent,460.3 ,4)
        
        return 
    HAM_IGNORED
    }

    // set distance
    public Fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monsteridhandle)
    {
        if (!
    is_user_connected(id))
            return 
    FMRES_IGNORED;
        
        if (!
    is_user_alive(id))
            return 
    FMRES_IGNORED;
        
        if (
    get_user_weapon(id) != CSW_KNIFE)
            return 
    FMRES_IGNORED;
        
        
        
    pev(idpev_v_anglevector_end)
        
    angle_vector(vector_endANGLEVECTOR_FORWARDvector_end)
        
        
    xs_vec_mul_scalar(vector_endnst_wpn_get_float3(idNST_WPN_DATA_DISTANCE), vector_end)
        
        
    xs_vec_add(vector_startvector_endvector_end)
        
    engfunc(EngFunc_TraceLinevector_startvector_endignored_monsteridhandle)
        
        return 
    FMRES_SUPERCEDE;
    }

    public 
    Fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monsterhullidhandle)
    {
        if (!
    is_user_connected(id))
            return 
    FMRES_IGNORED;
        
        if (!
    is_user_alive(id))
            return 
    FMRES_IGNORED;
        
        if (
    get_user_weapon(id) != CSW_KNIFE)
            return 
    FMRES_IGNORED;
        
        
        
    pev(idpev_v_anglevector_end)
        
    angle_vector(vector_endANGLEVECTOR_FORWARDvector_end)
        
        
    xs_vec_mul_scalar(vector_endnst_wpn_get_float3(idNST_WPN_DATA_DISTANCE), vector_end)
        
        
    xs_vec_add(vector_startvector_endvector_end)
        
    engfunc(EngFunc_TraceHullvector_startvector_endignored_monsterhullidhandle)
        
        return 
    FMRES_SUPERCEDE;
    }

    //

    /* Knife Hook delay */
    public Fw_CmdStart(id,handle,seed)
    {
        static 
    iButton,iEnt
        iButton 
    get_uc(handle,UC_Buttons)
        
    iEnt find_ent_by_owner(-1"weapon_knife"id)
        
        
        if(
    get_user_weapon(id) ==CSW_KNIFE)
        {
            if (
    iButton&IN_ATTACK2)
            {
                if (
    get_gametime() - g_knife_attack[id] < nst_wpn_get_float3(idNST_WPN_DATA_DELAY)+1.0) return
                
    g_knife_attack[id] = get_gametime()
                
                
    //set_uc(handle,UC_Buttons,iButton&~IN_ATTACK2)
                
                
    set_weapon_anim(idanim_stab_miss)
                
                if (
    task_exists(id)) remove_task(id)
                
    set_task(nst_wpn_get_float3(idNST_WPN_DATA_DELAY),"task_knife_attack",id)
                
                
    set_pdata_float(iEnt47nst_wpn_get_float3(idNST_WPN_DATA_DELAY)+0.5,4)
            }
        }
    }

    public 
    task_knife_attack(id)
    {
        new 
    ent find_ent_by_owner(-1,"weapon_knife",id)
        
        if(!
    is_user_alive(id) || get_user_weapon(id) != CSW_KNIFE) return
        
    ExecuteHamB(Ham_Weapon_SecondaryAttack,ent)
    }



    public 
    Fw_Weapon_SendWeaponAnim(ent,anim)
    {
        static 
    id 
        id 
    pev(ent,pev_owner)
        if(!
    pev_valid(ent) || !is_user_connected(id)) return HAM_IGNORED
            
        
    if (get_gametime() - g_knife_attack[id] < nst_wpn_get_float3(idNST_WPN_DATA_DELAY)+1.0 && get_user_weapon(id)==CSW_KNIFE || anim == anim_stab) return HAM_SUPERCEDE
        
        
    return HAM_IGNORED
    }


    stock set_weapon_anim(idanim)
    {
        
    set_pev(idpev_weaponanimanim)
        
        
    message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM_id)
        
    write_byte(anim)
        
    write_byte(pev(id,pev_body))
        
    message_end()
    }


     
  6. kungfulon

    kungfulon Fire in the hole! Lão Làng GVN Sorcerer

    Tham gia ngày:
    1/5/11
    Bài viết:
    2,535
    Fix it by yourself[​IMG]
     
    Chỉnh sửa cuối: 9/5/12
  7. buiducduy111

    buiducduy111 Dragon Quest

    Tham gia ngày:
    3/5/11
    Bài viết:
    1,257
    Không biết sao sửa. Lọ mọ mãi nó cũng chỉ vậy .... !:6cool_surrender:
     
  8. kungfulon

    kungfulon Fire in the hole! Lão Làng GVN Sorcerer

    Tham gia ngày:
    1/5/11
    Bài viết:
    2,535
    Thế không biết ghi log và print để tìm lỗi à[​IMG]
     
  9. buiducduy111

    buiducduy111 Dragon Quest

    Tham gia ngày:
    3/5/11
    Bài viết:
    1,257
    Rồi chứ... nhưng thấy gì đâu... ! print mọi chỗ.. chỗ sendanim cũng print nhưng đâu thấy gì khác lạ.. thỉnh thoảng nó mới bị !



    PHP:
    #include <amxmodx>
    #include <cstrike>
    #include <fakemeta>
    #include <engine>
    #include <hamsandwich>
    #include <nst_wpn>
    #include <xs>

    #define PLUGIN    "Knife"
    #define AUTHOR    "Bui duc duy"
    #define VERSION    "1.0"

    enum
    {
        
    anim_idle 0,
        
    anim_slash_1,
        
    anim_slash_2,
        
    anim_draw,
        
    anim_stab,
        
    anim_stab_miss,
        
    anim_slash1_mid,
        
    anim_slash2_mid
    }

    new 
    Float:g_knife_attack[33]

    public 
    plugin_init()
    {
        
    register_plugin(PLUGINVERSIONAUTHOR)
        
    RegisterHam(Ham_Weapon_SendWeaponAnim,"weapon_knife","Fw_Weapon_SendWeaponAnim")
        
    RegisterHam(Ham_Weapon_SecondaryAttack,"weapon_knife","Fw_SecondaryAttack_Post",1)
        
    RegisterHam(Ham_Weapon_PrimaryAttack,"weapon_knife","Fw_PrimAttack_Post",1)
        
        
        
    register_forward(FM_CmdStart,"Fw_CmdStart")
        
    register_forward(FM_TraceLine,"Fw_TraceLine")
        
    register_forward(FM_TraceHull,"Fw_TraceHull")
    }

    public 
    Fw_SecondaryAttack_Post(ent)
    {
        static 
    id 
        id 
    pev(ent,pev_owner)
        if(!
    pev_valid(ent) || !is_user_connected(id))
            return 
    HAM_IGNORED
            
        set_pdata_float
    (ent,47,nst_wpn_get_float3(idNST_WPN_DATA_DELAY)+0.5,4)
        
        return 
    HAM_IGNORED
    }

    public 
    Fw_PrimAttack_Post(ent)
    {
        static 
    id 
        id 
    pev(ent,pev_owner)
        if(!
    pev_valid(ent) || !is_user_connected(id))
            return 
    HAM_IGNORED
        
        set_pdata_float
    (ent,460.3 ,4)
        
        return 
    HAM_IGNORED
    }

    // set distance
    public Fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monsteridhandle)
    {
        if (!
    is_user_connected(id))
            return 
    FMRES_IGNORED;
        
        if (!
    is_user_alive(id))
            return 
    FMRES_IGNORED;
        
        if (
    get_user_weapon(id) != CSW_KNIFE)
            return 
    FMRES_IGNORED;
        
        
        
    pev(idpev_v_anglevector_end)
        
    angle_vector(vector_endANGLEVECTOR_FORWARDvector_end)
        
        
    xs_vec_mul_scalar(vector_endnst_wpn_get_float3(idNST_WPN_DATA_DISTANCE), vector_end)
        
        
    xs_vec_add(vector_startvector_endvector_end)
        
    engfunc(EngFunc_TraceLinevector_startvector_endignored_monsteridhandle)
        
        return 
    FMRES_SUPERCEDE;
    }

    public 
    Fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monsterhullidhandle)
    {
        if (!
    is_user_connected(id))
            return 
    FMRES_IGNORED;
        
        if (!
    is_user_alive(id))
            return 
    FMRES_IGNORED;
        
        if (
    get_user_weapon(id) != CSW_KNIFE)
            return 
    FMRES_IGNORED;
        
        
        
    pev(idpev_v_anglevector_end)
        
    angle_vector(vector_endANGLEVECTOR_FORWARDvector_end)
        
        
    xs_vec_mul_scalar(vector_endnst_wpn_get_float3(idNST_WPN_DATA_DISTANCE), vector_end)
        
        
    xs_vec_add(vector_startvector_endvector_end)
        
    engfunc(EngFunc_TraceHullvector_startvector_endignored_monsterhullidhandle)
        
        return 
    FMRES_SUPERCEDE;
    }

    //

    /* Knife Hook delay */
    public Fw_CmdStart(id,handle,seed)
    {
        static 
    iButton,iEnt
        iButton 
    get_uc(handle,UC_Buttons)
        
    iEnt find_ent_by_owner(-1"weapon_knife"id)
        
        
        if(
    get_user_weapon(id) ==CSW_KNIFE)
        {
            if (
    iButton&IN_ATTACK2)
            {
                if (
    get_gametime() - g_knife_attack[id] < nst_wpn_get_float3(idNST_WPN_DATA_DELAY)+1.0) return
                
    g_knife_attack[id] = get_gametime()

                            
    client_print(idprint_chat"Right Mouse")
                
                
    //set_uc(handle,UC_Buttons,iButton&~IN_ATTACK2)
                
                
    set_weapon_anim(idanim_stab_miss)
                
                if (
    task_exists(id)) remove_task(id)
                
    set_task(nst_wpn_get_float3(idNST_WPN_DATA_DELAY),"task_knife_attack",id)
                
                
    set_pdata_float(iEnt47nst_wpn_get_float3(idNST_WPN_DATA_DELAY)+0.5,4)
            }
        }
    }

    public 
    task_knife_attack(id)
    {
        new 
    ent find_ent_by_owner(-1,"weapon_knife",id)
        
        if(!
    is_user_alive(id) || get_user_weapon(id) != CSW_KNIFE) return
        
    ExecuteHamB(Ham_Weapon_SecondaryAttack,ent)
                            
    client_print(idprint_chat"damage extract")
    }



    public 
    Fw_Weapon_SendWeaponAnim(ent,anim)
    {
        static 
    id 
        id 
    pev(ent,pev_owner)
        if(!
    pev_valid(ent) || !is_user_connected(id)) return HAM_IGNORED
            
        
    if (get_gametime() - g_knife_attack[id] < nst_wpn_get_float3(idNST_WPN_DATA_DELAY)+1.0 && get_user_weapon(id)==CSW_KNIFE || anim == anim_stab
            {
                                       
    client_print(idprint_chat"Anim Blocked %i"anim)
                return 
    HAM_SUPERCEDE
        
    }
        return 
    HAM_IGNORED
    }


    stock set_weapon_anim(idanim)
    {
        
    set_pev(idpev_weaponanimanim)
        
        
    message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM_id)
        
    write_byte(anim)
        
    write_byte(pev(id,pev_body))
        
    message_end()
    }


     
    Chỉnh sửa cuối: 9/5/12
  10. kungfulon

    kungfulon Fire in the hole! Lão Làng GVN Sorcerer

    Tham gia ngày:
    1/5/11
    Bài viết:
    2,535
    Thôi gợi ý cho bạn trẻ là đừng xài cái var g_knife_attack nữa, xài offset đi, nếu ko biết làm thì thôi nghỉ code là vừa[​IMG]
     
    Chỉnh sửa cuối: 9/5/12
  11. buiducduy111

    buiducduy111 Dragon Quest

    Tham gia ngày:
    3/5/11
    Bài viết:
    1,257
    Khi print mình thấy chỗ block anim... Nếu không lỗi gì sẽ print ra là block 5
    Nếu lỗi thì sẽ print ra block 5 và block 0... :))
    Chắc phải hook thêm cái Idle !
     
  12. kungfulon

    kungfulon Fire in the hole! Lão Làng GVN Sorcerer

    Tham gia ngày:
    1/5/11
    Bài viết:
    2,535
    Đọc lại post trên đã edit. Chắc lão tèo gửi bạn trẻ cái file CSO_Skull9 của mình đây mà.
     
  13. buiducduy111

    buiducduy111 Dragon Quest

    Tham gia ngày:
    3/5/11
    Bài viết:
    1,257
    Đầu tiên thấy bác teo làm offset cũng làm theo nhưng vẫn lỗi hệt như thế.
    PHP:
    get_pdata_float với dùng biến lấy time attack chả khác gì nhauLỗi y hêt
     
  14. kungfulon

    kungfulon Fire in the hole! Lão Làng GVN Sorcerer

    Tham gia ngày:
    1/5/11
    Bài viết:
    2,535
    Vậy sao mình ko bị lỗi gì nhỉ, chắc bạn trẻ edit gì đó nữa rồi[​IMG]
     
  15. buiducduy111

    buiducduy111 Dragon Quest

    Tham gia ngày:
    3/5/11
    Bài viết:
    1,257
    Vậy cho mình xem func send anim của bạn được ko ... :1cool_byebye:
     
  16. teobrvt1995

    teobrvt1995 T.E.T.Я.I.S

    Tham gia ngày:
    19/9/10
    Bài viết:
    691
    Heo:tui share duy cái hammer ko phải s9 đâu.
     
  17. buiducduy111

    buiducduy111 Dragon Quest

    Tham gia ngày:
    3/5/11
    Bài viết:
    1,257
    Cuối cùng cũng tìm ra cái mầu chốt của vấn đề là set thêm cái nì :
    PHP:
    set_pdata_float(ent,48,get_gametime(),4// set time idle ~~~
     
  18. dias

    dias Mega Man

    Tham gia ngày:
    17/1/10
    Bài viết:
    3,226
    Nơi ở:
    SEOUL
    Có ai sửa dc lỗi này không ?, cái animation của npc bị bug

    [video=youtube;U8M3cKK3-UY]http://www.youtube.com/watch?v=U8M3cKK3-UY[/URL][/video]

    Code đây. Tôi nghĩ là do cái ent_move_to vì tắt nó đi thì ko bị còn bật lên thì bị :))
    PHP:
    public fw_zb_think(ent)
    {
        if(!
    is_valid_ent(ent))
            return 
    FMRES_IGNORED
            
        
    if(g_dead[ent])
            return 
    FMRES_IGNORED
            
        
    if((pev(entpev_health) - 1000.0) <= 0.0)
        {
            
    g_dead[ent] = 1
            zombie_dead
    (ent)
            
            return 
    FMRES_IGNORED
        
    }
        
        if(
    g_think[ent])
        {
            static 
    victim
            
    static Float:Origin[3], Float:VicOrigin[3], Float:distance
            
            victim 
    FindClosesEnemy(ent)
            
    pev(entpev_originOrigin)
            
    pev(victimpev_originVicOrigin)
            
            
    distance get_distance_f(OriginVicOrigin)
            
            if(
    is_user_alive(victim))
            {
                if(
    distance <= 60.0)
                {            
                    new 
    Float:Ent_Origin[3], Float:Vic_Origin[3]
                    
                    
    pev(entpev_originEnt_Origin)
                    
    pev(victimpev_originVic_Origin)            
                
                    
    npc_turntotarget(entEnt_OriginvictimVic_Origin)
                    
                    
    zombie_attack(entvictim)
                    
    entity_set_float(entEV_FL_nextthinkget_gametime() + 2.0)
                } else {
                    
                    if(
    get_anim(ent) != ANIM_WALK)
                        
    play_anim(entANIM_WALK1.0)
                        
                    new 
    Float:Ent_Origin[3], Float:Vic_Origin[3]
                    
                    
    pev(entpev_originEnt_Origin)
                    
    pev(victimpev_originVic_Origin)
                    
                    
    npc_turntotarget(entEnt_OriginvictimVic_Origin)
                    
    ent_move_to(entvictim150)
        
                    
    entity_set_float(entEV_FL_nextthinkget_gametime() + 0.1)
                }
                
                
    current_target[ent] = victim
            
    } else {
                if(
    get_anim(ent) != ANIM_IDLE)
                    
    play_anim(entANIM_IDLE1.0)
                
                
    entity_set_float(entEV_FL_nextthinkget_gametime() + 1.0)
            }
        } else {
            if(
    get_anim(ent) != ANIM_IDLE)
                
    play_anim(entANIM_IDLE1.0)
                
            
    entity_set_float(entEV_FL_nextthinkget_gametime() + 1.0)        
        }

        return 
    FMRES_IGNORED
    }

    public 
    npc_turntotarget(entFloat:Ent_Origin[3], targetFloat:Vic_Origin[3]) 
    {
        if(
    target
        {
            new 
    Float:newAngle[3]
            
    entity_get_vector(entEV_VEC_anglesnewAngle)
            new 
    Float:Vic_Origin[0] - Ent_Origin[0]
            new 
    Float:Vic_Origin[1] - Ent_Origin[1]

            new 
    Float:radians floatatan(z/xradian)
            
    newAngle[1] = radians * (180 3.14)
            if (
    Vic_Origin[0] < Ent_Origin[0])
                
    newAngle[1] -= 180.0
            
            entity_set_vector
    (entEV_VEC_anglesnewAngle)
        }
    }

    stock ent_move_to(entvictimspeed)
    {
        
    // set vel
        
    static Float:vec[3], Float:Target[3]
        
    pev(victimpev_originTarget)
        
        
    aim_at_origin(entTargetvec)
        
    engfunc(EngFunc_MakeVectorsvec)
        
    global_get(glb_v_forwardvec)
        
    vec[0] *= speed
        vec
    [1] *= speed
        vec
    [2] *= speed
        set_pev
    (entpev_velocityvec)
    }

    stock aim_at_origin(idFloat:target[3], Float:angles[3])
    {
        static 
    Float:vec[3]
        
    pev(id,pev_origin,vec)
        
    vec[0] = target[0] - vec[0]
        
    vec[1] = target[1] - vec[1]
        
    vec[2] = target[2] - vec[2]
        
    engfunc(EngFunc_VecToAngles,vec,angles)
        
    angles[0] *= -1.0angles[2] = 0.0
    }

    stock play_anim(indexsequenceFloat:framerate 1.0)
    {
        if(
    is_valid_ent(index))
        {
            
    entity_set_int(indexEV_INT_sequencesequence)
            
    entity_set_float(indexEV_FL_animtimeget_gametime())
            
    entity_set_float(indexEV_FL_framerate,  framerate)
            
    entity_set_float(indexEV_FL_frame0.0)
            
        }
    }  
     
  19. buiducduy111

    buiducduy111 Dragon Quest

    Tham gia ngày:
    3/5/11
    Bài viết:
    1,257
    tự sướng!
    [YOUTUBE]frL4ThEvfJk&feature=youtu.be[/YOUTUBE]
     
    Chỉnh sửa cuối: 10/5/12
  20. teobrvt1995

    teobrvt1995 T.E.T.Я.I.S

    Tham gia ngày:
    19/9/10
    Bài viết:
    691
    Chết đi. Ai chỉ làm cái anim cho player coi nào!
     

Chia sẻ trang này