PDA

Просмотр полной версии : [Вопрос] Random, OnPlayerKeyStateChange



xL1ke
24.08.2014, 01:21
Решил сделать рандом на нажатие различных клавиш. Можете показать структура как это всё будет выглядеть?

Чтобы в newkeys выводить различные виды кнопок начиная от кнопки прыжка заканчивая кнопкой огня.


public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_FIRE)
{
// ДЕЙСТВИЕ
}
return 1;
}

Подскажите как должен выглядить код? В голову ничего не приходить, изначально думал выводить кнопки через свитч, правда запутался потом :lazy:

underwoker
24.08.2014, 01:27
Решил сделать рандом на нажатие различных клавиш. Можете показать структура как это всё будет выглядеть?

Чтобы в newkeys выводить различные виды кнопок начиная от кнопки прыжка заканчивая кнопкой огня.


public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_FIRE)
{
// ДЕЙСТВИЕ
}
return 1;
}

Подскажите как должен выглядить код? В голову ничего не приходить, изначально думал выводить кнопки через свитч, правда запутался потом :lazy:
Хочешь сделать что то типо человеку надо будет нажимать кнопки которые будут выводиться ему?

xL1ke
24.08.2014, 01:30
Именно! :)

DeimoS
24.08.2014, 07:33
В начало мода что-то типа

new random_keys[] = { 1, 2, 4, 8, 16, 32, 128, 512, 1024, 8192, 16384, 65536, 131072, 262144, -128, 128 };
new keys_name[sizeof(random_keys)][] = { "TAB", "C", "ЛКМ", "Прыжок", "Enter", "Lshift", "ПКМ", "NUM 1/СКМ", "NUM4", "NUM6", "Y", "N", "H", "G", "W", "S" };
new key_pressed[MAX_PLAYERS] = -1;

И потом там, где нужно выдавать рандомную кнопку

key_pressed[playerid] = random(sizeof(random_keys));
new string[sizeof(keys_name[])+14];
format(string, sizeof(string), "Нажмите на \"%s\"", keys_name[key_pressed[playerid]]);
SendClientMessage(playerid, -1, string);

Ну и отлавливаем нашу кнопку

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == key_pressed[playerid])
{
SendClientMessage(playerid, -1, "Кнопка угадана!");
key_pressed[playerid] = random(sizeof(random_keys));
new string[sizeof(keys_name[])+14];
format(string, sizeof(string), "Нажмите на \"%s\"", keys_name[key_pressed[playerid]]);
SendClientMessage(playerid, -1, string);
return 1;
}
return 1;
}

А чтоб игрок именно подряд нажимал, а не всё подряд - нужно ещё одну переменную для записи предыдущей кнопки и сверять oldkeys с значением этой переменной

xL1ke
24.08.2014, 12:34
Спасибо большое! Да, я понял) Мне главное было понять как конструкция должна была выглядеть :)

DeimoS
24.08.2014, 14:26
Спасибо большое! Да, я понял) Мне главное было понять как конструкция должна была выглядеть :)

Только не забываем, что SA-MP отлавливает не нажатие кнопки, а действие, которое эта кнопка совершает по дэфолту (если это Enter - то вход/выход из транспорта и т.д.).