Здравствуйте суть моей проблемы в том что когда я обучаю юнита с помощью вот такого кода:
//===========================================================================
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
  • Почему это происходит?
  • Как это исправить?

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
4
9
10 лет назад
Отредактирован Sparrow
4
Кет:
А смысл проверять его тип если мне эти юниты не нужны и после обучения они сразу удаляются.
Не знаю, в чём смысл. Но тем не менее, выложенный тобой триггер проверяет тип юнита, который уже удалён. Он нормально определяется?
Определяется тип обученного юнита
т.е обучение какого юнита происходит а что произойдет после уже не имеет значения
Проще скажу:
После обучения он не появляется на карте а сразу удаляется т.к. юнит мне не нужен
=============================================================
Я нашел как это сделать просто добавил вайт перед той злорадной функцией но это не красиво.
Это я к тому что вайты не предлагать
5
24
10 лет назад
5
но это не красиво.
Правило программиста №2: не вызывает ошибок и работает - не тронь!
Если ты до сих пор не избавился от БЖ - замени
call IssueTrainOrderByIdBJ( gg_unit_hbla_0000, 'hrif' )
на
call IssueImmediateOrderById(gg_unit_hbla_0000, 'hrif')
4
28
10 лет назад
4
darkowlom, тебе не нравятся бж но на его условия ты внимание не обратил
2
9
10 лет назад
2
Правило программиста №2: не вызывает ошибок и работает - не тронь!
Это правило хренового программиста ибо качество всегда на первом месте!
11
28
10 лет назад
11
качество всегда на первом месте!
качество зависит от сроков и оплаты
4
24
10 лет назад
4
Sparrow, кроме тебя твой код никто не видит, а вид кода на работоспоспособноть влияет редко, хоть справа налево пиши, если работает также хорош
0
28
10 лет назад
0
darkowlom, он скорее всего имеет ввиду качество работы
хотя качество написания тоже важно
платят как правило за исходник
а за индуский код в исходнике ничего не платят
0
24
10 лет назад
0
платят как правило за исходник
платят, как правило, за результат, но потом вносить при необходимости изменения в свой залежалый индусский код это дикая боль в известном месте.
0
28
10 лет назад
Отредактирован nvc123
0
prog, смотря где платят
на фрилансе да
за результат
а если командное задание то за индуский код могут уволить
0
24
10 лет назад
0
индуский код
Так мы об индусском и не говорим,а засунуть вейт это костыль а не индусский код Стандартные триггеры конвертированные в текст- это индусский код
2
28
10 лет назад
2
darkowlom, засунуть вейт это пичаль
а не костыль
darkowlom, и это кстати и есть стандартный триггер конвертированный в текст
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.