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    - Новое кол-во боезапаса.
Личные инструменты