Хотелось бы узнать, можно ли отследить юнита, к которому подходят в событии "отряд в радиусе ** "юнит""?

Если юнит статичен и никогда не будет передвинут, то можно по событию юнит входит в регион, по совершению события выбирать всех в радиусе и узнавать кто подохдит по типу
Если юнит динамичен и движется, то я бы периодическим триггером выбирал группу с этими юнитами в радиусе, а там уже можно сделать проверки
В обоих случаях можно сделать на гуи, но во втором много утечет будет при неправильном использовании
`
ОЖИДАНИЕ РЕКЛАМЫ...
33
Если юнит статичен и никогда не будет передвинут, то можно по событию юнит входит в регион, по совершению события выбирать всех в радиусе и узнавать кто подохдит по типу
Если юнит динамичен и движется, то я бы периодическим триггером выбирал группу с этими юнитами в радиусе, а там уже можно сделать проверки
В обоих случаях можно сделать на гуи, но во втором много утечет будет при неправильном использовании
Принятый ответ
28
то можно по событию юнит входит в регион
Нет, потому что регион прямоугольный.
Если юнит динамичен и движется, то я бы периодическим триггером выбирал группу с этими юнитами в радиусе, а там уже можно сделать проверки
Это верный и самый надёжный способ, но предпочитаю таймеры.
33
Нет, потому что регион прямоугольный.
а если надо подойти к зданию, которые в принципе прямоугольное или же у зоны только 1 точка входа, тогда можно и регион... но нам дали слишком мало вводных данных
26
По идее можно переписать,
function TriggerRegisterUnitInRangeSimple takes trigger trig, real range, unit whichUnit returns event
    return TriggerRegisterUnitInRange(trig, whichUnit, range, null)
endfunction
чтобы юнит заносился в переменную.

Чего-то не получается событие переписать, делаю в нестандартном коде так,
native TriggerRegisterUnitInRange takes trigger whichTrigger, unit whichUnit, real range, boolexpr filter returns event

function TriggerRegisterUnitInRangeSimple takes trigger trig, real range, unit whichUnit returns event
    set udg_range = whichUnit
    return TriggerRegisterUnitInRange(trig, whichUnit, range, null)
а он выдаёт ошибку.
Тут нужна консультация нормального джассера. Может события нельзя переписать, лишь действия?
Загруженные файлы
30
Тут нужна консультация нормального джассера.
Зинкеры пододут?
//! zinc
library onRange {
    hashtable HT = InitHashtable();

    function onRange(unit caster, unit target, integer range){
        BJDebugMsg(
            "|cffffcc00" + GetUnitName(target) + "|r"
            + " подошёл к " +
            "|cffffcc00" + GetUnitName(caster) + "|r"
            + " на " +
            "|cffffcc00" + I2S(range) + "|r"
        );
    }
    
    function addRange(trigger t, unit u, real range){
        integer pk = GetHandleId(t);
        SaveUnitHandle(HT, pk, 0, u);
        SaveInteger(HT, pk, 0, R2I(range));
        
        TriggerRegisterUnitInRange(t, u, range, null);
        TriggerAddCondition(t, Filter(function()-> boolean {
            integer pk = GetHandleId(GetTriggeringTrigger());
            onRange(
                LoadUnitHandle(HT, pk, 0),
                GetTriggerUnit(),
                LoadInteger(HT, pk, 0)
            );
            return false;
        }));
    }

    function onInit(){
        addRange(CreateTrigger(), gg_unit_Hpal_0003, 300);
        addRange(CreateTrigger(), gg_unit_Hmkg_0000, 400);
    }
}
//! endzinc
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.