Добавлен , опубликован
Программы
Предназначение:
Работа с кодом
Утилита для преобразования Jass кода в cJass .
  • автоматически расставляет отступы.
  • распутывает навороченные GUI условия.
Использование
Скопируйте исходный код в буфер обмена (CTRL+C) и запустите программу.
После чего вы можете вставить отредактированный код в свою карту.
Пример
Исходный код: 276 строк
function Trig_ff_Func001C takes nothing returns boolean
    if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == true ) ) then
        return false
    endif
    if ( not ( GetSpellAbilityId() == 'AUan' ) ) then
        return false
    endif
    if ( not ( GetDestructableTypeId(GetLastCreatedDestructable()) == 'LTlt' ) ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func002Func001C takes nothing returns boolean
    if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_ANCIENT) == true ) ) then
        return false
    endif
    if ( not ( 'AUau' == 'AUan' ) ) then
        return false
    endif
    if ( not ( 'YTfc' == 'LTlt' ) ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func002C takes nothing returns boolean
    return true
endfunction

function Trig_ff_Func003Func001C takes nothing returns boolean
    if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_FLYING) == true ) ) then
        return false
    endif
    if ( not ( GetSpellAbilityId() == 'AEsv' ) ) then
        return false
    endif
    if ( not ( GetDestructableTypeId(GetLastCreatedDestructable()) == 'LTbs' ) ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func003Func002C takes nothing returns boolean
    if ( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == true ) ) then
        return true
    endif
    if ( ( GetSpellAbilityId() == 'AUan' ) ) then
        return true
    endif
    if ( ( GetDestructableTypeId(GetLastCreatedDestructable()) == 'LTlt' ) ) then
        return true
    endif
    return false
endfunction

function Trig_ff_Func003C takes nothing returns boolean
    if ( not Trig_ff_Func003Func001C() ) then
        return false
    endif
    if ( not Trig_ff_Func003Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func004Func002C takes nothing returns boolean
    if ( not ( GetTerrainTypeBJ(GetRectCenter(GetPlayableMapRect())) == 'Ldrt' ) ) then
        return false
    endif
    if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) >= 10 ) ) then
        return false
    endif
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'hfoo' ) ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func004Func004Func001C takes nothing returns boolean
    if ( not ( UnitCanSleepBJ(GetTriggerUnit()) == true ) ) then
        return false
    endif
    if ( not ( GetLearnedSkillBJ() == 'AHbz' ) ) then
        return false
    endif
    if ( not ( GetOwningPlayer(GetTriggerUnit()) == Player(0) ) ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func004Func004C takes nothing returns boolean
    if ( Trig_ff_Func004Func004Func001C() ) then
        return true
    endif
    return false
endfunction

function Trig_ff_Func004C takes nothing returns boolean
    if ( not ( UnitCanSleepBJ(GetTriggerUnit()) == true ) ) then
        return false
    endif
    if ( not Trig_ff_Func004Func002C() ) then
        return false
    endif
    if ( not ( IsUnitPausedBJ(GetTriggerUnit()) == true ) ) then
        return false
    endif
    if ( not Trig_ff_Func004Func004C() ) then
        return false
    endif
    if ( not ( IsUnitAliveBJ(GetTriggerUnit()) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func005Func001C takes nothing returns boolean
    if ( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_SUMMONED) == true ) ) then
        return true
    endif
    if ( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_POISONED) == true ) ) then
        return true
    endif
    return false
endfunction

function Trig_ff_Func005C takes nothing returns boolean
    if ( not Trig_ff_Func005Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func006Func001Func002C takes nothing returns boolean
    if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_GROUND) == true ) ) then
        return false
    endif
    if ( not ( GetSpellAbilityId() == 'Acdh' ) ) then
        return false
    endif
    if ( not ( GetDestructableTypeId(GetLastCreatedDestructable()) == 'LTbs' ) ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func006Func001C takes nothing returns boolean
    if ( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_GROUND) == true ) ) then
        return true
    endif
    if ( Trig_ff_Func006Func001Func002C() ) then
        return true
    endif
    return false
endfunction

function Trig_ff_Func006C takes nothing returns boolean
    if ( not Trig_ff_Func006Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func007Func001Func001C takes nothing returns boolean
    if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_FLYING) == true ) ) then
        return false
    endif
    if ( not ( GetSpellAbilityId() == 'AEsv' ) ) then
        return false
    endif
    if ( not ( GetDestructableTypeId(GetLastCreatedDestructable()) == 'LTbs' ) ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func007Func001Func002C takes nothing returns boolean
    if ( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == true ) ) then
        return true
    endif
    if ( ( GetSpellAbilityId() == 'AUan' ) ) then
        return true
    endif
    if ( ( GetDestructableTypeId(GetLastCreatedDestructable()) == 'LTlt' ) ) then
        return true
    endif
    return false
endfunction

function Trig_ff_Func007Func001C takes nothing returns boolean
    if ( Trig_ff_Func007Func001Func001C() ) then
        return true
    endif
    if ( Trig_ff_Func007Func001Func002C() ) then
        return true
    endif
    return false
endfunction

function Trig_ff_Func007C takes nothing returns boolean
    if ( not Trig_ff_Func007Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Func008Func001Func001C takes nothing returns boolean
    if ( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == true ) ) then
        return true
    endif
    if ( ( GetSpellAbilityId() == 'AUan' ) ) then
        return true
    endif
    if ( ( GetDestructableTypeId(GetLastCreatedDestructable()) == 'LTlt' ) ) then
        return true
    endif
    return false
endfunction

function Trig_ff_Func008Func001C takes nothing returns boolean
    if ( Trig_ff_Func008Func001Func001C() ) then
        return true
    endif
    return false
endfunction

function Trig_ff_Func008C takes nothing returns boolean
    if ( not Trig_ff_Func008Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_ff_Actions takes nothing returns nothing
    if ( Trig_ff_Func001C() ) then
    else
    endif
    if ( Trig_ff_Func002C() ) then
        if ( Trig_ff_Func002Func001C() ) then
        else
        endif
    else
    endif
    if ( Trig_ff_Func003C() ) then
    else
    endif
    if ( Trig_ff_Func004C() ) then
    else
    endif
    if ( Trig_ff_Func005C() ) then
    else
    endif
    if ( Trig_ff_Func006C() ) then
    else
    endif
    if ( Trig_ff_Func007C() ) then
    else
    endif
    if ( Trig_ff_Func008C() ) then
        set bj_forLoopAIndex = 1
        set bj_forLoopAIndexEnd = 10
        loop
            exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
            set bj_forLoopAIndex = bj_forLoopAIndex + 1
        endloop
    else
    endif
endfunction

//===========================================================================
function InitTrig_ff takes nothing returns nothing
    set gg_trg_ff = CreateTrigger(  )
    call TriggerAddAction( gg_trg_ff, function Trig_ff_Actions )
endfunction
Конечный код 40 строк
  nothing Trig_ff_Actions ( ){ 
    if IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE) and GetSpellAbilityId()=='AUan' and GetDestructableTypeId(GetLastCreatedDestructable())=='LTlt' {
    }else{
   }
   if true {
     if IsUnitType(GetTriggerUnit(),UNIT_TYPE_ANCIENT) and 'AUau'=='AUan' and 'YTfc'=='LTlt' {
     }else{
    }
    }else{
   }
    if (IsUnitType(GetTriggerUnit(),UNIT_TYPE_FLYING) and GetSpellAbilityId()=='AEsv' and GetDestructableTypeId(GetLastCreatedDestructable())=='LTbs') and (IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE) or GetSpellAbilityId()=='AUan' or GetDestructableTypeId(GetLastCreatedDestructable())=='LTlt') {
    }else{
   }
    if UnitCanSleepBJ(GetTriggerUnit()) and (GetTerrainTypeBJ(GetRectCenter(GetPlayableMapRect()))=='Ldrt' and GetUnitStateSwap(UNIT_STATE_LIFE,GetTriggerUnit())>=10 and GetUnitTypeId(GetTriggerUnit())=='hfoo') and IsUnitPausedBJ(GetTriggerUnit()) and ((UnitCanSleepBJ(GetTriggerUnit()) and GetLearnedSkillBJ()=='AHbz' and GetOwningPlayer(GetTriggerUnit())==Player(0))) and IsUnitAliveBJ(GetTriggerUnit()) {
    }else{
   }
    if (IsUnitType(GetTriggerUnit(),UNIT_TYPE_SUMMONED) or IsUnitType(GetTriggerUnit(),UNIT_TYPE_POISONED)) {
    }else{
   }
    if (IsUnitType(GetTriggerUnit(),UNIT_TYPE_GROUND) or (IsUnitType(GetTriggerUnit(),UNIT_TYPE_GROUND) and GetSpellAbilityId()=='Acdh' and GetDestructableTypeId(GetLastCreatedDestructable())=='LTbs')) {
    }else{
   }
    if ((IsUnitType(GetTriggerUnit(),UNIT_TYPE_FLYING) and GetSpellAbilityId()=='AEsv' and GetDestructableTypeId(GetLastCreatedDestructable())=='LTbs') or (IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE) or GetSpellAbilityId()=='AUan' or GetDestructableTypeId(GetLastCreatedDestructable())=='LTlt')) {
    }else{
   }
    if ((IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE) or GetSpellAbilityId()=='AUan' or GetDestructableTypeId(GetLastCreatedDestructable())=='LTlt')) {
    bj_forLoopAIndex = 1
    bj_forLoopAIndexEnd = 10
     loop{
     exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
     bj_forLoopAIndex = bj_forLoopAIndex + 1
    }
    }else{
   }
 }
 //===========================================================================
  nothing InitTrig_ff ( ){ 
   gg_trg_ff = CreateTrigger( )
   TriggerAddAction( gg_trg_ff, function Trig_ff_Actions )
 }

Oбновления

Roadmap
v.1.01
  • Вертикальное выравнивание кода
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
8
6 лет назад
0
Jack-of-shadow, Не думал о том чтобы группы, точки и юнитов заносить в локалки?
1
25
6 лет назад
Отредактирован Jack-of-shadow
1
leroydraigo:
Jack-of-shadow, Не думал о том чтобы группы, точки и юнитов заносить в локалки?
юнитов да, про группы уже написал, а вот с точками кажется слегка путано. Скажем GetUnitLocation(u) может быть вызвана несколько раз, но юнит может переместится, а может остаться на месте. И вот тут не ясно - требуется ли две отдельные переменные или одна изменяющаяся. (вдруг где то есть их сравнение) Да и не люблю точки, но в чтоб координаты все переводить слишком много функций нужно учесть.
0
8
6 лет назад
0
Спасибо за проделанную работу! У меня есть совсем небольшие "придирки", но раз уж мы говорим о cJASS, то было приятно реализовать и это, дабы сэкономить место, и чтобы не резало глаза:
  1. Инкремент/декремент
bj_forLoopAIndex = bj_forLoopAIndex + 1 в bj_forLoopAIndex++
  1. Условные операторы and и or в && и || соотвественно
  2. Цикл loop { exitwhen(условие) } в while(условие), или хотя бы exitwhen на if (условие) break в теле цикла.
0
28
6 лет назад
0
uranus, луп лучше не трогать
с этим бага в cjass была
хз поправили в новых версиях или нет
0
8
6 лет назад
0
nvc123, а можно подробнее? И, кстати, почему слово for нельзя использовать для своих целей, если оно не используется в JASS и cJASS?
1
28
6 лет назад
1
uranus, вайл не является часть cjass
это просто дефайн записанный в файле cj_types.j
и иногда этот дефайн тупит
уже много раз подобное случалось
особенно если скидываешь код другим людям
не говоря уже о том что у некоторых этого дефайна может вовсе не быть
поэтому я убрал этот дефайн из cj_types.j и всем остальным тоже советую
uranus, слово for используется в cjass так же как и while
т.е. оно зарезервировано для дефайнов
2
25
6 лет назад
2
uranus:
Да, первый и второй пункт добавлю, exitwhen тоже. Возможно ещё получиься ускорть саму конвертацию. Я похоже что то упустил и иногда почти 3 сек тупит.

Почти допилил вертикальное выравнивание. Это на любителя конено, поэтому будет две параллельные версии. Первая align all, вторая только для объявления локалок.
0
13
6 лет назад
0
nvc123:
это просто дефайн записанный в файле cj_types.j
Гонишь. По крайней мере в новой версии jngp while работает без подключения библиотеки.
0
8
6 лет назад
Отредактирован uranus
0
Я увидел нечто странное в файле cj_types:
while(cond) = whilenot not(cond)
0
13
6 лет назад
0
uranus, так в документации об этом написано
0
12
6 лет назад
0
Утила выглядит довольно перспективно .Проверяли на больших пачках кода?
Цикл while() довольно проблемный , у меня он не сохранялся до этого.К тому же он обратный и еще криво считает.Не вижу в нем надобности в ВЕ никакой.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.