Weapon Mod API
Материал из HLWiki
Weapon Mod - модуль для AMX Mod X, позволяющий создавать свои плагины, добавляющие новые разновидности оружия и боеприпасов в игру. Для создания новых пушек Вам потребуются лишь базовые навыки и знания по написанию скриптов для АМХХ. Более подробно узнать о модуле Вы можете в соответствующей теме на нашем форуме. В данной же статье приведено описание API интерфейса модуля. Ниже представлен список всех нативов и констант, используемых модулем.
Константы и макросы
Тип звука выбрасываемых гильз
#define TE_BOUNCE_NULL 0 // Без звука. #define TE_BOUNCE_SHELL 1 // Обычная гильза. #define TE_BOUNCE_SHOTSHELL 2 // Гильза от патронов для дробовиков.
Громкость выстрела
#define LOUD_GUN_VOLUME 1000 // Очень громкий. #define NORMAL_GUN_VOLUME 600 // Средняя громкость. #define QUIET_GUN_VOLUME 200 // Очень тихий выстрел.
Яркость вспышки от выстрела
#define BRIGHT_GUN_FLASH 512 // Очень ярко. #define NORMAL_GUN_FLASH 256 // Средняя яркость. #define DIM_GUN_FLASH 128 // Слабая яркость.
Флаги оружия
#define ITEM_FLAG_SELECTONEMPTY 1 // Позволяет выбирать в худе оружие без боеприпасов. #define ITEM_FLAG_NOAUTORELOAD 2 // Не перезаряжать автоматически. #define ITEM_FLAG_NOAUTOSWITCHEMPTY 4 // Не переключаться на другое оружие при израсходовании всех боеприпасов. #define ITEM_FLAG_LIMITINWORLD 8 // Количество оружия ограничено в игровом мире. #define ITEM_FLAG_EXHAUSTIBLE 16 // Игрок может израсходовать весь боеприпас и в итоге лишиться оружия.
Стандартные векторы разброса пуль
#define VECTOR_CONE_1DEGREES Float:{ 0.00873, 0.00873, 0.00873 }
#define VECTOR_CONE_2DEGREES Float:{ 0.01745, 0.01745, 0.01745 }
#define VECTOR_CONE_3DEGREES Float:{ 0.02618, 0.02618, 0.02618 }
#define VECTOR_CONE_4DEGREES Float:{ 0.03490, 0.03490, 0.03490 }
#define VECTOR_CONE_5DEGREES Float:{ 0.04362, 0.04362, 0.04362 }
#define VECTOR_CONE_6DEGREES Float:{ 0.05234, 0.05234, 0.05234 }
#define VECTOR_CONE_7DEGREES Float:{ 0.06105, 0.06105, 0.06105 }
#define VECTOR_CONE_8DEGREES Float:{ 0.06976, 0.06976, 0.06976 }
#define VECTOR_CONE_9DEGREES Float:{ 0.07846, 0.07846, 0.07846 }
#define VECTOR_CONE_10DEGREES Float:{ 0.08716, 0.08716, 0.08716 }
#define VECTOR_CONE_15DEGREES Float:{ 0.13053, 0.13053, 0.13053 }
#define VECTOR_CONE_20DEGREES Float:{ 0.17365, 0.17365, 0.17365 }
Классификация энтить
#define CLASS_NONE 0 #define CLASS_MACHINE 1 #define CLASS_PLAYER 2 #define CLASS_HUMAN_PASSIVE 3 #define CLASS_HUMAN_MILITARY 4 #define CLASS_ALIEN_MILITARY 5 #define CLASS_ALIEN_PASSIVE 6 #define CLASS_ALIEN_MONSTER 7 #define CLASS_ALIEN_PREY 8 #define CLASS_ALIEN_PREDATOR 9 #define CLASS_INSECT 10 #define CLASS_PLAYER_ALLY 11 #define CLASS_PLAYER_BIOWEAPON 12 #define CLASS_ALIEN_BIOWEAPON 13
Типы анимации игрока
enum PLAYER_ANIM
{
PLAYER_IDLE,
PLAYER_WALK,
PLAYER_JUMP,
PLAYER_SUPERJUMP,
PLAYER_DIE,
PLAYER_ATTACK1,
};
Типы форвардов для аммобоксов
enum e_AmmoFwds
{
/**
* В вызываемые функции (callbacks) передаются следующие параметры:
*
* @param iItem - Индекс энтити аммобокса.
*/
Fwd_Ammo_Spawn, // Событие спауна аммобокса.
Fwd_Ammo_AddAmmo, // Излечение необходмиго кол-ва аммо и его добавление к игроку.
Fwd_Ammo_End
};
Типы форвардов для оружия
enum e_WpnFwds
{
/**
* В вызываемые функции (callbacks) передаются следующие параметры:
*
* @param iItem - Индекс энтити оружия.
* @param iPlayer - Индекс игрока, владельца оружия.
* @param iClip - Кол-во аммо в обойме (магазине)оружия.
* @param iAmmo - Кол-во аммо в запасе у игрока к данному оружию.
*/
Fwd_Wpn_Spawn, // Событие спауна оружия.
Fwd_Wpn_CanDeploy, // Возможность активации оружия.
Fwd_Wpn_Deploy, // Активация оружия.
Fwd_Wpn_Idle, // Период бездействия оружия.
Fwd_Wpn_PrimaryAttack, // Вызывается при активации главного режима стрельбы (кнопка атаки mouse1).
Fwd_Wpn_SecondaryAttack, // Вызывается при активации второго режима стрельбы (кнопка атаки mouse2).
Fwd_Wpn_Reload, // Вызывается при перезарядке.
Fwd_Wpn_CanHolster, // Проверяет готовность оружия к дезактивации.
Fwd_Wpn_Holster, // Процесс дезактивации оружия.
Fwd_Wpn_IsUseable, // Проверка оружия на возможность его использования.
Fwd_Wpn_AddToPlayer, // Вызывается при добавлении оружия в инвентарь игрока.
Fwd_Wpn_End
};
Типы оффсетов
enum e_Offsets
{
// Оффсеты применяемые только к энтитям-оружиям:
Offset_flStartThrow,
Offset_flReleaseThrow,
Offset_iChargeReady,
Offset_iInAttack,
Offset_iFireState,
Offset_iFireOnEmpty, // Истина когда для оружия кончились боеприпасы, а кнопки атаки все еще зажаты.
Offset_flPumpTime,
Offset_iInSpecialReload, // Находимся ли мы в середине перезарядки для дробовиков.
Offset_flNextPrimaryAttack, // Устанавливаем время до следующей основной атаки.
Offset_flNextSecondaryAttack, // Устанавливаем время до следующей дополнительной атаки.
Offset_flTimeWeaponIdle, // Время до следующего периода бездействия оружия.
Offset_iPrimaryAmmoType, // ID основных боеприпасов оружия.
Offset_iSecondaryAmmoType, // ID дополнительных боеприпасов оружия.
Offset_iClip, // Кол-во аммо в обойме (магазине)оружия, равно -1, если оружие не имеет обоймы.
Offset_iInReload, // Находится ли оружие в состоянии перезарядки.
Offset_iDefaultAmmo, // Какое кол-во аммо идет вместе с оружием при его поднятии.
// Оффсеты применяемые только к игрокам:
Offset_flNextAttack, // Время до следующей атаки.
Offset_iWeaponVolume, // Насколько громкое стреляет оружие у игрока в данный момент.
Offset_iWeaponFlash, // Яркость оружейной вспышки.
Offset_iLastHitGroup, // Последний хитплейс игрока, полчувший урон.
Offset_iFOV, // Поле обзора игрока.
// Кастомные оффсеты, в которых можно хранить свои данные. Применимо только к оружию и кастомным энтитям, созданным через "info_target" метод:
Offset_iuser1,
Offset_iuser2,
Offset_iuser3,
Offset_iuser4,
Offset_fuser1,
Offset_fuser2,
Offset_fuser3,
Offset_fuser4,
Offset_End
};
Нативы
Регистрация оружия
native wpnmod_register_weapon(const szName[], const iSlot, const iPosition, const szAmmo1[], const iMaxAmmo1, const szAmmo2[], const iMaxAmmo2, const iMaxClip, const iFlags, const iWeight);
@param szName - Название оружия.
@param iSlot - Слот худа, в который будет помещена наша пушка.
@param iPosition - Позиция в слоте.
@param szAmmo1 - Название основных боеприпасов ("MY_AMMO" и т.д, также можно указать оригинальные боеприпасы, использующиеся в half-life, например "357", "9mm", "uranium")
@param iMaxAmmo1 - Максимально кол-во основных боеприпасов.
@param szAmmo2 - Название вторичных боеприпасов (оставить пустым, если нету).
@param iMaxAmmo2 - Максимально кол-во вторичных боеприпасов (ставим -1, если нету).
@param iMaxClip - Максимально кол-во патронов в магазине (ставим -1 и сразу будет израсходоваться боезапас, без магазина).
@param iFlags - Флаги оружия (смотрим в константах и макросах).
@param iWeight - "Вес" оружия, который играет роль при автопереключени пушек.
@return - Возвращает ID зарегистрированого оружия, -1 в случае неудачи.
Регистрация форвардов для оружия
native wpnmod_register_weapon_forward(const iWeaponID, const e_WpnFwds: iForward, const szCallBack[]); @param iWeaponID - ID оружия, полученный из регистрации оружия. @param iForward - Тип хука. @param szCallBack - Функция, которая будет вызвана по этому хуку.
Регистрация аммобокса
native wpnmod_register_ammobox(const szClassname[]); @param szName - Класснейм аммобокса. @return - Возвращает ID зарегистрированого аммобокса, -1 в случае неудачи.
Регистрация форвардов для аммобоксов
native wpnmod_register_ammobox_forward(const iWeaponID, const e_AmmoFwds: iForward, const szCallBack[]); @param iAmmoboxID - ID аммобокса, полученный из регистрации аммобокса. @param iForward - Тип хука. @param szCallBack - Функция, которая будет вызвана по этому хуку.
Установка отложенного задания (think функция)
native wpnmod_set_think(const iItem, const szCallBack[]); @param iItem - Индекс энтити, для которой необходимо вызвать отложенное задание. @param szCallBack - Функция, которая будет вызвана. /* * Аналог set_task натива. Пример использования: * * wpnmod_set_think(iItem, "M249_CompleteReload"); * set_pev(iItem, pev_nextthink, get_gametime() + 1.52); * * В итоге через 1.52 секунды будет взвана функция "M249_CompleteReload". * В вызываемую функцию будут переданы следующие параметры: * * @param iItem - Индекс энтити оружия. * @param iPlayer - Индекс игрока, владельца оружия. * @param iClip - Кол-во аммо в обойме (магазине)оружия. * @param iAmmo - Кол-во аммо в запасе у игрока к данному оружию. * * Данный натив также применим и к кастомным энтитям, созданным через "info_target" метод. * В этом случае в вызываемую функцию будет передана только параметр с индексом энтити. */
Проигрывание анимации модели оружия
native wpnmod_send_weapon_anim(const iItem, const iAnim); @param iItem - Индекс энтити оружия. @param iAnim - Номер анимации модели нашего оружия для проигрывания (можно узнать через Model Viewer).
Проигрывание определенного типа анимации моделью игрока
native wpnmod_set_player_anim(const iPlayer, const PLAYER_ANIM: iPlayerAnim); @param iPlayer - Индекс игрока. @param iPlayerAnim - Тип анимации.
Установка целочисленного значения по оффсету для энтити
native wpnmod_set_offset_int(const iEntity, const e_Offsets: iOffset, const iValue); @param iEntity - Индекс энтити. @param iOffset - Тип оффсета. @param iValue - Значение.
Получение целочисленного значения по оффсету для энтити
native wpnmod_get_offset_int(const iEntity, const e_Offsets: iOffset); @param iEntity - Индекс энтити. @param iOffset - Тип оффсета. @return - Значение по оффсету. (integer)
Установка вещественного значения по оффсету для энтити
native wpnmod_set_offset_float(const iEntity, const e_Offsets: iOffset, const Float: flValue); @param iEntity - Индекс энтити. @param iOffset - Тип оффсета. @param flValue - Значение.
Получение вещественного значения по оффсету для энтити
native Float: wpnmod_get_offset_float(const iEntity, const e_Offsets: iOffset); @param iEntity - Индекс энтити. @param iOffset - Тип оффсета. @return - Значение по оффсету. (float)
Функция активации оружия по умолчанию
native wpnmod_default_deploy(const iItem, const szViewModel[], const szWeaponModel[], const iAnim, const szAnimExt[]); @param iItem - Индекс энтити оружия. @param szViewModel - Модель оружия, видимая только её владельцу (V). @param szWeaponModel - Модель оружия в руках игрока, видимая со стороны остальным (P). @param iAnim - Номер анимации для проигрывания при активации. @param szAnimExt - Расширение анимации для модели игрока.
Функция перезарядки оружия по умолчанию
native wpnmod_default_reload(const iItem, const iClipSize, const iAnim, const Float: flDelay); @param iItem - Индекс энтити оружия. @param iClipSize - Размер обоймы (магазина). @param iAnim - Номер анимации перезарядки для проигрывания. @param flDelay - Длительность перезарядки.
Проигрывание звука осечки
native wpnmod_play_empty_sound(const iItem); @param iItem - Индекс энтити оружия.
Сброс звука осечки
native wpnmod_reset_empty_sound(const iItem); @param iItem - Индекс энтити оружия. /* Необходимо для дальнейшего проигрывания звука осечки */
Выстрел пулей по умолчанию
native wpnmod_fire_bullets(const iPlayer, const iAttacker, const iShotsCount, const Float: vecSpread[3], const Float: flDistance, const Float: flDamage, const bitsDamageType, const iTracerFreq); @param iPlayer - Индекс игрока, владельца оружия. @param iAttacker - Индекс атакующего, как правило владельца оружия. @param iShotsCount - Кол-во выстрелов за раз. @param vecSpread - Разброс. @param flDistance - Дальность выстрела. @param flDamage - Урон. @param bitsDamageType - Тип урона (DMG_ биты). @param iTracerFreq - Частота трасеров.
Урон в заданном радиусе
native wpnmod_radius_damage(const Float: vecSrc[3], const iInflictor, const iAttacker, const Float: flDamage, const Float: flRadius, const iClassIgnore, const bitsDamageType); @param vecSrc - Координаты взрыва. @param iInflictor - Индекс энтити, которая наносит урон. @param iAttacker - Индекс атакующего. @param flDamage - Значение урона. @param flRadius - Радиус поражения. @param iClassIgnore - Класс энтить для игнора урона @param bitsDamageType - Тип урона (DMG_ биты).
Экстракция гильзы из оружия
native wpnmod_eject_brass(const iPlayer, const iShellModelIndex, const iSoundtype, const Float: flForwardScale, const Float: flUpScale, const Float: flRightScale); @param iPlayer - Индекс игрока. @param iShellModelIndex - Индекс прекешенной модели гильзы. @param iSoundtype - Тип звука. @param flForwardScale - Смещение вперед относительно игрока. @param flUpScale - Смещение вверх относительно игрока. @param flRightScale - Смещение вбок относительно игрока.
Создание энтити оружия или аммобокса
native wpnmod_create_item(const szName[], const Float: vecOrigin[3] = {0.0, 0.0, 0.0}, const Float: vecAngles[3] = {0.0, 0.0, 0.0});
@param szName - Класснейм энтити, которую хотим создать.
@param vecOrigin - Координаты где заспаунить.
@param vecAngles - Углы, под которыми отспаунить.
@return - Возвращает индекс созданной энтити или -1 в случае неудачи. (integer)
Получение кол-ва аммо в запасе у игрока
native wpnmod_get_player_ammo(const iPlayer, const szAmmoName[]);
@param iPlayer - Индекс игрока.
@param szAmmoName - Тип боеприпасов. ("9mm", "uranium", "MY_AMMO" etc..)
@return - Возвращает кол-во боеприпасов. (integer)
Установка кол-ва аммо в запасе у игрока
native wpnmod_set_player_ammo(const iPlayer, const szAmmoName[], const iAmount);
@param iPlayer - Индекс игрока.
@param szAmmoName - Тип боеприпасов. ("9mm", "uranium", "MY_AMMO" etc..)
@param iAmount - Новое кол-во боезапаса.