Маленький вопросик по Атрибутам

Dangalor

Пользователь
11 Авг 2016
32
0
Собственно можно ли изменить значение прироста статов от атрибутов.К примеру в стандарте 20хп за 1ед. силы, а я хочу скажем 5 или вообще 0, так же убрать прирост спелпавера за интелект и армомра за ловкость.
Если это возможно подскажите как) Шарился в скриптах карты "Рашпит" там есть изменение атрибутов но вот что то не догнал как оно работает)
 
Последнее редактирование модератором:
Вот код из Рашпита
Код:
if not Attributes then
  Attributes = class({})
end

function Attributes:Init()
  local v = LoadKeyValues("scripts/kv/attributes.kv")
  LinkLuaModifier("modifier_movespeed_cap", "libraries/modifiers/modifier_movespeed_cap", LUA_MODIFIER_MOTION_NONE)

  -> Default Dota Values
  local DEFAULT_HP_PER_STR = 20
  local DEFAULT_HP_REGEN_PER_STR = 0.03
  local DEFAULT_MANA_PER_INT = 12
  local DEFAULT_MANA_REGEN_PER_INT = 0.04
  local DEFAULT_ARMOR_PER_AGI = 0.14
  local DEFAULT_ATKSPD_PER_AGI = 1
  local DEFAULT_SPELLDMG_PER_INT = 1/16

  Attributes.hp_adjustment = v.HP_PER_STR - DEFAULT_HP_PER_STR
  Attributes.hp_regen_adjustment = v.HP_REGEN_PER_STR - DEFAULT_HP_REGEN_PER_STR
  Attributes.mana_adjustment = v.MANA_PER_INT - DEFAULT_MANA_PER_INT
  Attributes.mana_regen_adjustment = v.MANA_REGEN_PER_INT - DEFAULT_MANA_REGEN_PER_INT
  Attributes.armor_adjustment = v.ARMOR_PER_AGI - DEFAULT_ARMOR_PER_AGI
  Attributes.attackspeed_adjustment = v.ATKSPD_PER_AGI - DEFAULT_ATKSPD_PER_AGI
  Attributes.spellpower_adjustment = v.SP_INT - DEFAULT_SPELLDMG_PER_INT

  Attributes.applier = CreateItem("item_stat_modifier", nil, nil)
end

function Attributes:ModifyBonuses(hero)

  print("Modifying Stats Bonus of hero "..hero:GetUnitName())

  
  Timers:CreateTimer(function()

    if not IsValidEntity(hero) then
      return
    end

    -> Initialize value tracking
    if not hero.custom_stats then
      hero.custom_stats = true
      hero.strength = 0
      hero.agility = 0
      hero.intellect = 0
    end

    -> Get player attribute values
    local strength = hero:GetStrength()
    local agility = hero:GetAgility()
    local intellect = hero:GetIntellect()
    
    -> Base Armor Bonus
    local armor = agility * Attributes.armor_adjustment
    hero:SetPhysicalArmorBaseValue(armor)

    -> STR
    if strength ~= hero.strength then
      
      -> HP Bonus
      if not hero:HasModifier("modifier_health_bonus") then
        Attributes.applier:ApplyDataDrivenModifier(hero, hero, "modifier_health_bonus", {})
      end

      local health_stacks = math.abs(strength * Attributes.hp_adjustment)
      hero:SetModifierStackCount("modifier_health_bonus", Attributes.applier, health_stacks)

      -> HP Regen Bonus
      if not hero:HasModifier("modifier_health_regen_constant") then
        Attributes.applier:ApplyDataDrivenModifier(hero, hero, "modifier_health_regen_constant", {})
      end

      local health_regen_stacks = math.abs(strength * Attributes.hp_regen_adjustment * 100)
      hero:SetModifierStackCount("modifier_health_regen_constant", Attributes.applier, health_regen_stacks)
    end

    -> AGI
    -> if agility ~= hero.agility then    

    ->   Attack Speed Bonus
       if not hero:HasModifier("modifier_attackspeed_bonus_constant") then
         Attributes.applier:ApplyDataDrivenModifier(hero, hero, "modifier_attackspeed_bonus_constant", {})
      end

       local attackspeed_stacks = math.abs(agility * Attributes.attackspeed_adjustment)
      hero:SetModifierStackCount("modifier_attackspeed_bonus_constant", Attributes.applier, attackspeed_stacks)
    end

    -> INT
    if intellect ~= hero.intellect then
      
      -> Mana Bonus
      if not hero:HasModifier("modifier_mana_bonus") then
        Attributes.applier:ApplyDataDrivenModifier(hero, hero, "modifier_mana_bonus", {})
      end

      local mana_stacks = math.abs(intellect * Attributes.mana_adjustment)
      hero:SetModifierStackCount("modifier_mana_bonus", Attributes.applier, mana_stacks)

      -> Mana Regen Bonus
      if not hero:HasModifier("modifier_base_mana_regen") then
        Attributes.applier:ApplyDataDrivenModifier(hero, hero, "modifier_base_mana_regen", {})
      end

      local mana_regen_stacks = math.abs(intellect * Attributes.mana_regen_adjustment * 100)
      hero:SetModifierStackCount("modifier_base_mana_regen", Attributes.applier, mana_regen_stacks)

      ->SPELL DAMAGE STACKS
       if not hero:HasModifier("modifier_spell_damage_constant") then
         Attributes.applier:ApplyDataDrivenModifier(hero, hero, "modifier_spell_damage_constant", {})
       end

       local spellpower_stacks = intellect
       print(spellpower_stacks)
       hero:SetModifierStackCount("modifier_spell_damage_constant", Attributes.applier, spellpower_stacks)

      
    end

    -> Update the stored values for next timer cycle
    hero.strength = strength
    hero.agility = agility
    hero.intellect = intellect

    hero:CalculateStatBonus()

    return 0.25
  end)
