Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Зажатие кнопки use_button (Отследить зажатие)
Зажатие кнопки 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
Сообщений: 738
Репутация: 61 [ +/- ]
Нет
 
rasav Дата: Понедельник, 29.07.2013, 18:04:24 | Сообщение # 5
Сообщений: 58
Репутация: 0 [ +/- ]
Цитата (Scarface_slv)
Нет

Никак нельзя сделать по другому ?
 
Scarface_slv Дата: Понедельник, 29.07.2013, 18:39:21 | Сообщение # 6
Сообщений: 738
Репутация: 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);
}


Пойдет klas
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Зажатие кнопки use_button (Отследить зажатие)
  • Страница 1 из 1
  • 1
Поиск: