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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±

    Переменная

    Да, это глупый вопрос.

    Приветствую. Снова столкнулся с проблемой, найти решение которой я, к сожалению не смог.
    PHP код:
    stock SSkin(playerid)
    {
        new 
    id[6], skin[MAX_PLAYERS] = -1;
        for(new 
    010i++)
        {
            
    sscanf(skins[i], !"p<,>iiiii"id[0], id[1], id[2], id[3], id[4]);
            
    skin[playerid]++;

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

            
    SetPlayerSkin(playeridid[sskin[playerid]]);
        }
        return 
    true;

    Всё время выводит 0 (прибавляет 1, а дальше никак).

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    В консоль выводить не пробовал, только в чат.

    Функция предназначена для выбора скина при регистрации. Сами скины из базы данных загружаются (есть несколько причин, по которым я не поместил их в массив). Если честно, то я не уверен в правильности реализации, но система изменяет внешность.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Сколько я не пытался, но суть кода понять так и не смог. Переменным следует давать более говорящие имена, а не просто какой-то набор символов.

    Для начала сделай так:
    PHP код:
    stock SSkin(playerid

        new 
    id[6], skin[MAX_PLAYERS] = -1
        for(new 
    010i++) 
        { 
            
    SendClientMessage(playerid, -1skins[i]); 
            
    sscanf(skins[i], !"p<,>iiiii"id[0], id[1], id[2], id[3], id[4]); 
            
    skin[playerid]++; 

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

            
    SetPlayerSkin(playeridid[sskin[playerid]]); 
        } 
        return 
    true

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

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

    Steve Pavlina

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

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

    Для начала сделай так:
    PHP код:
    stock SSkin(playerid

        new 
    id[6], skin[MAX_PLAYERS] = -1
        for(new 
    010i++) 
        { 
            
    SendClientMessage(playerid, -1skins[i]); 
            
    sscanf(skins[i], !"p<,>iiiii"id[0], id[1], id[2], id[3], id[4]); 
            
    skin[playerid]++; 

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

            
    SetPlayerSkin(playeridid[sskin[playerid]]); 
        } 
        return 
    true

    И скинь скрин того, что в чат отобразит
    Про название переменных я знаю. Это просто тестирование системы, поэтому название соответствующее. В будущем, когда буду внедрять это в код (не просто инклуд для разработки, где тестируются все системы перед внедрением), то буду давать нормальные имена переменным.

    Вот то, что вывело в чат:

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Про название переменных я знаю. Это просто тестирование системы, поэтому название соответствующее. В будущем, когда буду внедрять это в код (не просто инклуд для разработки, где тестируются все системы перед внедрением), то буду давать нормальные имена переменным.

    Вот то, что вывело в чат:
    Скорее всего sskin[playerid] имеет значение, выходящие за рамки массива id:
    PHP код:
    SetPlayerSkin(playeridid[sskin[playerid]]); 
    поэтому выполнение функции прерывается. Установи crashdetect, чтобы такое сразу бросалось в глаза.

    А по поводу функции - она вообще ничего путного не делает. Массив skin не используется, SetPlayerSkin зачем-то вызывается 10 раз (то есть это предполагается).
    В общем, тебе нужно сначала понять, что ты вообще хочешь сделать.

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Скорее всего sskin[playerid] имеет значение, выходящие за рамки массива id:
    PHP код:
    SetPlayerSkin(playeridid[sskin[playerid]]); 
    поэтому выполнение функции прерывается. Установи crashdetect, чтобы такое сразу бросалось в глаза.

    А по поводу функции - она вообще ничего путного не делает. Массив skin не используется, SetPlayerSkin зачем-то вызывается 10 раз (то есть это предполагается).
    В общем, тебе нужно сначала понять, что ты вообще хочешь сделать.
    Дело в том, что crashdetect не выводит ошибок вообще. Я понял, что хочу сделать, но в плане реализации, если честно, не очень... SetPlayerSkin вызывается всего один раз, как и сообщения в чат (для теста), так как добавлено ещё одно условие на проверку возраста и национальности персонажа.
    Последний раз редактировалось PawnoNoob; 15.05.2017 в 11:57.

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Дело в том, что crashdetect не выводит ошибок вообще. Я понял, что хочу сделать, но в плане реализации, если честно, не очень... SetPlayerSkin вызывается всего один раз, как и сообщения в чат (для теста), так как добавлено ещё одно условие на проверку возраста и национальности персонажа.
    У тебя SetPlayerSkin находится в цикле на 10 итераций и никаких проверок я не вижу. В общем, объясни что ты хочешь сделать, а "Функция предназначена для выбора скина при регистрации." - не объяснение.

  10. #9
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    У тебя SetPlayerSkin находится в цикле на 10 итераций и никаких проверок я не вижу. В общем, объясни что ты хочешь сделать, а "Функция предназначена для выбора скина при регистрации." - не объяснение.
    1 раз - значит функция у него действительно прерывается, и дальше действия не проходят, выход за пределы массива.
    Автор , а мод скомпилировал с ключом -d3?

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    У тебя SetPlayerSkin находится в цикле на 10 итераций и никаких проверок я не вижу. В общем, объясни что ты хочешь сделать, а "Функция предназначена для выбора скина при регистрации." - не объяснение.
    Я написал, что добавил условие.

    В принципе, функция сама по себе простая, но что-то у меня всё не очень хорошо с её реализацией. В общем: идентификаторы внешности хранятся в базе данных:

    Какой столбец для чего предназначен - понятно (пол, национальность, минимальный выбранный возраст и максимальный выбранный возраст).
    При старте сервера они загружаются из базы данных:
    PHP код:
    mysql_tquery(MySQL, !"SELECT * FROM `skins_info`", !"LoadSkins"""); 
    И, соответственно, функция:
    PHP код:
    function LoadSkins()
    {
        new 
    rows;
        
    cache_get_row_count(rows);
        if(
    rows)
        {
            for(new 
    0buffrowsi++)
            {
                
    cache_get_value_name_int(i, !"gend"buff);
                
    reg_gend{i} = buff;
                
    cache_get_value_name_int(i, !"nat"buff);
                
    reg_nat{i} = buff;
                
    cache_get_value_name_int(i, !"minage"buff);
                
    reg_minage{i} = buff;
                
    cache_get_value_name_int(i, !"maxage"buff);
                
    reg_maxage{i} = buff;
                
    cache_get_value_name(i, !"sid"skins[i], 26);
            }
            print(!
    "Загружено.");
        }
        else print(!
    "Не загружено.");
        return 
    true;

    Из сообщения #5 видно, что всё загружается (выводит в чат).
    Теперь сама функция выбора (дополненная):
    PHP код:
    stock SSkin(playeridgendnatage)
    {
        new 
    id[6], skin[MAX_PLAYERS] = -1;
        
    skin[playerid]++;
        for(new 
    010i++)
        {
            if(
    reg_gend{i} == gend && reg_nat{i} == nat && (age >= reg_minage{i} && age <= reg_maxage{i}))
            {
                
    SendClientMessage(playerid, -1skins[i]);

                
    sscanf(skins[i], !"p<,>iiiii"tempid[0], id[1], id[2], id[3], id[4]);

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

                
    SetPlayerSkin(playeridtempid[skin[playerid]]);
            }
        }
        return 
    true;

    Ну и команда для тестирования:
    PHP код:
    cmd:test(playerid)
    {
        
    SSkin(playerid/*пол*//*национальность*//*возраст*/);
        return 
    true;


 

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

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

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

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

Ваши права

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