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

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

Закрытая тема
 
zer0ne

offline
Опыт: 11,119
Активность:
Фильтр
Как зделать фильтр для спелла, который действует на юнитов всех игроков, определюет что юнит не мертв, не является техникой или летающим? Напишите пожалуйста такую функцию

Отредактировано zer0ne, 31.08.2008 в 20:49.
Старый 31.08.2008, 19:31
adic3x

offline
Опыт: 107,539
Активность:
Код:
globals
 boolexpr cnd=null
 group gr_temp=CreateGroup()
 player p_temp=null
endglobals

function flt takes nothing returns boolean
 local unit u=GetFilterUnit()
 
 if GetWidgetLife(u)>.405 and IsUnitEnemy(u, p_temp) and not IsUnitType(u, UNIT_TYPE_FLYING)then
  // action with unit
 endif

 set u=null
 return false
endfunction

// --->
 set p_temp=GetOwningPlayer(some_unit)
 call GroupEnumUnitsInRange(gr_temp, x, y, 256. cnd)
// <---

function init takes nothing returns nothing
 set cnd=Condition(function flt)           
endfunction


коменты нужны?
Старый 31.08.2008, 19:48
zer0ne

offline
Опыт: 11,119
Активность:
ADOLF думаю разберусь, спасибо
Старый 31.08.2008, 19:57
Sebra

offline
Опыт: 5,603
Активность:
ADOLF, зачем впихнул проверку на врага вместо проверки на технику? Обманываешь людей.
Старый 31.08.2008, 19:57
zer0ne

offline
Опыт: 11,119
Активность:
ага наверно ты хотел вместо
Код:
and IsUnitEnemy(u, p_temp)
написать
Код:
and not IsUnitType(u, UNIT_TYPE_MECHANICAL)
? Или надо еще это добавит?

Отредактировано zer0ne, 31.08.2008 в 20:14.
Старый 31.08.2008, 20:06
adic3x

offline
Опыт: 107,539
Активность:
ну я как пример, впринципе скопировать условие на юнит тип и поменять на технику)

ладно, вариант как для первого поста)

Код:
globals
 boolexpr cnd=null
 group gr_temp=CreateGroup()
endglobals

function flt takes nothing returns boolean
 local unit u=GetFilterUnit()
 
 if GetWidgetLife(u)>.405 and not IsUnitType(u, UNIT_TYPE_FLYING) and not IsUnitType(u, UNIT_TYPE_MECHANICAL)then
  // action with unit
 endif

 set u=null
 return false
endfunction

// --->
 call GroupEnumUnitsInRange(gr_temp, x, y, 256. cnd)
// <---

function init takes nothing returns nothing
 set cnd=Condition(function flt)           
endfunction
Старый 31.08.2008, 20:06
zer0ne

offline
Опыт: 11,119
Активность:
ADOLF хотя нет я себя переоценил, комментарии нужны)
Старый 31.08.2008, 20:28
adic3x

offline
Опыт: 107,539
Активность:
http://xgm.guru/forum/showpost.php?p=440059&postcount=6

коментирую пример отсюда)

(сразу оговорка что я юзаю ген пак)

создаем группу в глобалках, но она нам нужна тока как временный буфер
там же бул експр, что бы не вызывать каждый раз кондишин

функция пика юнитов приниет такой обьект как кондишин в качестве аргумента

в иничиализации (вызвать где то в начале единожды) создаем наш кондишин, в качестве аргумента - функция, которая и будет применена

фичя в том что наша функцияКондишин возращает бульку, которая отвечает за то, будет ли добавлен юнит в группу, как ты видешь там фалсе, т.е. при вызове ГроупЕнумЮнитсИн... для всех юнитов будет вызван этот кондишин, т.е. функция, доступ к юниту мы там получаем черег ГетФилтерЮнит

мы просто проверяем условия (ну тут надебсь ясно), если что делаем свои делишки и возращаем фалсе, т.е. группа будет чиста, нам не надо ее не создавать, не удалять каждый раз
Старый 31.08.2008, 22:18
zer0ne

offline
Опыт: 11,119
Активность:
ADOLF
ок, спасибо! Тему можно закрывать
Старый 31.08.2008, 22:28
Закрытая тема

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

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

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

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



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