Увидел на 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 переменные,см верхние строчки кода
Ред. Msey