Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя
Показано с 11 по 20 из 23
  1. #11
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну вот в следующий раз и нужно кидать код, который есть у тебя, а не какие-то вырезки.
    Но всё ещё не понятно что ты хочешь этой функцией вывести? Ты грузишь одни данные, но, в итоге, работаешь с совершенно другими.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  2. #12
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну вот в следующий раз и нужно кидать код, который есть у тебя, а не какие-то вырезки.
    Но всё ещё не понятно что ты хочешь этой функцией вывести? Ты грузишь одни данные, но, в итоге, работаешь с совершенно другими.
    В общем, при нажатии на определённый текстдрав менять скин по порядку из таблицы. Ну и если скин больше 5, то вернуть к первому скину.
    Последний раз редактировалось PawnoNoob; 15.05.2017 в 13:56.

  3. #13
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Для чего каждый раз выгружать данные из skins?
    PHP код:
    sscanf(skins[i], !"p<,>iiiii"tempid[0], id[1], id[2], id[3], id[4]); 
    Разве эта информация не будет использоваться всеми игроками и довольно часто?
    Не лучше ли один раз выгрузить её при старте сервера и потом использовать? От этого было бы гораздо больше пользы, чем от бессмысленной паковки строки в sscanf.
    Хотя не совсем понятно для чего её хранить в таблице вообще, если она далеко не индивидуальна и изменяться особо не будет. Да и сам код построен так, что проще было бы хранить её прямо в моде.


    Теперь конкретно по твоему вопросу.
    Так а ничего, что ты переменную, которая должна хранить количество нажатий, хранишь в стэке? Она у тебя каждый раз ровна -1, потому и дальше 0 не уходит. Хотя даже если бы и уходила, то после 10 нажатий у тебя просто случался бы выход за пределы массива.

    Пробуй так (хотя я бы убрал постоянное насилование sscanf)
    PHP код:
    stock SSkin(playeridgendnatage)
    {
        static 
            
    id[5],
            
    idx,
            
    specifier_buff[10+10+1];


        if(
    isnull(specifier_buff))
            
    format(specifier_buffsizeof(specifier_buff), "p<,>a<i>[%d]"sizeof(id));    

        if((
    idx GetPVarInt(playerid"SkinArrayIndex")) >= sizeof(id))
            
    idx 0;

        for(new 
    0sizeof(skins); i++)
        {
            if(
    reg_gend{i} == gend && reg_nat{i} == nat && (age >= reg_minage{i} && age <= reg_maxage{i}))
            {
                
    sscanf(skins[i], specifier_buffid);

                
    format(s_stringsizeof(s_string), "%i"idx);
                
    SendClientMessage(playerid, -1s_string);

                
    SetPlayerSkin(playeridid[idx]);
                
    SetPVarInt(playerid"SkinArrayIndex"idx+1); 
                break;
            }
        }
        return 
    1;

    Только не забудь удалить pVar после того, как выбор скина закончится или игрок нажмёт на другой текстдрав.
    Последний раз редактировалось DeimoS; 15.05.2017 в 14:58. Причина: fix
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. #14
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Для чего каждый раз выгружать данные из skins?
    PHP код:
    sscanf(skins[i], !"p<,>iiiii"tempid[0], id[1], id[2], id[3], id[4]); 
    Разве эта информация не будет использоваться всеми игроками и довольно часто?
    Не лучше ли один раз выгрузить её при старте сервера и потом использовать? От этого было бы гораздо больше пользы, чем от бессмысленной паковки строки в sscanf.
    Хотя не совсем понятно для чего её хранить в таблице вообще, если она далеко не индивидуальна и изменяться особо не будет. Да и сам код построен так, что проще было бы хранить её прямо в моде.


    Теперь конкретно по твоему вопросу.
    Так а ничего, что ты переменную, которая должна хранить количество нажатий, хранишь в стэке? Она у тебя каждый раз ровна -1, потому и дальше 0 не уходит. Хотя даже если бы и уходила, то после 10 нажатий у тебя просто случался бы выход за пределы массива.

    Пробуй так (хотя я бы убрал постоянное насилование sscanf)
    PHP код:
    stock SSkin(playeridgendnatage)
    {
        new 
    id[5],
            
    idx GetPVarInt(playerid"SkinArrayIndex")+1;
        if(
    idx sizeof(skins))
            
    idx 0;
        for(new 
    010i++)
        {
            if(
    reg_gend{i} == gend && reg_nat{i} == nat && (age >= reg_minage{i} && age <= reg_maxage{i}))
            {
                
    sscanf(skins[i], !"p<,>iiiii"id[0], id[1], id[2], id[3], id[4]);

                
    format(s_stringsizeof(s_string), "%i"sskin[playerid]);
                
    SendClientMessage(playerid, -1s_string);

                
    SetPlayerSkin(playeridid[skin[playerid]]);
                
    SetPVarInt(playerid"SkinArrayIndex"idx); 
                break;
            }
        }
        return 
    1;

    Только не забудь удалить pVar после того, как выбор скина закончится или игрок нажмёт на другой текстдрав.
    crashdetect выдал ошибки тут:
    PHP код:
    SetPlayerSkin(playeridid[idx]); 
    Вот лог:
    Код HTML:
    [debug] AMX backtrace:
    [debug] #0 000228c0 in SSkin(playerid=0, gen=1, nat=1, age=18) at D:\mode\gamemodes\inc\dev.inc:73
    [debug] #1 00022a90 in public cmd_test (playerid=0, ... <1 argument>) at D:\mode\gamemodes\inc\dev.inc:83
    [debug] #2 native DC_CMD () from dc_cmd.dll
    [debug] #3 000001a0 in public OnPlayerCommandText (playerid=0, cmdtext[]=@003ad02c "/test") at D:\mode\pawno\include\dc_cmd.inc:67
    Последний раз редактировалось PawnoNoob; 15.05.2017 в 14:50.

  5. #15
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Несколько строк выше дай. Там причина ошибки написана
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #16
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Несколько строк выше дай. Там причина ошибки написана
    Код HTML:
    [13:21:40] [debug] Run time error 4: "Array index out of bounds"
    [13:21:40] [debug]  Attempted to read/write array element at index 5 in array of size 5
    new id[6] поможет?

  7. #17
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    stock SSkin(playeridgendnatage)
    {
        static 
            
    id[5],
            
    idx,
            
    specifier_buff[10+10+1];


        if(
    isnull(specifier_buff))
            
    format(specifier_buffsizeof(specifier_buff), "p<,>a<i>[%d]"sizeof(id));    

        if((
    idx GetPVarInt(playerid"SkinArrayIndex")) >= sizeof(id))
            
    idx 0;

        for(new 
    0sizeof(skins); i++)
        {
            if(
    reg_gend{i} == gend && reg_nat{i} == nat && (age >= reg_minage{i} && age <= reg_maxage{i}))
            {
                
    sscanf(skins[i], specifier_buffid);

                
    format(s_stringsizeof(s_string), "%i"idx);
                
    SendClientMessage(playerid, -1s_string);

                
    SetPlayerSkin(playeridid[idx]);
                
    SetPVarInt(playerid"SkinArrayIndex"idx+1); 
                break;
            }
        }
        return 
    1;

    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. Пользователь сказал cпасибо:
    PawnoNoob (15.05.2017)
  9. #18
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    PHP код:
    stock SSkin(playeridgendnatage)
    {
        static 
            
    id[5],
            
    idx,
            
    specifier_buff[10+10+1];


        if(
    isnull(specifier_buff))
            
    format(specifier_buffsizeof(specifier_buff), "p<,>a<i>[%d]"sizeof(id));    

        if((
    idx GetPVarInt(playerid"SkinArrayIndex")) >= sizeof(id))
            
    idx 0;

        for(new 
    0sizeof(skins); i++)
        {
            if(
    reg_gend{i} == gend && reg_nat{i} == nat && (age >= reg_minage{i} && age <= reg_maxage{i}))
            {
                
    sscanf(skins[i], specifier_buffid);

                
    format(s_stringsizeof(s_string), "%i"idx);
                
    SendClientMessage(playerid, -1s_string);

                
    SetPlayerSkin(playeridid[idx]);
                
    SetPVarInt(playerid"SkinArrayIndex"idx+1); 
                break;
            }
        }
        return 
    1;

    Этот вариант работает. Спасибо

    - - - Добавлено - - -

    Кстати, куда лучше перенести sscanf, чтобы его не насиловать? В загрузку?

  10. #19
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Кстати, куда лучше перенести sscanf, чтобы его не насиловать? В загрузку?
    Да, в LoadSkins.

    Вместо твоего:
    PHP код:
    cache_get_value_name(i, !"sid"skins[i], 26); 
    что-то вроде этого:
    PHP код:
    #define MAX_SKINS_COUNT 5
    new skins[10][MAX_SKINS_COUNT];

    // LoadSkins
    cache_get_value_name(i, !"sid"temp);
    sscanf(temp, !"p<,>a<i>[" #MAX_SKINS_COUNT "]", skins[i][0]); 

  11. Пользователь сказал cпасибо:
    PawnoNoob (15.05.2017)
  12. #20
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Да, в LoadSkins.

    Вместо твоего:
    PHP код:
    cache_get_value_name(i, !"sid"skins[i], 26); 
    что-то вроде этого:
    PHP код:
    #define MAX_SKINS_COUNT 5
    new skins[10][MAX_SKINS_COUNT];

    // LoadSkins
    cache_get_value_name(i, !"sid"temp);
    sscanf(temp, !"p<,>a<i>[" #MAX_SKINS_COUNT "]", skins[i][0]); 
    А каким образом тогда переделывать функцию "SSkin"?

 

 
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя

Информация о теме

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

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •