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

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

А зачем, мб альтернатива гуи? Ну она есть, jass.
Если использовать группы нормально, а не как нам предлагает гуи, не будет ни утечек, ни проблем.
0
19
7 лет назад
0
Похожие вопросы:

ответ
Какой ужас
Делай вот так.
бронепоезд
создать.
направить на 128 точек наверх(90)
сделать неперманентным
текст удалится через 3 секунды
текст затухнет до 100% прозрачности через 3 секунды
Вот чёрт. не успел приплюснуть к посту.
ответ
еще раз - лучше скачать handle counter и посмотреть его показания, сколько объектов создается при касте
стремление сделать все безутечно похвально, но все хорошо в меру
ответ
Steal nerves:
Да. При чем две.( Position of Dying unit ).
скрин скинул выше, но там ошибка. И если раскрыть, то обнаруживается еще одна утечка: на гуи Point(0,0), а на jass эта команда называется по-другому Location(0,0), эта функция создает точку
раскрыть
попробуй раскрутить, и использовать эту
native CreateItem takes integer itemid, real x, real y returns item
через CS: call CreateItem( id, GetUnitX(u), GetUnitY(u))
где id - ид-номер типа предмета, u - юнит. Ввести тип предмета, и юнита нужно.
можно еще запомнить как-то, чтобы к предмету как-то обращаться
через CS: set it = CreateItem( id, GetUnitX(u), GetUnitY(u))
где it - переменная предмета. Объявить переменную и обращаться
ответ
Нет, 100 раз писали Player не вызывает утечек, их не нужно обнулять.
Бот выдал ссылку на статьи, прошу прочитать...

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, ну да, все очень просто...
Просто на словах, а на деле я очень не внимателен, и пропускаю многое, спасибо!
Чтобы оставить комментарий, пожалуйста, войдите на сайт.