14:00
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Dima-kun  
[FAQ] GetPlayerKeys
Dima-kunДата: Четверг, 16.12.2010, 00:40 | Сообщение # 1
Группа: Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус:
В данном уроке научимся использовать функцию GetPlayerKeys. Вы спросите почему бы просто не воспользоваться колбэком OnPlayerKeyStateChange? Отвечу, бывают задачи, которые без данной функции нельзя решить. Например подобный скрипт как ColorMenu by stepmex.

Quote
native GetPlayerKeys(playerid, &keys, &updown, &leftright);

Для начала разберем параметры:
playerid - ID игрока, к которому применяют функцию
keys - Набор битов, содержащий кнопку
updown - Кнопки Вверх\Вниз
leftright - Кнопки Влево Вправо

Общий пример использования данной функции:

Quote
forward buttons();
public OnGameModeInit()
{
SetTimer("buttons",1000,true);
}

public buttons()
{
new keys,updown,leftright;
for (new idx=GetMaxPlayers();idx>=0;--idx)
{
if(IsPlayerConnected(idx))
{
GetPlayerKeys(idx,keys,updown,leftright);
if(updown>0)SendClientMessage(idx,0xFFFFFFFF,"-Вы нажали на кнопку - \"Стрелка вверх\"");
else if(updown<0)SendClientMessage(idx,0xFFFFFFFF,"-Вы нажали на кнопку - \"Стрелка вниз\"");
if(leftright>0)SendClientMessage(idx,0xFFFFFFFF,"-Вы нажали на кнопку - \"Стрелка вправо\"");
else if(leftright<0)SendClientMessage(idx,0xFFFFFFFF,"-Вы нажали на кнопку - \"Стрелка влево\"");
}
}
}


P.S. Надеюсь всем все станет понятно, и перестанут мне ломиться в аську и в ЛС с таким вопросом. Чтобы было меньше вопросов буду постепенно писать уроки.



