[AMX][Plugins]Hướng dẫn làm plugin thêm súng mới

Status
Không mở trả lời sau này.
Em show hàng cái =))
cs_italy0009.jpg

Anconda zoom được nè
Kriss Super V cũng zoom được
cs_italy0012.jpg

Dragunov sau khi edit mấy cái Reg Cvar lên thành vũ khí vô đối bắn nhanh hệt như ak47 vậy :))
cs_italy0018.jpg

Đột Kích có vừa cầm minigun vừa đi vừa bắn thế này không =))
cs_italy0034.jpg

Spas12 edit dmg chỉ cần 1 phát là đi lun
P/s: trước em cũng bị mấy lỗi như các bác chauongky
sau đó ra quán mua cái đĩa Cs 1.6 non stream về không biết path bao nhiêu copy addons vs model + sound về thế là hêt :))
bác nào cần không em up cả file cs lên mf cho ?
.
___________Auto Merge________________

.
Em show hàng cái =))
cs_italy0009.jpg

Anconda zoom được nè
Kriss Super V cũng zoom được
cs_italy0012.jpg

cs_italy0013.jpg

Dragunov sau khi edit mấy cái Reg Cvar lên thành vũ khí vô đối bắn nhanh hệt như ak47 vậy :))
cs_italy0018.jpg

Đột Kích có vừa cầm minigun vừa đi vừa bắn thế này không =))
cs_italy0034.jpg

Spas12 edit dmg chỉ cần 1 phát là đi lun
P/s: trước em cũng bị mấy lỗi như các bác chauongky

sau đó ra quán mua cái đĩa Cs 1.6 non stream về không biết path bao nhiêu copy addons vs model + sound về thế là hêt :))
bác nào cần không em up cả file cs lên mf cho ?
@ sontung0: em không tìm thấy nút thanks bác chỉ cho em em thank cho đúng 10 cái :))
 
1,bản update mới của sontung có cái file plugins-nstwpn.ini
và file nst_wpn.inc
2 file đó có cần phải động chạm j` vao` khi thêm súng vô ko
hay chỉ cần copy rùi để đó thui
2. ở bản cập nhật 1-12, khi thêm súng thì chỉ cần thêm tên plugin vừa rip vào plugin.ini thui hay thêm vào plugins-nstwpn.ini
3, menu mua súng cua nst và menu mua súng của csdm độc lập với nhau hay chung 1 menu khi chơi ở chế độ csdm , mún add súng của plugin nst vào menu mua súng của csdm thì làm thế nào ( link bản update thêm súng của bác anhangde cho bản mod cs surprise bị die nên ko học hỏi dc :d )

