Проверка завершенной постройки
Возможно ли проверить завершенное ли какое-то здани ли еще строится? У меня триггерная пассивка работает на недостроенном здании.
Заранее спасибо!




Просмотров: 347

Bergi_Bear #1 - 2 месяца назад 1   
здание с пассивкой и старт постройки появляется при входе на карту, следовательно если постройка происходит через суммон (по принципу постройки нежети), то можно запустить таймер равный этому времени и вручить пассивку только тогда.. когда исткший таймер совпадёт со временим постройки
Если постройку строят люди (динамическая скорость или же приостановка во время строительства)
Тогда тут тоже куча вариантов:
Пытаться активировать активку тем же секундным таймером у здания, если активка-пустышка активирвана - то удаляем её и даём нужную пассивку
(активировать что либо могут только готовые здания)
Насчет проверки хп недостроенного здания- уже не помню, но тоже можно попробовать
Если же пассивка лишь наличие способности таже пустышка, например когда фермы дают инком, то можно делать что либо через пассивку эксгумации она сама кдшиться и её каст можно отследить... опять же будет работать только у доконца достроенного здания
прости за сумбур, просто это в самом кратце
Ikobot #2 - 2 месяца назад 0
Если пассивка встроенная в здание, то можно применить триггер с событием на отлов окончания постройки. И при завершении строительства вручать нужные вещи или включать здание в группу, на которые будет действовать абилка.
Также в целом объясни что именно за абилка и что именно ты пытаешься реализовать.
Так будет проще подсказать решение.
МрачныйВорон #3 - 2 месяца назад (отредактировано ) 0
Ну есть же события:
  1. юнит начинает стройку, как только строитель поставит фундамент и начнется стройка. Можно в этот момент сохранить какую нибудь информацию о состояний.
  2. юнит завершает стройку - при завершении строительства. После этого будем знать, что здание достроено.

Bergi_Bear, интересное утверждение, что абилки не активны у недостроенного здания, их не видно. можно ли проверить есть ли они в наличии? например проверить уровень (Lv>0), приказ кастануть и пр
по хп нельзя проверять % стройки. что если кто-то из вражин ударит, и хп уже не будет считаться полным. % стройки идет на время строительства раздел_строительство
влияющие_на_здание

что эта за пассивка?

можно еще проверять текущий приказ у здания. Обычно у строящего здания текущий приказ равен id здания, что означает, что оно еще строится. к сожалению точно отследить % стройки у хуманов сложнее.

» мнение о строителях хуманов
сложность вот в чем, с одним строителем не сложно определить % стройки. Даже когда он перестает временно строить, и возвращается. Все это отслеживается приказами. Нужно точно настроить и предусмотреть все. Но когда подключаются несколько рабочих, то стройка ускоряется. Нужно вводить некий счетчик строителей, которые одновременно строят одно здание. Если один строитель уходит во время стройки, счетчик убывает на единичку. Если счетчик равен = 0, значит стройка приостановлена. Теперь насколько ускоряется? щас затестил:
один хуман строит ратушу: 60 сек, 100%
два хумана строят ратушу: 30 сек, 50% Получается в 2 раза
три хумана строят ратушу: 20 сек, 33,3% Получается в 3 раза
но реально отследить, если коэффициент добавить. Проблема еще в том, что доп ускорение жрет ресурсы. Чтоб будет, если ресурсов не хватать будет? доп рабы перестанут строить? можно ли это отследить то? наверное приказами как-то отслеживается
PT153 #4 - 2 месяца назад 0
например проверить уровень (Lv>0)
Это можно, думаю.
Так-то событие на конец строительства самое верное решение без всяких костылей и приколов.
Lord_Teo #5 - 2 месяца назад (отредактировано ) 0
Предлагаю простой вариант. Не знаю какой у тебя скилл, поэтому сделал для примера с топотом таурена. При активации скила, проверяем расстояние до недостроев. Если в радиусе 500 есть недострой, то сообщаем об этом.
В случае пассивки, можно триггер use повесить на периодическое событие или сделать событие "Отряд в радиусе <значение> <юнит>"
Триггеры:
Начинаем стройку
Использование скила
Пример с пассивкой:
Прикрепленные файлы
PT153 #6 - 2 месяца назад 0
Lord_Teo, зачем лепить костыли, если достаточно просто сделать 1 триггер на конец постройки, проверять там тип и вручить способность?
Lord_Teo #7 - 2 месяца назад 0
PT153:
Lord_Teo, зачем лепить костыли, если достаточно просто сделать 1 триггер на конец постройки, проверять там тип и вручить способность?
Хмм. Т.е. добавить способность - это намного проще, чем добавить юнит в группу? Ну, ок. А как ты своим способом будешь проверять недострой? Все в этом одном триггере? У меня, по сути, 3 триггера с одной строкой внутри (2 остальных - это уже непосредственно способности героя). Если такое считается слишком костыльным, то ок. Это был всего лишь один из вариантов.
МрачныйВорон #8 - 2 месяца назад (отредактировано ) 0
как определить процент стройки (с учетом хуманских рабов и обычная для остальных рас)
Можно использовать таймер. Создаешь и запускаешь таймер в начале стройки, и при завершении удаляешь. процент = текущее время таймера / заданное время *100%

А со случаем с хуманскими рабами такое сделать сложно. Они могут дропнуть, или ускорить. Ладно дроп, там таймер можно было бы запаузить. но как быть с ускорением, когда несколько рабов подключаются к строительству? Не знаю как это надо было сделать. Придумал такую схему: нужен счетчик рабов и счетчик процентов. Периодически каждую секунду таймером прибавляешь проценты в сек
100% / (заданное время стройки/ число рабов) - начисляемый процент за 1 сек

короче с хманскими рабами есть какие-то не точности и погрешности. Обычно большинство случаев норм в 100% укладывается. А бывает и больше 100, но такое редко происходит. Мне кажется период таймер не успевает запаузиться, и начисляет лишние проценты. Что*то ломается, ай, лень уже.
Прикрепленные файлы
Msey #9 - 2 месяца назад 0
Ледяное дыхание дракона нежити, насколько помню, паузит строительство. В таймере это тоже учесть надо)
PT153 #10 - 2 месяца назад 0
У меня триггерная пассивка работает на недостроенном здании.
Перечитал вопрос, нужна конкретика о пассивке. Способ Lord_Teo абсолютно правильный, но, думаю, нужно добавить событие для отмены строительства.
Lord_Teo #11 - 2 месяца назад 0
PT153:
У меня триггерная пассивка работает на недостроенном здании.
Перечитал вопрос, нужна конкретика о пассивке. Способ Lord_Teo абсолютно правильный, но, думаю, нужно добавить событие для отмены строительства.
Не нужно, т.к. отмена стройки равносильна смерти здания.
Bergi_Bear #12 - 2 месяца назад 0
Lord_Teo, в целом да.... но за отмену возвращают деньги, а за реальную смерть - нет. Хотя это здесь роли не играет
МрачныйВорон #13 - 2 месяца назад (отредактировано ) 0
Первая версия с таймерами - мучная идея. Надо очень многое учитывать (много кода). Зато там осталось идея "как отследить начавшую работу раба?". Здесь конечно отслеживается начала работы строительства. Но меня натолкнула еще одна идея. Например рубка леса. Вот хотел сделать нестандартный ресурс из декорации: камень, сбор фруктов с деревьев, набор воды. Обычно при отдаче приказа, юниту нужно добежать до цели. И потом останавливается, и проигрывается анима рубки. Есть приказ, но юнит стоит на месте. Мб сделать такое че-то

Нашел идеальный вариант (версия 2) нахождения % стройки (короче маленькая система):
проверять по хп. проценты = тек здоровье / макс здоровье
Но работает с одним условием, надо завести счетчик дамага. Надо написать небольшую систему отлова урона, и в счетчик прибавлять. Даже, если хп убывает от дамага, мы все равно можем узнать %
проценты = (тек здоровье+countDamage) / макс здоровье

короче я поставил цель сделать наработку с нестандартным ресурсом из декора
Прикрепленные файлы
Vlod #14 - 2 месяца назад 0
Еще можно один раз написать свою систему постройки и не мучаться
quq_CCCP #15 - 2 месяца назад 1   
Жаль не завезли нативку UnitGetConstructionProgress....
МрачныйВорон #16 - 2 месяца назад 0
Vlod, ну это еще легче =)) проще написать свою систему. Например, меня так реализован рост растений. днем быстрее растут, ночью медленее. +всякие бонусы ускорения (удобрения) /замедления (червячки, пожары, неподходящие условия местности )