Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±

    Передача спецификатора "u" в sscanf2

    Всегда думал, что, передавая спецификатор "u" в sscanf2, функция вернет ID игрока или INVALID_PLAYER_ID (то есть заранее проверит, подключен ли игрок). Но тема на WIKI ставит под сомнения этот момент http://wiki.pro-pawn.ru/wiki/SetPlayerName.
    Код HTML:
    new targetid;if (sscanf(params, "us[128]", targetid, params))    return SendClientMessage(playerid, -1, "Использование: /setname [ID игрока/часть ника] [новый ник]");if (IsPlayerConnected(targetid) == 0)    return SendClientMessage(playerid, -1, "Игрок не найден!");
    Скажите пожалуйста, это опечатка или мои суждения неверны?

    p.s. заколебал этот BB-код pawn. Чуть что не так, сразу перестает работать. Редактируешь сообщение - его в панели редактора уже нет. Это же касается BB-кода ссылки. Ввожу туда эту ссылку, а при нажатии кидает на страницу создания текста.
    Последний раз редактировалось Elrmrnt-Kritik; 28.07.2018 в 23:39.

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

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Всегда думал, что, передавая спецификатор "u" в sscanf2, функция вернет ID игрока или INVALID_PLAYER_ID (то есть заранее проверит, подключен ли игрок). Но тема на WIKI ставит под сомнения этот момент http://wiki.pro-pawn.ru/wiki/SetPlayerName.
    Код HTML:
    new targetid;if (sscanf(params, "us[128]", targetid, params))    return SendClientMessage(playerid, -1, "Использование: /setname [ID игрока/часть ника] [новый ник]");if (IsPlayerConnected(targetid) == 0)    return SendClientMessage(playerid, -1, "Игрок не найден!");
    Скажите пожалуйста, это опечатка или мои суждения неверны?

    p.s. заколебал этот BB-код pawn. Чуть что не так, сразу перестает работать. Редактируешь сообщение - его в панели редактора уже нет. Это же касается BB-кода ссылки. Ввожу туда эту ссылку, а при нажатии кидает на страницу создания текста.
    Все верно, если указать спецификатор "u", то функция запишет ID игрока, если он подключен или INVALID_PLAYER_ID, если не подключен

  3. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (28.07.2018)
  4. #3
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Значит на WIKI опечатка :) По крайней мере, лишнее использование нативной функции IsPlayerConnected.

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

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Значит на WIKI опечатка :) По крайней мере, лишнее использование нативной функции IsPlayerConnected.
    Использование функции по ее назначению не является опечаткой. Более того, при написании таких команд мне кажется это наиболее безопасный вариант, потому что иногда можно вместо спецификатора "u" (тем более хранить в голове какое там значение запишется, если игрок оффлайн) поставить "d/i" и заметить это не в самый подходящий момент. Если говорить об оптимизации - то в данном случае никакой роли не играет, каким способом вы будете проверять игрока на онлайн

  6. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (29.07.2018)
  7. #5
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Sp1ke Посмотреть сообщение
    Использование функции по ее назначению не является опечаткой. Более того, при написании таких команд мне кажется это наиболее безопасный вариант, потому что иногда можно вместо спецификатора "u" (тем более хранить в голове какое там значение запишется, если игрок оффлайн) поставить "d/i" и заметить это не в самый подходящий момент. Если говорить об оптимизации - то в данном случае никакой роли не играет, каким способом вы будете проверять игрока на онлайн
    Он имелл ввиду, что проверка
    1. if (IsPlayerConnected(targetid) == 0)

    может быть заменена
    1. if (targetid == INVALID_PLAYER_ID)

    и да, так оно и есть.

  8. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (29.07.2018)
  9. #6
    Аватар для Mopok
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.10.2015
    Сообщений
    37
    Репутация:
    3 ±
    По какой причине спецификатор "u" и "r" могут зачастую не верно возвращать значение? Ибо сколько раз когда я один на серве и проверяю всякие команды, IsPlayerConnected(значениие из sscanf) выдает что игрок не подключен, и опять же может начать работать после обычного перезахода на сервер. Есть ли варианты? SScanf вроде последней версии...

 

 

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

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

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

Ваши права

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