кстати вопрос который меня мучает как создавать таймер на муй гуй?
писать timer[от 1 до 32764] не вариант есть какие нибудь идеи?

я посмотрел короче муй с помощью текста и знаете что он даже не доходит до 100) когда доходит до рандомное число от 1 до 100 примерно(могу ошибаться) он опять становится 2 так что писать таймер[от 1 до 100] вариант)
`
ОЖИДАНИЕ РЕКЛАМЫ...
27
в интернете посмотри. Парень ты не обучаем? Переходи на jass, timer+hastable
на муи вроде массивы, обычный перебор индексов 1-8192 в патче 1.26: у тебя должен быть счетчик, с которого будешь знать откуда начинать.
массивы
создаем таймер, запускаем таймер, прибавляем к счетчику +1
set timer[i] = CreateTimer()
call TimerStart(timer[i],false,....)
set i = i+1
далее при запуске триггера, функции проверяем циклом какой таймер GetExpiredTimer() запустил
local integer a = 0
loop
	exitwhen a>i
	if timer[a]==GetExpiredTimer() then
		//вы находите нужный индекс a, теперь делаете дела всякие, чистите удаляете и прочее
	endif
	set a = a + 1
endloop
22
Steal nerves, в 2 функции наоборот делай с наибольший уменшать с учетом если у 1 функции вырос и запоминает макс числа а там он находит и уменшает и переносит в новое место иначе у тя там в массиве появит не используемые ячейки. Я знаю что ты так умееш! Просто и новичку обьясни =)
27
Просто и новичку обьясни =)
вроде так, если правильно понял
local integer a = 0
local timer t
loop
exitwhen i>a
if timer[a]==GetExpiredTimer() then
вы находите нужный индекс a, теперь делаете дела всякие, чистите удаляете и прочее
если вы дальше не собираетесь использовать timer[a] удаляете сначала, чтобы в памяти не висел
потом смещаете структуру с "i" на "a" , в счетчике i-1 становится на 1 меньше и циклом меньше перебегать будешь
set timer[a] = timer[i]
set i=i-1
endif
set a = a - 1
endloop
set t = null
27
Ельнур, тебе ссылку скинул с примером
+в графических редакторах нет действия "создать таймер", только в JNGP. вызвать можно через действие CS: set t =CreateTimer(). и прежде всего таймер вызывает функцию. Вам придется все равно писать функцию вызова. Иначе, просто крепите событие запуска таймера на триггер, очень неудобная штука.
там на гуи легко (пишу по памяти, в редактор лень лезть):
Триггер инициализации: создаете счетчик Count = 0, объявляете массив timer[] и другие массивы для хранения
Триггер А: создать таймер timer[Count], храните все данные в массивах типа unit[Count], interger[Count] и пр, прикрепляется событие вызова этого таймера на триггер Б, запустить таймер, прибавляете счетчик set Count=Count+1.
Триггер Б:
Цикл А до Count
if timer[A]==GetExpiredTimer() then
достаете номер А, делаете что-то с данными, например убить unit[A] или нанести урон. Или отнять бонусы integer[A]. Удаляете таймер timer[A], если он вам не нужен.
set timer[A] = timer[Count]
не забудьте перенести данные unit[] integer[] и др с того массива на массив A
set unit[A] = unit[Count]
set integer[A] = integer[Count]
set Count=Count-1
endif
конец цикла
26
Ельнур, обязательно при создании переменной таймера укажи максимальный размер массива. Если не задашь, то timer[2] и далее изначально заданы не будут.
27
У меня такой вопрос, если одновременно запустить кучу таймеров нагрузка возрастет или никакой разницы? можно тогда было бы два таймера запускать +массивы времени заводить. один таймер от начала игры чтобы знать тек время, второй выбирать ближайшее время и запускать очереди. как только истекает ближайшее время, то запускать след.
24
обязательно при создании переменной таймера укажи максимальный размер массива. Если не задашь, то timer[2] и далее изначально заданы не будут.
Плохой совет, лучше создавать таймеры по мере необходимости - если заставить вар создавать несколько тысяч таймеров при старте карты, то можно очень быстро упереться в лимит операций в потоке.
26
Плохой совет, лучше создавать таймеры по мере необходимости
И как на GUI это сделать?
27
8gabriel8, я думаю он имел в виду, что вряд ли когда-нибудь картодел наделает 8192 таймера и упрется в лимит массива. Такое вряд ли осуществимо. По мере возможности.

Или как я предложил, использовать на всю игру два таймера +массивы времени. Мне вот интересно можно ли сделать чтоб чисто плавно игралось
28
prog, лучше вообще не создавать несколько тысяч таймеров
вар очень плохо переваривает большое количество таймеров
Steal nerves, а нафига 2?
можно 1 таймер с небольшим периодом
27
nvc123, это как 1 таймер с небольшим периодом
а нафига 2?
основной таймер - запускаем при старте игры на 999999 сек. от него можно узнать тек время (есть спец функции)
функции
истекшее время - сколько прошло времени с момента запуска
native TimerGetElapsed (timer whichTimer) returns real
оставшее время - сколько время осталось до истечения
native TimerGetRemaining (timer whichTimer) returns real
основное время - время, которое вводили при запуске таймера. можете узнать
native TimerGetTimeout (timer whichTimer) returns real
запускаемый таймер - работает по массивам времени. вот например: запустить через 20 сек,
set time[a]= тек время + 20 сек. 
берем пробегаем по массивам ищем ближайшее время. если массивы пусты, то запускаемый таймер отдыхает
18
TimerGetElapsed(), TimerGetRemaining() разве не создают погрешности?
26
Смотря что ты делаешь с этим таймером.
Обычно всё сводится к одному таймеру и набору данных.
Прежде всего таймер вызывает функцию? Нет, не обязательно, может вообще ничего не вызывать.
На гуи есть кс...
18
PT153:
Vlod, нет, а почему должны?
кат
13 секунд, погрешность 0.004
Когда пытался опираться на запущенный таймер, происходили странные вещи. Например, пусть таймер выдает время 10., запускаю новый таймер через 0.001. Проверяю время, ровно 10. Запускаю еще раз, время 10.002 или 003, то есть не возможно понять, прошло ли реально время.
Загруженные файлы
28
Vlod, выводишь через R2S? Если да, то юзай R2SW(r, 0, -1). Также учитывай особенности типа float.
R2S округляет до 3-х знаков после запятой, мой вызов выводит столько знаков, сколько есть, если больше 6, то округление до 6.
43
в жопу все таймеры, делай переменную целевую с массивами, и каждую сек отнимай по одному значению на каждом.
18
PT153, круто, спасибо за функцию. Держи карту. Там показано, что значения периодического таймера будут не совпадать со значениями нативных функций.
Загруженные файлы
28
Vlod, а что не так? Ошибка вроде в пределах погрешности.

Периодический таймер чуть медленнее не периодического, и быстрее не периодического, который сам себя перезапускает.

Также при работе с таймерами нужно помнить это.
18
если такое поведение таймеров считается нормальным, то у меня вопросов нет)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.