Русское сообщество по скриптингу

Увеличить обойму

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Увеличить обойму

Сообщение Flowy » 26 янв 2022, 21:09

Как можно реализовать увеличение обоймы всех оружий на какой-то процент?

У меня есть булевая переменная, если 1, то увеличивает, если 0 - нет, проще говоря - переключатель. Пробовал увеличивать через cs_set_weapon_ammo в событии Ham_Item_Deploy, но оно каждый раз увеличивает магазин при выборе. Тогда создал переменную куда записывается id выбранного оружия, чтобы при выборе другого оружия, в последнем уменьшалась обойма, а затем при его выборе снова увеличивалась, но сразу же проблемы с округлением, потому что увеличивается именно на какой то процент и патроны меняются на +-1; иногда при выборе оружия оно сначала уменьшает, а затем увеличивает. Да и проблема с обнулением увеличения при перезарядке осталась.

Думаю ещё попробовать создать массив, куда будут записываться id оружий в которых уже увеличивалась обойма и обнулять нужную ячейку при перезарядке.

Есть какая-нибудь упрощенная реализация?
Аватара пользователя
Flowy
 
Сообщения: 2
Зарегистрирован: 17 сен 2019, 21:36
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, C++, C#, SQL, JavaScript, React.JS

Re: Увеличить обойму

Сообщение hren_morjovui » 24 фев 2022, 12:40

В
Код: Выделить всё
register_event("CurWeapon", "event_curweapon", "be", "1=1");
делать, общая переменная для игроков у кого какое оружие активно типа
Код: Выделить всё

public event_curweapon
(const player_id)
{
    if(read_data(2) != player_aitem_csw_id[player_id])
        set_player_item_models(player_id);

    player_aitem_csw_id[player_id] = read_data(2);
}


так же проверку в
Код: Выделить всё
RegisterHam(Ham_Weapon_Reload, item_classname, "ham_weapon_reload_pre", false);

и если возможно перезарядить оружие то блочить стандартную перезарядку потом воспроизводить анимацию самому, записать время когда заканчивается проигрывание анимации и ставить по окончанию новый запас патронов
у меня тут:
Код: Выделить всё

public forward_player_pre_think
(player_id)
{
    if(!player_alive[player_id])
        return FMRES_IGNORED;

    if(player_secondary_reload_time[player_id] > 0.0 && player_secondary_reload_time[player_id] < halflife_time())
    {
        if(is_custom_weapon_active(player_id))
        {
            cs_set_user_bpammo(player_id, item_csw_id, 120);
            set_weapon_clip(player_id, item_csw_id, item_clip_count);

        }
        player_secondary_reload_time[player_id] = 0.0;
    }
    return FMRES_IGNORED;
}


так же нужен
Код: Выделить всё
RegisterHam(Ham_Item_Deploy, item_classname, "ham_item_deploy_pre", false);
для сброса таймера
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 258
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 88 раз.
Поблагодарили: 22 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery

Re: Увеличить обойму

Сообщение БиЗоН » 24 фев 2022, 13:51

Если я тебя правильно понял, то ловишь спавн оружия и присваиваешь нужное количество патронов в обойме (движок будет принимать это значение как дефолтное, то есть перезарядка будет всё учитывать):
Код: Выделить всё
set_member(iWeapon, m_Weapon_iDefaultAmmo, new_ammo);
rg_set_iteminfo(iWeapon, ItemInfo_iMaxClip, new_ammo);
rg_set_user_ammo(pPlayer, WEAPON_AK47, new_ammo); 

Вместо WEAPON_AK47 - своя WEAPON_ константа.
Если не reapi, то используй от хама SetHamItemInfo для установки свойств, cs_set_weapon_ammo для установки количества.

А вот вариант товарища выше я бы рассматривать не стал и вовсе.
Вечно занятой. Вечно в павне.
Аватара пользователя
БиЗоН
 
Сообщения: 165
Зарегистрирован: 24 мар 2014, 21:05
Благодарил (а): 10 раз.
Поблагодарили: 49 раз.
Опыт программирования: Больше трех лет


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: nekruxa и гости: 16