Проблема с AddMenuItem

Тема в разделе "Программирование / Скриптинг", создана пользователем Sergey Grinko, 4 апр 2013.

  1. Sergey Grinko

    Sergey Grinko

    Сообщения:
    140
    Симпатии:
    12
    Проблема с меню, что я неправильно делаю?

    Ошибка в строке:
    PHP:
    new listmenu = ("%i - %i"costcbuffer);
    Сам код:
    PHP:
            new Amount KvGetNum(g_KeyValues"amount");
            if(
    Amount 0)
            {
                new 
    String:num[32],String:buffer[48],String:costc[48];
                for (new 
    0Amounti++)
                {
                    
    IntToString(inumsizeof(num));
                    if(
    KvJumpToKey(g_KeyValuesnumfalse))
                    {
                        
    KvGetString(g_KeyValues"title"buffersizeof(buffer));
                        
    KvGetString(g_KeyValues"cost"costcsizeof(costc));
                        new 
    listmenu = ("%i - %i"costcbuffer);
                        
    AddMenuItem(gBonusesMenunumlistmenuITEMDRAW_DEFAULT);
                        
    KvGoBack(g_KeyValues);
                    }
                }
            }
     
  2. KorDen

    KorDen Atra esterní ono thelduin!

    Сообщения:
    2.194
    Симпатии:
    1.398
    new listmenu = "%i - %i", costc, buffer;
    Такого нельзя делать, надо так:

    new String:listmenu[8];
    Format(listmenu,sizeof(listmenu),"%i - %i", costc, buffer);
     
    Sergey Grinko нравится это.
  3. Sergey Grinko

    Sergey Grinko

    Сообщения:
    140
    Симпатии:
    12
    Спасибо! Сейчас проверю, нигде не нашел про это в сети
     
  4. KorDen

    KorDen Atra esterní ono thelduin!

    Сообщения:
    2.194
    Симпатии:
    1.398
    Sergey Grinko нравится это.
  5. Sergey Grinko

    Sergey Grinko

    Сообщения:
    140
    Симпатии:
    12
  6. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    892
    Симпатии:
    659
  7. Sergey Grinko

    Sergey Grinko

    Сообщения:
    140
    Симпатии:
    12
    А если вот такой код http://pastebin.com/25Zmbw81

    И когда делаешь:
    PHP:
    Format(listmenu,sizeof(listmenu),"%i - %i | %s"costcbparam[i][cost], buffer);
    То почему тут "bparam[cost]" не работает?
     
  8. KorDen

    KorDen Atra esterní ono thelduin!

    Сообщения:
    2.194
    Симпатии:
    1.398


    Ну, сразу на всякий пожарный, увеличь размер listmenu, не 8 а 32 или даже 64 лучше, если строки будут...

    Что подразумевается под "не работает"? Выводит 0/-1? Ошибка компиляции? Ошибка во время работы? Пустота? Если есть ошибки, скопируй их.
     
    Sergey Grinko нравится это.
  9. Sergey Grinko

    Sergey Grinko

    Сообщения:
    140
    Симпатии:
    12
    Когда стоит %i, то выводит "0". А с %s вообще пустота.
     
  10. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    892
    Симпатии:
    659
    %d число
     
    Sergey Grinko нравится это.
  11. KorDen

    KorDen Atra esterní ono thelduin!

    Сообщения:
    2.194
    Симпатии:
    1.398
    %d=%i
     
    Sergey Grinko и The End Is Near... нравится это.
  12. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    892
    Симпатии:
    659
    Не знал.
     
    Sergey Grinko нравится это.
  13. Sergey Grinko

    Sergey Grinko

    Сообщения:
    140
    Симпатии:
    12
    Это не из-за этого. Стоит:
    PHP:
    new String:num[32],String:buffer[26],String:costc[3],String:listmenu[32]; 
    Но все тоже самое :(
     
  14. KorDen

    KorDen Atra esterní ono thelduin!

    Сообщения:
    2.194
    Симпатии:
    1.398
    А ты точно уверен, что в bparam[cost] не ноль? Можешь например проверить на всякий случай, где
    bparam[cost] = KvGetNum(g_KeyValues, "cost", 0);
    добавить
    PrintToServer("KVValue: %d", KvGetNum(g_KeyValues, "cost", 0))
    и посмотреть, что он грузит? Может он 0 как раз и грузит? МОжет cost нулевой илине существует в файле?
     
    Sergey Grinko нравится это.
  15. Sergey Grinko

    Sergey Grinko

    Сообщения:
    140
    Симпатии:
    12


    Cost не нулевой, он грузит из файла.

    Вот ниже же работает код же

    PHP:
    public handler_bonusbuy(Handle:menuMenuAction:actionuseridi)
    {
        if (
    action==MenuAction_Select
        {
            if(
    bparam[i][cost] <= credits[userid])
            {
                
    credits[userid] -= bparam[i][cost];
                
    SavePlayer(userid);
            }
        }
    }
     
    Последнее редактирование: 6 апр 2013
  16. schmidt

    schmidt wS (skype: ws.css)

    Сообщения:
    188
    Симпатии:
    347

    У меня вроде подобный баг тоже был, решение простое:

    PHP:
    new xz bparam[i][cost];
    Format(listmenusizeof(listmenu), "%d - %d | %s"costcxzbuffer);
    В этом не вижу смысла:

    PHP:
    enum Parameters
    {
            
    cost
    }
    Лучше просто сделать new bparam[256];

    Ну и перед циклом for (new i = 0; i < Amount; i++), убедись, что Amount < 256:
    if (Amount >= 256) Amount = 255;
     
    Sergey Grinko и KorDen нравится это.
  17. KorDen

    KorDen Atra esterní ono thelduin!

    Сообщения:
    2.194
    Симпатии:
    1.398
    Видимо это тестовый пример и там планируется добавление описаний и прочего...

    Спасибо, возьму и себе на заметку :)
     
    Sergey Grinko нравится это.
  18. Sergey Grinko

    Sergey Grinko

    Сообщения:
    140
    Симпатии:
    12
    Тоже самое... Я так понял, что он не может загрузить "bparam[cost]".
    А компилируется без ошибок из-за "for (new i = 0; i < Amount; i++)"
    Только вот что делать?
     
  19. schmidt

    schmidt wS (skype: ws.css)

    Сообщения:
    188
    Симпатии:
    347
    Дать весь код, а не эти куски.
    Ну или не весь, а все, что касается этой строки:

    Format(listmenu, sizeof(listmenu), "%i - %i | %s", costc, bparam[cost], buffer);

    ---------
    Вот тест, работает все:

    PHP:
    #pragma semicolon 1
    #include <sourcemod>

    enum Parameters
    {
        
    cost


    new 
    bparam[256][Parameters];

    public 
    OnPluginStart()
    {
        
    bparam[1][cost] = 5;

        
    decl String:txt[10]; Format(txt10"%d"bparam[1][cost]);
        
    PrintToServer("-> %s"txt); // -> 5
    }
    ---------
    Ответил. Ошибка совсем в другом у тебя.
     
    Последнее редактирование: 6 апр 2013
    Sergey Grinko нравится это.