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

Вопрос о lua_modifiers

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

Оффлайн RecoveryIt

  • 70
  • Мощь: 1
Вопрос о lua_modifiers
« : 12-05-2016, 03:20:28 »
Кто-нибудь может ответить почему данный модифиер не добавляет атаку:
Код
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
В статусе модифиер продолжает отображатся, но и хп не дает. Беда.
Новая информация: Перезапустил тулзы, ничего не менял, теперь когда накладываю этот модидфиер на героя, тулзы просто зависают , без какой либо ошибки.
« Последнее редактирование: 12-05-2016, 03:45:51 от RecoveryIt »

Оффлайн Se7eN

  • Продвинутый
  • 298
  • Мощь: 11
  • King
Re: Вопрос о lua_modifiers
« Ответ #1 : 20-05-2016, 17:05:27 »
Вот то что ты сейчас делаешь, реально легче в kv делать

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

Оффлайн Adam Smith

  • Друзья CG
  • 466
  • Мощь: 6
  • жрять жри его
Re: Вопрос о lua_modifiers
« Ответ #2 : 20-05-2016, 19:14:02 »
Вот то что ты сейчас делаешь, реально легче в kv делать

если хочешь изучать луа, пиши нормальные способности, а не те, которые на kv делаются почти закрытыми глазами
KV и половины функционала LUA не имеет
By PG.Freeman

Оффлайн RecoveryIt

  • 70
  • Мощь: 1
Re: Вопрос о lua_modifiers
« Ответ #3 : 20-05-2016, 19:21:46 »
Вот то что ты сейчас делаешь, реально легче в kv делать

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

Оффлайн Илья

  • Супермодератор
  • 1892
  • Мощь: 16
Re: Вопрос о lua_modifiers
« Ответ #4 : 20-05-2016, 21:20:42 »
Тут водится "негласное правило вежливого тона" - если проблему решил, выкладывай решение, дабы в будущем на него сослаться в похожей ситуации.

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

Оффлайн RecoveryIt

  • 70
  • Мощь: 1
Re: Вопрос о lua_modifiers
« Ответ #5 : 20-05-2016, 22:11:56 »
Тут водится "негласное правило вежливого тона" - если проблему решил, выкладывай решение, дабы в будущем на него сослаться в похожей ситуации.

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

К данной теме это правило не относится, ибо код представленный выше, не работает до сих пор, я пошел другим путем -> решил свою проблему -> профит.

Оффлайн Adam Smith

  • Друзья CG
  • 466
  • Мощь: 6
  • жрять жри его
Re: Вопрос о lua_modifiers
« Ответ #6 : 20-05-2016, 22:40:15 »
Тут водится "негласное правило вежливого тона" - если проблему решил, выкладывай решение, дабы в будущем на него сослаться в похожей ситуации.

Но, это правило каждый для себя решает, соблюдать или нет)
Брат мой, решение всех наших проблем найдено!!
Код
  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)
By PG.Freeman