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

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

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

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

SсRealm:
но если вейты так глючны, то почему бы просто не сделать отчет на локалках или глобалках?
Ответ на твой вопрос - таймер.
Хочешь записывай его в локалку, а потом ищи что и с кем делать (на это надо записать).
Хочешь записывай его в глобалку, а потом ... точно так же ищи что и с кем делать.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
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 сек).
Лучше всего - юзать таймеры. Как их юзать - тут надо уже понимать чуть больше, чем просто то как из запускать и реагировать на них.
0
20
3 года назад
0
Extremator:
SсRealm, ты меня не понял. Я прошу тебя сформулировать конкретную ситуацию, когда тебе нужна такая 20-ти секундная отсрочка. Тот вэйт что я тебе дал, точно так же косячит как и обычный, просто в другом месте. У него погрешность от 0.075 до 0.125 (чаще всего всё же выдаёт 0.100), которую надо либо вычитать из стартового времени, либо допускать как побочную (т.е. внутри можно сделать set s = s - .1 , но это всё равно не поможет если время меньше 0.1 сек).
Лучше всего - юзать таймеры. Как их юзать - тут надо уже понимать чуть больше, чем просто то как из запускать и реагировать на них.
Понимаешь, у меня триггер огромный, там безумное число if( если) Методом научного тыка я пришел к выводу, что один огромный триггер для 50 волн работает лучше чем пятьдесят отдельных. Сам понимаешь, никакого вейта там быть не может, но паузы в нем, мне необходимы, хотя бы 20- 50 секунд в нутри одной волны
Его запускает другой триггер, который секет постоянно, как переменная убитых юнитов ноль так и запускает. Заюзать внутрь таймер вместо вейта- самое то!
3
21
3 года назад
3
SсRealm, понимаешь, нельзя просто взять и вставить таймер вместо вейта? Они немного по разному работают. Вейт просто приостанавливает на время выполнение кода в текущем потоке, а таймер создаёт новый поток, запуская указанную функцию. В гуи нельзя создавать функции, единственный способ как-то взаимодействовать с этим таймером, - это триггер, регистрирующий завершение отсчёта времени. Тебе для каждого таймера придётся создавать свой триггер, а уже там выполнять продолжение твоего кода.
0
18
3 года назад
0
безумное число if( если)
Если проверяется номер волны, то проще через массивы и базу данных сделать.
Например, при запуске карты создать целочисленную переменную (означающую номер волны) Wave = 1 и установить переменную-массив UnitType[1] = Скелет, UnitType[2] = Зомби и т. д. Когда все юниты в волне убиты, установить Wave = Wave+1. И действовать уже не через конкретный тип, а через переменную - создать UnitType[Wave] в нужном месте на карте
1
27
3 года назад
1
есть счетчики триггера. сколько раз они запускались. вот их можно использовать
Чтобы оставить комментарий, пожалуйста, войдите на сайт.