Возможно ли это сделать в жассе без использования структур?
Если кто не понял у меня есть функции которые ссылаются друг на друга, но т.к одна выше другой то сделать это невозможно.

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

quq_CCCP, это не ии а просто тупо спаун мобов вокруг босса) типо его постоянная свита) Там есть команда на атаку но она сделана тупо для того чтобы заспауненые войны не тупили в сторонке а бежали к своему главному атакую противников по дороге) Впринципе можно воткнуть тригер смерти в переодик с ветвлением но в будующем мне все равно придется юзать тригер на смерть для создания взрыва на месте юнита и не только.
Я нашел решение просто изменил структуру кода) теперь все ок) Спасибо всем кто отозвался.
0
26
7 лет назад
0
во первых, с точки зрения дизайна зачем так делать?
во вторых, можно делать экзекут функции, если обстоятельства позволяют
0
12
7 лет назад
0
Hate:
во первых, с точки зрения дизайна зачем так делать?
во вторых, можно делать экзекут функции, если обстоятельства позволяют
экзекут сделать нельзя функция передается в таймер.
function BOSSgnoll_comander_mob_death takes nothing returns nothing
        local unit u = GetTriggerUnit ()
        local trigger trig = GetTriggeringTrigger ()
        local group gr = LoadGroupHandle ( HASH, GetHandleId ( trig ), 'ugrp' )
        local timer t = CreateTimer ()
        
        call TimerStart ( t, 30.0, false, function BOSSgnoll_comander_add_spawn ) //собсно то самое проблемное место
        
        call GroupRemoveUnit ( gr, u )
 
        call FlushChildHashtable ( HASH, GetHandleId ( trig ) )
        call DestroyTrigger ( trig )
        set u = null
        set trig = null
        set t = null
    endfunction
    
    function BOSSgnoll_comander_add_spawn takes nothing returns nothing
        local timer t = GetExpiredTimer ()
        local integer t_id = GetHandleId ( t )
        
        local unit u = LoadUnitHandle ( HASH, t_id, 'unit' )
        local integer lim = LoadInteger ( HASH, t_id, 'ulim' )
        local group gr = LoadGroupHandle ( HASH, t_id, 'ugrp' )
        
        local real dist
        local real ang
        local real x = GetUnitX ( u )
        local real y = GetUnitY ( u )
        local unit u_new 
        local integer cnt = CountUnitsInGroup  ( gr )
        
        local trigger trig = null
        
        local location land = null
        local real x_land
        local real y_land

        if ( cnt < lim ) then
            set dist = GetRandomReal ( 800, 1600 )
            set ang = GetRandomReal ( 0, 360 )
            set land = msc_get_landinglocation ( x, y, dist, ang, 50, 0, 0 )
            set x_land = GetLocationX ( land )
            set y_land = GetLocationY ( land )
            call RemoveLocation ( land )
            set dist = msc_dist_between ( x, x_land, y, y_land )
            set ang = ang_beetwen ( x, x_land, y, y_land )
            set x = msc_polar_x ( GetUnitX ( u ), dist, ang )
            set y = msc_polar_y ( GetUnitY ( u ), dist, ang )
            set u_new = CreateUnit ( GetOwningPlayer ( u ), 'n005', x, y, ang - 180 )
            call IssuePointOrder ( u_new, "attack", GetUnitX ( u ), GetUnitY ( u ) )
            call SpawnManager.add_to_group ( u_new )
            call msc_fade_effect ( u_new, 3.0, -1, null )
            
            set trig = CreateTrigger ()
            call TriggerRegisterUnitEvent( trig, u_new, EVENT_UNIT_DEATH )
            call TriggerAddAction( trig, function BOSSgnoll_comander_mob_death )
            call SaveGroupHandle ( HASH, GetHandleId ( trig ), 'ugrp', gr )
            call SaveTimerHandle ( HASH, GetHandleId ( trig ), 'time', t )
            
            call GroupAddUnit ( gr, u_new )
        endif
    
        set t = null
        set u = null
        set u_new = null
        set trig = null
    endfunction
0
26
7 лет назад
0
собственно, не проще делать систему с массивом и перебором, чем делать такой костыль?
один триггер на смерть, и не зачем нужно будет делать такие обходные маневры
0
12
7 лет назад
0
Hate:
собственно, не проще делать систему с массивом и перебором, чем делать такой костыль?
один триггер на смерть, и не зачем нужно будет делать такие обходные маневры
не совсем понял что ты имеешь в виду с перебором массива и зачем он здесь.
Функция ( которая нижняя ) спаунит юнита и добовляет его в группу которая используется для других скиллов босса и создает для этого юнита тригер смерти который служит для того чтобы удалить юнита из группы, и запустить таймер на спаун нового такого же юнита..
0
16
7 лет назад
0
ExecuteFunc + globals
0
15
7 лет назад
0
Может можно сделать так Таймер -> функция F. А фукнция F вызывает через ексекут твою функцию? А хендл таймера через глобалку.
Я не совсем понял, но кажется драгонлич это имел в виду
0
12
7 лет назад
0
EnergyFrost, может и можно но мне надо будет передать через хэш в ту функцию юнита ( босса ), группу и лимит юнитов, а через екзекут такое дело не проканает. Так что видимо придется какой-то дикий костыли иззобретать) Ну и собсо как я понял предопределить функцию нельзя в Жассе а жаль)
0
16
7 лет назад
0
globals
unit myUnit1
group myGroup1
integer myUnitLimiter1
endglobals
function B takes nothing returns nothing
set myUnit1=GetTriggerUnit()
...
call ExecuteFunc("C")
endfunction
function A takes unit u, group g, integer limit returns nothing
..
endfunction
function C takes nothing returns nothing
call A(myUnit1,myGroup1,myUnitLimiter1)
endfunction
функцию B вызываешь где нужно, C под A, и таким макаром из любого места. А ты как хотел?
Ну можно и через таймер через code, но суть не изменит - передать парам нельзя напрямую, поэтому костыль в руки и вперед
2
12
7 лет назад
2
Походу придется в структуру через статичные функции сделать) Там порядок следования функций не важен
0
22
7 лет назад
0
EvilPenguin:
Походу придется в структуру через статичные функции сделать) Там порядок следования функций не важен
А ты еще писал "не хочу, не буду". Надо значит надо! :)
2
32
7 лет назад
2
Переодик таймер не? Он вызывает одну и ту же функцию где ты ветвлением делаешь все что заблагорассудится...
Да и довольно странная организация кода, ии можно реализовать и попроще без этих таймеров.
0
12
7 лет назад
0
quq_CCCP, это не ии а просто тупо спаун мобов вокруг босса) типо его постоянная свита) Там есть команда на атаку но она сделана тупо для того чтобы заспауненые войны не тупили в сторонке а бежали к своему главному атакую противников по дороге) Впринципе можно воткнуть тригер смерти в переодик с ветвлением но в будующем мне все равно придется юзать тригер на смерть для создания взрыва на месте юнита и не только.
Я нашел решение просто изменил структуру кода) теперь все ок) Спасибо всем кто отозвался.
Принятый ответ
0
16
7 лет назад
0
Типа рекурсии что-то хочешь?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.