Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

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

  • Страница 1 из 1
  • 1
Узнать значения таймаре
«SeReGa»☆ Дата: Понедельник, 23.06.2014, 14:42:19 | Сообщение # 1
Сообщений: 395
Репутация: 37 [ +/- ]
Здравствуйте при создании 1 таймера на x секунд, я создаю повторяющийся таймер на 1 секунду для того чтобы отследить таймер под номером 1

как отследить таймер под номером 1

пример

Код


   new Handle:g_hTimers[MAXPLAYERS+1];
   new Handle:g_FTimerFun[MAXPLAYERS+1] = {INVALID_HANDLE,...};
g_hTimers[client] = CreateTimer(x, Timer_f, client, TIMER_FLAG_NO_MAPCHANGE);//Создаю таймер на x секунд (если что x больше чем 1 секунда)
g_FTimerFun[client] = CreateTimer(1.0,Timer_Fun,client,TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);//Тут создаю повторяющийся таймер на 1 с

public Action:Timer_Fun(Handle:timer,any:client)
{
    if(g_hTimers[client] != INVALID_HANDLE)
    {
     if(g_FTimerFun[client]==INVALID_HANDLE)
     {
      KillTimer(g_FTimerFun[client]);
               g_FTimerFun[client]=INVALID_HANDLE;
     }
     else    
     {
      PrintHintText(client,"До окончания таймера  %f секунд",g_hTimers[client]);
      return Plugin_Continue;
     }
    }
    g_FTimerFun[client]=INVALID_HANDLE;
       return Plugin_Stop;
}

public Action:Timer_f(Handle:hTimer, any:client)
{
           PrintToChat(client,"таймер закончился");
    g_hTimers[client] = INVALID_HANDLE;
       
    return Plugin_Stop;
}


ничего не получается.((


Сообщение отредактировал «SeReGa»☆ - Понедельник, 23.06.2014, 14:43:43
 
horr0r Дата: Понедельник, 23.06.2014, 18:14:25 | Сообщение # 2
Сообщений: 149
Репутация: 40 [ +/- ]
Лучше сделай один таймер для отсчета.
Код

new timercount[MAXPLAYERS+1]; //ко всем переменным

timercount[client] = 30; //кол-во секунд
g_FTimerFun[client] = CreateTimer(1.0,Timer_Fun,client,TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);//Тут создаю повторяющийся таймер на 1 с    

public Action:Timer_Fun(Handle:timer,any:client)    
{
    if(timercount[client] <= 0) return KillTimer(g_FTimerFun[client]);
    timercount[client]--;
    PrintHintText(client,"До окончания таймера %i секунд",timercount[client]);    
    return Plugin_Stop;    
}


Сообщение отредактировал horr0r - Понедельник, 23.06.2014, 18:19:46
 
«SeReGa»☆ Дата: Четверг, 26.06.2014, 16:22:36 | Сообщение # 3
Сообщений: 395
Репутация: 37 [ +/- ]
Исправте пожалуйста)
Код
#include <sourcemod>

new timercount[MAXPLAYERS+1]; //ко всем переменным  
new Handle:g_FTimerFun[MAXPLAYERS+1];  

public OnPluginStart()
{
  RegConsoleCmd("test",T);
}

public Action:T(client, args)
{
  if (client > 0 && args < 1)
  {
   TSrart(client);
  }
  return Plugin_Handled;
}

TSrart(client)
{
  new Float:x=10.5;
  timercount[client] = x; //кол-во секунд/////ERROR: warning 213: tag mismatch
  g_FTimerFun[client] = CreateTimer(1.0, Timer_Fun, client, TIMER_REPEAT);//Тут создаю повторяющийся таймер на 1 с  
}

public Action:Timer_Fun(Handle:timer,any:client)     
{  
  if(timercount[client] <= 0)
  {
   return KillTimer(g_FTimerFun[client]);/////ERROR: warning 213: tag mismatch
  }
  timercount[client]--;  
  PrintHintText(client,"До окончания таймера %i секунд",timercount[client]);    
  return Plugin_Stop;     
}

Добавлено (26.06.2014, 16:22:36)
---------------------------------------------
и кол-во секунд у меня состоит с Float.

как быть??

 
Darkeneez Дата: Четверг, 26.06.2014, 16:42:01 | Сообщение # 4
Сообщений: 221
Репутация: 18 [ +/- ]
new Float:timercount[MAXPLAYERS+1]; //ко всем переменным


Сообщение отредактировал Darkeneez - Четверг, 26.06.2014, 16:42:09
 
«SeReGa»☆ Дата: Четверг, 26.06.2014, 17:55:11 | Сообщение # 5
Сообщений: 395
Репутация: 37 [ +/- ]
Поправьте пожалуйсто если есть что

Код
#include <sourcemod>

new Float:timercount[MAXPLAYERS+1]; //ко всем переменным
new Handle:g_FTimerFun[MAXPLAYERS+1] = {INVALID_HANDLE,...};  

public OnPluginStart()
{
  RegConsoleCmd("test",T);
}

public Action:T(client, args)
{
  if (client > 0 && args < 1)
  {
   TSrart(client);
  }
  return Plugin_Handled;
}

TSrart(client)
{
  if(g_FTimerFun[client]!=INVALID_HANDLE)
     {
   KillTimer(g_FTimerFun[client]);
   g_FTimerFun[client]=INVALID_HANDLE;
  }
  new x = GetRandomInt(1,4);
  switch (x)//кол-во секунд
  {
   case 1:
   {
    timercount[client] = 5.0;
   }
   case 2:
   {
    timercount[client] = 10.0;
   }
   case 3:
   {
    timercount[client] = 15.0;
   }
   case 4:
   {
    timercount[client] = 10.5;
   }
  }
  g_FTimerFun[client] = CreateTimer(1.0, Timer_Fun, client, TIMER_REPEAT);//Тут создаю повторяющийся таймер на 1 с  
}

public OnClientDisconnect(client)
{
  if(g_FTimerFun[client]!=INVALID_HANDLE)
  {
   KillTimer(g_FTimerFun[client]);
   g_FTimerFun[client]=INVALID_HANDLE;
  }
}

public Action:Timer_Fun(Handle:timer,any:client)     
{  
  if(timercount[client] <= 0)
  {
   KillTimer(g_FTimerFun[client]);
   g_FTimerFun[client]=INVALID_HANDLE;
   PrintToChatAll("Timer is stopped.")
   PrintHintText(client,"Таймер закончился");
   return Plugin_Stop;
  }
  else
  {
   timercount[client]--;  
   PrintHintText(client,"До окончания таймера %f секунд",timercount[client]);     
   return Plugin_Continue;
  }   
}


и ещё вопрос

всегда пишет До окончания таймера 4.000000 секунд

как сделать чтоб писало До окончания таймера 4.00 секунд
 
BarD Дата: Четверг, 26.06.2014, 18:40:24 | Сообщение # 6
Сообщений: 943
Репутация: 137 [ +/- ]
Код
PrintHintText(client, "До окончания таймера %0.1f секунд", timercount[client]);


Сообщение отредактировал BarD - Четверг, 26.06.2014, 18:40:53
 
«SeReGa»☆ Дата: Четверг, 26.06.2014, 19:01:59 | Сообщение # 7
Сообщений: 395
Репутация: 37 [ +/- ]
Благодарю)
 
horr0r Дата: Четверг, 26.06.2014, 19:25:54 | Сообщение # 8
Сообщений: 149
Репутация: 40 [ +/- ]
Darkeneez, а это зачем?
 
Darkeneez Дата: Пятница, 27.06.2014, 05:25:44 | Сообщение # 9
Сообщений: 221
Репутация: 18 [ +/- ]
Цитата horr0r ()
Darkeneez, а это зачем?


Он к этой переменной присваивал значение float, у него выдавало ошибку 213

Цитата «SeReGa»☆ ()
Исправте пожалуйста)
Код
Код
#include <sourcemod>  

new timercount[MAXPLAYERS+1]; //ко всем переменным   
new Handle:g_FTimerFun[MAXPLAYERS+1];   

public OnPluginStart()  
{  
   RegConsoleCmd("test",T);  
}  

public Action:T(client, args)  
{  
   if (client > 0 && args < 1)  
   {  
    TSrart(client);  
   }  
   return Plugin_Handled;  
}  

TSrart(client)  
{  
   new Float:x=10.5;  
   timercount[client] = x; //кол-во секунд/////ERROR: warning 213: tag mismatch  
   g_FTimerFun[client] = CreateTimer(1.0, Timer_Fun, client, TIMER_REPEAT);//Тут создаю повторяющийся таймер на 1 с   
}

 
horr0r Дата: Суббота, 28.06.2014, 08:30:31 | Сообщение # 10
Сообщений: 149
Репутация: 40 [ +/- ]
Darkeneez, дак зачем ты ставишь тип флот у этой переменной?
Код
new Float:x=10.5;

У меня все правильно было, я проверял, не обязательно это делать. Если только ты хочешь сделать интервал меньше одной секунды.
Просто он немного неправильно воспользовался).
Вот код:
Код

#include <sourcemod>  

new timercount[MAXPLAYERS+1]; //ко всем переменным  
new Handle:g_FTimerFun[MAXPLAYERS+1];  

public OnPluginStart()  
{  
  RegConsoleCmd("test",T);  
}  

public Action:T(client, args)  
{  
  if (client > 0 && args < 1)  
  {   
   TSrart(client);  
  }  
  return Plugin_Handled;  
}  

TSrart(client)
{  
  timercount[client] = 30;
  g_FTimerFun[client] = CreateTimer(1.0, Timer_Fun, client, TIMER_REPEAT);//Тут создаю повторяющийся таймер на 1 с  
}  

public Action:Timer_Fun(Handle:timer,any:client)   
{  
  if(timercount[client] <= 0) return KillTimer(g_FTimerFun[client]);
  timercount[client]--;  
  PrintHintText(client,"До окончания таймера %i секунд",timercount[client]);  
  return Plugin_Stop;
}


Сообщение отредактировал horr0r - Суббота, 28.06.2014, 08:35:05
 
«SeReGa»☆ Дата: Суббота, 28.06.2014, 21:05:33 | Сообщение # 11
Сообщений: 395
Репутация: 37 [ +/- ]


B.sp(22) : warning 213: tag mismatch
B.sp(28) : warning 213: tag mismatch
Размер заголовка: 1956 байт
Размер кода: 2280 байт
Размер данных: 1752 байт
Стек/Размер кучи: 16384 байт; Всего требования: 22372 байт

Наверное я неправильно компилирую


Сообщение отредактировал «SeReGa»☆ - Суббота, 28.06.2014, 21:09:08
 
horr0r Дата: Суббота, 28.06.2014, 21:32:36 | Сообщение # 12
Сообщений: 149
Репутация: 40 [ +/- ]
«SeReGa»☆, все ты правильно компилируешь, просто ты используешь нецелое число.
Код

timercount[client] = 9.5;    
 
«SeReGa»☆ Дата: Воскресенье, 29.06.2014, 04:13:55 | Сообщение # 13
Сообщений: 395
Репутация: 37 [ +/- ]
Вот потому и
 
PlaN4ik Дата: Воскресенье, 06.07.2014, 19:18:51 | Сообщение # 14
Сообщений: 33
Репутация: -7 [ +/- ]
Если не трудно подскажите как сделать сохранение данных таймера в sql ? Чтобы игрок после перезахода опять его не использовал, хотелось бы попробовать на мг респавн сделать. 1 раз в %d секунд можно использовать, бонус возрождение.
 
  • Страница 1 из 1
  • 1
Поиск: