Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 2 ПерваяПервая 1 2
Показано с 11 по 16 из 16

Тема: @playerid

  1. #11
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    Обнаруженные баги:
    Если написать больше 20-и раз @playerid, то OnPlayerText возвращает 1, и каким-то чудо способом игнорится SendClientMessageToAll (см. цитирование).
    Если верить вашему описанию, то это, скорее всего, выход за пределы массива. Интересно.
    Какую строку вводите в чате? И какой никнейм соответствует вводимому(-ым) ID?


    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    1) Хотелось бы перед узнаваемым ником, определялся цвет ника игрока. Кто может помочь с этим вопросом, стучитесь в ЛС. 50 рубликов могу дать.)
    Могу сделать, как только разберусь с проблемой выше.


    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    2) Если написать @playerid больше 2-х раз, то пишем игроку "Максимум 2 ника!");
    Нет абсолютно никакой необходимости добавлять это в мою функцию, вы и сами можете можете проверить строку на вхождение символа "@".
    PHP код:
    for (new pos = -1special_char_count 0text[++pos] != 0;)
        if ((
    special_char_count += _:(text[pos] == '@')) > 2)
            return 
    SendClientMessage(playerid, -1"Ошибка: Разрешено указывать до 2 никнеймов."); 
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  2. #12
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    157
    Репутация:
    8 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Если верить вашему описанию, то это, скорее всего, выход за пределы массива. Интересно.
    Какую строку вводите в чате? И какой никнейм соответствует вводимому(-ым) ID?
    [/php]
    Просто написал 23 раза @0 (0 ид игрока). Никнейм игрока ид 0:
    haew970f
    Последний раз редактировалось Иван Бубнов; 04.02.2016 в 20:39.

  3. #13
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    Просто написал 23 раза @0 (0 ид игрока). Никнейм игрока ид 0:
    haew970f
    Не получилось воспроизвести ошибку, на моём тестовом сервере никаких выходов за пределы массива нет.
    Я даже сделал контрольные буферы до и после обрабатываемой строки, инициализировал их нулями и проверял неизменность значений в них после выполнения ParseReferences (crashdetect не всегда может самостоятельно определить выход за пределы массива в нативных строковых функциях, поэтому приходится так костылить), всё чисто.

    Тем не менее, я только что исправил баг, из-за которого при неправильно введённых ID (например "@playerid" вместо "@1") брался никнейм игрока с ID 0.
    PHP код:
    ParseReferences(const text[], output[], size sizeof(output))
    // by Daniel_Cortez \\pro-pawn.ru
        
    static size_m_1nickname_pos1nickname_pos2ref_idpos1pos2c;
        
    size_m_1 size 1;
        
    pos1 0pos2 strlen(output);
        for(;;)
        {
            if(
    text[pos1] == '@')
            {
                
    nickname_pos1 pos1nickname_pos2 pos2;
                
    ref_id 0;
                while(
    '0' <= (text[++pos1]) <= '9')
                    
    ref_id ref_id 10 + ('0');
                if ((
    pos1 == nickname_pos1+1) || (== IsPlayerConnected(ref_id)))
                    
    output[pos2++] = '@'pos1 nickname_pos1 1;
                else
                    
    pos2 += GetPlayerName(
                        
    ref_id,
                        
    output[nickname_pos2],
                        
    size nickname_pos2
                    
    );
            }
            else if((
    output[pos2++] = text[pos1++]) == '\0')
                break;
            if(
    pos2 == size_m_1)
            {
                
    output[pos2] = '\0';
                break;
            }
        }

    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. Пользователь сказал cпасибо:
    Иван Бубнов (04.02.2016)
  5. #14
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    157
    Репутация:
    8 ±
    Дело все так-и оказался не в функции. Сейчас попытаюсь сделать так, чтобы перед определяемым ником ставился цвет ника, поделюсь)
    Последний раз редактировалось Иван Бубнов; 04.02.2016 в 21:20.

  6. #15
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Ок, только что воспроизвёл проблему и исправил её.
    Дубль 3...
    PHP код:
    ParseReferences(const text[], output[], size sizeof(output))
    // by Daniel_Cortez \\pro-pawn.ru
        
    static size_m_1nickname_pos1nickname_pos2ref_idpos1pos2c;
        
    size_m_1 size 1;
        
    pos1 0pos2 strlen(output);
        for (;;)
        {
            if (
    pos2 >= size_m_1)
            {
                if (
    pos2 == size_m_1)
                    
    output[pos2] = '\0';
                break;
            }
            if (
    text[pos1] == '@')
            {
                
    nickname_pos1 pos1nickname_pos2 pos2;
                
    ref_id 0;
                while(
    '0' <= (text[++pos1]) <= '9')
                    
    ref_id ref_id 10 + ('0');
                if ((
    pos1 == nickname_pos1+1) || (== IsPlayerConnected(ref_id)))
                {
                    
    output[pos2++] = '@'pos1 nickname_pos1 1;
                    continue;
                }
                
    pos2 += GetPlayerName(
                    
    ref_id,
                    
    output[nickname_pos2],
                    
    size nickname_pos2
                
    );
            }
            else if ((
    output[pos2++] = text[pos1++]) == '\0')
                break;
        }

    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. #16
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    157
    Репутация:
    8 ±
    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    Сейчас попытаюсь сделать так, чтобы перед определяемым ником ставился цвет ника, поделюсь)
    Не смог.


    Close!

 

 
Страница 2 из 2 ПерваяПервая 1 2

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

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

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

Ваши права

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