Добавлен , опубликован
Программы
Предназначение:
Работа с кодом
Утилита для преобразования 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 лет назад
Отредактирован leroydraigo
0
Удивлен что такую проги еще не было, только было бы замечательно если бы она еще основные утечки устраняла
3
25
6 лет назад
3
leroydraigo:
Смысл больше в том, чтоб рабочий GUI концепт было проще дорабатывать в джасс.
Автоматически устранять утечки это несколько проблемно. Но вот PolarProjectionBJ, DistanceBetweenPoints и ForGroup я думал поковырять. Также большинство BJ функций можно было бы вытащить, так так половина из них просто обертка.
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, вторая только для объявления локалок.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.