Native

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
95
Реакции
21
neygomon, спасибо все работает, я и не знал, что нативу можно так юзать.
8 Июл 2018
neygomon, и тогда, если не лень можете показать как организовать подобное одним нативом, чтоб на 2 не расходиться?
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
thegame, сделай второй аргумент
что то типа:
dmg_bool(id, change)

dmg_bool(id, 1) - меняет
dmg_bool(id, 0) - возвращает результат
 
Сообщения
95
Реакции
21
neygomon, вот так сделал, оно работает, но чует сердце, что с ретурнами не так что-то.

Код:
\\\\\ Plugin A
...

public plugin_natives()
    register_native("change_dmg_bool", "SwitchCommand_Callback", 1);

public SwitchCommand_Callback(id, change)
{
    if(change == 1)
    {
        return g_bDmgReturn[id] = !g_bDmgReturn[id];
    }
    else return g_bDmgReturn[id];
}

\\\\\ Plugin B
...

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%s^n^n", change_dmg_bool(id, 0) ? MENU_DMG_ON : MENU_DMG_OFF);
iKey |= MENU_KEY_1;

....
if(iKey == MENU_KEY_EXIT) return PLUGIN_HANDLED;
    
    switch(iKey)
    {
        case 0:
        {
            change_dmg_bool(id, 1);
        }   
    }
    
    ClientCommand_Menu(id);
    return PLUGIN_HANDLED;
}
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
thegame, лучше так
Код:
public SwitchCommand_Callback(id, change)
{
    if(change == 1)
        g_bDmgReturn[id] = !g_bDmgReturn[id];

    return g_bDmgReturn[id];
}
 
Сообщения
162
Реакции
445
Помог
2 раз(а)
Без нативов можно обойтись в данном случае.

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

C++:
public g_bitsDmgReturn;

#define get_bit(%1,%2)    (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2)    (%1 |= 1 << (%2 & 31))
#define inv_bit(%1,%2)    (%1 ^= 1 << (%2 & 31))
#define clr_bit(%1,%2)    (%1 &= ~(1 << (%2 & 31)))
В плагине Б, получаем айди публичной переменной g_bitsDmgReturn (которая находится в плагине А) и работаем уже с самой переменной.
Для получения ID переменной - функция get_xvar_id( const name[] );
Для получения значение переменной - get_xvar_num( id );
Для установки значение переменной - set_xvar_num( id, value = 0 );

C++:
new g_iDmgVarId;

#define get_bit(%1,%2)    (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2)    (%1 |= 1 << (%2 & 31))
#define inv_bit(%1,%2)    (%1 ^= 1 << (%2 & 31))
#define clr_bit(%1,%2)    (%1 &= ~(1 << (%2 & 31)))


public plugin_init()
{
    g_iDmgVarId = get_xvar_id("g_bitsDmgReturn");
}


public ClientCommand_Menu(const id)
{
    new iLen, szMenu[512], iKey = MENU_KEY_0;
    new bitsDmg = get_xvar_num(g_iDmgVarId);

    iLen = formatex(szMenu, charsmax(szMenu), MENU_TITLE);

    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%s^n^n", get_bit(bitsDmg, id) ? MENU_DMG_ON : MENU_DMG_OFF);
    iKey |= MENU_KEY_1;

    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, MENU_EXIT_NAME);
    iKey |= MENU_KEY_0;

    show_menu(id, iKey, szMenu, -1, "Menu");
    return PLUGIN_HANDLED;
}


public Menu_Handler(id, iKey)
{
    if(iKey == MENU_KEY_EXIT)
        return PLUGIN_HANDLED;

    switch(iKey)
    {
        case 0:
        {
            new bitsDmg = get_xvar_num(g_iDmgVarId);
            inv_bit(bitsDmg, id);
            set_xvar_num(g_iDmgVarId, bitsDmg);
        }
    }

    ClientCommand_Menu(id);
    return PLUGIN_HANDLED;
}
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
the_hunter, правильно, давайте усложнять код и забивать голову человеку, которому не нужно это
ну и биты использовать... в общем, плохая идея
 
Сообщения
162
Реакции
445
Помог
2 раз(а)
В чем сложность? В битах или вызове функций *_xvar_* ?

Не вижу ничего сложного.
Особенно, если получение значения \ установку значения вынести в отдельную функцию.
В любом случае, даже если сложно, такой вариант имеет право существование. Если не ТС, так кто-то другой прочитавший форум сможет воспользоваться этим методом при необходимости.
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
the_hunter, в сложности понимания ТСом(не в обиду).
потому что мы простые вещи разжевывали...

насчет метода - не спорю, хороший.
я про него и подзабыл уже, если честно.

а биты... ну тут тесты были, не самое быстрое это дело(
 
Сообщения
95
Реакции
21
neygomon, спасибо большое, все работает как нужно) да какие обиды, я не скриптер, что-то простое и готовое я понимаю, раньше разные функции были в одном плагине и там булевыми как хочешь их включай и выключай, щас решил сделать более модульный вариант, и вспомнил, что есть нативы, а с ними никогда не сталкивался увы(

the_hunter, вам тоже большое спасибо, не первый раз уже помогаете в решении проблем, возьму на заметку про биты и глобальной паблик переменной.
 
Статус
В этой теме нельзя размещать новые ответы.

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

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