PDA

Просмотр полной версии : [Вопрос] Курсор и команда



HarrWe
26.07.2016, 15:30
Hello, ребят выручайте, хочу сделать что бы игрок мог когда ему надо включать/выключать курсор, например админ в RECON Режиме мог быстро нажав на кнопку выключить курсор и посмотреть вокруг игрока.Так вот вот команда:


CMD:mouse(playerid)
{
if(MouseStatus[playerid] == 0)
{
SelectTextDraw(playerid, 0x000E17FF);
SCM(playerid, -1, "{009CFF}|{FFFFFF} Вы включили курсор, что бы отключить его опять нажмите на {009CFF}ESC{FFFFFF}.");
MouseStatus[playerid] = 1;
}
else
{
CancelSelectTextDraw(playerid);
MouseStatus[playerid] = 0;
}
return true;
}
К команде претензий нету, всё хорошо работает, но когда я делаю например на кнопку, она включается но что бы выключить приходится нажимать ESC, а на N не хочет выключаться.


if(newkeys & KEY_NO)
{
cmd::mouse(playerid);
}

Daniel_Cortez
26.07.2016, 15:56
Скорее всего, в OnPlayerKeyPressed уже есть конструкция if с "newkeys & KEY_NO" или чем-то похожим в условии и return в теле ветвления.

HarrWe
26.07.2016, 15:58
Скорее всего, в OnPlayerKeyPressed уже есть конструкция if с "newkeys & KEY_NO" или чем-то похожим в условии и return в теле ветвления.

Может быть OnPlayerKeyStateChange?

Роуди.
26.07.2016, 16:00
Может быть OnPlayerKeyStateChange?

опечтался человек, с кем не бывает. Обязательно придраться нужно?

HarrWe
26.07.2016, 16:01
опечтался человек, с кем не бывает. Обязательно придраться нужно?
Ну я просто подумал мб есть такой паблик, вдруг я чего то не знаю.


Скорее всего, в OnPlayerKeyPressed уже есть конструкция if с "newkeys & KEY_NO" или чем-то похожим в условии и return в теле ветвления.

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

DeimoS
26.07.2016, 17:26
По-моему, это просто "фича" SA-MP и когда включается кликабельность для текстдравов, OnPlayerKeyStateChange не работает. Проверить легко:

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
SendClientMessage(playerid, -1, "OnPlayerKeyStateChange");
return 1;
}
Если сообщение будет выводится при нажатии на N (в режиме кликабельных текстдравов), то можно продолжать искать проблему. Иначе остаётся лишь смириться

vovandolg
26.07.2016, 18:20
new MouseStatus[MAX_PLAYERS char]; // глобальная


public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_NO)
{
if(MouseStatus{playerid} == 0)
{
MouseStatus{playerid} = 1;
SelectTextDraw(playerid, 0x000E17FF);
SCM(playerid, -1, !"{009CFF}|{FFFFFF} Вы включили курсор, что бы отключить его нажмите на {009CFF}ESC{FFFFFF}.");
}
}
return 1;
}

public OnPlayerClickTextDraw(playerid, Text:clickedid) //тут смотри по названию не спутай индивидум/глобальный клик TD
{
if(_:clickedid == INVALID_TEXT_DRAW)
{
if(MouseStatus{playerid} == 1)
{
MouseStatus{playerid} = 0;
CancelSelectTextDraw(playerid); //не помню честно это надо или оно и так уберётся
SCM(playerid, -1, !"{009CFF}|{FFFFFF} Вы выключили курсор, что бы включить его нажмите на {009CFF}NO{FFFFFF}.");
}
}
return 1;
}

HarrWe
26.07.2016, 19:50
По-моему, это просто "фича" SA-MP и когда включается кликабельность для текстдравов, OnPlayerKeyStateChange не работает. Проверить легко:

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
SendClientMessage(playerid, -1, "OnPlayerKeyStateChange");
return 1;
}
Если сообщение будет выводится при нажатии на N (в режиме кликабельных текстдравов), то можно продолжать искать проблему. Иначе остаётся лишь смириться

К сожалению да это фича такая(