Мои работы:
[INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники,
[FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos,
[GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints


Сообщение отредактировал Morino_Reigan - Четверг, 16.12.2010, 19:38
Ghost-XДата: Четверг, 16.12.2010, 07:28 | Сообщение # 2
Мастер джэдай
Группа: Продвинутые
Сообщений: 3548
Награды: 36
Город: Наб. Челны
Репутация: 856
Замечания: 40%
Статус:
Quote (Morino_Reigan)
newidx

new dx



Спор на форуме, все равно что олимпиада среди умственно отсталых: даже если ты победил, ты все равно гермофродит.
Хочешь остаться при своем мнении - держи его при себе.
DiSEДата: Четверг, 16.12.2010, 10:07 | Сообщение # 3
Группа: I'm V.I.P.
Сообщений: 1759
Награды: 23
Город: Уфа
Репутация: 337
Замечания: 80%
Статус:
Спасибо. Нужно. Как раз пригодится

Добавлено (16.12.2010, 10:07)
---------------------------------------------

Quote (Morino_Reigan)
for(new idx = 0; idx<GetMaxPlayers();i++)

Ты же сделал переменную idx, зачем тогда i++ :D

ZiGGiДата: Четверг, 16.12.2010, 10:25 | Сообщение # 4
Мастер джэдай
Группа: Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус:
цикл лучше выполнить так:
for(new idx=GetMaxPlayers();idx>=0;--idx)



Бложе
[indent]Мой блог
Уроки по Pawn
[/indent]

Open-GTO
[indent]Блог разработчиков
GitHub: https://github.com/Open-GTO/Open-GTO
Сборки мода с сервером тут
[/indent]
Dima-kunДата: Четверг, 16.12.2010, 14:38 | Сообщение # 5
Группа: Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус:
Quote (DiSE)
Ты же сделал переменную idx, зачем тогда i++

ошибся.. с кем не бывает..

ZZiGGi, объясни разницу между прямым(0,1,2,3...max_players) и обратным{max_players,....,3,2,1,0) циклированием? по мне как хрен редьки не слаще, а разве что прикольней.


Мои работы:
[INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники,
[FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos,
[GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints


Сообщение отредактировал Morino_Reigan - Четверг, 16.12.2010, 14:40
ZiGGiДата: Четверг, 16.12.2010, 14:56 | Сообщение # 6
Мастер джэдай
Группа: Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус:
Quote (Morino_Reigan)
объясни разницу между прямым(0,1,2,3...max_players) и обратным{max_players,....,3,2,1,0) циклированием? по мне как хрен редьки не слаще, а разве что прикольней.

в этом разницы 0.
Но в твоем примере, ф-ия GetMaxPlayers() будет вызываться GetMaxPlayers() раз, а в моем примере, лишь 1 ;)



Бложе
[indent]Мой блог
Уроки по Pawn
[/indent]

Open-GTO
[indent]Блог разработчиков
GitHub: https://github.com/Open-GTO/Open-GTO
Сборки мода с сервером тут
[/indent]
Dima-kunДата: Четверг, 16.12.2010, 14:59 | Сообщение # 7
Группа: Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус:
ZZiGGi, ааа.. блин сразу не допер crazy


Мои работы:
[INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники,
[FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos,
[GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
LikonikoДата: Пятница, 29.04.2011, 08:38 | Сообщение # 8
Местный
Группа: I'm V.I.P.
Сообщений: 584
Награды: 3
Город: Vaasa
Репутация: 199
Замечания: 20%
Статус:
по мойму лучше использовать такое строение:
switch(кнопки)
{
case сюда ид кнопки
}



[cut noguest=Мои работы]FAQ перенапровление портов:http://www.samp-rus.com/forum/42-14704-1
[FS]_bus_job:http://www.samp-rus.com/forum/8-14707-1
[FS]Cafe:http://www.samp-rus.com/forum/8-14725-1
[FS]Gate Creator:http://www.samp-rus.com/forum/8-14747-1#314492
[MAP]Office:http://www.samp-rus.com/forum/65-16002-1
[MAP]Квартиры:http://www.samp-rus.com/forum/65-16183-1
[FS] Квартиры:http://www.samp-rus.com/forum/8-16212-1[/cut]
Мой блог
toneysixДата: Пятница, 29.04.2011, 10:41 | Сообщение # 9
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Likoniko "по-моему" здесь не прокатит, мне очень интересно, как бы с помощь конструкции switch/case сделал бы это, забавно, может покажешь пример?


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
LikonikoДата: Пятница, 29.04.2011, 11:11 | Сообщение # 10
Местный
Группа: I'm V.I.P.
Сообщений: 584
Награды: 3
Город: Vaasa
Репутация: 199
Замечания: 20%
Статус:
new keys,updown,leftright;
GetPlayerKeys(idx,keys,updown,leftright);
switch(keys)
{
case сюда ид кнопки
}

[off]hotja ne, ne poluchitsa[/off]


[cut noguest=Мои работы]FAQ перенапровление портов:http://www.samp-rus.com/forum/42-14704-1
[FS]_bus_job:http://www.samp-rus.com/forum/8-14707-1
[FS]Cafe:http://www.samp-rus.com/forum/8-14725-1
[FS]Gate Creator:http://www.samp-rus.com/forum/8-14747-1#314492
[MAP]Office:http://www.samp-rus.com/forum/65-16002-1
[MAP]Квартиры:http://www.samp-rus.com/forum/65-16183-1
[FS] Квартиры:http://www.samp-rus.com/forum/8-16212-1[/cut]
Мой блог
toneysixДата: Пятница, 29.04.2011, 11:14 | Сообщение # 11
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Likoniko ты проверял, какие значения может вернуть данная функция в updown leftright? Там заметь стоит меньше нуля, либо больше нуля, значит функция далеко не возвращает только два значения -1 или же 1.
Можно конечно с этой конструкцией сделать, но, нужно выяснить максимальный диапазон ухода за отрицательную зону и за положительную.



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Пятница, 29.04.2011, 11:18
LikonikoДата: Пятница, 29.04.2011, 11:17 | Сообщение # 12
Местный
Группа: I'm V.I.P.
Сообщений: 584
Награды: 3
Город: Vaasa
Репутация: 199
Замечания: 20%
Статус:
а если использовать по иду как в вики?
[off]
Code
KEY_ANALOG_UP2048-~k~~VEHICLE_TURRETUP~KEY_ANALOG_DOWN4096-~k~~VEHICLE_TURRETDOWN~KEY_ANALOG_LEFT8192~k~~VEHICLE_LOOKLEFT~~k~~VEHICLE_TURRET LEFT~KEY_ANALOG_RIGHT16384~k~~VEHICLE_LOOKRIGHT~~k~~VEHICLE_TURRETRIGHT~
[/off]



[cut noguest=Мои работы]FAQ перенапровление портов:http://www.samp-rus.com/forum/42-14704-1
[FS]_bus_job:http://www.samp-rus.com/forum/8-14707-1
[FS]Cafe:http://www.samp-rus.com/forum/8-14725-1
[FS]Gate Creator:http://www.samp-rus.com/forum/8-14747-1#314492
[MAP]Office:http://www.samp-rus.com/forum/65-16002-1
[MAP]Квартиры:http://www.samp-rus.com/forum/65-16183-1
[FS] Квартиры:http://www.samp-rus.com/forum/8-16212-1[/cut]
Мой блог
toneysixДата: Пятница, 29.04.2011, 11:21 | Сообщение # 13
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Likoniko это уже другой разговор, здесь имеется ввиду специальные ключи, которые определяются авто вызовом - http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange
Можно сделать с конструкцией, но тогда определить, кроме, как одной нажатой клавиши будет нельзя, то есть если игрок нажмет к примеру KEY_WALK и KEY_LOOK_BEHIND, сработает только то, что было нажато первым, в данном случаи, чтобы такого не было, нужно сравнить биты с помощью поразрядного оператора - И (&), например if(newkeys & KEY_LOOK_BEHIND), а switch будет лишь равнять переменные.



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
LikonikoДата: Пятница, 29.04.2011, 11:25 | Сообщение # 14
Местный
Группа: I'm V.I.P.
Сообщений: 584
Награды: 3
Город: Vaasa
Репутация: 199
Замечания: 20%
Статус:
ну а если взять что возвращает переменная keys и использовать это в кейсе?


[cut noguest=Мои работы]FAQ перенапровление портов:http://www.samp-rus.com/forum/42-14704-1
[FS]_bus_job:http://www.samp-rus.com/forum/8-14707-1
[FS]Cafe:http://www.samp-rus.com/forum/8-14725-1
[FS]Gate Creator:http://www.samp-rus.com/forum/8-14747-1#314492
[MAP]Office:http://www.samp-rus.com/forum/65-16002-1
[MAP]Квартиры:http://www.samp-rus.com/forum/65-16183-1
[FS] Квартиры:http://www.samp-rus.com/forum/8-16212-1[/cut]
Мой блог
toneysixДата: Пятница, 29.04.2011, 11:29 | Сообщение # 15
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Likoniko будет тоже самое, если игрок держит две клавиши, то уже сравнить с обычным оператором сравнения (==), тот же switch нельзя, здесь нужно использовать ТОЛЬКО ПОРАЗРЯДНЫЙ ОПЕРАТОР И - &, так как мы имеем дело с битами в конце концов, то есть при нажатии двух клавиш например KEY_CROUCH, которая равняется двум, и KEY_FIRE, которая равняется трем, уже невозможно сравнить обычным оператором сравнения, так как там уже не будет числа 2 и 3, поэтому и нужно использовать побитовое сравнение.
P.S: Можно создавать шаблоны каждых нажатых клавиш между собой, но подумай, сколько на это уйдет времени, зачем заниматься такой порнографией, когда есть поразрядные операции.



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Пятница, 29.04.2011, 11:36
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua