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

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

Ответ
 
MpW

offline
Опыт: 49,815
Активность:
приказ внутри цикла
Нужна помощь, я хотел циклом проверять каждого юнита в группе, а потом кастовать на нем с помощью дамми, и уже удалять его из группы, а он либо не работает, или срабатывает один раз. На ум приходит только приказ, отданный дамми. Как решить такую проблему (только не надо там вейтов, и таймеров, мне нужно чтоб сразу работало)?

Код:
local unit u = GetSpellAbilityUnit()
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    local group g = CreateGroup()
    local unit e
    local unit dummi
    call GroupEnumUnitsInRange(g, x, y, 510., null)
    set dummi = CreateUnit(GetOwningPlayer(u), 'e005', x, y, bj_UNIT_FACING)
    call UnitAddAbility( dummi,'A08H')
    loop
        exitwhen e == null
        set e = FirstOfGroup(g)  
        if IsUnitAlly(e, GetOwningPlayer(u)) == true then
            call IssueTargetOrder( dummi, "antimagicshell", e )
        endif
        call GroupRemoveUnit(g, e)
    endloop
    call UnitApplyTimedLife( dummi, 'BTLF', 1.00 )
    call DestroyGroup(g) 
   set u = null
   set g = null
   set e = null
   set dummi = null

Возможно проблема где то решалась, только не смог найти подходящий ответ.

Steal nerves добавил:
:(

Отредактировано Steal nerves, 18.06.2011 в 20:16.
Старый 18.06.2011, 20:17
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Ты хочешь чтобы 1 даммик успел скастовать щит на всех в групе за один заход?Либо тебе надо внутри цикла каждому юниту создавать дамика своего и приказывать кастовать,либо попробовать у дамика задержку от анимаций каста и повороты убрать
Старый 18.06.2011, 20:24
spellwerk

offline
Опыт: 4,869
Активность:
Да, скорее всего дамми просто не успевает кастануть заклинание.
Делай лучше через ForGroup или через кондишн и GroupEnumUnitsInRange, а не циклом
Старый 18.06.2011, 20:31
MpW

offline
Опыт: 49,815
Активность:
Spy_, так что ли? не понял насчет кондишн (что туда я запишу?)
Код:
function Sad takes nothing returns nothing
    local unit u1 = GetSpellAbilityUnit()
    local unit u2 = GetEnumUnit()
    local real x = GetUnitX(u1)
    local real y = GetUnitY(u1)
    local unit dummi = CreateUnit(GetOwningPlayer(u1), 'e005', x, y, bj_UNIT_FACING)
    call UnitAddAbility( dummi,'A08H')
    if IsUnitAlly(u2, GetOwningPlayer(u1)) then
        call IssueTargetOrder( dummi, "antimagicshell", u2 )
    endif
    call UnitApplyTimedLife( dummi, 'BTLF', 1.00 )
    set u1 = null
    set u2 = null
    set dummi = null
    

endfunction

function SS_Actions takes nothing returns nothing
    local unit u = GetSpellAbilityUnit()
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    local group g = CreateGroup()
    call GroupEnumUnitsInRange(g, x, y, 510., null)
    call ForGroup( g, function Sad )
    call GroupClear(g)
    call DestroyGroup(g)
    set g = null
    set u = null
endfunction

Не знаю успевает ли он всех щитом наделить (максимум 3-4), похоже что нет : (, все проверил работает, не люблю ForGroup из-за отдельной функции. Потом с локальными переменными проблема.

Steal nerves добавил:
Nerevar, да так и хочу : )

Отредактировано Steal nerves, 18.06.2011 в 20:49.
Старый 18.06.2011, 20:39
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
Steal_nerves, создавай даммика в цикле - должно помочь, но будет ресурсозатратно. и таймед лайф делай тоже в цикле
Srezik добавил:
Spy_:
или через кондишн и GroupEnumUnitsInRange, а не циклом
что это даст? 1 дамми по любому не кастанёт на всех .
Старый 18.06.2011, 20:51
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
local unit u = GetSpellAbilityUnit()
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    local group g = CreateGroup()
    local unit e
    local unit dummi
    call GroupEnumUnitsInRange(g, x, y, 510., null)
    call UnitAddAbility( dummi,'A08H')
    loop
        exitwhen e == null
        set e = FirstOfGroup(g)  
        if IsUnitAlly(e, GetOwningPlayer(u)) == true then
            set dummi = CreateUnit(GetOwningPlayer(u), 'e005', x, y, bj_UNIT_FACING)
            call UnitApplyTimedLife( dummi, 'BTLF', 1.00 )
            call IssueTargetOrder( dummi, "antimagicshell", e )
        endif
        call GroupRemoveUnit(g, e)
    endloop
   call DestroyGroup(g) 
   set u = null
   set g = null
   set e = null
   set dummi = null
так должно работать
Старый 18.06.2011, 21:00
Doc

offline
Опыт: 63,163
Активность:
у меня один дамми кастил стан на 100+ юнитов одновременно, дурачки. все дело в настройках обратная точка броска - 0.00, скорость поворота - 3.
Старый 18.06.2011, 21:03
MpW

offline
Опыт: 49,815
Активность:
Srezik, да не надо уже : ) уж лучше через ForGroup. Я хотел чтоб кто-то подсказал как эту проблему с приказом обойти

Steal nerves добавил:
Doc, а где эту точку броска и скорость поворота найти? РО > войска?
Старый 18.06.2011, 21:06
Doc

offline
Опыт: 63,163
Активность:
Естественно в настройках дамми.
Старый 18.06.2011, 21:16
MpW

offline
Опыт: 49,815
Активность:
Nerevar, Srezik, способ с созданием дамми для каждого юнита не работает. Doc, твой вариант в настройках тоже почему-то не работает. Уверен? только с ForGroup нормально, а с циклом не идет. Все надоело думать.
Старый 18.06.2011, 21:22
Ответ

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

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

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

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



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