Вопрос о lua_modifiers

RecoveryIt

Активный
7 Май 2016
75
0
Кто-нибудь может ответить почему данный модифиер не добавляет атаку:
Код:
modifier_damage_two = class({})

function modifier_damage_two:DeclareFunctions()
	local funcs = {
				MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE
					}
    return funcs
end

function modifier_damage_two:GetModifierPreAttack_BonusDamage()
	if IsServer() then
		local hero_damage = self:GetParent():GetAverageTrueAttackDamage()
		local bonus_damage = math.ceil(hero_damage * 0.5)
		return bonus_damage
	end
end

function modifier_damage_two:GetAttributes() 
  return MODIFIER_ATTRIBUTE_PERMANENT
end

function modifier_damage_two:IsHidden()
  return false
end

function modifier_damage_two:IsPurgable()
  return false
end

На герое отображается, но урона не дает, проверял разными способами, изменял значения на огромные числа, а также принтом:
Код:
local damage = hHero:GetAverageTrueAttackDamage()
DebugPrint(damage)
Выводит стандартный урон героя. Хотя судя по модифиеру, должен добавить 50% от текущей атаки.
Также пробовал со скоростью бега -> таже проблема.
У меня есть еще один луа модифиер, который вешается со старта на каждом герое:
Код:
modifier_custom_stats = class({})

function modifier_custom_stats:DeclareFunctions()
  local funcs = {
    MODIFIER_PROPERTY_BASEATTACK_BONUSDAMAGE,
    MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT,
    MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,
    MODIFIER_PROPERTY_EVASION_CONSTANT,
    MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS,
    MODIFIER_PROPERTY_HEALTH_BONUS,
    MODIFIER_PROPERTY_MANA_BONUS,
    MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE,
    MODIFIER_PROPERTY_PHYSICAL_CONSTANT_BLOCK,
  }

  return funcs
end


function modifier_custom_stats:GetModifierBaseAttack_BonusDamage()
 if IsServer() then
  local hHero = self:GetParent()
  local player = hHero:GetPlayerOwnerID()
  local TableInt = player + 1
  local str = GameMode.HERO_STATS_TABLE[TableInt][1]
  local bonus_damage = str * 1.0
  return bonus_damage
 end
end

function modifier_custom_stats:GetModifierManaBonus()
 if IsServer() then
  local hHero = self:GetParent()
  local player = hHero:GetPlayerOwnerID()
  local TableInt = player + 1
  local int = GameMode.HERO_STATS_TABLE[TableInt][3]
  local bonus_mana = int * 7
  return bonus_mana
 end
end

function modifier_custom_stats:GetModifierHealthBonus()
 if IsServer() then
  local hHero = self:GetParent()
  local player = hHero:GetPlayerOwnerID()
  local TableInt = player + 1
  local def = GameMode.HERO_STATS_TABLE[TableInt][5]
  local bonus_hp = def * 5
  return bonus_hp
 end
end

function modifier_custom_stats:GetModifierPreAttack_CriticalStrike()
 if IsServer() then
  local hHero = self:GetParent()
  local player = hHero:GetPlayerOwnerID()
  local TableInt = player + 1
  local str = GameMode.HERO_STATS_TABLE[TableInt][1]
  local agi = GameMode.HERO_STATS_TABLE[TableInt][2]
  local crit_mult = str * 0.5
  local crit_number = RandomInt(1,100)
  local crit_chance = 4 + agi * 0.06
  if crit_number <= crit_chance then
   return crit_mult + 110
  end
 end
end

function modifier_custom_stats:GetModifierPhysical_ConstantBlock()
 if IsServer() then
  local hHero = self:GetParent()
  local player = hHero:GetPlayerOwnerID()
  local TableInt = player + 1
  local def = GameMode.HERO_STATS_TABLE[TableInt][5]
  local int = GameMode.HERO_STATS_TABLE[TableInt][3]
  local block_damage = def * 2
  local block_number = RandomInt(1,100)
  local block_chance = 4 + int * 0.09
  if block_number <= block_chance then
   return block_damage + 10
  end
 end
end

function modifier_custom_stats:GetModifierMoveSpeedBonus_Constant()
 if IsServer() then
  local hHero = self:GetParent()
  local player = hHero:GetPlayerOwnerID()
  local TableInt = player + 1
  local spd = GameMode.HERO_STATS_TABLE[TableInt][4]
  local ms_bonus = spd * 0.55
  return ms_bonus
 end
end

function modifier_custom_stats:GetModifierAttackSpeedBonus_Constant()
 if IsServer() then
  local hHero = self:GetParent()
  local player = hHero:GetPlayerOwnerID()
  local TableInt = player + 1
  local spd = GameMode.HERO_STATS_TABLE[TableInt][4]
  local as_bonus = spd * 0.42
  return as_bonus
 end
end

function modifier_custom_stats:GetModifierEvasion_Constant()
 if IsServer() then
  local hHero = self:GetParent()
  local player = hHero:GetPlayerOwnerID()
  local TableInt = player + 1
  local agi = GameMode.HERO_STATS_TABLE[TableInt][2]
  local evasion = 5 + agi * 0.07
  return evasion
 end
end

function modifier_custom_stats:GetModifierPhysicalArmorBonus()
 if IsServer() then
  local hHero = self:GetParent()
  local player = hHero:GetPlayerOwnerID()
  local TableInt = player + 1
  local def = GameMode.HERO_STATS_TABLE[TableInt][5]
  local armor = def * 0.08
  return armor
 end
end

function modifier_custom_stats:GetAttributes() 
  return MODIFIER_ATTRIBUTE_PERMANENT
end

function modifier_custom_stats:IsHidden()
  return true
end

function modifier_custom_stats:IsPurgable()
  return false
end
Но он работает отлично.
Добавляю еще одну проперти в модифиер:
Код:
function modifier_damage_two:GetModifierHealthBonus()
	if IsServer() then
		local health = 500
		return health
	end
end
В статусе модифиер продолжает отображатся, но и хп не дает. Беда.
Новая информация: Перезапустил тулзы, ничего не менял, теперь когда накладываю этот модидфиер на героя, тулзы просто зависают , без какой либо ошибки.
 
Последнее редактирование модератором:
Вот то что ты сейчас делаешь, реально легче в kv делать

если хочешь изучать луа, пиши нормальные способности, а не те, которые на kv делаются почти закрытыми глазами
 
Вот то что ты сейчас делаешь, реально легче в kv делать

если хочешь изучать луа, пиши нормальные способности, а не те, которые на kv делаются почти закрытыми глазами
KV и половины функционала LUA не имеет
 
Последнее редактирование модератором:
Вот то что ты сейчас делаешь, реально легче в kv делать

если хочешь изучать луа, пиши нормальные способности, а не те, которые на kv делаются почти закрытыми глазами
Во-первых, это не для способности.
Во-вторых, не совсем понял тебя, но откуда ты знаешь что легче для моей задумки, а что нет? Я всего лишь задал вопрос, почему данный код не работает.
Хотя уже не важно, проблема давно решена.
 
Последнее редактирование модератором:
Тут водится "негласное правило вежливого тона" - если проблему решил, выкладывай решение, дабы в будущем на него сослаться в похожей ситуации.

Но, это правило каждый для себя решает, соблюдать или нет)
 
Последнее редактирование модератором:
Тут водится "негласное правило вежливого тона" - если проблему решил, выкладывай решение, дабы в будущем на него сослаться в похожей ситуации.

Но, это правило каждый для себя решает, соблюдать или нет)

К данной теме это правило не относится, ибо код представленный выше, не работает до сих пор, я пошел другим путем -> решил свою проблему -> профит.
 
Последнее редактирование модератором:
Тут водится "негласное правило вежливого тона" - если проблему решил, выкладывай решение, дабы в будущем на него сослаться в похожей ситуации.

Но, это правило каждый для себя решает, соблюдать или нет)
Брат мой, решение всех наших проблем найдено!!
Код:
 Timers:CreateTimer(0.1, function()
      if self:GetParent ():HasModifier ("modifier_item_frostmourne_soul_stole") then
        self:ForceRefresh ()
        return 0.1
      else
        return nil
      end
    end)
 
Последнее редактирование модератором:
Реклама: