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

[ZP]: Наличие у игрока определенного оружия !  [Решено]

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

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

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

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

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

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение MrBest » 02 дек 2019, 23:45

Leonidddd писал(а):MrBest, в том плагине есть проверка на наличие данного оружия g_has_anaconda[33];
Нужно просто создать нэтив на проверку переменно и добавить в плагин, где нужно проверить, если ли у игрока это оружие.
в register_native:

Код: Выделить всё
register_native("zp_has_user_anaconda",            "_zp_has_user_anaconda", true); 


создаем ф-цию:
Код: Выделить всё
public _zp_has_user_anaconda(id) return g_has_anaconda[id]; 


и уже использовать эту проверку в других плагинах добавив в подключаемый инклуд строку
Код: Выделить всё
native zp_has_user_anaconda(id); 


Таак, годнота подъехала , сейчас буду пробовать )

Добавлено спустя 18 минут 15 секунд:
Leonidddd писал(а):MrBest, в том плагине есть проверка на наличие данного оружия g_has_anaconda[33];
Нужно просто создать нэтив на проверку переменно и добавить в плагин, где нужно проверить, если ли у игрока это оружие.
в register_native:

Код: Выделить всё
register_native("zp_has_user_anaconda",            "_zp_has_user_anaconda", true);


создаем ф-цию:
Код: Выделить всё
public _zp_has_user_anaconda(id) return g_has_anaconda[id];


и уже использовать эту проверку в других плагинах добавив в подключаемый инклуд строку
Код: Выделить всё
native zp_has_user_anaconda(id);



сам натив не работает , оружие при покупке не выдается
Аватара пользователя
MrBest
 
Сообщения: 29
Зарегистрирован: 25 сен 2019, 16:17
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn , плагины zombie mod

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение Leonidddd » 02 дек 2019, 23:51

MrBest, как все делали, какова вообще по-итогу проверку и что там выводит? Судя по коду в анаконде, там переменная должна корректно обнуляться
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2257
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 182 раз.
Поблагодарили: 630 раз.

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение MrBest » 03 дек 2019, 00:22

Leonidddd писал(а):MrBest, как все делали, какова вообще по-итогу проверку и что там выводит? Судя по коду в анаконде, там переменная должна корректно обнуляться


Посмотрите пожалуйста может у меня руки кривые?

вот из исходника оружия

Код: Выделить всё
}
public _zp_has_user_anaconda(id) 
{
    return g_has_anaconda[id];
}
public zp_user_humanized_post(id)
{
    g_has_anaconda[id] = false
}

public plugin_natives ()
{
    register_native("give_weapon_anaconda", "native_give_weapon_add", 1)
    register_native("zp_has_user_anaconda", "_zp_has_user_anaconda", true);
}
public native_give_weapon_add(id)
{
    give_anaconda(id)
}



вот из плагина

Код: Выделить всё

native zp_has_user_anaconda
(id)

            if(!
is_user_connected(id))
                return 
PLUGIN_HANDLED;
            else if(
zp_get_user_zombie(id) || zp_get_user_survivor(id))
            {
                
ChatColor(id"!g«Зомби-Подростки®»!y Доступно только !tЛюдям!y")
                return 
PLUGIN_HANDLED;
                
buy_menu(id)
            }    
            else if(
zp_get_user_ammo_packs(id) >= 15)                 
            {
                
zp_set_user_ammo_packs(idzp_get_user_ammo_packs(id) - 15);
                
zp_has_user_anaconda(id)
                
buy_pistol(id)    
            } 
            else 
            {
                
ChatColor(id"!g«Зомби-Подростки®»!y У вас недостаточно аммо!")    
                
client_cmd(id"spk ^"%s^""SND_MENU_OFF)
                
buy_pistol(id
                        }
                   }
 
Аватара пользователя
MrBest
 
Сообщения: 29
Зарегистрирован: 25 сен 2019, 16:17
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn , плагины zombie mod

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение Leonidddd » 03 дек 2019, 02:54

MrBest, почитайте про if ..
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2257
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 182 раз.
Поблагодарили: 630 раз.

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение MrBest » 03 дек 2019, 18:53

Leonidddd писал(а):MrBest, почитайте про if ..


Мда, все таки у меня руки кривые

Добавлено спустя 19 минут 37 секунд:
Leonidddd писал(а):MrBest, почитайте про if ..


Код: Выделить всё


native give_weapon_anaconda
(id)
native _zp_has_user_anaconda(id)

            else if(
zp_get_user_ammo_packs(id) >= 15 || _zp_has_user_anaconda(id))            
            {
                
zp_set_user_ammo_packs(idzp_get_user_ammo_packs(id) - 15);
                
give_weapon_anaconda(id)
                
buy_pistol(id)    

 


Так веть должно быть, меню не открывается (

не робит, скиньте для совсем криворукого как должно получится, ибо у меня не получается.
Аватара пользователя
MrBest
 
Сообщения: 29
Зарегистрирован: 25 сен 2019, 16:17
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn , плагины zombie mod

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение Vaqtincha » 03 дек 2019, 19:03

вот юзай мой сток и не надо никаких нативов
Код: Выделить всё
// return weapon entity
stock GetCustomItem(const pPlayer, const ItemUid, const InventorySlotType:iSlot = NONE_SLOT)
{
    new pItem

    if 
(iSlot == NONE_SLOT) // unknown slot
    {
        for (new InventorySlotType:= PRIMARY_WEAPON_SLOT; i <= C4_SLOT; i++)
        {
            pItem = get_member(pPlayer, m_rgpPlayerItems, i)

            while (!is_nullent(pItem))
            {
                if (get_entvar(pItem, var_impulse) == ItemUid)
                {
                    // pItem = get_member(pItem, m_pNext)
                    return pItem
                
}
                
                pItem 
= get_member(pItem, m_pNext)
            }
        }
    }
    else if (PRIMARY_WEAPON_SLOT <= iSlot <= C4_SLOT)
    {
        pItem = get_member(pPlayer, m_rgpPlayerItems, iSlot)

        while (!is_nullent(pItem))
        {
            if (get_entvar(pItem, var_impulse) == ItemUid)
                return pItem

            pItem 
= get_member(pItem, m_pNext)
        }
    }

    return NULLENT


Добавлено спустя 1 минуту 6 секунд:
указать в ItemUid 820 то есть
Код: Выделить всё
#define anaconda_WEAPONKEY     820  


Добавлено спустя 8 минут 9 секунд:
Код: Выделить всё
const MAX_ITEM_TYPES 6
const XO_WEAPON 4
const m_pNext 42

enum 
/* Weapon types */
{
    
NullslotPrimarySecondaryKnifeGrenadesC4
}
    
new const 
m_rgpPlayerItems_CBasePlayer[MAX_ITEM_TYPES] = {367368, ...}

// return weapon entity
stock GetCustomItem(const pPlayer, const ItemUid, const iSlot Nullslot)
{
    new 
pItem

    
if (iSlot == Nullslot// unknown slot
    
{
        for (new 
Primary<= C4i++)
        {
            
pItem get_pdata_cbase(pPlayerm_rgpPlayerItems_CBasePlayer[i])
        
            while (
pItem 0)
            {
                if (
pev(pItempev_impulse) == ItemUid)
                {
                    
// pItem = get_member(pItem, m_pNext)
                    
return pItem
                
}
                
                
pItem get_pdata_cbase(pItemm_pNextXO_WEAPON)
            }
        }
    }
    else if (
Primary <= iSlot <= C4)
    {
        
pItem get_pdata_cbase(pPlayerm_rgpPlayerItems_CBasePlayer[iSlot])

        while (
pItem 0)
        {
            if (
pev(pItempev_impulse) == ItemUid)
                return 
pItem

            pItem 
get_pdata_cbase(pItemm_pNextXO_WEAPON)
        }
    }

    return -
1

без реапи
Аватара пользователя
Vaqtincha
 
Сообщения: 184
Зарегистрирован: 28 мар 2018, 15:05
Благодарил (а): 3 раз.
Поблагодарили: 46 раз.

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение MrBest » 03 дек 2019, 19:23

Vaqtincha писал(а):вот юзай мой сток и не надо никаких нативов
Код: Выделить всё
// return weapon entity
stock GetCustomItem(const pPlayer, const ItemUid, const InventorySlotType:iSlot = NONE_SLOT)
{
    new pItem

    if 
(iSlot == NONE_SLOT) // unknown slot
    {
        for (new InventorySlotType:= PRIMARY_WEAPON_SLOT; i <= C4_SLOT; i++)
        {
            pItem = get_member(pPlayer, m_rgpPlayerItems, i)

            while (!is_nullent(pItem))
            {
                if (get_entvar(pItem, var_impulse) == ItemUid)
                {
                    // pItem = get_member(pItem, m_pNext)
                    return pItem
                
}
                
                pItem 
= get_member(pItem, m_pNext)
            }
        }
    }
    else if (PRIMARY_WEAPON_SLOT <= iSlot <= C4_SLOT)
    {
        pItem = get_member(pPlayer, m_rgpPlayerItems, iSlot)

        while (!is_nullent(pItem))
        {
            if (get_entvar(pItem, var_impulse) == ItemUid)
                return pItem

            pItem 
= get_member(pItem, m_pNext)
        }
    }

    return NULLENT


Добавлено спустя 1 минуту 6 секунд:
указать в ItemUid 820 то есть
Код: Выделить всё
#define anaconda_WEAPONKEY     820    


Добавлено спустя 8 минут 9 секунд:
Код: Выделить всё
const MAX_ITEM_TYPES = 6
const XO_WEAPON 
= 4
const m_pNext 
= 42

enum 
/* Weapon types */
{
    Nullslot, Primary, Secondary, Knife, Grenades, C4
}
    
new const m_rgpPlayerItems_CBasePlayer
[MAX_ITEM_TYPES] = {367, 368, ...}

// return weapon entity
stock GetCustomItem(const pPlayer, const ItemUid, const iSlot = Nullslot)
{
    new pItem

    if 
(iSlot == Nullslot) // unknown slot
    {
        for (new i = Primary; i <= C4; i++)
        {
            pItem = get_pdata_cbase(pPlayer, m_rgpPlayerItems_CBasePlayer[i])
        
            while 
(pItem > 0)
            {
                if (pev(pItem, pev_impulse) == ItemUid)
                {
                    // pItem = get_member(pItem, m_pNext)
                    return pItem
                
}
                
                pItem 
= get_pdata_cbase(pItem, m_pNext, XO_WEAPON)
            }
        }
    }
    else if (Primary <= iSlot <= C4)
    {
        pItem = get_pdata_cbase(pPlayer, m_rgpPlayerItems_CBasePlayer[iSlot])

        while (pItem > 0)
        {
            if (pev(pItem, pev_impulse) == ItemUid)
                return pItem

            pItem 
= get_pdata_cbase(pItem, m_pNext, XO_WEAPON)
        }
    }

    return -1

без реапи



компилятор ругается на константу "NONE_SLOT"
Аватара пользователя
MrBest
 
Сообщения: 29
Зарегистрирован: 25 сен 2019, 16:17
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn , плагины zombie mod

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение Vaqtincha » 03 дек 2019, 19:28

Поэтому ниже код без реапи. Печально.
Аватара пользователя
Vaqtincha
 
Сообщения: 184
Зарегистрирован: 28 мар 2018, 15:05
Благодарил (а): 3 раз.
Поблагодарили: 46 раз.

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение MrBest » 03 дек 2019, 19:35

Vaqtincha писал(а):Поэтому ниже код без реапи. Печально.



у меня не робит (
я стоком в плагин закинул, и константы добавил но все равно после покупки выбрасывается оружие
Аватара пользователя
MrBest
 
Сообщения: 29
Зарегистрирован: 25 сен 2019, 16:17
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn , плагины zombie mod

Re: [ZP]: Наличие у игрока определенного оружия !

Сообщение Vaqtincha » 03 дек 2019, 19:42

Сначала надо определится что хочешь.

"[ZP]: Наличие у игрока определенного оружия !"
Скинул рабочий сток. Причем тут дроп. какая оружие выбрасывается и куда ты добавил проверку.


Код: Выделить всё
register_plugin
"[ZP] Extra: Anaconda" "1.0" "Mr.Best" 

Написал/присвоил плагин но не знаешь как оно работает. Странно...
Аватара пользователя
Vaqtincha
 
Сообщения: 184
Зарегистрирован: 28 мар 2018, 15:05
Благодарил (а): 3 раз.
Поблагодарили: 46 раз.

Пред.След.

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

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

Сейчас этот форум просматривают: Google [Bot], MSN [Bot] и гости: 0