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

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

Antoxa39
Dance 80-90, mmm Nice)

Здрасти, сегодня мы разберем паблик 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 , создано

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

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


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

@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 возвращаемое значение не играет роли, про это можно и умолчать.

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


Ссылка на сообщение
Поделиться на другие сайты
𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧.
Создатель WayDev

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


@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 пользователей онлайн

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

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

    • grall758
      От grall758
      ищу добровольных ребят которые готовы принять свое участие в развитии масштабного крмп проекта, и заложить свою работу в наш проект. Обязательно предоставляется возможность карьерного роста и получения новых знаний. 
       
      ВСЕ КТО ЗА ИНТЕРЕСОВАН В РОСТЕ ПРОЕКТА ПИШИТЕ:
      телеграмм - @grall758
      дискорд - @grallchik758
       
      желательно когда пишите сразу уточняйте свою направленность.
    • Lipsi
      От Lipsi
      Здравствуйте! 
       
      Я ищю людей мапперов скриптеров и так далее! 
       
      Плата будет но не сразу
      Надеюсь люли будут кто есть напишите свои в контакте пожалуйста. 
    • KAIF HOST
      От KAIF HOST
      Если вы ищете надежный, стабильный и бюджетный хостинг для ваших серверов SAMP или CRMP, то KAIF-HOST.RU - лучший выбор для вас. Мы молодая компания среди игровых хостингов, но мы гарантируем стабильность и безопасность вашего сервера.
       
      Мы предлагаем защиту от TCP SYN и UDP флуда, а также от Spoofing атак. Мы также обеспечиваем защиту на уровнях L3, L4 и L7.
       
      Наши преимущества включают автоподнятие серверов после падения, удобную панель управления сервером и автоматическую установку сервера. Мы также гарантируем быструю техническую поддержку для всех наших клиентов.
       
       
       
      Наши серверы доступны всего от 20 рублей в месяц, что делает нас одним из самых доступных хостингов на рынке.
       
       
       
       
       
       Ссылки:
       
      Сайт kaif-host.ru
      Панель управления lk.kaif-host.ru
      Группа ВКонтакте https://vk.com/kaif_host_official
       
      P.s Промокод #pawnorus даст тебе скидку в размере 20%