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

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

Ответ
 
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,437
Активность:
Приказ на ближайшего юнита.
Прошу прощения если эта тема уже перемыливалась,так как в поиске похожих не нашел.
Задача в следующем:есть юнит А,не имеющий атаки(только жизни,скорость перемещения ну и броню),как приказать ему перемещаться к самому ближайшему юниту из группы юнитов,находящихся вокруг А. То есть по сути мне нужно чтобы подконтрольный ИИ юнит постоянно двигался в сторону ближайшего к нему воина.
Я думал что найду все в действии - "Приказать Юниту А двигаться ????" вместо ????-должна быть позиция ближайшего юнита.
P.S.:извините если невнятно объяснил,суть надеюсь вы уловили =)
Старый 17.09.2012, 16:16
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,266
Активность:
Sladkoegka, через группу, функцией FirstOfGroup()
((код jass
function UnitFilter takes nothing returns boolean
return GetUnitState( GetFilterUnit( ), UNIT_STATE_LIFE ) > 0.00
endfunction
function GetNearbyUnit takes unit whichUnit returtns unit
local group grp = CreateGroup( )
call GroupEnumUnitsInRange( grp, GetUnitX( whichUnit ), GetUnitY( whichUnit ), 10000.00, Condition( function UnitFilter ) )
set bj_lastCreatedUnit = FirstOfgroup( grp )
call DestroyGroup( grp )
return bj_lastCreatedUnit
endfunction
))
Старый 17.09.2012, 16:27
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,437
Активность:
quq_CCCP, Блин я тестил-перетестил,но почему то функция работает некорректо,она просто выбирает рандомного,не ближайшего юнита в группе
Старый 21.09.2012, 15:25
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,266
Активность:
Sladkoegka, попробуй радиус сделать совсем небольшим...
Старый 21.09.2012, 15:28
ScorpioT1000
Работаем
offline
Опыт: отключен
причем тут радиус, тут надо перебрать всех юнитов и сравнить расстояния
Старый 21.09.2012, 15:46
youtube
сктыщь
offline
Опыт: 8,025
Активность:
quq_CCCP, как всегда несешь бред
» хоть и можно написать по проще, но все же работает)
include "cj_types.j"
include "cj_typesEX.j"
globals
    unit Unit
    real X,Y
endglobals
function GetRadius takes void returns bool
    unit u = GetFilterUnit()
    if GetWidgetLife(u) > 0.405 and u!=gg_unit_Hpal_0000
        real x,y,d,x1,y1,d1
        x=GetUnitX(u)
        y=GetUnitY(u)
        x1=GetUnitX(Unit)
        y1=GetUnitY(Unit)
        d=SquareRoot((X-x)*(X-x)+(Y-y)*(Y-y))
        d1=SquareRoot((X-x1)*(X-x1)+(Y-y1)*(Y-y1))
        if Unit==null
            Unit=u
        else
            if d<d1
                Unit=u
            endif
        endif
    endif
    u = null
    return false  
endfunction

function Trig_asd_Actions takes nothing returns nothing
    X=GetUnitX(gg_unit_Hpal_0000)
    Y=GetUnitY(gg_unit_Hpal_0000)
    Unit=null
    GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(gg_unit_Hpal_0000), GetUnitY(gg_unit_Hpal_0000), 1000., Filter(function GetRadius)) 
    if Unit!=null
        DestroyEffect(new effect("Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl",GetUnitX(Unit),GetUnit​Y(Unit)))
        ClearTextMessages()
        BJDebugMsg("X - "+R2S(GetUnitX(Unit))+" | "+"Y - "+R2S(GetUnitY(Unit)))
    endif
endfunction
Прикрепленные файлы
Тип файла: w3m easy win.w3m (16.7 Кбайт, 9 просмотров )
Старый 21.09.2012, 16:03
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,266
Активность:
ScorpioT1000, сначала в групу попадут ближайшие юниты, потом все остальные... у меня в карте работает...
Старый 21.09.2012, 16:20
ScorpioT1000
Работаем
offline
Опыт: отключен
Не совсем, там сортировка по координатам, скорее всего от левого-верхнего угла до правого-нижнего
Старый 21.09.2012, 16:26
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,266
Активность:
ScorpioT1000, ну хотя у меня ланд маленький, и мобы как раз из угла идут, но работает этот метод исправно, мобы идут к ближайшему юниту....
Старый 21.09.2012, 16:30
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,437
Активность:
quq_CCCP, да дам походу именно так и происходит отсев ближайшего юнита(по координатам). Сейчас посмотрю пример youtube,
Старый 22.09.2012, 19:35
DaeDR

offline
Опыт: 8,074
Активность:
Имеет смысл только определение расстояния между целью и юнитом. Иначе возможны баги, например, добавили юнита в группу, он не будет первым, но может оказаться ближайшим.
Старый 22.09.2012, 20:53
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,437
Активность:
youtube, огромное спасибо все робит-тему клоз.
Старый 24.09.2012, 21:04
Ответ

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

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

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

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



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