[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
@buiducduy:
- sontung0 đã share con deimos có play player anim. mở ra mà xem, phải set idle linh tinh gì gì rồi mới set seq :))
 
...có đâu? trong đó chỉ có play anim của hand à =="
 
Bác nào rảnh check dùm em code này với
Mặc dù tham khảo code của bác teo rồi mà anim vẫn bị lỗi... (thỉnh thoảng)

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
}

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)
		{
			set_uc(handle,UC_Buttons,iButton&~IN_ATTACK2)
			
			set_weapon_anim(id, anim_stab)
			
			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_pdata_float(ent,47, 4)>0.0 && get_user_weapon(id)==CSW_KNIFE) 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()
}
 
- CmdStart nó chạy liên tục khi không hoặc có giữ nút. Chú định cho nó chém liên hoàn cước à ?

PHP:
/* 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)
        {
            set_uc(handle,UC_Buttons,iButton&~IN_ATTACK2)
            
            set_weapon_anim(id, anim_stab)
            
            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)
        }
    }
}
 
- CmdStart nó chạy liên tục khi không hoặc có giữ nút. Chú định cho nó chém liên hoàn cước à ?
set_uc(handle,UC_Buttons,iButton&~IN_ATTACK2)
Dòng này để làm cảnh à bạn trẻ=))
 
Duy:không nên dùng secondaryattack mà nên dùmg primaryattack.như vậy anim sẽ không bị loạn.
@heo:chỉ tui cái anim p model cho dual weapon model đi.
 
P/S: EM nghĩ code này đã hoàn hảo nhất rồi mà thỉnh thoảng nó vẫn lỗi :(( help me...
Lỗi: Chém gió thì không sao nhưng khi đang chém gió mà di cái tâm vào tường hay vào người thằng nào thì lại bắt đầu chạy anim stab mớ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)
			
			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) 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: EM nghĩ code này đã hoàn hảo nhất rồi mà thỉnh thoảng nó vẫn lỗi :(( help me...
Lỗi: Chém gió thì không sao nhưng khi đang chém gió mà di cái tâm vào tường hay vào người thằng nào thì lại bắt đầu chạy anim stab mới :((
Đề nghị bạn trẻ tự tìm hiểu chứ đừng có lên đây kêu gào, nếu cứ thế này thì trình độ sẽ kém đi chứ chả lên đc đâu.
 
Đề nghị bạn trẻ tự tìm hiểu chứ đừng có lên đây kêu gào, nếu cứ thế này thì trình độ sẽ kém đi chứ chả lên đc đâu.

CHết... thiếu chữ
@DIAS :2cool_misdoubt:
 
Chỉnh sửa cuối:
@kungfulon:
- cái đó block nút cũ b-(. làm gì là delay
 
Thằng buiducduy nó tạo ra attack mới mà b-(. player giữ attack2 liên tục -> CmdStart chạy liên tục thì ko phải nó set task liên tục để chạy code attack liên tục à :))
 
Chỉnh sửa cuối:
Thằng buiducduy nó tạo ra attack mới mà b-(. CmdStart chạy liên tục thì ko phải nó set task liên tục để chạy code à :))
Thế ko thấy nó check IN_ATTACK2 àb-(
 
Thì nó check rồi đó. Nhỡ player đè phím Attack2 thì sao. nó chém liên thanh :))
 
Chỉnh sửa cuối:
Back
Top