При использовании loop перестает работать функция, без loop все работает отлично
В чем может быть проблема?
Код:
scope Spell3 initializer Spell3Init {

    bool Spell3Cond() {
    return GetSpellAbilityId() == 'A002'
    }
    
    void Spell3Act2() {
    timer t = GetExpiredTimer()
    int id = GetHandleId(t)
    unit c = LoadUnitHandle( h, id, 1 )
    float x = LoadReal( h, id, 2 )
    float y = LoadReal( h, id, 3 )
    unit d = LoadUnitHandle( h, id, 4 )
    float x1 = GetUnitX(d)
    float y1 = GetUnitY(d)
    player p = GetOwningPlayer(c)
    GroupEnumUnitsInRange( G, x1, y1, 500, null )
    loop
        E = FirstOfGroup(G)
        exitwhen E == null
        if IsUnitEnemy(E,p) and IsUnitType(E,UNIT_TYPE_DEAD) == false and IsUnitType(E,UNIT_TYPE_STRUCTURE) == false
        UnitDamageTarget( c, E, 500, false, false, null, null, null )
        endif
        GroupRemoveUnit( G, E )
    endloop
    KillUnit( d )
    FlushChildHashtable( h, id )
    c = null
    d = null
    t = null
    p = null
    }

    void Spell3Act() {
    unit c = GetSpellAbilityUnit()
    timer t = CreateTimer()
    int id = GetHandleId(t)
    float x = GetUnitX(c)
    float y = GetUnitY(c)
    float f = GetUnitFacing(c)
    player p = GetOwningPlayer(c)
    unit d = CreateUnit( p, 'hfoo', x, y, f )
    UnitAddAbility(d, 'A001' )
    SaveUnitHandle( h, id, 1, c )
    SaveReal( h, id, 2, x )
    SaveReal( h, id, 3, y )
    SaveUnitHandle( h, id, 4, d )
    TimerStart( t, 10.00, false, function Spell3Act2 )
    c = null
    t = null
    p = null
    }


    void Spell3Init() {
    trigger t = CreateTrigger( )
    int i
    i = 0
    loop
        TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        i = i + 1
        exitwhen i == bj_MAX_PLAYER_SLOTS
    endloop
    TriggerAddCondition( t, Condition( function Spell3Cond ) )
    TriggerAddAction( t, function Spell3Act )
    t = null
    }

    }
Помогите пожалуйста!!!

nvc123, У него там отсутствует CreateGroup()
А ещё она в заголовке globals не null'ась

Я о group G
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
во первых советую почитать про рациональное использование таймеров
во вторых
1
nvc123, У моего друга этот спелл работает когда он через свой jngp компилирует, а когда я компилирую через свой нифига не работает циклы вообще отключаются.
28
Leys, добавь отладочные сообщения чтобы понять где обрывается поток
так же проблемма может быть в препроцесере/либах
советую сначала сделать дебаг(отладочные сообщения)
потом глянуть джи файл карты
и если опасения по поводу препроцесора подтвердятся то переустановить джнгп
1
nvc123, Кстати когда установил jngp при компиляции выдавал ошибку Syntax error while-cond ....... зашел в либы Adic Helper,a ,
зашел в cj_types.j удалил строку while(cond) ..... ошибку выдавать перестало. Может быть из за этого loop не работает?
28
Leys, эту строку хорошо что удалил
она баганая слегка
ты отладку покажи
без неё говорить бессмысленно
просто перед каждым вызовом функции сообщай о вызове
например вместо
 GroupEnumUnitsInRange( G, x1, y1, 500, null )
    loop
        E = FirstOfGroup(G)
пиши
BJD("GroupEnumUnitsInRange( G, x1, y1, 500, null )")
 GroupEnumUnitsInRange( G, x1, y1, 500, null )
BJD("loop")
    loop
BJD(" E = FirstOfGroup(G)")
        E = FirstOfGroup(G)
где BJD - функция выводящая на экран текст
когда узнаешь место где останавливается выполнение кода проверь значение переменных используемых в месте остановки
1
nvc123, Все проверил
    BJD("GroupEnumUnitsInRange( G, x1, y1, 500, null )")
    GroupEnumUnitsInRange( G, x1, y1, 500, null )
    BJD("loop")
    loop
        BJD("E = FirstOfGroup(G)")
        E = FirstOfGroup(G)
        BJD("exitwhen E == null")
        exitwhen E == null
        BJD("if IsUnitEnemy(E,p) and IsUnitType(E,UNIT_TYPE_DEAD) == false and IsUnitType(E,UNIT_TYPE_STRUCTURE) == false")
        if IsUnitEnemy(E,p) and IsUnitType(E,UNIT_TYPE_DEAD) == false and IsUnitType(E,UNIT_TYPE_STRUCTURE) == false
        BJD("UnitDamageTarget( c, E, 500, false, false, null, null, null )")
        UnitDamageTarget( c, E, 500, false, false, null, null, null )
        BJD("endif")
        endif
        BJD("GroupRemoveUnit( G, E )")
        GroupRemoveUnit( G, E )
    BJD("endloop")
    endloop
    BJD("KillUnit( d )")
    KillUnit( d )
    BJD("FlushChildHashtable( h, id )")
    FlushChildHashtable( h, id )
Вот где обрывается
Загруженные файлы
28
Leys, перед BJD("GroupEnumUnitsInRange") напиши
if(G==null){
	BJD("G==null")
else
	BJD("G!=null")
	if(FirstOfGroup(G)==null){
		BJD("FirstOfGroup(G)==null")
	else
		BJD(GetUnitName(FirstOfGroup(G)))
	}
}
так мы узнаем существует ли группа и не пуста ли она
и нету ли в ней битых юнитов
если с ней всё в порядке но надо брать j файл и смотреть его
1
nvc123, Посмотрел
((Код
if ( G == null ) {
BJD( "G == null" )
else
BJD( "G! == null" )
if ( FirstOfGroup(G) == null ) {
BJD ( "FirstOfGroup(G) == null" )
else
BJD(GetUnitName(FirstOfGroup(G)))
}
}
))
Ничего не написало.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.