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

Ciceroni

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

Резюмируя - в модификаторе в функции OnTakeDamage() в конструкции if(физический_урон) нужна команда, которая этот урон отменяет.
А, ну и ещё рандомизатор было бы неплохо подвезти, но его можно и на GitHub-е нарыть.
 
Прет.
Бекстеб войда. Изволю освежить вам память - с процентной вероятностью игнорирует любой урон (и пафосно откидывается).
Хочу повторить с только физическим уроном, но на Луа, потому что принципиально.Да-да, от обычной версии мало чем отличаться будет, только один 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
 
Последнее редактирование модератором:
Попробуй MODIFIER_PROPERTY_AVOID_DAMAGE(GetModifierAvoidDamage) использовать.По идее нужно просто возвращать 1 или 0.

Рандомизатор это что?
 
Рандомизатор это что?
Алгоритм, получающий на входе 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, но мне приспичило.
 
Последнее редактирование модератором:
Выведи таблицу params в консоль и посмотри есть ли в ней что-то связанное с
Код:
--- Enum DamageCategory_t
DOTA_DAMAGE_CATEGORY_ATTACK = 1
DOTA_DAMAGE_CATEGORY_SPELL = 0
 
Можно еще попробовать другие форма блока как от щитка например а не просто демедж авойд
 
Реклама: