• [THÔNG BÁO] CẢNH BÁO LỪA ĐẢO MẠO DANH QUẢN TRỊ VIÊN
    Chào các thành viên GameVN,
    Dạo gần đây tình trạng lừa đảo scamming và phishing đang gia tăng. Ban quản trị GameVN xin lưu ý toàn bộ thành viên:
    KHÔNG/ ĐỪNG / CẤM cho bất kỳ ai tự xưng là quản trị viên của server vay tiền.
    Mọi hành vi lân la làm quen, tự tiện nhắn tin trên Discord, Facebook, Zalo hoặc các nền tảng mạng xã hội khác,
    núp bóng dưới danh nghĩa sinh hoạt của quản trị viên, đều có tỉ lệ rất, rất cao là lừa đảo.
    Nếu có tài khoản lạ add friend hoặc nhắn tin xin tiền dưới danh nghĩa admin:
    Block ngay
    Report ngay
    Không chuyển khoản, không cung cấp thông tin cá nhân


    Quản trị viên của forum và Discord server GameVN không có nhu cầu vay tiền thành viên.
    Không có lý do nào để admin chủ động kết bạn rồi xin tiền.
    Mọi thông báo chính thức chỉ được đăng trên kênh thông báo của server và topic chính thức trên forum.
    Tin nhắn riêng từ tài khoản lạ không phải thông báo của ban quản trị.
    Cảm ơn các bạn đã chú ý và cùng giữ cộng đồng an toàn.
    — Ban quản trị GameVN

    Tắt thông báo bằng nút X bên góc phải của bảng thông báo*

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

  • Thread starter Thread starter Orpheus
  • Ngày gửi Ngày gửi
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.
 
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)
 
^
^
- cho code offset xem :)). kiểm tra nextattack = 0.0 à :))
 
Thì nó check rồi đó. Nhỡ player đè phím Attack2 thì sao. nó chém liên thanh :))
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)=='
 
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(PLUGIN, VERSION, AUTHOR)
	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(id, NST_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,46, 0.3 ,4)
	
	return HAM_IGNORED
}

// set distance
public Fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monster, id, handle)
{
	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(id, pev_v_angle, vector_end)
	angle_vector(vector_end, ANGLEVECTOR_FORWARD, vector_end)
	
	xs_vec_mul_scalar(vector_end, nst_wpn_get_float3(id, NST_WPN_DATA_DISTANCE), vector_end)
	
	xs_vec_add(vector_start, vector_end, vector_end)
	engfunc(EngFunc_TraceLine, vector_start, vector_end, ignored_monster, id, handle)
	
	return FMRES_SUPERCEDE;
}

public Fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monster, hull, id, handle)
{
	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(id, pev_v_angle, vector_end)
	angle_vector(vector_end, ANGLEVECTOR_FORWARD, vector_end)
	
	xs_vec_mul_scalar(vector_end, nst_wpn_get_float3(id, NST_WPN_DATA_DISTANCE), vector_end)
	
	xs_vec_add(vector_start, vector_end, vector_end)
	engfunc(EngFunc_TraceHull, vector_start, vector_end, ignored_monster, hull, id, handle)
	
	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(id, NST_WPN_DATA_DELAY)+1.0) return
			g_knife_attack[id] = get_gametime()
			
			//set_uc(handle,UC_Buttons,iButton&~IN_ATTACK2)
			
			set_weapon_anim(id, anim_stab_miss)
			
			if (task_exists(id)) remove_task(id)
			set_task(nst_wpn_get_float3(id, NST_WPN_DATA_DELAY),"task_knife_attack",id)
			
			set_pdata_float(iEnt, 47, nst_wpn_get_float3(id, NST_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(id, NST_WPN_DATA_DELAY)+1.0 && get_user_weapon(id)==CSW_KNIFE || anim == anim_stab) return HAM_SUPERCEDE
	
	return HAM_IGNORED
}


stock set_weapon_anim(id, anim)
{
	set_pev(id, pev_weaponanim, anim)
	
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
	write_byte(anim)
	write_byte(pev(id,pev_body))
	message_end()
}
 
P/S: không ai giúp à :(( ......... làm đủ kiểu vẫn không được ! thỉnh thoảng lại lỗi !
Fix it by yourself
yao_ming_face2_normal.png
 
Chỉnh sửa cuối:
Thế không biết ghi log và print để tìm lỗi à
yao_ming_face2_normal.png

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(PLUGIN, VERSION, AUTHOR)
	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(id, NST_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,46, 0.3 ,4)
	
	return HAM_IGNORED
}

// set distance
public Fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monster, id, handle)
{
	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(id, pev_v_angle, vector_end)
	angle_vector(vector_end, ANGLEVECTOR_FORWARD, vector_end)
	
	xs_vec_mul_scalar(vector_end, nst_wpn_get_float3(id, NST_WPN_DATA_DISTANCE), vector_end)
	
	xs_vec_add(vector_start, vector_end, vector_end)
	engfunc(EngFunc_TraceLine, vector_start, vector_end, ignored_monster, id, handle)
	
	return FMRES_SUPERCEDE;
}

public Fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monster, hull, id, handle)
{
	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(id, pev_v_angle, vector_end)
	angle_vector(vector_end, ANGLEVECTOR_FORWARD, vector_end)
	
	xs_vec_mul_scalar(vector_end, nst_wpn_get_float3(id, NST_WPN_DATA_DISTANCE), vector_end)
	
	xs_vec_add(vector_start, vector_end, vector_end)
	engfunc(EngFunc_TraceHull, vector_start, vector_end, ignored_monster, hull, id, handle)
	
	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(id, NST_WPN_DATA_DELAY)+1.0) return
			g_knife_attack[id] = get_gametime()

                        client_print(id, print_chat, "Right Mouse")
			
			//set_uc(handle,UC_Buttons,iButton&~IN_ATTACK2)
			
			set_weapon_anim(id, anim_stab_miss)
			
			if (task_exists(id)) remove_task(id)
			set_task(nst_wpn_get_float3(id, NST_WPN_DATA_DELAY),"task_knife_attack",id)
			
			set_pdata_float(iEnt, 47, nst_wpn_get_float3(id, NST_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(id, print_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(id, NST_WPN_DATA_DELAY)+1.0 && get_user_weapon(id)==CSW_KNIFE || anim == anim_stab) 
        {
                                   client_print(id, print_chat, "Anim Blocked %i", anim)
            return HAM_SUPERCEDE
	}
	return HAM_IGNORED
}


stock set_weapon_anim(id, anim)
{
	set_pev(id, pev_weaponanim, anim)
	
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
	write_byte(anim)
	write_byte(pev(id,pev_body))
	message_end()
}
 
Chỉnh sửa cuối:
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ị !
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
yao_ming_face2_normal.png
 
Chỉnh sửa cuối:
Bạn trẻ phải biết print mọi thứ chứ ko phải 1 thứ đâu nhé
yao_ming_face2_normal.png

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 !
 
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 !
Đọ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à.
 
Đầ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ì nhau. Lỗi y hêt
 
Đầ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ì nhau. Lỗi y hêt
Vậy sao mình ko bị lỗi gì nhỉ, chắc bạn trẻ edit gì đó nữa rồi
yao_ming_face2_normal.png
 
Heo:tui share duy cái hammer ko phải s9 đâu.
 
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 ~~~
 
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(ent, pev_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(ent, pev_origin, Origin)
        pev(victim, pev_origin, VicOrigin)
        
        distance = get_distance_f(Origin, VicOrigin)
        
        if(is_user_alive(victim))
        {
            if(distance <= 60.0)
            {            
                new Float:Ent_Origin[3], Float:Vic_Origin[3]
                
                pev(ent, pev_origin, Ent_Origin)
                pev(victim, pev_origin, Vic_Origin)            
            
                npc_turntotarget(ent, Ent_Origin, victim, Vic_Origin)
                
                zombie_attack(ent, victim)
                entity_set_float(ent, EV_FL_nextthink, get_gametime() + 2.0)
            } else {
                
                if(get_anim(ent) != ANIM_WALK)
                    play_anim(ent, ANIM_WALK, 1.0)
                    
                new Float:Ent_Origin[3], Float:Vic_Origin[3]
                
                pev(ent, pev_origin, Ent_Origin)
                pev(victim, pev_origin, Vic_Origin)
                
                npc_turntotarget(ent, Ent_Origin, victim, Vic_Origin)
                ent_move_to(ent, victim, 150)
    
                entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.1)
            }
            
            current_target[ent] = victim
        } else {
            if(get_anim(ent) != ANIM_IDLE)
                play_anim(ent, ANIM_IDLE, 1.0)
            
            entity_set_float(ent, EV_FL_nextthink, get_gametime() + 1.0)
        }
    } else {
        if(get_anim(ent) != ANIM_IDLE)
            play_anim(ent, ANIM_IDLE, 1.0)
            
        entity_set_float(ent, EV_FL_nextthink, get_gametime() + 1.0)        
    }

    return FMRES_IGNORED
}

public npc_turntotarget(ent, Float:Ent_Origin[3], target, Float:Vic_Origin[3]) 
{
    if(target) 
    {
        new Float:newAngle[3]
        entity_get_vector(ent, EV_VEC_angles, newAngle)
        new Float:x = Vic_Origin[0] - Ent_Origin[0]
        new Float:z = Vic_Origin[1] - Ent_Origin[1]

        new Float:radians = floatatan(z/x, radian)
        newAngle[1] = radians * (180 / 3.14)
        if (Vic_Origin[0] < Ent_Origin[0])
            newAngle[1] -= 180.0
        
        entity_set_vector(ent, EV_VEC_angles, newAngle)
    }
}

stock ent_move_to(ent, victim, speed)
{
    // set vel
    static Float:vec[3], Float:Target[3]
    pev(victim, pev_origin, Target)
    
    aim_at_origin(ent, Target, vec)
    engfunc(EngFunc_MakeVectors, vec)
    global_get(glb_v_forward, vec)
    vec[0] *= speed
    vec[1] *= speed
    vec[2] *= speed
    set_pev(ent, pev_velocity, vec)
}

stock aim_at_origin(id, Float: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.0, angles[2] = 0.0
}

stock play_anim(index, sequence, Float:framerate = 1.0)
{
    if(is_valid_ent(index))
    {
        entity_set_int(index, EV_INT_sequence, sequence)
        entity_set_float(index, EV_FL_animtime, get_gametime())
        entity_set_float(index, EV_FL_framerate,  framerate)
        entity_set_float(index, EV_FL_frame, 0.0)
        
    }
}
 
tự sướng!
[YOUTUBE]frL4ThEvfJk&feature=youtu.be[/YOUTUBE]
 
Chỉnh sửa cuối:
Chết đi. Ai chỉ làm cái anim cho player coi nào!
 
Back
Top