Таланты

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Сорян конечно,что я тупой и всё такое,но я хочу сейчас разобраться с этим,чтобы потом самому делать,а теперь к делу.

Делал я пост о том,что у меня не робит талант,вообщем,я всё сделал как мне там посоветовали,и он начал изменять описание скилла, для которого был написан талант,и чтобы проверить работает ли он,я сделал большое значение для него,но как оказалось скилл действовал как раньше,как - будто он его не видит,но в описании скилла,достаточно понятно увеличено значение.... Я опять тупой? (Сорянчик,но я правда хочу это понять и сделать)
Вот так выглядит скилл без выкачки таланта:1274fffcced1e11fffc7be4b4963e342.png.
А уже вот так выглядит скилл при выкачанном таланте: a156ae902cbc1a5ed0980d8cf1584c88.png.
Суть в том,что описание меняется,а в игре скилл действует как без выкачки таланта,не видит словно.
Ошибок не показывает как в самой игре так и в консоле,
 
Последнее редактирование модератором:

EYEOFLIE

Активный
28 Янв 2018
137
4
Сорян конечно,что я тупой и всё такое,но я хочу сейчас разобраться с этим,чтобы потом самому делать,а теперь к делу.

Делал я пост о том,что у меня не робит талант,вообщем,я всё сделал как мне там посоветовали,и он начал изменять описание скилла, для которого был написан талант,и чтобы проверить работает ли он,я сделал большое значение для него,но как оказалось скилл действовал как раньше,как - будто он его не видит,но в описании скилла,достаточно понятно увеличено значение.... Я опять тупой? (Сорянчик,но я правда хочу это понять и сделать)
Вот так выглядит скилл без выкачки таланта:Посмотреть вложение 35.
А уже вот так выглядит скилл при выкачанном таланте: Посмотреть вложение 36.
Суть в том,что описание меняется,а в игре скилл действует как без выкачки таланта,не видит словно.
Ошибок не показывает как в самой игре так и в консоле,
Если написано чисто на дд, то хз, если на луа то ты наверно забыл прописать путь модификаторов в линк-луа, или у тебя значение не возвращает, если написано раздельно, 2 файла, скил и талант то скорей всего талант просто не имеет пути к скилу, переделай в доп модификатор в луа который активируется наличием таланта, и допиши линк в дд, как то так.


P.s Я не знаток, просто мои предположения, я обычно всё по 150 раз проверяю, а оказывается забыл прописать линк)
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Если написано чисто на дд, то хз, если на луа то ты наверно забыл прописать путь модификаторов в линк-луа, или у тебя значение не возвращает, если написано раздельно, 2 файла, скил и талант то скорей всего талант просто не имеет пути к скилу, переделай в доп модификатор в луа который активируется наличием таланта, и допиши линк в дд, как то так.


P.s Я не знаток, просто мои предположения, я обычно всё по 150 раз проверяю, а оказывается забыл прописать линк)
Скиллы у меня вместе "LinkedSpecialBonus" прописан,сам скилл сделан на lua. Чуть ниже код связанный с этим. Насчёт путя модификатора если не сложно по понятней скажи,может там что-то..

if self:GetCaster():HasTalent("special_bonus_unique_shot_hp") then
local value = self:GetCaster():FindTalentValue("special_bonus_unique_shot_hp")
pers = value + pers
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
Линкспешиал бонус скорее всего только на отображение работает, тебе самому нужно прописывать зависимость от таланта
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Линкспешиал бонус скорее всего только на отображение работает, тебе самому нужно прописывать зависимость от таланта
Это не она?
Код:
if self:GetCaster():HasTalent("special_bonus_unique_shot_hp") then
   local value = self:GetCaster():FindTalentValue("special_bonus_unique_shot_hp")
   pers = value + pers
 

EYEOFLIE

Активный
28 Янв 2018
137
4
да,я же сказал,ошибок нету в консольке или в самой игре,я всё это уже добавил (Даже добавил GetTalentSpecialValueFor)
а ничего что у тебя зацикливается вроде значение, и если бы линк был успешен то тебя бы дисконектило, и лучше весь код прикладывать, ито так не понять образно
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
а ничего что у тебя зацикливается вроде значение, и если бы линк был успешен то тебя бы дисконектило, и лучше весь код прикладывать, ито так не понять образно
Насчёт зацыкленности,так и должно,вить он добавляет 1 раз тот и тот,значит,больше юзать не будет...
 
