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

    Статус
    Оффлайн
    Регистрация
    27.06.2016
    Сообщений
    26
    Репутация:
    0 ±

    /id с темы по sscanf'у.

    Решил почитать документацию по sscanf'у, но немного не понял часть с получением полу-игрового имени. (MATCH_NAME_PARTIAL)

    Можете подсказать как улучшить, да и в общем, правильно ли написал (правильно ли скопировал*)? На 1-ом игроке (мне) все отлично работает, не жалусь

    PHP код:
    CMD:id(playeridparams[])
    {
        new 
    targetid[10], nickname[MAX_PLAYER_NAME], istring[MAX_PLAYER_NAME*10+7-6];
        if(
    sscanf(params"?<MATCH_NAME_PARTIAL=1>u[10]"targetid)) SendClientMessage(playerid0xFFFFFFAA"(( Используйте: /id <targetid / nickname> ))");

        while(
    targetid[i] != INVALID_PLAYER_ID)
        {
            if(
    targetid[i] == cellmin)
            {
                
    SendClientMessage(playerid0xFFFFFFAA"(( Слишком много совпадений ))");
                break;
            }
            
    GetPlayerName(targetid[i], nicknameMAX_PLAYER_NAME);
            
    format(stringsizeof(string), "%s- %s [%d];\n"stringnicknametargetid[i]);
            ++
    i;
        }
        if(!
    i) return SendClientMessage(playerid0xFFFFFFAA"(( Слишком мало данных для поиска ))");
        
        
    SendClientMessage(playerid0xFFFFFFAAstring);
        return 
    1;

    Телеграфируем в соц.сети "вконтакте" или же мылимся на веревке "VKontakte"?

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

    Статус
    Оффлайн
    Регистрация
    22.11.2016
    Сообщений
    43
    Репутация:
    2 ±
    Разве не так?
    PHP код:
    if(sscanf(params,"u"targetid)) 

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Вроде нормально всё (разве что после срабатывания sscanf нужно выйти из функции), но я её улучшил (как мне кажется) подсветкой введённых символов в найденных никах:
    PHP код:
    insert_pos strfind(stringparamstrue);
    if (
    insert_pos != -1) {
        
    strins(string"{FFFFFF}"strlen(params) + insert_pos);
        
    strins(string"{FF8888}"insert_pos);

    Цитата Сообщение от Guldan Посмотреть сообщение
    Разве не так?
    PHP код:
    if(sscanf(params,"u"targetid)) 
    Это лишь для одного игрока.
    Последний раз редактировалось ziggi; 26.11.2016 в 23:15.

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

    Статус
    Оффлайн
    Регистрация
    22.11.2016
    Сообщений
    43
    Репутация:
    2 ±
    Ты хочешь \n использовать в SendClientMessage

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

    PHP код:
    CMD:id(playeridparams[])
    {
        new 
    targetid[10], nickname[MAX_PLAYER_NAME], istring[MAX_PLAYER_NAME+10-4];
        if(
    sscanf(params"?<MATCH_NAME_PARTIAL=1>u[10]"targetid)) SendClientMessage(playerid0xFFFFFFAA"(( Используйте: /id <targetid / nickname> ))");

        while(
    targetid[i] != INVALID_PLAYER_ID)
        {
            if(
    targetid[i] == cellmin)
            {
                
    SendClientMessage(playerid0xFFFFFFAA"(( Слишком много совпадений ))");
                break;
            }
            
    GetPlayerName(targetid[i], nicknameMAX_PLAYER_NAME);
            
    format(stringsizeof(string), "- %s [%d];"nicknametargetid[i]);
            
    SendClientMessage(playerid0xFFFFFFAAstring);
            ++
    i;
        }
        if(!
    iSendClientMessage(playerid0xFFFFFFAA"(( Слишком мало данных для поиска ))");
        return 
    1;


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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Guldan Посмотреть сообщение
    Ты хочешь \n использовать в SendClientMessage
    И правда. Тогда я лучше выложу свой вариант команды, но с текстом автора:
    PHP код:
    CMD:id(playeridparams[])
    {
        
    #if !defined COMMAND_ID_MAX_MATCHES
            #define COMMAND_ID_MAX_MATCHES 10
        #endif

        
    new
            
    ids[COMMAND_ID_MAX_MATCHES];

        if (
    sscanf(params"?<MATCH_NAME_PARTIAL=1>u[" #COMMAND_ID_MAX_MATCHES "]", ids)) {
            
    SendClientMessage(playerid0xFFFFFFAA"(( Используйте: /id <targetid / nickname> ))");
            return 
    1;
        }
        
    #undef COMMAND_ID_MAX_MATCHES

        
    new
            
    i,
            
    insert_pos,
            
    string[MAX_PLAYER_NAME 16 1];

        while (
    ids[i] != INVALID_PLAYER_ID) {
            if (
    ids[i] == cellmin) {
                
    SendClientMessage(playerid0xFFFFFFAA"(( Слишком много совпадений ))");
                break;
            }

            
    GetPlayerName(ids[i], stringsizeof(string));

            
    insert_pos strfind(stringparamstrue);
            if (
    insert_pos != -1) {
                
    strins(string"{FFFFFF}"strlen(params) + insert_pos);
                
    strins(string"{FF8888}"insert_pos);
            }

            
    format(stringsizeof(string), "%s [%d];"stringids[i]);
            
    SendClientMessage(playerid0xFFFFFFAAstring);

            ++
    i;
        }

        if (
    == 0) {
            
    SendClientMessage(playerid0xFFFFFFAA"(( Слишком мало данных для поиска ))");
        }
        return 
    1;

    Последний раз редактировалось ziggi; 27.11.2016 в 14:38.

  6. #6
    Аватар для Тузик
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.06.2016
    Сообщений
    26
    Репутация:
    0 ±
    Да я спал, мозг еще не включил, спасибо за замечание)
    Телеграфируем в соц.сети "вконтакте" или же мылимся на веревке "VKontakte"?

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

    Статус
    Оффлайн
    Регистрация
    22.11.2016
    Сообщений
    43
    Репутация:
    2 ±
    Для какой цели эта команда если не секрет?

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

    Вариант ziggi:
    У тебя string = 48
    GetPlayerName(ids[i], string, sizeof(string));

    Тогда лучше так:
    GetPlayerName(ids[i], string, MAX_PLAYER_NAME);

  8. #8
    Аватар для Тузик
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.06.2016
    Сообщений
    26
    Репутация:
    0 ±
    Поиск схожих с именем (может быть и идентификатором) игроков.

    Например:
    /id Tu

    - Tuz
    - Tuzyk
    - Tuzykovich

    :)

    Кстати да, согласен с использованием константы. Так как подсчет кол-ва ячеек навряд ли в стандартном теле будет необходимо.
    Последний раз редактировалось Тузик; 27.11.2016 в 00:17.
    Телеграфируем в соц.сети "вконтакте" или же мылимся на веревке "VKontakte"?

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Guldan Посмотреть сообщение
    Для какой цели эта команда если не секрет?

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

    Вариант ziggi:
    У тебя string = 48
    GetPlayerName(ids[i], string, sizeof(string));

    Тогда лучше так:
    GetPlayerName(ids[i], string, MAX_PLAYER_NAME);
    Согласен, поправил.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Guldan Посмотреть сообщение
    Тогда лучше так:
    GetPlayerName(ids[i], string, MAX_PLAYER_NAME);
    И чем это лучше? Тем, что обманываете GetPlayerName с размером string?

    UPD: Макрос COMMAND_ID_MAX_MATCHES следует убрать (#undef) либо после выражения со sscanf, либо в конце функции, чтобы не было конфликтов при аналогичном использовании этого макроса в других функциях.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

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

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

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

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

Ваши права

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