Юнит увидел врага - брать в таргет
|
|
FatalBlade | Дата: Четверг, 05 Января 2012, 21:19:05 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Мне нужно сделать так, что бы если герой лишённый обычной атаки, увидев врага на расстояние <= 900, использовал на этого врага приказ "smart". Если герой уже кастует или атакует, или же передвигается, то триггер не будет срабатывать. Как это сделать?
Есть 2 события с помощью которых можно это сделать, но они требуют конкретных юнитов. Даже триггерно добавляя событие в другой триггер, всё равно невозможно обратиться к самому юниту, к которому добавлено событие. Например Юнит Увидел Цель или Юнит Подошёл к Юниту на Н-ном расстояние. Как вычислить юнита к которому подходят, или который увидел цель?
|
|
|
|
Diabfall | Дата: Четверг, 05 Января 2012, 21:26:48 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
| Была же такая тема?
Если никто ответ не даст, стукни завтра в асю, попробую помочь.
|
|
|
|
oleg_best_oleg | Дата: Четверг, 05 Января 2012, 21:31:51 | Сообщение # 3 |
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
| FatalBlade, при создании заноси юнита в группу. Периодически в диапазоне 900 от выбранный юнит ( из группы) проверять есть ли юниты, устанавливать в переменную и приказывать smart на цель. При смерти юнита удалять его из группы.
Минусы: Не проверит перезаряжена ли способность. Могут как все в одну цель сделать приказ, так и в разброс.
Сообщение отредактировал oleg_best_oleg - Четверг, 05 Января 2012, 21:33:12 |
|
|
|
FatalBlade | Дата: Четверг, 05 Января 2012, 21:46:52 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (oleg_best_oleg) FatalBlade, при создании заноси юнита в группу. Периодически в диапазоне 900 от выбранный юнит ( из группы) проверять есть ли юниты, устанавливать в переменную и приказывать smart на цель. При смерти юнита удалять его из группы. А это не сильно скажется на производительности? Переодический таймер + локальные группы (что бы проверять юнитов в диапазоне 900).
Quote (oleg_best_oleg) Не проверит перезаряжена ли способность. На самом деле тут даже нету способности) Тут дамми, который двигается по линии, нанося урон врагам на этой линии.
Quote (oleg_best_oleg) Могут как все в одну цель сделать приказ, так и в разброс. То есть? По моему тут ничего плохого нету.
|
|
|
|
tRu^S | Дата: Четверг, 05 Января 2012, 21:49:23 | Сообщение # 5 |
8 уровень
Группа: Проверенные
Сообщений: 614
Награды: 0
Репутация: 138
Блокировки:
| FatalBlade, вот что я хочу
Сообщение отредактировал tRu^S - Четверг, 05 Января 2012, 21:50:16 |
|
|
|
FatalBlade | Дата: Четверг, 05 Января 2012, 21:53:20 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| tRu^S, видел) Надеюсь Близзы не видели это видео, а то им потом не захочется её выпускать. А то засудят за промывание мозгов
|
|
|
|
tRu^S | Дата: Четверг, 05 Января 2012, 21:55:04 | Сообщение # 7 |
8 уровень
Группа: Проверенные
Сообщений: 614
Награды: 0
Репутация: 138
Блокировки:
| Quote (FatalBlade) А то засудят за промывание мозгов xDDD Так чё когда релиз?
|
|
|
|
FatalBlade | Дата: Четверг, 05 Января 2012, 22:15:24 | Сообщение # 8 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (tRu^S) Так чё когда релиз? Релиз чего? Карты или Д3? Зачем тебе мой профиль в твоей подписи?))) Я ещё не выпустил проект а уже есть фанаты?
Сообщение отредактировал FatalBlade - Четверг, 05 Января 2012, 22:18:22 |
|
|
|
lawson | Дата: Четверг, 05 Января 2012, 22:15:32 | Сообщение # 9 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) А это не сильно скажется на производительности? Переодический таймер + локальные группы (что бы проверять юнитов в диапазоне 900). У меня каждую секунду срабатывает 8 таймеров на ИИ читая 600 строк в нем четыре раза пикаются разные юниты + в условиях еще 6 раз, на производительности пока еще видимо не сказалось.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Четверг, 05 Января 2012, 22:20:11 |
|
|
|
FatalBlade | Дата: Четверг, 05 Января 2012, 22:22:28 | Сообщение # 10 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) У меня каждую секунду срабатывает 8 таймеров на ИИ читая 600 строк, на производительности пока еще видимо не сказалось. А у тебя на карте есть ландшафт из 12к декора + 4 мб импорта (869 фаилов) + куева туча Custom РО Даты?
|
|
|
|
lawson | Дата: Четверг, 05 Января 2012, 22:25:18 | Сообщение # 11 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) А у тебя на карте есть ландшафт из 12к декора + 4 мб импорта (869 фаилов) + куева туча Custom РО Даты? Главное чтобы руки брали начала из нужного места и все будет гууд.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
FatalBlade | Дата: Пятница, 06 Января 2012, 01:25:16 | Сообщение # 12 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Всем прошу ответить на очень важный мой вопрос В этой теме Добавлено (05 Январь 2012, 23:38:31) --------------------------------------------- А теперь всем прошу ответить на вопрос в Этой теме Добавлено (06 Январь 2012, 01:25:16) --------------------------------------------- Тогда у меня ещё вопрос: Допустим у меня есть 2 группы - g1 и g2. g1 содержит несколько юнитов, а g2 пустая. Если я хочу что бы в g2 оказались те же юниты что и в g1, достаточно написать set g2 = g1?
Сообщение отредактировал FatalBlade - Четверг, 05 Января 2012, 22:28:12 |
|
|
|
SirNikolas | Дата: Пятница, 06 Января 2012, 09:42:55 | Сообщение # 13 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FatalBlade) set g2 = g1? Нет, ты просто приравниваешь указатели. Для копирования юнитов используетсяCode function Trig_name_Add takes nothing returns nothing call GroupAddUnit(udg_Group2, GetEnumUnit()) endfunction
//... call ForGroup(g1, function Trig_name_Add) //...
|
|
|
|
Ty3uK | Дата: Пятница, 06 Января 2012, 10:53:12 | Сообщение # 14 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Локальные группы в периодическом триггере- это жутко. Имхо хватит одной глобальной
|
|
|
|
FatalBlade | Дата: Пятница, 06 Января 2012, 12:01:15 | Сообщение # 15 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Ty3uK) Локальные группы в периодическом триггере- это жутко. Имхо хватит одной глобальной У меня есть глобальная, но нужно же перебирать юнитов, поэтому надо проверяя каждого из них сохранять в локальную, а затем обратно в глобальную.
Quote (SirNikolas) Code function Trig_name_Add takes nothing returns nothing call GroupAddUnit(udg_Group2, GetEnumUnit()) endfunction
//... call ForGroup(g1, function Trig_name_Add) //... А что лучше для производительности, твой вариант, или вот этот: Code loop set un = FirstOfGroup(udg_MagesGroup) exitwhen un == null call GroupRemoveUnit( udg_MagesGroup, un ) call GroupAddUnit( g, un ) //тут идут все нужные действия endloop
loop set un = FirstOfGroup(п) exitwhen un == null call GroupRemoveUnit( g, un ) call GroupAddUnit( udg_MagesGroup, un ) endloop
Сообщение отредактировал FatalBlade - Пятница, 06 Января 2012, 12:06:15 |
|
|
|
Ty3uK | Дата: Пятница, 06 Января 2012, 13:40:14 | Сообщение # 16 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Омг, а почему бы не затаскивать сразу нужных через фильтр в глобальную? Периодический триггер + локальные группы = выделение большого количества памяти
|
|
|
|
Borodach | Дата: Пятница, 06 Января 2012, 14:00:18 | Сообщение # 17 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| A другие варианты не подходят? К примеру: дать способность пустышку и забиндовать на А, правда автоатаки не будет. Или дать способность которая даст тип атаки 2 с уроном 1, атаки у гера не будет но он сможет атаковать.
Karamba
|
|
|
|
FatalBlade | Дата: Пятница, 06 Января 2012, 14:41:06 | Сообщение # 18 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Borodach) A другие варианты не подходят? К примеру: дать способность пустышку и забиндовать на А, правда автоатаки не будет. Или дать способность которая даст тип атаки 2 с уроном 1, атаки у гера не будет но он сможет атаковать. Такой вариант работает, но в моей карте почему то не работает. Я уже пытался. В отделной карте работало, а в моей нет. Хотя вроде небыло ничего что могло этому припятствовать. Подозреваю что это изза проги Оптимизатор.
Quote (Ty3uK) Омг, а почему бы не затаскивать сразу нужных через фильтр в глобальную? Периодический триггер + локальные группы = выделение большого количества памяти Как? Напиши плз. А то я не понял. У меня кстати глобальная группа должна быть постоянная.
|
|
|
|
Ty3uK | Дата: Пятница, 06 Января 2012, 14:50:26 | Сообщение # 19 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Code call GroupEnumUnitsInRange(group, x, y, range, Filter(function YourFilter)) в фильтре отбираешь нужных юнитов. Хватит глобальной группы (ведь потом можно этого юнита просто удалить из нее)
|
|
|
|
FatalBlade | Дата: Пятница, 06 Января 2012, 15:06:09 | Сообщение # 20 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Ty3uK) в фильтре отбираешь нужных юнитов. Хватит глобальной группы (ведь потом можно этого юнита просто удалить из нее) Так мне не надо нечё удалять. Хотя стоп... тут надо 2 глобальных группы? Типа если у меня одна постоянная, то нужна ещё 1 для фильтра? Напиши плз полностью как это должно выглядеть, а то я хз как с фильтрами работать. Фильтры вообще быстрее групп работают?
Добавлено (06 Январь 2012, 15:06:09) --------------------------------------------- Вот код. Тут есть глобальная группа udg_MagesGroup, которая в итоге должна быть постоянной, то есть остаться с тем же составом юнитов. Code local integer uid local unit un local unit uc local unit ur local player p local group h1 = CreateGroup() local group h2 = CreateGroup() local group h3 = CreateGroup()
loop set un = FirstOfGroup(udg_MagesGroup) exitwhen un == null call GroupRemoveUnit( udg_MagesGroup, un ) call GroupAddUnit( h1, un ) call GroupEnumUnitsInRange( h2, GetWidgetX(un), GetWidgetY(un), 900., null ) set uid = GetHandleId(un) loop set uc = FirstOfGroup(h2) exitwhen uc == null call GroupRemoveUnit( h2, uc ) set p = GetOwningPlayer(un) if (тут мои всякие условия, их очень много) then call GroupAddUnit( h3, uc ) endif endloop set ur = GroupPickRandomUnit(h3) call SaveAgentHandle(udg_Hash, uid, 445, ur) call IssueTargetOrderById( un, 851971, ur ) endloop
loop set un = FirstOfGroup(h1) exitwhen un == null call GroupRemoveUnit( h1, un ) call GroupAddUnit( udg_MagesGroup, un ) endloop
Сообщение отредактировал FatalBlade - Пятница, 06 Января 2012, 15:08:50 |
|
|
|
SirNikolas | Дата: Пятница, 06 Января 2012, 15:56:59 | Сообщение # 21 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FatalBlade) loop set un = FirstOfGroup(udg_MagesGroup) exitwhen un == null call GroupRemoveUnit( udg_MagesGroup, un ) call GroupAddUnit( g, un ) //тут идут все нужные действия endloop loop set un = FirstOfGroup(п) exitwhen un == null call GroupRemoveUnit( g, un ) call GroupAddUnit( udg_MagesGroup, un ) endloop Вариант для тех, кому лень создать глобалки для передачи параметров в ForGroup.
|
|
|
|
FatalBlade | Дата: Пятница, 06 Января 2012, 16:00:59 | Сообщение # 22 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) Вариант для тех, кому лень создать глобалки для передачи параметров в ForGroup. Что быстрее для производительности?
|
|
|
|
SirNikolas | Дата: Суббота, 07 Января 2012, 11:16:50 | Сообщение # 23 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| 60-35874-1371704-16-1325852768
|
|
|
|