Еще можно посмотреть NS сustom weapons API: http://www.nsmod.org/forums/index.php?showtopic=4679 Лучше всего делать т.н. "псевдо" оружие, т.е. без weapon_* entity, т.к. невозможно создать weapon_* entity принципиально нового типа, а, если использовать за базу weapon_* entity существующего типа, прийдется менять wid (weapon index, индекс/номер оружия) на свой собственный wid в private data offset довольно часто, например, в pre weapon drop/collect/pickup/buy и т.п. Более того, встает основаная проблема: проблема функциональности атаки. Мало того, что вам прийдется вводить свою атаку, вам еще будет мешать оригинальная атака, которая буквально "вшита" в клиента, и выдрать ее от туда можно только, если у вас очень крепкие и острые зубы, и вы не боитесь за возможное ухудшение их состояния.
Как игрок выберет ваше оружие? Нужно позаботиться о добавлении оружия в HUD weapon list (список оружий вверху экрана) заранее. В post InitHUD сообщении отсылаем WeaponList сообщение со всеми необходимыми аргументами. Его структуру и описание можно просмотреть тут. За wid нужно брать "2" - это едиснтвенный свободный wid в CS. По названию оружия создаем и прекешируем текстовый файл в sprites директории. Это файл конфигурации HUD различных изображений используемых оружием. За основу можно взять уже существующие weapon_*.txt файлы. Если ваши спрайты нестандартные, прекешируем их. Размеры изображений должны соответствовать стандартам. В конфигурационном txt файле указываем названия спрайтов, а также координаты изображений в спрайте. Формат указания координад следующий: x0, y0, w, h, где x0 и y0 - координаты точки начала изображения в спрайте, а w и h - ширина и высота изображения.
Как правильно выдать оружие? Нужно дать понять клиенту, что игрок имеет оружие данного типа. Т.е. к значению weapons pev прибавляем (желательно с помощью bitwise оператора OR) бит wid вашего оружия. В данном случае это будет выглядеть примерно так: weapons |= (1<<2).
Итак, игрок пытается выбрать оружие, но соответствующей weapon_* entity у него нет, поэтому мы навешиваем хук на команду, соответствующую названию оружия, которое указывали при отсылке WeaponList клиенту. В хуке уже можно будет выполнить код, который "выберет" оружие.
Как правильно выбрать оружие? За базу, т.е. то, что игрок будет держать в руках фактически, все равно прийдется брать другое оружие, и лучше всего нож, т.к. блокировать атаки ножа проще всего (как это осуществить, см. в "поиске плагинов", тему про блокировку атаки ножа, мой плагин "Knife Attack Blocker"). Т.е. форсируем выбор ножа, эмулируя команду его выбора непосредственно на сервере (желательно блокировать звук выбора ножа). Изменяем veiw и weaponmodel pev значения в соответствии с моделями оружия, которые, естественно, должны быть прекешированы заранее. Также можно издать звук выбора оружия и воспроизвести соответствующую анимацию. Более того, следует сообщить AMX Mod X о том, что игрок имеет данное оружие. Для этого мы используем native amxx_setpl_curweap(id, wid). Т.к. данной функции нет в includ'ах, необходимо прописывать ее в ваших инклудах или непосредственно в самом коде плагина. Тут нужно отметить, что следует "исправлять" curweap значение, если предыдущее оружие игрока отличалось от ножа. Это связано с запаздыванием CurWeapon сообщения при выборе оружия. Для исправления этого недостатка навешиваем хук на CurWeapon событие выбора ножа и, если pev значения моделей оружия соответствует моделям вашего оружия, устанавливаем curweap повторно. Затем устанавливаем блокировку атак ножа и отслеживаем нажатие кнопки атаки. Атака - это отдельный вопрос, и я могу говорить об этом долго. Поэтому для начала остановимся здесь.
Примечание: я понимаю, что это больше похоже на художественное произведение, и что данные объяснения в 99% случаев не помогут вам создать новое оружие, но я полагаюсь на один оставшийся процент.