Зажатие кнопки use_button
|
|
rasav
|
Дата: Понедельник, 29.07.2013, 11:55:33 | Сообщение # 1 |
|
Сообщений: 58
Репутация: 0 [ +/- ]
|
|
Здравствуйте ! У меня не хватает фантазии как можно отследить зажатие кнопки (use button)
Дело в том что если кнопка зажата должно выполняться одно действие непрерывно ! А если кнопка отпущена , то другая функция .
Нашел на форуме пример но он не подходит
Цитата (_wS_) new bool:g_Hold[MAXPLAYERS + 1];
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon) { if (buttons & IN_ATTACK) { if (!g_Hold[client]) { // зажал g_Hold[client] = true; } } else if (g_Hold[client]) /// Функция прерывается { // отпустил g_Hold[client] = false; } }
Так как там функция будет прерываться ! И запускаться заново ...
У меня была идея сделать через таймеры
Код new bool:g_Hold[MAXPLAYERS + 1];
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon) { if (buttons & IN_ATTACK) { if (!g_Hold[client]) { // зажал g_Hold[client] = true; Timer[client] = CreateTimer(0.5, Timer_EndBarTimer, client);/// Таймер закончит функцию если его не убить } } else if (g_Hold[client]) { // отпустил KillTimer(Timer[client]); ///Убиваем таймер g_Hold[client] = false;///Но игрок может отпустить кнопку во время удаления таймера и функция будет продолжать работать . } }
Есть идеи как сделать по другому ?
Сообщение отредактировал rasav - Понедельник, 29.07.2013, 11:56:09 |
|
| |
horr0r
|
Дата: Понедельник, 29.07.2013, 12:30:51 | Сообщение # 2 |
|
Сообщений: 149
Репутация: 40 [ +/- ]
|
|
Код public OnGameFrame() { for(new i = 1; i < GetMaxPlayers(); i++) { if(!IsClientIsConnected(i)) continue; if(GetClientButtons(i) & IN_ATTACK) { //кнопка зажата, действия } else { //кнопка не зажата, действия } } }
Сообщение отредактировал horr0r - Понедельник, 29.07.2013, 12:32:57 |
|
| |
rasav
|
Дата: Понедельник, 29.07.2013, 17:22:04 | Сообщение # 3 |
|
Сообщений: 58
Репутация: 0 [ +/- ]
|
|
Цитата (horr0r) public OnGameFrame() { for(new i = 1; i < GetMaxPlayers(); i++) { if(!IsClientIsConnected(i)) continue; if(GetClientButtons(i) & IN_ATTACK) { //кнопка зажата, действия } else { //кнопка не зажата, действия } } }
Это глупо 66 раз в сек проверять . OnPlayerRunCmd само по себе у меня на сервере раз 70 вызывается в секунду . Будет проще создать таймер какой нибудь повторяющийся чем через это вызывать .
Будут еще варианты ?Добавлено (29.07.2013, 17:22:04) --------------------------------------------- Кто нибудь знает ?
|
|
| |
Scarface_slv
|
Дата: Понедельник, 29.07.2013, 17:37:39 | Сообщение # 4 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Нет
|
|
| |
rasav
|
Дата: Понедельник, 29.07.2013, 18:04:24 | Сообщение # 5 |
|
Сообщений: 58
Репутация: 0 [ +/- ]
|
|
Никак нельзя сделать по другому ?
|
|
| |
Scarface_slv
|
Дата: Понедельник, 29.07.2013, 18:39:21 | Сообщение # 6 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Можно скорее всего. Я просто тебя не понимаю --------------------------------------------- Не пойму, так разве не подойдет? Код public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon) { static numerik = 0; if (buttons & IN_ATTACK) PrintToChat(client, "ЗАЖАЛ===>%d", ++numerik); else PrintToChat(client, "ОТПУСТИЛ===>%d", ++numerik); }
Сообщение отредактировал Scarface_slv - Понедельник, 29.07.2013, 18:41:51 |
|
| |
rasav
|
Дата: Понедельник, 29.07.2013, 20:23:41 | Сообщение # 7 |
|
Сообщений: 58
Репутация: 0 [ +/- ]
|
|
Цитата (Scarface_slv) Можно скорее всего. Я просто тебя не понимаю --------------------------------------------- Не пойму, так разве не подойдет? Код
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon) { static numerik = 0; if (buttons & IN_ATTACK) PrintToChat(client, "ЗАЖАЛ===>%d", ++numerik); else PrintToChat(client, "ОТПУСТИЛ===>%d", ++numerik); }
Пойдет
|
|
| |