Установка патрон.

Сообщения
893
Реакции
149
Помог
25 раз(а)
Ребят, привет. Есть 1 вопрос. Столкнулся с проблемой: мне нужно установить количество патрон у оружия.

Первый вариант был в хуке Ham_Spawn на оружие, но не подходит, так как мне нужно брать значение из массива игрока, а получить индекс игрока там нельзя вроде как.

В адд айтем ту плеер пробовал, но не знаю как пофиксить 1 момент, ибо оно вызывается каждый раз, и можно просто выбросить оружие, поднять его снова и патроны полные.

Есть какие-то варианты как можно это всё провернуть? Что-бы выдавались 1 раз при взятии оружия и все.
C++:
@CBasePlayer__AddPlayerItem_Post(UserId, ItemId) {
    new WeaponId = get_member(ItemId, m_iId);
    new WeaponUserClip = g__iPlayerClip[UserId][WeaponId];

    if(WeaponUserClip) {
        new WeaponMaxClip = rg_get_iteminfo(ItemId, ItemInfo_iMaxClip);

        rg_set_user_ammo(UserId, WeaponIdType: WeaponId, WeaponUserClip);
        rg_set_iteminfo(ItemId, ItemInfo_iMaxClip, WeaponUserClip);
    }

    new WeaponUserAmmo = g__iPlayerAmmo[UserId][WeaponId];

    if(WeaponUserAmmo) {
        new WeaponMaxAmmo = rg_get_iteminfo(ItemId, ItemInfo_iMaxAmmo1);
        rg_set_iteminfo(ItemId, ItemInfo_iMaxAmmo1, WeaponUserAmmo);
    }

    return HC_CONTINUE;
}
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
ImmortalAmxx, я в свое время сделал это как то через жопу, но по моему костыль сработал

Код:
new clip = get_member(ent, m_Weapon_iClip);
new maxClip = rg_get_iteminfo(ent, ItemInfo_iMaxClip);
new newMaxClip = g_userUpgradesStruct[UUS_VALUE];

if (newMaxClip > maxClip) {
    rg_set_iteminfo(ent, ItemInfo_iMaxClip, newMaxClip);

    if (clip == maxClip) {
        set_member(ent, m_Weapon_iClip, newMaxClip);
    }
}
 
Сообщения
677
Реакции
579
Предупреждения
8
Помог
9 раз(а)
оно вызывается каждый раз
можно проверить
C++:
public plugin_init()
{
    RegisterHookChain(RG_CBasePlayer_AddPlayerItem, "CBasePlayer_AddPlayerItem_Pre", .post = false)
}

public CBasePlayer_AddPlayerItem_Pre(const pPlayer, const pItem)
{
    if (!FClassnameIs(get_entvar(pItem, var_owner), "weaponbox"))
    {
        server_print("Способ 1: Получил через GiveItem")
    }
    
    if (get_member(pItem, m_Weapon_iDefaultAmmo) != 0)
    {
        server_print("Способ 2: Получил через GiveItem")
    }
}
 
Сообщения
893
Реакции
149
Помог
25 раз(а)
Спасибо, как раз подсказали что можно проверять на var_ownera. Буду тестировать все методы выше. Спасибо.
 

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

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