У меня предмет дает +50% ловкости на 7 сек.Однако баф не сбрасывается.
function Trig_Agility_Blade_Remove_Agi_Actions takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer h = GetHandleId(t)
local unit caster = LoadUnitHandle(udg_hash,h,1)
local integer bonus = LoadInteger(udg_hash,h,2)
local effect ef = LoadEffectHandle(udg_hash,h,3)
local effect ef2 = LoadEffectHandle(udg_hash,h,4)
local integer clearagi = GetHeroAgi(caster,false)
call SetHeroAgi(caster,clearagi-bonus,true)
call FlushChildHashtable(udg_hash,h)
call DestroyTimer(t)
call DestroyEffect(ef)
call DestroyEffect(ef2)
set caster = null
set ef = null
set ef2= null
set t = null
endfunction
function Trig_Agility_Blade_Actions takes nothing returns nothing
local unit caster = GetSpellAbilityUnit()
local integer agi = GetHeroAgi(caster,true)
local integer clearagi = GetHeroAgi(caster,false)
local integer bonus = R2I(agi/2)
local effect ef = AddSpecialEffectTarget("Abilities\\Spells\\Other\\AcidBomb\\BottleImpact.mdl",caster,"weapon")
local effect ef2= AddSpecialEffectTarget("Abilities\\Spells\\Other\\Drain\\DrainCaster.mdl",caster,"head")
local timer t = CreateTimer()
local integer h = GetHandleId(t)
call SetHeroAgi(caster,clearagi+bonus,true)
call SaveUnitHandle(udg_hash,h,1,caster)
call SaveInteger(udg_hash,h,2,bonus)
call SaveEffectHandle(udg_hash,h,3,ef)
call SaveEffectHandle(udg_hash,h,4,ef2)
call TimerStart(t,7.00,false,function Trig_Agility_Blade_Remove_Agi_Actions)
set caster = null
set ef = null
set ef2= null
set t = null
endfunction
function Trig_Agility_Blade_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A0IE'
endfunction
===========================================================================
function InitTrig_Agility_Blade takes nothing returns nothing
local integer index = 0
set gg_trg_Agility_Blade = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_Agility_Blade, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT , null)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition( gg_trg_Agility_Blade, Condition( function Trig_Agility_Blade_Conditions ) )
call TriggerAddAction( gg_trg_Agility_Blade, function Trig_Agility_Blade_Actions )
endfunction

Я на этом моменте, когда только начинал учить джасс, всегда запарывался
короче, вот карта, всё у тебя работает)
Добавил просто udg_hash = InitHashtable() внизу события
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
8gabriel8,
Если что, скидывай карту.
Беда в том, что эта карта из кампании, там всё очень много весит, потому не буду.
PT153,
ну как там дела?
Пока никак, ибо из-за сессии отложил редактор в сторону (собственно, даже сюда времени зайти не было, к сожалению)
Рад, что ты предложил выход, но я, боюсь, твой код себе никак не перенесу, ибо, как писал в вопросе, лишь на GUI могу работать.
8gabriel8,
мне кажется, проблема не в этом триггере, а в другом, который запускает триггеры и таймеры.
Триггер, запускающий таймер, вряд ли многое испортить может
Мдаааа... Я свою ошибку таки нашёл. Она была в самом тупом месте из всех возможных.
Я действительно не понимаю, это у меня голова не работает совершенно, или в редакторе какие-то баги
Цитата из вопроса, у меня не работает голова.
Так вот, это я дурак полный.
Запихнул обнуление своей переменной ВНИМАНИЕ! в триггер, который игрокам-компьютерам каждые 2 секунды обновляет ресурсы. А вместе с этим и обнуляет снова и снова мою переменную. Обнаружил ли я это через дебаги? Нет, просто от скуки и безнадёжности положения начал прокручивать и листать все триггеры.
Спасибо всем, кто пытался помочь, это было очень приятно) Мне жаль, что вы ломали голову и тратили время впустую по моей глупости и невнимательности.

28
А ты дебагом выводил текст, когда таймер истекает? Типо функция вообще срабатывает? Может хэш-таблицу забыл инициализировать?)

