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

Так как работал этот Бекстеб?

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

Оффлайн Ciceroni

  • 10
  • Мощь: 0
Прет.
Бекстеб войда. Изволю освежить вам память - с процентной вероятностью игнорирует любой урон (и пафосно откидывается).
Хочу повторить с только физическим уроном, но на Луа, потому что принципиально.Да-да, от обычной версии мало чем отличаться будет, только один if на тип урона в начале.
Как мне кажется, на войде при прокачке пассивки вешался скрытый модификатор с параметром OnTakeDamage(). Текс, могу ли я надыбать тут луа версию, потому как нанесение урона - это я могу, а вот наоборот что-то у меня всё плохо.

 Резюмируя - в модификаторе в функции OnTakeDamage() в конструкции if(физический_урон) нужна команда, которая этот урон отменяет.
А, ну и ещё рандомизатор было бы неплохо подвезти, но его можно и на GitHub-е нарыть.
« Последнее редактирование: 15-04-2017, 16:45:42 от Ciceroni »

Оффлайн KEKMAN

  • 168
  • Мощь: 2
  • Dota forever <3
Re: Так как работал этот Бекстеб?
« Ответ #1 : 15-04-2017, 16:55:22 »
Прет.
Бекстеб войда. Изволю освежить вам память - с процентной вероятностью игнорирует любой урон (и пафосно откидывается).
Хочу повторить с только физическим уроном, но на Луа, потому что принципиально.Да-да, от обычной версии мало чем отличаться будет, только один if на тип урона в начале.
Как мне кажется, на войде при прокачке пассивки вешался скрытый модификатор с параметром OnTakeDamage(). Текс, могу ли я надыбать тут луа версию, потому как нанесение урона - это я могу, а вот наоборот что-то у меня всё плохо.

 Резюмируя - в модификаторе в функции OnTakeDamage() в конструкции if(физический_урон) нужна команда, которая этот урон отменяет.
А, ну и ещё рандомизатор было бы неплохо подвезти, но его можно и на GitHub-е нарыть.

Спойлер
Код
"backtrack_datadriven"
{
// General
//-------------------------------------------------------------------------------------------------------------
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE"
"AbilityTextureName" "faceless_void_backtrack"

// Precache
//-------------------------------------------------------------------------------------------------------------
"precache"
{
"particle" "particles/units/heroes/hero_faceless_void/faceless_void_backtrack.vpcf"
}

// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"dodge_chance_pct" "10 15 20 25"
}
}

"Modifiers"
{
"modifier_backtrack_datadriven"
{
"Passive" "1"
"IsHidden" "1"

"ThinkInterval" "0.03"

"OnIntervalThink"
{
"RunScript"
{
"ScriptFile" "scripts/vscripts/heroes/hero_faceless_void/backtrack.lua"
"Function" "BacktrackHealth"
}
}

"OnTakeDamage"
{
"Random"
{
"Chance" "%dodge_chance_pct"

"OnSuccess"
{
"FireEffect"
{
"EffectName" "particles/units/heroes/hero_faceless_void/faceless_void_backtrack.vpcf"
"EffectAttachType" "follow_origin"
"Target" "CASTER"
}

"RunScript"
{
"ScriptFile" "scripts/vscripts/heroes/hero_faceless_void/backtrack.lua"
"Function" "BacktrackHeal"
}
}
}
}
}
}
}
Код

function BacktrackHealth( keys )
local caster = keys.caster
local ability = keys.ability

ability.caster_hp_old = ability.caster_hp_old or caster:GetMaxHealth()
ability.caster_hp = ability.caster_hp or caster:GetMaxHealth()

ability.caster_hp_old = ability.caster_hp
ability.caster_hp = caster:GetHealth()
end


function BacktrackHeal( keys )
local caster = keys.caster
local ability = keys.ability

caster:SetHealth(ability.caster_hp_old)
end
[свернуть]

Взято из SpellLibrary-master

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Так как работал этот Бекстеб?
« Ответ #2 : 15-04-2017, 17:04:43 »
Попробуй MODIFIER_PROPERTY_AVOID_DAMAGE(GetModifierAvoidDamage) использовать.По идее нужно просто возвращать 1 или 0.

Рандомизатор это что?

Оффлайн CryDeS

  • Друзья CG
  • 1212
  • Мощь: 12
Re: Так как работал этот Бекстеб?
« Ответ #3 : 15-04-2017, 18:23:50 »
То что сказал злой выше + developer.valvesoftware.com/...rcentage

Оффлайн Ciceroni

  • 10
  • Мощь: 0
Re: Так как работал этот Бекстеб?
« Ответ #4 : 19-04-2017, 17:39:29 »
Рандомизатор это что?
Алгоритм, получающий на входе 2 числа и выдающий случайное число в их диапазоне.

Всё сделал как по учебнику:
Спойлер
Код
function modifier_hero_custom_backtrack_lua:GetModifierAvoidDamage( params )
local attacker = params.attacker
if (RollPercentage(self.hero_custom_backtrack_prc) and DAMAGE_TYPE_PHYSICAL and attacker ~= nil)then
return 1
else
return 0
end
end
[свернуть]
...и потом ВНЕЗАПНО! НЕОЖИДАННО!!! этот модифер игнорировал урон и от заклинаний с физической составляющей. Мне бы отличать тычку героя от физического заклинания - и я в шоколаде.
Кто сказал "да ты же просто пишешь миссы!"? Не совсем! Ну, то есть... эх, да, я пишу свои миссы. Shame on me, но мне приспичило.

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Так как работал этот Бекстеб?
« Ответ #5 : 19-04-2017, 17:47:06 »
Выведи таблицу params в консоль и посмотри есть ли в ней что-то связанное с
Код
--- Enum DamageCategory_t
DOTA_DAMAGE_CATEGORY_ATTACK = 1
DOTA_DAMAGE_CATEGORY_SPELL = 0

Оффлайн MahouShoujo

  • Продвинутый
  • 202
  • Мощь: 3
Re: Так как работал этот Бекстеб?
« Ответ #6 : 21-04-2017, 20:06:01 »
Можно еще попробовать другие форма блока как от щитка например а не просто демедж авойд