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

Thảo luận trong 'Counter Strike' bắt đầu bởi sontung0, 26/11/09.

Trạng thái chủ đề:
Không mở trả lời sau này.
  1. zaikon

    zaikon Youtube Master Race

    Tham gia ngày:
    4/12/08
    Bài viết:
    53
    Em show hàng cái =))
    [​IMG]
    Anconda zoom được nè
    Kriss Super V cũng zoom được
    [​IMG]
    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 :))
    [​IMG]
    Đột Kích có vừa cầm minigun vừa đi vừa bắn thế này không =))
    [​IMG]
    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________________

    .
    @ sontung0: em không tìm thấy nút thanks bác chỉ cho em em thank cho đúng 10 cái :))
     
  2. The_Mamba

    The_Mamba C O N T R A Lão Làng GVN

    Tham gia ngày:
    15/12/09
    Bài viết:
    1,735
    Nơi ở:
    Staples Center
    some body help me please =((=((=((
     
  3. zaikon

    zaikon Youtube Master Race

    Tham gia ngày:
    4/12/08
    Bài viết:
    53
    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à đủ
     
  4. zaikon

    zaikon Youtube Master Race

    Tham gia ngày:
    4/12/08
    Bài viết:
    53
  5. The_Mamba

    The_Mamba C O N T R A Lão Làng GVN

    Tham gia ngày:
    15/12/09
    Bài viết:
    1,735
    Nơi ở:
    Staples Center
    thanks
    còn cái này ai giúp dùm với
     
  6. chauongky

    chauongky T.E.T.Я.I.S

    Tham gia ngày:
    30/7/09
    Bài viết:
    620
    Nơi ở:
    Tu` bung. me
    @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
     
  7. Orpheus

    Orpheus ♥ ♡ ToMaTo TasTe Kiss ♡ ♥ Moderator

    Tham gia ngày:
    30/3/09
    Bài viết:
    4,066
    Nơi ở:
    Kingdom Hearts
    link gì đấy?___
    zaikon là clone của ông nào à?
     
  8. zaikon

    zaikon Youtube Master Race

    Tham gia ngày:
    4/12/08
    Bài viết:
    53
    Ô 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 :))
     
  9. vinhcodoc

    vinhcodoc C O N T R A

    Tham gia ngày:
    16/7/08
    Bài viết:
    1,732
    :D Chuẩn ko cần chỉnh . Thx bài viết này . Test thôi;))
     
  10. My Own Way

    My Own Way S.V.E.N Commander

    Tham gia ngày:
    30/7/09
    Bài viết:
    12,221
    Nơi ở:
    Hải Phòng
    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 ~:>
     
  11. vn2577467

    vn2577467 Mr & Ms Pac-Man

    Tham gia ngày:
    24/7/08
    Bài viết:
    206
    Nơi ở:
    The sky :))
    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 :(()
     
  12. ™Sljpkn0t™

    ™Sljpkn0t™ Youtube Master Race

    Tham gia ngày:
    27/4/09
    Bài viết:
    85
    Nơi ở:
    Hell Banned GameVn
    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
     
  13. sniper.devil

    sniper.devil Mr & Ms Pac-Man

    Tham gia ngày:
    11/12/09
    Bài viết:
    201
    Nơi ở:
    (.)
    bạn up giùm mình file sma của bạn dc ko ....please:D
     
  14. The_Mamba

    The_Mamba C O N T R A Lão Làng GVN

    Tham gia ngày:
    15/12/09
    Bài viết:
    1,735
    Nơi ở:
    Staples Center
    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
     
  15. vn2577467

    vn2577467 Mr & Ms Pac-Man

    Tham gia ngày:
    24/7/08
    Bài viết:
    206
    Nơi ở:
    The sky :))
    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á :)
     
  16. The_Mamba

    The_Mamba C O N T R A Lão Làng GVN

    Tham gia ngày:
    15/12/09
    Bài viết:
    1,735
    Nơi ở:
    Staples Center
    thanks nhìu :-*
    sory tại mình ko để ý
     
  17. vn2577467

    vn2577467 Mr & Ms Pac-Man

    Tham gia ngày:
    24/7/08
    Bài viết:
    206
    Nơi ở:
    The sky :))
    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 :(()
     
  18. The_Mamba

    The_Mamba C O N T R A Lão Làng GVN

    Tham gia ngày:
    15/12/09
    Bài viết:
    1,735
    Nơi ở:
    Staples Center
    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ả:((:((
     
  19. vn2577467

    vn2577467 Mr & Ms Pac-Man

    Tham gia ngày:
    24/7/08
    Bài viết:
    206
    Nơi ở:
    The sky :))
    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ố
     
  20. kinhthienvuong

    kinhthienvuong Mr & Ms Pac-Man

    Tham gia ngày:
    15/12/09
    Bài viết:
    184
    Nơi ở:
    Ho Chi Minh City
    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
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này