globals 
conditionfunc condFAST = null
endglobals

function DamageFunc takes nothing returns boolean
	set uENUM = GetFilterUnit() 
                
	if not IsUnitType(uENUM, UNIT_TYPE_STRUCTURE) and IsUnitEnemy(uENUM, GetOwningPlayer(uCAST)) and IsAlive(uENUM) then 
		call DamageUnit(uCAST, uENUM, LReal("Damage"), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL)
	endif
                
	return false
endfunction
                 
set condFAST = Condition(function DamageFunc)
call GroupEnumUnitsInRange(gFAST, x,y, 100, condFAST)
call DestroyCondition(condFAST)
или
call GroupEnumUnitsInRange(gFAST, x,y, 100, null)
loop
	set uENUM = FirstOfGroup(gFAST)
	exitwhen SysUnit == null
	
	if not IsUnitType(uENUM, UNIT_TYPE_STRUCTURE) and IsUnitEnemy(uENUM, GetOwningPlayer(uCAST)) and IsAlive(uENUM) then 
    	call DamageUnit(uCAST, uENUM, 10, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL)
    endif

	call GroupRemoveUnit(uENUM,gFAST)
endloop

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

Ну болекспры побыстрее, но разницы на глаз вы не увидите. Я вот хз че вы там велосипеды изоьритаете, нет классической способ - groupenumunitsinrange, с фильтром,куда глобалками передаём аргументыесли нужно, ну и for group для группы,ждля мгновенных действий где не надо хранить группу и где не вызывают я события триггеров ющающие эту группу,то можно юзать одну глобальную группу, быстрее ваших локальных чудес. . .
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
19
3 года назад
0
Похожие вопросы:

ответ
TriggerSleepAction
или wait
когда же ты прочтёшь статьи
ибо это одно и тоже
юзай что хочешь
разницы нету
предлагаю закрывать все его вопросы автоматом ибо они все по основам которые описаны в нескольких базовых статьях
ответ
Если в триггере много действий, загружающих память, то лучше не использовать малый период. А если в нём ещё утечки памяти, то рано или поздно лаги сделают игру невозможной.
По сути, и таймер, и периодическое событие запускают действия в определённое время, то есть действуют одинаково. Смотри, что тебе удобнее.
ответ
abatyr, у твоих способностей одинаковый id приказа. Нужно создать способность на основе "Канала", дать им разные id приказа, а настоящие способности кастовать даммиками.
ответ
Протестировал и сказать что лучше нельзя
ReplaceUnitBJ имеет 4 разных варианта
Добавление абилки "Тёмный" это как бы 5-й вариант замены юнита
Тут зависит от конкретного случая кого и что надо заменить.
Да, если заменять юнита на героя (или наоборот) могут возникнуть неполадки
ответ
В варике блокираторы пути 2х2 и 4х4 (маленький и большой). Воздух блочит путь для воздуха, суша для суши, двусторонний для суши и воздуха. Если в одной точке стоят 4 маленьких блокиратора, лучше заменить на один большой блокиратор. А вообще, лучше использовать вариант, который указал quq_CCCP. Там типо с фотошопом надо как-то работать, сетку желательно создать на которой будешь рисовать свой блокиратор пути... Короче на хгм есть где-то статейка, возможно найду


что делает блокиратор поля зрения я без понятия, скорее всего блочит и путь, и поле зрения, если поставить высоту препятствия

0
21
3 года назад
0
Вам сюда. И boolexpr'ы не нужно уничтожать, так как они кешируются.
0
14
3 года назад
0
ScopteRectuS:
Вам сюда. И boolexpr'ы не нужно уничтожать, так как они кешируются.
Опять же верхнего способа у них нет, да и тесты второго способа слишком затратные, т.к. пересоздается локалка и группа, каждый тик таймера
0
21
3 года назад
Отредактирован scopterectus
0
Для JASS плюс первого метода в том, что создаётся новый поток, и, если действий очень много, то такой метод более предпочтителен. Но все данные из локалок придётся переносить через глобальные переменные.
Второй метод хорош тем, что не нужно переносить локалки в глобалки, но опять же, если действий очень много, то поток может оборваться.
Опять же верхнего способа у них нет
Там вся суть в конце:
Заключение прекрасно написал Bergi_Bear к предыдущей версии статьи:
Нет никакой разницы каким вы способом будете перебираться своих 20 юнитов
0
14
3 года назад
Отредактирован LainMikoroso
0
Хмммм, то что создает новый поток это конечно не очень для моего кода
А по поводу:"нет разницы", есть большая ошибочка, т.к. на луа, быстрейшим способом является впихивание в условие, т.к. не приходится вытаскивать юнита из группы, а в сравнении с BlzUnitAtGroup не приходится чистить группу после использования
0
21
3 года назад
0
LainMikoroso, нет ничего ужасного в том, что создаётся новый поток. Если хотите всё делать так, как изначально всё задумывалось близзардами, то делаете через boolexpr и ForGroup. Не хотите заморачиваться - перебираете всех через цикл.
0
14
3 года назад
0
ScopteRectuS:
У меня жесткий абьюз глобалок во всех таймерах, выгружаемых с хеша, спонтанный новый поток буквально уничтожит весь код, хэх
1
32
3 года назад
1
Всё байтодрочерство было актуально в 2003 году или для компов тех же годов. Допустим у вас 100 юнитов и реально комп с 512 метров первого ddr. И то производительность упадёт не от метода перебора, а уже от самого факта 100 юнитов.
Просто все эти "быстрее" реально не быстрее, каждый раз когда вам кто-то говорит, что вот это работает быстрее чем вон то - шлите его на фиг.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.