В общем есть задача:
  1. Создать способность на основе "жар преисподней (постоянный)"
  2. Наносить им урон периодически каждые 0.1 сек по Х урона
  3. Через новые функции отловить именно ЭТОТ тип урона жара преисподней (А вот в этом и загвоздка, нужна помощь)
  4. Вылечить вражеские единицы на объём нанесённого урона и нанести урона к примеру от 100% силы
Таким образом, мы получим мы получим триггерный огненный плащ, но без всяких периодиков и групп, всё будет настроено в РО
осталось решить пункт 3 в это задаче, как отловить урон именно от жара преисподней?
(просто интресен этот момент в новом патче, на мемхаке я такое мог, а как тут хз)
сам ещё не пробовал, но если получится обязательно покажу как, вещь наиполейзнейшая (если конечно я всё правильно понял)

Принятый ответ

Вот типы урона "Огня преисподней":
if BlzGetEventAttackType( ) == ConvertAttackType( 0 ) and BlzGetEventDamageType( ) == ConvertDamageType( 8 ) and BlzGetEventWeaponType( ) == ConvertWeaponType( 0 ) then
Bergi_Bear, ну там же всё интуитивно понятно:
BlzGetEventAttackType( ) - возвращает тип атаки.
BlzSetEventAttackType( ) - меняет тип атаки.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
21
5 лет назад
Отредактирован scopterectus
1
if GetUnitAbilityLevel( GetEventDamageSource( ) , 'B000' ) > 0 then
У обладателя "Жара преисподней" должен быть бафф, иначе он не мог нанести урон. А также сравнить тип урона и тип оружия с баффом "Огня преисподней". Узнать типы урона и оружия можно через новые функции.
0
32
5 лет назад
0
ScopteRectuS, я это и хочу, понять как пользоваться новыми функциями =)
6
21
5 лет назад
Отредактирован scopterectus
6
Вот типы урона "Огня преисподней":
if BlzGetEventAttackType( ) == ConvertAttackType( 0 ) and BlzGetEventDamageType( ) == ConvertDamageType( 8 ) and BlzGetEventWeaponType( ) == ConvertWeaponType( 0 ) then
Bergi_Bear, ну там же всё интуитивно понятно:
BlzGetEventAttackType( ) - возвращает тип атаки.
BlzSetEventAttackType( ) - меняет тип атаки.
Принятый ответ
0
32
5 лет назад
0
ScopteRectuS, Зачем тип атаки и тип оружия? что такое тип 0 означает что урон исходит не от рук??
BlzGetEventDamageType( ) == ConvertDamageType( 8 ), где 8 это уникальный тип урона от жара преисподней?
что возвращает ConvertDamageType если ему передать 0?
6
21
5 лет назад
Отредактирован scopterectus
6
    constant attacktype         ATTACK_TYPE_NORMAL              = ConvertAttackType(0)
    constant attacktype         ATTACK_TYPE_MELEE               = ConvertAttackType(1)
    constant attacktype         ATTACK_TYPE_PIERCE              = ConvertAttackType(2)
    constant attacktype         ATTACK_TYPE_SIEGE               = ConvertAttackType(3)
    constant attacktype         ATTACK_TYPE_MAGIC               = ConvertAttackType(4)
    constant attacktype         ATTACK_TYPE_CHAOS               = ConvertAttackType(5)
    constant attacktype         ATTACK_TYPE_HERO                = ConvertAttackType(6)

    constant damagetype         DAMAGE_TYPE_UNKNOWN             = ConvertDamageType(0)
    constant damagetype         DAMAGE_TYPE_NORMAL              = ConvertDamageType(4)
    constant damagetype         DAMAGE_TYPE_ENHANCED            = ConvertDamageType(5)
    constant damagetype         DAMAGE_TYPE_FIRE                = ConvertDamageType(8)
    constant damagetype         DAMAGE_TYPE_COLD                = ConvertDamageType(9)
    constant damagetype         DAMAGE_TYPE_LIGHTNING           = ConvertDamageType(10)
    constant damagetype         DAMAGE_TYPE_POISON              = ConvertDamageType(11)
    constant damagetype         DAMAGE_TYPE_DISEASE             = ConvertDamageType(12)
    constant damagetype         DAMAGE_TYPE_DIVINE              = ConvertDamageType(13)
    constant damagetype         DAMAGE_TYPE_MAGIC               = ConvertDamageType(14)
    constant damagetype         DAMAGE_TYPE_SONIC               = ConvertDamageType(15)
    constant damagetype         DAMAGE_TYPE_ACID                = ConvertDamageType(16)
    constant damagetype         DAMAGE_TYPE_FORCE               = ConvertDamageType(17)
    constant damagetype         DAMAGE_TYPE_DEATH               = ConvertDamageType(18)
    constant damagetype         DAMAGE_TYPE_MIND                = ConvertDamageType(19)
    constant damagetype         DAMAGE_TYPE_PLANT               = ConvertDamageType(20)
    constant damagetype         DAMAGE_TYPE_DEFENSIVE           = ConvertDamageType(21)
    constant damagetype         DAMAGE_TYPE_DEMOLITION          = ConvertDamageType(22)
    constant damagetype         DAMAGE_TYPE_SLOW_POISON         = ConvertDamageType(23)
    constant damagetype         DAMAGE_TYPE_SPIRIT_LINK         = ConvertDamageType(24)
    constant damagetype         DAMAGE_TYPE_SHADOW_STRIKE       = ConvertDamageType(25)
    constant damagetype         DAMAGE_TYPE_UNIVERSAL           = ConvertDamageType(26)

    constant weapontype         WEAPON_TYPE_WHOKNOWS            = ConvertWeaponType(0)
    constant weapontype         WEAPON_TYPE_METAL_LIGHT_CHOP    = ConvertWeaponType(1)
    constant weapontype         WEAPON_TYPE_METAL_MEDIUM_CHOP   = ConvertWeaponType(2)
    constant weapontype         WEAPON_TYPE_METAL_HEAVY_CHOP    = ConvertWeaponType(3)
    constant weapontype         WEAPON_TYPE_METAL_LIGHT_SLICE   = ConvertWeaponType(4)
    constant weapontype         WEAPON_TYPE_METAL_MEDIUM_SLICE  = ConvertWeaponType(5)
    constant weapontype         WEAPON_TYPE_METAL_HEAVY_SLICE   = ConvertWeaponType(6)
    constant weapontype         WEAPON_TYPE_METAL_MEDIUM_BASH   = ConvertWeaponType(7)
    constant weapontype         WEAPON_TYPE_METAL_HEAVY_BASH    = ConvertWeaponType(8)
    constant weapontype         WEAPON_TYPE_METAL_MEDIUM_STAB   = ConvertWeaponType(9)
    constant weapontype         WEAPON_TYPE_METAL_HEAVY_STAB    = ConvertWeaponType(10)
    constant weapontype         WEAPON_TYPE_WOOD_LIGHT_SLICE    = ConvertWeaponType(11)
    constant weapontype         WEAPON_TYPE_WOOD_MEDIUM_SLICE   = ConvertWeaponType(12)
    constant weapontype         WEAPON_TYPE_WOOD_HEAVY_SLICE    = ConvertWeaponType(13)
    constant weapontype         WEAPON_TYPE_WOOD_LIGHT_BASH     = ConvertWeaponType(14)
    constant weapontype         WEAPON_TYPE_WOOD_MEDIUM_BASH    = ConvertWeaponType(15)
    constant weapontype         WEAPON_TYPE_WOOD_HEAVY_BASH     = ConvertWeaponType(16)
    constant weapontype         WEAPON_TYPE_WOOD_LIGHT_STAB     = ConvertWeaponType(17)
    constant weapontype         WEAPON_TYPE_WOOD_MEDIUM_STAB    = ConvertWeaponType(18)
    constant weapontype         WEAPON_TYPE_CLAW_LIGHT_SLICE    = ConvertWeaponType(19)
    constant weapontype         WEAPON_TYPE_CLAW_MEDIUM_SLICE   = ConvertWeaponType(20)
    constant weapontype         WEAPON_TYPE_CLAW_HEAVY_SLICE    = ConvertWeaponType(21)
    constant weapontype         WEAPON_TYPE_AXE_MEDIUM_CHOP     = ConvertWeaponType(22)
    constant weapontype         WEAPON_TYPE_ROCK_HEAVY_BASH     = ConvertWeaponType(23)
