Насколько оправдано писать код из triggeraction в triggercondition?
Ведь, когда запускается функция triggeraction, может создаваться куча локальных переменных и их инициализация.
	function Actions takes nothing returns nothing
		local  unit  caster   =  GetSpellAbilityUnit( )
		local  real  casterX  =  GetUnitX( caster )
		local  real  casterY  =  GetUnitY( caster )
		local  int   spell   =  GetSpellAbilityId( )
		...
	endfunction
А если перенести всё это в функцию triggercondition, придётся инициализировать все
локальные переменные даже в тех случаях, когда triggercondition возвращает false.
	function Conditions takes nothing returns boolean
		local  unit  caster   =  GetSpellAbilityUnit( )
		local  real  casterX  =  GetUnitX( caster )
		local  real  casterY  =  GetUnitY( caster )
		local  int   spell   =  GetSpellAbilityId( )
		...
		if ( conditions ) then
			...
		endif

		return false
	endfunction
Да, конечно, можно просто объявить локальные переменные без инициализации, а инициализировать их уже после того, как условие будет выполнено, но насколько это оправдано?
	function Conditions takes nothing returns boolean
		local  unit  caster 
		local  real  casterX
		local  real  casterY
		local  int   spell
		...
		if ( conditions ) then
			set  caster   =  GetSpellAbilityUnit( )
			set  casterX  =  GetUnitX( caster )
			set  casterY  =  GetUnitY( caster )
			set  spell   =  GetSpellAbilityId( )
			...
		endif

		return false
	endfunction

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

Нахрена вам это? Почувствовали себя IseFrog'ом, triggercondition и нужны чтобы не нагружать ненужными действиями движок, а так же разделить код, на частый и легкий и тяжелый и редкий, у фрога так реализованы всякие дебафы вроде уроны, в кондишене проверяется от чего сработал триггер, если это таймер то нанести урон, иначе если триггер сработал от любого другого события то удалить весь эффект и выполнить утилизацию триггера...
2
32
6 лет назад
2
Нахрена вам это? Почувствовали себя IseFrog'ом, triggercondition и нужны чтобы не нагружать ненужными действиями движок, а так же разделить код, на частый и легкий и тяжелый и редкий, у фрога так реализованы всякие дебафы вроде уроны, в кондишене проверяется от чего сработал триггер, если это таймер то нанести урон, иначе если триггер сработал от любого другого события то удалить весь эффект и выполнить утилизацию триггера...
Принятый ответ
0
21
6 лет назад
Отредактирован scopterectus
0
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
То есть мы на халяву получаем уже готовые инициализированные локальные переменные, которые не нужно нулить.
Имеет ли это смысл?
3
32
6 лет назад
3
ScopteRectuS, там екзекут а не call, в кондишенах не работают вейты и синх, что то там еще. Лимит операций другой, особо тонкостей не помню, но писать можно как угодно, ваше дело, особо ничего не дает. Просто return GetSpelLAbilityId() == "A000' было бы проще. Ах да, можно сделать одно условие на все спеллы и не плодить их, уже писал это не раз, могу дать свою карту для изучения, как реально сделать все спеллы удобно и не забивать себе голову подобной ахинеей.
0
21
6 лет назад
0
quq_CCCP, да, было бы очень здорово! Хотел бы посмотреть, как Вы пишите не только спеллы, но и вообще код в целом. Буду весьма признателен, если у Вас еще есть код ИИ для ботов. Я просто понятия не имею, как писать ИИ. Запускать кучу таймеров с проверками, которые если истинны, то делать то, иначе это?
quq_CCCP:
в кондишенах не работают вейты и синх
Что за "синх"? Синхронизация что ли? А что там синхронизируется? Я что-то не понял.
2
32
6 лет назад
2
ScopteRectuS, синхронизация локальных данных, обычно юзают при системах сейв лоада.
4
16
6 лет назад
4
в динамических триггерах нужно испльзовать condition, т.к. action не будет удален и засорит память. В статических триггерах без разницы.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.