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

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

Ответ
 
ARHUI

offline
Опыт: 3,341
Активность:
Движение юнита
каждые три секунды работает триггер, на карте тормозов не замечено однако юниты с каждой волной все дольше исполняют приказ
    local group g = CreateGroup()
    local unit u
    local integer a = 0
    local location loc = Location(GetRectCenterX(gg_rct_the_house_region), GetRectCenterY(gg_rct_the_house_region))
    call GroupEnumUnitsInRect(g, bj_mapInitialPlayableArea, null)
    loop
        set u = FirstOfGroup(g)
        exitwhen u == null
        if GetOwningPlayer(u) == Player(11) then
            loop
                exitwhen a == 4
                if GetUnitUserData(u) == a then
                    if udg_IsGateDead[a] or udg_wave>18 then
                        call IssuePointOrderLoc(u, "attack", loc )
                    else
                        call IssueTargetOrder(u, "attack", udg_gates[ a ] )
                    endif
                endif
                set a = a + 1
            endloop
            set a = 0
        endif
        call GroupRemoveUnit(g, u)
    endloop
    set loc = null
    set u = null
    call DestroyGroup(g)
Старый 08.01.2011, 04:46
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
call RemoveLoc(loc)
set g = null
Старый 08.01.2011, 04:48
ARHUI

offline
Опыт: 3,341
Активность:
поправка разные волны разное время думают перед тем как начать движение, при следующем цикле они останавливаются и снова думают. Как этого избежать?
Старый 08.01.2011, 04:49
Скайнет
Kicked by ZlaYa1000
offline
Опыт: 8,234
Активность:
глобал группа, в которую ты засунешь тех, кто приказ уже получил. затем при пике проверяешь наличие юнитов в группе (иначе - отсеиваешь уже обработанных) и делаешь мутные делишки
Старый 08.01.2011, 04:51
Banzay89

offline
Опыт: 11,155
Активность:
local location loc = Location(GetRectCenterX(gg_rct_the_house_region), GetRectCenterY(gg_rct_the_house_region))
можно заменить на это
local real x=GetRectCenterX(gg_rct_the_house_region)
local real y=GetRectCenterY(gg_rct_the_house_region)
//
//
call IssuePointOrder(u, "attack", x,y)
//
Banzay89 добавил:
а зачем два цыкла для движения юнитов??? я в своей карте вот такой триггер использую:
function Monster_Move_Boolean takes nothing returns boolean
return(GetOwningPlayer(GetFilterUnit()) == Player(5))
endfunction

function Trig_Monster_Move_Actions takes nothing returns nothing
local group    gr=CreateGroup()
local unit     g
local real x
local real y
set   gr=GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function Monster_Move_Boolean))
loop
 set g=FirstOfGroup(gr)
  exitwhen g==null
if   GetWidgetLife(g) > 0.405 then
set  x=GetRandomReal(GetRectMinX(gg_rct_ARENA), GetRectMaxX(gg_rct_ARENA))
set  y=GetRandomReal(GetRectMinY(gg_rct_ARENA), GetRectMaxY(gg_rct_ARENA))
call IssuePointOrder(g, "attack",x,y)
endif
call GroupRemoveUnit(gr,g)
endloop
call DestroyGroup(gr)
set  gr=null
set  g=null
endfunction
Старый 08.01.2011, 06:07
spellwerk

offline
Опыт: 4,869
Активность:
Код:
local location loc = Location(GetRectCenterX(gg_rct_the_house_region), GetRectCenterY(gg_rct_the_house_region))

вообще, лучше заменить на это
Код:
globals
    real house_x = GetRectCenterX(gg_rct_the_house_region)
    real house_y = GetRectCenterY(gg_rct_the_house_region)
endglobals


Код:
loop
    exitwhen a == 4
    if GetUnitUserData(u) == a then
        if udg_IsGateDead[a] or udg_wave>18 then
            call IssuePointOrderLoc(u, "attack", loc )
        else
            call IssueTargetOrder(u, "attack", udg_gates[ a ] )
        endif
    endif
    set a = a + 1
endloop

лучше сразу заменить на
Код:
local integer data = GetUnitUserData(u)
//....
if udg_IsGateDead[data] or udg_wave>18 then
    call IssuePointOrderLoc(u, "attack", loc )
else
    call IssueTargetOrder(u, "attack", udg_gates[data] )
endif


и может лучше создавать группы этих юнитов, и производить действия с группами, а не каждый раз пикать и делать кучу проверок?
Старый 08.01.2011, 10:35
Doc

offline
Опыт: 63,163
Активность:
Когда много юнитов - они тупят. Баг вакрафта.
Старый 08.01.2011, 11:46
ARHUI

offline
Опыт: 3,341
Активность:
>и может лучше создавать группы этих юнитов, и производить действия с группами, а не каждый раз пикать и делать кучу проверок?<
разве группа это не объект который потом каждому юниту внутри себя даст этот приказ? Тогда какая разница сразу давать приказ каждому юниту или группе?
Старый 09.01.2011, 20:44
ARHUI

offline
Опыт: 3,341
Активность:
есть функция которая берет юнита и возвращает его цель?
Старый 09.01.2011, 23:48
Ответ

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

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

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

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



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