Я написал систему, которая отображает полученный урон. Но т.к. я новичок в этом деле, мне любопытно, можно ли её сделать лучше, чем сейчас, и будет ли такая система лагать со временем?
Код:
Триггер 1
function Trig_AttackSystem_Conditions takes nothing returns boolean
    return IsUnitInGroup(GetTriggerUnit(), g) == false
endfunction

function Trig_AttackSystem_Actions takes nothing returns nothing
    call GroupAddUnit(g,GetTriggerUnit())
    call TriggerRegisterUnitEvent( gg_trg_AttackSystem1, GetTriggerUnit(), EVENT_UNIT_DAMAGED )
endfunction

//===========================================================================
function InitTrig_AttackSystem takes nothing returns nothing
    local trigger t = CreateTrigger(  )
    local integer index
    set index = 0
    loop
        call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_ATTACKED, null)
        set index = index + 1
        exitwhen index == 15
    endloop
    call TriggerAddCondition( t, Condition( function Trig_AttackSystem_Conditions ) )
    call TriggerAddAction( t, function Trig_AttackSystem_Actions )
    set t = null
endfunction
Триггер 2
function Trig_AttackSystem1_Conditions takes nothing returns boolean
    return GetEventDamage() > 0.00
endfunction

function Trig_AttackSystem1_Actions takes nothing returns nothing
    local texttag tt = CreateTextTag()
    local unit a = GetTriggerUnit()
    local integer damage = R2I(GetEventDamage())
    call SetTextTagText(tt,I2S(damage),11.00*0.023 / 10)
    call SetTextTagPosUnit(tt,a,0.00)
    call SetTextTagColor(tt,70,255,70,0)
    local real vel = 96.00 * 0.071 / 128
    local real xvel = vel * Cos(90 * bj_DEGTORAD)
    local real yvel = vel * Sin(90 * bj_DEGTORAD)
    call SetTextTagVelocity(tt, xvel, yvel)
    call SetTextTagPermanent(tt,false)
    call SetTextTagFadepoint(tt,0.01)
    call SetTextTagLifespan(tt,1.50)
    set tt = null
    set a = null
endfunction

//===========================================================================
function InitTrig_AttackSystem1 takes nothing returns nothing
    set gg_trg_AttackSystem1 = CreateTrigger()
    local trigger t = gg_trg_AttackSystem1
    call TriggerAddCondition( t, Condition( function Trig_AttackSystem1_Conditions ) )
    call TriggerAddAction( t, function Trig_AttackSystem1_Actions )
    set t = null
endfunction
Триггер 3
function Trig_AttackSystem2_Conditions takes nothing returns boolean
    return IsUnitInGroup(GetTriggerUnit(),g) == true 
endfunction

function Trig_AttackSystem2_Actions takes nothing returns nothing
    call GroupRemoveUnit(g,GetTriggerUnit())
endfunction

//===========================================================================
function InitTrig_AttackSystem2 takes nothing returns nothing
    local trigger t = CreateTrigger(  )
    local integer index
    set index = 0
    loop
        call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_DEATH, null)
        set index = index + 1
        exitwhen index == 15
    endloop
    call TriggerAddCondition( t, Condition( function Trig_AttackSystem2_Conditions ) )
    call TriggerAddAction( t, function Trig_AttackSystem2_Actions )
    set t = null
endfunction

Принятый ответ

боже
ловить атакованных юнитов это нафиг не нужная жесть
лови юнитов которые входят на карту и добавляй им событие
юнит может войти на карту только однажды(если не извращаться специально) так что лишних срабатываний не будет
и на 1 триггер меньше так как группа не нужна и отлов смерти тоже
в общем смотри статьи и наработки
0
10
8 лет назад
0
Зачем придумывать велосипед? уже есть подобные системы а вот насчет кода то люди не очень любят в нем ковыряться.
3
28
8 лет назад
3
боже
ловить атакованных юнитов это нафиг не нужная жесть
лови юнитов которые входят на карту и добавляй им событие
юнит может войти на карту только однажды(если не извращаться специально) так что лишних срабатываний не будет
и на 1 триггер меньше так как группа не нужна и отлов смерти тоже
в общем смотри статьи и наработки
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.