Всем привет. Вопрос такой: кто может разъяснить как пользоваться одним таймеров, вместо нескольких в разных тригерах, и действительно ли это хорошо?

Принятый ответ

разъяснения
  1. берете таймер + хэндл и хэш-таблица (это простой пример). И можно массивы перебирать каждый раз (есть еще XAT на cjass).
  2. в чем суть этого метода? берете при старте игры запускаете один таймер на все.
  3. при запуске триггера или функции сохраняете текущее время этого таймера в хэше или переменную, при повторном запуске сверяете текущее время и прошедшее (сохраненное) время
есть такие команды как
TimerGetRemaining
TimerGetElapsed
TimerGetTimeout
из них можно вытащить текущее, сколько прошло, и заданное время
  1. таймер не обязательно удалять
вообще-то когда много таймеров работает это плохо, проседает. Лучше когда таймеров меньше было. Если у вас в течении игры работает 50 таймеров, не лучше ли сделать несколько?
есть еще баги с таймером xgm.guru/p/wc3/timer-exploit
смотри примеры, что скинул
насчет того, как пользоваться одним таймером в разных триггерах. Это в зависимости, того, что вы хотели сделать и как.
Загруженные файлы
0
19
7 лет назад
0
Похожие вопросы:

ответ
конечно
пруф
а вообще можно вспомнить кампанию людей - там есть миссия по защите Стратхольма, или как та деревня называлась - и там есть таймер, который нормально сохраняется
ответ
Он вроде как спрашивает, не остается ли что-либо в памяти игры или на карте. По-моему ничего не остается, удаляя юнита таким образом мы его навсегда выбрасываем.
ответ
Друга зачем? Нинада, так толку не будет...
Просто используешь Inject main (vjass) или Define (Cjass) чтобы убрать 1 только строчку из main
//***************************************************************************
//*
//*  Map Configuration
//*
//***************************************************************************

//***************************************************************************
//*
//*  Main Initialization
//*
//***************************************************************************

//===========================================================================
function main takes nothing returns nothing
    call SetCameraBounds(- 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), - 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM))
    call SetDayNightModels("Environment\\DNC\\DNCLordaeron\\DNCLordaeronTerrain\\DNCLordaeronTerrain.mdl", "Environment\\DNC\\DNCLordaeron\\DNCLordaeronUnit\\DNCLordaeronUnit.mdl")
    call NewSoundEnvironment("Default")
    call SetAmbientDaySound("SunkenRuinsDay")
    call SetAmbientNightSound("SunkenRuinsNight")
    call SetMapMusic("Music", true, 0)
    call InitBlizzard() // вот и все, удалим и не будет бж объектов.


    call InitGlobals()
    call InitCustomTriggers()
    call RunInitializationTriggers()

endfunction
Совсем забыл, функция main генерируется при сохранении карты в редакторе
Без cjass или vjass придется выколупывать war3map.j (код карты) файл из карты и править ручками в блокнотике, геморойно до безобразия, за то ненужен c\vjass и его знания.
ответ
создаём юнита
даём юниту таймер
и проверяем что с ним стало
офигиваем от того что выяснили это сами
и не задаём тупых вопросов
на 4 дня пропал и уже 69 тупых вопросов
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.

1
27
7 лет назад
Отредактирован MpW
1
разъяснения
  1. берете таймер + хэндл и хэш-таблица (это простой пример). И можно массивы перебирать каждый раз (есть еще XAT на cjass).
  2. в чем суть этого метода? берете при старте игры запускаете один таймер на все.
  3. при запуске триггера или функции сохраняете текущее время этого таймера в хэше или переменную, при повторном запуске сверяете текущее время и прошедшее (сохраненное) время
есть такие команды как
TimerGetRemaining
TimerGetElapsed
TimerGetTimeout
из них можно вытащить текущее, сколько прошло, и заданное время
  1. таймер не обязательно удалять
вообще-то когда много таймеров работает это плохо, проседает. Лучше когда таймеров меньше было. Если у вас в течении игры работает 50 таймеров, не лучше ли сделать несколько?
есть еще баги с таймером xgm.guru/p/wc3/timer-exploit
смотри примеры, что скинул
насчет того, как пользоваться одним таймером в разных триггерах. Это в зависимости, того, что вы хотели сделать и как.
Загруженные файлы
Принятый ответ
0
10
7 лет назад
Отредактирован ImbaStyle
0
Steal nerves:
  1. берете таймер + хэндл и хэш-таблица (это простой пример). И можно массивы перебирать каждый раз (есть еще XAT на cjass).
  2. в чем суть этого метода? берете при старте игры запускаете один таймер на все.
  3. при запуске триггера или функции сохраняете текущее время этого таймера, при повторном запуске сверяете текущее время и прошедшее (сохраненное) время
  4. таймер не обязательно удалять
вообще-то когда много таймеров работает это плохо, проседает. Лучше когда таймеров меньше было. Если у вас в течении игры работает 50 таймеров, не лучше ли сделать несколько?
есть еще баги с таймером xgm.guru/p/wc3/timer-exploit
смотри примеры, что скинул
насчет того, как пользоваться одним таймером в разных триггерах. Это в зависимости, того, что вы хотели сделать и как.
ну впринципе понял, хеш лучше не юзать, но к сожалению не шарю в структурах=\ правда этот таймер незапаузишь, что думаю плохо
0
27
7 лет назад
Отредактирован MpW
0
ImbaStyle, паузу тоже можно сделать) это надо продумать. можно не паузить таймер, а сохранять boolean а где-то в твоем коде доставать эту логическую и проверять. и тому подобное
и не обязательно при старте, можно от любого момента времени.
р
Чтобы оставить комментарий, пожалуйста, войдите на сайт.