some body help me please =((=((=((
 
không cần thêm gì vào plugins-nstwpn.ini bạn chỉ cần thêm NST_WPN[tên súng or hiệu ứng].amxx vào plungin.ini là đủ
 
không cần thêm gì vào plugins-nstwpn.ini bạn chỉ cần thêm NST_WPN[tên súng or hiệu ứng].amxx vào plungin.ini là đủ
thanks
3, menu mua súng cua nst và menu mua súng của csdm độc lập với nhau hay chung 1 menu khi chơi ở chế độ csdm , mún add súng của plugin nst vào menu mua súng của csdm thì làm thế nào ( link bản update thêm súng của bác anhangde cho bản mod cs surprise bị die nên ko học hỏi dc )
còn cái này ai giúp dùm với
 
@zaikon : up cái đấy làm gì, ông bị lỗi giống tui có thể do CSCz, còn CS 1.6 chạy ngon ===>>> ko ai cần cả, tự rip sướng hơn :-w:-w:-w:-w:-w
 
up xong rồi đây là bản cs 1.6 có đủ bot rồi + mấy khẩu súng tớ add từ 4r vào nữa bác nào lỗi thì down nha! yên tâm tớ test thử rồi mod không bị lỗi văng ra deskop đâu :))

link gì đấy?___
zaikon là clone của ông nào à?
 
Ô zờ em mí biết CSZ là cái gì vs CS là cái gì bác thông cảm =((
.
___________Auto Merge________________

.
đúng là ngu rốt + nhiệt tình :))
 
:D Chuẩn ko cần chỉnh . Thx bài viết này . Test thôi;))
 
Hình như số đạn của clip không đc set lên quá 100 thì phải ~:>. Hôm qua set cho cây minigun là 150 thì vào game bị giáng xuống còn 120. Cây Mg3 set 200 viên thì là 64 ~:>
 
à mà ai bít lỗi gì đây ko ?

t820kpox7ib94ojvgf9.jpg

huhu bị giống anh lun, em đã thử down mấy bản đã hoàn thành của forum mình và thay hết code zô wả nhiên là được, chỉ mỗi tội zô chỉnh "nst_wpn" tạm dịch là ko tìm thấy câu lênh hay là ko có câu lệnh ji đó :((. ai share cho em file plugin.ini nguyên mẫu cái, cái của nhà em nó bị oke bb rùi(chơi zombie h ko bik chuyển sao để ra cái plugins nguyên mẫu :(()
 
huhu bị giống anh lun, em đã thử down mấy bản đã hoàn thành của forum mình và thay hết code zô wả nhiên là được, chỉ mỗi tội zô chỉnh "nst_wpn" tạm dịch là ko tìm thấy câu lênh hay là ko có câu lệnh ji đó :((. ai share cho em file plugin.ini nguyên mẫu cái, cái của nhà em nó bị oke bb rùi(chơi zombie h ko bik chuyển sao để ra cái plugins nguyên mẫu :(()

có lẽ cái súng mà bạn chỉnh xem coi cái hình trên của bác sniper là xem coi cái plugin súng đó phù hợp với súng nào :| những mod của tui làm rất là kĩa của amition của M4A1 nên làm ko bị lỗi gì cả :) bác xem lại cây M400 đi :)
còn bạn thì vào game ghi thử lại vào plugin.ini xem :| Mặc định mua súng là Nst_Wpn_anaconda,.....Còn nhiều lắm hoặc lỗi như trên
 
có lẽ cái súng mà bạn chỉnh xem coi cái hình trên của bác sniper là xem coi cái plugin súng đó phù hợp với súng nào :| những mod của tui làm rất là kĩa của amition của M4A1 nên làm ko bị lỗi gì cả :) bác xem lại cây M400 đi :)
còn bạn thì vào game ghi thử lại vào plugin.ini xem :| Mặc định mua súng là Nst_Wpn_anaconda,.....Còn nhiều lắm hoặc lỗi như trên

bạn up giùm mình file sma của bạn dc ko ....please:D
 
WTF
sontung cho hỏi tại sao file ZP_Extra_***.sma lại ko có phần set ammopacks khi mua thế
chẵng lẽ những súng mới thêm trong ZP đều miễn phí hết à
mong anh fix lỗi này ngay lập tức :-w
 
WTF
sontung cho hỏi tại sao file ZP_Extra_***.sma lại ko có phần set ammopacks khi mua thế
chẵng lẽ những súng mới thêm trong ZP đều miễn phí hết à
mong anh fix lỗi này ngay lập tức :-w

ax có mà pác ề nghị pác xem lại cái có cái đoạn
code :
Mã:
register_plugin(plugin_name, VERSION, AUTHOR)
	g_itemid = zp_register_extra_item(name_weapon, [B]15[/B], ZP_TEAM_HUMAN)
đóa sửa ở đó mà lên giá :)
 
thanks nhìu :-*
sory tại mình ko để ý
 
hìhì hok sao chỉ cần để ý kĩ tí trc khi post bài là oke roài hìhì mà tiện đây tui up cái code để add thêm dao zô lun nhá(vẫn dựa trên file của "SẾP BỰ" do đợi "BIG BOSS" lâu wa nên up lun cho ae coi thử, em bị lỗi cái là đổi kiếm nhật xong wa dao đc mà đổi kiếm roài thì ko wa ji đc nữa cho đến khi chết ai fix đc giùm em hok :D
Cho DM và chế độ thường
Mã:
/*================================================================================

[NST Wpn] Extra Item: Knife
Tac gia: NST
Team: Humans
Cong dung: Mot vu khi moi cho Human

Cvars:

- nst_cv47_dmg <3> - Uy luc cua sung
- nst_cv47_uclip <1|0> - Bang dan vo han ?
- nst_cv47_speed <1> - Toc do ban cua sung (cang nho thi cang ban nhanh)
- nst_cv47_zoom <1|0> - Zoom sung ?
- nst_cv47_clip <50> - So dan trong 1 bang
- nst_cv47_ammo <200> - Tong so dan cua sung
- nst_cv47_recoil <0> - Do giat cua sung
- nst_cv47_cost <4000> - Gia cua sung
================================================================================*/

#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <engine>

// Info Plugin
#define VERSION "1.0"
#define AUTHOR "NST"



// Info Weapon
#define CURENT_WEAPON CSW_KNIFE
new models_weapon[64] = "sword"
new name_weapon[64] = "Kiem san nguoi"


new plugin_name[64] = "NST Wpn %s"
new cmd_buy[64] = "nst_%s"
new name_class_weapon[64] = "nst_%s"
new V_MODEL[64] = "models/nst_wpn/v_%s.mdl"
new P_MODEL[64] = "models/nst_wpn/p_%s.mdl"

new cvar_dmg_name[64] = "nst_%s_dmg"
new cvar_uclip_name[64] = "nst_%s_uclip"
new cvar_speed_name[64] = "nst_%s_speed"
new cvar_zoom_name[64] = "nst_%s_zoom"
new cvar_clip_name[64] = "nst_%s_clip"
new cvar_ammo_name[64] = "nst_%s_ammo"
new cvar_recoil_name[64] = "nst_%s_recoil"
new cvar_cost_name[64] = "nst_%s_cost"

#define is_valid_player(%1) (1 <= %1 <= 32)
new user_clip[33], user_ammo[33]
new cost_by_ammo = 60
new cvar_dmgmultiplier, cvar_uclip, cvar_speed, cvar_zoom, cvar_clip, cvar_ammo, cvar_recoil, cvar_cost
new bool:G_HasWp[33]
new g_hasZoom[ 33 ]
const Wep_drop = ((1<<CURENT_WEAPON))
new szWeapon[17]
new Float:cl_pushangle[33][3]


////////////////////////////////// Ammo //////////////////////////////////

const SILENT_BS	= ((1<<CSW_USP)|(1<<CURENT_WEAPON))

// weapons offsets
const m_pPlayer			= 41
const m_iId				= 43
const m_fKnown				= 44
const m_flNextPrimaryAttack	= 46
const m_flNextSecondaryAttack	= 47
const m_flTimeWeaponIdle		= 48
const m_iPrimaryAmmoType		= 49
const m_iClip				= 51
const m_fInReload			= 54
const m_fInSpecialReload		= 55
const m_fSilent			= 74
const m_flNextAttack		= 83
const m_rgAmmo_player_Slot0	= 376

stock const g_iDftMaxClip[CSW_P90+1] = {
	-1,  13, -1, 10,  1,  7,    1, 30, 30,  1,  30, 
		20, 25, 30, 35, 25,   12, 20, 10, 30, 100, 
		8 , 30, 30, 20,  2,    7, 30, 30, -1,  50}
		
stock const g_iReloadAnims[CSW_P90+1] = {
	-1,  5, -1, 3, -1,  6,   -1, 1, 1, -1, 14, 
		4,  2, 3,  1,  1,   13, 7, 4,  1,  3, 
		6, 11, 1,  3, -1,    4, 1, 1, -1,  1}
		
stock const Float:g_fDelay[CSW_P90+1] = {
	0.00, 2.70, 0.00, 2.00, 0.00, 0.55,   0.00, 3.15, 3.30, 0.00, 4.50, 
		 2.70, 3.50, 3.35, 2.45, 3.30,   2.70, 2.20, 2.50, 2.63, 4.70, 
		 0.55, 3.05, 2.12, 3.50, 0.00,   2.20, 3.00, 2.45, 0.00, 3.40
}
new const AMMOID[] = { -1, 9, -1, 2, 12, 5, 14, 6, 4, 13, 10, 7, 6, 4, 4, 4, 6, 10,
			1, 10, 3, 5, 4, 10, 2, 11, 8, 4, 2, -1, 7 }


public plugin_init()
{
	// Create value
	format(V_MODEL, 63, V_MODEL, models_weapon)
	format(P_MODEL, 63, P_MODEL, models_weapon)
	
	format(cvar_dmg_name, 63, cvar_dmg_name, models_weapon)
	format(cvar_uclip_name, 63, cvar_uclip_name, models_weapon)
	format(cvar_speed_name, 63, cvar_speed_name, models_weapon)
	format(cvar_zoom_name, 63, cvar_zoom_name, models_weapon)
	format(cvar_clip_name, 63, cvar_clip_name, models_weapon)
	format(cvar_ammo_name, 63, cvar_ammo_name, models_weapon)
	format(cvar_recoil_name, 63, cvar_recoil_name, models_weapon)
	format(cvar_cost_name, 63, cvar_cost_name, models_weapon)
	
	format(plugin_name, 63, plugin_name, name_weapon)
	format(cmd_buy, 63, cmd_buy, models_weapon)
	format(name_class_weapon, 63, name_class_weapon, models_weapon)
	
	register_plugin(plugin_name, VERSION, AUTHOR)

	// Reg Cvar
	cvar_dmgmultiplier = register_cvar(cvar_dmg_name, "2")
	cvar_uclip = register_cvar(cvar_uclip_name, "0")
	cvar_speed = register_cvar(cvar_speed_name,"1")
	cvar_zoom = register_cvar(cvar_zoom_name,"0")
	cvar_clip = register_cvar(cvar_clip_name,"1")
	cvar_ammo = register_cvar(cvar_ammo_name,"1")
	cvar_recoil = register_cvar(cvar_recoil_name,"0.4")
	cvar_cost = register_cvar(cvar_cost_name,"1000")

	//register_event("WeapPickup","checkModel","b","1=19")
	register_event("CurWeapon","checkWeapon","be","1=1")
	register_event("DeathMsg", "Death", "a")
	register_event("HLTV", "event_start_freezetime", "a", "1=0", "2=0")

	// Ham
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	get_weaponname(CURENT_WEAPON, szWeapon, charsmax(szWeapon))
	RegisterHam(Ham_Item_PostFrame, szWeapon, "Item_PostFrame")
	register_forward( FM_CmdStart, "fw_CmdStart" )
	
	// Recoil
	RegisterHam(Ham_Weapon_PrimaryAttack, szWeapon, "fw_primary_attack")
	RegisterHam(Ham_Weapon_PrimaryAttack, szWeapon, "fw_primary_attack_post",1) 

	// Command
	register_clcmd(cmd_buy,"buy_weapon")
	register_clcmd("drop","cmd_drop", 0)
	register_clcmd("buyammo1","buy_ammo", 0)
	register_clcmd("primammo","buy_ammo", 0)
	
}

// Other Public
public plugin_precache()
{
	format(V_MODEL, 63, V_MODEL, models_weapon)
	format(P_MODEL, 63, P_MODEL, models_weapon)
	
	precache_model(V_MODEL)
	precache_model(P_MODEL)

}

public client_connect(id)
{
	G_HasWp[id] = false
}

public client_disconnect(id)
{
	G_HasWp[id] = false
}

public Death()
{
	new id = read_data(2) 
	if(G_HasWp[id])
	{
		create_w_class(id, user_clip[id], user_ammo[id], 0)
		G_HasWp[id] = false
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_CONTINUE
}

public event_start_freezetime()
{
	remove_class_wpn()
}
// End Other Public


// Buy Weapon
public buy_weapon(id)
{
	new plrClip, plrAmmo
	get_user_weapon(id, plrClip , plrAmmo)

	new user_money = cs_get_user_money(id);
	new wp_cost = get_pcvar_num(cvar_cost);
	new clip_max = get_pcvar_num(cvar_clip)
	new ammo_max = get_pcvar_num(cvar_ammo)
		
	if(!is_user_alive(id))
	{
		client_print(id, print_chat, "[NST Wpn] You can only buy %s when alive", name_weapon);
	}
	else if(user_money < wp_cost)
	{
		client_print(id, print_chat, "[NST Wpn] You can't afford that!");
	}
	else if(G_HasWp[id])
	{
		if (plrAmmo != ammo_max && user_money >= cost_by_ammo) buy_ammo(id)
		else client_print(id, print_chat, "[NST Wpn] You already have a %s", name_weapon)
	}
	else
	{
		drop_prim(id)
		show_hud_ammo(id, ammo_max)
		give_weapon(id, clip_max, ammo_max)
		cs_set_user_money(id, user_money-wp_cost)
		client_print(id, print_chat, "[NST Wpn] You bought %s", name_weapon)
	}

	
}
// End Buy Weapon


// Buy Ammo
public buy_ammo(id)
{
	new plrClip, plrAmmo, plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
	new clip_max = get_pcvar_num(cvar_clip)
	new ammo_max = get_pcvar_num(cvar_ammo)
	new ammo_show = (ammo_max-plrAmmo) + (clip_max-plrClip)
	new user_money = cs_get_user_money(id)
	
	if(plrWeapId == CURENT_WEAPON && G_HasWp[id] && user_money >= cost_by_ammo && plrAmmo != ammo_max)
	{
		show_hud_ammo(id, ammo_show)
		cs_set_user_money(id, user_money-cost_by_ammo)
		give_weapon(id, clip_max, ammo_max)
	}
}
// End Buy Ammo


// Show Hud Ammo
public show_hud_ammo(id,ammo)
{
	new clip_max = get_pcvar_num(cvar_clip)
	if (ammo<=clip_max) fun_show_ammo(id, ammo)
	else
	{
		new ammo_a = ammo % clip_max
		new num_for = (ammo-ammo_a)/clip_max
		for (new i = 1; i <= num_for; i++)
		{
			fun_show_ammo(id, clip_max)
		}
		if (ammo_a>0) fun_show_ammo(id, ammo_a)
	}

}
fun_show_ammo(id, ammo)
{
	message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoPickup"), _, id)
	write_byte(AMMOID[CURENT_WEAPON]) // ammo id
	write_byte(ammo) // ammo amount
	message_end()
}
// End Show Hud Ammo


// Check Weapon
public checkModel(id)
{

	new szWeapID = read_data(2)
	
	if ( szWeapID == CURENT_WEAPON && G_HasWp[id] == true)
	{
		set_pev(id, pev_viewmodel2, V_MODEL)
		set_pev(id, pev_weaponmodel2, P_MODEL)
	}
	return PLUGIN_HANDLED
}

public checkWeapon(id)
{
	new plrClip, plrAmmo, plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
	
	if (plrWeapId == CURENT_WEAPON && G_HasWp[id])
	{
		checkModel(id)

		// Speed
		new Ent = get_weapon_ent(id,plrWeapId)
		new Float:N_Speed
		if(Ent) 
		{
			N_Speed = get_pcvar_float(cvar_speed)
			new Float:Delay = get_pdata_float( Ent, 46, 4) * N_Speed	
			if (Delay > 0.0) {
				set_pdata_float( Ent, 46, Delay, 4)
			}
		}
	}
	
	return PLUGIN_HANDLED
}
// End Check Weapon


// Control Damage
public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
    if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CURENT_WEAPON && G_HasWp[attacker] )
    {
        SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
    }
}
// End Control Damage



// Zoom Wepaon
public fw_CmdStart( id, uc_handle, seed )
{
	if( !is_user_alive( id ) ) 
		return PLUGIN_HANDLED
	
	new szClip, szAmmo
	new szWeapID = get_user_weapon( id, szClip, szAmmo )
	
	if( szWeapID == CURENT_WEAPON && G_HasWp[id] == true)
	{
		// Zoom Weapon
		if (get_pcvar_num(cvar_zoom))
		{
			if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
			{
				if(!g_hasZoom[id] == true)
				{
					g_hasZoom[id] = true
					cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
					client_cmd(id,"spk weapons/zoom")
				}
				else if (g_hasZoom[id])
				{
					g_hasZoom[ id ] = false
					cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
				}
			}
		}
		// UClip
		if (get_pcvar_num(cvar_uclip))
		{
			new ent = get_weapon_ent(id,CURENT_WEAPON)
			cs_set_weapon_ammo(ent, get_pcvar_num(cvar_clip))
		}
		
		user_clip[id] = szClip
		user_ammo[id] = szAmmo
	}
	
	if ( (g_hasZoom[ id ] && (pev(id, pev_button) & IN_RELOAD)) || (g_hasZoom[id] && szWeapID != CURENT_WEAPON) )
	{
		g_hasZoom[id] = false
		cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
	}


	return PLUGIN_HANDLED
}
// End Zoom Wepaon


// Recoil of Weapon
public fw_primary_attack(ent)
{
	new id = pev(ent,pev_owner)
	pev(id,pev_punchangle,cl_pushangle[id])
	
	return HAM_IGNORED
}
public fw_primary_attack_post(ent)
{
	new id = pev(ent,pev_owner)
	new szClip, szAmmo
	new szWeapID = get_user_weapon( id, szClip, szAmmo )
	
	if( szWeapID == CURENT_WEAPON && G_HasWp[id] == true)
	{
		new Float:push[3]
		pev(id,pev_punchangle,push)
		xs_vec_sub(push,cl_pushangle[id],push)
		
		xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
		xs_vec_add(push,cl_pushangle[id],push)
		set_pev(id,pev_punchangle,push)
	}
	
	return HAM_IGNORED
}
// End Recoil of Weapon


// Drop Weapon
public cmd_drop(id)
{
	new plrClip, plrAmmo
	new plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
	
	if(plrWeapId == CURENT_WEAPON && G_HasWp[id] && is_user_alive(id)) {
		create_w_class(id, plrClip, plrAmmo, 1)		
		return PLUGIN_HANDLED
	} 
	return PLUGIN_CONTINUE
}

public create_w_class(id, clip, ammo, type)
{
	new Float:Aim[3],Float:origin[3]
	VelocityByAim(id, 64, Aim)
	entity_get_vector(id,EV_VEC_origin,origin)
	
	if (type == 1) {
		origin[0] += 2*Aim[0]
		origin[1] += 2*Aim[1]
	}

	new nst_cre_class = create_entity("info_target")
	entity_set_string(nst_cre_class,EV_SZ_classname,name_class_weapon)
		
	entity_set_size(nst_cre_class,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
	entity_set_int(nst_cre_class,EV_INT_solid,1)
		
	entity_set_int(nst_cre_class,EV_INT_movetype,6)
	entity_set_int(nst_cre_class, EV_INT_iuser1, clip)
	entity_set_int(nst_cre_class, EV_INT_iuser2, ammo)
	entity_set_vector(nst_cre_class,EV_VEC_origin,origin)
	G_HasWp[id] = false
	remowegun(id)
}
// End Drop Weapon


// Remove Class Wepaons in new round
public remove_class_wpn()
{
	new nextitem  = find_ent_by_class(-1,name_class_weapon)
	while(nextitem) {
		remove_entity(nextitem)
		nextitem = find_ent_by_class(-1,name_class_weapon)
	}
	return PLUGIN_CONTINUE
}
// End Remove Class Wepaons in new round


// Weapon Pickup
public pfn_touch(ptr, ptd) {
	if(is_valid_ent(ptr)) {
		
		new classname[32]
		entity_get_string(ptr,EV_SZ_classname,classname,31)
		if(equal(classname, name_class_weapon)) {
			if(is_valid_ent(ptd)) {
				new id = ptd
				if(id > 0 && id < 34) {
					if(!check_has_wpn(id) && !G_HasWp[id] && is_user_alive(id)) {
						give_weapon(id,entity_get_int(ptr, EV_INT_iuser1), entity_get_int(ptr, EV_INT_iuser2))
						remove_entity(ptr)
					}
				}
			}
		}
	}
}

check_has_wpn(id)
{
	new weapons[32], num, has_wpn = 0
	get_user_weapons(id, weapons, num)
	new type_wpn_cr = check_type_wpn(CURENT_WEAPON)

	for (new i = 0; i < num; i++)
	{
		new type_wpn = check_type_wpn(weapons[i])
		if (type_wpn == type_wpn_cr) has_wpn = 1

	}
	
	return has_wpn
}
// End Weapon Pickup


// Remove gun and save all guns
public remowegun(id) { 
	new wpnList[32] 
	new number
	get_user_weapons(id,wpnList,number) 
	for (new i = 0;i < number ;i++) { 
		if (wpnList[i] == CURENT_WEAPON) {
			fm_strip_user_gun(id, wpnList[i])
		}
	}
} 

//Give wpn
public give_weapon(id, clip, ammo){
	G_HasWp[id] = true
	give_item(id,szWeapon)
	cs_set_user_bpammo(id, CURENT_WEAPON, ammo)
	new ent = get_weapon_ent(id,CURENT_WEAPON)
	cs_set_weapon_ammo(ent, clip)
}


// Give Ammo Clip
public Item_PostFrame(iEnt)
{
	static id ; id = get_pdata_cbase(iEnt, m_pPlayer, 4)
	new plrClip, plrAmmo, plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
	
	if (plrWeapId == CURENT_WEAPON && G_HasWp[id])
	{

	static iId ; iId = get_pdata_int(iEnt, m_iId, 4)
	static iMaxClip ; iMaxClip = get_pcvar_num(cvar_clip)
	static fInReload ; fInReload = get_pdata_int(iEnt, m_fInReload, 4)
	static Float:flNextAttack ; flNextAttack = get_pdata_float(id, m_flNextAttack, 5)

	static iAmmoType ; iAmmoType = m_rgAmmo_player_Slot0 + get_pdata_int(iEnt, m_iPrimaryAmmoType, 4)
	static iBpAmmo ; iBpAmmo = get_pdata_int(id, iAmmoType, 5)
	static iClip ; iClip = get_pdata_int(iEnt, m_iClip, 4)


	if( fInReload && flNextAttack <= 0.0 )
	{
		new j = min(iMaxClip - iClip, iBpAmmo)
		set_pdata_int(iEnt, m_iClip, iClip + j, 4)
		set_pdata_int(id, iAmmoType, iBpAmmo-j, 5)		
		set_pdata_int(iEnt, m_fInReload, 0, 4)
		fInReload = 0
	}
	
	static iButton ; iButton = pev(id, pev_button)
	if(	(iButton & IN_ATTACK2 && get_pdata_float(iEnt, m_flNextSecondaryAttack, 4) <= 0.0)
	||	(iButton & IN_ATTACK && get_pdata_float(iEnt, m_flNextPrimaryAttack, 4) <= 0.0)	)
	{
		return
	}
	
	if( iButton & IN_RELOAD && !fInReload )
	{
		if( iClip >= iMaxClip )
		{
			set_pev(id, pev_button, iButton & ~IN_RELOAD)
			if( SILENT_BS & (1<<iId) && !get_pdata_int(iEnt, m_fSilent, 4) )
			{
				SendWeaponAnim( id, iId == CSW_USP ? 8 : 7 )
			}
			else
			{
				SendWeaponAnim(id, 0)
			}
		}
		else if( iClip == g_iDftMaxClip[iId] )
		{
			if( iBpAmmo )
			{
				set_pdata_float(id, m_flNextAttack, g_fDelay[iId], 5)

				if( SILENT_BS & (1<<iId) && get_pdata_int(iEnt, m_fSilent, 4) )
				{
					SendWeaponAnim( id, iId == CSW_USP ? 5 : 4 )
				}
				else
				{
					SendWeaponAnim(id, g_iReloadAnims[iId])
				}
				set_pdata_int(iEnt, m_fInReload, 1, 4)

				set_pdata_float(iEnt, m_flTimeWeaponIdle, g_fDelay[iId] + 0.5, 4)
			}
		}
	}
	
	}
}
SendWeaponAnim(id, iAnim)
{
	set_pev(id, pev_weaponanim, iAnim)

	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
	write_byte(iAnim)
	write_byte(pev(id,pev_body))
	message_end()
}
// End Give Ammo Clip


// Stock
stock drop_prim(id) 
{
	new weapons[32], num
	get_user_weapons(id, weapons, num)
	for (new i = 0; i < num; i++)
	{
		new type_wpn = check_type_wpn(weapons[i])
		new type_wpn_cr = check_type_wpn(CURENT_WEAPON)
		if (type_wpn == type_wpn_cr)
		{
			static wname[32]
			get_weaponname(weapons[i], wname, sizeof wname - 1)
			engclient_cmd(id, "drop", wname)
			G_HasWp[id] = false
		}
	}
}
//get weapon id
stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
	// who knows what wpnName will be
	static newName[24];

	// need to find the name
	if(wpnid) get_weaponname(wpnid,newName,23);

	// go with what we were told
	else formatex(newName,23,"%s",wpnName);

	// prefix it if we need to
	if(!equal(newName,"weapon_",7))
		format(newName,23,"weapon_%s",newName);

	return fm_find_ent_by_owner(get_maxplayers(),newName,id);
} 

check_type_wpn(id_wpn)
{
	new type_wpn = 0
	if (id_wpn == CSW_SCOUT || id_wpn == CSW_XM1014 || id_wpn == CSW_MAC10 || id_wpn == CSW_AUG || id_wpn == CSW_UMP45 || id_wpn == CSW_SG550 || id_wpn == CSW_GALIL || id_wpn == CSW_FAMAS || id_wpn == CSW_AWP || id_wpn == CSW_MP5NAVY || id_wpn == CSW_M249 || id_wpn == CSW_M3 || id_wpn == CSW_M4A1 || id_wpn == CSW_TMP || id_wpn == CSW_G3SG1 || id_wpn == CSW_SG552 || id_wpn == CSW_AK47 || id_wpn == CSW_P90)
	{
		type_wpn = 1
	}
	else if (id_wpn == CSW_P228 || id_wpn == CSW_ELITE || id_wpn == CSW_FIVESEVEN || id_wpn == CSW_USP || id_wpn == CSW_GLOCK18 || id_wpn == CSW_DEAGLE)
	{
		type_wpn = 2
	}

	return type_wpn
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1034\\ f0\\ fs16 \n\\ par }
Cho zombie:
Mã:
/*================================================================================
[NST Wpn Mod]
Mod: [ZP] Extra Item
Tac gia: NST
Team: Humans
Cong dung: Mot vu khi moi cho Humans

Cvars:
+ nst_<wpn>_dmg <7> = Uy luc
+ nst_<wpn>_uclip <1|0> = Bang dan vo han ?
+ nst_<wpn>_speed <1> = Toc do ban (cang nho thi cang ban nhanh)
+ nst_<wpn>_zoom <1|0> = Vu khi co zoom duoc hay khong ?
+ nst_<wpn>_clip <1> = So dan trong 1 bang
+ nst_<wpn>_ammo <1> = Tong so dan
+ nst_<wpn>_recoil <0> = Do giat
- nst_<wpn>_round <1|0> - Sang van moi sung co bi mat di hay khong ?
================================================================================*/


#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <zombieplague>
#include <engine>

// Info Plugin
#define VERSION "1.0"
#define AUTHOR "NST"


// Info Weapon
#define CURENT_WEAPON CSW_KNIFE 
new models_weapon[64] = "sword"
new name_weapon[64] = "Kiem"


new plugin_name[64] = "[ZP] Extra: %s"
new name_class_weapon[64] = "nst_%s"
new V_MODEL[64] = "models/nst_wpn/v_%s.mdl"
new P_MODEL[64] = "models/nst_wpn/p_%s.mdl"

new cvar_dmg_name[64] = "nst_%s_dmg"
new cvar_uclip_name[64] = "nst_%s_uclip"
new cvar_speed_name[64] = "nst_%s_speed"
new cvar_zoom_name[64] = "nst_%s_zoom"
new cvar_clip_name[64] = "nst_%s_clip"
new cvar_ammo_name[64] = "nst_%s_ammo"
new cvar_recoil_name[64] = "nst_%s_recoil"
new cvar_round_name[64] = "nst_%s_round"

#define is_valid_player(%1) (1 <= %1 <= 32)
new user_clip[33], user_ammo[33]
new cvar_dmgmultiplier, cvar_uclip, cvar_speed, cvar_zoom, cvar_clip, cvar_ammo, cvar_recoil, cvar_round
new g_itemid
new bool:G_HasWp[33]
new g_hasZoom[ 33 ]
const Wep_drop = ((1<<CURENT_WEAPON))
new szWeapon[17]
new Float:cl_pushangle[33][3]


////////////////////////////////// Ammo //////////////////////////////////

const SILENT_BS	= ((1<<CSW_USP)|(1<<CURENT_WEAPON))

// weapons offsets
const m_pPlayer			= 41
const m_iId				= 43
const m_fKnown				= 44
const m_flNextPrimaryAttack	= 46
const m_flNextSecondaryAttack	= 47
const m_flTimeWeaponIdle		= 48
const m_iPrimaryAmmoType		= 49
const m_iClip				= 51
const m_fInReload			= 54
const m_fInSpecialReload		= 55
const m_fSilent			= 74
const m_flNextAttack		= 83
const m_rgAmmo_player_Slot0	= 376

stock const g_iDftMaxClip[CSW_P90+1] = {
	-1,  13, -1, 10,  1,  7,    1, 30, 30,  1,  30, 
		20, 25, 30, 35, 25,   12, 20, 10, 30, 100, 
		8 , 30, 30, 20,  2,    7, 30, 30, -1,  50}
		
stock const g_iReloadAnims[CSW_P90+1] = {
	-1,  5, -1, 3, -1,  6,   -1, 1, 1, -1, 14, 
		4,  2, 3,  1,  1,   13, 7, 4,  1,  3, 
		6, 11, 1,  3, -1,    4, 1, 1, -1,  1}
		
stock const Float:g_fDelay[CSW_P90+1] = {
	0.00, 2.70, 0.00, 2.00, 0.00, 0.55,   0.00, 3.15, 3.30, 0.00, 4.50, 
		 2.70, 3.50, 3.35, 2.45, 3.30,   2.70, 2.20, 2.50, 2.63, 4.70, 
		 0.55, 3.05, 2.12, 3.50, 0.00,   2.20, 3.00, 2.45, 0.00, 3.40
}


public plugin_init()
{
	// Create value
	format(V_MODEL, 63, V_MODEL, models_weapon)
	format(P_MODEL, 63, P_MODEL, models_weapon)
	
	format(cvar_dmg_name, 63, cvar_dmg_name, models_weapon)
	format(cvar_uclip_name, 63, cvar_uclip_name, models_weapon)
	format(cvar_speed_name, 63, cvar_speed_name, models_weapon)
	format(cvar_zoom_name, 63, cvar_zoom_name, models_weapon)
	format(cvar_clip_name, 63, cvar_clip_name, models_weapon)
	format(cvar_ammo_name, 63, cvar_ammo_name, models_weapon)
	format(cvar_recoil_name, 63, cvar_recoil_name, models_weapon)
	format(cvar_round_name, 63, cvar_round_name, models_weapon)
	
	format(plugin_name, 63, plugin_name, name_weapon)
	format(name_class_weapon, 63, name_class_weapon, models_weapon)

	// Reg Cvar
	cvar_dmgmultiplier = register_cvar(cvar_dmg_name, "5")
	cvar_uclip = register_cvar(cvar_uclip_name, "0")
	cvar_speed = register_cvar(cvar_speed_name,"1")
	cvar_zoom = register_cvar(cvar_zoom_name,"0")
	cvar_clip = register_cvar(cvar_clip_name,"1")
	cvar_ammo = register_cvar(cvar_ammo_name,"1")
	cvar_recoil = register_cvar(cvar_recoil_name,"0.4")
	cvar_round = register_cvar(cvar_round_name,"0")

	
	register_plugin(plugin_name, VERSION, AUTHOR)
	g_itemid = zp_register_extra_item(name_weapon, 0, ZP_TEAM_HUMAN)

	//register_event("WeapPickup","checkModel","b","1=19")
	register_event("DeathMsg", "Death", "a")
	register_event("CurWeapon","checkWeapon","be","1=1")
	register_event("HLTV", "event_start_freezetime", "a", "1=0", "2=0")

	// Ham
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	//RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
	get_weaponname(CURENT_WEAPON, szWeapon, charsmax(szWeapon))
	RegisterHam(Ham_Item_PostFrame, szWeapon, "Item_PostFrame")
	register_forward( FM_CmdStart, "fw_CmdStart" )
	
	// Recoil
	RegisterHam(Ham_Weapon_PrimaryAttack, szWeapon, "fw_primary_attack")
	RegisterHam(Ham_Weapon_PrimaryAttack, szWeapon, "fw_primary_attack_post",1) 

	register_clcmd("drop","cmd_drop", 0)
}

// Other Public
public plugin_precache()
{
	format(V_MODEL, 63, V_MODEL, models_weapon)
	format(P_MODEL, 63, P_MODEL, models_weapon)
	
	precache_model(V_MODEL)
	precache_model(P_MODEL)
}

public client_connect(id)
{
	G_HasWp[id] = false
}

public client_disconnect(id)
{
	G_HasWp[id] = false
}

public Death()
{
	new id = read_data(2) 
	if(G_HasWp[id])
	{
		create_w_class(id, user_clip[id], user_ammo[id], 0)
		G_HasWp[id] = false
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_CONTINUE
}

public fwHamPlayerSpawnPost(id)
{
	if (!get_pcvar_num(cvar_round)) G_HasWp[id] = false
}

public zp_user_infected_post(id)
{
	if (zp_get_user_zombie(id))
	{
		G_HasWp[id] = false
	}
}

public zp_extra_item_selected(player, itemid)
{
	if ( itemid == g_itemid )
	{
		drop_prim(player)
		give_weapon(player, get_pcvar_num(cvar_clip), get_pcvar_num(cvar_ammo))
		client_print(player, print_chat, "[ZP] You bought %s", name_weapon)
	}
}

public event_start_freezetime()
{
	remove_class_wpn()
}
// End Other Public


// Check Weapon
public checkModel(id)
{
	if ( zp_get_user_zombie(id) )
		return PLUGIN_HANDLED
	
	new szWeapID = read_data(2)
	
	if ( szWeapID == CURENT_WEAPON && G_HasWp[id] == true)
	{
		set_pev(id, pev_viewmodel2, V_MODEL)
		set_pev(id, pev_weaponmodel2, P_MODEL)
	}
	return PLUGIN_HANDLED
}

public checkWeapon(id)
{
	new plrClip, plrAmmo, plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
	
	
	if (plrWeapId == CURENT_WEAPON && G_HasWp[id])
	{
		checkModel(id)

		// Speed
		new Ent = get_weapon_ent(id,plrWeapId)
		new Float:N_Speed
		if(Ent) 
		{
			N_Speed = get_pcvar_float(cvar_speed)
			new Float:Delay = get_pdata_float( Ent, 46, 4) * N_Speed	
			if (Delay > 0.0) {
				set_pdata_float( Ent, 46, Delay, 4)
			}
		}
	}
	else 
	{
		return PLUGIN_CONTINUE
	}
	

	
	return PLUGIN_HANDLED
}
// End Check Weapon


// Control Damage
public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
    if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CURENT_WEAPON && G_HasWp[attacker] )
    {
        SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
    }
}
// End Control Damage



// Zoom Wepaon
public fw_CmdStart( id, uc_handle, seed )
{
	if( !is_user_alive( id ) ) 
		return PLUGIN_HANDLED
	
	
	new szClip, szAmmo
	new szWeapID = get_user_weapon( id, szClip, szAmmo )
	
	if( szWeapID == CURENT_WEAPON && G_HasWp[id] == true)
	{
		// Zoom Weapon
		if (get_pcvar_num(cvar_zoom))
		{
			if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
			{
				if(!g_hasZoom[id] == true)
				{
					g_hasZoom[id] = true
					cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
					client_cmd(id,"spk weapons/zoom")
				}
				else if (g_hasZoom[id])
				{
					g_hasZoom[ id ] = false
					cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
				}
			}
		}
		// UClip
		if (get_pcvar_num(cvar_uclip))
		{
			new ent = get_weapon_ent(id,CURENT_WEAPON)
			cs_set_weapon_ammo(ent, get_pcvar_num(cvar_clip))
		}
		
		user_clip[id] = szClip
		user_ammo[id] = szAmmo

	}
	
	if ( (g_hasZoom[ id ] && (pev(id, pev_button) & IN_RELOAD)) || (g_hasZoom[id] && szWeapID != CURENT_WEAPON) )
	{
		g_hasZoom[id] = false
		cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
	}

	
	return PLUGIN_HANDLED
}
// End Zoom Wepaon


// Recoil of Weapon
public fw_primary_attack(ent)
{
	new id = pev(ent,pev_owner)
	pev(id,pev_punchangle,cl_pushangle[id])
	
	return HAM_IGNORED
}
public fw_primary_attack_post(ent)
{
	new id = pev(ent,pev_owner)
	new szClip, szAmmo
	new szWeapID = get_user_weapon( id, szClip, szAmmo )
	
	if( szWeapID == CURENT_WEAPON && G_HasWp[id] == true)
	{
		new Float:push[3]
		pev(id,pev_punchangle,push)
		xs_vec_sub(push,cl_pushangle[id],push)
		
		xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
		xs_vec_add(push,cl_pushangle[id],push)
		set_pev(id,pev_punchangle,push)
	}
	
	return HAM_IGNORED
}
// End Recoil of Weapon


// Drop Weapon
public cmd_drop(id)
{
	new plrClip, plrAmmo
	new plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
	
	if(plrWeapId == CURENT_WEAPON && G_HasWp[id] && is_user_alive(id)) {
		create_w_class(id, plrClip, plrAmmo, 1)		
		return PLUGIN_HANDLED
	} 
	return PLUGIN_CONTINUE
}

public create_w_class(id, clip, ammo, type)
{
	new Float:Aim[3],Float:origin[3]
	VelocityByAim(id, 64, Aim)
	entity_get_vector(id,EV_VEC_origin,origin)
	
	if (type == 1) {
		origin[0] += 2*Aim[0]
		origin[1] += 2*Aim[1]
	}

	new nst_cre_class = create_entity("info_target")
	entity_set_string(nst_cre_class,EV_SZ_classname,name_class_weapon)	
		
	entity_set_size(nst_cre_class,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
	entity_set_int(nst_cre_class,EV_INT_solid,1)
		
	entity_set_int(nst_cre_class,EV_INT_movetype,6)
	entity_set_int(nst_cre_class, EV_INT_iuser1, clip)
	entity_set_int(nst_cre_class, EV_INT_iuser2, ammo)
	entity_set_vector(nst_cre_class,EV_VEC_origin,origin)
	G_HasWp[id] = false
	remowegun(id)
}
// End Drop Weapon


// Remove Class Wepaons in new round
public remove_class_wpn()
{
	new nextitem  = find_ent_by_class(-1,name_class_weapon)
	while(nextitem) {
		remove_entity(nextitem)
		nextitem = find_ent_by_class(-1,name_class_weapon)
	}
	return PLUGIN_CONTINUE
}
// End Remove Class Wepaons in new round


// Weapon Pickup
public pfn_touch(ptr, ptd) {
	if(is_valid_ent(ptr)) {
		
		new classname[32]
		entity_get_string(ptr,EV_SZ_classname,classname,31)
		if(equal(classname, name_class_weapon)) {
			if(is_valid_ent(ptd)) {
				new id = ptd
				if(id > 0 && id < 34) {
					if(!G_HasWp[id] && is_user_alive(id) && !zp_get_user_zombie(id)) {
						give_weapon(id,entity_get_int(ptr, EV_INT_iuser1), entity_get_int(ptr, EV_INT_iuser2))
						remove_entity(ptr)
					}
				}
			}
		}
	}
}
// End Weapon Pickup


// remove gun and save all guns
public remowegun(id) { 
	new wpnList[32] 
	new number
	get_user_weapons(id,wpnList,number) 
	for (new i = 0;i < number ;i++) { 
		if (wpnList[i] == CURENT_WEAPON) {
			fm_strip_user_gun(id, wpnList[i])
		}
	}
} 

//give wpn
public give_weapon(id, clip, ammo){
	G_HasWp[id] = true
	give_item(id,szWeapon)
	cs_set_user_bpammo(id, CURENT_WEAPON, ammo)
	new ent = get_weapon_ent(id,CURENT_WEAPON)
	cs_set_weapon_ammo(ent, clip)
	
}


// Give Ammo Clip
public Item_PostFrame(iEnt)
{
	static id ; id = get_pdata_cbase(iEnt, m_pPlayer, 4)
	new plrClip, plrAmmo, plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
	
	if (plrWeapId == CURENT_WEAPON && G_HasWp[id])
	{

	static iId ; iId = get_pdata_int(iEnt, m_iId, 4)
	static iMaxClip ; iMaxClip = get_pcvar_num(cvar_clip)
	static fInReload ; fInReload = get_pdata_int(iEnt, m_fInReload, 4)
	static Float:flNextAttack ; flNextAttack = get_pdata_float(id, m_flNextAttack, 5)

	static iAmmoType ; iAmmoType = m_rgAmmo_player_Slot0 + get_pdata_int(iEnt, m_iPrimaryAmmoType, 4)
	static iBpAmmo ; iBpAmmo = get_pdata_int(id, iAmmoType, 5)
	static iClip ; iClip = get_pdata_int(iEnt, m_iClip, 4)


	if( fInReload && flNextAttack <= 0.0 )
	{
		new j = min(iMaxClip - iClip, iBpAmmo)
		set_pdata_int(iEnt, m_iClip, iClip + j, 4)
		set_pdata_int(id, iAmmoType, iBpAmmo-j, 5)		
		set_pdata_int(iEnt, m_fInReload, 0, 4)
		fInReload = 0
	}
	
	static iButton ; iButton = pev(id, pev_button)
	if(	(iButton & IN_ATTACK2 && get_pdata_float(iEnt, m_flNextSecondaryAttack, 4) <= 0.0)
	||	(iButton & IN_ATTACK && get_pdata_float(iEnt, m_flNextPrimaryAttack, 4) <= 0.0)	)
	{
		return
	}
	
	if( iButton & IN_RELOAD && !fInReload )
	{
		if( iClip >= iMaxClip )
		{
			set_pev(id, pev_button, iButton & ~IN_RELOAD)
			if( SILENT_BS & (1<<iId) && !get_pdata_int(iEnt, m_fSilent, 4) )
			{
				SendWeaponAnim( id, iId == CSW_USP ? 8 : 7 )
			}
			else
			{
				SendWeaponAnim(id, 0)
			}
		}
		else if( iClip == g_iDftMaxClip[iId] )
		{
			if( iBpAmmo )
			{
				set_pdata_float(id, m_flNextAttack, g_fDelay[iId], 5)

				if( SILENT_BS & (1<<iId) && get_pdata_int(iEnt, m_fSilent, 4) )
				{
					SendWeaponAnim( id, iId == CSW_USP ? 5 : 4 )
				}
				else
				{
					SendWeaponAnim(id, g_iReloadAnims[iId])
				}
				set_pdata_int(iEnt, m_fInReload, 1, 4)

				set_pdata_float(iEnt, m_flTimeWeaponIdle, g_fDelay[iId] + 0.5, 4)
			}
		}
	}
	
	}
}
SendWeaponAnim(id, iAnim)
{
	set_pev(id, pev_weaponanim, iAnim)

	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
	write_byte(iAnim)
	write_byte(pev(id,pev_body))
	message_end()
}
// End Give Ammo Clip


// Stock
stock drop_prim(id) 
{
	new weapons[32], num
	get_user_weapons(id, weapons, num)
	for (new i = 0; i < num; i++) {
		if (Wep_drop & (1<<weapons[i])) 
		{
			static wname[32]
			get_weaponname(weapons[i], wname, sizeof wname - 1)
			engclient_cmd(id, "drop", wname)
			G_HasWp[id] = false
		}
	}
}
//get weapon id
stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
	// who knows what wpnName will be
	static newName[24];

	// need to find the name
	if(wpnid) get_weaponname(wpnid,newName,23);

	// go with what we were told
	else formatex(newName,23,"%s",wpnName);

	// prefix it if we need to
	if(!equal(newName,"weapon_",7))
		format(newName,23,"weapon_%s",newName);

	return fm_find_ent_by_owner(get_maxplayers(),newName,id);
} 
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1034\\ f0\\ fs16 \n\\ par }
*/
ae thông cảm copy dùm tại vì h mạng lag wa ko up lên đc sơ-rị moi người ( mạng cùi sơ-ri nhìu)
.
___________Auto Merge________________

.
Merge dùm em :D
Nếu mún thì cũng có thể bỏ phần drop weapon đi vì hok cần cho lắm chỉ tổ làm nặng file :D
.
___________Auto Merge________________

.
Merge dùm em :D
Nếu mún thì cũng có thể bỏ phần drop weapon đi vì hok cần cho lắm chỉ tổ làm nặng file :D mà cho đệ hỏi cái là có ai bik cách làm trời tối (trong zp plague) giống như của bản mod của BéHeo.Xinh hok nhỉ?(lỡ post bên topic kìa roài mog MOD đừng chém em tội nghiệp :(()
 
hic bác SONTUNG ơi làm ơn update giùm em với
1 đống plugin
NST_Wpn.amxx
NST_Wpn_He.amxx
NST_Wpn_Knife.amxx
NST_Wpn_Pistols.amxx
NST_Wpn_Rifles.amxx
NST_Add_Player.amxx
trong bản mod CSO mà bác chả chịu share file SMA và hướng dẫn anh em j` ca?
em ko cần them súng vào cái menu default của CS mà em chỉ cần thêm súng vào cái menu ấn [ là em mừng lắm rồi
cả cái plugin thêm súng mới nữa
bác bảo update lên ver mới chỉ cần thêm thông số vào file .ini mà chả thấy đâu cả:((:((
 
Thoy để anh ST0 ôn thi đi em có file nè nhưng mà ...._He.sma thì chưa làm còn file knife pác cop trên kia đi hay down ở đây 1 thể em RIP lại roài đóa file update ngày 28 lun nhá chi cần thay đổi thông số
 
sao kỳ vậy ta! em Add cái RPK vào với file là v_rpk.mdl rename kây M249.
vào chỉnh sửa y hệt rồi save.rồi compile> copy vào Plus
vào CSCZ KE gõ NST_RPK nhưng hok nóa bảo hok có hỉu lệnh này.
em sai gì hok
 
Status
Không mở trả lời sau này.
Back
Top