Статус темы:
Закрыта.
  1. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    Ребят подскажите как сделать меню для CSO оружия в самом моде? С отслеживанием лвл, т.е. 1-ое оружие из магазина будет доступно когда наберешь 100лвл, 2-ое когда 300лвл и т.д. пробовал вынести в нативы g_p_level[id], вот так, но мод вообще после этого перестал работать :(
    Код:
    
    // Register natives
    public plugin_natives()
    {
        register_native("rpg_get_user_lvl", "native_get_user_lvl", 1);
        register_native("rpg_set_user_lvl", "native_set_user_lvl", 1);
    }
    // Plugin natives
    // Native: rpg_get_user_lvl
    public native_get_user_lvl(id)
    {
        return g_p_level[id];
    }
    // Native: rpg_set_user_lvl
    public native_set_user_lvl(id, amount)
    {
        g_p_level[id] = amount;
    }
    
    В чем беда, того что мод перестал работать?
     

    Вложения:

    • rpg_mod (2).sma
      Размер файла:
      82,7 КБ
      Просмотров:
      4
  2. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    655
    Симпатии:
    241
    Пол:
    Мужской
    В тот плагин то добавил ?:
    native rpg_get_user_lvl(id)
    native rpg_set_user_lvl(id, amount)
     
  3. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
  4. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    655
    Симпатии:
    241
    Пол:
    Мужской
    Заюзай тогда попробуй вместо
    native rpg_get_user_lvl(id)
    native rpg_set_user_lvl(id, amount)

    ---->
    native rpg_get_user_lvl(index)
    native rpg_set_user_lvl(index, amount)

    Хотя не уверен, что поможет
     
  5. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    @MakapoH., Так вообще ошибки кажет
     
  6. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
  7. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    655
    Симпатии:
    241
    Пол:
    Мужской
    @boss_ex, я не знаю, с нативами 1 раз только работал
    Жди кого другого)
     
  8. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @MakapoH., это одно и то же..
     
  9. SpartaneC Пользователь

    Регистрация:
    03.10.15
    Сообщения:
    49
    Симпатии:
    34
    Пол:
    Мужской
    @boss_ex, тот исходник что выше рабочий или нет(проверять впадлу)? в нем просто нет нативов что ты описал выше. Если рабочий, то скинь еще магазин cso, настрою тебе нативы.
    Ну или сам сделай так.
    PHP:
    //Плагин 1, мод который
    public plugin_natives()
    {
        
    register_native("rpg_get_user_lvl""native_get_user_lvl"1);
    }
    // Plugin natives
    // Native: rpg_get_user_lvl
    public native_get_user_lvl(id)
    {
        return 
    g_p_level[id];
    }

    //Плагин 2, CSO который
    native rpg_get_user_lvl(id);

    //в хандлере менюшки или где там
    if (rpg_get_user_lvl(id) > 100)
    {
        
    //даем доступ 1 пушке
    }

    if (
    rpg_get_user_lvl(id) > 200)
    {
        
    //даем доступ 2 пушке
    }

    // и т.д

    //не понял нафик нужен тебе тут натив на установку лвл rpg_set_user_lvl, если только он у тебя из другого плагина передается только то оставь

    Вообще тут наверное лучше бы использовать callfunc_push_int
    1) При коннекте передаем лвл и запоминаем его в другом плагине.
    2) При повышении лвл опять же передаем его и запоминаем
     
    boss_ex нравится это.
  10. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @SpartaneC, а если плагинов, которые юзают натив N, то ты в каждый будешь пушить данные?
    не пори чушь.
    callfunc используется для вызова public функции..., а не для передачи в плагины каких то данных
     
  11. SpartaneC Пользователь

    Регистрация:
    03.10.15
    Сообщения:
    49
    Симпатии:
    34
    Пол:
    Мужской
    @neygomon, может и порю, сегодня уже не в состоянии проверить, но если по быстрому и применяя "индус код" то в в теории должно получиться)
    PHP:
    //плагин1, например myRpgmod

    public get_lvl(id)
    {
        if (
    g_p_level[id] >= 100)
        {
            if(
    callfunc_begin("set_lvl_100","myCSOplugin.amxx")==1)
            {
                
    callfunc_push_int(id)
                
    callfunc_end()
            }
        }

        if (
    g_p_level[id] >= 200)
        {
            if(
    callfunc_begin("set_lvl_200","myplugin.amxx")==1)
            {
                
    callfunc_push_int(id)
                
    callfunc_end()
            }
        }

        
    // и т.д.
    }


    // myCSOplugin

    new Bool:accesCSO1[33] = falseBool:accesCSO2[33] = falseBool:accesCSO3[33] = false//и т.д

    public client_putinserver(id)
    {
        if(
    callfunc_begin("get_lvl","myRpgmod.amxx")==1)
        {
            
    callfunc_push_int(id)
            
    callfunc_end()
        }
    }

    public 
    set_lvl_100(idaccesCSO1[id] = true;


    public 
    set_lvl_200(idaccesCSO2[id] = true;

    //и т.д.

    //далее проверяем там где надо
    if (accesCSO1[id])
    {
        
    //даем доступ пушке 1
    }

    if (
    accesCSO2[id])
    {
        
    //даем доступ пушке 2
    }

    // и т.д.

     
  12. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @SpartaneC, имеем 10 плагинов с нативой, меняем на пуш... и угадай, кто ты после этой идеи...?
     
  13. SpartaneC Пользователь

    Регистрация:
    03.10.15
    Сообщения:
    49
    Симпатии:
    34
    Пол:
    Мужской
    @neygomon, ну если овер многим плагинам нужно юзать одну инфу то да, пушить не вариант.
    А если 2 плагина то и так будет само то, не думаю что лучше каждый раз при вызове меню/повышении лвл нативу тоскать.

    Синька чмо, извиняйте, удаляюсь из темы )
     
  14. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @SpartaneC, натива так то легче чем пуши)
     
  15. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    @SpartaneC и @neygomon, Спасибо, но охото сделать типо доступа по лвл, с отображением какого надо быть лвл чтобы пользоваться следующей пушкой, помогите плиз менюшкой, чтобы можно было константами из плагина оружия отлавливать имя которое будет добавлено в меню CSO SHOP, и в CFG устанавливать стоимость оружия после открытия и лвл который потребуется для открытия оружия, заранее благодарен, мн хотя бы накидать так чуть чуть, дальше думаю разберусь. Вот такую меню я только смог сделать)
     

    Вложения:

    • rpg_shop.sma
      Размер файла:
      3,4 КБ
      Просмотров:
      4
  16. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    Просто если начну писать как я могу получится сплошной быдлокод
     
  17. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @boss_ex, то чувство, когда текста много, а конкретики.... минимум
     
    MakapoH. нравится это.
  18. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    Как то так накрутил, поправьте плиз ошибки
     

    Вложения:

    • rpg_shop.sma
      Размер файла:
      3,8 КБ
      Просмотров:
      1
  19. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    Почему у меня отображается только последнее оружие? При добавлении нового снова последнее отображается
    PHP:
    #include <amxmodx>
    #include <rpg>

    new const PLUGIN[] =    "RPG Shop"
    new const VERSION[] =    "1.0"
    new const AUTHOR[] =    "TrbSin"

    #define FLAG_BOG ADMIN_BAN

    enum _:RpgShop NAME[64], CMD[32], LVL[6], MONEY[6] }

    new 
    g_iNumItems;
    new 
    g_szMenuData[128][RpgShop];
    new 
    g_iMenuPage[33];

    new 
    g_arrMenuShop[][RpgShop] =
    {
        { 
    "\yAK47 \WPaladin""say /ak47"5001000 },
        { 
    "m4a1""say /m4a1"8001500 },
        { 
    "\yAK47 \WPaladin""say /ak47"5001000 }
    }

    public 
    plugin_init()
    {
        
    register_plugin(PLUGINVERSIONAUTHOR)
        
    register_clcmd("say /shop""shop_rpg")
        
    register_clcmd("say_team /shop""shop_rpg")
        
    register_clcmd("shop""shop_rpg")
        
    register_clcmd("bogmenu""shop_rpg")
       
        
    register_menucmd(register_menuid("RPG Shop"), 1023"rpg_shop");
       
        
    MenuDefaultLoad();
    }

    public 
    shop_rpg(id)
    {
        for(new 
    imylvl rpg_get_user_lvl(id), flags get_user_flags(id); sizeof g_arrMenuShopi++)
        if(
    flags FLAG_BOG || mylvl >= g_arrMenuShop[i][LVL])
        {
            
    g_iMenuPage[id] = 0;
            
    build_shop_rpg(idg_iMenuPage[id]);
        }   
        else    
    ColorChat(id"!n[!gRPG Shop!n] Поднимите !tЛвл!n, для доступа к оружию.");
        return 
    PLUGIN_HANDLED;
    }

    MenuDefaultLoad()
    {
        for(new 
    isizeof g_arrMenuShopi++)
        {
            
    copy(g_szMenuData[g_iNumItems][NAME],     charsmax(g_szMenuData[][NAME]), g_arrMenuShop[i][NAME]);
            
    copy(g_szMenuData[g_iNumItems][CMD],      charsmax(g_szMenuData[][CMD]),  g_arrMenuShop[i][CMD]);
            
    copy(g_szMenuData[g_iNumItems][LVL],      charsmax(g_szMenuData[][LVL]),  g_arrMenuShop[i][LVL]);
            
    //copy(g_szMenuData[g_iNumItems][MONEY],      charsmax(g_szMenuData[][MONEY]),  g_arrMenuShop[i][MONEY]);
            
    g_szMenuData[g_iNumItems][MONEY] =     g_arrMenuShop[i][MONEY];
            
    g_iNumItems++;
        }
    }

    public 
    build_shop_rpg(idpos)
    {
        new 
    szMenu[512];
        new 
    len
        
    new start     pos 8;
        new 
    end     start 8;
        new 
    keys    MENU_KEY_0;
        new 
    text[64]
       
        if(
    start >= g_iNumItems)
            
    start pos g_iMenuPage[id] = 0;
        if(
    g_iNumItems == || end g_iNumItems)
            
    end g_iNumItems;
       
        for(new 
    startmylvl rpg_get_user_lvl(id), /*flags = get_user_flags(id),*/ aendi++)
        {
            
    len formatex(szMenucharsmax(szMenu), "\rRPG Shop^n\dДо следующего оружия: %d [Лвл]^n^n"g_arrMenuShop[i][LVL] - rpg_get_user_lvl(id));
           
            if(
    /*flags & FLAG_BOG || */mylvl >= g_arrMenuShop[i][LVL])
                
    formatex(textcharsmax(text), "\r%d. \w%s \y%d$^n", ++ag_szMenuData[i][NAME], g_szMenuData[i][MONEY]);
            else if(
    mylvl g_arrMenuShop[i][LVL])
                
    formatex(textcharsmax(text), "\r%d. \d%s [\y%d\d/\r%d\d]^n", ++ag_szMenuData[i][NAME], mylvlg_szMenuData[i][LVL]);
               
            
    keys |= (<< a);
            
    len += formatex(szMenu[len], charsmax(szMenu) - lentext)
        }   
       
        if(
    end != g_iNumItems)
        {
            
    formatex(szMenu[len], charsmax(szMenu) - len"^n\r9. \yДалее^n\w0. \w%s"pos "Назад" "Выход");
            
    keys |= MENU_KEY_9;
        }
        else 
    formatex(szMenu[len], charsmax(szMenu) - len"^n\r0. \w%s"pos "Назад" "Выход");
       
        return 
    show_menu(idkeysszMenu, -1"RPG Shop");
    }
         
    public 
    rpg_shop(idkey)
    {
        switch(
    key)
        {
            case 
    8: (g_iNumItems == 9) ? client_cmd(idg_szMenuData[key][CMD]) : build_shop_rpg(id, ++g_iMenuPage[id]);
            case 
    9: if(g_iMenuPage[id]) build_shop_rpg(id, --g_iMenuPage[id]);
            default:
    client_cmd(idg_szMenuData[g_iMenuPage[id] * key][CMD]);
        }   
        return 
    PLUGIN_HANDLED;
    }


    public 
    ColorChat(const id, const string[], {FloatSqlResul,_}:...)
    {
        new 
    msg[191], players[32], count 1;
        
    vformat(msg190string3);
        
    replace_all(msg190"!n""^1");
        
    replace_all(msg190"!t""^3");
        
    replace_all(msg190"!g""^4");
        if (
    idplayers[0] = id;
        else 
    get_players(playerscount"ch");
        for (new 
    0counti++)
        {
            if (
    is_user_connected(players[i]))
            {
                
    message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _players[i]);
                
    write_byte(players[i]);
                
    write_string(msg);
                
    message_end();
            }
        }
    }
     
  20. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    Код:
            len = formatex(szMenu, charsmax(szMenu), "\rRPG Shop^n\dДо следующего оружия: %d [Лвл]^n^n", g_arrMenuShop[i][LVL] - rpg_get_user_lvl(id));
         
            if(/*flags & FLAG_BOG || */mylvl >= g_arrMenuShop[i][LVL])
                formatex(text, charsmax(text), "\r%d. \w%s \y%d$^n", ++a, g_szMenuData[i][NAME], g_szMenuData[i][MONEY]);
            else if(mylvl < g_arrMenuShop[i][LVL])
                formatex(text, charsmax(text), "\r%d. \d%s [\y%d\d/\r%d\d]^n", ++a, g_szMenuData[i][NAME], mylvl, g_szMenuData[i][LVL]);
           
    ->
    Код:
            len = formatex(szMenu, charsmax(szMenu), "\rRPG Shop^n\dДо следующего оружия: %d [Лвл]^n^n", g_arrMenuShop[i][LVL] - rpg_get_user_lvl(id));
         
            if(/*flags & FLAG_BOG || */mylvl >= g_arrMenuShop[i][LVL])
                 len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \w%s \y%d$^n", ++a, g_szMenuData[i][NAME], g_szMenuData[i][MONEY]);
            else if(mylvl < g_arrMenuShop[i][LVL])
               len += formatex(szMenu[len], charsmax(szMenu) - len, "\r%d. \d%s [\y%d\d/\r%d\d]^n", ++a, g_szMenuData[i][NAME], mylvl, g_szMenuData[i][LVL]);
           
    ----

    это не решение твоей проблемы, просто лишние действия...
     
Статус темы:
Закрыта.