ReHLDS/ReAPI Custom Weapons API

ArKaNeMaN

Пользователь
Регистрация
24 Дек 2017
Сообщения
25
Симпатии
9
Автор: ArKaNeMaN
Версия: 0.5.0-beta


Репозиторий: ArKaNeMaN/amxx-CustomWeaponsAPI
Мультиязычность: RU, EN

Требования:

Описание:
Плагин позволяет создавать оружие с уникальными характеристиками на основе стандартного.
Также предоставляет API для наделения созданного оружия особыми свойствами через доп. плагины. (Примеры таких плагинов есть на GitHub в том же репозитории).

Настройка оружия:
Для каждого оружия создаётся отдельный файл с его настройками в папке amxmodx/configs/plugins/CustomWeaponsAPI/Weapons/.
Название файла: <WeaponName>.json
JSON:
{
    "DefaultName": [String] Название дефолтного оружие, на котором будет основано кастомное,
    "Models": {
        "v": [String] v_ модель оружия (Опционально),
        "p": [String] p_ модель оружия (Опционально),
        "w": [String] w_ модель оружия (Опционально)
    },
    "Sounds": {
        "Shot": [String] Звук выстрела,
        "ShotSilent": [String] Звук выстрела с глушителем (Только для M4A1 и USP-S),
        "OnlyPrecache": [
            [String] Звуковой файл используемый самой моделькой оружия,
            "..."
        ]
    },
    "MaxWalkSpeed": [Int] Скорость бега с оружием в руках,
    "ClipSize": [Int] Максимальное кол-во патронов в обойме,
    "MaxAmmo": [Int] Общее кол-во патронов,
    "DamageMult": [Float] Множитель урона,
    "Damage": [Float] Базовый урон,
    "Accuracy": [Float] Точность (До конца не уверен работает ли),
    "Weight": [Int] Вес оружия,
    "Price": [Int] Цена оружия (Если не указать то купить нельзя будет),
    "DeployTime": [Float] Длительность доставания оружия,
    "ReloadTime": [Float] Длительность перезарядки (Для дробовика время докидывания одного патрона),
    "PrimaryAttackRate": [Float] Интервал между первичными атаками,
    "HasSecondaryAttack": [Bool] Есть ли у оружия вторичная атака*,
    "SecondaryAttackRate": [Float] Интервал между вторичными атаками (Например, снятие\надевание глушителя),
    "Abilities": [ [Array] Список используемых оружием способностей (Без параметров)**
        [String] Название способности,
        "..."
    ],
    "Abilities": { [Object] Список используемых оружием способностей (С параметрами)**
        "AbilityName": {
            "ParamName": [Any] Значение параметра,
            "...": ...
        },
        "...": {...}
    }
}
*Если вторичная атака есть изначально, то отключить её нельзя.
**Нужно выбрать один из способов указания списка способностей.

Файл: amxmodx/configs/plugins/CustomWeaponAPI/Weapons/AugA3War.json
JSON:
{
    "DefaultName": "aug",
    "ClipSize": 40,
    "MaxAmmo": 240,
    "Models": {
        "v": "models/CustomWeapons/AugA3War/v_aug.mdl",
        "p": "models/CustomWeapons/AugA3War/p_aug.mdl",
        "w": "models/CustomWeapons/AugA3War/w_aug.mdl"
    },
    "Sounds": {
        "Shot": "CustomWeapons/AugA3War/aug-1.wav",
        "OnlyPrecache": [
            "weapons/AUG/Mercury/bolt.wav",
            "weapons/AUG/Mercury/boltback.wav",
            "weapons/AUG/Mercury/boltrelease.wav",
            "weapons/AUG/Mercury/bullet.wav",
            "weapons/AUG/Mercury/draw.wav",
            "weapons/AUG/Mercury/magin.wav",
            "weapons/AUG/Mercury/magout.wav",
            "weapons/AUG/Mercury/magtap.wav"
        ]
    },
    "MaxWalkSpeed": 800,
    "DamageMult": 1.15,
    "Weight": 120,
    "Price": 7500,
    "DeployTime": 1.6,
    "PrimaryAttackRate": 0.12,
    "SecondaryAttackRate": 0.5
}

Команды:
CWAPI_Buy <WeaponName>
Покупка кастомного оружия
Пример: CWAPI_Buy NoveskeDiplomat

CWAPI_Give <WeaponName>
Выдача себе кастомного оружия
Пример: CWAPI_Give NoveskeDiplomat
Работает, только если плагин скомпилирован с дефайном DEBUG

API:
C++:
enum CWAPI_WeaponModels{
    CWAPI_WM_V[PLATFORM_MAX_PATH],
    CWAPI_WM_P[PLATFORM_MAX_PATH],
    CWAPI_WM_W[PLATFORM_MAX_PATH],
};

enum CWAPI_WeaponSounds{
    CWAPI_WS_Shot[PLATFORM_MAX_PATH],
    CWAPI_WS_ShotSilent[PLATFORM_MAX_PATH], // Only M4A1 & USP-S
};

enum CWAPI_WeaponEvents{

    /**
    * Описание: Вызывается при основной атаке
    *
    * Параметры: (const ItemId)
    */
    CWAPI_WE_PrimaryAttack = 1,

    /**
    * Описание: Вызывается при вторичной атаке
    *
    * Параметры: (const ItemId)
    */
    CWAPI_WE_SecondaryAttack,

    /**
    * Описание: Вызывается при перезарядке
    *
    * Параметры: (const ItemId)
    */
    CWAPI_WE_Reload,

    /**
    * Описание: Вызывается при доставании оружия
    *
    * Параметры: (const ItemId)
    */
    CWAPI_WE_Deploy,

    /**
    * Описание: Вызывается при убирании оружия
    *
    * Параметры: (const ItemId)
    */
    CWAPI_WE_Holster,

    /**
    * Описание: Вызывается при нанесении урона при помощи оружия
    *
    * Параметры: (const ItemId, const Victim, const Float:Damage, const DamageBits)
    */
    CWAPI_WE_Damage,

    /**
    * Описание: Вызывается при появлении оружия в мире (Выбрасывании)
    *
    * Параметры: (const ItemId, const WeaponBox)
    */
    CWAPI_WE_Droped,

    /**
    * Описание: Вызывается при добавлении оружия в инвентарь
    *
    * Параметры: (const ItemId)
    */
    CWAPI_WE_AddItem,

    /**
    * Описание: Вызывается при выдаче оружия
    *
    * Параметры: (const WeaponId, const UserId)
    */
    CWAPI_WE_Take,

    /**
    * Описание: Вызывается при убийстве при помощи оружия. ПОКА НЕ РАБОТАЕТ
    *
    * Параметры: (const ItemId)
    */
    CWAPI_WE_Kill,
};

enum _:CWAPI_WeaponData{
    CWAPI_WD_Name[32],
    CWAPI_WD_DefaultName[32],
    CWAPI_WD_Models[CWAPI_WeaponModels],
    CWAPI_WD_Sounds[CWAPI_WeaponSounds],
    CWAPI_WD_ClipSize,
    CWAPI_WD_MaxAmmo,
    Float:CWAPI_WD_MaxWalkSpeed,
    CWAPI_WD_Weight,
    Array:CWAPI_WD_CustomHandlers[CWAPI_WeaponEvents],
    Float:CWAPI_WD_DamageMult,
    CWAPI_WD_Price,
    Float:CWAPI_WD_Accuracy,
    Float:CWAPI_WD_DeployTime,
    Float:CWAPI_WD_ReloadTime,
    Float:CWAPI_WD_PrimaryAttackRate,
    Float:CWAPI_WD_SecondaryAttackRate,
    bool:CWAPI_WD_HasSecondaryAttack,
    Float:CWAPI_WD_Damage,
};

enum {

    // Продолжить вызов обработчиков и обработать событие
    CWAPI_RET_CONTINUE = 0,

    // Прекратить вызов обработчиков и отменить событие
    CWAPI_RET_HANDLED,
};

enum _:CWAPI_WeaponAbilityData{
    CWAPI_WAD_WeaponName[32],
    //Trie:CWAPI_WAD_AdditionalData,
}

/**
* Регистрирует хук события оружия
*
* @param WeaponName        Название оружия указанное в конфиге
* @param Event             Событие
* @param HandlerFuncName   Название функции-обработчика
*
* @return      Идентификатор хука. -1 в случае ошибки
*/
native CWAPI_RegisterHook(const WeaponName[], const CWAPI_WeaponEvents:Event, const HandlerFuncName[]);

/**
* Выдаёт кастомное оружие игроку
*
* @param WeaponName        Название оружия указанное в конфиге
* @param UserId            Идентификатор игрока, которому надо выдать оружие
*
* @return      Идентификатор выданного предмета. -1 в случае ошибки
*/
native CWAPI_GiveWeapon(const WeaponName[], const UserId);

/**
* Возвращает Array массив со списком кастомных пушек.
* Надо разрушить массив (ArrayDestroy) после использования
*
* @return      Дескриптор Array массива
*/
native Array:CWAPI_GetWeaponsList();

/**
* Получает индекс кастомного оружия
*
* @param WeaponName   Название кастомного оружия
*
* @return      Индекс кастомного оружия. -1, если такого оружия не существует.
*/
native CWAPI_GetWeaponId(const WeaponName[32]);

/**
* Получает информацию о кастомном оружии
*
* @param WeaponId   Индекс кастомного оружия
* @param Data       Буфер для записи информации об оружии
*
* @return      true в случае удачи, иначе false
*/
native bool:CWAPI_GetWeaponData(const WeaponId, Data[CWAPI_WeaponData]);

/**
* Добавляет кастомное оружие
*
* @note        Если указываются модели, то они должны быть в прекеше.
*
* @param WeaponData    Данные о добавляемом оружии
*
* @return      Индекс добавленного оружия. -1 в случае ошибки.
*/
native CWAPI_AddCustomWeapon(const WeaponData[CWAPI_WeaponData]);

/**
* Поиск кастомного оружия
*
* @note        Если указываются модели, то они должны быть в прекеше.
*
* @param StartWeaponId    Индекс оружия, с которого начинать поиск
* @param Field            Параметр по которому искать оружие (Из CWAPI_WeaponData)
* @param Value            Нужное значение параметра
*
* @return      Индекс найденного оружия. -1, если оружие не найдено.
*/
native CWAPI_FindWeapon(const StartWeaponId, const Field, any:...);

/**
* Возвращает Array массив со списком пушек использующих указанную способность.
*
* @param AbilityName   Название способности
*
* @return      Дескриптор Array массива
*/
native Array:CWAPI_GetAbilityWeaponsList(const AbilityName[]);

/**
* Вызывается после загрузки всех пушек из конфига
*
* @noreturn
*/
forward CWAPI_LoadWeaponsPost();
 

Вложения

Сверху Снизу