Собственно - возможно ли отследить незанятого работника?
Тоесть, я хочу сделать так, чтоб каждого незанятого работника подсвечивало сверху восклицательным знаком (модель 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)

А вот и карта.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
24
Всегда можно пойти в лоб - отслеживать приказ stop, добавлять в группу. Отслеживать все остальные приказы, удалять из группы.
27
читал, что в новых патчах добавили boolean-проверку на бездействие. но это может быть не точно
28
prog, работник может стать незанятым и без приказа, например когда завершил постройку здания
23
Можно выбирать всех работников на карте и если их текущий приказ = null то значит работник стоит афк.
24
nvc123, мне казалось что stop отдается автоматически в любом случае, но, конечно, могу ошибаться, давно последний раз с этим работал.
9
Obelick:
Можно выбирать всех работников на карте и если их текущий приказ = null то значит работник стоит афк.
Тригер с проверкой переодичностью каждую 1 сек?
Не не пойдет, большая нагрузка на карту. либо я тебя не правильно понял.
прикрепи пример тригера что имеешь ввиду.
нужно что-то типа:
событие - воин отдал приказ стоп
условие - воин=работник (у меня они самоубийцы в по)
действие - повесить баф или добавить способность с бафом.
иначе - удалить баф/способность.
как-то так...

