Хочу научиться джазу, читаю уроки, но возник вопрос:
Не получается вызвать функцию, вызывающую триггер с переменной типа location
вот код:
function Firelocini takes location poz returns nothing
    call TriggerExecute( gg_trg_Fireloc )
endfunction


function Trig_By_the_fire_way_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A003' ) ) then
        return false
    endif
    return true
endfunction


function Trig_By_the_fire_way_Actions takes nothing returns nothing
    local unit u
    local real ang
    local location poz
    local integer i = 0
    local effect array s
    set u = GetSpellTargetUnit()
    set ang = AngleBetweenPoints ( GetUnitLoc(udg_Fireman), GetUnitLoc(u))
    set poz = GetUnitLoc(udg_Fireman)
    call MoveLocation(poz, GetLocationX(poz) + 50 * CosBJ(ang), GetLocationY(poz) + 50 * SinBJ(ang))
loop
 exitwhen i>12      
    set i=i+1
    call MoveLocation(poz, GetLocationX(poz) + 50 * CosBJ(ang), GetLocationY(poz) + 50 * SinBJ(ang))
    call Firelocini (location poz)
endloop 

    call PolledWait( 0.3 )
    
set i=0
loop
 exitwhen i>12
set i=i+1
    call DestroyEffectBJ( s[i] )
set s[i]=null
endloop

    set u=null
    set ang=0
    set i=0
    set poz=null
       
endfunction


//===========================================================================
function InitTrig_By_the_fire_way takes nothing returns nothing
    set gg_trg_By_the_fire_way = CreateTrigger(  )
    call TriggerRegisterUnitEvent( gg_trg_By_the_fire_way, gg_unit_O002_0009, EVENT_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_By_the_fire_way, Condition( function Trig_By_the_fire_way_Conditions ) )
    call TriggerAddAction( gg_trg_By_the_fire_way, function Trig_By_the_fire_way_Actions )
endfunction
А вот триггер который я хочу вызвать
  function Trig_Fireloc_Actions takes location poz returns nothing
  
  call AddSpecialEffectLocBJ( poz, "Doodads\\Cinematic\\FireRockSmall\\FireRockSmall.mdl" )
  
  endfunction

//===========================================================================
function InitTrig_Fireloc takes nothing returns nothing
    set gg_trg_Fireloc = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Fireloc, function Trig_Fireloc_Actions )
endfunction
Мне выдает ошибку на этом моменте
call TriggerExecute( gg_trg_Fireloc )
и на этом
call Firelocini (location poz)
А как мне вызвать функцию с этой переменной тогда? я не понимаю

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

А в чем проблема очистки точки командой
Очистка утечки - не проблема, но:
  • зачем создавать утечку и удалять её, если можно просто не создавать? ))
  • действия с координатами работают быстрее точек
  • нет лишних действий с перемещением точек
Допустим, есть два юнита - u1 и u2. Их координаты:
local real x1 = GetUnitX(u1)
local real y1 = GetUnitY(u1)
local real x2 = GetUnitX(u2)
local real y2 = GetUnitY(u2)
Угол a между ними:
local real a = Atan2(y2-y1, x2-x1)
Точка с координатами (x3;y3), расположенная под углом a на расстоянии 50 от юнита с координатами (x2;y2):
local real x3 = x2+50*Cos(a)
local real y3 = y2+50*Sin(a)
Чтобы создать эффект по координатам:
call AddSpecialEffect("Путь к модели", x3, y3)
Все переменные - локальные.
Необходимо удалить эффект после использования. Или использовать юнитов с ограниченным временем жизни, как пишет prog. В этом случае память очистится после смерти юнита автоматически.
Локальные реальныецелочисленные) переменные не требуют обнуления.
Нет необходимости создавать новый триггер, всё умещается в одном.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
28
5 лет назад
Отредактирован PT153
0
Нельзя создать условие или действие, что требует аргументов.

call Firelocini (location poz)
local l = Location(0., 0.)
call Firelocini (l)
0
8
5 лет назад
Отредактирован VVelikolepniy
0
PT153:
Нельзя создать условие или действие, что требует аргументов.

call Firelocini (location poz)
local l = Location(0., 0.)
call Firelocini (l)
Тогда я могу написать просто
call Firelocini (poz)
но это тоже не работает
0
3
5 лет назад
Отредактирован Vitalik8
0
function Trig_Fireloc_Actions takes location poz returns nothing
call AddSpecialEffectLocBJ( poz, "Doodads\\Cinematic\\FireRockSmall\\FireRockSmall.mdl" )
endfunction
так как без мемхака нельзя такое сделать, тут либо создай глобальную переменую либо мемхак, попробуй это
globals
location loc
endglobals
function Firelocini takes location poz returns nothing
set loc = poz
call TriggerExecute( gg_trg_Fireloc )
endfunction
function Trig_Fireloc_Actions takes nothing returns nothing
call AddSpecialEffectLocBJ( loc, "Doodads\\Cinematic\\FireRockSmall\\FireRockSmall.mdl" )
endfunction
0
28
5 лет назад
0
но это тоже не работает
Это работает, но не так как ты хочешь. То что ты хочешь сделать, так работать не будет, я уже объяснил почему.
Решение Vitalik8 тебе подойдёт.
0
8
5 лет назад
0
Vitalik8:
function Trig_Fireloc_Actions takes location poz returns nothing
call AddSpecialEffectLocBJ( poz, "Doodads\\Cinematic\\FireRockSmall\\FireRockSmall.mdl" )
endfunction
так как без мемхака нельзя такое сделать, тут либо создай глобальную переменую либо мемхак, попробуй это
globals
location loc
endglobals
function Firelocini takes location poz returns nothing
set loc = poz
call TriggerExecute( gg_trg_Fireloc )
endfunction
function Trig_Fireloc_Actions takes nothing returns nothing
call AddSpecialEffectLocBJ( loc, "Doodads\\Cinematic\\FireRockSmall\\FireRockSmall.mdl" )
endfunction
а без чего именно нельзя такое сделать? что это за утилита?
2
24
5 лет назад
2
А зачем вам вобще триггер, если вы вызываете через функцию, а не событиями этого самого триггера?
0
3
5 лет назад
0
0
24
5 лет назад
0
Vitalik8, зачем везде совать мемхак, даже там где он не нужен?
0
3
5 лет назад
0
prog:
Vitalik8, зачем везде совать мемхак, даже там где он не нужен?
Тогда как ты хочеш передавать аргументы в событиях?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.