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

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

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

Оффлайн Danis

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

Оффлайн CryDeS

  • Друзья CG
  • 1212
  • Мощь: 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

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

Оффлайн Danis

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

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

А как выполнять различные действия, если урон например от автоатаки? Через фильтр громоздко получается. (Только мне нужно обнаруживать урон именно с абилки)

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
А как выполнять различные действия, если урон например от автоатаки? Через фильтр громоздко получается. (Только мне нужно обнаруживать урон именно с абилки)
От автоатаки или в абилки?

Оффлайн I_GRIN_I

  • Продвинутый
  • 608
  • Мощь: 11
  • Научиться бы скриптить...
мамин программист, модификатор он атаклендед

От автоатаки или в абилки?

Именно от способности мне нужно. (Тип урона не важен)

Оффлайн I_GRIN_I

  • Продвинутый
  • 608
  • Мощь: 11
  • Научиться бы скриптить...
мамин программист, MODIFIER_EVENT_ON_TAKEDAMAGE   135   OnTakeDamage   Event that fires when taking damage.

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
И да, в таблице с данными про ивент есть ключ inflictor, который показывает какая абилка нанесла урон

Оффлайн Илья

  • Супермодератор
  • 2131
  • Мощь: 21
Кстати, про inflictor: можно ли как-то влезть в данную таблицу, чтобы самостоятельно занести туда этот самый  inflictor? Например из кода своей абилки?

Я это к чему: самодельный октарин работает с фильтром урона и исходя из него дает отхил герою по абилкам. Но если абилка самодельная, то  inflictor`а у неё нет. Быть может его надо как-то задавать в самой абилке? А то на данный момент у меня захил  не в фильтре урона происходит, а в коде самих абилок и это не есть хорошо.

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Когда урон наносишь можно указать абилку

Оффлайн Илья

  • Супермодератор
  • 2131
  • Мощь: 21
Когда урон наносишь можно указать абилку

Проверю, но вроде не помогало.

Оффлайн Илья

  • Супермодератор
  • 2131
  • Мощь: 21
Проверил, действительно помогло, спасибо. Видимо я в прошлые разы как-то криво это делал, что не работало.