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

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

Закрытая тема
 
dartwizard
v zapoe :(
offline
Опыт: 4,762
Активность:
почему не работает спел??
Собстно где ошибка или т.п.?
function Trig_RageOfScream_Conditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(), 'A08L') > 0 and IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) != true
endfunction
function Scream_Conditions takes nothing returns boolean
return GetUnitAbilityLevelSwapped('A08L', GetEventDamageSource()) > 0 and IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetEventDamageSource())) == true
endfunction

function Scream_actions takes nothing returns nothing
    local texttag s
    if ( GetRandomInt(1, 100) <= ( 7 + ( 3 * GetUnitAbilityLevelSwapped('A08L', GetEventDamageSource()) ) ) ) then
        call UnitDamageTargetBJ( GetEventDamageSource(), GetTriggerUnit(), I2R(GetHeroStatBJ(bj_HEROSTAT_STR, GetEventDamageSource(), true)), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DEMOLITION )
    set s=CreateTextTagLocBJ( ( "|c00FF0000" + ( I2S(GetHeroStatBJ(bj_HEROSTAT_STR, GetEventDamageSource(), true)) + "|r" ) ), GetUnitLoc(GetTriggerUnit()), 50.00, 10, 100, 100, 100, 0 )   
    call SetTextTagVelocityBJ( s, 64, 90 )
    call TriggerSleepAction( 0.50 )
    call DestroyTextTagBJ(s)
    set s=null
    else
        call DoNothing(  )
    endif
endfunction

function Trig_RageOfScream_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local unit u2 = GetAttacker()
    local trigger t = CreateTrigger()
    local boolexpr c = Condition(function Scream_Conditions)
    call TriggerRegisterUnitEvent(t, u, EVENT_UNIT_DAMAGED)
    call TriggerAddCondition(t, c)
    call TriggerAddAction(t, function Scream_actions)
    call TriggerSleepAction(3.5)
    call DestroyTrigger(t)
    set u = null
    set u2 = null
    set t = null
    set c = null
endfunction

//===========================================================================
function InitTrig_SpellUltimateOfMagicGhost takes nothing returns nothing
    local integer i = 0
    set gg_trg_RageOfScream = CreateTrigger( )
    loop
        exitwhen i > 15
        call TriggerRegisterPlayerUnitEvent( gg_trg_RageOfScream, Player(i), EVENT_PLAYER_UNIT_ATTACKED, null )
        set i = i + 1
    endloop
    call TriggerAddCondition( gg_trg_RageOfScream, Condition( function Trig_RageOfScream_Conditions ) )
    call TriggerAddAction( gg_trg_RageOfScream, function Trig_RageOfScream_Actions )
endfunction
Старый 28.08.2009, 22:27
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
dartwizard, проверь рав коды в функции Trig_RageOfScream_Conditions и Scream_Conditions
Старый 28.08.2009, 22:34
dartwizard
v zapoe :(
offline
Опыт: 4,762
Активность:
Bee, они верны
Старый 28.08.2009, 22:36
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
+ не удаляется boolexpr "c" попробуй сделать так: call TriggerAddCondition(t, Condition(function Scream_Conditions))
+ call DoNothing() - зачем запускать функцию которая нечего не делает? пиши сразу endif без else
+ в функции Trig_RageOfScream_Actions добавь строку "call BJDebugMsg("OLOLOLOLOLOLO")" и если в игре выстветится эта надпись то проблема в этой функции если нет - проблема в условии
Старый 28.08.2009, 22:38
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Код:
local texttag s

Если уж обнуляешь хендлы, то и это тоже обнуляй. К триггеру t это тоже относится.
Код:
call TriggerSleepAction(3.5)

Уныло. Таймеры лучше.

Это было не по теме, но было заметно сразу же. Блинн, если бы весь код, который у меня не пашет, я выкладывал бы сюда, я бы был уже 11 лвл =) Неужели настолько лень просканировать текст на наличие ошибок, расставить BJDebugMsg, в крайнем случае, переписать код с чистого листа.

А ошибка вот в чём:

Код:
//Проверка на нанёсшего урон юнита
GetOwningPlayer(GetEventDamageSource())
//Никак не вяжется с событием атаки
call TriggerRegisterPlayerUnitEvent( gg_trg_RageOfScream, Player(i), EVENT_PLAYER_UNIT_ATTACKED, null )
//Надо использовать
GetOwningPlayer(GetAttacker())


Стыдно, товарищ!
Старый 28.08.2009, 22:39
dartwizard
v zapoe :(
offline
Опыт: 4,762
Активность:
local texttag s Если уж обнуляешь хендлы, то и это тоже обнуляй. К триггеру t это тоже относится.
У меня же обнуляется это...
П.С. ошибку нашёл в код, оказалась глупая нелепость:) с названием трига
Старый 29.08.2009, 10:36
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Да, кстати, boolexpr обнулять не надо !
Старый 29.08.2009, 11:14
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
dartwizard, ты удаляешь тексттаг, но хендл (правильней сказать, ссылку на тексттаг) не обнуляешь. Кстати, я указал на ошибку, действуй.
Старый 29.08.2009, 13:02
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Триггер t он обнуляет (если ты про gg_trg_RageOfScream - его обнулять не надо, он существует всю игру)
Переменные типа texttag/boolexpr/image и т.д. обнулять не надо, так как они лежат в своей области памяти.
Это идиотизм и издержка переоптимизации:
function blabla takes nothing returns nothing
    local boolexpr c = Condition(function Scream_Conditions)
    // . . .
    call TriggerAddCondition(t, c)
    // . . .
    set c = null
endfunction
Делайте как обычно:
function blabla takes nothing returns nothing
    // . . .
    call TriggerAddCondition(t, Condition(function Scream_Conditions))
endfunction
Другое дело, что динамические триггеры - это задница.
Старый 29.08.2009, 13:15
Закрытая тема

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

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

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

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



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