Собственно - возможно ли отследить незанятого работника?
Тоесть, я хочу сделать так, чтоб каждого незанятого работника подсвечивало сверху восклицательным знаком (модель talktome)
Думаю вешать баф с анимацией этой модели на афк работника.
Возможно ли как-то отловить это?
Либо если есть идея как можно это оформить подругому, жду предложения.

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

Вообщем решение как обозначить незанятого раба простое пока не пришло(
Делаем способность А на основе Atol. Если не JNGP, то на основе Asph. Способности даём нужный эффект.
Далее делаем триггер.
Событие: каждые 0.25 секунд игры
Действия
Установить Workers = Юниты на Вся карта типа Работник.
Выбрать всех юнитов в Workers и для каждого делать
    Custom script: if GetUnitCurrentOrder(GetEnumUnit()) == 0 then
    Добавить способность А Выбранному юниту.
    Custom script: else
    Удалить способность А у Выбранного юнита.
    Custom script: endif
Custom script: call DestroyGroup(udg_Workers)

А вот и карта.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
28
4 года назад
0
Автор жив?
0
23
4 года назад
0
PT153, сбежал от вас =)
0
9
4 года назад
0
PT153:
Автор жив?
Жив к сожалению.
По сабжу, твой вариант работает, спасибо!
Но мне он не подходит, я говорил что тригер с переодичностью не пойдет по ряду причин. Например потому, что у меня 2 тригера с переодичностью уже вшиты в карту. Третий даст нагрузку. 12 игроков - три тригера, на них по 20-30 рабочих... Вообщем, такое.
МОжет кто предложит что попроще, или сам придумаю решение.
0
23
4 года назад
0
а зачем тут таймер если вы ловите события приказ цели а дейсвия паузить стоп снять паузу и как будето ничего не происходит
0
9
4 года назад
0
его
как бы каждые 0.25 сек. подсчет новой группы рабочих или ты о чем?
если есть вариант предложи\покажи
0
26
4 года назад
0
newtone, во-первых, в конкретных числах дай данные про нагрузку от периодического таймера. Во-вторых, предложенный вариант с отловом приказа выглядит так:
Событие: 3 события Generic unit Отдал приказ цель-объект/цель-точка/без цели
Условие: Unit-type of (Triggering unit) равно Работник
Действие: If (Issued order) равно Стоп ИЛИ <пусто> и (Triggering unit) is in Unit group FREE_WORKERS равно Нет, Then Добавить спецэффект и внести в группу FREE_WORKERS, Else Ничего
If (Triggering unit) is in Unit group FREE_WORKERS равно Да и (Issued order) не равно Стоп ИЛИ <пусто> Then Убрать спецэффект и убрать из группы FREE_WORKERS, Else Ничего
Только какое-то удобное запоминание спецэффекта нужно сделать.

Например, через предложенную PT153 способность Atol, когда даёшь и удаляешь не эффект, а способность, что мне кажется оптимальным, ведь тогда и группа не нужна, достаточно проверять лишь уровень способности, либо через Custom value, когда юнит получает custom value, эффект сохраняется в переменную-массив с индексом [custom value of (Triggering unit)], а custom_value=custom_value+1, но так есть угроза превышения размера массива при длительной игре, либо можно новые переменные-массивы при превышении лимита массива подключать, либо проверять custom value работника на больше 0, если да, то давать его custom value, а не новый. Лимит массива 8191 на патчах до 1.29 и 32767 на новых, получить превышение лимита массива в таком случае теоретически возможно, если на старых патчах все 12 игроков создадут за всё время игры более 682 незанятых работников каждый, а если кто-то из 12 не создаст, то другим надо будет взять на себя его количество, а на новых патчах более 1365 работников каждому из 24 игроков. Мне трудно представить игру, в которой такое могло бы быть, но если для твоей карты такая угроза может быть актуальной, то можно отслеживать смерть работника с custom value и применять его для новых, так как одновременное нахождение на карте восьми тысяч юнитов не выдержит никакой патч, то есть мёртвых работников с custom value выше 0 заноси в группу, при появлении нового незанятого проверяй количество юнитов в группе больше 0, тогда давай новому работнику custom value трупа, которого из группы убирай. Есть ещё более извращённые варианты, но они нужны для специфических случаев.

Ах да, если незанятого работника мгновенно убьют, то спецэффект так на нём и останется, нужно убирать.
1
28
4 года назад
Отредактирован PT153
1
Третий даст нагрузку.
Какую? У меня в карте куча башен (20-30 на игрока, всего 10 игроков), каждая чекает врагов рядом 16 раз в секунду, лагает только у людей со слабым интернетом и пк. У меня стабильно 30 фпс, хотя у меня далеко не топовый пк.
Любой другой способ нагружать будет ещё больше. Никак нельзя отследить, что приказ стал 0, в любом случае нужно для каждого юнита периодически смотреть текущий приказ. Либо общий таймер, либо индивидуальный.
8gabriel8:
Ах да, если незанятого работника мгновенно убьют, то спецэффект так на нём и останется, нужно убирать.
Со способностью эффект тоже останется. Удобство тут в том, что в способности можно указать несколько эффектов и точек креплений, не нужно проверять, есть ли у юнита уже такой эффект, и при смерти юнита не нужно эффект удалять.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.