Решил написать и сразу перевести в нормальное состояние вот такой код.
Герой использует на союзнике способность, союзнику дается перерождение и вешается спецэффект на грудь( сияние типа броня) действует пока он жив. Когда умирает, то воскрешается и спецэффект удаляется. Все примитивно просто, но возникли большие проблемы в правильностью написания кода. Именно ошибки в самом синтаксисе
  • Ругается на то, что локальную u не видит, хоть она и объявлена.
  • Ругается на, что заменил условие что он не мертв, на
   return ( GetUnitState(u, UNIT_STATE_LIFE) <= 0 )
Код как он есть ниже. Заранее благодарю function
Trig_First_pit______________________2__________________________________________u_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A08B' ) ) then
        return false
    endif
    return true
endfunction

function Trig_First_pit______________________2__________________________________________u_Func007001 takes nothing returns boolean
    return ( GetUnitState(u, UNIT_STATE_LIFE) <= 0 )
endfunction

function Trig_First_pit______________________2__________________________________________u_Actions takes nothing returns nothing
    local effect a
    local unit u
    set u = GetSpellTargetUnit()
      call UnitAddAbility( u,'A08C' )
      set bj_lastCreatedEffect = AddSpecialEffectTarget(u,"chest", "manaFlareTarget.mdx" )
    set a = bj_lastCreatedEffect
    loop
        exitwhen ( Trig_First_pit______________________2__________________________________________u_Func007001() )
        call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
    endloop
     call DestroyEffect (a)
    set u= null
    set a= null
endfunction

//===========================================================================
function InitTrig_First_pit______________________2__________________________________________u takes nothing returns nothing
    set gg_trg_First_pit______________________2__________________________________________u = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_First_pit______________________2__________________________________________u, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_First_pit______________________2__________________________________________u, Condition( function Trig_First_pit______________________2__________________________________________u_Conditions ) )
    call TriggerAddAction( gg_trg_First_pit______________________2__________________________________________u, function Trig_First_pit______________________2__________________________________________u_Actions )
endfunction

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

Ориентируюсь по образцу: Модель, виджет, точки крепления
Но я честно не знаю, как правильно присваивать спецэффект кодом именно с локальной!
Сам написал ответ и сам указал в коде по другому :D
Первый параметр - модель. Не юнит, а модель.
set bj_lastCreatedEffect = AddSpecialEffectTarget("manaFlareTarget.mdx", u, "chest")
Надоело уже страдать. Пусть будет как у Лоха через bj по другому я просто не могу понять!
call AddSpecialEffectTargetUnitBJ( "chest", u, "ManaFlareTarget.mdx" )
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
3
26
5 месяцев назад
Отредактирован Hate
3
function Trig_First_pit______________________2__________________________________________u_Func007001 takes nothing returns boolean
return ( GetUnitState(u, UNIT_STATE_LIFE) <= 0 )
endfunction
где тут объявлена u?

учитесь пользоваться форматированием кода. и называть триггеры нормально.

люблю запах gg_trg_First_pit______________________2__________________________________________u по утрам
0
20
5 месяцев назад
0
Там же есть локальная u
2
25
5 месяцев назад
2
Ну как бы по факту. В этой функции НЕТ локальной переменной u.
Я показал стрелками слева НАЧАЛО функции и КОНЕЦ функции. Между ними НЕТ создания или получения переменной u. Справа даже подмечено, что мы ничего в эту функцию не получаем. Но зато пытаемся использовать переменную, которая эта функция не видит.

Локальные переменные на то и локальные, что видны лишь в контексте одного блока кода, а снаружи (или в других функциях) они не видны. Их можно передавать через параметры разве что.

Читай, как работают функции, как в них передавать твои переменные в виде параметров.
Загруженные файлы
0
20
5 месяцев назад
0
Ну как бы по факту. В этой функции НЕТ локальной переменной u.
Я показал стрелками слева НАЧАЛО функции и КОНЕЦ функции. Между ними НЕТ создания или получения переменной u. Справа даже подмечено, что мы ничего в эту функцию не получаем. Но зато пытаемся использовать переменную, которая эта функция не видит.

Локальные переменные на то и локальные, что видны лишь в контексте одного блока кода, а снаружи (или в других функциях) они не видны. Их можно передавать через параметры разве что.
Вот же она ниже один раз объявлена?
Загруженные файлы
0
25
5 месяцев назад
Отредактирован konvan5
0
Вот добавил параметр твоей функции:
function Trig_First_pit______________________2__________________________________________u_Func007001 takes unit u returns boolean
return ( GetUnitState(u, UNIT_STATE_LIFE) <= 0 )
endfunction

А вот как ее передать:
exitwhen ( Trig_First_pit______________________2__________________________________________u_Func007001(u) )

Вот же она ниже один раз объявлена?
Это разные функции, разные блоки кода, разные области видимости. Они друг-друга не видят.

И ты это можешь проследить по слова function - как начало блока кода, и endfunction как конец. За пределами этих двух слов твою локальную переменную нигде не видно.
0
25
5 месяцев назад
0
Вот 2 изменения, которые исправят твою проблему.
Загруженные файлы
2
26
5 месяцев назад
2
Там же есть локальная u
тоесть то, что это именно ЛОКАЛЬНАЯ переменная для тебя ничего не значит?
0
20
5 месяцев назад
0
((цитата
Там же есть локальная u
))Я понимаю, что это локальная, для того она мне и нужна, чтобы перезаписывалась. Пока ничего не получатеся
тоесть то, что это именно ЛОКАЛЬНАЯ переменная для тебя ничего не значит?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.