Antoxa39

Назначение клавиш на какие-либо действия

В теме 4 сообщения

Здрасти, сегодня мы разберем паблик public OnPlayerKeyStateChange. // он предназначается для того,чтобы на какую либо клавишу сделать действие.

Начнем!)

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)

{

    if(newkeys == ID)// если написать newkeys && ID то тогда если у вас зажаты другие клавишы код сработает,а если стоит == то код сработает когда все клавиши будут отжаты.
    {

        //действие
    }

    //допустим,мы хотим чтобы когда игрок нажимал клавишу N,у него выводилось сообщение в чате.
    if(newkeys && 131072)// 131072 = KEY_NO
    {
        SendClientMessage(playerid,-1,"Вы нажали клавишу "N" ");
    }
    //создадим создание машины при нажатии кнопки LALT
    
        if(newkeys & 1024)
        {
            new Float:pos[3]; // создаем перемуную, в которой храним координаты игрока
            GetPlayerPos(playerid,pos[0],pos[1],pos[2]);// узнаем и записываем эти координаты в перемуню "pos"
            CreateVehicle(Modelid,pos[0],pos[1]+2.1,pos[2]+2.9,color1,color2,-1);//создаем машину по координатам игрока

        }
        // Вот и все)
    return 1;

}

Жду поправок)

Отредактировано пользователем Antoxa39

Заметка от DEST , создано

Пока не дотягивает до уровня раздела "Уроки", перемещено в "Песочницу".
Если решите модифицировать свой урок, добавить больше информации/пояснений, возможно, со ссылками на другие источники, отпишите администрации для повторной проверки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Antoxa39,

 

  Цитата
if(newkeys && 131072)// 131072 = KEY_NO
Читать далее...  

 

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

 

Также обращаю ваше внимание на существование двух абсолютно разных операторов:

  • Оператор логического умножения: &&. Результат логического выражения дает ноль только в случае, если он равен нулю. В остальных случаях результат выражения - единица. Соответственно, newkeys && 131072 дает единицу всегда, если нажата хотя бы одна клавиша, поскольку значения newkeys и 131072 отличаются от нуля.
  • Оператор побитового И: &. Результат такой операции дает единицу в том случае, если биты одного операнда совпадают с битами другого операнда. Соответственно, newkeys & 131072 даст 1 только при условии, если семнадцатый бит в переменной newkeys установлен в 1. Откуда семнадцать? 131072 = 2^17 = (00000000 00000010 00000000 00000000) в двоичной системе счисления.

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

 

В подобных темах еще неплохо указывать возвращаемые значения из callback-функций (к чему приводит возврат нуля и единицы из функции). Но, коль уж для OnPlayerKeyStateChange возвращаемое значение не играет роли, про это можно и умолчать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Cawfee я приводил до примера

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ох, да простят меня модераторы за оффтоп.


@Antoxa39, упустим момент, что ты недавно просил помощи по элементарным вопросам SQL, в то же время предоставляешь услуги pawn-разработчика. Что за детский лепет ты здесь показал? Мало того, что русский язык не ахти, так еще и объяснения не внятные. Не понятен лишь один момент: вы таким образом сообщения тут набиваете или что? *facepalm*

 

Что это такое?

"если написать newkeys && ID то тогда если у вас зажаты другие клавишы код сработает,а если стоит == то код сработает когда все клавиши будут отжаты.";
"допустим,мы хотим чтобы когда игрок нажимал клавишу N,у него выводилось сообщение в чате.";

Условие, например, if(newkeys & KEY_WALK) используется для срабатывания кода при нажатии клавиши в сочетании с другими.
Попрошу подметить, что в условии выше используется ОДИН АМПЕРСАНД, а не два.


Условие, например, if(newkeys == KEY_WALK) будет срабатывать ТОЛЬКО когда нажата именно одна клавиша (огонь в данном случае). Т.е. если при этом зажата клавиша прицеливания или какая-либо другая, скрипт не сработает!

Именно так должны писаться подобные уроки.
Дам лишь один совет: перед тем как писать подобные темы - выучи теорию и перестань предоставлять свои услуги pawn-разработчика.

 

Удачи.

UPD:
SendClientMessage(playerid,-1,"Вы нажали клавишу "N" "); //неверное использование кавычек.
SendClientMessage(playerid,-1,"Вы нажали клавишу \"N\" "); //верное использование кавычек.

Если пишете подобные уроки, то будьте добры, учитывайте все моменты до единого.

Отредактировано пользователем glvde.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • whccompany
      От whccompany
      Rostov Role Play | Rostov RP | CRMP Mobile Project объявляет набор людей в свою команду: Нам требуются:
       
      1. Маппера:
      Сдельная оплата труда от 250 до 3000 рублей/ за 1 работу
       
      2. Специалист по Text Draw:
      Сдельная оплата труда от 400 до 3500 рублей/ за одну работу
       
      3. Pawn разработчик:
      Заработная плата от 10 000 рублей/месяц
       
      4. Программист для создания лаунчера и сайта UCP с автодонатом:
      Заработная плата от 10 000 рублей/месяц
       
      Контакты для связи:
       
      ВКонтакте
       
      Telegram
       
    • Talex
      От Talex
      Игровой сервер Life Game RolePlay
    • Talex
      От Talex
      Игровой сервер Life Game RolePlay
      Скачать файл Игровой сервер Life Game RolePlay
      Добавил Talex Добавлено 28.01.2024 Категория Моды Автор Неизвестно  
    • Владислав2
      От Владислав2
      Здравствуйте, при компиляции появляется ошибка,

      Ошибка:
      error 017: undefined symbol "REP_KUZIA_TD"

      Строки:
       
          REP_KUZIA_TD[0] = TextDrawCreate(7.499990, 314.444396, "REP: 1");
          TextDrawLetterSize(REP_KUZIA_TD[0], 0.400000, 1.600000);
          TextDrawAlignment(REP_KUZIA_TD[0], 1);
          TextDrawColor(REP_KUZIA_TD[0], -1);
          TextDrawSetShadow(REP_KUZIA_TD[0], 0);
          TextDrawSetOutline(REP_KUZIA_TD[0], 1);
          TextDrawBackgroundColor(REP_KUZIA_TD[0], 255);
          TextDrawFont(REP_KUZIA_TD[0], 1);
          TextDrawSetProportional(REP_KUZIA_TD[0], 1);
          TextDrawSetShadow(REP_KUZIA_TD[0], 0);
          REP_KUZIA_TD[1] = TextDrawCreate(6.249957, 330.518493, "ASK: 0");
          TextDrawLetterSize(REP_KUZIA_TD[1], 0.400000, 1.600000);
          TextDrawAlignment(REP_KUZIA_TD[1], 1);
          TextDrawColor(REP_KUZIA_TD[1], -1);
          TextDrawSetShadow(REP_KUZIA_TD[1], 0);
          TextDrawSetOutline(REP_KUZIA_TD[1], 1);
          TextDrawBackgroundColor(REP_KUZIA_TD[1], 255);
          TextDrawFont(REP_KUZIA_TD[1], 1);
          TextDrawSetProportional(REP_KUZIA_TD[1], 1);
          TextDrawSetShadow(REP_KUZIA_TD[1], 0);
          return 1;
      }

      Буду рад если кто-то поможет