Счетчик добиваний крипов

.F.R.I.D.

Новичок
13 Сен 2020
8
0
Не понимаю как сделать счетчик добитых крипов за героем, у меня есть пасивка на герое написанная на lua, смысл в том что должны считываться киллы и каждый кил будет добавлять 1 очко интеллекта силы и ловкости. Templar_2 навык пассивка с которой проблема.

KV:
// Dota Heroes File
"DOTAAbilities"
{
    "Templar_1_lua"
    {
        "BaseClass"                  "ability_lua"
        "ScriptFile"                "Templar_1_lua"

        "AbilityBehavior"            "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE"

        "AbilityCastPoint"            "0.0 0.0 0.0 0.0"
        "AbilityCooldown"            "10.0 12.0 14.0 16.0"
        "AbilityManaCost"            "20 40 80 120"


        "AbilityTextureName"         "Templar_1"
       }
       "Templar_2_lua"
    {
        "BaseClass"                  "ability_lua"
        "ScriptFile"                "Templar_2_lua"

        "AbilityBehavior"            "DOTA_ABILITY_BEHAVIOR_PASSIVE"

        "AbilityTextureName"         "Templar_1"
       }
}

Lua:
Templar_2_lua = class({})
LinkLuaModifier("modifier_Templar_2_lua",LUA_MODIFIER_MOTION_NONE)



function Templar_2_lua:OnOwnerSpawned()
    local caster = self:GetOwner();
    caster:AddNewModifier(caster, self, "modifier_Templar_2_lua", { duration = 8000});
end

function Templar_1_lua:OnSpellStart()
    local caster = self:GetCaster();

    caster:AddNewModifier(caster, self, "modifier_Templar_2_lua", { duration = 8000 });
end

function Templar_1_lua:OnUpgrade()
    local caster = self:GetOwner();

    caster:AddNewModifier(caster, self, "modifier_Templar_2_lua", { duration = 8000 });
end
Lua:
modifier_Templar_2_lua = class({})

function modifier_Templar_2_lua:DeclareFunctions()
    local funcs_array = {
        MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
        MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,
        MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
        MODIFIER_PROPERTY_STATS_INTELLECT_BONUS
    }

    return funcs_array
end

function Templar_2_lua:OnOwnerSpawned()
    local kills = 0
end

function modifier_Templar_2_lua:GetModifierBonusStats_Strength(params)
    return kills;
end

function modifier_Templar_2_lua:GetModifierAttackSpeedBonus_Constant(params)
    return kills;
end

function modifier_Templar_2_lua:GetModifierBonusStats_Agility(params)
    return kills;
end

function modifier_Templar_2_lua:GetModifierBonusStats_Intellect(params)
    return kills;
end

if killedUnit:GetUnitName() == npc_dota_neutral_kobold then

else
    kills=kills+1;
    print(kills);
end
 
Последнее редактирование:

.F.R.I.D.

Новичок
13 Сен 2020
8
0
Я новичок в этом деле, и особо не шарю по коду в плане многих вещей, наподобие того как пользоваться глобальными переменными из разных скриптов и т п, поэтому все так коряво
 

.F.R.I.D.

Новичок
13 Сен 2020
8
0
И сразу хотел узнать реалезуемо ли это через
Lua:
ListenToGameEvent('entity_killed', Dynamic_Wrap(GameMode, 'OnEntityKilled'), self)
И как эти слушатели работают, если да.(в кратце)
PS Я понимаю что слушатель вставляется в основной скрипт аддона, но как по этому событию что либо сделать не особо
 

muRLoc

Активный
25 Ноя 2018
83
23
Код:
ability_test_stats = class({})
LinkLuaModifier( "modifier_ability_test_stats", "ability/wave/modifier_ability_test_stats.lua", LUA_MODIFIER_MOTION_NONE )

function ability_test_stats:GetBehavior()
    return DOTA_ABILITY_BEHAVIOR_PASSIVE
end

function ability_test_stats:GetIntrinsicModifierName()
    return "modifier_ability_test_stats"
end

Код:
modifier_ability_test_stats = class({})

function modifier_ability_test_stats:DeclareFunctions()
    local funcs = {
        MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
        MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
        MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
    }

    return funcs
end

function modifier_ability_test_stats:GetAttributes()
    return MODIFIER_ATTRIBUTE_PERMANENT + MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE
end

function modifier_ability_test_stats:OnCreated(event)
    if IsServer() then
    end
end

function

function modifier_ability_test_stats:GetModifierBonusStats_Strength()
    return self:GetStackCount()
end

function modifier_ability_test_stats:GetModifierBonusStats_Agility()
    return self:GetStackCount()
end

function modifier_ability_test_stats:GetModifierBonusStats_Intellect()
    return self:GetStackCount()
end

function modifier_ability_test_stats:OnRemoved(event)
    if IsServer() then
    end
end

function modifier_ability_test_stats:IsHidden()
    return false
end

function modifier_ability_test_stats:IsPurgable()
    return false
end


Код:
function ASDASD:OnEntityKilled(event)
    print("ASDASD: Entity Killed")
    local attacker = EntIndexToHScript(event.entindex_attacker)
    local victim = EntIndexToHScript(event.entindex_killed)
  
    if attacker and attacker:IsRealHero()  then --  проверка на героя и есть ли он вообще
        if attacker:HasAbility("имя_абилки_в_моем_случае_ability_test_stats") then -- проверка на абилку, есть ли она у героя
            local modifier = attacker:FindModifierByName("имя_модификатора_в_моем_случае_modifier_ability_test_stats")
            modifier:SetStackCount(modifier:GetStackCount() + 1)
        end
    end
end

Не проверял но должно работать.
Для работы только по героям нужна еще одна проверка victim:IsRealHero()
 
  • Нравится
Реакции: .F.R.I.D.

.F.R.I.D.

Новичок
13 Сен 2020
8
0
Код:
ability_test_stats = class({})
LinkLuaModifier( "modifier_ability_test_stats", "ability/wave/modifier_ability_test_stats.lua", LUA_MODIFIER_MOTION_NONE )

function ability_test_stats:GetBehavior()
    return DOTA_ABILITY_BEHAVIOR_PASSIVE
end

function ability_test_stats:GetIntrinsicModifierName()
    return "modifier_ability_test_stats"
end

Код:
modifier_ability_test_stats = class({})

function modifier_ability_test_stats:DeclareFunctions()
    local funcs = {
        MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
        MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
        MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
    }

    return funcs
end

function modifier_ability_test_stats:GetAttributes()
    return MODIFIER_ATTRIBUTE_PERMANENT + MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE
end

function modifier_ability_test_stats:OnCreated(event)
    if IsServer() then
    end
end

function

function modifier_ability_test_stats:GetModifierBonusStats_Strength()
    return self:GetStackCount()
end

function modifier_ability_test_stats:GetModifierBonusStats_Agility()
    return self:GetStackCount()
end

function modifier_ability_test_stats:GetModifierBonusStats_Intellect()
    return self:GetStackCount()
end

function modifier_ability_test_stats:OnRemoved(event)
    if IsServer() then
    end
end

function modifier_ability_test_stats:IsHidden()
    return false
end

function modifier_ability_test_stats:IsPurgable()
    return false
end


Код:
function ASDASD:OnEntityKilled(event)
    print("ASDASD: Entity Killed")
    local attacker = EntIndexToHScript(event.entindex_attacker)
    local victim = EntIndexToHScript(event.entindex_killed)

    if attacker and attacker:IsRealHero()  then --  проверка на героя и есть ли он вообще
        if attacker:HasAbility("имя_абилки_в_моем_случае_ability_test_stats") then -- проверка на абилку, есть ли она у героя
            local modifier = attacker:FindModifierByName("имя_модификатора_в_моем_случае_modifier_ability_test_stats")
            modifier:SetStackCount(modifier:GetStackCount() + 1)
        end
    end
end

Не проверял но должно работать.
Для работы только по героям нужна еще одна проверка victim:IsRealHero()
Я уже дошел до того что вы написали, но у меня бпоявилась проблема со строчками типа
function ASDASD:OnEntityKilled(event)
Script Runtime Error: ...dota_addons\testaddon\scripts\vscripts\Templar_2_lua.lua:22: attempt to index global 'ASDASD' (a nil value)
stack traceback:
...dota_addons\testaddon\scripts\vscripts\Templar_2_lua.lua:22: in main chunk
Error running script named Templar_2_lua
То есть я ваш код перевел к своим переменным и та же ошибка, получается что Listener не срабатывает
 

.F.R.I.D.

Новичок
13 Сен 2020
8
0
А может быть такое что ваша функция требует чтобы был возврат return?
 

.F.R.I.D.

Новичок
13 Сен 2020
8
0
Проблему решил, просто неправильно был указан модификатор:D
 
Реклама: