теперь понятно. насколько я знаю, по юниту невозможно определить игрока, который его держит выделенным. думаю, что тут нужна г. переменные типа группа, в которых будут хранится выделенные юниты для каждого игрока. а после того, как вы спрятали юнита выбираете для игроков юнитов из группы. если не понятно, то вечером напишу решение.
Наверное, так. Правда тут какой-то бред у меня получился. Нам будет гораздо легче, если Вы скажите нам, что Вы хотели реализовать, а не какой код вы хотите.
function Trig_Untitled_Trigger_001_Copy_Actions takes nothing returns nothing
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()
local unit tUnit = null
call GroupEnumUnitsInRange( g2, x, y, 512.0, Condition( function abc ) )
call GroupEnumUnitsInRange( g, x, y, 512.0, null )
call ForGroup( g, function hideg )
call CreateUnit( p, 'eate', x, y, bj_UNIT_FACING )
call ForGroup( g, function unhideg )
loop
set tUnit = FirstOfGroup( g2 )
exitwhen ( tUnit == null )
call GroupRemoveUnit( g2, tUnit )
if ( GetLocalPlayer( ) == GetOwningPlayer( tUnit ) ) then
// call ClearSelection( )
// Здесь небольшой баг. Выделенные юниты выделятся дополнительно к уже выделенным юнитам.
call SelectUnit( tUnit, true )
// Не совсем понятно, зачем Вы хотите выделить уже выделенных юнитов.
endif
endloop
call DestroyGroup( g)
endfunction
Как себя поведет функция если будут юниты несколько игроков ??
в группу будут добавлены абсолютно все воины, которые выделены своими владельцами в радиусе 512.0.
В вашем коде Вы добавляете воина в ту же группу, в котором перебираете воинов.
лучше сделайте abc( ) boolexpr'ом. и впишите это вместо null, где у Вас GroupEnumUnitsInRange( ). В этом случае нужда в группе g2 отпадает, а нужные юниты будут добавлены в группу g.
function abc takes nothing returns boolean
return IsUnitSelected( GetFilterUnit( ), GetOwningPlayer( GetFilterUnit( ) ) )
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( )
call GroupEnumUnitsInRange( g, x, y, 512.0, Condition( function abc ) )
// в данном случае, все выделенные юниты будут в группе "g".
// в конце не забудьте удалить группу, если она не нужна, и обнулить локальные переменные.
endfunction
Как чего? ) Уровень вашего улучшения.
Если уровень равен "0", то создать таких-то юнитов в количестве "a". (это когда улучшение еще ни разу не прокачено)
Если уровень равен "1", то создать таких-то юнитов в количестве "х".
Если уровень равен "2", то создать таких-то юнитов в количестве "n"...
Эти условия нужно вставить туда, где у Вас триггер создания этих самых юнитов.
Если у Вас воины создаются триггерно, то перед призывом воинов делаете разные проверки на уровень необходимого улучшения. Если уровень такой-то, то призвать такой тип воинов в количестве n, если уровень другой, то призвать другого нужного воина в нужном количестве. - это если делать через if then else.
Также, можете создать глобальные переменные, в которых будут храниться тип юнитов и их количество. Когда боевая единица завершает исследование - меняете значение переменных.
А при призыве воинов указываете вместо конкретного типа и количества вышеперечисленные переменные.
ЛОЛ, Dagger667, зачем мне переделывать 15000 карт, если они не мои? Все хорошие карты защищены, если их взломать, то там не будет никакого GUI! Если Вы хотели сделать доброе дело и оптимизировать 15000 карт одной своей библиотекой для GUI, которого не будет во взломанных картах, то удачи!
Зачем что-то делать для GUI, если при сохранении карты это всё превращается в чистый JASS? Не проще ли сразу написать на JASS, при этом полностью контролируя, что пишите. Писать на JASS быстрее, легче и понятнее. Зачем тогда вообще нужен GUI? ну разве что тем, кто не желает учиться JASS'y.
Возможно, проблема в событии триггера, для того, чтобы сработал триггер при выходе из региона, нужно чтобы этот юнит изначально находился внутри региона. Если у Вас не появляется текст "111" (который Вы указали), то проблема точно в этом.
quq_CCCP, да, было бы очень здорово! Хотел бы посмотреть, как Вы пишите не только спеллы, но и вообще код в целом. Буду весьма признателен, если у Вас еще есть код ИИ для ботов. Я просто понятия не имею, как писать ИИ. Запускать кучу таймеров с проверками, которые если истинны, то делать то, иначе это? quq_CCCP:
в кондишенах не работают вейты и синх
Что за "синх"? Синхронизация что ли? А что там синхронизируется? Я что-то не понял.
quq_CCCP, точно также подумал. И пришел вот к чему: в triggercondition, если условие истинно, то функция не возвращает true, а запускает функцию triggeraction через "call FuncName( )". А так как функция запускается через "call", то можно передавать туда аргументы:
function conditions takes nothing returns nothing
if ( GetSpellAbilityId( ) == 'A000' ) then
call actions( GetSpellAbilityUnit( ), GetSpellTargetUnit( ) и т. д. )
endif
return false
endfunction
То есть мы на халяву получаем уже готовые инициализированные локальные переменные, которые не нужно нулить.
quq_CCCP, да, хорошая наработка! Вот только возникли 2 вопроса к ней:
Может ли данная наработка где-то дать сбой?
Так и не понял, как передавать аргументы в boolexpr'ы. Раньше я все boolexpr'ы сохранял в глобальные переменные при инициализации, а дальше использовал эти переменные. В этой же наработке нельзя так сделать, ввиду того, что этих аргументов нету во время инициализации. Приходится каждый раз создавать boolexpr'ы, но нужно ли их после этого удалять? Кэшируются ли подобные boolexpr'ы?
» WarCraft 3 / Скрытие стандартных иконок
» WarCraft 3 / Помогите с функцией
Ред. scopterectus
» WarCraft 3 / Помогите с функцией
» WarCraft 3 / Помогите с функцией
Ред. scopterectus
» WarCraft 3 / Помогите с функцией
Ред. scopterectus
» WarCraft 3 / Помогите с функцией
В вашем коде Вы добавляете воина в ту же группу, в котором перебираете воинов.
Ред. scopterectus
» WarCraft 3 / Как играть онлайн?
Ред. scopterectus
» WarCraft 3 / Помогите с функцией
Ред. scopterectus
» WarCraft 3 / Как через улучшение, увеличить количество выходящих юнитов?
Если уровень равен "0", то создать таких-то юнитов в количестве "a". (это когда улучшение еще ни разу не прокачено)
Если уровень равен "1", то создать таких-то юнитов в количестве "х".
Если уровень равен "2", то создать таких-то юнитов в количестве "n"...
Эти условия нужно вставить туда, где у Вас триггер создания этих самых юнитов.
» WarCraft 3 / Как сделать задний фон в главном меню?
Ред. scopterectus
» WarCraft 3 / Как через улучшение, увеличить количество выходящих юнитов?
Также, можете создать глобальные переменные, в которых будут храниться тип юнитов и их количество. Когда боевая единица завершает исследование - меняете значение переменных.
А при призыве воинов указываете вместо конкретного типа и количества вышеперечисленные переменные.
» WarCraft 3 / Как заменить BJ-функции?
Ред. scopterectus
» WarCraft 3 / Как заменить BJ-функции?
Ред. scopterectus
» WarCraft 3 / Как заменить BJ-функции?
ну разве что тем, кто не желает учиться JASS'y.
» WarCraft 3 / Add event DamageTaken создаёт утечку, как исправить?
» WarCraft 3 / Можно ли как-то выбрать точки на карте?
Ред. scopterectus
» WarCraft 3 / Не работает триггер на убийство переменной типа боевая единица
» WarCraft 3 / triggeraction внутри triggercondition
quq_CCCP:
Ред. scopterectus
» WarCraft 3 / triggeraction внутри triggercondition
» WarCraft 3 / Найм воинов из нейтрального здания
» WarCraft 3 / Передача аргументов в функции callback'ов
» WarCraft 3 / Передача аргументов в функции callback'ов
» WarCraft 3 / Передача аргументов в функции callback'ов
» WarCraft 3 / Как сделать что бы мобы бегали за тобой и юзали спелы
Ред. scopterectus
» WarCraft 3 / Какие существуют альтернативы ветвлению ифами?