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

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

Ответ
 
ErickSkrauch

offline
Опыт: 5,451
Активность:
Проблема перебора группы
Уже 3й день мучаюсь. Вот код:
» Код
globals
    unit array unit_lazer
endglobals

function TurnOnlyTarget takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer h = GetHandleId(t)
    local integer i = 1
    local unit array u
    loop 
        exitwhen i > 4
            set u[i] = LoadUnitHandle(hash,h,i)
            i++
        endloop
    set i = 1
    loop
        exitwhen i > 4
        call SetUnitFacingToFaceLocTimed( u[i], GetUnitLoc(unit_lazer[i]), 0.16 )
        i++
    endloop
endfunction

function CastSpell takes nothing returns nothing
    local rect array re
    local unit array u
    local group g = CreateGroup()
    local integer i = 1
    local unit un
    local real x
    local real y
    local integer facing = 315
    local timer t = CreateTimer()
    local integer ha = GetHandleId(t)
    set re[1]=gg_rct_25lvlA
    set re[2]=gg_rct_25lvlB
    set re[3]=gg_rct_25lvlD
    set re[4]=gg_rct_25lvlC
    loop
        exitwhen i > 4
        set x = GetRectCenterX(re[i])
        set y = GetRectCenterY(re[i])
        set u[i]= CreateUnit(Player(12),'h00K', x,y,facing)
        set facing = facing-90
        i++
    endloop
    set i=1
    set g = GetUnitsInRectAll(gg_rct_25lvlGameZone)
    loop
        set un = FirstOfGroup(g)
                if GetUnitTypeId(un) == 'H00G' then
                    set unit_lazer[i]=un
                    call GroupRemoveUnit(g,un)
                    call BJDebugMsg("True")
                    i++
                else
                    call GroupRemoveUnit(g,un)
                    call BJDebugMsg("False")
                endif
    exitwhen un == null
    endloop
    set i=1
    loop
        exitwhen i > 4
        call IssuePointOrderLoc(u[i],"blizzard",GetUnitLoc(unit_lazer[i]) )
        call SaveUnitHandle(hash,ha,i,u[i])
        i++
    endloop
    call TimerStart(t,0.20,true,function TurnOnlyTarget)
endfunction
Функция создаёт 4 юнита и поворачивает их на свой градус. Затем она перебирает всех юнито в области и заносит их в глобальную переменную. Вот тут и проблема - функция всегда возвращает False, хотя юнитов в области этого типа 3е.
Не обращайте внимание на утечки - я их ещё не убирал.
Старый 26.10.2011, 12:47
youtube
сктыщь
offline
Опыт: 8,025
Активность:
set u[i]= CreateUnit(Player(12),'h00K', x,y,facing)

if GetUnitTypeId(un) == 'H00G' then
или так и должно быть? в первом случае 'h00K', а в другом 'H00G'
Старый 26.10.2011, 13:39
ErickSkrauch

offline
Опыт: 5,451
Активность:
youtube, да, мне нужно выбрать только моих идиотов, которых эти созданые монстрики будут кромсать.
Старый 26.10.2011, 13:42
youtube
сктыщь
offline
Опыт: 8,025
Активность:
» мм не?
library Units initializer Init{
    include "cj_types_priv.j"
    define{
        private E1="Abilities\\Spells\\Undead\\AntiMagicShell\\AntiMagicShell.mdl"
        private E2="Abilities\\Spells\\Human\\Banish\\BanishTarget.mdl"
    }
    unit unit_lazer[8000]
    private void onAction(){
        rect re[]
        unit u[]
        group g = CreateGroup()
        integer i = 1
        unit un
        real x
        real y
        integer facing = 315
        timer t = CreateTimer()
        integer ha = GetHandleId(t)
        re[1]=gg_rct_A1
        re[2]=gg_rct_A2
        re[3]=gg_rct_A3
        re[4]=gg_rct_A4
        re[5]=gg_rct_All
        do{
            x = GetRectCenterX(re[i])
            y = GetRectCenterY(re[i])
            u[i]= CreateUnit(Player(0),'hpea', x,y,facing)
            UnitAddAbility(u[i],'AHbz')
            facing = facing-90
        }whilenot(i++ >= 4)
        i=0
        g= GetUnitsInRectAll(re[5])
        do{
            un = FirstOfGroup(g)
            if GetUnitTypeId(un) == 'hfoo' then
                unit_lazer[i]=un
                GroupRemoveUnit(g,un)
                BJDebugMsg("True")
                debug AddSpecialEffectTarget(E1,un,"origin")
                i++
            else
                GroupRemoveUnit(g,un)
                debug AddSpecialEffectTarget(E2,un,"origin")
                BJDebugMsg("False")
            endif
        }whilenot(un == null)
        i=1
        do{
            IssuePointOrderLoc(u[i],"blizzard",GetUnitLoc(unit_lazer[i]) )
            //SaveUnitHandle(hash,ha,i,u[i])
        }whilenot(i++>=4)
    }
    private void Init(){
        onAction()
    }
}
Прикрепленные файлы
Тип файла: w3x QWE.w3x (13.8 Кбайт, 2 просмотров )
Старый 26.10.2011, 14:31
ErickSkrauch

offline
Опыт: 5,451
Активность:
youtube, одна проблема, я незнаю vjass. Скинь мне скайп в ЛС.
Старый 26.10.2011, 14:34
youtube
сктыщь
offline
Опыт: 8,025
Активность:
ErickSkrauch, да там больше cjass чем vj
Старый 26.10.2011, 14:36
Ответ

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

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

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

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



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