Я встречался с использование данной функции на Jump серверах, что бы не осбо адекватные игроки, не мешали громкими выстрелами другим игрокам.
Инфо из cstrike.inc:
/* If silence = 1, weapon will be silenced, 0 and silencer will be removed. Only USP and M4A1 can be silenced.
*/
native cs_set_weapon_silen(index, silence = 1, draw_animation = 1);
Синтаксис:
cs_set_weapon_silen ( index, [ silence = 1, draw_animation = 1 ] )
- index - Внимание: id объекта оружия, а не игрока.
- silence = 1 - 1 одеть/0 снять глушитель
- draw_animation = 1 - Анимация снимания/одевания глушителя 0/1 off/on
Тип функции:
Native
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#define PLUGIN "[cstrike.inc] cs_set_user_zoom"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /silen","silen")
}
public silen(id){
new wpn_id = find_ent_by_owner(-1, "weapon_usp", id)
cs_set_weapon_silen(wpn_id, 1, 1)
}
Описание:
Обратите внимание:возможность одевания глушителя есть только у UPS и M4A1.
Функция с одной стороны простая, с другой стороны сложная, так в ней используется не id игрока, а id оружия, точнее оружие является объектом (entity), так вот необходимо именно id этого объекта.
Найти его можно с помощью функции find_ent_by_owner модуля engine, которая возвращает id найденного объекта.
И далее уже применяем функцию cs_set_weapon_silen - которая одевает глушитель.
В данном примере если у вас любое оружие кроме USP функция будет выдавать ошибку, так как id будет не правильным.
Вот пример полностью рабочего кода постоянно надетого глушителя:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#define PLUGIN "[cstrike.inc] cs_set_user_zoom"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_message(get_user_msgid("CurWeapon"), "event_weapon");
}
public event_weapon(msg_id, msg_dest, id)
{
new wpn = get_msg_arg_int(2);
if(wpn == 0){
return PLUGIN_CONTINUE;
}
new wpn_name[17];
if(is_user_alive(id)){
get_weaponname(wpn, wpn_name,16);
new wpn_id = find_ent_by_owner(-1, wpn_name, id);
if(!wpn_id){
return PLUGIN_CONTINUE;
}
if(wpn == CSW_USP || wpn == CSW_M4A1)
{
cs_set_weapon_silen(wpn_id, 1, 0);
}
}
return PLUGIN_CONTINUE;
}
В этом примере есть все необходимые проверки и поиск id.
В данный момент данный код стоит и на моем сервер.