Custom Weapons API

Custom Weapons API 0.7.5

Нет прав для скачивания
Сообщения
392
Реакции
283
Помог
3 раз(а)
ArKaNeMaN добавил(а) новый ресурс:

Custom Weapons API - API для создания кастомного оружия

Плагин позволяет создавать оружия с уникальными характеристиками на основе стандартного.
Также предоставляет API для наделения созданного оружия особыми свойствами через доп. плагины. (Примеры таких плагинов есть на GitHub в том же репозитории)
Узнать больше об этом ресурсе...
 
Последнее редактирование:
Сообщения
1,419
Реакции
2,509
Помог
59 раз(а)
Более правильнее да и удобнее, как по мне, было бы 1 оружие = 1 файл, не добавляя всё в один Weapons.json.
 
Сообщения
392
Реакции
283
Помог
3 раз(а)
Более правильнее да и удобнее, как по мне, было бы 1 оружие = 1 файл, не добавляя всё в один Weapons.json.
Хмм... Ну, кстати, да... Есть такое. Так можно будет легко заливать чьи-то пресеты пушек... Как время будет, сделаю.
 
Сообщения
1,419
Реакции
2,509
Помог
59 раз(а)
По коду, могу сказать для начала разве что, код в одну строку сильно ухудшает чтение, как пример:

Код:
    if(Data[CWAPI_WD_HasSecondaryAttack]) set_member(ItemId, m_Weapon_bHasSecondaryAttack, Data[CWAPI_WD_HasSecondaryAttack]);
    if(Data[CWAPI_WD_Weight]) rg_set_iteminfo(ItemId, ItemInfo_iWeight, Data[CWAPI_WD_Weight]);
Код:
    if(DamageBits & DMG_GRENADE) return HC_CONTINUE;
    if(!is_user_connected(Victim) || !is_user_connected(Attacker)) return HC_CONTINUE;
    static ItemId; ItemId = get_member(Attacker, m_pActiveItem);
    if(is_nullent(ItemId)) return HC_CONTINUE;
    static WeaponId; WeaponId = GetWeapId(ItemId);
    if(!IsCustomWeapon(WeaponId)) return HC_CONTINUE;
В хендле нативов можно делать более понятные названия аргументов через enum:


Код:
enum { arg_player = 1, arg_weaponname };

new iPlayer = get_param(arg_player);
Тут ошибка в названии:

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


По мне логичнее тут было бы с 0 начинать, если конечно нет каких-то особых причин текущего варианта:

Код:
enum {

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

    // Прекратить вызов обработчиков и отменить событие
    CWAPI_RET_HANDLED,
};
 
Сообщения
392
Реакции
283
Помог
3 раз(а)
И ещё такой вопрос...
Насколько сложно плагину тянуть данные из динамических массивов?
Стоит ли этот момент как-то оптимизировать? Например, сделать кеш с данными о последней использованной пушке для каждого игрока.
22 Сен 2019
По мне логичнее тут было бы с 0 начинать, если конечно нет каких-то особых причин текущего варианта:
Даже не помню уже... Была ли на то какая-то причина... Посмотрю этот момент

Тут ошибка в названии:

C++:
/**
* Вызывается после загрузки всех пушек из конфига
*
* @noreturn
*/
forward CWAPI_LoawWeaponsPost();
CWAPI_Load...
Хмм... Чёт я вроде помню что исправлял её... Ну ладно

По коду, могу сказать для начала разве что, код в одну строку сильно ухудшает чтение, как пример:
Мне уже об этом говорили... Надо вот мне привыкать не писать так...
 
Сообщения
392
Реакции
283
Помог
3 раз(а)
В хендле нативов можно делать более понятные названия аргументов через enum:

C++:
enum { arg_player = 1, arg_weaponname };

new iPlayer = get_param(arg_player);
Спасибо за совет... Вроде удобно
 
Сообщения
392
Реакции
283
Помог
3 раз(а)
И ещё такой вопрос...
Насколько сложно плагину тянуть данные из динамических массивов?
Стоит ли этот момент как-то оптимизировать? Например, сделать кеш с данными о последней использованной пушке для каждого игрока.
Так что?
 
Сообщения
576
Реакции
1,003
Помог
18 раз(а)
Зачем везде статики?
Зачем паковать параметры в дин. массив, когда известно что у вас не больше 4-х параметров. Вы каждый раз создаете класс с выделением под 32 ячейки, хоть параметр резерва поменяйте.
Существует и такое.
Код:
#include <amxmodx>

public plugin_init()
{
    func(1, 2, 3, 4, 5);
    func(1, 2, 3, 4);
    func(1, 2, 3);
}

func(fixed, ...)
{
    new pcount = numargs();
    server_print("func call, params %d", pcount);
    server_print("fixed params %d", fixed);
    // we have one fixed param and max 4 dynamic
    server_print("dynamic params:");
    new dparams[4];
    for(new i; i < pcount - 1; i++) {
        dparams[i] = getarg(i + 1);
        server_print("%d - %d", i, dparams[i]);
    }
}
1569381507598.png
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
ArKaNeMaN, ну или https://dev-cs.ru/amxx/datapack/inc вам подойдет
25 Сен 2019
Еще один из вариантов
Код:
#include <amxmodx>

