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

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

Ответ
 
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Трансформ + Сало
Если очень вредная проблема: если персонаж будучи засаленным ("Безмолвие" и подобные) выходит из трансформа ("Метаморфоз"), то этот персонаж остается засаленым навсегда. Очень хотелось бы решить эту проблему, но не знаю как.
Старый 31.03.2014, 11:06
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,259
Активность:
((код jass
call UnitRemoveAbility( morf, 'BNsi' ) silence (безмолвие)
call UnitRemoveAbility( morf, 'BNso' ) soul burn (пламя обречённости)
call UnitRemoveAbility( morf, 'BNdh' ) sdrunken haze (Винный пары)
))
Перед морфом мб проверять на эти баффы и удалять их. Этому багу вроде де бы очень много лет, некоторые баффы остаются висеть вечно после морфа, выход вроде бы тока удалять их самостоятельно или делать триггерные баффы.
Старый 31.03.2014, 11:28
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
quq_CCCP, Пробовал подобное, не помогло. В карте много трансформов.
function MadnessTranformationCond takes void returns boolean
    int id = GetSpellAbilityId()
    return id == 'A0BT' or id == 'A03N' or id == 'A0BZ' or id == 'A0C8' or id == 'A07U' or id == 'A0UN' or id == 'A0PD' or id == 'A0LY' or id == 'A068' or id == 'A09J' or id == 'A0PR' or id == 'A0CI' or id == 'A0OX'
endfunction

function MadnessTranformationCast takes void returns void
    unit u = GetTriggerUnit()
    UnitAddAbility(u, 'ACm2')
    UnitRemoveBuffsEx(u, false, true, true, true, true, true, true)
    UnitRemoveAbility(u, 'ACm2')
    UnitAddItemById(u, 'I03T')
    UnitAddItemById(u, 'I03U')
    BJDebugMsg("!")
    u = null
endfunction

function InitTrig_MadnessTranformation takes void returns void
    trigger t = CreateTrigger()
    int i = 0
    loop
        exitwhen i == 12 
        TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_CAST,null)
        i = i+1
    endloop
    TriggerAddCondition(t, Condition( function MadnessTranformationCond ) )
    TriggerAddAction(t, function MadnessTranformationCast )
    t = null
endfunction
Vadik29 добавил:
'ACm2' - неуязвимость к магии
Vadik29 добавил:
Щас думаю надо попробовать, что-то в этом роде:
function MadnessTranformationCond takes void returns boolean
    int id = GetSpellAbilityId()
    return id == 'A0BT' or id == 'A03N' or id == 'A0BZ' or id == 'A0C8' or id == 'A07U' or id == 'A0UN' or id == 'A0PD' or id == 'A0LY' or id == 'A068' or id == 'A09J' or id == 'A0PR' or id == 'A0CI' or id == 'A0OX'
endfunction

function MadnessTranformationCast3 takes void returns void
    timer t = GetExpiredTimer()
    integer id = GetHandleId(t)
    unit u = LoadUnitHandle(h, id, 0)
    UnitRemoveAbility(u, 'ACm2')
    BJDebugMsg("3")
    DestroyTimer(t)
    FlushChildHashtable(h, id)
    u = null
    t = null
endfunction

function MadnessTranformationCast2 takes void returns void
    timer t = GetExpiredTimer()
    integer id = GetHandleId(t)
    unit u = LoadUnitHandle(h, id, 0)
    UnitAddAbility(u, 'ACm2')
    UnitRemoveBuffsEx(u, false, true, true, true, true, true, true)
    UnitAddItemById(u, 'I03T')
    UnitAddItemById(u, 'I03U')
    PauseTimer(t)
    TimerStart(t,0.02,false,function MadnessTranformationCast3)
    BJDebugMsg("2")
    u = null
    t = null
endfunction

function MadnessTranformationCast takes void returns void
    unit u = GetTriggerUnit()
    timer t = CreateTimer()
    int id = GetHandleId(t)
    int sa = GetSpellAbilityId()
    int lvl = GetUnitAbilityLevel(u,sa)
    BJDebugMsg("1")
    if sa == 'A0BT' or sa == 'A0BZ' or sa == 'A0C8' or sa == 'A0PR' then
        SaveUnitHandle(h,id,0,u)
        TimerStart(t,2+lvl-0.01,false,function MadnessTranformationCast2)
    endif
    u = null
    t = null
endfunction

function InitTrig_MadnessTranformation takes void returns void
    trigger t = CreateTrigger()
    int i = 0
    loop
        exitwhen i == 12 
        TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_CAST,null)
        i = i+1
    endloop
    TriggerAddCondition(t, Condition( function MadnessTranformationCond ) )
    TriggerAddAction(t, function MadnessTranformationCast )
    t = null
endfunction
Старый 31.03.2014, 11:58
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
было подобное, это из-за абилок АоЕ сайленса, используй пламя обречённости оно целевое и так не багаует.
Старый 31.03.2014, 13:53
Ответ

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

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

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

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



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