Steal nerves:
читал, что в новых патчах добавили boolean-проверку на бездействие. но это может быть не точно
1.26 нужен. новые версии кривее всего кривого((((
27
Obelick, это тоже не всегда помогает к сожалению. как сказал nvc123
28
Достаточно просто отслеживать, что текущий приказ 0.

Не не пойдет, большая нагрузка на карту.
Совсем не большая нагрузка. В лазурных башнях период меньше, а лагов нет.
30
Попробуй ForceUIKey("`") (ну или какой там хоткей на выбор незанятых рабочих)

В лазурных башнях период меньше, а лагов нет.
В лазурных башнях максимум 5 рабочих на игрока
28
Steal nerves, это как раз-таки поможет, если приказ 0, то юнит ничего не делает.

В лазурных башнях максимум 5 рабочих на игрока
А причём тут рабочие? Любой игрок может построит 100500 финальных башен, для которых и делается цикл 4 раза в секунду.

В любом случае нагрузка никчёмная.
30
Подробнее опишу свою идею: запоминаем выделение игрока, после чего форсим выбор незанятых рабочих в цикле, добавляя их в исходно пустую группу. Когда выделится рабочий, уже находящийся в группе, считаем группу полной и всем рабочим без "!" вешаем "!", после чего выделяем тех юнитов, которые были выделены игроком.

Не уверен, что оно сработает, но сомнение есть только в том, можно ли зафорсить не буквенную клавишу, в остальном метод сработает 100%
28
Не виду смысла городить костыли через выделение, ибо приказы могут отдаваться триггерно. Достаточно просто 4 раза в секунду у всех рабочих смотреть приказ. Нагрузки на карту не будет. И вообще, с чего бы её быть? Откуда это убеждение, что периодические события или таймеры - плохо?

Выбираем всех рабочих.
Для всех рабочих проверяем приказ. Если он 0, удаляем рабочего из группы.
На выходе имеем группу незанятых рабочих.

Делал похожее тут. Там карта, где 4 раза в секунду отображаются приказы юнита. Когда юнит ничего не делает, приказ 0.
27
PT153, ну ладно. если работает. просто это мб не всегда так, я просто уже не помню. Но когда то Диод говорил что не работает. Например, у вас стоит рабочий, его атаковал враг, рабочий естественно убежит от него. Но приказ то он не имеет вообще, тк не получал приказа от игрока вроде. Там надо тогда проверять не сдвинулся. Но и еще много других случаев. Пардон, мы говорим не про бездействие юнита, а про занятость. хотя это почти одно и тоже
28
Но когда то Диод говорил что не работает.
Старички XGM много чего говорили, вот только это было лет 10 назад, за 10 лет вещи изменились. Близы не всегда пишут все изменения. Порой это просто невозможно.
Например, у вас стоит рабочий, его атаковал враг, рабочий естественно убежит от него.
Способ Clamp данный случай не хендлит как раз. При этом убегающий рабочий не является незанятым.
Но приказ то он не имеет вообще, тк не получал приказа от игрока вроде.
Но он имеет приказ. Пруф.
Поэтому способ с проверкой приказа на 0 вполне рабочий.
Загруженные файлы
16
Приказа при автоатаке, убегании - нет. Он пустой.
30
Способ Clamp данный случай не хендлит как раз.
Лол, описанный мной вариант тупо выделяет всех рабочих, которые находятся под кнопкой "свободные рабочие", я хз о чём ты. Убегающий рабочий не является незанятым, он занят убеганием (твой кэп).
28
убегании - нет
Есть, приказ "move", карта выложена выше. Для автоатаки не смотрел, ибо речь о рабочих.

Clamp, я изначально не понял, что имелось в виду. Да и сейчас не совсем ясно, с какой периодичностью происходит перебор всех незанятых рабочих. Если это делается единожды и далее занятость снимается и восстанавливается только на отслеживании выделения юнитов, то, как и сказал, такой способ не хендлит случай убегания: рабочий был свободен в момент форса, но после стал убегать, при это игрок им не управлял. Если есть периодичность, то проще просто проверять текущий приказ.

Вроде понял, периодичность должна быть. Но не думаю, что можно вызывать ForceUIKey в цикле без пауз между вызовами.
9
PT153:
убегании - нет
Есть, приказ "move", карта выложена выше. Для автоатаки не смотрел, ибо речь о рабочих.

Clamp, я изначально не понял, что имелось в виду. Да и сейчас не совсем ясно, с какой периодичностью происходит перебор всех незанятых рабочих. Если это делается единожды и далее занятость снимается и восстанавливается только на отслеживании выделения юнитов, то, как и сказал, такой способ не хендлит случай убегания: рабочий был свободен в момент форса, но после стал убегать, при это игрок им не управлял. Если есть периодичность, то проще просто проверять текущий приказ.

Вроде понял, периодичность должна быть. Но не думаю, что можно вызывать ForceUIKey в цикле без пауз между вызовами.
Ваши рассуждения и пруфы, конечно очень интересны и познавательны. Много нового для себя узнал.
Только вот мне не важно будет ли работник убегать или что-то еще. Мне важно будет ли он стоять афк без работы.
И как без переодичности и выборки на него набросить эффект анимации.
Желательно простым способом.
Я думал над способностью "выбрать воина" или "продать предмет/общие магазины"(магазин). Давать ее глобально по карте если приказ работника =0 (афк). Но она не выбирает работников, только героев или воинов с рюкзаком.
Так же думал про способность "спрятаться", типа приказ стоп набрасывает невидимость, а вместо этого вешать анимку (восклицательного знака), но опять же, как тогда убрать невидимость с воина (без проверки и переодичности)...
Вообщем решение как обозначить незанятого раба простое пока не пришло(
28
Вообщем решение как обозначить незанятого раба простое пока не пришло(
Делаем способность А на основе 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)

А вот и карта.
Загруженные файлы
Принятый ответ
9
PT153:
Автор жив?
Жив к сожалению.
По сабжу, твой вариант работает, спасибо!
Но мне он не подходит, я говорил что тригер с переодичностью не пойдет по ряду причин. Например потому, что у меня 2 тригера с переодичностью уже вшиты в карту. Третий даст нагрузку. 12 игроков - три тригера, на них по 20-30 рабочих... Вообщем, такое.
МОжет кто предложит что попроще, или сам придумаю решение.
22
а зачем тут таймер если вы ловите события приказ цели а дейсвия паузить стоп снять паузу и как будето ничего не происходит
9
его
как бы каждые 0.25 сек. подсчет новой группы рабочих или ты о чем?
если есть вариант предложи\покажи
Чтобы оставить комментарий, пожалуйста, войдите на сайт.