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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Максимальная оптимизация периодического триггера (Код где используются группы юнитов, группы >>>> фильтры)
[Вопрос] Максимальная оптимизация периодического триггера
Ty3uKДата: Суббота, 07 Января 2012, 12:11:17 | Сообщение # 26
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Собственно в какой-то теме я ему это уже говорил ^_^

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

FatalBladeДата: Суббота, 07 Января 2012, 13:25:44 | Сообщение # 27
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
А как вот это сделать в фильтре?
Code
    call GroupEnumUnitsOfType( g, UnitId2String('n00J'), null )
       loop
           set un = FirstOfGroup(g)
           exitwhen un == null
           call GroupRemoveUnit( g, un )
           set i = GetPlayerId(GetOwningPlayer(un)) + 1
           set x = GetWidgetX(udg_HeroesPlaying[i])
           set y = GetWidgetY(udg_HeroesPlaying[i])
           call SetUnitX( un, x )
           call SetUnitY( un, y )
       endloop




Сообщение отредактировал FatalBlade - Суббота, 07 Января 2012, 13:26:17
 

Ty3uKДата: Суббота, 07 Января 2012, 13:38:32 | Сообщение # 28
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Эти действия в фильтре просто делаешь. Без условий. И возвращает истину

Добавлено (07 Январь 2012, 13:38:32)
---------------------------------------------
А не, ложь. Ты же потом удаляешь их из группы


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

FatalBladeДата: Суббота, 07 Января 2012, 13:48:05 | Сообщение # 29
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Ty3uK)
Эти действия в фильтре просто делаешь. Без условий. И возвращает истину

А есть тогда в этом смысл? Просто локальную группу всё равно приходится использовать, ведь для GroupEnumUnitsOfTypeнужна переменная-группа. Так в добавок ещё и функцию новую запускать.

Аналогичный вопрос вот с этим. Не обращайте внимание на переменные и что они значат.
Code
     loop
          set un = FirstOfGroup(g)
          exitwhen un == null
          call GroupRemoveUnit(g, un)
          set p2 = GetOwningPlayer(un)
          if IsPlayerAlly( p2, p1 ) == false and p2 != p1 and check[o] == true then
              set check[o] = false
              set dx = GetWidgetX(un) - x0
              set dy = GetWidgetY(un) - y0
              set d = SquareRoot( dx * dx + dy * dy )
              if d <= 1000 then
                  set mod = 1.00
              elseif d <= 1500 and d > 1000 then
                  set mod = 0.80
              elseif d <= 2000 and d > 1500 then
                  set mod = 0.60
              elseif d > 2000 then
                  set mod = 0.40
              endif
              call SetPlayerState( p2, PLAYER_STATE_RESOURCE_GOLD, (GetPlayerState(p2, PLAYER_STATE_RESOURCE_GOLD)) + R2I( result * mod ) )
          endif
      endloop


 

Ty3uKДата: Суббота, 07 Января 2012, 13:51:19 | Сообщение # 30
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Цикл с таким перебором может на время повесить комп, когда как фильтр нет. Плюс, можно создать глобальную группу для таких случаев- если фильтр возвращает ложь, то юнит не добавляется. Но действия в фильтре для него совершаются. Надеюсь, ты понял

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

lawsonДата: Суббота, 07 Января 2012, 14:20:25 | Сообщение # 31
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
FatalBlade, Кароче вот смотри что тебе долбят уже столько времени: Как пользоваться фильтром, возможны грамматический ошибки изза того что писал от руки.

function FilterCondition takes nothing return boolean
local unit u = GetFilterUnit()
ACTIONS // Дальше все действия с юнитами
return false// Даст тебе возможность не записывать юнитов в группу по окончанию действий с ними
endfunction

function TriggerFunction takes nothing returns nothing
call GroupEnumUnitsInRange( глобальнаяГруппа, GetWidgetX(un), GetWidgetY(un), 900., Filter-Condition(function FilterCondition))
\\Можно использовать или фильтр или сондишн, без разницы
endfunction

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


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Суббота, 07 Января 2012, 14:27:24
 

FatalBladeДата: Суббота, 07 Января 2012, 14:36:44 | Сообщение # 32
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
lawson, ок. Но в данном случае, я не могу использовать глобалку, потому что событие всего этого код - Юнит Умирает. И переменную Юнит тоже не могу использовать глобальной, так как этот код может запуститься одновременно хоть 100500 раз. Как тут быть?

Code
         if IsPlayerAlly( p2, p1 ) == false and p2 != p1 and check[o] == true then

Вот это я хочу что бы проверял фильтр.
p1 = Владелец убитого юнита.
p2 = Владелец очередного пикнутого юнита в радиусе 2500 от убитого юнита
check[o] = Это проверяет, что если у данного игрока уже есть юнит в радиусе 2500 от убитого, то не пикать. Если нету - пикнуть.

Как сохранить игрока в Фильтр. Я не могу использовать тут глобалку, потому что этот триггер может запускаться много раз в одно и то же время.




Сообщение отредактировал FatalBlade - Суббота, 07 Января 2012, 14:42:47
 

SirNikolasДата: Суббота, 07 Января 2012, 15:05:46 | Сообщение # 33
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (FatalBlade)
И переменную Юнит тоже не могу использовать глобальной, так как этот код может запуститься одновременно хоть 100500 раз.
FatalBlade, если ты не используешь wait (а ведь ты его не используешь, я надеюсь?), тебе не надо думать о возможности параллельного запуска.

Добавлено (07 Январь 2012, 15:05:46)
---------------------------------------------

Quote (FatalBlade)
Я не могу использовать тут глобалку, потому что этот триггер может запускаться много раз в одно и то же время.
^ same.


 

FatalBladeДата: Суббота, 07 Января 2012, 15:14:05 | Сообщение # 34
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (SirNikolas)
FatalBlade, если ты не используешь wait (а ведь ты его не используешь, я надеюсь?),

Вейты не использую.

Quote (SirNikolas)
тебе не надо думать о возможности параллельного запуска.

То что ты вчера писал, насчёт глобалки, то да, там проверяется всё поочерёдно, потому что проверяется оно каждую секунду. Здесь же, событие Юнит Умирает. Разве не могут юниты умереть одновременно?
Вот например: Герой заюзал спелл который наносит урон врагам вокруг. Допустим всех врагов вокруг этот спелл убил. Вот тебе и паралельный запуск.


 

lawsonДата: Суббота, 07 Января 2012, 15:23:53 | Сообщение # 35
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
могут юниты умереть одновременно?

Да хоть 100500 раз могут - для человеческого глаза, а для триггера наплевать, для триггера все равно они умирают поочередно.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Суббота, 07 Января 2012, 15:25:58
 

FatalBladeДата: Суббота, 07 Января 2012, 15:35:22 | Сообщение # 36
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (lawson)
Да хоть 100500 раз могут - для человеческого глаза, а для триггера наплевать, для триггера все равно они умирают поочередно.

Даже если они умерли посредством UnitDamagePoint(bla bla bla)?


 

SirNikolasДата: Суббота, 07 Января 2012, 15:37:15 | Сообщение # 37
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Да.

Добавлено (07 Январь 2012, 15:37:15)
---------------------------------------------
Не юзай UnitDamagePoint! Жутко глючит.


 

FatalBladeДата: Суббота, 07 Января 2012, 15:46:02 | Сообщение # 38
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (SirNikolas)
Не юзай UnitDamagePoint! Жутко глючит.

хз.. Сколько юзаю, не разу не косячило.


 

SirNikolasДата: Суббота, 07 Января 2012, 15:58:51 | Сообщение # 39
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Со зданиями глюки. И оно дамажит союзников.

 

FatalBladeДата: Суббота, 07 Января 2012, 16:03:27 | Сообщение # 40
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (SirNikolas)
Со зданиями глюки.

Зданий на карте нету)

Quote (SirNikolas)
И оно дамажит союзников.

Иногда мне как раз это и нужно, что бы дамажило и врагов и союзников.


 

Ty3uKДата: Суббота, 07 Января 2012, 16:26:02 | Сообщение # 41
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Втф. Без разницы как. Поинт тоже наносит урон юнитам по-очереди

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

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Максимальная оптимизация периодического триггера (Код где используются группы юнитов, группы >>>> фильтры)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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