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

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

Закрытая тема
 
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
Функция "Любой юнит получает урон"
Ув. кодеры! Может, я вас уже и достал, но есть у меня ещё один вопрос: По какому принципу можно отловить на карте любого юнита, которому наносится урон?
Событие TriggerRegisterAnyUnitEventBJ(tr,ConvertPlayerUnitEvent(18)) здесь не прокатит, потому как юнит атакован, а вот урон мб ему не нанесён.
Старый 18.10.2009, 14:55
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
function Trig_Trig_1_Actions takes nothing returns nothing
    call TriggerRegisterUnitEvent( gg_trg_Trig_2, GetEnteringUnit(), EVENT_UNIT_DAMAGED )
endfunction

//===========================================================================
function InitTrig_Trig_1 takes nothing returns nothing
    set gg_trg_Trig_1 = CreateTrigger(  )
    call TriggerRegisterEnterRectSimple( gg_trg_Trig_1, GetPlayableMapRect() )
    call TriggerAddAction( gg_trg_Trig_1, function Trig_Trig_1_Actions )
endfunction
Вот кодец во 2-ой триг ставишь нужные действия=)
Старый 18.10.2009, 15:04
Elf_Stratigo

offline
Опыт: 4,699
Активность:
а чтобы память ещё не захламлялась?
Старый 18.10.2009, 20:44
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
По другому никак
Старый 18.10.2009, 22:03
Kenshi45

offline
Опыт: 605
Активность:
Можешь попробовать мой скрипт, у него нет утечек.
Понадобится хэш глобалка udg_Hash_Table и два триггера

Активация (TDScreate):

Код:
function Trig_TDSupdate_Actions takes nothing returns nothing
// Функция выполняется при нанесении урона
endfunction

function Trig_TDScreate_Actions takes nothing returns nothing
    local trigger TDSupdate = CreateTrigger()
    local unit unitA = GetTriggerUnit()
    if LoadTriggerHandle(udg_Hash_Table,GetHandleId(unitA),0) == null then
        call SaveTriggerHandle(udg_Hash_Table,GetHandleId(unitA),0,TDSupdate)
        call TriggerRegisterUnitEvent( TDSupdate, unitA, EVENT_UNIT_DAMAGED )
        call TriggerAddAction( TDSupdate, function Trig_TDSupdate_Actions )
    endif
    set TDSupdate = null
    set unitA = null
endfunction

//===========================================================================
function InitTrig_TDScreate takes nothing returns nothing
    local region regionA = CreateRegion()
    call RegionAddRect(regionA, bj_mapInitialPlayableArea)
    set gg_trg_TDScreate = CreateTrigger()
    call TriggerRegisterEnterRegion(gg_trg_TDScreate, regionA, null)
    call TriggerAddAction( gg_trg_TDScreate, function Trig_TDScreate_Actions )
    set regionA = null
endfunction



Деактивация (TDSdestroy):

Код:
function Trig_TDSdestroy_Conditions takes nothing returns boolean
    return not(IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO))
endfunction

function Trig_TDSdestroy_Actions takes nothing returns nothing
    local unit unitA = GetTriggerUnit()
    local trigger TDSupdate = LoadTriggerHandle(udg_Hash_Table,GetHandleId(unitA),0)
    if TDSupdate != null then
        call DestroyTrigger(TDSupdate)
        call RemoveSavedHandle(udg_Hash_Table,GetHandleId(unitA),0)
    endif
    set TDSupdate = null
    set unitA = null
endfunction

//===========================================================================
function InitTrig_TDSdestroy takes nothing returns nothing
    local integer indexA = 0
    set gg_trg_TDSdestroy = CreateTrigger()
    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_TDSdestroy, Player(indexA), EVENT_PLAYER_UNIT_DEATH, null)
        set indexA=indexA+1
        exitwhen indexA==13
    endloop
    call TriggerAddCondition( gg_trg_TDSdestroy, Condition( function Trig_TDSdestroy_Conditions ) )
    call TriggerAddAction( gg_trg_TDSdestroy, function Trig_TDSdestroy_Actions )
endfunction


Если разберёшься, можешь под себя переписать.
Старый 21.10.2009, 20:43
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
ну в принцепе можно сделать триг с событием получил "боевая единица атакована" и с условием получил ли он урон! Там вроде бы есть такое условие
Старый 22.10.2009, 14:00
XOR

offline
Опыт: 38,159
Активность:
Атакована, но не получила урон
Есть старый добрый способ, даже на гуи
Событие- юнит атакован
Действие- Добавить к триггеру х событие((атакованный юнит)получает урон
Старый 22.10.2009, 14:27
agentex

offline
Опыт: 34,834
Активность:
XiMiKs, а если юнит еще не был атакован, и на него кастят спелл? автору ведь любой дамаг ловить надо
Старый 22.10.2009, 14:39
Elf_Stratigo

offline
Опыт: 4,699
Активность:
XiMiKs, и тогда после смерти этого юнита из под него не высбободится память ибо будет существовать указатель (
Старый 22.10.2009, 14:50
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
agentex:
а если юнит еще не был атакован
тогда без первого события
Старый 22.10.2009, 15:31
ZeToX2007

offline
Опыт: 7,009
Активность:
Отлавливать каждого юнита и добовлять событие в нужный триггер О_о в Gui helper (gui++) всё этш будет реализовано без гемороя.
Старый 25.10.2009, 11:25
XOR

offline
Опыт: 38,159
Активность:
ну тогда добавить условие что атакованный юнит мертв или нет, а вообще как в аосах при смерти добивать, если утечка и будет то мизерная
Старый 25.10.2009, 12:56
Закрытая тема

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

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

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

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



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