Добавлен hell_bent
Не могу записать значение из функции abc
function abc takes nothing returns nothing
local unit u = GetEnumUnit()
local player p = GetOwningPlayer(u)
if (( IsUnitSelected(u,p)== true)) then
/ Сюда записать юнитов которые выделены
И вернуть эти значения в myaction
endif
return
local unit u = GetEnumUnit()
local player p = GetOwningPlayer(u)
if (( IsUnitSelected(u,p)== true)) then
/ Сюда записать юнитов которые выделены
И вернуть эти значения в myaction
endif
return
endfunction
function myaction takes nothing returns nothing
local unit d = GetDyingUnit()
local real x = GetUnitX(d)
local real y = GetUnitY(d)
local group g = CreateGroup()
local group g2 = CreateGroup() добавить юнитов из abc в g2
call GroupEnumUnitsInRange( g, x, y, 512, null)
endfunction
local unit d = GetDyingUnit()
local real x = GetUnitX(d)
local real y = GetUnitY(d)
local group g = CreateGroup()
local group g2 = CreateGroup() добавить юнитов из abc в g2
call GroupEnumUnitsInRange( g, x, y, 512, null)
endfunction
Принятый ответ
Steal nerves, в Вашем способе, если был выбран вражеский воин, то он обратно не выбирается.
- Предлагаю такой вариант:
globals
group array selectedUnits
endglobals
function HideEnumUnit takes nothing returns nothing
call ShowUnit( GetEnumUnit( ), false )
endfunction
function ShowEnumUnit takes nothing returns nothing
call ShowUnit( GetEnumUnit( ), true )
endfunction
function actions takes nothing returns nothing
local unit triggerUnit = GetTriggerUnit( )
local integer playerId = GetPlayerId( GetTriggerPlayer( ) )
local group tGroup = null
local unit tUnit = null
local real x = 0.0
local real y = 0.0
if ( GetTriggerEventId( ) == EVENT_PLAYER_UNIT_SELECTED ) then
if ( selectedUnits[ playerId ] == null ) then
set selectedUnits[ playerId ] = CreateGroup( )
call GroupAddUnit( selectedUnits[ playerId ], triggerUnit )
call BJDebugMsg( GetUnitName( triggerUnit ) + " selected" )
elseif ( selectedUnits[ playerId ] != null ) then
call GroupAddUnit( selectedUnits[ playerId ], triggerUnit )
call BJDebugMsg( GetUnitName( triggerUnit ) + " selected" )
endif
elseif ( GetTriggerEventId( ) == EVENT_PLAYER_UNIT_DESELECTED ) then
call GroupRemoveUnit( selectedUnits[ playerId ], triggerUnit )
call BJDebugMsg( GetUnitName( triggerUnit ) + " deselected" )
elseif( GetTriggerEventId( ) == EVENT_PLAYER_UNIT_DEATH ) then
set x = GetUnitX( triggerUnit )
set y = GetUnitY( triggerUnit )
if ( GetUnitTypeId( triggerUnit ) == 'halt' ) then
call ClearSelection( )
set tGroup = CreateGroup( )
call GroupEnumUnitsInRange( tGroup, x, y, 512.0, null )
call ForGroup( tGroup, function HideEnumUnit )
call CreateUnit( Player( 0 ), 'halt', x, y, bj_UNIT_FACING )
call ForGroup( tGroup, function ShowEnumUnit )
call SelectGroupForPlayerBJ( selectedUnits[ 0 ], Player( 0 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 1 ], Player( 1 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 2 ], Player( 2 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 3 ], Player( 3 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 4 ], Player( 4 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 5 ], Player( 5 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 6 ], Player( 6 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 7 ], Player( 7 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 8 ], Player( 8 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 9 ], Player( 9 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 10 ], Player( 10 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 11 ], Player( 11 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 12 ], Player( 12 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 13 ], Player( 13 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 14 ], Player( 14 ) )
call SelectGroupForPlayerBJ( selectedUnits[ 15 ], Player( 15 ) )
endif
endif
call DestroyGroup( tGroup )
set triggerUnit = null
endfunction
function InitTrig_Untitled_Trigger_001_Copy_Copy takes nothing returns nothing
local trigger trig = CreateTrigger( )
call TriggerRegisterPlayerUnitEvent( trig, Player( 0 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 1 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 2 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 3 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 4 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 5 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 6 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 7 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 8 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 9 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 10 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 11 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 12 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 13 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 14 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 15 ), EVENT_PLAYER_UNIT_SELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 0 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 1 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 2 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 3 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 4 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 5 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 6 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 7 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 8 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 9 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 10 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 11 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 12 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 13 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 14 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 15 ), EVENT_PLAYER_UNIT_DESELECTED, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 0 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 1 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 2 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 3 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 4 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 5 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 6 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 7 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 8 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 9 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 10 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 11 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 12 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 13 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 14 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerRegisterPlayerUnitEvent( trig, Player( 15 ), EVENT_PLAYER_UNIT_DEATH, null )
call TriggerAddAction( trig, function actions )
set trig = null
endfunction
для работы требуется JNGP.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
d = FirstUnitOfGroup(g)
условие
GroupAddUnit(g2,d)
endif
GroupRemoveUnit(g,d)
endloop
вот как сделал
local group g = CreateGroup()
local group g2 = CreateGroup()
call GroupEnumUnitsInRange( g, x, y, 512, null)
local unit u
local player p
local integer i = CountUnitsInGroup(g)
exitwhen i < 1
set u = FirstOfGroup(g)
set p = GetOwningPlayer(u)
if (( IsUnitSelected(u,p)== true)) then
call GroupAddUnit(g2,u)
endif
call GroupRemoveUnit(g,u)
set i = CountUnitsInGroup(g)
endloop
call DestroyGroup(g)
Что-то не выходит
Отредактирован scopterectus
local unit d = GetDyingUnit()
local real x = GetUnitX(d)
local real y = GetUnitY(d)
local group g = CreateGroup()
call GroupEnumUnitsInRange( g, x, y, 512, null)
local unit u
local player p
loop
exitwhen u == 0
set u = FirstOfGroup(g)
set p = GetOwningPlayer(u)
if (( IsUnitSelected(u,p)== true)) then
call GroupAddUnit(g,u)
endif
call GroupRemoveUnit(g,u)
endloop
Как себя поведет функция если будут юниты несколько игроков ??
Отредактирован scopterectus
В вашем коде Вы добавляете воина в ту же группу, в котором перебираете воинов.
Отредактирован MpW
посоветовал бы юзать фильтр, отсеивает не нужных.
Но мне нужно записать игрока в переменную которому принадлежат выделенные юниты
и потом совершить действие выделенными юнитами для игрока
Вот весь код помогите пожалуйста, а то у меня уже голова трескается(
local unit u = GetFilterUnit()
local player p = GetOwningPlayer(u) нужно записать этих играков если таковы имеются
return IsUnitSelected(u,p)
endfunction
call ShowUnitHide( GetEnumUnit() )
endfunction
call ShowUnitShow( GetEnumUnit() )
endfunction
local unit d = GetDyingUnit()
local player p = GetOwningPlayer(d)
local real x = GetUnitX(d)
local real y = GetUnitY(d)
local group g = CreateGroup()
local group g2 = CreateGroup()
call GroupEnumUnitsInRange(g2,x,y,512,Condition(function abc))
call GroupEnumUnitsInRange( g, x, y, 512, null )
call ForGroup( g, function hideg)
call CreateNUnitsAtLoc (1,'eate',p,Location(x,y),bj_UNIT_FACING)
call ForGroup( g, function unhideg)
call SelectGroupForPlayerBJ( g2,p)// эту функцию нужно использовать не для p а для игроков чьи
юниты были фильтрованы
call DestroyGroup( g)
endfunction
Отредактирован MpW
Отредактирован scopterectus
Отредактирован hell_bent
(не построено а именно создано, как-бы подмена!)
Вроде ничего сложного одна функция) но есть проблема. Новое здание скачет, не
создается на том-же месте если вблизи(точки создание) есть юниты.
Всего то нужно до создания здания (CreateNUnitsAtLoc )
пикнуть всех ближайших юнитов, скрыть их(ShowUnitHide)
потом после создание показать, (ShowUnitShow)
все идеально работает!!!
Но есть минус с пикнутых юнитов после (ShowUnitHide) снимается выделение.
(так как не все юниты могут быть выделены игроками)
записать их в группу, и после (ShowUnitShow) вернуть выделение.
У меня получилось вернуть выделение только хозяину здания!
А нужно вернуть всем игрокам чьи юниты находились в эпицентре.
не могу их отследить и записать игроков.
Отредактирован MpW
Отредактирован scopterectus
Отредактирован MpW
IsUnitSelected - проверка не показывает, что вражеский юнит выбран игроком (только через события можно)
Можно еще попробовать через GroupEnumUnitsSelected - выбирает юнитов в группу, который может выделить другой игрок
Имейте это в ввиду, если вам нужен выбор для не локальных действий.
Отредактирован MpW
Система предложенная ScopteRectuS, впечатлила)