20 Дек 2016
892
170
LinkedSpecialBonus влияет только на цифры в описании. В луа значение с учетом таланта должно вычисляться вручную.
Приведи часть кода способности, где ты получаешь это значение и полный код добавленных тобою функций, связанных с талантами.
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
LinkedSpecialBonus влияет только на цифры в описании. В луа значение с учетом таланта должно вычисляться вручную.
Приведи часть кода способности, где ты получаешь это значение и полный код добавленных тобою функций, связанных с талантами.
function modifier_shot_hp:OnAttackLanded( params )
if IsServer() then
if params.attacker == self:GetParent() and ( not self:GetParent():IsIllusion() ) then
if self:GetParent():passivesDisabled() then
return 0
end
if self:GetAbility():IsCooldownReady() then
local target = params.target
if target ~= nil and target:IsBuilding() == false then
if target:GetUnitName() == "npc_dota_warlock_golem_1" then
return nil
end
local pers = self:GetAbility():GetSpecialValueFor("health_pers")
if self:GetCaster():HasTalent("special_bonus_unique_shot_hp") then
local value = self:GetCaster():FindTalentValue("special_bonus_unique_shot_hp")
pers = value + pers
end
if target:GetHealthPercent() <= self:GetAbility():GetSpecialValueFor("health_pers") then
EmitSoundOn("Hero_Oracle.FalsePromise.FP", self:GetCaster())
local nFXIndex = ParticleManager:CreateParticle( "particles/econ/items/phantom_assassin/phantom_assassin_arcana_elder_smith/phantom_assassin_crit_arcana_swoop_c.vpcf", PATTACH_CUSTOMORIGIN, target );
ParticleManager:SetParticleControlEnt( nFXIndex, 0, target, PATTACH_POINT_FOLLOW, "attach_hitloc", target:GetOrigin(), true );
ParticleManager:SetParticleControlEnt( nFXIndex, 1, target, PATTACH_POINT_FOLLOW, "attach_hitloc", target:GetOrigin(), true );
ParticleManager:SetParticleControl( nFXIndex, 2, Vector(100, 100, 100))
ParticleManager:SetParticleControlEnt( nFXIndex, 10, target, PATTACH_POINT_FOLLOW, "attach_hitloc", target:GetOrigin(), true );
ParticleManager:ReleaseParticleIndex( nFXIndex );
target:Kill(self:GetAbility(), self:GetCaster())
self:GetAbility():StartCooldown(self:GetAbility():GetCooldown(self:GetAbility():GetLevel()))
end
end
end
end
end

return 0
end

function CDOTA_BaseNPC:HasTalent(talentName)
if self:HasAbility(talentName) then
if self:FindAbilityByName(talentName):GetLevel() > 0 then return true end
end
return false
end

function CDOTA_BaseNPC:FindTalentValue(talentName)
if self:HasAbility(talentName) then
return self:FindAbilityByName(talentName):GetSpecialValueFor("value")
end
return nil
end

function CDOTABaseAbility:GetTalentSpecialValueFor(value)
local base = self:GetSpecialValueFor(value)
local talentName
local kv = self:GetAbilityKeyValues()
for k,v in pairs(kv) do -- trawl through keyvalues
if k == "AbilitySpecial" then
for l,m in pairs(v) do
if m[value] then
talentName = m["LinkedSpecialBonus"]
end
end
end
end
if talentName then
local talent = self:GetCaster():FindAbilityByName(talentName)
if talent and talent:GetLevel() > 0 then base = base + talent:GetSpecialValueFor("value") end
end
return base
end
Ну в принципе вот,скинул не весь код,а только функцию где пишется про таланты.
 

EYEOFLIE

