[AMX][Codes] Hỏi đáp về các code của AMX ...

  • Thread starter Thread starter sontung0
  • Ngày gửi Ngày gửi
Status
Không mở trả lời sau này.
Haha...Hữu Cường từng làm rồi đấy, khoản này để ông ta xử lý, bác không phải lo.. Hữu Cường từng show tôi xem cái icon nhân vật đó thay đổi màu khi hp xuống còn 25hp nữa cơ mà.
 
ai biết zombie hell là cái gì ^^
tự làm lại tự đầu đấy
hồi đầu tham khảo cái ZP biết thêm khá nhiều thứ

eidt rez của Cf hả
trên web mpgh.net có 1 bài dậy cách edit rez để đổi v model trong CF nhưng không dùng đc cho CF VN
cứ edit 1 cái là nó báo lỗi ==> out ^^
http://www.mpgh.net/forum/194-crossfire-mods-rez-modding/160387-how-make-guns-into-knife.html

Zombie hell trong CSBU ấy tưởng bác make từ đấy mà ra
 
mún bắt hành động nhấn B (buy) thì dùng gì vậy ? , E là IN_USE , B là gì ?
 
Khác nhiều, zombie hell cấu trúc đơn giản vẫn là ct và t. Nó dùng code không cho phép T dùng súng ( nhưng thấy nó nhặt lên được và không bắn hay chém gì được ), ngăn không cho join phe T ( trừ bot ), khi player connect vào thì bot tự động add vào phe T, etc.. ZS của anh Tùng chắc cũng dùng những code gần thế..
 
mà ông cài ZP cho CSv48 chưa ??
dc ko
 
Chưa down được v48 nên không test dc..
P.s: Ngủ.
 
@sontung0: anh cho em xin đoạn code double wpn cho knife được ko :( pls
 
đã làm đâu mà xin vả lại để giữ bí mật share lung tung thì còn gọi ji là mod nữa
 
ai có plugin tăng range cho knife ko share mình với :|
 
có lẽ nên dựa theo code nst_knife mà làm knife thôi
 
Code đó hình như redplane làm cho CSCF_knife thì phải.

[video]mS2aUWay9D4[/video]
Cái hud message này thì nên ứng dụng như thế nào cho hay nhỉ :>
 
hiện số damge mình đánh vào enemy :D , hoặc là khi có 1 status nào đó thay đổi thì làm cái hud đó bay lên ( như mấy game online ý : hiện damge , thay đổi tiền , + exp .... )

share tui code nst_knife đi :|
 
PHP:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <nst_player>

#define PLUGIN "NST Wpn Hand"
#define VERSION "1.0"
#define AUTHOR "NST"

new cvar_run
new g_wpn[33], g_silen[33][CSW_P90+1], g_attack[33], g_anim[33], g_glock[33], g_change[33]
const SILENT_BS	= ((1<<CSW_USP)|(1<<CSW_M4A1))
const PISTOLS_BS = ((1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE))
const m_iId = 43
const m_fSilent = 74
enum
{
	ANIM_DRAW = 1,
	ANIM_SHOOT,
	ANIM_SHOOT2,
	ANIM_SHOOT_EMPTY
}
new const V_KNIFE[2][] = {"models/v_knife.mdl", "models/nst_wpn/v_knife_w.mdl"}
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
			"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
			"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
			"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
			"weapon_ak47", "weapon_knife", "weapon_p90" }

new g_fwWeaponDraw, g_fwDummyResult
const NOSHOOT2_BS = ((1<<CSW_KNIFE)|(1<<CSW_GLOCK18)|(1<<CSW_ELITE))



// ########################## MAIN PLUGINS ##########################
public plugin_natives()
{
	register_native("nst_wpn_send_weapon_anim", "natives_send_weapon_anim", 1)
}
public plugin_precache()
{
	engfunc(EngFunc_PrecacheModel, V_KNIFE[0])
	engfunc(EngFunc_PrecacheModel, V_KNIFE[1])
}
public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	cvar_run = register_cvar("nst_wpn_hand", "1")
	
	for (new i=1; i<=CSW_P90; i++)
	{
		if (strlen(WEAPONENTNAMES[i]))
		{
			RegisterHam(Ham_Weapon_SendWeaponAnim, WEAPONENTNAMES[i], "fw_Weapon_SendWeaponAnim")
			RegisterHam(Ham_Weapon_PrimaryAttack, WEAPONENTNAMES[i], "fw_primary_attack_post",1) 
			RegisterHam(Ham_Item_PostFrame, WEAPONENTNAMES[i], "fw_Item_PostFrame")
		}
	}
	
	register_event("CurWeapon","checkWeapon","be","1=1")
	register_forward(FM_CmdStart, "fw_CmdStart")
	//register_concmd("qq", "qq")
	
	// Custom Forwards
	g_fwWeaponDraw = CreateMultiForward("nst_wpn_weapon_draw", ET_IGNORE, FP_CELL)
}

// ########################## MAIN PUBLIC ##########################
public fw_Item_PostFrame(ent)
{
	new id = pev(ent, pev_owner)
	if (!is_user_connected(id)) return HAM_IGNORED

	// check silent
	static iId ; iId = get_pdata_int(ent, m_iId, 4)
	if (SILENT_BS & (1<<iId))
	{
		if (get_pdata_int(ent, m_fSilent, 4)) g_silen[id][iId] = 1
		else g_silen[id][iId] = 0
	}
	
	return HAM_IGNORED
}
public fw_Weapon_SendWeaponAnim(ent, iAnim, skiplocal, body)
{
	new id = pev(ent, pev_owner)
	if (!is_user_connected(id)) return HAM_IGNORED

	g_attack[id] = 0
	playanim(id, iAnim)

	// Fix Anim Glock18
	new classname[64]
	pev(ent, pev_classname, classname, charsmax(classname))
	new idwpn = cs_weapon_name_to_id(classname)
	
	if (iAnim == get_num_anim(id, idwpn, ANIM_DRAW) && g_wpn[id] == idwpn)
	{
		g_change[id] = 1
		ExecuteForward(g_fwWeaponDraw, g_fwDummyResult, id)
		
		//client_print(0, print_chat, "[%s][%s]", g_weapon_models[id][0], g_weapon_models[id][1])
		return HAM_SUPERCEDE
	}
	
	if (idwpn == CSW_GLOCK18)
	{
		if (iAnim == 8 || iAnim == 11) g_anim[id] = iAnim
		else if (iAnim == 0 || iAnim == 1 || iAnim == 2)
		{
			g_glock[id] = 1
			g_anim[id] = iAnim
		}
		else g_anim[id] = 0
	}
	
	//client_print(0, print_chat, "[%i][%i][%i][%i]", id, iAnim, skiplocal, body)
	return HAM_IGNORED
}
public fw_primary_attack_post(ent)
{
	new id = pev(ent, pev_owner)
	if (!is_user_connected(id)) return HAM_IGNORED

	new plrClip, plrAmmo
	get_user_weapon(id, plrClip , plrAmmo)
	if (plrClip)
	{
		g_attack[id] = 1
	}
	
	return HAM_IGNORED
}
public checkWeapon(id)
{
	new plrClip, plrAmmo, plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
	
	if (g_attack[id])
	{
		new ani
		if (!plrClip) ani = get_num_anim(id, plrWeapId, ANIM_SHOOT_EMPTY)
		else if (!ani) ani = get_num_anim(id, plrWeapId, ANIM_SHOOT)
		
		playanim(id, ani)
		g_attack[id] = 0
	}
	
	if (plrWeapId == CSW_KNIFE)
	{
		new model_v[64]
		pev(id, pev_viewmodel2, model_v, charsmax(model_v))
		if (equal(model_v, V_KNIFE[0]))
		{
			if (nst_get_user_sex(id) == 2) set_pev(id, pev_viewmodel2, V_KNIFE[1])
			else set_pev(id, pev_viewmodel2, V_KNIFE[0])
		}
	}
	//client_print(id, print_chat, "2[%i]", plrClip)

}
public fw_CmdStart(id, uc_handle, seed)
{
	//new num = pev(id, pev_weaponanim)
	//client_print(id, print_chat, "AT[%i]", g_silen[id])
	
	if (!is_user_alive(id)) return;
	
	new plrClip, plrAmmo, plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

	if (g_wpn[id] != plrWeapId || g_change[id])
	{
		new anim = get_num_anim(id, plrWeapId, ANIM_DRAW)
		if (plrWeapId == CSW_GLOCK18)
		{
			anim = max(anim, g_anim[id])
			g_anim[id] = 0
		}
		
		playanim(id, anim)
		
		g_wpn[id] = plrWeapId
		g_attack[id] = 0
		g_change[id] = 0
	}
	else if (!g_attack[id])
	{
		if (plrWeapId == CSW_GLOCK18 && g_glock[id])
		{
			playanim(id, g_anim[id])
			g_glock[id] = 0
			g_anim[id] = 0
		}
	}
}
public qq(id)
{

}

