Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

OnPlayerKeyStateChange клавиши

Мар
1
0
Пользователь
Здравствуйте! Столкнулся с проблемой в своем моде, мне нужно вывести BattlePass в мод на клавишу B и мне нужен ее код.
Пример клавиша Y это KEY_YES
Так же нужно с клавишой B
Кто ранее сталкивался с таким помогите пожалуйста
 
Мар
20
6
Пользователь
Если у тебя SA:MP / open.mp на Pawn, то здесь важный момент:

KEY_B не существует.
Через OnPlayerKeyStateChange ловятся только те клавиши, которые есть в списке поддерживаемых констант, например KEY_YES = Y, KEY_NO = N, KEY_WALK, KEY_JUMP и т. д. В официальных списках B нет.

То есть:

if(newkeys & KEY_YES)

это нормально, потому что KEY_YES действительно соответствует клавише Y. А вот аналога вида KEY_B в стандартном SA:MP/open.mp нет.

Пример рабочего кода для BattlePass на Y:

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys & KEY_YES) && !(oldkeys & KEY_YES))
{
ShowBattlePass(playerid); // твоя функция открытия BattlePass
}
return 1;
}

Что можно сделать вместо B:

1. Повесить BattlePass на доступную клавишу, например Y, N или H (KEY_CTRL_BACK). Эти константы поддерживаются.


2. Открывать BattlePass через команду, например /bp.


3. Открывать через диалог, текстдрав или кнопку в интерфейсе.


4. Если тебе именно обязательно нужна клавиша B, то стандартным Pawn-кодом на сервере это не делается — для этого уже нужен клиентский мод/плагин, потому что SA:MP сервер сам по себе такую клавишу не отслеживает. Это следует из официального списка доступных key constants, где B отсутствует.



Готовый вариант через команду:

CMD:bp(playerid, params[])
{
ShowBattlePass(playerid);
return 1;
}

Итог:
для SA:MP B через OnPlayerKeyStateChange не поймать, потому что нет KEY_B.
Самый близкий нормальный вариант — поставить BattlePass на KEY_YES, KEY_NO или команду /bp.
 
Rising Star?
Июн
2,847
2,151
Редактор
Если у тебя SA:MP / open.mp на Pawn, то здесь важный момент:

KEY_B не существует.
Через OnPlayerKeyStateChange ловятся только те клавиши, которые есть в списке поддерживаемых констант, например KEY_YES = Y, KEY_NO = N, KEY_WALK, KEY_JUMP и т. д. В официальных списках B нет.

То есть:

if(newkeys & KEY_YES)

это нормально, потому что KEY_YES действительно соответствует клавише Y. А вот аналога вида KEY_B в стандартном SA:MP/open.mp нет.

Пример рабочего кода для BattlePass на Y:

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys & KEY_YES) && !(oldkeys & KEY_YES))
{
ShowBattlePass(playerid); // твоя функция открытия BattlePass
}
return 1;
}

Что можно сделать вместо B:

1. Повесить BattlePass на доступную клавишу, например Y, N или H (KEY_CTRL_BACK). Эти константы поддерживаются.


2. Открывать BattlePass через команду, например /bp.


3. Открывать через диалог, текстдрав или кнопку в интерфейсе.


4. Если тебе именно обязательно нужна клавиша B, то стандартным Pawn-кодом на сервере это не делается — для этого уже нужен клиентский мод/плагин, потому что SA:MP сервер сам по себе такую клавишу не отслеживает. Это следует из официального списка доступных key constants, где B отсутствует.



Готовый вариант через команду:

CMD:bp(playerid, params[])
{
ShowBattlePass(playerid);
return 1;
}

Итог:
для SA:MP B через OnPlayerKeyStateChange не поймать, потому что нет KEY_B.
Самый близкий нормальный вариант — поставить BattlePass на KEY_YES, KEY_NO или команду /bp.
2.20. Запрещено публиковать ответы, сгенерированные при помощи ChatGPT или аналогичных ИИ-моделей.
 
Сверху