Уже пять лет задаю вопросы и ответы здесь, как моя личная записная книжка по редактору варика. Спасибо вам, люди)

Все постоянно ругают вейт, даже как то кто то кидал мне наработку, чтобы вейт не глючил, только наработка не работает.
Все твердят заменять таймером, как я понял, это то же самый таймер что только на локалках и без окна? Если вас хватит скиньте пример такого таймера, если возможно без использования хэш таблицы( я не понимаю ее смысл)
Буду заменять вейты))

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

SсRealm:
То есть я пишу этот код и вейты больше не глючат?
Нет)) это так не работает.
Если ты хотя бы немного понимаешь как работает Jass, то просто используй это вместо вэйта.
Вот так. В данном случае 10. это 10 секунд.

SсRealm:
но если вейты так глючны, то почему бы просто не сделать отчет на локалках или глобалках?
Ответ на твой вопрос - таймер.
Хочешь записывай его в локалку, а потом ищи что и с кем делать (на это надо записать).
Хочешь записывай его в глобалку, а потом ... точно так же ищи что и с кем делать.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
3 года назад
Отредактирован scopterectus
0
Extremator, разве функция, которую ты скинул не есть стандартный гуишный вейт? В гуи не используется TriggerSleepAction( ), там используется BJ-шная функция PolledWait( ):
globals
    constant real      bj_POLLED_WAIT_INTERVAL          =  0.10
    constant real      bj_POLLED_WAIT_SKIP_THRESHOLD    =  2.00
endglobals

function PolledWait takes real duration returns nothing
    local timer t
    local real  timeRemaining

    if (duration > 0) then
        set t = CreateTimer()
        call TimerStart(t, duration, false, null)
        loop
            set timeRemaining = TimerGetRemaining(t)
            exitwhen timeRemaining <= 0

            // If we have a bit of time left, skip past 10% of the remaining
            // duration instead of checking every interval, to minimize the
            // polling on long waits.
            if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then
                call TriggerSleepAction(0.1 * timeRemaining)
            else
                call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
            endif
        endloop
        call DestroyTimer(t)
    endif
endfunction
UPD: В гуи, окзывается, есть два вида вейта: TriggerSleepAction и PolledWait. Находятся прямо друг за дружкой.
0
26
3 года назад
0
ScopteRectuS:
Extremator, разве функция, которую ты скинул не есть стандартный гуишный вейт?
Кэп?
0
21
3 года назад
0
По поводу вэйта - если уж не нравится стандартный, то как вариант, сварганить и юзать что-то на подобии этого:
так ты и сварганил стандартный, который уже есть?
0
26
3 года назад
0
И ты продолжаешь спрашивать?
- Вот тебе красный.
- Это красный?
- У него цвет как у красного.
- Ну так это красный?
0
20
3 года назад
0
WAIT_EX( 20. )
Что же ты раньше то молчал! А я голову ломаю! Все заработало!
0
32
3 года назад
0
21 год, вейты, ещё и polled wait кастом юзают, зачем?
Веты сделаны не для того что вы бы в спеллах задержки или переодические действия делали, они нужны для киниматиков и синхронизации геймкеша.
Вейт остонавливливает поток, поэтому данные GetTriggerxxx нативка монуть быть уже некооректны, не говоря о переменных глобальных. Далее, вспомним известные карты и баги, с этим самым говном - сразу поймёте, почему так делать ненужно.
Лютые костыли которые тут скинули, ещё и по производительности в разы ниже чем просто создать таймер и запустить его, передав в аргументы функцию которую он запустит по истечению. И кстати да, на гуи тоже много где можно нормально юзать таймеры, без этого говна и костылей., но кто бы читал статьи и че-то там пытался сам сделать...
0
32
3 года назад
0
quq_CCCP, это просто такой трешак, что рука-лицо X 500. Вот она - высшая точка развития игры с 18 летней историей и наработками за тот же период
0
20
3 года назад
0
quq_CCCP:
Просто пример дайте уже наконец, чтобы сделать внутренний таймер на ГуяХ?

Вот все горазды фейспалмами убиваться, а у нас сто лет не выходило новых статей по варику. Вы поймите, мы же перечитываем наработки и статьи 10 летней давности, которые уже не актуальны и верим им и учимся по ним же.
Вы же реально шарите. Но карты вы давно не делаете, так объедините усилия, чтобы написать цикл статей по новым базам данных варика. Мне хватило бы даже названия всех локальных переменных, я просто не знаюкак они правильно называются, иначе я бы давно заменил их во многих местах где у меня локалки стоят и ДАЖЕ ЭТО сократило бы количество глюков в разы!
Народ, мы не можем переделать варик, но в ваших силах сделать отличную школу со статьями, иначе и через десять лет прийдут на наше место лдругиеи будут спотыкаться о те же грабли!
0
26
3 года назад
0
SсRealm, ты лучше напиши что именно ты пытаешься сделать.
0
20
3 года назад
0
Extremator:
SсRealm, ты лучше напиши что именно ты пытаешься сделать.
Мне просто нужно что то что заменит вейт, для короткого периода в триггере.
То что сможет отсчитать секунды вместо вейта. Да я уже поставил WAIT_EX( 20. ) Он работает. Но если есть возможность сделать таймер для короткого периода на custom script - вообще буду счастлив!
0
26
3 года назад
0
SсRealm, ты меня не понял. Я прошу тебя сформулировать конкретную ситуацию, когда тебе нужна такая 20-ти секундная отсрочка. Тот вэйт что я тебе дал, точно так же косячит как и обычный, просто в другом месте. У него погрешность от 0.075 до 0.125 (чаще всего всё же выдаёт 0.100), которую надо либо вычитать из стартового времени, либо допускать как побочную (т.е. внутри можно сделать set s = s - .1 , но это всё равно не поможет если время меньше 0.1 сек).
Лучше всего - юзать таймеры. Как их юзать - тут надо уже понимать чуть больше, чем просто то как из запускать и реагировать на них.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.