Активный
28 Янв 2018
137
4
Я теперь понял каково это смотреть на код глазами хелпера в спойлере, извините за эту боль, когда я давно задавал вопрос приложив код в спойлер...
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Я теперь понял каково это смотреть на код глазами хелпера в спойлере, извините за эту боль, когда я давно задавал вопрос приложив код в спойлер...
Думаю стоит завтра изменить всё это,я торопился и не глянул как это выглядит :)
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
Я теперь понял каково это смотреть на код глазами хелпера в спойлере, извините за эту боль, когда я давно задавал вопрос приложив код в спойлер...
Надо код под спойлер запихивать и в блок кода дополнительно, вот так:
Код:
FUNCTION
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
LinkedSpecialBonus влияет только на цифры в описании. В луа значение с учетом таланта должно вычисляться вручную.
Приведи часть кода способности, где ты получаешь это значение и полный код добавленных тобою функций, связанных с талантами.
Код:
function modifier_shot_hp:OnAttackLanded( params )
    if IsServer() then
        if params.attacker == self:GetParent() and ( not self:GetParent():IsIllusion() ) then
            if self:GetParent():PassivesDisabled() then
                return 0
            end
      if self:GetAbility():IsCooldownReady() then
        local target = params.target
        if target ~= nil and target:IsBuilding() == false then
                    if target:GetUnitName() == "npc_dota_warlock_golem_1" then
                        return nil
                    end
          local pers = self:GetAbility():GetSpecialValueFor("health_pers")
          if self:GetCaster():HasTalent("special_bonus_unique_shot_hp") then
              local value = self:GetCaster():FindTalentValue("special_bonus_unique_shot_hp")
              pers = value + pers
          end
          if target:GetHealthPercent() <= self:GetAbility():GetSpecialValueFor("health_pers") then
            EmitSoundOn("Hero_Oracle.FalsePromise.FP", self:GetCaster())
            local nFXIndex = ParticleManager:CreateParticle( "particles/econ/items/phantom_assassin/phantom_assassin_arcana_elder_smith/phantom_assassin_crit_arcana_swoop_c.vpcf", PATTACH_CUSTOMORIGIN, target );
                ParticleManager:SetParticleControlEnt( nFXIndex, 0, target, PATTACH_POINT_FOLLOW, "attach_hitloc", target:GetOrigin(), true );
            ParticleManager:SetParticleControlEnt( nFXIndex, 1, target, PATTACH_POINT_FOLLOW, "attach_hitloc", target:GetOrigin(), true );
            ParticleManager:SetParticleControl( nFXIndex, 2, Vector(100, 100, 100))
            ParticleManager:SetParticleControlEnt( nFXIndex, 10, target, PATTACH_POINT_FOLLOW, "attach_hitloc", target:GetOrigin(), true );
                ParticleManager:ReleaseParticleIndex( nFXIndex );
            target:Kill(self:GetAbility(), self:GetCaster())
            self:GetAbility():StartCooldown(self:GetAbility():GetCooldown(self:GetAbility():GetLevel()))
          end
        end
      end
        end
    end

    return 0
end
А это код добавленных функций:
Код:
function CDOTA_BaseNPC:HasTalent(talentName)
    if self:HasAbility(talentName) then
        if self:FindAbilityByName(talentName):GetLevel() > 0 then return true end
    end
    return false
end

function CDOTA_BaseNPC:FindTalentValue(talentName)
    if self:HasAbility(talentName) then
        return self:FindAbilityByName(talentName):GetSpecialValueFor("value")
    end
    return nil
end

function CDOTABaseAbility:GetTalentSpecialValueFor(value)
    local base = self:GetSpecialValueFor(value)
    local talentName
    local kv = self:GetAbilityKeyValues()
    for k,v in pairs(kv) do -- trawl through keyvalues
        if k == "AbilitySpecial" then
            for l,m in pairs(v) do
                if m[value] then
                    talentName = m["LinkedSpecialBonus"]
                end
            end
        end
    end
    if talentName then
        local talent = self:GetCaster():FindAbilityByName(talentName)
        if talent and talent:GetLevel() > 0 then base = base + talent:GetSpecialValueFor("value") end
    end
    return base
end
 

EYEOFLIE

Активный
28 Янв 2018
137
4
Попробуй указать вместо
Код:
local value = self:GetCaster():FindTalentValue("special_bonus_unique_shot_hp")
pers = value + pers

так
Код:
local value = self:GetCaster():GetTalentSpecialValueFor("тут указывает значение из KV, при этом у тебя в дд должна быть эта абилка, со специальными значениями")
pers = value + pers
 
20 Дек 2016
892
170
Попробуй указать вместо
Код:
local value = self:GetCaster():FindTalentValue("special_bonus_unique_shot_hp")
pers = value + pers

так
Код:
local value = self:GetCaster():GetTalentSpecialValueFor("тут указывает значение из KV, при этом у тебя в дд должна быть эта абилка, со специальными значениями")
pers = value + pers
GetTalentSpecialValueFor применяется не к юниту, а к способности и дает значение с учетом исходного, поэтому ни к чему ничего добавлять не надо.
Код:
pers = self:GetAbility():GetTalentSpecialValueFor("health_pers")


Код:
local pers = self:GetAbility():GetSpecialValueFor("health_pers")
if self:GetCaster():HasTalent("special_bonus_unique_shot_hp") then
local value = self:GetCaster():FindTalentValue("special_bonus_unique_shot_hp")
pers = value + pers
end
Твой способ тоже вычисляет значение правильно, вот только дальнейшие действия ты выполняешь независимо от него. Очень глупая ошибка и с талантами она не связана.
if target:GetHealthPercent() <= self:GetAbility():GetSpecialValueFor("health_pers") then
Не с тем сравниваешь.
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
GetTalentSpecialValueFor применяется не к юниту, а к способности и дает значение с учетом исходного, поэтому ни к чему ничего добавлять не надо.
Код:
pers = self:GetAbility():GetTalentSpecialValueFor("health_pers")



Твой способ тоже вычисляет значение правильно, вот только дальнейшие действия ты выполняешь независимо от него. Очень глупая ошибка и с талантами она не связана.

Не с тем сравниваешь.
Весь прикол в том,что я не с тем сравниваю?
 
Реклама: