CustomGames.ru - Dota 2 пользовательские игры

Фильтр урона, поиск от чего идет урон

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
Есть функция или велосипед для того чтобы найти от чего исходит урон (с руки, от абилки) не в зависимости от типа урона?
« Последнее редактирование: 27-10-2016, 13:48:54 от Danis »
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Есть функция или велосипед для того чтобы найти от чего исходит урон (с руки, от абилки) не в зависимости от типа урона?
Есть такая вещь как фильтры, как ты и сказал.
Фильтр урона вызывается до того как урон нанесется, и возврат true нанесет таблицу урона что была изменена/не была изменена.
В этом фильтре урона есть очень полезная константа - entindex_inflictor_const, которая будет индексом(entityindex, а не номером в инвентаре) абилки/предмета который нанес урон.
Фильтр устанавливается вот так, и фильтр ставится один на весь гейммод.
В InitGameMode()

Код
GameRules:GetGameModeEntity():SetDamageFilter(Dynamic_Wrap(my_game_mode, "DamageFilter"), self)
И естественно ставится обработчик фильтра:
Код
function my_game_mode:DamageFilter( event )
local damage = event.damage
local entindex_inflictor_const = event.entindex_inflictor_const
local entindex_victim_const = event.entindex_victim_const
local entindex_attacker_const = event.entindex_attacker_const
local damagetype_const = event.damagetype_const
local ability
local victim
local attacker

if (entindex_inflictor_const) then ability = EntIndexToHScript(entindex_inflictor_const) end
if (entindex_victim_const) then victim = EntIndexToHScript(entindex_victim_const) end
if (entindex_attacker_const) then attacker = EntIndexToHScript(entindex_attacker_const) end

return true;
end

Итого ты будешь иметь абилку(если она есть, если ее нет то ability будет nil), того кто нанес урон(attacker), того кто получил урон(victim), а так же приятные штуки как само количество урона и его тип. А да, если мы сделаем в фильтре так:
Код
event.damage = event.damage / 2;
return true;
То фильтр уменьшит урон вдвое, а если сделаем так
Код
return false;
То фильтр вовсе не нанесет никакого урона.

Вот еще картиночка от наших друзей с моддоты иллюстрирующая работу фильтров(а фильтр урона не единственный).
тут картиночка
[свернуть]

Ссылка на гайд на моддоте

А вообще давно надо уже запилить к нам сюда гайдик по фильтрам, но мне естественно лень этим заниматься.

Оффлайн ZLOY

  • Супермодератор
  • 367
  • Мощь: 4
Тебе в последствии нужно этот урон модифицировать как-то? Или просто выполнять различные действия, если урон например от автоатаки?

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
Тебе в последствии нужно этот урон модифицировать как-то? Или просто выполнять различные действия, если урон например от автоатаки?
Ну типа да, сейчас параллельно с фиксами скиллов линзу делаю на велосипедах.
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]