XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
Фильтр не видит GetTriggerUnit()
Ф-ия myfunc1 запускается событием EVENT_PLAYER_UNIT_SPELL_FINISH, затем она таймером запускает ф-ию myfunc2 , и тут начинается проблема. boolexpr b = Condition(function myfilter), так вот функция myfilter "не знает" что имеются такие юниты как GetTriggerUnit(), или GetSpellAbilityUnit(), что логично, как это исправить, или обойти, так чтобы фильтру можно было передать юнита-кастера?

function myfilter takes nothing returns boolean
   return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit()) > 0.405 
endfunction

function myfunc2 takes nothing returns  nothing
...
   local boolexpr b = Condition(function myfilter)
   local group g = CreateGroup()
   call GroupEnumUnitsInRange(g,GetUnitX(caster), GetUnitY(caster), range, b)
...
endfunction

function myfunc1 takes nothing returns nothing
...
   call TimerStart(tr, 4.0, false, function myfunct2)
...
endfunction
Старый 11.06.2013, 12:04
Buulichkaa
Делаю спеллы за еду
offline
Опыт: 20,146
Активность:
функция Condition обрабатывает юнитов в функции фильтра только функцией GetFilterUnit()
Sargaraser добавил:
ты можешь потом просто удалить к примеру кастера из этой группы
Старый 11.06.2013, 12:12
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Condition(function myfilter)
Filter(function myfilter)
Hate добавил:
что бы передавать надо делать так
// globals
        unit ForFilter1


bool EnemiesFilter(){
return (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(ForFilter1)) and GetHp(GetFilterUnit()) > 0.045)
}

.....
ForFilter1 = caster
GroupEnumUnitsInRange(g,GetUnitX(caster), GetUnitY(caster), range, Filter(function myfilter))
Старый 11.06.2013, 12:24
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
Спасибо, клоз
Амбидекстрия добавил:
А condition и filter работают практически одинакого, разницы не замечал
Старый 11.06.2013, 12:25
DioD

offline
Опыт: 45,134
Активность:
// globals
        unit ForFilter1


bool EnemiesFilter(){
return (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(ForFilter1)) and GetHp(GetFilterUnit()) > 0.045)
}

.....
ForFilter1 = caster
GroupEnumUnitsInRange(g,GetUnitX(caster), GetUnitY(caster), range, Filter(function myfilter))
Что еще за рак, скомпилируй перед тем как советовать что "лучше".
А condition и filter работают практически одинакого
учитывая что между ними выполняется операция равенства, даже не знаю, как они могут работать "практически" одинаково, это враппер одной и тойже нативки.
Старый 11.06.2013, 15:07
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Что еще за рак
function EnemiesFilter takes nothing returns boolean
return (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(ForFilter1)) and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0.045)
endfunction

...
set ForFilter1 = caster
call GroupEnumUnitsInRange(g, GetUnitX(caster), GetUnitY(caster), range, Filter(function EnemiesFilter))
где ForFilter1 - глобальная переменная
если это раковый способ написания кода, когда фильтр используется часто (можно глобальный боолэксп конечно) то мискюзи, ShadoW DaemoN тоже рак
Старый 11.06.2013, 15:24
DioD

offline
Опыт: 45,134
Активность:
суть в том, что надо, сразу, в самом фильте, делать то, что, вы хотите, сделать, с юнитом, точка
Старый 11.06.2013, 16:20
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
DioD:
суть в том, что надо, сразу, в самом фильте, делать то, что, вы хотите, сделать, с юнитом, точка
А вот это уже интересно, спасибо, взял на заметку.

Отредактировано Амбидекстрия, 11.06.2013 в 20:11.
Старый 11.06.2013, 19:51
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
На самом деле, совсем необязательно.
Старый 12.06.2013, 00:54
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 17:58.