Хочу научиться джазу, читаю уроки, но возник вопрос:
Не получается вызвать функцию, вызывающую триггер с переменной типа location
вот код:
Не получается вызвать функцию, вызывающую триггер с переменной типа 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)
А как мне вызвать функцию с этой переменной тогда? я не понимаю
Принятый ответ
А в чем проблема очистки точки командой
Очистка утечки - не проблема, но:
- зачем создавать утечку и удалять её, если можно просто не создавать? ))
- действия с координатами работают быстрее точек
- нет лишних действий с перемещением точек
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. В этом случае память очистится после смерти юнита автоматически.
Локальные реальные (и целочисленные) переменные не требуют обнуления.
Нет необходимости создавать новый триггер, всё умещается в одном.
Необходимо удалить эффект после использования. Или использовать юнитов с ограниченным временем жизни, как пишет prog. В этом случае память очистится после смерти юнита автоматически.
Локальные реальные (и целочисленные) переменные не требуют обнуления.
Нет необходимости создавать новый триггер, всё умещается в одном.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован prog
Отредактирован VVelikolepniy
prog: С чего вы решили, что я не понимаю? Мне нудо локальную переменную координаты переместить в функцию, которая использует эту координату для дальнейших действий. И у меня 9999 вызовов такойфункции с разными координатами сделать
Maniac_91: А в чем проблема очистки точки командой
Отредактирован VVelikolepniy
Глобальная переменная используется в любом количестве триггеров
Локальная - для конкретного триггера
триггер - реакция на событие
функция - алгоритм берущий один результат и выдающий другой
глобальная переменная - доступна в любом месте
локальная - доступна только в той ФУНКЦИИ в которой объявлена
функция - в рамках jass это самодостаточный фрагмент кода, могущий принимать параметры, содержать локальные переменные и возвращать значение
триггер - конструкция, которая при срабатывании события проверяет условия и вызывает действие если условие выполнено, условия и действия триггера выполнены в виде функций
Кроме того, значение локальной переменной, как и параметров, хранится только в пределах текущего вызова функции - даже если поставить мемхак и вызывать триггер с параметром, триггер никаким магическим образом не запомнит значение параметра для следующих вызовов.
Я бы на твоем месте начал с более простого спела - реализовал бы огоньки юнитами со способностью 'Aloc' (тогда их нельзя будет выделить и атаковать) и с пассивным адским пламенем или пламенем феникса, без дополнительного урона от длительности горения, но зато и без необходимости самостоятельно реализовывать поиск целей и нанесение урона.
Ну и да, локальные переменные типа точки мало обнулять, их перед этим нужно еще удалять соответствующей функцией.
Необходимо удалить эффект после использования. Или использовать юнитов с ограниченным временем жизни, как пишет prog. В этом случае память очистится после смерти юнита автоматически.
Локальные реальные (и целочисленные) переменные не требуют обнуления.
Нет необходимости создавать новый триггер, всё умещается в одном.