Это означает, что тип атаки у "Огня преисподней" - ATTACK_TYPE_NORMAL, тип урона - DAMAGE_TYPE_FIRE и тип оружия - WEAPON_TYPE_WHOKNOWS.
Отловить, что урон исходит именно от рук пока что нельзя, насколько я знаю. Но его можно наверняка угадать, используя функции, что я выше написал.
0
32
5 лет назад
0
ScopteRectuS, так, урон с плаща отловил отлично я ВРУБИЛСЯ как этим пользоваться!!!, но событие получение урона сделал по старому, как по новому то использовать, чтобы в итоге всё одним триггером получилось?
4
21
5 лет назад
4
call TriggerRegisterPlayerUnitEvent( triggerName, Player(0x00), EVENT_PLAYER_UNIT_DAMAGED, null )
EVENT_PLAYER_UNIT_DAMAGED - это новый ивент.
0
32
5 лет назад
0
ScopteRectuS, Всё получилось, спасибо ещё раз, ну по минимуму вот код, если кому интересно
function Trig_DamageEvent_Conditions takes nothing returns boolean
return BlzGetEventAttackType( ) == ConvertAttackType( 0 ) and BlzGetEventDamageType( ) == ConvertDamageType( 8 ) and BlzGetEventWeaponType( ) == ConvertWeaponType( 0 )
endfunction

