XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Гламуррр

offline
Опыт: 35
Активность:
Помогите разобратсья в принципе триггера
Я ток недавно начал делать карты и пока пишу триггеры в редакторе триггеров а не на jass
(в jass я еще не разобрался и почти не разбирался).

Так вот сам триггер состоит в том, что юнит (Охотница) создает с помощью скила 1 мину. Всего 20 уровней скила т.е. 20 типов мин). Надо сделать так, чтобы при создании больше 7 мин автоматически удалялась мина, которая была поставлена раньше других мин. И если одна или несколько мин взорвутся то желательно чтобы этот триггер тож работал .

Только просьба не кидать кусков jass-кода а обьяснить каким макаром мне это все можно будет проделать.

Ну вот что я смог придумать пока у меня не лопнула голова
(триггер конвертирован в текст)


Код:
function Trig_Explosive_trap_x______________________2_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A02B' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Explosive_trap_x______________________2_Func001001002001 takes nothing returns boolean
    return ( IsUnitInGroup(GetFilterUnit(), udg_ExT_other_groups) == false )
endfunction

function Trig_Explosive_trap_x______________________2_Func001001002002001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_ATTACKS_GROUND) == false )
endfunction

function Trig_Explosive_trap_x______________________2_Func001001002002002 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == false )
endfunction

function Trig_Explosive_trap_x______________________2_Func001001002002 takes nothing returns boolean
    return GetBooleanAnd( Trig_Explosive_trap_x______________________2_Func001001002002001(), Trig_Explosive_trap_x______________________2_Func001001002002002() )
endfunction

function Trig_Explosive_trap_x______________________2_Func001001002 takes nothing returns boolean
    return GetBooleanAnd( Trig_Explosive_trap_x______________________2_Func001001002001(), Trig_Explosive_trap_x______________________2_Func001001002002() )
endfunction

function Trig_Explosive_trap_x______________________2_Func002002 takes nothing returns nothing
    call SetUnitUserData( GetEnumUnit(), udg_ExT_custom )
endfunction

function Trig_Explosive_trap_x______________________2_Func005Func002001002 takes nothing returns boolean
    return ( GetUnitUserData(GetFilterUnit()) == udg_ExT_custom_remove )
endfunction

function Trig_Explosive_trap_x______________________2_Func005Func002002 takes nothing returns nothing
    call RemoveUnit( GetEnumUnit() )
endfunction

function Trig_Explosive_trap_x______________________2_Func005C takes nothing returns boolean
    if ( not ( ( ( ( ( ( ( ( ( CountLivingPlayerUnitsOfTypeId('n00E', GetOwningPlayer(GetSpellAbilityUnit())) + CountLivingPlayerUnitsOfTypeId('n00F', GetOwningPlayer(GetSpellAbilityUnit())) ) + CountLivingPlayerUnitsOfTypeId('n00G', GetOwningPlayer(GetSpellAbilityUnit())) ) + ( CountLivingPlayerUnitsOfTypeId('n00H', GetOwningPlayer(GetSpellAbilityUnit())) + ( CountLivingPlayerUnitsOfTypeId('n00I', GetOwningPlayer(GetSpellAbilityUnit())) + CountLivingPlayerUnitsOfTypeId('n00J', GetOwningPlayer(GetSpellAbilityUnit())) ) ) ) + ( ( CountLivingPlayerUnitsOfTypeId('n00K', GetOwningPlayer(GetSpellAbilityUnit())) + CountLivingPlayerUnitsOfTypeId('n00L', GetOwningPlayer(GetSpellAbilityUnit())) ) + ( CountLivingPlayerUnitsOfTypeId('n00M', GetOwningPlayer(GetSpellAbilityUnit())) + ( CountLivingPlayerUnitsOfTypeId('n00N', GetOwningPlayer(GetSpellAbilityUnit())) + ( CountLivingPlayerUnitsOfTypeId('n00O', GetOwningPlayer(GetSpellAbilityUnit())) + ( CountLivingPlayerUnitsOfTypeId('n00P', GetOwningPlayer(GetSpellAbilityUnit())) + CountLivingPlayerUnitsOfTypeId('n00Q', GetOwningPlayer(GetSpellAbilityUnit())) ) ) ) ) ) ) + ( CountLivingPlayerUnitsOfTypeId('n00R', GetOwningPlayer(GetSpellAbilityUnit())) + CountLivingPlayerUnitsOfTypeId('n00S', GetOwningPlayer(GetSpellAbilityUnit())) ) ) + ( CountLivingPlayerUnitsOfTypeId('n00T', GetOwningPlayer(GetSpellAbilityUnit())) + CountLivingPlayerUnitsOfTypeId('n00U', GetOwningPlayer(GetSpellAbilityUnit())) ) ) + CountLivingPlayerUnitsOfTypeId('n00V', GetOwningPlayer(GetSpellAbilityUnit())) ) + ( CountLivingPlayerUnitsOfTypeId('n00W', GetOwningPlayer(GetSpellAbilityUnit())) + CountLivingPlayerUnitsOfTypeId('n00X', GetOwningPlayer(GetSpellAbilityUnit())) ) ) >= 7 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Explosive_trap_x______________________2_Func006001002 takes nothing returns boolean
    return ( IsUnitInGroup(GetFilterUnit(), udg_ExT_trap_group) == true )
endfunction

function Trig_Explosive_trap_x______________________2_Actions takes nothing returns nothing
    call GroupAddGroup( GetUnitsOfPlayerMatching(GetOwningPlayer(GetSpellAbilityUnit()), Condition(function Trig_Explosive_trap_x______________________2_Func001001002)), udg_ExT_trap_group )
    call ForGroupBJ( udg_ExT_trap_group, function Trig_Explosive_trap_x______________________2_Func002002 )
    set udg_ExT_custom = ( udg_ExT_custom + 1 )
    if ( Trig_Explosive_trap_x______________________2_Func005C() ) then
        call ForGroupBJ( GetUnitsOfPlayerMatching(GetOwningPlayer(GetSpellAbilityUnit()), Condition(function Trig_Explosive_trap_x______________________2_Func005Func002001002)), function Trig_Explosive_trap_x______________________2_Func005Func002002 )
        set udg_ExT_custom_remove = ( udg_ExT_custom_remove + 1 )
    else
        call DoNothing(  )
    endif
    call GroupAddGroup( GetUnitsOfPlayerMatching(GetOwningPlayer(GetSpellAbilityUnit()), Condition(function Trig_Explosive_trap_x______________________2_Func006001002)), udg_ExT_other_groups )
endfunction

//===========================================================================
function InitTrig_Explosive_trap_x_copy takes nothing returns nothing
    set gg_trg_Explosive_trap_x_copy = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Explosive_trap_x_copy, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Explosive_trap_x_copy, Condition( function Trig_Explosive_trap_x______________________2_Conditions ) )
    call TriggerAddAction( gg_trg_Explosive_trap_x_copy, function Trig_Explosive_trap_x______________________2_Actions )
endfunction


Вот такая вотъ мутня... Этот триггер почемуто не работает и в нем я не учел проверку на то что уничтожены ли мины или нет.
Старый 30.10.2007, 14:51
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
в таком ужасном коде никто разбиратся не будет, лучше выложи гуи-вариант в карте, мб тебе сделают
Старый 30.10.2007, 15:12
Гламуррр

offline
Опыт: 35
Активность:
Хых все равно этот тупой триггер не работает =)
Лано извините выложил невычлененый из карты триггер т.к. нет времени =((
Прикрепленные файлы
Тип файла: w3x RagnarokX.w3x (339.6 Кбайт, 16 просмотров )
Старый 30.10.2007, 15:26
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 14:17.