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

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

Если юнит статичен и никогда не будет передвинут, то можно по событию юнит входит в регион, по совершению события выбирать всех в радиусе и узнавать кто подохдит по типу
Если юнит динамичен и движется, то я бы периодическим триггером выбирал группу с этими юнитами в радиусе, а там уже можно сделать проверки
В обоих случаях можно сделать на гуи, но во втором много утечет будет при неправильном использовании
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
5 лет назад
0
Если юнит статичен и никогда не будет передвинут, то можно по событию юнит входит в регион, по совершению события выбирать всех в радиусе и узнавать кто подохдит по типу
Если юнит динамичен и движется, то я бы периодическим триггером выбирал группу с этими юнитами в радиусе, а там уже можно сделать проверки
В обоих случаях можно сделать на гуи, но во втором много утечет будет при неправильном использовании
Принятый ответ
0
28
5 лет назад
0
то можно по событию юнит входит в регион
Нет, потому что регион прямоугольный.
Если юнит динамичен и движется, то я бы периодическим триггером выбирал группу с этими юнитами в радиусе, а там уже можно сделать проверки
Это верный и самый надёжный способ, но предпочитаю таймеры.
0
32
5 лет назад
0
Нет, потому что регион прямоугольный.
а если надо подойти к зданию, которые в принципе прямоугольное или же у зоны только 1 точка входа, тогда можно и регион... но нам дали слишком мало вводных данных
0
26
5 лет назад
0
По идее можно переписать,
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)
а он выдаёт ошибку.
Тут нужна консультация нормального джассера. Может события нельзя переписать, лишь действия?
Загруженные файлы
0
29
5 лет назад
Отредактирован nazarpunk
0
Тут нужна консультация нормального джассера.
Зинкеры пододут?
//! 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
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.