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

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

Ответ
 
WeendVidente

offline
Опыт: 2,092
Активность:
Всем носителям баффа по абиле!
Как взять всех носителей баффа и выдать им по способности, а когда они бафф потеряют, то способность отобрать, желательно без проверок-сто-раз-в-секунду, есть ли функции которые отслеживают появление и исчезание эффектов?
З.Ы. Бафф - это аура, воздействию которой подвержены юниты ВСЕХ игроков
Старый 05.06.2013, 15:43
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
есть ли функции которые отслеживают появление и исчезание эффектов?
нет
делай через
проверок-сто-раз-в-секунду
Старый 05.06.2013, 15:44
WeendVidente

offline
Опыт: 2,092
Активность:
Жаль, спасибо.

Закрывайте.
Старый 05.06.2013, 16:02
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
WeendVidente, помещаешь в группу юнитов овнеров осеменителей аурой. Вокруг них пикай юнитов и производи действия. Пикать всех юнитов на карте, проверять на баф и тд - не торт.
Старый 05.06.2013, 17:52
DioD

offline
Опыт: 45,134
Активность:
неужели люди не понимают что сам варкрафт сделан на основе клок генератора который 99999 раз в секунду обрабатывает все объекты по очереди?
много чего другого сделано точно также и иначе оно не делается в принципе так как метод карусели самый оптимальный и доступный.
Старый 05.06.2013, 18:53
WeendVidente

offline
Опыт: 2,092
Активность:
DioD, боюсь, что тормоза будут, хотя в принципе этот страх не имеет под собой основы.
Старый 05.06.2013, 19:13
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
WeendVidente, не будешь говнокодить, не будет никаких траблов.
Старый 05.06.2013, 19:26
DioD

offline
Опыт: 45,134
Активность:
блоками обрабатывайте с ожиданиями и прерываниями и не будет никаких траблов, думать надо конечно и синхронизацию изменений писать, но оно того стоит.
Старый 06.06.2013, 13:08
WeendVidente

offline
Опыт: 2,092
Активность:
Создал два отряда:
-Носители ауры
-Те кто попали под воздействие ауры
Часть с добавлением абилы работает, но теперь немогу убрать ее. Делаю двойным перебором (пока что на гуи, мне так легче ориентироватся): беру второй отряд, и в нем хочу выбрать тех, кто вне пределов досягаемости ауры, но не нахожу функции которая возвращала бы любого юнита из отряда, (Random unit же не то). Вижу выход только в занесении юнитов в массивы, так ли это?
Миниатюры
Кликните на картинку для увеличения
Название:  Косяк.JPG
Просмотров: 25
Размер:  63.2 Кбайт  
Старый 09.06.2013, 19:15
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
а проверять периодически расстояние не судьба?
Hate добавил:
можно же взять юнита, энумнуть ближайших, и если там нету чувака с абилкой, то убрать баф
Старый 09.06.2013, 19:22
Goodie

offline
Опыт: 2,825
Активность:
WeendVidente,
гг, у тебя добавляется способность каждые 0.5 сек и удаляется видимо в то же время
А так если есть UMWSE то там есть условие, что юнит на расстоянии таком то от юнит
Старый 09.06.2013, 19:23
WeendVidente

offline
Опыт: 2,092
Активность:
))) ото ж я тупо-ой...


Только не смейтесь... И не плачьте тоже.

Код:
function GroupFilter takes nothing returns boolean
    return IsUnitInGroup(GetFilterUnit(), udg_Bands[50])
endfunction

function Trig_CoverPeriodic_Func001A takes nothing returns nothing
    call GroupEnumUnitsInRange(udg_Bands[49], GetUnitX(GetEnumUnit()), GetUnitY(GetEnumUnit()), 250, Filter(function GroupFilter))
endfunction

function Trig_CoverPeriodic_Actions takes nothing returns nothing
    call ForGroupBJ( udg_Bands[49], function Trig_CoverPeriodic_Func001A )    
endfunction

//===========================================================================
function InitTrig_CoverPeriodic takes nothing returns nothing
    set gg_trg_CoverPeriodic = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_CoverPeriodic, 0.50 )
    call TriggerAddAction( gg_trg_CoverPeriodic, function Trig_CoverPeriodic_Actions )
endfunction


WeendVidente добавил:
Goodie, я эту функцию нашел, но что писать вместо юнита раздающего ауру так и не придумал, так как нет ничего, что возвращало бы любого юнита из группы или любого юнита определенного типа. Собственно поэтому я и пришел к выводу что необходимо загонять все в массивы.

Отредактировано WeendVidente, 09.06.2013 в 22:40.
Старый 09.06.2013, 22:45
WeendVidente

offline
Опыт: 2,092
Активность:
Еще есть вот такой вариант, все также рабочий только наполовину, но вроде бы уже поближе к истине: скажите где проблема.

Код:
function Trig_CoversInit_Func002Func001Func001C takes nothing returns boolean
    if ( not ( IsUnitInGroup(GetEnumUnit(), udg_Bands[49]) == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_CoversInit_Func002Func001A takes nothing returns nothing
    if ( Trig_CoversInit_Func002Func001Func001C() ) then
        call UnitAddAbilityBJ( 'Adef', GetEnumUnit() )
        call GroupAddUnitSimple( GetEnumUnit(), udg_Bands[49] )
    else
    endif
endfunction

function Trig_CoversInit_Func002A takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRangeOfLocAll(250.00, GetUnitLoc(GetEnumUnit())), function Trig_CoversInit_Func002Func001A )
endfunction

function Trig_CoversInit_Func003A takes nothing returns nothing
    local unit u
    local group g1
    local group g2
    set udg_Bands[48] = GetUnitsInRangeOfLocAll(250.00, GetUnitLoc(GetEnumUnit()))
    set g1=udg_Bands[48]
    set g2=udg_Bands[48]
    loop
       set u=FirstOfGroup(g1)
       if (IsHeroUnitId('h00K')) then
         return
       endif
       exitwhen u == null
    endloop
    call UnitRemoveAbilityBJ( 'Adef', GetEnumUnit() )
    call GroupRemoveUnitSimple( GetEnumUnit(), udg_Bands[48] )
    call DestroyGroup(g1)
    call DestroyGroup(g2)
    set g1=null
    set g2=null
    set u=null
endfunction

function Trig_CoversInit_Actions takes nothing returns nothing
    set udg_Bands[50] = GetUnitsOfTypeIdAll('h00K')
    call ForGroupBJ( udg_Bands[50], function Trig_CoversInit_Func002A )
    call ForGroupBJ( udg_Bands[49], function Trig_CoversInit_Func003A )
    call DestroyGroup(udg_Bands[48])
    call DestroyGroup(udg_Bands[49])
    call DestroyGroup(udg_Bands[50])
endfunction

//===========================================================================
function InitTrig_CoversInit takes nothing returns nothing
    set gg_trg_CoversInit = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_CoversInit, 0.50 )
    call TriggerAddAction( gg_trg_CoversInit, function Trig_CoversInit_Actions )
endfunction
Старый 10.06.2013, 02:54
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
нет дебага - давай досвидания
Старый 10.06.2013, 08:03
Ответ

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

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

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

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



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