Доброго времени суток.
Нужна помощь с данной проблемой:
У меня область на карте рандомно перемещается и в ней время от времени спавнятся враждебные существа. Я не хочу чтоб они спавнились внутри чьего либо поселения. Следовательно мне нужно проверять находится ли рядом с областью какой либо из юнитов и только после этого спавнить. Подскажите как мне правильно сделать?
Нужна помощь с данной проблемой:
У меня область на карте рандомно перемещается и в ней время от времени спавнятся враждебные существа. Я не хочу чтоб они спавнились внутри чьего либо поселения. Следовательно мне нужно проверять находится ли рядом с областью какой либо из юнитов и только после этого спавнить. Подскажите как мне правильно сделать?
Принятый ответ
тебе надо что-то одно выбрать. а ты всунул одно и тоже в одну кучу, и выполняется действие это дважды (не верно).
код
в функции Trig_a_F записываются все условия, под которыми берут юнитов в группу
проверяем, что являются зданием. и что номера владельцев-игроков в диапазоне от 0 до 10. нумерация номеров начинается с 0. диапазон можно изменить.
проверяем, что являются зданием. и что номера владельцев-игроков в диапазоне от 0 до 10. нумерация номеров начинается с 0. диапазон можно изменить.
function Trig_a_F takes nothing returns boolean
local integer n =GetPlayerId(GetOwningPlayer(GetFilterUnit()))
return IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE)and(n>0 and n<10)
endfunction
вводим условие Check(rect)
if Check(rect) then
ваши действия
endif
в функции основная фишка это проверять не пуст ли первый выбранный юнит в группе. с помощью FirstOfGroup. Если такого юнита нет (не записан в группе), выдаст null
if Check(rect) then
ваши действия
endif
в функции основная фишка это проверять не пуст ли первый выбранный юнит в группе. с помощью FirstOfGroup. Если такого юнита нет (не записан в группе), выдаст null
function Check takes rect re returns boolean
local group g = CreateGroup() //создать группу
local real x = GetRectCenterX(re) //координаты центра области (x,y)
local real y = GetRectCenterY(re)
local boolean b
call GroupEnumUnitsInRange(g, x, y, 1600, Condition(function Trig_a_F))
set b = (FirstOfGroup(g)==null) //условие проверки: если первый попавшийся юнит пустой, запишет true. Иначе false
call DestroyGroup(g) //удаляем группу-утечку
set g = null //обнуляем
return b //вернет true (если группа пуста) или false (группа не пуста, значит есть какое поселение)
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован MpW
если они спавнятся в центре области, а область перемещается периодически. Значит возьмем этот центр как основную точку. лучше конечно перемещать точку, чем рект. Но дело ваше
Отредактирован MpW
проверяем, что являются зданием. и что номера владельцев-игроков в диапазоне от 0 до 10. нумерация номеров начинается с 0. диапазон можно изменить.
if Check(rect) then
ваши действия
endif
в функции основная фишка это проверять не пуст ли первый выбранный юнит в группе. с помощью FirstOfGroup. Если такого юнита нет (не записан в группе), выдаст null