Добавлен
Мне нужна альтернатива использования групп, для проверки противника в радиусе, хотя бы функция, я дальше разберусь

Принятый ответ

А зачем, мб альтернатива гуи? Ну она есть, jass.
Если использовать группы нормально, а не как нам предлагает гуи, не будет ни утечек, ни проблем.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
3
32
7 лет назад
3
А зачем, мб альтернатива гуи? Ну она есть, jass.
Если использовать группы нормально, а не как нам предлагает гуи, не будет ни утечек, ни проблем.
Принятый ответ
0
7
7 лет назад
Отредактирован WoLLFeR
0
quq_CCCP:
А зачем, мб альтернатива гуи? Ну она есть, jass.
Если использовать группы нормально, а не как нам предлагает гуи, не будет ни утечек, ни проблем.
Ты предлагаешь мне переписать это на jass? Я почти нечего не понимаю на jass(вру). Хорошо, как предлагает jass использовать группы? Gui использует полярные координаты, что при точках, что при диапазонах, и использует он их очень коряво! Как написать группу на jass правильно?
0
20
7 лет назад
0
При использовании JNGP: Конвертируешь в код -> избавляешься от функций, подсвеченных красным, заменяя их на нативные эквиваленты -> по возможности избегаешь создания объектов вроде точек, даммиков -> чистишь локалки, которые не очищаются сами по себе
0
7
7 лет назад
0
Diaboliko:
При использовании JNGP: Конвертируешь в код -> избавляешься от функций, подсвеченных красным, заменяя их на нативные эквиваленты -> по возможности избегаешь создания объектов вроде точек, даммиков -> чистишь локалки, которые не очищаются сами по себе
Хммм,
Как я найду нативную?
Загруженные файлы
1
32
7 лет назад
Отредактирован quq_CCCP
1
Ну, в гуях каждый раз создается группа при действии с поиском юнитов в радиусе или ректе, что самое по себе убого.
Создадим одну группу и запишем её в глобальную переменную, на гуях просто создай глобалку TempGroup (название неважно, в гуях в перменную сразу же записывается группа), потом нам потребуется фильтр, ибо нужно отсеять всех ненужных юнитов для этого нужно создать новую функцию, которая не берет аргументов и возвращает boolean,
function EnemyFilter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitInvulnerable( bj_lastFilterUnit ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_TAUREN ) )
endfunction

Вот пример фильра, функция GetFilterUnit() -возвращает юнита которого сейчас проверяет фильтр, ну а все остальное функции проверки, обрати внимаение на то что аргументы в фильтр мы передает глобальными переменными, в данном случаи игрок bj_groupEnumOwningPlayer
Весь код можно посмотреть тут
WoLLFeR, кстати вот держи
function IsUnitDead takes unit u returns boolean
    return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) < 1
endfunction
Это заменитель IsUnitAliveBJ, только она вернет true если юнит мертв (несуществует), так же проверять наличие жизны можно проверяя хп юнита:
((код jass
GetUnitState( юнит, UNIT_STATE_LIFE ) > 0.405
))
Если здоровье больше 0.405 то юнит жив, иначе мертв.
0
7
7 лет назад
0
quq_CCCP:
Я пытаюсь разобраться, хорошо фильтр, я могу его сделать, как отдельную функцию, если он возвращает только bool, то как работать дальше? ну одни юниты true, другие false, это через условие проверять?
и groupEnumOwningPlayer - это вражеские Игроки, как их записать?
1
32
7 лет назад
1
bj_groupEnumOwningPlayer это переменная, точно такая же глобалка которые создаешь ты, но эта создана близзардами.
потом тебе нужно юзать функцию
call GroupEnumUnitsInRange( группа, х,у, радиус, Condition( function функция фильтра ))
Потом чтобы сделать действия с юнитами в группе:

function SomeFunc takes nothing returns nothing
//твои действия с каждыйм юнитом в группе, чтобы найти юнита которого сейчас обрабатывает движок в группе юзай GetEnumUnit()
endfunction

call ForGroup( группа, function SomeFunc) //можешь называть функцию как угодно
0
7
7 лет назад
Отредактирован WoLLFeR
0
quq_CCCP:
Так, значит, с начало создаю фильтр, потом другую функцию, которая будет выполнять действия над юнитами в группе, потом назначаю группу используя GroupEnumUnitsInRange, затем используя группу, выполняю над юнитами действие?
1
32
7 лет назад
1
WoLLFeR, ну да, все очень просто...
0
7
7 лет назад
0
quq_CCCP:
WoLLFeR, ну да, все очень просто...
Просто на словах, а на деле я очень не внимателен, и пропускаю многое, спасибо!
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.