#define EXECUTE_FORWARD(%1,%2) ExecuteForward(%1, FReturn, %2)

new Forward, FReturn;
public plugin_init() {
    Forward = CreateMultiForward("TestFwd", ET_IGNORE, FP_CELL, FP_STRING); // ....
    EXECUTE_FORWARD(Forward, 1, "test");
}
 
Сообщения
392
Реакции
283
Помог
3 раз(а)
Еще один из вариантов
C++:
#include <amxmodx>

#define EXECUTE_FORWARD(%1,%2) ExecuteForward(%1, FReturn, %2)

new Forward, FReturn;
public plugin_init() {
Forward = CreateMultiForward("TestFwd", ET_IGNORE, FP_CELL, FP_STRING); // ....
EXECUTE_FORWARD(Forward, 1, "test");
}
Это не подойдёт... Там у меня не совсем обычный форвард.

Существует и такое.
C++:
#include <amxmodx>

public plugin_init()
{
func(1, 2, 3, 4, 5);
func(1, 2, 3, 4);
func(1, 2, 3);
}

func(fixed, ...)
{
new pcount = numargs();

server_print("func call, params %d", pcount);
server_print("fixed params %d", fixed);
// we have one fixed param and max 4 dynamic
server_print("dynamic params:");
new dparams[4];
for(new i; i < pcount - 1; i++) {
dparams[i] = getarg(i + 1);
server_print("%d - %d", i, dparams[i]);
}
}
Хмм... Догадывался шо так можно, но не нашёл примера... Спасибо!

Зачем везде статики?
Даже не знаю... Так исторически сложилось. :)
И не везде... В загрузке пушек их нет.

Зачем паковать параметры в дин. массив, когда известно что у вас не больше 4-х параметров. Вы каждый раз создаете класс с выделением под 32 ячейки, хоть параметр резерва поменяйте.
Ой... И правда XD
Не знал про резерв...
 
Сообщения
494
Реакции
109
Помог
16 раз(а)
Возможно будет ли реализовано добавление альтернативного режима огня на пкм? или переключение например одиночными или очередями,выстрел подствольным гранатометом например?
 
Сообщения
392
Реакции
283
Помог
3 раз(а)
или переключение например одиночными или очередями
Пока не совсем представляю как это можно сделать... Параметр стрельбы очередями есть только в классах Глока и фамаса... Можно кастомную штурм. винтовку просто основать на фамасе и оно будет изначально.

Возможно будет ли реализовано добавление альтернативного режима огня на пкм?
Уже можно сделать так, чтобы у пушки срабатывало событие вторичной атаки, но самой атаки при этом не будет... Надо в модуле ловить это событие и делать в нём шо нужно.
Пример есть на гите в том же репозитории... В модуле способности Fire на ПКМ вкл/выкл поджог.
И ещё, нельзя отменить дефолтное действие.
 
Сообщения
494
Реакции
109
Помог
16 раз(а)
ArKaNeMaN, добавление альтернативного режима огня на пкм я имел ввиду например револьвер r8 из ксго. я видел только один плагин где это реализовано нормально,один от Vaqtincha и код закрыт, Я к тому что например можно сделать ружье с 2 патронами,пкм выстреливает сразу 2 патрона.
 
Сообщения
392
Реакции
283
Помог
3 раз(а)
добавление альтернативного режима огня на пкм я имел ввиду например револьвер r8 из ксго. я видел только один плагин где это реализовано нормально,один от Vaqtincha и код закрыт, Я к тому что например можно сделать ружье с 2 патронами,пкм выстреливает сразу 2 патрона.
Ну я и говорю... Можно в кфг пушки активировать у неё вторичную атаку и написать модуль, который будет добавлять пушкам какую-либо альт. атаку.
Может займусь этим на след неделе.
 
Сообщения
494
Реакции
109
Помог
16 раз(а)
Взял плагин установил как он был в архиве. При броске AUG такая моделька 19179 так и должно быть?

Если магазин полный у оружия и попробовать перезарядить,будет проигрываться анимация,точнее попытка,если же зажать R То перезарядит полную обойму,ну по сути просто анимация
 
Сообщения
392
Реакции
283
Помог
3 раз(а)
Взял плагин установил как он был в архиве. При броске AUG такая моделька https://dev-cs.ru/attachments/19179/ так и должно быть?
Вообще... Не должно... Тоже это заметил, но как-то внимание не сильно обращал... Посмотрел почему оно так... Не понял и забыл потом... Завтра вечером посмотрю шо и как
28 Сен 2019
И да... Это при выбрасывании любого оружия
28 Сен 2019
Если магазин полный у оружия и попробовать перезарядить,будет проигрываться анимация,точнее попытка,если же зажать R То перезарядит полную обойму,ну по сути просто анимация
Это тоже попробую поправить
 
Сообщения
494
Реакции
109
Помог
16 раз(а)
ArKaNeMaN, если при любом оружии выбрасывается,зачем тогда в конфиге w_ модель,ну так наверно не должно быть.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу