Есть ли у игрока AK47, если да то получить id оружия

Сообщения
31
Реакции
11
Помог
1 раз(а)
Нужно узнать есть ли у игрока определенное оружие(АК-47) и получить его id.

C++:
rg_has_item_by_name(id, "weapon_ak47");

Думаю нужно что-то аналогичное этому:
C++:
new WeaponId = get_member(pPlayer, m_rgpPlayerItems, PRIMARY_WEAPON_SLOT);
Стоит еще учитывать что может быть несколько оружий в этом слоте

Как это можно реализовать?
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Нужно узнать есть ли у игрока определенное оружие(АК-47) и получить его id.
m_iId.

Стоит еще учитывать что может быть несколько оружий в этом слоте
Через цикл по m_rgpPlayerItems, где следующий предмет это m_pNext.
 
Сообщения
31
Реакции
11
Помог
1 раз(а)
fantom, сейчас нет.
Было дело, около 3 раз. Думаю если б заметил что-то годно для этой темы то скопировал бы.
Так же смотрел ваши кастомные оружия, но...
 
Сообщения
31
Реакции
11
Помог
1 раз(а)
fl0wer,

C++:
new iWpn = get_member(id, m_rgpPlayerItems, PRIMARY_WEAPON_SLOT);
while(iWpn != FM_NULLENT)
{
    ExecuteHamB(Ham_Weapon_RetireWeapon, iWpn);
    ExecuteHam(Ham_RemovePlayerItem, id, iWpn);
    ExecuteHam(Ham_Item_Kill, iWpn);
    set_entvar(id, var_weapons, get_member(id, var_weapons) & ~(1<<get_member(iWpn, m_iId)));
    iWpn = get_member(iWpn, m_pNext);
}
Так?
c интернета + edit
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Сообщения
31
Реакции
11
Помог
1 раз(а)
Исправил на тему:

C++:
new iWpn = get_member(id, m_rgpPlayerItems, PRIMARY_WEAPON_SLOT);
for(new i; i < 3; i++) // вычислить количество оружий в 1 слоте?! (size)
{
    if(get_member(iWpn, m_iId) == WEAPON_AK47)
    {
        new iWpnId = get_member(iWpn, m_pPlayer);
        ExecuteHam(Ham_RemovePlayerItem, id, iWpnId);
        break;
    }
    iWpn = get_member(iWpn, m_pNext);
}

Через цикл по m_rgpPlayerItems, где следующий предмет это m_pNext.
Как узнать size > m_rgpPlayerItems чтоб вести этот цикл?
25 Мар 2021
Более правильно будет описать задачу так:

1. Найти определенное оружие(АК-47) в инвентаре игрока
2. Получить id оружия.
3. Сравнить импульсы 1 оружия со 2 оружием
4. Если импульсы идентичны — удалить.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Ято вы хотите сжелать в итоге? Только так можно дать верный ответ. Вип оружие?
 
Сообщения
31
Реакции
11
Помог
1 раз(а)
fantom,
Выдаю/Забираю кастомное оружие через мульти форвард у игрока при наличии или отсутствии Админки (почти угадали).
 
Сообщения
31
Реакции
11
Помог
1 раз(а)
Нашел решение в Склад полезного кода

Решение:
C++:
new WeaponId = UTIL_GetItemByName(pPlayer, "weapon_ak47");
C++:
#define IsValidEntity(%0)                bool: ( pev_valid( %0 ) == 2 )
#define linux_diff_player 5
#define m_rpgPlayerItems 367

stock UTIL_GetItemByName(const pPlayer, const szItemName[])
{
    for(new i, szClassName[20], pItem; i < 6; i++)
    {
        pItem = get_pdata_cbase(pPlayer, m_rpgPlayerItems + i, linux_diff_player);

        while(IsValidEntity(pItem))
        {
            get_entvar(pItem, var_classname, szClassName, charsmax(szClassName));

            if(equal(szClassName, szItemName))
                return pItem;

            pItem = get_member(pItem, m_pNext);
        }
    }

    return -1;
}
C++:
#define IsValidEntity(%0) bool: ( pev_valid( %0 ) == 2 )
C++:
pItem = get_pdata_cbase(pPlayer, m_rpgPlayerItems + i, linux_diff_player);
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
344
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Сообщения
31
Реакции
11
Помог
1 раз(а)
RockTheStreet, смотрел по списку)
чуть ниже последнего из списка, случайно наткнулся
 

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

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