КАК сделать задержку?

можете помочь с создание просто задержки(sleep) через ваше api
пример каст 1 скилла
sleep
каст 2 скилла
?:(
 
  • Like
Реакции: Grifon903

aleksonspore

Subscriber: DotA 2
45
6
можете помочь с создание просто задержки(sleep) через ваше api
пример каст 1 скилла
sleep
каст 2 скилла
?:(
я думаю если ты что-то собираешься делать(разбираешься в коде), то можно посмотреть реализацию в скрипте на СФа
 

Ag4

Спортсмен
Команда форума
Scripter
Subscriber: DotA 2
1,337
1,490
Максимально топорный метод, но
Код:
function SleepCheck(sleeptime)
    if GlobalTimeSleep == nil then
        GlobalTimeSleep = os.clock()
        return true
    end
   
    if (GlobalTimeSleep + sleeptime <= os.clock())  then
        GlobalTimeSleep = os.clock()
        return true
    else
        return false
    end
end
Далее в OnUpdate() делаешь проверку
Код:
if not(SleepCheck(delay)) then return end
Но это если требуется использовать задержку ТОЛЬКО для ОДНОГО действия, ну или если разъясняться точнее, то только для ОДНОЙ операции в текущий момент времени можно делать "задержку"



Так же очевидно, что ты можешь реализовывать некую "очередь", и уже обрабатывать delay для этой "очереди"
 
  • Like
Реакции: Сасян
Так же очевидно, что ты можешь реализовывать некую "очередь", и уже обрабатывать delay для этой "очереди"



Можешь об этом механизме подробней написать?
Чтобы очередь организовать, я так понял нужно использовать третий аргумент queue в Ability.CastTarget, но достаточно просто его добавить или где то заранее объявить саму очередь?
 
107
65
Максимально топорный метод, но
Код:
function SleepCheck(sleeptime)
    if GlobalTimeSleep == nil then
        GlobalTimeSleep = os.clock()
        return true
    end
  
    if (GlobalTimeSleep + sleeptime <= os.clock())  then
        GlobalTimeSleep = os.clock()
        return true
    else
        return false
    end
end
Далее в OnUpdate() делаешь проверку
Код:
if not(SleepCheck(delay)) then return end
Но это если требуется использовать задержку ТОЛЬКО для ОДНОГО действия, ну или если разъясняться точнее, то только для ОДНОЙ операции в текущий момент времени можно делать "задержку"



Так же очевидно, что ты можешь реализовывать некую "очередь", и уже обрабатывать delay для этой "очереди"
Для этого есть короутины, но это не для автора, а такой метод имеет место быть, можно не очередь(стек) а просто завести массив и пихать туда что выполнять и когда, и проверять его раз в 100мс допустим.
 

Ag4

Спортсмен
Команда форума
Scripter
Subscriber: DotA 2
1,337
1,490
Для этого есть короутины, но это не для автора, а такой метод имеет место быть, можно не очередь(стек) а просто завести массив и пихать туда что выполнять и когда, и проверять его раз в 100мс допустим.
проверять достаточно и при каждом OnUpdate, это не слишком скажется на производительности, по идее... хотя это нужно тестировать, так и так, но если допустимы паузы в 100мс, то грех не воспользоваться
 
Последнее редактирование:
  • Like
Реакции: Сасян
107
65
проверять достаточно и при каждом OnUpdate, это не слишком скажется на производительности, по идее... хотя это нужно тестировать, так и так, но если допустимы паузы в 100мс, то грех не воспользоваться
только вызов ос функции немного дороже чем гейм тайм, если там действительно WinAPI скрыт или что-то подобное.
 
При это по хорошему правильно, создать некий список с временем и ФУНКЦИЕЙ вторым параметром, и просто в апдейте вызывать эту фукнцию, в теории даже лямбду можно пихать туда.