Доброго времени суток, знатоки. У меня возникла проблема с воскрешением героев после их смерти.
Иногда (не всегда), случается такое, что умерший герой не воскрешается (то таймер в таблице не появляется, из-за чего и не воскрешается герой, то таймер появится, пройдет до ноля, а герой не воскресится), при чем один игрок (герой) воскрешается а другой нет.
Короче есть три основных триггера которые и отвечают за воскрешение героев, см. ниже:
Тут при смерти героя, задается значение таймера (последнее действие триггера "set T[(player number of dying unit)] = (Hero level of dying unit * 5) + 10")
Тут у нас идет отчет времени (каждую секунду) до момента воскрешения (отчет записывается в таблицу, чтоб игроку было видно когда воскреснет герой), по завершении отчета, если переменная Т(номер трупа игрока =) ) равна нолю, и в то же время герой игрока еще мертв, то бежит к след. триггеру.
В этом триггере происходит само воскрешение героя.
Так вот, господа знатоки, подскажите что не так? (полюзуюсь исключительно граф интерфейсом триггеров, jass не получается осилить =(( )
За ранее благодарен, с уважением, Cardinal
Проблема решена, багов с воскрешением нет. (возможно проблема была в вейтах)

Cardinal, за такое именование переменных нужно по рукам бить.
то бежит к третьему триггеру которій и воскрешает
Не плодите триггеров, все нужные действия можно и в цикле сделать.
У вас переменная T отвечает за состояние героя, зачем проверять жив юнит или нет?
T<0 Жив
T==0 Нужно воскресить прям сейчас
T>0 Ждёт воскрешения
Cardinal:
T[номер героя] болше или равна 1
больше или равна 0 => T[] = T[] -1
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
30
а на счет lua может быть, визуально он мне php напоминает
он больше на js похож.
должен же быть способ решить эту проблему и на GUI
Эллегантные решения можно и на гуи сделать, а не плодить блоки копипастой
у каждого игрока только один герой
Дык вообще элементарно
Переменные
  • HERO[] Боевая единица
  • HERO_REVIVE_LOC[] Точка
  • HERO_REVIVE_TIME[25] = -1 Целлочисленная
  • HERO_REVIVE_TIMER Таймер
Если герой умирает, то заносите в HERO_REVIVE_TIME по id игрока время воскрешения.
Запускаете HERO_REVIVE_TIMER с периодом в секунду и проверяете HERO_REVIVE_TIME.
Если меньше ноля, то герой жив, здоров и радуется жизни.
Если больше, то ожидает воскрешения в курилке
Если равно, то с вещами на рэспаун в HERO_REVIVE_LOC.
Надеюсь уточнять, что с каждым тиком нужно уменьшать HERO_REVIVE_TIME не нужно)
1
8gabriel8, в свернутом только награды за убийство и т.д., с того триггера за воскрешение только последнее действие отвечает (точней за число секунд в таймере)
NazarPunk, есть переменные:
uHero[1-12] - боевая еденица на каждого игрока
T[1-12] - целочисленная, равна кол-ву секунд до воскрешения
есть еще две области (StartTeam1/StartTeam2) - области где восрешается герой той или иной команды
В идеале работать должно так: герой умер и первый триггер записал в переменную T[номер игрока убитого героя] кол-во секунд до воскрешения, второй триггер постоянно каждую секунду проверяет, если герой мертв равно да, жив равно нет, а переменная T[номер героя] болше или равна 1, то переменная T[] = T[] - 1, а если герой мертв равно да, жив равно нет, а переменная T[] равна 0, то бежит к третьему триггеру которій и воскрешает. по логике оно должно работать, но иногда не срабатывает.. кстати переменная T[] еще нужна для того что бы время до воскрешения показывать в таблице (мультиборде)..
30
Cardinal, за такое именование переменных нужно по рукам бить.
то бежит к третьему триггеру которій и воскрешает
Не плодите триггеров, все нужные действия можно и в цикле сделать.
У вас переменная T отвечает за состояние героя, зачем проверять жив юнит или нет?
T<0 Жив
T==0 Нужно воскресить прям сейчас
T>0 Ждёт воскрешения
Cardinal:
T[номер героя] болше или равна 1
больше или равна 0 => T[] = T[] -1
Принятый ответ
1
NazarPunk, тоесть если Т[] = 0, 1, 2, 3, ... n, то T[] = T[] -1 (значит герой мертв еще)
если T[] = 0, то T[] = T[] -1, и тут же воскрешаем героя
а если T[] = -1, то ничего уже и не делаем, ибо герой уже воскрешен, я правильно Вас понял? и тогда отпадает смысл в проверке жив или мертв герой..?
и третий триггер всунуть во второй в цикл, так?
30
тоесть если Т[] = 0, 1, 2, 3, ... n, то T[] = T[] -1 (значит герой мертв еще)
T > 0 это 1,2,3, ... n, а в остальном всё верно. И до кучи избавьтесь от вэйтов.
1
NazarPunk, в результате получилось такое, пока еще не тестировал на работоспособность, вравильно воплотил Вашу мысль?
Загруженные файлы
30
Cardinal, что за поклонение копипасте?
Да ещё и с протекающими точками. Я же писал за переменную HERO_REVIVE_LOC. В начале создали по точке каждому игроку и воскрешайте по ид игрока.
Загруженные файлы
26
По-быстрому сваял систему из 2 триггеров, но без мультиборда
И не нужно делать двойную проверку, что Герой мёртв Да, а Герой жив Нет.
Загруженные файлы
30
По-быстрому сваял систему из 2 триггеров, но без мультиборда
Вписать в неё мультиборд очень легко)
1
NazarPunk, по поводу точек, тупанул, мой косяк) щяс переделаю
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.