Как при помощи таймера сделать обратный отсчет времени? Прошу желательно ответить кодом
Как при помощи таймера сделать обратный отсчет времени? Прошу желательно ответить кодом
Это простенький пример. Думаю дальше ты сам сможешь понять что куда. Удачи)PHP код:
new final_count_timer;
new final_count = 10; // Задаем число отсчета
//Можно создать для каждого игрока добавив [MAX_PLAYERS] и в дальнейшем используя [playerid]
// new final_count_timer[MAX_PLAYERS];
// final_count_timer[playerid] = SetTimer("Revers", 1000, false);
public OnGameModeInit()
{
print("Запуск таймера...");
final_count_timer = SetTimer("Revers", 1000, false); // Устанавливает таймер на 1000 миллисекунд (1 секунда)
}
public Revers()//Сам каллбек таймера
{
if(final_count > 0) //Условие проверки переменной, что бы у нас счет не уходил в минус.
{
final_count--; //Отнимаем -1;
printf("Осталось %i секунд",final_count);
}
else
{
final_count = 10;
KillTimer(final_count_timer); //Убиваем таймер.
}
}
Последний раз редактировалось qwezert; 26.12.2016 в 13:05.
pustomerzha (26.12.2016)
Если ты хотел делать таймер с повторением, то забыл в SetTimer указать "true" =)
Можно так же обойтись и средствами одного таймера, передавая все нужные данные в качестве параметров (но я крайне сомневаюсь, что это вариант лучше того, что дал ты. Просто как пример использования SetTimerEx).
PHP код:
public OnGameModeInit()
{
print("Запуск таймера...");
SetTimerEx("Revers", 1000, false, "d", 10);
/*
Устанавливает таймер на 1000 миллисекунд (1 секунда)
И указываем на то, сколько повторений совершит таймер
(в "10" включается и последнее повторение, которое приведёт к вызову "print("Условие выполнено\n\n");"
То есть, в консоли отсчёт начнётся с 9 и окончится на 1, а после произойдёт вызов кода, что я дал выше).
*/
}
forward Revers(final_count);
public Revers(final_count)
{
if(--final_count > 0)
{
printf("Осталось %i секунд", final_count);
SetTimerEx("Revers", 1000, false, "d", final_count);
}
else
{
print("Условие выполнено\n\n");
}
return 1;
}
Соответственно, так можно передавать не только ID, но и любую другую нужную информацию, а новый таймер будет априори "индивидуальным" (запустите 2 таймера и они оба будут работать со своими значениями).
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
pustomerzha (26.12.2016) qwezert (26.12.2016)
Да с false чет я лажанул :) Наши варианты впринципе одинаковые, тут уже кому как нравится, единственное что в моем варианте отсчет начнется с 10 а в твоем с 9.
Мне вот даже интересно стало, если таймер нужно запустить для определенного кол-ва игроков, то получается в сам каллбек нужно будет передать массив нужных игроков и через for прогонять и для каждого игрока отнимать 1?
Или можно как то проще сделать?
10 поменяй на 11 и отсчёт начнётся с 10 :)
Если для нескольких игроков один таймер, то используешь первый вариант и в нём цикл, в котором уже нужным игрокам и отображаешь информацию.
Если же для 10 игроков свой таймер (например, антифлуд), то второй вариант (каждому игроку свой таймер)
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
qwezert (26.12.2016)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)