XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Лось

offline
Опыт: 7,223
Активность:
В РБ возвращяется в первом ретурне, а второй чтобы WE не ругался, он некогда не выполняется.
Старый 26.10.2008, 17:30
zer0ne

offline
Опыт: 11,219
Активность:
я воспользовался функцией Jonа, но у меня GetNearestUnit принимает x и y одного юнита, который кастует заклинание, как мне сделать, что бы на этого юнита функция не распространялась?
Старый 29.10.2008, 20:02
J
expert
offline
Опыт: 48,447
Активность:
» code
Код:
globals
    group GG = CreateGroup()
    //
    filterfunc NearestUnitFilter
    real NearestX
    real NearestY
    unit NearestUnit = null
    real NearestDistance
    unit NearestIgnor
endglobals

function GetNearestUnit_Filter takes nothing returns boolean
    local unit u = GetFilterUnit()
    local real x = GetUnitX(u)-NearestX
    local real y = GetUnitY(u)-NearestY
    local real dis = x*x+y*y
    if dis < NearestDistance and u != NearestIgnor then
        set NearestUnit = u
        set NearestDistance = dis
    endif
    set u = null
    return false
endfunction

function GetNearestUnit takes real x, real y, real maxradius, unit ignor returns unit
    set NearestX = x
    set NearestY = Y
    set NearestDistance = maxradius*maxradius
    set NearestIgnor = ignor
    set NearestUnit = null
    call GroupEnumUnitsInRange(GG, x, y, maxradius, NearestUnitFilter)
    return NearestUnit
endfunction

function Init takes nothing returns nothing
    set NearestUnitFilter = Filter(function GetNearestUnit_Filter)
endfunction


Jon добавил:
если игнор-юнит точно расположен по указаному x и y, то попробуй так
» code
Код:
globals
    group GG = CreateGroup()
    //
    filterfunc NearestUnitFilter
    real NearestX
    real NearestY
    unit NearestUnit = null
    real NearestDistance
endglobals

function GetNearestUnit_Filter takes nothing returns boolean
    local unit u = GetFilterUnit()
    local real x = GetUnitX(u)-NearestX
    local real y = GetUnitY(u)-NearestY
    local real dis = x*x+y*y
    if dis < NearestDistance and dis != 0 then
        set NearestUnit = u
        set NearestDistance = dis
    endif
    set u = null
    return false
endfunction

function GetNearestUnit takes real x, real y, real maxradius returns unit
    set NearestX = x
    set NearestY = Y
    set NearestDistance = maxradius*maxradius
    call GroupEnumUnitsInRange(GG, x, y, maxradius, NearestUnitFilter)
    return NearestUnit
endfunction

function Init takes nothing returns nothing
    set NearestUnitFilter = Filter(function GetNearestUnit_Filter)
endfunction

если не получится юзай что написал выше
Старый 29.10.2008, 20:40
zer0ne

offline
Опыт: 11,219
Активность:
Jon, спасибо, а можно еще сделать что бы распространялось только на мертвых юнитов?
Старый 29.10.2008, 21:23
J
expert
offline
Опыт: 48,447
Активность:
Код:
if dis < NearestDistance and u != NearestIgnor then

вот в этй строчку добовляй все условия через and, над юнитом u
Старый 29.10.2008, 21:24
zer0ne

offline
Опыт: 11,219
Активность:
ага понял, все спасибо!
Старый 29.10.2008, 21:26
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 01:27.