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

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

Ответ
 
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Jass-спелл
Код:
function Trig_Blades_of_Venom_Func001A takes nothing returns nothing
local unit dum
    if GetBooleanAnd( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == true,GetBooleanAnd(IsUnitType(GetEnumUnit(), UNIT_TYPE_HERO) == true,IsUnitAliveBJ(GetEnumUnit()) == true)) then
        set dum=CreateUnitAtLoc( GetOwningPlayer(GetSpellAbilityUnit()), 'o005',GetUnitLoc(GetEnumUnit()), 180)
        //call CreateNUnitsAtLoc( 1, 'o005', GetOwningPlayer(GetSpellAbilityUnit()), GetUnitLoc(GetEnumUnit()), bj_UNIT_FACING )
        call UnitAddAbilityBJ( 'A03Q', dum )
        call SetUnitAbilityLevelSwapped( 'A03Q', dum, GetUnitAbilityLevelSwapped('A03Q', GetSpellAbilityUnit()) )
        call IssueTargetOrderBJ( dum, "shadowstrike", GetEnumUnit() )
        call UnitApplyTimedLife(dum, 'BTLF',0.5)
        else
    endif
endfunction

function Trig_Blades_of_Venom_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRangeOfLocAll(475.00, GetUnitLoc(GetSpellAbilityUnit())), function Trig_Blades_of_Venom_Func001A )
endfunction


Почему-то спелл кастуется только на 1 юнита в области, даже если их много. И уровень спела постоянно один и тот же, но уровень у кастера меняется

Артте добавил:
В чем трабла?
Старый 31.01.2009, 21:43
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
делай через цикл
Цитата:
Jass-спелл

как такового жасса я здесь не увидел, просто сконверченый из гуи триггер
Старый 31.01.2009, 21:48
DeaDoK

offline
Опыт: 5,783
Активность:
при даммикасте лучш юзать не ФорГруп а цикл и перебор юнитов
Старый 31.01.2009, 21:54
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
DeaDoK, а я как сказал? зачем повторять? ^_^
Артте, вот так код спелла красивей смотрится:
Код:
function Trig_Blades_of_Venom_Run takes nothing returns nothing
    local unit dum
    if IsUnitAlly(GetEnumUnit(), GetOwningPlayer(GetTriggerUnit())) != true and IsUnitType(GetEnumUnit(), UNIT_TYPE_HERO) == true and IsUnitAliveBJ(GetEnumUnit()) == true then
        set dum=CreateUnit( GetOwningPlayer(GetTriggerUnit()), 'o005',GetUnitX(GetEnumUnit()),GetUnitY(GetEnumUnit()), 0)
        call UnitAddAbility(dum, 'A03Q' )
        call SetUnitAbilityLevel(dum, 'A03Q', GetUnitAbilityLevel(GetTriggerUnit()), 'A03Q')
        call IssueTargetOrder( dum, "shadowstrike", GetEnumUnit() )
        call UnitApplyTimedLife(dum, 'BTLF',0.5)
        set dum = null
    endif
endfunction

function Trig_Blades_of_Venom_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRangeOfLocAll(475, GetUnitLoc(GetTriggerUnit())), function Trig_Blades_of_Venom_Run )
endfunction
Старый 31.01.2009, 22:06
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
А пример перебора циклом всех юнитов можете дать? А то не очень представляю себе это в ф-циях
Старый 31.01.2009, 22:42
agentex

offline
Опыт: 34,834
Активность:
О_О какой ужасный код в первом посте, даже страшно становится.
На самом деле луп медленней, но в данном случае согласен, он будет уместней.
Старый 31.01.2009, 22:57
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Мде, а по сабжу ниче сказать не можешь? Лучше промолчал бы..
Старый 31.01.2009, 23:01
agentex

offline
Опыт: 34,834
Активность:
Артте, ты тоже не умничай, подобные говнокоды выкладывать - позор
а вот как циклом надо
Код:
function Trig_Blades_of_Venom_Actions takes nothing returns nothing
local unit u = GetSpellAbilityUnit()
local unit t = null
local unit dum = null
local group g = CreateGroup()
call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u), 475., null)
loop
set t = FirstOfGroup(g)
  if IsUnitEnemy(t, GetOwningPlayer(u)) and IsUnitType(t, UNIT_TYPE_HERO) and IsUnitAliveBJ(t) then
    set dum = CreateUnit(GetOwningPlayer(u), 'o005', GetUnitX(t), GetUnitY(t), 180.)
    call UnitAddAbility(dum, 'A03Q')
    call SetUnitAbilityLevel(dum, 'A03Q', GetUnitAbilityLevel(u, 'XXXX'))
    call IssueTargetOrder(dum, "shadowstrike", t)
    call UnitApplyTimedLife(dum, 'BTLF', 0.5)
  endif
call GroupRemoveUnit(g, t)
exitwhen t == null
endloop
set u = null
set dum = null
call DestroyGroup(g)
set g = null
endfunction
Старый 31.01.2009, 23:07
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
agentex
Это не говнокод, это конверт ГУИ с единственной доработкой-локальными переменными. все вопросы по говнокоду туда ------------>Blizzard
Старый 31.01.2009, 23:13
agentex

offline
Опыт: 34,834
Активность:
В масштабе таких утечек, локалки перестают быть доработкой

agentex добавил:
кстати 'XXXX' - это GetSpellAbilityId(), если что
Старый 31.01.2009, 23:23
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Да я понял. Еще вопрос: при первом касте спела ужасно лагает. при последующих-нет. как исправить?
Старый 31.01.2009, 23:29
agentex

offline
Опыт: 34,834
Активность:
изначально при загрузке создать дамми, дать ему эту способность, и удалить через секунду
Старый 31.01.2009, 23:39
Ответ

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

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

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

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



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