Сейчас 00:01:44 Пятница, 10 мая, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Юнит увидел врага - брать в таргет (Иммитация обычной атаки юниту лишённому обычной атаки)
Юнит увидел врага - брать в таргет
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, видел)
Надеюсь Близзы не видели это видео, а то им потом не захочется её выпускать. А то засудят за промывание мозгов :D


 

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?
Зачем тебе мой профиль в твоей подписи?))) Я ещё не выпустил проект а уже есть фанаты? :D :D




Сообщение отредактировал 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
Блокировки:
Локальные группы в периодическом триггере- это жутко. Имхо хватит одной глобальной

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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
Блокировки:
Омг, а почему бы не затаскивать сразу нужных через фильтр в глобальную? Периодический триггер + локальные группы = выделение большого количества памяти

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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))
в фильтре отбираешь нужных юнитов. Хватит глобальной группы (ведь потом можно этого юнита просто удалить из нее)


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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

 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Юнит увидел врага - брать в таргет (Иммитация обычной атаки юниту лишённому обычной атаки)
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz