Виджет, эффект над головой персонажа не отображается.
По идее должен быть имя, виджет и аттач, но в таком порядке варик ругается.
Написал как аттач, имя и виджет. В таком виде ошибки нет, но виджет не отображается на персонаже, в чем моя ошибка?
function Trig_CarbaneSpeedUp_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A02H' ) ) then
return false
endif
if ( not ( GetSpellAbilityUnit() == udg_Sveta ) ) then
return false
endif
return true
endfunction
function Trig_CarbaneSpeedUp_Actions takes nothing returns nothing
local effect u
call UnitRemoveAbility( udg_Sveta,'A0CG')
call UnitAddAbility( udg_Sveta,'A04E' )
set bj_lastCreatedEffect = AddSpecialEffectTarget( "overhead", udg_Sveta, "Buff_Speed Up.mdx" )
set u = bj_lastCreatedEffect
call UnitAddAbility( udg_Sveta,'A04E' )
call WAIT_EX(20.)
call UnitRemoveAbility(udg_Sveta, 'A04E' )
call UnitAddAbility( udg_Sveta,'A0AM' )
call DestroyEffect( u)
set u = null
endfunction
===========================================================================
function InitTrig_CarbaneSpeedUp takes nothing returns nothing
set gg_trg_CarbaneSpeedUp = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_CarbaneSpeedUp, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_CarbaneSpeedUp, Condition( function Trig_CarbaneSpeedUp_Conditions ) )
call TriggerAddAction( gg_trg_CarbaneSpeedUp, function Trig_CarbaneSpeedUp_Actions )
endfunction

SсRealm, сначала
ПУТЬ
ЮНИТ(ВИДЖЕТ)
АТТАЧ
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
15
  1. Переделай эту строчку
set bj_lastCreatedEffect = AddSpecialEffectTarget( "overhead", udg_Sveta, "Buff_Speed Up.mdx" )
set u = bj_lastCreatedEffect
в одну, ибо натворил какую-то кашу с этими бловжобами
set u = AddSpecialEffectTarget( "overhead", udg_Sveta, "Buff_Speed Up.mdx" )
Ответы (3)
21
Netherstorm, blowJob, ору!😂😂😂😂

Не работает, потому что в таком случаи я присваиваю локалку к необъявленному эффекту!
15
SсRealm, да у тебя и так не работает, не уверен что из-за этого
А так, ты объявляешь локалку к только-что созданному эффекту действием. Это всегда работало. Можно всегда в местах, где требуется юнит/декор/эффект например KillUnit() писать команду CreateUnit. И также задавать значение, вместо юзания GetLastCreatedEffect(). Плюс интересный факт, можно так одноразовый эффект создать(чтобы проигрался он и удалился, написав DestroyEffect(CreateEffect( ) ), поэтому должно работать.
15
SсRealm, проверь путь эффекта, может там ошибку натворил
15
ScRealm, поздравляю, ты все перепутал

set bj_lastCreatedEffect = AddSpecialEffectTarget( "overhead", udg_Sveta, "Buff_Speed Up.mdx" )

AddSpecialEffectTarget( "Buff_Speed Up.mdx", udg_Sveta, "overhead", )
Загруженные файлы
Ответы (5)
23
Хорошо бы ещё код в порядок привести))
Например так

function Trig_CarbaneSpeedUp_Actions takes nothing returns nothing
local effect u = null

    if GetSpellAbilityId() == 'A02H' and GetSpellAbilityUnit() == udg_Sveta then

        call UnitRemoveAbility( udg_Sveta,'A0CG')
        call UnitAddAbility( udg_Sveta,'A04E' )
        set u = AddSpecialEffectTarget( "Buff_Speed Up.mdx", udg_Sveta, "overhead" )
        call UnitAddAbility( udg_Sveta,'A04E' )
         call WAIT_EX(20.)
         call UnitRemoveAbility(udg_Sveta, 'A04E' )
         call UnitAddAbility( udg_Sveta,'A0AM' )
         call DestroyEffect(u)

    endif

set u = null
endfunction
===========================================================================
function InitTrig_CarbaneSpeedUp takes nothing returns nothing
set gg_trg_CarbaneSpeedUp = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_CarbaneSpeedUp, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction( gg_trg_CarbaneSpeedUp, function Trig_CarbaneSpeedUp_Actions )
endfunction
Ну чтоб прежде всего самому читаемо было, да и нам тоже)
Ответы (7)
21
EugeAl, Ух, ты. А я понимаю. Вместо равно ложь и равно вправда в условиях можно просто написать = и так так в синтаксисе тоже работает?
21
Объясни, а почему u обнуляется дважды? Я не могу понять логики?
15
SсRealm, сначала он объявляется с nullом, потом обнуляется.Хз зачем, у всех кодеров свои приколы.
  1. Конечно работает, многие так и делают в коде, не делают отдельную функцию на Condition а пишут сразу в действиях условии.
Так, можно создать 1 триггер на спелл, и внутри действия лишь проверять if endifом че за тип спелла. Но так быстрее и лучше карте.
23
SсRealm, да, как выше написали, можно сколько угодно делать if then endif и сколько угодно вкладывать их друг в друга. И вместо a == b можно и условие вставить, например другую function которая returns boolean (!)
If aaaa == bbbb then

    call jjjjj
    if IsUnitType(udg_sss, UNIT_TYPE_HERO ) then
        call kkkkk
    endif

    if n then // тут логическая переменная n
         call vvvv
    endif

endif
Писать сразу a = null это привычка, на всякий случай, плюс из за копипаста из других function
Просто у языков программирования есть косяк, что если переменная не обнулена сразу, то она "не имеет значения внутри себя" и если к ней что либо потом обратится, то там выйдет не 0 или не null
23
SсRealm, по поводу Condition
В принципе они не нужны. Они представляют собой добавление фильтра boolexpr, который тебе потребуется только в 2 случаях
1 - жёстко привязать проверку к событию триггера
2 - сделать аналог массива функций
21
EugeAl, десять лет спустя пользования редактором я наконец узнал,что условия в принципе не нужны.
Пока сложно это переварить. Но так то понятно, что проще написать если а ==b то там уже всякое, чем городить конструкции
23
SсRealm, if a == b then это тоже по сути условие. Просто гуи криво написан, он при написании кода создаёт лишние функции, ещё и отдельно, что не позволяет в них юзать локалки. Причём даже если просто в гуи в действии добавить условие, там тоже криво создаётся. Так что да, всю логику можно ифами делать и не париться)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.