Забавный момент

RecoveryIt

Активный
7 Май 2016
75
0
Делаю абилку для героя, и заметил интересный момент.
Имеется луа код который запускается от события OnSpellStart :
Код:
function TrueBloodActivate( keys )
	local caster = keys.caster
	local ability = keys.ability
	ability.bonushealth = 0
	local hp_per_def = ability:GetLevelSpecialValueFor("hp_bonus", ability:GetLevel() - 1)
	local duration_int = ability:GetLevelSpecialValueFor("duration_perc", ability:GetLevel() - 1)
	local bonus_health = hp_per_def * caster.def
	local buff_duration = 5 + duration_int * caster.int
	ability.bonushealth = bonus_health
	ability:ApplyDataDrivenModifier(caster, caster, "modifier_true_blood_buff", {duration=buff_duration})
	caster:SetMaxHealth(caster:GetMaxHealth() + ability.bonushealth)
	caster:Heal(ability.bonushealth, caster)
end

Так вот, из кода можно понять , что при активации , рассчитывается необходимое количество хитпоинтов для добавления, а также длительность модификатора.
Как видно, хитпоинты я добавляю через SetMaxHealth() , то есть по логике вещей, как только модификатор закончится, хп останется таким каким стало , пока я его не уберу сам, на исходные числа, ибо нету условий, а также события OnDestroy. Но оно становится прежним, как только модификатор исчезает. По идеи в моей способности модификатор пустышка, просто для визуального эффекта. Как это происходит?

Код модификатора:
Код:
"modifier_true_blood_buff"
  	{
  		"Attributes"    "MODIFIER_ATTRIBUTE_NONE" 
      "Passive"      "0"  
      "TextureName"    "omniknight_repel"

      "EffectName"		"particles/econ/items/sven/sven_warcry_ti5/sven_warcry_buff_ti_5.vpcf"
      "EffectAttachType"	"follow_origin"

      "IsDebuff"     "0"
      "IsBuff"      "1"
      "IsHidden"     "0"
      "IsPurgable"    "0"
  	}
 
Последнее редактирование модератором:
[quote author=RecoveryIt link=topic=948.msg4744#msg4744 date=1465220608]
Делаю абилку для героя, и заметил интересный момент.
Имеется луа код который запускается от события OnSpellStart :
Код:
function TrueBloodActivate( keys )
	local caster = keys.caster
	local ability = keys.ability
	ability.bonushealth = 0
	local hp_per_def = ability:GetLevelSpecialValueFor("hp_bonus", ability:GetLevel() - 1)
	local duration_int = ability:GetLevelSpecialValueFor("duration_perc", ability:GetLevel() - 1)
	local bonus_health = hp_per_def * caster.def
	local buff_duration = 5 + duration_int * caster.int
	ability.bonushealth = bonus_health
	ability:ApplyDataDrivenModifier(caster, caster, "modifier_true_blood_buff", {duration=buff_duration})
	caster:SetMaxHealth(caster:GetMaxHealth() + ability.bonushealth)
	caster:Heal(ability.bonushealth, caster)
end

Так вот, из кода можно понять , что при активации , рассчитывается необходимое количество хитпоинтов для добавления, а также длительность модификатора.
Как видно, хитпоинты я добавляю через SetMaxHealth() , то есть по логике вещей, как только модификатор закончится, хп останется таким каким стало , пока я его не уберу сам, на исходные числа, ибо нету условий, а также события OnDestroy. Но оно становится прежним, как только модификатор исчезает. По идеи в моей способности модификатор пустышка, просто для визуального эффекта. Как это происходит?

Код модификатора:
Код:
"modifier_true_blood_buff"
  	{
  		"Attributes"    "MODIFIER_ATTRIBUTE_NONE" 
      "Passive"      "0"  
      "TextureName"    "omniknight_repel"

      "EffectName"		"particles/econ/items/sven/sven_warcry_ti5/sven_warcry_buff_ti_5.vpcf"
      "EffectAttachType"	"follow_origin"

      "IsDebuff"     "0"
      "IsBuff"      "1"
      "IsHidden"     "0"
      "IsPurgable"    "0"
  	}
[/quote]
Дело в том что SetMaxHealth() не работает так как должен. Он хп добавляет, но при любом действии(смена модификатора, респавн, атака) хп вернется к предыдущему значению. Используй подификацию здоровья через отдельный модификатор со стаками.
 
Последнее редактирование модератором:
CryDeS,
Ясненько, я то я уже подумал, дота начала меня понимать, и делать так как мне нужно;D
 
Реклама: