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

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

Ответ
 
DeT

offline
Опыт: 5,715
Активность:
FellGuard
дык смысле в том, что если кастующий юнит равен юниту из массива(а одновременно кастует тока один) то дальше активизируются действия..

Цитата:
А почему loop не вынести в код карты?

в смысле?

зы: так ответ какой?
будет это работать или нет?

умя в моем коде(см. внизу поста) дохрена ошибок...(по крайней мере редактор видит)
можешь сказать че не так..я скока не смотрел все вроде нормально
зы: код просто висит в глобальном разделе и пока никак не используется...а уже стока ...ппц
Старый 02.02.2007, 11:19
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Имхо лучше так (я не слишком хорош в джассе, ждем ДиоДа)
Код:
function DS_CCasted takes nothing returns boolean
    local boolean b = false
    local integer a = 0
    loop
      exitwhen a>udg_DS_Num or b == true
        set b = (GetSpellAbilityUnit() == udg_DS_Units[a] )
        set a = a + 1
    endloop
    return b
endfunction

Отредактировано FellGuard, 02.02.2007 в 11:43.
Старый 02.02.2007, 11:20
DeT

offline
Опыт: 5,715
Активность:
FellGuard
на выходе получается абсолютно идентично, ИМХО разницы тута нет
зы: ждем диода
и вообще вопрос основывался на том, можжно ли в jass'e в условиях юзать лупы , ифы итд...
если можно то это круто,т.к. это гораздо круче чем ГУИ
и всетаки ждем диода...
Старый 02.02.2007, 11:23
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Тут у нас завершенный луп. По примеру близзардс :) Хотя хз, можно попробовать твой вариант
Старый 02.02.2007, 11:28
DeT

offline
Опыт: 5,715
Активность:
чОрт...
вот...где ошибки?
Код:
//udg_DS_CTrigger : trigger - Õðàíèò â ñåáå òðèããåð, êîòîðûé îòëàâëèâàåò êàñò ñïåëëîâ ñðåäè ïðîêëÿòûõ âîèíîâ
//udg_DS_Units : array unit  - ññûëêè íà ïðîêëÿòûõ þíèòîâ
//udg_DS_Num : integer - êîëè÷åñòâî ïðîêëÿòûõ þíèòîâ
//udg_DS_Level : integer  - òåêóùèé óðîâåíü àáèëêè
//udg_DS_Timer : timer - äëÿ îò÷èñòêè íåíóæíîé ôèãíè


function DS_ClearA takes nothing returns nothing
    local integer a = 0
    loop
    exitwhen a>udg_DS_Num
        call RemoveUnit(udg_DS_Units[a])
        set udg_DS_Units[a] = null
        set a = a + 1
    endloop
    set udg_DS_Num = 0
    call DestroyTimer(udg_DS_Timer)
    set udg_DS_Timer = null
    set udg_DS_Level = 0
    call DestroyTrigger(udg_DS_CTrigger)
    set udg_DS_CTrigger=null
endfunction