// ########################## FUNCTION ##########################
playanim(player, anim)
{
	if (!is_user_alive(player) || !get_pcvar_num(cvar_run)) return;
	if (g_wpn[player] == CSW_ELITE && g_attack[player]) return;
	
	new hand = nst_get_user_hand(player)
	if (!hand) return;
	
	//set_pev(player, pev_weaponanim, anim)
	message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
	write_byte(anim)
	write_byte(hand)
	message_end()
}
playanim2(player, anim)
{
	new hand = nst_get_user_hand(player)
	
	//set_pev(player, pev_weaponanim, anim)
	message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
	write_byte(anim)
	write_byte(hand)
	message_end()
}
cs_weapon_name_to_id(const weapon[])
{
	static i
	for (i = 0; i < sizeof WEAPONENTNAMES; i++)
	{
		if (equal(weapon, WEAPONENTNAMES[i]))
			return i;
	}
	
	return 0;
}
get_num_anim(id, wpn, type)
{
	// type = 1 : draw - type = 2 : shoot
	new draw, shoot, shoot_empty
	switch(wpn)
	{
		case CSW_AK47:
		{
			draw = 2
			shoot = 3
		}
		case CSW_AUG:
		{
			draw = 2
			shoot = 3
		}
		case CSW_AWP:
		{
			draw = 5
			shoot = 1
		}
		case CSW_DEAGLE:
		{
			draw = 5
			shoot = 1
			shoot_empty = 3
		}
		case CSW_ELITE:
		{
			draw = 15
			shoot = 6
			shoot_empty = 7
		}
		case CSW_FAMAS:
		{
			draw = 2
			shoot = 3
		}
		case CSW_FIVESEVEN:
		{
			draw = 5
			shoot = 1
			shoot_empty = 3
		}
		case CSW_G3SG1:
		{
			draw = 4
			shoot = 1
		}
		case CSW_GALIL:
		{
			draw = 2
			shoot = 3
		}
		case CSW_GLOCK18:
		{
			draw = 8
			shoot = 5
			shoot_empty = 6
		}
		case CSW_KNIFE:
		{
			draw = 3
			shoot = 1
		}
		case CSW_M3:
		{
			draw = 6
			shoot = 1
		}
		case CSW_M4A1:
		{
			draw = 12
			shoot = 8
		}
		case CSW_M249:
		{
			draw = 4
			shoot = 1
		}
		case CSW_MAC10:
		{
			draw = 2
			shoot = 3
		}
		case CSW_MP5NAVY:
		{
			draw = 2
			shoot = 3
		}
		case CSW_P90:
		{
			draw = 2
			shoot = 3
		}
		case CSW_P228:
		{
			draw = 6
			shoot = 1
			shoot_empty = 4
		}
		case CSW_SCOUT:
		{
			draw = 4
			shoot = 1
		}
		case CSW_SG550:
		{
			draw = 4
			shoot = 1
		}
		case CSW_SG552:
		{
			draw = 2
			shoot = 3
		}
		case CSW_TMP:
		{
			draw = 2
			shoot = 3
		}
		case CSW_UMP45:
		{
			draw = 2
			shoot = 3
		}
		case CSW_USP:
		{
			draw = 14
			shoot = 9
			shoot_empty = 12
		}
		case CSW_XM1014:
		{
			draw = 6
			shoot = 1
		}
		case CSW_C4:
		{
			draw = 1
		}
		case CSW_HEGRENADE:
		{
			draw = 3
		}
		case CSW_FLASHBANG:
		{
			draw = 3
		}
		case CSW_SMOKEGRENADE:
		{
			draw = 3
		}
	}
	
	// silen wpn
	if (wpn == CSW_M4A1 && g_silen[id][CSW_M4A1])
	{
		draw -= 7
		shoot -= 7
		shoot_empty -= 7
	}
	else if (wpn == CSW_USP && g_silen[id][CSW_USP])
	{
		draw -= 8
		shoot -= 8
		shoot_empty -= 8
	}
	
	// random anim shoot2
	if (!(NOSHOOT2_BS & (1<<wpn))) shoot += random_num(0, 1)

	// return value
	if (type == ANIM_DRAW) return draw
	else if (type == ANIM_SHOOT) return shoot
	else if (type == ANIM_SHOOT_EMPTY) return shoot_empty
	
	return 0
}

// ########################## NATIVES ##########################
public natives_send_weapon_anim(player, anim)
{
	playanim2(player, anim)
	return 1
}
về tự vọc nhớ
cậu copy file hamsandwich.dll từ cso nst qua thì mới chạy đc

Đã vọc xong ! Có vài chỗ thắc mắc mún nhờ Tùng giải thích dùm.
1.nst_get_user_hand(player) return 1 hoặc 2 thôi đúng không ?
2. message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
write_byte(anim)
write_byte(hand)<<========== Chỗ này sẽ tự động hiểu là lấy animation + sub model nào hả cậu?
message_end()
3. Cậu giải thích cơ chế của các sub_hand (nam,nữ ) dùm tớ với. Lưu theo array hả? Tớ không thấy đoạn code nào nhắc đến select submodel 1, 2 gì hết !:):)
 
hiện số damge mình đánh vào enemy :D , hoặc là khi có 1 status nào đó thay đổi thì làm cái hud đó bay lên ( như mấy game online ý : hiện damge , thay đổi tiền , + exp .... )

share tui code nst_knife đi :|

Nên dùng để nêu 1 sự kiện nào đó xảy ra =)), officer phe ta chết, con tin bị lôi đi, nemesis vừa diết bao nhiêu người rồi gì và này nọ.
 
Hướng dẫn chung về ngôn ngữ lập trình.
 
ai share tui code fastrun + knife range cái :(
 
Khiếp.. Ông tạo server chơi với bạn mà khoái chi tiết rứa 8-x.. Fast run hình như anh Tùng show rồi.
 
tìm mỏi mắt ko thấy :(( ko bít tìm nhìu wá mắt mờ nên bỏ xót hay ko mà sáng giờ bới tung cái Hỏi đáp code amx này rùi vẫn ko thấy o.O , tạo cho bạn bè chơi cũng chi tiết chứ , chơi cũng đông ý mà :x
 
Hôm Qua Ngồi Vọc Trên Mạng Thì Kiếm Được 1 vài Cái Book Về Pawn:
Hy vọng có ích cho anh em mới bắt đầu:

Định Dạng: PDF

Download: http://www.mediafire.com/?f9hrsbqko7vcir4
Size: 85kb

kiếm dc ak giỏi nhỉ
@mrkun:sontung post rồi mà tìm lại kĩ xem ^^
@Chief:còn thiếu con Zombie mập thôi là đủ class CSO rồi
 
Status
Không mở trả lời sau này.
Back
Top