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

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

  • Страница 1 из 1
  • 1
Проблема с таймером
IceMeN Дата: Суббота, 26.05.2012, 14:46:38 | Сообщение # 1
Сообщений: 47
Репутация: 5 [ +/- ]
_wS_, помоги пожалуйста!
Проблема возникла с таймером.

Хочу сделать что типо отсчета... Так вот раунд начинается и через 20 секунд начинается отсчет.
Но не работает. Уверен, что ошибка глупая и легконаходимая, но я не нашел)

Вот код:
Code

#pragma semicolon 1
#include <sourcemod>
#include <sdktools>

new Handle:StartMusic_Timer;
new Handle:MusicPlay_Timer;

public OnPluginStart()
{
  HookEvent("round_start", Round_Start, EventHookMode_PostNoCopy);
  HookEvent("round_end", Round_End, EventHookMode_PostNoCopy);
   
  decl String:buffer[256];
  new Handle:file = OpenFile("cfg/ZombieSound/ZombieSound.cfg", "r");
  while(ReadFileLine(file, buffer, sizeof(buffer)))
  {
   new len = strlen(buffer);
   if(buffer[len-1] == '\n')
       buffer[--len] = '\0';
        
   if(FileExists(buffer))
   {
    AddFileToDownloadsTable(buffer);
   }
    
   if(IsEndOfFile(file))
    break;
  }  
}
public OnConfigsExecuted()
{
  PrecacheSound("ZombieSound/10.wav", true);
  PrecacheSound("ZombieSound/9.wav", true);
  PrecacheSound("ZombieSound/8.wav", true);
  PrecacheSound("ZombieSound/7.wav", true);
  PrecacheSound("ZombieSound/6.wav", true);
  PrecacheSound("ZombieSound/5.wav", true);
  PrecacheSound("ZombieSound/4.wav", true);
  PrecacheSound("ZombieSound/3.wav", true);
  PrecacheSound("ZombieSound/2.wav", true);
  PrecacheSound("ZombieSound/1.wav", true);
}
public Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
  StartMusic_Timer = CreateTimer(19.0, StartMusic);
}
public Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
  if(StartMusic_Timer != INVALID_HANDLE)
  {
   KillTimer(StartMusic_Timer);
   StartMusic_Timer = INVALID_HANDLE;
  }
  if(MusicPlay_Timer != INVALID_HANDLE)
  {
   KillTimer(MusicPlay_Timer);
   MusicPlay_Timer = INVALID_HANDLE;
  }
}
public Action:StartMusic(Handle:timer)
{
  MusicPlay_Timer = CreateTimer(1.0, MusicPlay, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
  StartMusic_Timer = INVALID_HANDLE;
}
public Action:MusicPlay(Handle:timer)
{
  static x = 0;
     if (++x < 11)
     {
         if(x == 1)
   {
    EmitSoundToAll("ZombieSound/10.wav");
   }
   if(x == 2)
   {
    EmitSoundToAll("ZombieSound/9.wav");
   }
   if(x == 3)
   {
    EmitSoundToAll("ZombieSound/8.wav");
   }
   if(x == 4)
   {
    EmitSoundToAll("ZombieSound/7.wav");
   }
   if(x == 5)
   {
    EmitSoundToAll("ZombieSound/6.wav");
   }
   if(x == 6)
   {
    EmitSoundToAll("ZombieSound/5.wav");
   }
   if(x == 7)
   {
    EmitSoundToAll("ZombieSound/4.wav");
   }
   if(x == 8)
   {
    EmitSoundToAll("ZombieSound/3.wav");
   }
   if(x == 9)
   {
    EmitSoundToAll("ZombieSound/2.wav");
   }
   if(x == 10)
   {
    EmitSoundToAll("ZombieSound/1.wav");
   }
         return Plugin_Continue;
     }
  MusicPlay_Timer = INVALID_HANDLE;
     return Plugin_Stop;  
}
 
_wS_ Дата: Суббота, 26.05.2012, 15:00:21 | Сообщение # 2
MusicPlay_Timer лишний, проигрывай звук прямо в 'public Action:StartMusic'
В 'Round_Start' должно быть:

Code
if (StartMusic_Timer != INVALID_HANDLE) KillTimer(StartMusic_Timer);
StartMusic_Timer = CreateTimer(19.0, StartMusic);

Да и другой код лишний есть, зачем усложняешь простую задачу.
 
IceMeN Дата: Суббота, 26.05.2012, 15:21:51 | Сообщение # 3
Сообщений: 47
Репутация: 5 [ +/- ]
Ясно. Спасибо...
Буду пробывать...

Добавлено (26.05.2012, 15:21:51)
---------------------------------------------
А вот здесь где ошибка?

Code

#pragma semicolon 1
#include <sourcemod>
#include <sdktools>

new Handle:StartMusic_Timer;

public Plugin:myinfo =
{
  name = "ZombieSound",
  author = "IceMeN",
  version = "1.0.0",
  url = "http://icemenblog.ru/"
};
public OnPluginStart()
{
  HookEvent("round_start", Round_Start, EventHookMode_PostNoCopy);
  HookEvent("round_end", Round_End, EventHookMode_PostNoCopy);
   
  decl String:buffer[256];
  new Handle:file = OpenFile("cfg/ZombieSound/ZombieSound.cfg", "r");
  while(ReadFileLine(file, buffer, sizeof(buffer)))
  {
   new len = strlen(buffer);
   if(buffer[len-1] == '\n')
       buffer[--len] = '\0';
        
   if(FileExists(buffer))
   {
    AddFileToDownloadsTable(buffer);
   }
    
   if(IsEndOfFile(file))
    break;
  }  
}
public OnConfigsExecuted()
{
  PrecacheSound("ZombieSound/10.wav", true);
  PrecacheSound("ZombieSound/9.wav", true);
  PrecacheSound("ZombieSound/8.wav", true);
  PrecacheSound("ZombieSound/7.wav", true);
  PrecacheSound("ZombieSound/6.wav", true);
  PrecacheSound("ZombieSound/5.wav", true);
  PrecacheSound("ZombieSound/4.wav", true);
  PrecacheSound("ZombieSound/3.wav", true);
  PrecacheSound("ZombieSound/2.wav", true);
  PrecacheSound("ZombieSound/1.wav", true);
}
public Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
  if (StartMusic_Timer != INVALID_HANDLE)
   KillTimer(StartMusic_Timer);
  StartMusic_Timer = CreateTimer(19.0, StartMusic, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
  PrintCenterTextAll("До появления зомби 30 секунд");
}
public Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
  if(StartMusic_Timer != INVALID_HANDLE)
  {
   KillTimer(StartMusic_Timer);
   StartMusic_Timer = INVALID_HANDLE;
  }
}
public Action:StartMusic(Handle:timer)
{
  static x = 0;
     if (++x < 31)
     {
    
         if(x == 20)
   {
    EmitSoundToAll("ZombieSound/10.wav");
    PrintCenterTextAll("До появления зомби 10 секунд");
   }
   else if(x == 21)
   {
    EmitSoundToAll("ZombieSound/9.wav");
    PrintCenterTextAll("До появления зомби 9 секунд");
   }
   else if(x == 22)
   {
    EmitSoundToAll("ZombieSound/8.wav");
    PrintCenterTextAll("До появления зомби 8 секунд");
   }
   else if(x == 23)
   {
    EmitSoundToAll("ZombieSound/7.wav");
    PrintCenterTextAll("До появления зомби 7 секунд");
   }
   else if(x == 24)
   {
    EmitSoundToAll("ZombieSound/6.wav");
    PrintCenterTextAll("До появления зомби 6 секунд");
   }
   else if(x == 25)
   {
    EmitSoundToAll("ZombieSound/5.wav");
    PrintCenterTextAll("До появления зомби 5 секунд");
   }
   else if(x == 26)
   {
    EmitSoundToAll("ZombieSound/4.wav");
    PrintCenterTextAll("До появления зомби 4 секунд");
   }
   else if(x == 27)
   {
    EmitSoundToAll("ZombieSound/3.wav");
    PrintCenterTextAll("До появления зомби 3 секунд");
   }
   else if(x == 28)
   {
    EmitSoundToAll("ZombieSound/2.wav");
    PrintCenterTextAll("До появления зомби 2 секунд");
   }
   else if(x == 29)
   {
    EmitSoundToAll("ZombieSound/1.wav");
    PrintCenterTextAll("До появления зомби 1 секунд");
   }
   else
   {
    PrintCenterTextAll("До появления зомби %d секунд", 30 - x);
   }
         return Plugin_Continue;
     }
     return Plugin_Stop;  
}
 
Scarface_slv Дата: Воскресенье, 27.05.2012, 17:59:29 | Сообщение # 4
Сообщений: 737
Репутация: 61 [ +/- ]
так должно работать...

Гости не могут скачивать файлы
 
Scarface_slv Дата: Воскресенье, 27.05.2012, 18:10:20 | Сообщение # 5
Сообщений: 737
Репутация: 61 [ +/- ]
ой не правильно...

Гости не могут скачивать файлы
 
IceMeN Дата: Воскресенье, 27.05.2012, 18:45:36 | Сообщение # 6
Сообщений: 47
Репутация: 5 [ +/- ]
Спасибо, Scarface_slv.
Но я уже сам разобрался...
Что то забыл здесь отписать...

Еще раз спасибо за помощь!

Добавлено (27.05.2012, 18:45:36)
---------------------------------------------
Кстати сейчас посмотрел твой пример...
Зачем в конце раунда делать х = 0 ?
Ведь все равно в начале раунда ты делаешь х = 30 ?

 
Scarface_slv Дата: Воскресенье, 27.05.2012, 19:41:11 | Сообщение # 7
Сообщений: 737
Репутация: 61 [ +/- ]
незнай) я просто спешил=)
 
rus123 Дата: Четверг, 31.07.2014, 19:31:00 | Сообщение # 8
Сообщений: 7
Репутация: 0 [ +/- ]
Хочу сделать чтобы после 10 9 8 7 6 5 4 3 2 1 играл звук 0
Как бы отсчет прошел и звук появления зомбака на всю карту будет четко но никак не могу понять(
Доступно только для пользователей


Сообщение отредактировал rus123 - Пятница, 01.08.2014, 09:52:10
 
Sallcom Дата: Четверг, 25.09.2014, 00:36:31 | Сообщение # 9
Сообщений: 205
Репутация: 31 [ +/- ]
i++ -> сначала действие, потом i = i + 1.
++i -> сначала i = i + 1, потом действие.

Код

#include <sourcemod>  
#include <sdktools>  

new count;  

public OnPluginStart(){  
     HookEvent("round_start", Event_RoundStart);  
     HookEvent("round_end", Event_RoundEnd);  
}  

public OnMapStart(){  
     PrecacheSound("eXtreme/z10.wav", true);  
     PrecacheSound("eXtreme/z9.wav", true);  
     PrecacheSound("eXtreme/z8.wav", true);  
     PrecacheSound("eXtreme/z7.wav", true);  
     PrecacheSound("eXtreme/z6.wav", true);  
     PrecacheSound("eXtreme/z5.wav", true);  
     PrecacheSound("eXtreme/z4.wav", true);  
     PrecacheSound("eXtreme/z3.wav", true);  
     PrecacheSound("eXtreme/z2.wav", true);  
     PrecacheSound("eXtreme/z1.wav", true);  
     PrecacheSound("eXtreme/z0.wav", true);  
}  

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast){
     count = 29;
     CreateTimer(1.0, Timer_Music, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);   
}  

public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)  
     count = -1;

public Action:Timer_Music(Handle:timer){  
     if(count == -1)
         return Plugin_Stop;  
      
     decl String:sValue[16];
     if(count-- <= 10){
         Format(sValue, sizeof(sValue), "eXtreme/z%d.wav", count);  
         EmitSoundToAll(sValue);
     }
          
     return Plugin_Continue;
}


Сообщение отредактировал Sallmap - Четверг, 25.09.2014, 01:00:57
 
  • Страница 1 из 1
  • 1
Поиск: