Не работает курьер, нету тика золота(пасивно), не работает модификатор на предмет

MIDNIGHT-GIT-SUDO

Новичок
31 Июл 2024
5
0
ПРОШУ ПРОЩЕНИЯ, У ВСЕХ ТЕХ КТО ЗАКАЛЕБАЛСЯ ОТВЕЧАТЬ НА ТАКИЕ ВОПРОСЫ.
Но я листаю 3-ий день уже на данном форуме и не могу найти нужной информации(сидел проверял каждое найденное решение, где то пытался разобраться
своими мозгами, но увы, никак). Объясните мне как чайнику, как далёкому человеку от всей данной движухи, как сделать тик золота, появление курьера.
Так же хотелось бы спросить. У меня есть предмет Золотая корона(gold_crown)
Вот его код:
Lua:
LinkLuaModifier("modifier_gold_crown", "items/gold_item/item_gold_crown", LUA_MODIFIER_MOTION_NONE)

item_gold_crown = class({})

function item_gold_crown:GetIntrinsicModifierName()
    return "modifier_gold_crown"
end

modifier_gold_crown = class({})


function modifier_gold_crown:IsPurgable()
    return false
end

function modifier_gold_crown:IsDebuff()
    return false
end

function modifier_gold_crown:RemoveOnDeath()
    return false
end

function modifier_gold_crown:IsHidden()
    return false
end

function modifier_gold_crown:OnCreated()

    self.agi_bonus = self:GetAbility():GetSpecialValueFor("bonus_att_agi")
    self.str_bonus = self:GetAbility():GetSpecialValueFor("bonus_att_str")
    self.int_bonus = self:GetAbility():GetSpecialValueFor("bonus_att_int")
    self.all_bonus = self:GetAbility():GetSpecialValueFor("bonus_att_all")

    self.tick = self:GetAbility():GetSpecialValueFor("tick")

    if self:GetParent():GetPrimaryAttribute() == 0 then
        self.gold_per_tick = self:GetAbility():GetSpecialValueFor("gold_per_tick") * self.str_bonus
    elseif self:GetParent():GetPrimaryAttribute() == 1 then
        self.gold_per_tick = self:GetAbility():GetSpecialValueFor("gold_per_tick") * self.agi_bonus
    elseif self:GetParent():GetPrimaryAttribute() == 2 then
        self.gold_per_tick = self:GetAbility():GetSpecialValueFor("gold_per_tick") * self.int_bonus
    elseif self:GetParent():GetPrimaryAttribute() == 3 then
        self.gold_per_tick = self:GetAbility():GetSpecialValueFor("gold_per_tick") * self.all_bonus
    end

    self.all_stats = self:GetAbility():GetSpecialValueFor("all_stats")
    self:StartIntervalThink(self.tick)
end


function modifier_gold_crown:OnRefresh()

    self.agi_bonus = self:GetAbility():GetSpecialValueFor("bonus_att_agi")
    self.str_bonus = self:GetAbility():GetSpecialValueFor("bonus_att_str")
    self.int_bonus = self:GetAbility():GetSpecialValueFor("bonus_att_int")
    self.all_bonus = self:GetAbility():GetSpecialValueFor("bonus_att_all")

    if self:GetParent():GetPrimaryAttribute() == 0 then
        self.gold_per_tick = self:GetAbility():GetSpecialValueFor("gold_per_tick") * self.str_bonus
    elseif self:GetParent():GetPrimaryAttribute() == 1 then
        self.gold_per_tick = self:GetAbility():GetSpecialValueFor("gold_per_tick") * self.agi_bonus
    elseif self:GetParent():GetPrimaryAttribute() == 2 then
        self.gold_per_tick = self:GetAbility():GetSpecialValueFor("gold_per_tick") * self.int_bonus
    elseif self:GetParent():GetPrimaryAttribute() == 3 then
        self.gold_per_tick = self:GetAbility():GetSpecialValueFor("gold_per_tick") * self.all_bonus
    end

    self.tick = self:GetAbility():GetSpecialValueFor("tick")
    self.all_stats = self:GetAbility():GetSpecialValueFor("all_stats")
    self:StartIntervalThink(self.tick)
end

function modifier_gold_crown:DeclareFunctions()
    return {
        MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
        MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
        MODIFIER_PROPERTY_STATS_INTELLECT_BONUS
    }
end

function modifier_gold_crown:GetModifierBonusStats_Strength()
    return self.all_stats
end

function modifier_gold_crown:GetModifierBonusStats_Agility()
    return self.all_stats
end

function modifier_gold_crown:GetModifierBonusStats_Intellect()
    return self.all_stats
end
как мне сделать так что бы он при покупке оказался в слоте нейтралки и каждую секунду давал определённое кол-во золота?
Здесь код Золотой короны в "npc_items_custom.txt":

Код:
    "item_gold_crown"
    {
        // General
        //-------------------------------------------------------------------------------------------------------------
        "AbilityBehavior"                "DOTA_ABILITY_BEHAVIOR_PASSIVE"
        "BaseClass"                        "item_lua"
        "ScriptFile"                    "items/gold_item/item_gold_crown"
        "AbilityTextureName"            "gold_crown"
        
        // Item Info
        //-------------------------------------------------------------------------------------------------------------
        "ItemCost"                        "3000"
        "ItemShopTags"                    "agi"
        "ItemQuality"                    "component"
        "ItemBaseLevel"                    "1"

        "ItemIsNeutralDrop"                "1"

        "Modifiers"
        {
            "modifier_gold_crown"
            {
                "Passive"                "1"
                "IsHidden"               "0"
                "Properties"
                {
                    "MODIFIER_PROPERTY_STATS_STRENGTH_BONUS"  "%bonus_att_str"
                    "MODIFIER_PROPERTY_STATS_AGILITY_BONUS"   "%bonus_att_agi"
                    "MODIFIER_PROPERTY_STATS_INTELLECT_BONUS" "%bonus_att_int"
                }
            }
        }
        // Special   
        //-------------------------------------------------------------------------------------------------------------
        "AbilityValues"
        {
                "all_stats"                "15 40 65 80 100"
                "gold_per_tick"            "75 150 200 250 350"
                "tick"                    "1.5"
                "bonus_att_agi"            "2.0"
                "bonus_att_str"            "2.5"
                "bonus_att_int"            "2.3"
                "bonus_att_all"            "2.4"
        }
    }
 
"ItemPurchasable" "1"

И почему у тебя Modifiers из DataDriven делают в item_lua классе?
self:StartIntervalThink(self.tick) - и где сам OnIntervalThink() отвечающий за выдачу золота с интервалами ?
 
"ItemPurchasable" "1"

И почему у тебя Modifiers из DataDriven делают в item_lua классе?
self:StartIntervalThink(self.tick) - и где сам OnIntervalThink() отвечающий за выдачу золота с интервалами ?
Честно говоря, я в душе не понимаю Lua, сам скрипт предмета я скопировал, а как сделать так что бы он работал в душе не чаю:rolleyes:
Да и кастомку в первый раз делаю(я думаю вы уже поняли) причём... ну... просто на обум, пришла идея сделать свою кастомку и понимаю что ни*** не знаю. А щас ещё и ютуб нихуя не грузит гайды хуй посмотришь, а в инете мало как то информации для начинающих.
 
Честно говоря, я в душе не понимаю Lua, сам скрипт предмета я скопировал, а как сделать так что бы он работал в душе не чаю:rolleyes:
Да и кастомку в первый раз делаю(я думаю вы уже поняли) причём... ну... просто на обум, пришла идея сделать свою кастомку и понимаю что ни*** не знаю. А щас ещё и ютуб нихуя не грузит гайды хуй посмотришь, а в инете мало как то информации для начинающих.
не до конца скопировал значит
 
не до конца скопировал значит
Он работает(даёт атрибуты герою, но золото не даёт), в консоле кстати даёт ошибку когда его получаю:

scripts\vscripts\items\gold_item\item_gold_crown.lua:37: in function <...new\scripts\vscripts\items\gold_item\item_gold_crown.lua:28>
Script Runtime Error: ...new\scripts\vscripts\items\gold_item\item_gold_crown.lua:37: attempt to call method 'GetPrimaryAttribute' (a nil value)
stack traceback:
...new\scripts\vscripts\items\gold_item\item_gold_crown.lua:37: in function <...new\scripts\vscripts\items\gold_item\item_gold_crown.lua:28>
 
Он работает(даёт атрибуты герою, но золото не даёт), в консоле кстати даёт ошибку когда его получаю:

scripts\vscripts\items\gold_item\item_gold_crown.lua:37: in function <...new\scripts\vscripts\items\gold_item\item_gold_crown.lua:28>
Script Runtime Error: ...new\scripts\vscripts\items\gold_item\item_gold_crown.lua:37: attempt to call method 'GetPrimaryAttribute' (a nil value)
stack traceback:
...new\scripts\vscripts\items\gold_item\item_gold_crown.lua:37: in function <...new\scripts\vscripts\items\gold_item\item_gold_crown.lua:28>
подскажите как решить проблему, пожалуйста)
 
Ошибка вылезает тк нету проверки IsServer но это не критично, но критично то что у тебя отсутствует блок OnIntervalThink который ты видимо забыл скопировать или откуда у тебя этот код (чат гпт?)
В любом случае в коде у тебя нету ни одной функции которая даёт золото
hHero:ModifyGold( 100, true, 0)
 
Реклама: