Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
cJass
Тип:
Наработка
Увидел на xgm вот эту наработку и захотел использовать в своей мапе. Захожу в редактор, а там куча глобальных переменных и два гуи триггера. Решил, что это того не стоит, но идея понравилась, поэтому реализовал эту же систему, но на cjass и без глобальных переменных.
код
function Trig_WallSystem_Actions takes nothing returns nothing  
integer basis = 'h000' // Угловая часть
integer horiz = 'h001' // Горизонтальная 
integer vertic = 'h002' // Вертикальная
// Я был бы рад оказаться в благодарностях, если вы будете использовать эту систему
// ofeerjst production
if GetUnitTypeId(GetConstructedStructure()) == basis{
    group g = CreateGroup() 
    unit u = null
    real x = GetUnitX(GetConstructedStructure())
    real y = GetUnitY(GetConstructedStructure())
    GroupEnumUnitsInRangeOfLoc(g, Location(x+150,y), 30, null)
    u = FirstOfGroup(g)
    if u != null{
    if GetUnitTypeId(u) == basis or GetUnitTypeId(u) == horiz or GetUnitTypeId(u) == vertic{
        x = GetUnitX(u)
        y = GetUnitY(u)
        DestroyGroup(g)
        g = CreateGroup()
        GroupEnumUnitsInRangeOfLoc(g, Location(x+150,y), 30, null)
        if GetUnitTypeId(FirstOfGroup(g)) == basis or GetUnitTypeId(FirstOfGroup(g)) == horiz or GetUnitTypeId(FirstOfGroup(g)) == vertic{
            RemoveUnit(u)
            CreateUnit(GetTriggerPlayer(),horiz,GetUnitX(u),GetUnitY(u),GetUnitFacing(u))
        }
    }
    }
    else{
    GroupEnumUnitsInRangeOfLoc(g, Location(x-150,y), 30, null)
    u = FirstOfGroup(g)
    if u != null{
    if GetUnitTypeId(u) == basis or GetUnitTypeId(u) == horiz or GetUnitTypeId(u) == vertic{
        x = GetUnitX(u)
        y = GetUnitY(u)
        DestroyGroup(g)
        g = CreateGroup()
        GroupEnumUnitsInRangeOfLoc(g, Location(x-150,y), 30, null)
        if GetUnitTypeId(FirstOfGroup(g)) == basis or GetUnitTypeId(FirstOfGroup(g)) == horiz or GetUnitTypeId(FirstOfGroup(g)) == vertic{
            RemoveUnit(u)
            CreateUnit(GetTriggerPlayer(),horiz,GetUnitX(u),GetUnitY(u),GetUnitFacing(u))
        }
    }
    }
    else{
    GroupEnumUnitsInRangeOfLoc(g, Location(x,y-150), 30, null)
    u = FirstOfGroup(g)
    if u != null{
    if GetUnitTypeId(u) == basis or GetUnitTypeId(u) == horiz or GetUnitTypeId(u) == vertic{
        x = GetUnitX(u)
        y = GetUnitY(u)
        DestroyGroup(g)
        g = CreateGroup()
        GroupEnumUnitsInRangeOfLoc(g, Location(x,y-150), 30, null)
        if GetUnitTypeId(FirstOfGroup(g)) == basis or GetUnitTypeId(FirstOfGroup(g)) == horiz or GetUnitTypeId(FirstOfGroup(g)) == vertic{
            RemoveUnit(u)
            CreateUnit(GetTriggerPlayer(),vertic,GetUnitX(u),GetUnitY(u),GetUnitFacing(u))
        }
    }
    }
    else{
    GroupEnumUnitsInRangeOfLoc(g, Location(x,y+150), 30, null)
    u = FirstOfGroup(g)
    if u != null{
    if GetUnitTypeId(u) == basis or GetUnitTypeId(u) == horiz or GetUnitTypeId(u) == vertic{
        x = GetUnitX(u)
        y = GetUnitY(u)
        DestroyGroup(g)
        g = CreateGroup()
        GroupEnumUnitsInRangeOfLoc(g, Location(x,y+150), 30, null)
        if GetUnitTypeId(FirstOfGroup(g)) == basis or GetUnitTypeId(FirstOfGroup(g)) == horiz or GetUnitTypeId(FirstOfGroup(g)) == vertic{
            RemoveUnit(u)
            CreateUnit(GetTriggerPlayer(),vertic,GetUnitX(u),GetUnitY(u),GetUnitFacing(u))
        }
    }
    }
    }
    }
    }
    DestroyGroup(g)
    g = null
    u = null
}
endfunction

//===========================================================================
function InitTrig_WallSystem takes nothing returns nothing
    set gg_trg_WallSystem = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_WallSystem, EVENT_PLAYER_UNIT_CONSTRUCT_FINISH )
    call TriggerAddAction( gg_trg_WallSystem, function Trig_WallSystem_Actions )
endfunction
Для использования в своей карте нужно настроить всего 3 переменные,см верхние строчки кода
`
ОЖИДАНИЕ РЕКЛАМЫ...
4
32
4 года назад
4
Ну да, очень "полезно", была универсальной для редактора любого патча, а теперь только для jngp 126
1
22
4 года назад
1
Bergi_Bear:
Ну да, очень "полезно", была универсальной для редактора любого патча, а теперь только для jngp 126
Зато импортировать легко
3
32
4 года назад
3
Система крайне ужасная как и код, закроем глаза на сиджасс:
  1. Используется ремув юнит, что может быть чревато фаталами в сочетании с другими системами
  2. Удаление и создание нового юнита без сохранения ХП, таким образом повреждённое здание при достройке будет восстановлено.
  3. Оформление: в коде нет отступов и не используется блок ((код
  4. Локации стоит заменить на координаты, а группу локальные группы заменить на 1 глобальную, ну и тогда вообще Огонь
3
32
4 года назад
3
Зачем? Что мешает зданию поставить текстуру пути стенки?Ну и модель соответствующую, все вовсе без кода, только РО.
3
29
4 года назад
Отредактирован Msey
3
» Способ реализации: cJass
integer, real
Еще циклы добавьте через loop и будет полноценный cJass

По мне так это отвратительно сконвертированный гуи, который легко если только в мусорку импортировать
2
17
3 года назад
2
quq_CCCP, эта система является "упрощением" другой системы, которую придумали, чтобы не плодить здания, которые занимают место в меню постройки у рабочего.
4
32
3 года назад
4
Чувствую пора показать в свет возможность поворота стен при строительстве
0
1
3 года назад
0
Bergi_Bear:
Чувствую пора показать в свет возможность поворота стен при строительстве
думал я один такой гениальный(
0
32
3 года назад
0
думал я один такой гениальный(
А что там у вас?
0
29
3 года назад
0
была универсальной для редактора любого патча, а теперь только для jngp 126
Вот писали бы на zinc, оно бы и на Reforged работало бы. А так триггер сконвертировали и в продакшен...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.