function Trig_DamageEvent_Actions takes nothing returns nothing
call BJDebugMsg("Урон от жара")
endfunction

//===========================================================================
function InitTrig_DamageEvent takes nothing returns nothing
    set gg_trg_DamageEvent = CreateTrigger(  )
    call TriggerAddCondition( gg_trg_DamageEvent, Condition( function Trig_DamageEvent_Conditions ) )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_DamageEvent, EVENT_PLAYER_UNIT_DAMAGED)
    call TriggerAddAction( gg_trg_DamageEvent, function Trig_DamageEvent_Actions )
endfunction
Ну остальное у меня не вызывает вопросов, ну что, прощайте группы и таймеры
0
32
5 лет назад
0
Флаги пока не добавили, не проверишь на спец атаки и орбы.
4
24
5 лет назад
4
Вместо события DAMAGED берем событие DAMAGING и получаем урон ДО нанесения и возможность его поменять прямо там, без необходимости лечить цель и наносить урон еще раз.
0
32
5 лет назад
0
prog, я готов к перевариванию этой информации
Событие нашёл, оно там рядом, а где менять урон то? в условии? в действии то точно урон уже нанёсся...
ммм?
0
27
5 лет назад
0
Bergi_Bear, действия срабатывают до нанесения фактического урона
0
32
5 лет назад
0
PrincePhoenix, но сути это не меняет... или я при событии DAMAGING могу сделать, GeteventDamage()=МОЁ ЧИСЛО?
3
27
5 лет назад
Отредактирован Феникс
3
Bergi_Bear, Именно так
Только SetEventDamage()
Я так свою систему урона и резистов сделал
0
32
5 лет назад
Отредактирован Берги
0
PrincePhoenix, благодарю!
BlzSetEventDamage(NewDamage)
5
24
5 лет назад
5
Важно учитывать что на момент срабатывания DAMAGING это полный входящий урон - до срабатывания брони, резистов и всего остального.
0
32
5 лет назад
0
prog, а например имунные к магии или физическому урону, будут ли зарегистрированны в событии?
0
24
5 лет назад
0
Bergi_Bear, не знаю, не пробовал. По логике - должны, если урон проходит но отменяется скилом, а как на самом деле только практика покажет.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.