end

if not Attributes.applier then Attributes:Init() end
 
Последнее редактирование модератором:
Ну все логично они делают: реализовали функцию, которая позволяет задавать свои значения для статов через модификацию параметров этих статов (так как по сути, параметры - это модификаторы).
 
Тут даже толком то нечего и добавить - берешь и копируешь код функции и используешь по своему усмотрению.
 
Тут даже толком то нечего и добавить - берешь и копируешь код функции и используешь по своему усмотрению.
Вот я тоже посмотрел вродь все логично) а вот когда скопировал в игре изменений ноль
 
Последнее редактирование модератором:
[quote author=Илья link=topic=1352.msg8502#msg8502 date=1487965547]
Ну все логично они делают: реализовали функцию, которая позволяет задавать свои значения для статов через модификацию параметров этих статов (так как по сути, параметры - это модификаторы).
[/quote]
Открою секрет, статы это тоже модификатор. Просто он не явный, и не поддерживает пурдж или какое либо индексирование средствами lua.
 
Вот я тоже посмотрел вродь все логично) а вот когда скопировал в игре изменений ноль

Во первых, покажи, как ты используешь этот код у себя. Копировать то надо правильно.

Во вторых: может используемые в этой функции модификаторы были созданы вручную. И скорее всего так и есть, ибо мне поиск по этим именам на valvesoftware ничего не дал. В таком случае нужен еще и код модификаторов и подключение их, которое в этом куске кода отсутствует.
 
Последнее редактирование модератором:
На гитхабе есть точь в точь такой же код у MNoya. Теперь можно задаться вопросом, не MNoya ли автор.

Вот и тебе ответ, почему у тебя ничего не работало.
 
Сейчас можно одним модификатором на луа сделать, этот код немного устаревший
 
[quote author=Илья link=topic=1352.msg8510#msg8510 date=1487981469]
На гитхабе есть точь в точь такой же код у MNoya. Теперь можно задаться вопросом, не MNoya ли автор.

Вот и тебе ответ, почему у тебя ничего не работало.
[/quote]
Естественно я скопировал и модифайры, и вызов библиотеки и т.д) все что нашел связаное и как либо влияющее, на сколько я понял стандартный прирост к примеру тогоже хп от силы изменить нельзя и там просто вещается модиф который добавляет(в моём случае онимает)ХП у кастера по формуле strength * Attributes.hp_adjustment. Тобишь я могу умножать силу на 20 и отнимать это число?
 
Открою секрет, статы это тоже модификатор. Просто он не явный, и не поддерживает пурдж или какое либо индексирование средствами lua.

Тоже модификатор, но не ведет себя как модификатор и его нет в списке модификаторов и так получилось что в общем-то это не модификатор.
 
Тоже модификатор, но не ведет себя как модификатор и его нет в списке модификаторов и так получилось что в общем-то это не модификатор.
Это модификатор, и ведет себя как модификатор, другое дело что моддерам его не дали.
 
Последнее редактирование модератором:
И почему ты уверен что это модификатор? Или Valve специально скрыли его от тебя?
 
Нет. Зачем вообще делать модификатор, который будет всегда висеть на всех героях, если это можно впилить прямо в класс?
 
Нет. Зачем вообще делать модификатор, который будет всегда висеть на всех героях, если это можно впилить прямо в класс?
Я про то что модификатор дающий БОНУСЫ за статы, вроде хп,маны и прочего такого. Сами циферки статов офк вписаны напрямую в класс героя.
 
Последнее редактирование модератором:
Реклама: