Вот захотел перевести триггер в код. Получил следующее:
function Trig_TR_F01 takes nothing returns boolean
return ( IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit())) == true )
endfunction
function Trig_TR_Actions takes nothing returns nothing
set udg_Ot = GetUnitsInRangeOfLocMatching(350.00, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_TR_F01))
endfunction
Суть в том, что конвертер создал специальную функцию "Trig_TR_F01" для реализации условия при формировании отряда. Естественно, хочется избавится от этой функции и просто записать условие там, где написано "Condition(function Trig_TR_F01)". Я пытался менять аргумент у функции Condition(), но выдавало ошибку, т.е. её аргументам может быть только функция... Потом пытался полностью заменить аргумент в функции GetUnitsInRangeOfLocMatching() и написать там само условие вместо Condition() - выдал ошибку о несоответствии типов. Вопрос: как сформулировать и записать условие, чтобы избавится от функции "Trig_TR_F01"?

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

через иф в действие записывать но это не кул
EnergyFrost, не угадал)
и чем тебе функция не нравится?
функция Condition берёт функцию и возвращает условие
native Condition takes code func returns conditionfunc
native TriggerAddCondition takes trigger whichTrigger, boolexpr condition returns triggercondition
а вобще это написано в статье
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
15
10 лет назад
0
Вроде, такая штука есть в cJass. А в jass ее нету
0
28
10 лет назад
Отредактирован nvc123
0
через иф в действие записывать но это не кул
EnergyFrost, не угадал)
и чем тебе функция не нравится?
функция Condition берёт функцию и возвращает условие
native Condition takes code func returns conditionfunc
native TriggerAddCondition takes trigger whichTrigger, boolexpr condition returns triggercondition
а вобще это написано в статье
Принятый ответ
0
24
10 лет назад
Отредактирован prog
0
Если тебе обязательно нужно пользоваться фильтром, то никак, да и нет в этом ничего плохого. Наоборот можно оптимизировать использование boolexpr, создав фильтр один раз и используя его везде, где нужен такой-же фильтр.
Да, кстати, не утечку точки ли это я там вижу? Бороться нужно с тем, что действительно плохо (утечка точки), а не с тем что нужно и естественно ("лишняя" функция), разве что стоит осмысленно ее переименовать.
EnergyFrost, лямбды в cjass делают то-же самое - создают функцию, просто этого не видно в редакторе.
0
20
10 лет назад
Отредактирован CaptainFox
0
prog, вот так будет без утечки?
function Trig_TR_Actions takes nothing returns nothing
local point p
set p = GetUnitLoc(GetTriggerUnit())
set udg_Ot = GetUnitsInRangeOfLocMatching(350.00, p, Condition(function Trig_TR_F01))
call RemoveLocation(p)
set p = null
endfunction
А утечки, связанные с группой, в данном случае ведь не возникают?
0
28
10 лет назад
0
CaptainFox, есть вариант покруче
юзать координаты и нативки
так быстрее будет работать
и утечек 0
вместо
function Trig_TR_F01 takes nothing returns boolean
return ( IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit())) == true )
endfunction
можно написать
bool Trig_TR_F01(){return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit())}
0
20
10 лет назад
0
nvc123, я думал, что речь идёт о том, что утечка вот тут:
function Trig_TR_Actions takes nothing returns nothing
set udg_Ot = GetUnitsInRangeOfLocMatching(350.00, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_TR_F01))
endfunction
В функции, которая задаёт условие тоже утечки что ли? Какие?
0
27
10 лет назад
0
  1. Не используй BJ нативки. функция GetUnitsInRangeOfLocMatching вызывает утечку, там не обнуляется группа
  2. точка
  3. в функции нету.
  4. Ну если бы ты использовал другую функцию, то тебе потребовалось бы удалить boolexpr
filter =Condition(function Trig_TR_F01)
call DestroyBoolExpr(filter)
а так тебе повезло
0
20
10 лет назад
0
nvc123, prog, Steal nerves, вы меня хотите окончательно запутать? Один говорит про одно, другой - про другое, третий - про третье.
Steal nerves:
Не используй BJ нативки. функция GetUnitsInRangeOfLocMatching вызывает утечку, там не обнуляется группа
Я думал, что все БЖ-функции содержать в своём названии буквы "BJ". И думал, если функция не содержит букв "BJ", значит - это не бж-функция. Если это не так, то как тогда вообще отличить бж-функцию? Или когда делаешь "конвертировать триггер в код" он использует исключительно бж-функции?
0
28
10 лет назад
0
в джнгп все бж красным выделены
удалять булексп это бред как и обнуление интов
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.