Здравствуйте суть моей проблемы в том что когда я обучаю юнита с помощью вот такого кода:
//===========================================================================
function Trig_Tratata_Func002Func007C takes nothing returns boolean 
    if ( not ( udg_Iron_ore > 0 ) ) then
        return false
    endif 
    return true
endfunction

function Trig_Tratata_Func002C takes nothing returns boolean
    if ( not ( GetTrainedUnitType() == 'hrif' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Tratata_Func003C takes nothing returns boolean
    if ( not ( GetTrainedUnitType() == 'hfoo' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Tratata_Actions takes nothing returns nothing
    call RemoveUnit( GetTrainedUnit() )
    if ( Trig_Tratata_Func002C() ) then
        call RemoveItem( GetItemOfTypeFromUnitBJ(gg_unit_hbla_0000, 'rat6') )
        call UnitAddItemByIdSwapped( 'rat3', gg_unit_hbla_0000 )
        call SetPlayerUnitAvailableBJ( 'hrif', true, Player(0) )
        call SetPlayerUnitAvailableBJ( 'hfoo', true, Player(0) )
        call EnableTrigger( gg_trg_Esle )
        if ( Trig_Tratata_Func002Func007C() ) then
            call IssueTrainOrderByIdBJ( gg_unit_hbla_0000, 'hrif' )
        else
            call DoNothing(  )
        endif
    else
        call DoNothing(  )
    endif
    if ( Trig_Tratata_Func003C() ) then
        call RemoveItem( GetItemOfTypeFromUnitBJ(gg_unit_hbla_0000, 'rat3') )
        call RemoveItem( GetItemOfTypeFromUnitBJ(gg_unit_hbla_0000, 'rat3') )
        call RemoveItem( GetItemOfTypeFromUnitBJ(gg_unit_hbla_0000, 'rat3') )
        call UnitAddItemByIdSwapped( 'frgd', gg_unit_hbla_0000 )
        call SetPlayerUnitAvailableBJ( 'hrif', true, Player(0) )
        call SetPlayerUnitAvailableBJ( 'hfoo', true, Player(0) )
        call EnableTrigger( gg_trg_Esle )
    else
    endif
endfunction

//===========================================================================
function InitTrig_Tratata takes nothing returns nothing
    set gg_trg_Tratata = CreateTrigger(  )
    call TriggerRegisterUnitEvent( gg_trg_Tratata, gg_unit_hbla_0000, EVENT_UNIT_TRAIN_FINISH )
    call TriggerAddAction( gg_trg_Tratata, function Trig_Tratata_Actions )
endfunction
//===========================================================================
То после этого я не могу вытаскивать или что либо делать с предметами обучающего
Конкретно скажу что это происходит после этого фрагмента:
//===========================================================================
if ( Trig_Tratata_Func002Func007C() ) then
            call IssueTrainOrderByIdBJ( gg_unit_hbla_0000, 'hrif' )
        else
            call DoNothing(  )
        endif
  • Почему это происходит?
  • Как это исправить?

Опиши что ты хочешь сделать.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
24
Sparrow, если еще существует не конвертированная версия - скриншоты ГУИ, если нет - чистить код до удобочитаемого вида с осмысленными именами и по возможности избавляться от BJ, а потом уже показывать этот код людям. Ну и триггер gg_trg_Esle тоже в студию - нет ли в нем каких-либо реакций на приказы?
upd: скриншот уже увидел, удаление юнита до проверки его типа не самая мудрая мысль.
9
prog:
Sparrow, Ну и триггер gg_trg_Esle тоже в студию - нет ли в нем каких-либо реакций на приказы?
Там просто проверка целочисленной
т.е. переодическое событие которое проверяет равна ли i = n если да то устанавливает доступность обучения к примеру пехотинца,если нет,то наооборот.
Если возникнет вопрос откуда берется эта целочисленная:
Когда обучающий получает определенный предмет то устанавливается целочисленная как количество таких предметов
prog:
удаление юнита до проверки его типа не самая мудрая мысль.
А смысл проверять его тип если мне эти юниты не нужны и после обучения они сразу удаляются.
Мне это нужно лишь для получения предмета
Но если это имеет значение то вы правей меня и если нужно я исправлю
33
А смысл проверять его тип если мне эти юниты не нужны и после обучения они сразу удаляются.
Не знаю, в чём смысл. Но тем не менее, выложенный тобой триггер проверяет тип юнита, который уже удалён. Он нормально определяется?
9
Кет:
А смысл проверять его тип если мне эти юниты не нужны и после обучения они сразу удаляются.
Не знаю, в чём смысл. Но тем не менее, выложенный тобой триггер проверяет тип юнита, который уже удалён. Он нормально определяется?
Определяется тип обученного юнита
т.е обучение какого юнита происходит а что произойдет после уже не имеет значения
Проще скажу:
После обучения он не появляется на карте а сразу удаляется т.к. юнит мне не нужен
=============================================================
Я нашел как это сделать просто добавил вайт перед той злорадной функцией но это не красиво.
Это я к тому что вайты не предлагать
24
но это не красиво.
Правило программиста №2: не вызывает ошибок и работает - не тронь!
Если ты до сих пор не избавился от БЖ - замени
call IssueTrainOrderByIdBJ( gg_unit_hbla_0000, 'hrif' )
на
call IssueImmediateOrderById(gg_unit_hbla_0000, 'hrif')
28
darkowlom, тебе не нравятся бж но на его условия ты внимание не обратил
9
Правило программиста №2: не вызывает ошибок и работает - не тронь!
Это правило хренового программиста ибо качество всегда на первом месте!
28
качество всегда на первом месте!
качество зависит от сроков и оплаты
24
Sparrow, кроме тебя твой код никто не видит, а вид кода на работоспоспособноть влияет редко, хоть справа налево пиши, если работает также хорош
28
darkowlom, он скорее всего имеет ввиду качество работы
хотя качество написания тоже важно
платят как правило за исходник
а за индуский код в исходнике ничего не платят
24
платят как правило за исходник
платят, как правило, за результат, но потом вносить при необходимости изменения в свой залежалый индусский код это дикая боль в известном месте.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.