1. Открываем исходник оружия

Для примера я возьму пистолет люгер

-------------------------------------------------------------------------------------------

2. В любое место до plugin_init добавляем следующее:

new gmsgWeaponList

-------------------------------------------------------------------------------------------

3. Добавляем в plugin_init следующее:

gmsgWeaponList = get_user_msgid("WeaponList")

-------------------------------------------------------------------------------------------

4. Добавляем в plugin_precache ресурсы:

precache_generic("sprites/weapon_luger.txt")
precache_generic("sprites/640hud51.spr")
precache_generic("sprites/640hud52.spr")
precache_generic("sprites/640hud7.spr")

Вместо "weapon_luger" вы пишите название txt от вашего оружия!
Вместо прочих спрайтов, которые я указал вы также пишите спрайты которые указаны в txt от вашего оружия!

-------------------------------------------------------------------------------------------

5. Добавляем в plugin_precache команду:

register_clcmd("weapon_luger", "weapon_hook")

Вместо "weapon_luger" вы пишите название txt от вашего оружия!

-------------------------------------------------------------------------------------------

6. Добавляем после plugin_precache следующее:

public weapon_hook(id)
{
	engclient_cmd(id, "weapon_p228")
	return PLUGIN_HANDLED
}

Вместо "weapon_p228" вы пишите название оружия, на котором написано ваше!
К примеру watergun написан на ump45, значит вы пишите: weapon_ump45

-------------------------------------------------------------------------------------------

7. Ищем конец функции выдачи оружия и добавляем следующее:

message_begin(MSG_ONE, gmsgWeaponList, _, id)
write_string("weapon_luger")
write_byte(9)
write_byte(52)
write_byte(-1)
write_byte(-1)
write_byte(1)
write_byte(3)
write_byte(CSW_P228)
message_end()

Вместо "weapon_luger" вы пишите название txt от вашего оружия!
Все write_byte меняете на нужные для вашего оружия!
Сейчас мы делаем спрайт к люгеру на P228!
Идем на сайт: http://wiki.alliedmods.net/CS_WeaponList_Message_Dump
Ищем weapon_p228 и видим:

1   STRN   weapon_p228
2   BYTE   9
3   BYTE   52
4   BYTE   -1
5   BYTE   -1
6   BYTE   1
7   BYTE   3
8   BYTE   1
9   BYTE   0

Берем первые 6 строк и меняем:

message_begin(MSG_ONE, gmsgWeaponList, _, id)
write_string("weapon_luger")
write_byte(9) - поменяли
write_byte(52) - поменяли
write_byte(-1) - поменяли
write_byte(-1) - поменяли
write_byte(1) - поменяли
write_byte(3) - поменяли
write_byte(CSW_P228)
message_end()

И вместо CSW_P228 пишем ваш тип оружия

И вот итоговая картинка функции выдачи оружия:

public give_luger(id)
{
	drop_weapons(id, 2)
	new iWep2 = give_item(id,"weapon_p228")
	if( iWep2 > 0 )
	{
		cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_luger))
		cs_set_user_bpammo (id, CSW_P228, get_pcvar_num(cvar_luger_ammo))	
		UTIL_PlayWeaponAnimation(id, luger_DRAW)
		set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
		
		message_begin(MSG_ONE, gmsgWeaponList, _, id)
		write_string("weapon_luger")
		write_byte(9)
		write_byte(52)
		write_byte(-1)
		write_byte(-1)
		write_byte(1)
		write_byte(3)
		write_byte(CSW_P228)
		message_end()
	}
	g_has_luger[id] = true
}

-------------------------------------------------------------------------------------------

8. Ищем функцию добавления оружия к игроку
В общем думаю вы поймете по коду что нужно вставить:

public fw_luger_AddToPlayer(luger, id)
{
	if(!is_valid_ent(luger) || !is_user_connected(id))
		return HAM_IGNORED
	
	if(entity_get_int(luger, EV_INT_WEAPONKEY) == luger_WEAPONKEY)
	{
		g_has_luger[id] = true
		
		entity_set_int(luger, EV_INT_WEAPONKEY, 0)
		
		message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
		write_string("weapon_luger")
		write_byte(9)
		write_byte(52)
		write_byte(-1)
		write_byte(-1)
		write_byte(1)   
		write_byte(3) 
		write_byte(CSW_P228)
		message_end()

		return HAM_HANDLED
	}
	    else
	{
		message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
		write_string("weapon_p228")
		write_byte(9)
		write_byte(52)
		write_byte(-1)
		write_byte(-1)
		write_byte(1)
		write_byte(3)
		write_byte(CSW_P228)
		message_end()
	}
	return HAM_IGNORED
}

Как я говорил:
Меняете weapon_luger на название своего txt
Меняете weapon_p228 на оружие, на котором написано ваше оружие
Меняете все write_byte на подходящие к типу вашего оружия, на котором написано ваше оружие

-------------------------------------------------------------------------------------------

9. Ищем функцию обновления моделек:
В общем поймите пожалуйста сами где менять:

replace_weapon_models(id, weaponid)
{
	switch (weaponid)
	{
		case CSW_P228:
		{
			if (zp_get_user_zombie(id) || zp_get_user_survivor(id))
				return
			
			if(g_has_luger[id])
			{
				set_pev(id, pev_viewmodel2, luger_V_MODEL)
				set_pev(id, pev_weaponmodel2, luger_P_MODEL)
				if(oldweap[id] != CSW_P228) 
				{
					UTIL_PlayWeaponAnimation(id, luger_DRAW)
					set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
					
					message_begin(MSG_ONE, gmsgWeaponList, _, id)
					write_string("weapon_luger")
		                        write_byte(9)
		                        write_byte(52)
		                        write_byte(-1)
		                        write_byte(-1)
		                        write_byte(1)   
		                        write_byte(3) 
		                        write_byte(CSW_P228)
		                        message_end()
				}
			}
		}
	}
	oldweap[id] = weaponid
}

-------------------------------------------------------------------------------------------

Вроде все расписал...... Конечно не было времени все научно расписывать, но надеюсь вы поймете.
Если не поняли до конца, то вот какой код получился у меня:

new gmsgWeaponList

public plugin_init()
{
	gmsgWeaponList = get_user_msgid("WeaponList")
}

public plugin_precache()
{
        precache_generic("sprites/weapon_luger.txt")
   	precache_generic("sprites/zm/640hud51.spr")
        precache_generic("sprites/zm/640hud52.spr")
	
	register_clcmd("weapon_luger", "weapon_hook")	
}

public weapon_hook(id)
{
    engclient_cmd(id, "weapon_p228")
    return PLUGIN_HANDLED
}

public give_luger(id)
{
	drop_weapons(id, 2)
	new iWep2 = give_item(id,"weapon_p228")
	if( iWep2 > 0 )
	{
		cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_luger))
		cs_set_user_bpammo (id, CSW_P228, get_pcvar_num(cvar_luger_ammo))	
		UTIL_PlayWeaponAnimation(id, luger_DRAW)
		set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
		
		message_begin(MSG_ONE, gmsgWeaponList, _, id)
		write_string("weapon_luger")
		write_byte(9)
		write_byte(52)
		write_byte(-1)
		write_byte(-1)
		write_byte(1)
		write_byte(3)
		write_byte(CSW_P228)
		message_end()
	}
	g_has_luger[id] = true
}

public fw_luger_AddToPlayer(luger, id)
{
	if(!is_valid_ent(luger) || !is_user_connected(id))
		return HAM_IGNORED
	
	if(entity_get_int(luger, EV_INT_WEAPONKEY) == luger_WEAPONKEY)
	{
		g_has_luger[id] = true
		
		entity_set_int(luger, EV_INT_WEAPONKEY, 0)
		
		message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
		write_string("weapon_luger")
		write_byte(9)
		write_byte(52)
		write_byte(-1)
		write_byte(-1)
		write_byte(1)   
		write_byte(3) 
		write_byte(CSW_P228)
		message_end()

		return HAM_HANDLED
	}
	    else
	{
		message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
		write_string("weapon_p228")
		write_byte(9)
		write_byte(52)
		write_byte(-1)
		write_byte(-1)
		write_byte(1)
		write_byte(3)
		write_byte(CSW_P228)
		message_end()
	}
	return HAM_IGNORED
}

replace_weapon_models(id, weaponid)
{
	switch (weaponid)
	{
		case CSW_P228:
		{
			if (zp_get_user_zombie(id) || zp_get_user_survivor(id))
				return
			
			if(g_has_luger[id])
			{
				set_pev(id, pev_viewmodel2, luger_V_MODEL)
				set_pev(id, pev_weaponmodel2, luger_P_MODEL)
				if(oldweap[id] != CSW_P228) 
				{
					UTIL_PlayWeaponAnimation(id, luger_DRAW)
					set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
					
					message_begin(MSG_ONE, gmsgWeaponList, _, id)
					write_string("weapon_luger")
		                        write_byte(9)
		                        write_byte(52)
		                        write_byte(-1)
		                        write_byte(-1)
		                        write_byte(1)   
		                        write_byte(3) 
		                        write_byte(CSW_P228)
		                        message_end()
				}
			}
		}
	}
	oldweap[id] = weaponid
}

-------------------------------------------------------------------------------------------

Скачано с сайта Zombie-Mod.Ru
Автор статьи: Slimes

-------------------------------------------------------------------------------------------