кстати, код можешь обводить двойными кавычками, и желательно запихнуть в кат
12
rsfghd:
А ты дебагом выводил текст, когда таймер истекает? Типо функция вообще срабатывает? Может хэш-таблицу забыл инициализировать?)

кстати, код можешь обводить двойными кавычками, и желательно запихнуть в кат

Дебаг проходил, все, верно пишет.
Загруженные файлы
28
я сделал то же самое, у меня всё работает, держи карту
код
library mylib initializer init{
    private hashtable H = InitHashtable()
    
    private function Trig_Agility_Blade_Remove_Agi_Actions takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local integer i = GetHandleId(t)
        local unit caster = LoadUnitHandle(H,i,0)
        
        call SetHeroAgi(caster,GetHeroAgi(caster,false)-LoadInteger(H,i,1),true)
        call DestroyEffect(LoadEffectHandle(H,i,2))
        call DestroyEffect(LoadEffectHandle(H,i,3))
        call DestroyTimer(t)
        call FlushChildHashtable(H,i)
        
        set caster = null
        set t = null
    endfunction
    
    private function Trig_Agility_Blade_Actions takes nothing returns nothing
        local timer t = CreateTimer()
        local integer i = GetHandleId(t)
        local unit caster = GetSpellAbilityUnit()
        local integer agi = GetHeroAgi(caster,true)
        local integer clearagi = GetHeroAgi(caster,false)
        local integer bonus = R2I(agi/2)
        
        call SetHeroAgi(caster,clearagi+bonus,true)
        call SaveUnitHandle(H,i,0,caster)
        call SaveInteger(H,i,1,bonus)
        call SaveEffectHandle(H,i,2,AddSpecialEffectTarget("Abilities\\Spells\\Other\\AcidBomb\\BottleImpact.mdl",caster,"weapon"))
        call SaveEffectHandle(H,i,3,AddSpecialEffectTarget("Abilities\\Spells\\Other\\Drain\\DrainCaster.mdl",caster,"head"))
        call TimerStart(t,7.,false,function Trig_Agility_Blade_Remove_Agi_Actions)
        
        set caster = null
        set t = null
    endfunction
    
    private function Trig_Agility_Blade_Conditions takes nothing returns boolean
        return GetSpellAbilityId() == 'A000'
    endfunction
    
    private function init takes nothing returns nothing
        local integer index = 0
        local trigger gg_trg_Agility_Blade = CreateTrigger( )
        loop
            call TriggerRegisterPlayerUnitEvent(gg_trg_Agility_Blade, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT , null)
            set index = index + 1
            exitwhen index == bj_MAX_PLAYER_SLOTS
        endloop
        call TriggerAddCondition( gg_trg_Agility_Blade, Condition( function Trig_Agility_Blade_Conditions ) )
        call TriggerAddAction( gg_trg_Agility_Blade, function Trig_Agility_Blade_Actions )
    endfunction
}

всё что я поменял по сути, это равкод применяемой абилы)

А, тьфу, увидел, ты свою карту приложил, сейчас там попробую сделать
Загруженные файлы
12
Эта что за библиотека? library mylib initializer init{
И о чем говорит приставка приват private hashtable H = InitHashtable()
28
Хах, на эту тему есть уже статьи)
короче, в твоём случае решил проверить, выгружается ли юнит вообще с помощью
if caster == null{BJDebugMsg("1")}
Результат: нет, не выгружается, переменная кастера пустая)
Хз с чем это связано, если GetSpellAbilityUnit() в действиях спокойно добавлял агилу юниту

Ахаха

Я понял в чём проблема, чел, я же выше спросил
Может хэш-таблицу забыл инициализировать?)
28
Я на этом моменте, когда только начинал учить джасс, всегда запарывался
короче, вот карта, всё у тебя работает)
Добавил просто udg_hash = InitHashtable() внизу события
Загруженные файлы
Принятый ответ
12
rsfghd:
Может хэш-таблицу забыл инициализировать?)
А ведь верно, согласен. Вот промажка

rsfghd:
Я не так давно его начал осваивать. Спс большое
Чтобы оставить комментарий, пожалуйста, войдите на сайт.