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

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

Закрытая тема
 
Desert_Claw
The Savior
offline
Опыт: 529
Активность:
Определение ближайшего юнита игрока N
Вот нашел нароботку на сайте по нахождению ближайшего юнита! Все хорошо но мне нужно чтобы он находил определенного ближайшего юнита! Скажем ближайшего юнита Синего игрока! Переделайте пожалуйста вот :

Код:
// by Shadow Daemon
function GetNearestUnitFilter takes nothing returns boolean
  local unit u  = GetFilterUnit()
  local real dx = GetWidgetX(u) - udg_n_dx
  local real dy = GetWidgetY(u) - udg_n_dy
  local real ds = SquareRoot(dx * dx + dy * dy)
  if ds < udg_n_ds and udg_n_ux != u and GetWidgetLife(u) > .405 then
    set udg_n_ds = ds
    set udg_n_un = u
  endif
  return false
endfunction

function GetNearestUnit takes unit u, real maxdist returns unit
  set udg_n_ds = maxdist
  set udg_n_dx = GetUnitX(u)
  set udg_n_dy = GetUnitY(u)
  set udg_n_un = null
  set udg_n_ux = u
  call GroupEnumUnitsInRange(udg_n_gr, udg_n_dx, udg_n_dy, maxdist, Filter(function GetNearestUnitFilter)) 
  return udg_n_un
endfunction

function Test takes nothing returns nothing
  local unit nearest = GetNearestUnit(udg_Warden, 400)
  call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\Blink\\BlinkCaster.mdl", nearest, "chest"))
  set nearest = null
endfunction

//===========================================================================
function InitTrig_Test takes nothing returns nothing
  call TimerStart(CreateTimer(), 1, true, function Test)
endfunction
[+] замечание от ADOLF: дублирование тем, ненадо на один вопрос создавать больше одной темы

Отредактировано ShadoW DaemoN, 24.09.2008 в 14:15.
Старый 24.09.2008, 12:18
NETRAT

offline
Опыт: 83,712
Активность:
это нужно в фильтр добавить еще одно условие
Код:
function GetNearestUnitFilter takes nothing returns boolean
  local unit u = GetFilterUnit()
  local real dx = GetWidgetX(u) - udg_n_dx
  local real dy = GetWidgetY(u) - udg_n_dy
  local real ds = SquareRoot(dx * dx + dy * dy)
  // Здесь Player(1) - синий игрок
  if GetOwningPlayer(u) == Player(1) and ds < udg_n_ds and udg_n_ux != u and GetWidgetLife(u) > .405 then
    set udg_n_ds = ds
    set udg_n_un = u
  endif
  return false
endfunction
Старый 24.09.2008, 12:44
J
expert
offline
Опыт: 48,447
Активность:
Код:
globals
    group GG = CreateGroup()
    unit n_un
    real n_dx
    real n_dy
    real n_dsSq
endglobals

function YourCondition takes nothing returns boolean
    return GetWidgetLife(n_un) > 0 and GetPlayerId(GetOwningPlayer(n_un)) == 1
endfunction

function GetNearestUnitFilter takes nothing returns boolean
    local unit u = GetFilterUnit()
    local real dx = GetUnitX(u) - n_dx
    local real dy = GetUnitY(u) - n_dy
    local real dsSq = dx*dx+dy*dy
    if dsSq < n_dsSq and YourCondition() then
        set n_dsSq = dsSq
        set n_un = u
    endif
    return false
endfunction

function GetNearestUnit takes unit u, real maxdist returns unit
    set n_dx = GetUnitX(u)
    set n_dy = GetUnitY(u)
    set n_dsSq = maxdist*maxdist
    call GroupEnumUnitsInRange(GG, n_dx, n_dy, maxdist, Filter(function GetNearestUnitFilter))
    return n_un
endfunction


// Жон, код писался для отдельно взятого человека, плохо знающего jass и уж тем более не использующего преимущества джасс-хелпера, так что переписывать под генпак не нужно было. Кто юзает его, тот разберется. © swdn

Отредактировано ShadoW DaemoN, 24.09.2008 в 14:14.
Старый 24.09.2008, 12:52
Desert_Claw
The Savior
offline
Опыт: 529
Активность:
Всем Спасибо!!!
Старый 24.09.2008, 13:02
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
set n_dsSq = maxdist*maxdist

имхо считать константой, т.е. не перемножать, а сразу сообщать перемноженное)
Старый 24.09.2008, 14:21
Закрытая тема

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

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

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

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



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