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

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

Закрытая тема
 
DioD

offline
Опыт: 45,134
Активность:
в доте хп не уходит ниже 1, если урон минус хп меньше 1 то хп устанавливается на 1.
Старый 18.01.2010, 11:06
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
DioD, не мог бы ты сделать пример.
Старый 18.01.2010, 22:17
DioD

offline
Опыт: 45,134
Активность:
мог бы и сделаю.
DioD добавил:
использовать навык у волшебниц будет счастье
здесь один вариант щитование, урон не больше максимального хп и хп не полное.
Прикрепленные файлы
Тип файла: w3x Reaper's Way E1.00a.w3x (156.4 Кбайт, 22 просмотров )
Старый 19.01.2010, 06:20
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
попробуй сохранить пример в "... C:\ "
ошибку выдает "syntax error"
ругается на строку в библиотеке
return HOURS * 3600.00 + TimerGetElapsed(TIME)


Код:
library Time initializer INIT

globals
    private timer      TIME  = CreateTimer()
    private integer    HOURS = -1
endglobals

function GetTime takes nothing returns real
    return HOURS * 3600.00 + TimerGetElapsed(TIME)
endfunction

private function INIT takes nothing returns nothing
    set HOURS = HOURS + 1
    call TimerStart(TIME, 3600.00, false, function INIT)
endfunction

endlibrary
Старый 19.01.2010, 08:50
DioD

offline
Опыт: 45,134
Активность:
просто выключи Time и Framework они не нужны.

__DioD добавил:__
хотя вру, нужны, на то они и фреймворк

DioD добавил:
Код:
function Trig_Untitled_Trigger_017_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function OnDamage takes nothing returns boolean

    if GetTriggerEventId() == EVENT_UNIT_DAMAGED then
        //process for damage
        
        if GetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE) - GetEventDamage() <= 1 then
            call SetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE, GetEventDamage() + 0.406)
            return false
       // else
         //   call SetUnitState(GetTriggerUnit(),UNIT_STATE_LIFE,GetUnitState(GetTriggerUnit(),UNIT  _STATE_LIFE) + GetEventDamage())
        endif
            
        
        
    else
        //cleanup
        call DestroyEffect(LoadEffectHandle(F_HASH, GetHandleId(GetTriggeringTrigger()), StringHash("EFFECT")))
        call FlushChildHashtable(F_HASH, GetHandleId(GetTriggeringTrigger()))
        call DestroyTrigger(GetTriggeringTrigger())
    endif

    return false
endfunction

function Trig_Untitled_Trigger_017_Actions takes nothing returns nothing

    local trigger T= CreateTrigger() //poin of reference
    
    call TriggerAddCondition(T, Condition(function OnDamage)) //execution function
    call TriggerRegisterTimerEvent(T, 10.0, false) //cleanup event
    call TriggerRegisterUnitEvent(T, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED) //damage event
    call TriggerRegisterUnitEvent(T, GetSpellTargetUnit(), EVENT_UNIT_DEATH) //death
    call SaveEffectHandle(F_HASH, GetHandleId(T), StringHash("EFFECT"), AddSpecialEffectTarget("Abilities\\Spells\\Items\\StaffOfSanctuary\\Staff_Sanctuary_Target.mdl", GetSpellTargetUnit(), "chest"))
    
endfunction
Старый 19.01.2010, 09:00
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
ты не сказал что с ошибкой делать
мне нужен только триггер выше?
Старый 19.01.2010, 09:05
DioD

offline
Опыт: 45,134
Активность:
у тебя vJASS не работает, хз что тебе делать (например установить vJASS)

DioD добавил:
а код выше будет работать даже без хешфункции, всё что надо это выпилить две строки где идёт обращение к хеш функции и тогда можно будет выпилить всё кроме этого триггера без проблем.
Старый 19.01.2010, 09:09
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Цитата:
у тебя vJASS не работает, хз что тебе делать (например установить vJASS)

работает.
я сам попытался чето сделать вот глянь.
Код:
library shield initializer Init
function Trig_Ability_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function Trig_Ability_OnDamage takes nothing returns boolean

    if GetTriggerEventId() == EVENT_UNIT_DAMAGED then
        //process for damage
        
        if GetWidgetLife(GetTriggerUnit())-GetEventDamage() <= 1 then
            call SetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE, GetEventDamage() + 0.406)
            call SetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE, GetEventDamage() + GetEventDamage())
            return false
        else
            call SetUnitState(GetTriggerUnit(),UNIT_STATE_LIFE,GetUnitState(GetTriggerUnit(),UNIT  _STATE_LIFE) + GetEventDamage())
        endif           
        
        
    else

        call DestroyEffect(LoadEffectHandle(udg_hash, GetHandleId(GetTriggeringTrigger()), StringHash("EFFECT")))
        call FlushChildHashtable(udg_hash, GetHandleId(GetTriggeringTrigger()))
        call DestroyTrigger(GetTriggeringTrigger())
    endif

    return false
endfunction

function Trig_Ability_Actions takes nothing returns nothing

    local trigger T= CreateTrigger() //poin of reference
    
    call TriggerAddCondition(T, Condition(function Trig_Ability_OnDamage)) //execution function
    call TriggerRegisterTimerEvent(T, 10.0, false) //cleanup event
    call TriggerRegisterUnitEvent(T, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED) //damage event
    call TriggerRegisterUnitEvent(T, GetSpellTargetUnit(), EVENT_UNIT_DEATH) //death
    call SaveEffectHandle(udg_hash, GetHandleId(T), StringHash("EFFECT"), AddSpecialEffectTarget("Abilities\\Spells\\Items\\StaffOfSanctuary\\Staff_Sanctuary_Target.mdl", GetSpellTargetUnit(), "chest"))
    
endfunction

function Init takes nothing returns nothing
local trigger t=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t,Condition(function Trig_Ability_Conditions))
call TriggerAddAction(t,function Trig_Ability_Actions)
endfunction
endlibrary


Bee добавил:
правда ничего не работает :(
Старый 19.01.2010, 09:22
DioD

offline
Опыт: 45,134
Активность:
прошу обратить внимание на прочтение моих сообщений.

данный пример не рассматривает защиту от урона который превышает максимальное ХП юнита, так как в лучших традициях доты и 100500 других карт такой урон всегда игнорируется и всегда убивает.

однако я любезно доработаю напильником то что уже показывал.

алгоритм дорабатывайте сами, опять только один сценарий, урон свыше максимального хп.
Прикрепленные файлы
Тип файла: w3x shield.w3x (18.5 Кбайт, 18 просмотров )
Старый 19.01.2010, 09:46
Rewenger
The culprit will not die
offline
Опыт: 35,873
Активность:
Чтобы хп не падало меньше единицы, надо смотреть, смертелен ли удар; неуязвимостью блокировать урон и ставить хп на единицу по окончании неуязвимости.
Что за фреймворки? 0о
Старый 19.01.2010, 15:17
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Цитата:
Что за фреймворки? 0о

// я так понимаю альтернатива грибам MPI3'a, только теперь от DioD'a.
Цитата:
Чтобы хп не падало меньше единицы, надо смотреть, смертелен ли удар; неуязвимостью блокировать урон и ставить хп на единицу по окончании неуязвимости.

я так и сделал. все, если всем все понятно я думаю лучше закрыть. уже достаточно нафлудили.
Старый 19.01.2010, 19:04
Закрытая тема

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

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

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

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



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