Привет всем! Я хотел создать систему отрядов для своей карты. Для этого я использовал наработки уже существующих систем, но мне они не нравились, т.к. они часто не работали, были слишком сложными или на ГУИ. Собственно, я застопорился на приказах отряду на точку. Отряд выполняет приказ только 1 раз, после этого он не повторяет действия командира(можно проверить при помощи патрулирования).
Есть 2 глобальные переменные:
Squad тип:Отряд, массив, раз:999
Units тип:Целочисленная
Карта прилагается
Есть 2 глобальные переменные:
Squad тип:Отряд, массив, раз:999
Units тип:Целочисленная
Карта прилагается
Создание отряда:
function Trig_jtrain_Conditions takes nothing returns boolean
return (GetUnitAbilityLevel(GetTriggerUnit(), 'B000') > 0) //Проверка наличия способности "Массовое производство" у казарм
endfunction
function Trig_jtrain_Actions takes nothing returns nothing
local integer a = 1
local real x = GetUnitX(GetTriggerUnit())
local real y = GetUnitY(GetTriggerUnit())
local unit f
call UnitAddAbility(GetTrainedUnit(),'A003') //Добавление способности "Командир"
call SetUnitAbilityLevel(GetTrainedUnit(),'A003',1)
call SetUnitUserData( GetTrainedUnit(), udg_Units )
call GroupAddUnit(udg_Squad[udg_Units], GetTrainedUnit())
call IssuePointOrderLoc( GetTrainedUnit(), "attack", GetUnitRallyPoint(GetTriggerUnit()) )
if (GetUnitTypeId(GetTrainedUnit()) == 'earc') then
loop
exitwhen (a==12)
set a=a+1
set f = CreateUnit(GetOwningPlayer(GetTriggerUnit()),GetUnitTypeId(GetTrainedUnit()),x,y,bj_UNIT_FACING)
call SetUnitUserData( f, udg_Units )
call UnitAddAbility(f,'Aloc') //При помощи "Москиты" и "Тёмный" делаю всех членов отряда, кроме командира, невыбираемыми и уязвимыми
call SetUnitAbilityLevel(f,'Aloc',1)
call UnitAddAbility(f,'S000')
call SetUnitAbilityLevel(f,'S000',1)
call SetUnitUserData( f, udg_Units )
call GroupAddUnit( udg_Squad[udg_Units],f )
call IssuePointOrderLoc( f, "attack", GetUnitRallyPoint(GetTriggerUnit()) )
endloop
endif
set udg_Units = ( udg_Units + 1 )
endfunction
//===========================================================================
function InitTrig_jtrain takes nothing returns nothing
set gg_trg_jtrain = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_jtrain, EVENT_PLAYER_UNIT_TRAIN_FINISH )
call TriggerAddCondition( gg_trg_jtrain, Condition( function Trig_jtrain_Conditions ) )
call TriggerAddAction( gg_trg_jtrain, function Trig_jtrain_Actions )
endfunction
Приказы отряду:
function Trig_jpoint_Conditions takes nothing returns boolean
return (GetUnitAbilityLevel(GetOrderedUnit(), 'BHad') > 0) //Проверка наличия способности "Командир"
endfunction
function Trig_jpoint_Actions takes nothing returns nothing
local group n = udg_Squad[GetUnitUserData(GetOrderedUnit())]
local real x = GetOrderPointX()
local real y = GetOrderPointY()
local unit f
set f = FirstOfGroup(n)
if (GetIssuedOrderId() == String2OrderIdBJ("patrol") and (GetUnitAbilityLevel(f, 'BHad') < 1)) then
loop
set f = FirstOfGroup(n)
exitwhen f==null
call IssuePointOrder( f, "patrol", x,y)
call GroupRemoveUnit(n,f)
endloop
elseif (GetIssuedOrderId() == String2OrderIdBJ("smart") and (GetUnitAbilityLevel(f, 'BHad') < 1)) then
loop
set f = FirstOfGroup(n)
exitwhen f==null
call IssuePointOrder( f, "smart", x,y)
call GroupRemoveUnit(n, f)
endloop
elseif (GetIssuedOrderId() == String2OrderIdBJ("attack") and (GetUnitAbilityLevel(f, 'BHad') < 1)) then
loop
set f = FirstOfGroup(n)
exitwhen f==null
call IssuePointOrder( f, "attack", x,y )
call GroupRemoveUnit(n, f)
endloop
endif
set n = null
set f = null
endfunction
//===========================================================================
function InitTrig_jpoint takes nothing returns nothing
set gg_trg_jpoint = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_jpoint, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
call TriggerAddCondition( gg_trg_jpoint, Condition( function Trig_jpoint_Conditions ) )
call TriggerAddAction( gg_trg_jpoint, function Trig_jpoint_Actions )
endfunction
Принятый ответ
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
На мысли не наводит?
Ред. prog
например так