function DS_ACasted takes nothing returns nothing
    call CreateUnit(Player(0),'h000', GetUnitX(udg_DS_Units[101]) , GetUnitY(udg_DS_Units[101]) , 1)
    call UnitDamageTargetBJ( GetLastCreatedUnit(), GetSpellAbilityUnit(), udg_DS_Level*40, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    call IssuePointOrderLocBJ( GetLastCreatedUnit(), "silence", GetUnitLoc(GetSpellAbilityUnit()) )
    call PolledWait(0.05)
    call RemoveUnit(GetLastCreatedUnit() )
endfunction


function DS_CCasted takes nothing returns boolean
    local boolean b = false
    local integer a = 0
    loop
      exitwhen a>udg_DS_Num or b == true
        set b = (GetSpellAbilityUnit() == udg_DS_Units[a] )
        set a = a + 1
    endloop
    return b
endfunction


function DS_PUnits takes nothing returns nothing
    if (GetOwningPlayer(GetEnumUnit()) != GetOwningPlayer(udg_DS_Units[101]) ) and (PlayersAreCoAllied(GetOwningPlayer(GetEnumUnit()),udg_DS_Units[101]) == false)  then
        set udg_DS_Units[udg_DS_Num] = GetEnumUnit()
        set udg_DS_Num = udg_DS_Num + 1
    else
    endif
endfunction

function DS_Casting takes nothing returns nothing
    call DS_ClearA()
    set udg_DS_Num = 0
    set udg_DS_Units[101] = GetTriggerUnit()
    set udg_DS_Level = GetUnitAbilityLevel(udg_DS_Units[101], 'A001' )
    call ForGroupBJ( GetUnitsInRangeOfLocAll(udg_DS_Level*300, GetUnitLoc(udg_DS_Units[101])), function DS_PUnits )
    call DestroyGroup(bj_lastCreatedGroup)
    set udg_DS_CTrigger = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(udg_DS_CTrigger, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(udg_DS_CTrigger, function DS_CCasted )
    call TriggerAddAction( udg_DS_CTrigger, function DS_ACasted )
endfunction
Старый 02.02.2007, 11:57
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Цитата:
call TriggerAddCondition(udg_DS_CTrigger, function DS_CCasted )
преобразуем в
Цитата:
call TriggerAddCondition(udg_DS_CTrigger, Condition(function DS_CCasted) )
Старый 02.02.2007, 13:00
DeT

offline
Опыт: 5,715
Активность:
вот так вот..рабочий код
Код:
//udg_DS_CTrigger : trigger - Õðàíèò â ñåáå òðèããåð, êîòîðûé îòëàâëèâàåò êàñò ñïåëëîâ ñðåäè ïðîêëÿòûõ âîèíîâ
//udg_DS_Units : array unit  - ññûëêè íà ïðîêëÿòûõ þíèòîâ
//udg_DS_Num : integer - êîëè÷åñòâî ïðîêëÿòûõ þíèòîâ
//udg_DS_Level : integer  - òåêóùèé óðîâåíü àáèëêè
//udg_DS_Timer : timer - äëÿ îò÷èñòêè íåíóæíîé ôèãíè


function DS_ClearA takes nothing returns nothing
    local integer a = 0
    loop
    exitwhen a>udg_DS_Num
        call RemoveUnit(udg_DS_Units[a])
        set udg_DS_Units[a] = null
        set a = a + 1
    endloop
    set udg_DS_Num = 0
    call DestroyTimer(udg_DS_Timer)
    set udg_DS_Timer = null
    set udg_DS_Level = 0
    call DestroyTrigger(udg_DS_CTrigger)
    set udg_DS_CTrigger=null
endfunction


function DS_ACasted takes nothing returns nothing
    call CreateUnit(Player(0),'h000', GetUnitX(udg_DS_Units[101]) , GetUnitY(udg_DS_Units[101]) , 1)
    call UnitDamageTargetBJ( GetLastCreatedUnit(), GetSpellAbilityUnit(), udg_DS_Level*40, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    call IssuePointOrderLocBJ( GetLastCreatedUnit(), "silence", GetUnitLoc(GetSpellAbilityUnit()) )
    call PolledWait(0.3)
    call RemoveUnit(GetLastCreatedUnit() )
endfunction



function DS_CCasted takes nothing returns boolean
    local boolean b = false
    local integer a = 0
    loop
      exitwhen a>udg_DS_Num or b == true
        set b = (GetSpellAbilityUnit() == udg_DS_Units[a] )
        set a = a + 1
    endloop
    return b
endfunction


function DS_PUnits takes nothing returns nothing
    if (GetOwningPlayer(GetEnumUnit() ) != GetOwningPlayer(udg_DS_Units[101]) ) and  (GetPlayerAlliance(GetOwningPlayer(GetEnumUnit() ),GetOwningPlayer(udg_DS_Units[101]),ALLIANCE_PASSIVE) ==false )  then
        set udg_DS_Units[udg_DS_Num] = GetEnumUnit()
        set udg_DS_Num = udg_DS_Num + 1
    endif
endfunction

function DS_Casting takes nothing returns nothing
    call DS_ClearA()
    set udg_DS_Num = 0
    set udg_DS_Units[101] = GetTriggerUnit()
    set udg_DS_Level = GetUnitAbilityLevel(udg_DS_Units[101], 'A001' )
    call ForGroupBJ( GetUnitsInRangeOfLocAll(udg_DS_Level*300, GetUnitLoc(udg_DS_Units[101])), function DS_PUnits )
    call DestroyGroup(bj_lastCreatedGroup)
    set udg_DS_CTrigger = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(udg_DS_CTrigger, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(udg_DS_CTrigger, Condition(function DS_CCasted) )
    call TriggerAddAction(udg_DS_CTrigger, function DS_ACasted)
endfunction
Старый 02.02.2007, 13:08
Ответ

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

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

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

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



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