помогите пожалуйста понять...

Greyd1s

Пользователь
19 Авг 2019
22
1
Вот абилка:
"dmg_ability"
{
"BaseClass" "ability_datadriven"
"AbilityTextureName" ""
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO"
"AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"
"AbilityCastPoint" "0.0"
"AbilityCastRange" "900"
"AbilityCooldown" "5"
"AbilityManaCost" "10"

"AbilityDamage" "100 175 275 350"

"OnSpellStart"
{
"RunScript"
{
"ScriptFile" "empower.lua"
"Function" "change_mod"
}
}

}
Вот скрипт:
function change_mod(keys)
local caster = keys.caster
local target = keys.target
local ability = keys.ability

ApplyDamage({victim = target, attacker = caster, damage = ability:GetAbilityDamage(), damage_type = ability:GetAbilityDamageType()})

end

А теперь основной вопрос, почему на гитхабе Pizzlol такая запись прокатывает?.. (я не знаю прокатывает ли, но раз выложил, то должно же работать)
Я не силён в lua, только начал его осваивать, но знаком с подобными языками, и если я всё правильно понимаю, то я должен что-то вернуть в скрипт DD, но они же не возвращают...
Помогите разобраться в чём ошибка, я уверен, что косячу я, т.к. луа скрипты с другими модификаторами, типа Exp, Gold и т.п. работают, а вот с уроном чёт вооще не пойму...
Заранее спасибо... даже за ответы в грубой форме
 

Дикий Пёс

Друзья CG
28 Июн 2017
411
96
Проект
Petri Reborn
во первых spelllibrary последний раз обновлялась 5 лет назад
во вторых этот код должен работать и ничего возвращать ненадо
 
  • Нравится
Реакции: Greyd1s

Greyd1s

Пользователь
19 Авг 2019
22
1
во первых spelllibrary последний раз обновлялась 5 лет назад
во вторых этот код должен работать и ничего возвращать ненадо

В том-то и дело, что не работает... :) Не наносится урон... Я вот думаю, может нужно какой-то финкер прописать, что бы он акшн отлавливал, а потом применял функцию...
Не могу разобраться...
если пишу:
function(keys)
keys.caster:AddExperience(100, false, false)
end
то работает всё, ничего больше не нужно, как-только перехожу в функцию с уроном, сразу косяк...
Сложна, ничего не понятно)
И вот что делать. не понимаю)
 

DDSuper

Друзья CG
31 Май 2019
405
57
да нет не надо
всего лишь надо

Код:
function test( keys )
    local caster = keys.caster
    local target = keys.target
    locla ability = keys.ability
  
    -- первый вариант
    local damage_table = {
        victim = target,
        attacker = caster,
        ability = ability,
        damage = ability:GetAbilityDamage(),
        damage_type = ability:GetAbilityDamageType()
    } 
  
    ApplyDamage(damage_table)
    -- второй вариант

    ApplyDamage( { victim = target, attacker = caster, ability = ability, damage = ability:GetAbilityDamage(), damage_type = ability:GetAbilityDamageType() } ) -- кстати в коде была ошибка типа какая абилка, но здесь нет ability = keys.ability или другая абилка и оно пишет в консоль ошибку, что не получилось нанести урон. Потому что оно не знает, какая абилка будет наносить урон.
end


и да просто найди более новые скиллы с уроном. И все сражу же решится
 
Последнее редактирование:
  • Нравится
Реакции: Greyd1s

Greyd1s

Пользователь
19 Авг 2019
22
1
да нет не надо
всего лишь надо

Код:
function test( keys )
    local caster = keys.caster
    local target = keys.target
    locla ability = keys.ability
 
    -- первый вариант
    local damage_table = {
        victim = target,
        attacker = caster,
        ability = ability,
        damage = ability:GetAbilityDamage(),
        damage_type = ability:GetAbilityDamageType()
    }
 
    ApplyDamage(damage_table)
    -- второй вариант

    ApplyDamage( { victim = target, attacker = caster, ability = ability, damage = ability:GetAbilityDamage(), damage_type = ability:GetAbilityDamageType() } ) -- кстати в коде была ошибка типа какая абилка, но здесь нет ability = keys.ability или другая абилка и оно пишет в консоль ошибку, что не получилось нанести урон. Потому что оно не знает, какая абилка будет наносить урон.
end


и да просто найди более новые скиллы с уроном. И все сражу же решится

Чёт я не понял (извиняюсь)... а где у меня была ошибка?)) ткните пожалуйста носом, посмотрел, вроде всё сходится...
И ещё не понял, про скилы, DD я сам писал, и если подкидывать туда стандартные DD-модификаторы, то урон проходит, а если пытаешься регистрировать урон через lua то анимация каста проходит, а урон не наносится...
 

Greyd1s

Пользователь
19 Авг 2019
22
1
да нет не надо
всего лишь надо

Код:
function test( keys )
    local caster = keys.caster
    local target = keys.target
    locla ability = keys.ability
 
    -- первый вариант
    local damage_table = {
        victim = target,
        attacker = caster,
        ability = ability,
        damage = ability:GetAbilityDamage(),
        damage_type = ability:GetAbilityDamageType()
    }
 
    ApplyDamage(damage_table)
    -- второй вариант

    ApplyDamage( { victim = target, attacker = caster, ability = ability, damage = ability:GetAbilityDamage(), damage_type = ability:GetAbilityDamageType() } ) -- кстати в коде была ошибка типа какая абилка, но здесь нет ability = keys.ability или другая абилка и оно пишет в консоль ошибку, что не получилось нанести урон. Потому что оно не знает, какая абилка будет наносить урон.
end


и да просто найди более новые скиллы с уроном. И все сражу же решится

И да, добавил аргумент (который вы указали), который якобы ссылается на объект способности, ситуация не поменялась... Урон всё так же не проходит, следовательно скрипт не срабатывает, от слова совсем...
Просто уже отчаяние информации нигде нет, просто меняю код, пытаясь попасть в правильное решение, хотя по сути, у всех срабатывает, а у меня нет...
Ничего не понимаю...
 

DDSuper

Друзья CG
31 Май 2019
405
57
Ты хоть в консоль смотришь? Именно там можно понять.
А если нечего не пишет, значит ты не указал правильный путь, но пишет если не правильный путь Script not found (неверный путь к скрипту)
 

Greyd1s

Пользователь
19 Авг 2019
22
1
Ты хоть в консоль смотришь? Именно там можно понять.
А если нечего не пишет, значит ты не указал правильный путь, но пишет если не правильный путь Script not found (неверный путь к скрипту)

Дело в том, что сам файл lua лежит там же где и txt-шник DD, в таком случае не нужно указывать путь, а просто ссылаться напрямую к файлу...
В консоли ничего неадекватного не нашёл, что бы указывало на ошибку...
Если будет не сложно, попробуйте запустить у себя этот скрипт, если работает, то я хз чё делать. первый раз такое вижу вообще, что бы у кого-то работает, а у кого-то нет...

И ещё одна просьба, если есть, 100% рабочая абилка DD+lua, то скиньте пожалуйста, заранее спасибо...
 

DDSuper

Друзья CG
31 Май 2019
405
57
Дело в том, что сам файл lua лежит там же где и txt-шник DD, в таком случае не нужно указывать путь, а просто ссылаться напрямую к файлу...
В консоли ничего неадекватного не нашёл, что бы указывало на ошибку...
Если будет не сложно, попробуй запустить у себя этот скрипт, если работает, то я хз чё делать. первый раз такое вижу вообще, что бы у кого-то работает, а у кого-то нет...
ты создавал в vscripts, а если нет как ты говоришь это никак не сработает.

НАДО ЧТОБЫ СКРИПТ НАХОДИЛСЯ В vscripts.

И оно выделяется розовым, если есть проблемы
 
  • Нравится
Реакции: Greyd1s

Greyd1s

Пользователь
19 Авг 2019
22
1
ты создавал в vscripts, а если нет как ты говоришь это никак не сработает.

НАДО ЧТОБЫ СКРИПТ НАХОДИЛСЯ В vscripts.

И оно выделяется розовым, если есть проблемы

Тут ты не прав, можно файл куда угодно закидывать указывая путь и оно будет работать, что бы ограничить ошибки с расположением всегда для теста закидываю файл lua в папку scripts/npc, где собственно и лежат файлы абилок, айтемов, героев и мобов и пока всё работало нормально...
Не в этом суть, а в том, что если запихиваешь способность не в героя, а в предмет, то всё начинает работать отлично...
Ты очень помог, не подкидывай ты мне вариантов, я бы уже давно забил и пошёл бы чилить...
Но всё же, остаётся много вопросов... почему в предмете и в способности один и тот же скрипт то работает, то не работает?..
Может я не правильно пишу DD абилку?.. Но, вроде правильно, она срабатывает, на родные модификаторы, типа: Damage, Stun и тп. ... а скрипт адекватно вызывать не хочет...
На самом деле, хочется всё бросить и не заниматься этим, хотя интерес всё же есть, информации вообще нет (адекватной, а не набора функций с аргументами)...
Да и на форуме никого не осталось, что бы хотя бы объяснили, почему так происходит, я же не прошу мне код написать. просто хочу разобраться, может какие-то способности сделать, может и мапку какую закодить (хотя в хамере у меня вообще опыта нет, так, только кисточками мазать и триггеры писать)
В любом случае, спасибо большое, пусть проблему я пока и не решил, но ты очень помог... (хотя если есть информация, почему lua скрипты по разному работают при одинаковом коде абилок/предметов, то поделись пожалуйста... просто я где-то читал. что-то про datadriven/override, что они как-то по разному работают... но я не помню про что там, а статью эту я не нашёл на форуме )
 
  • Злость
Реакции: SniperX

DDSuper

Друзья CG
31 Май 2019
405
57
попробуй заменить строку damage = ability:GetAbilityDamage() на damage = 100
Делай как просят у меня работает отлично, запихни скрипт в vscripts. Если тебе не хочется можешь вообще забить.

Мне лично написало что скрипт не найден в vscripts/empower.lua.
Screenshot_15.png
смотри внимательнее в консоль.
П.С открывай консоль после использование абилки

скрипт не может работать на прямую, или будешь отрицать?
Даже гайд есть по скриптингу https://customgames.ru/tutorials/skripting-dota-2-rukovodstvo-dlya-nachinayushhih/
что показывает твою ошибку, что ты не правильно сделал.

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

То что ты говоришь полнейший бред.

Ссылаясь напрямую означает, что оно автоматически прописывает путь к scripts/vscripts.
 
Последнее редактирование:
  • Нравится
Реакции: Greyd1s и SniperX

Greyd1s

Пользователь
19 Авг 2019
22
1
попробуй заменить строку damage = ability:GetAbilityDamage() на damage = 100
Делай как просят у меня работает отлично, запихни скрипт в vscripts. Если тебе не хочется можешь вообще забить.

Мне лично написало что скрипт не найден в vscripts/empower.lua.
Посмотреть вложение 1036
смотри внимательнее в консоль.
П.С открывай консоль после использование абилки

скрипт не может работать на прямую, или будешь отрицать?
Даже гайд есть по скриптингу https://customgames.ru/tutorials/skripting-dota-2-rukovodstvo-dlya-nachinayushhih/
что показывает твою ошибку, что ты не правильно сделал.

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

То что ты говоришь полнейший бред.
Всё, я разобрался...
Ошибка была в DD... добавил "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" и всё заработало
Код:
"dmg_ability_datadriven"
        {
        "ID"                        "11001"
        "BaseClass"                 "ability_datadriven"
        "MaxLevel"                    "4"
        "AbilityBehavior"            "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
        "AbilityUnitTargetTeam"        "DOTA_UNIT_TARGET_TEAM_ENEMY"
        "AbilityUnitTargetType"        "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
        "AbilityType"                "DOTA_ABILITY_TYPE_BASIC"
        "AbilityUnitDamageType"        "DAMAGE_TYPE_MAGICAL"
        "SpellImmunityType"            "SPELL_IMMUNITY_ENEMIES_NO"
        "AbilityTextureName"         "abaddon_aphotic_shield"
        "AbilityCastPoint"          "0.0"
        "AbilityCooldown"             "5"
        "AbilityManaCost"             "10"
        "AbilityDamage"                "50 140 230 320"
      
            "OnSpellStart"
                {
                    "RunScript"
                            {
                            "ScriptFile"            "empower.lua"
                            "Function"                "test"
                            }     
                }

        }
Код:
function test( keys )
    local target = keys.target
    local caster = keys.caster
    local ability = keys.ability
  
     ApplyDamage( { victim = target, attacker = caster, ability = ability, damage = ability:GetAbilityDamage(), damage_type = ability:GetAbilityDamageType() } )
end
И да, файл lua лежит в папке npc, на работоспособность это никак не влияет... Не знаю почему, но так вот работает...

Огромное спасибо всем, кто помог разобраться...
 

DDSuper

Друзья CG
31 Май 2019
405
57
Всё, я разобрался...
Ошибка была в DD... добавил "SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO" и всё заработало
Код:
"dmg_ability_datadriven"
        {
        "ID"                        "11001"
        "BaseClass"                 "ability_datadriven"
        "MaxLevel"                    "4"
        "AbilityBehavior"            "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
        "AbilityUnitTargetTeam"        "DOTA_UNIT_TARGET_TEAM_ENEMY"
        "AbilityUnitTargetType"        "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
        "AbilityType"                "DOTA_ABILITY_TYPE_BASIC"
        "AbilityUnitDamageType"        "DAMAGE_TYPE_MAGICAL"
        "SpellImmunityType"            "SPELL_IMMUNITY_ENEMIES_NO"
        "AbilityTextureName"         "abaddon_aphotic_shield"
        "AbilityCastPoint"          "0.0"
        "AbilityCooldown"             "5"
        "AbilityManaCost"             "10"
        "AbilityDamage"                "50 140 230 320"
     
            "OnSpellStart"
                {
                    "RunScript"
                            {
                            "ScriptFile"            "empower.lua"
                            "Function"                "test"
                            }    
                }

        }
Код:
function test( keys )
    local target = keys.target
    local caster = keys.caster
    local ability = keys.ability
 
     ApplyDamage( { victim = target, attacker = caster, ability = ability, damage = ability:GetAbilityDamage(), damage_type = ability:GetAbilityDamageType() } )
end
И да, файл lua лежит в папке npc, на работоспособность это никак не влияет... Не знаю почему, но так вот работает...

Огромное спасибо всем, кто помог разобраться...
У меня работает даже и без этого
 

Greyd1s

Пользователь
19 Авг 2019
22
1
У меня работает даже и без этого
Я понял, то что до этого я ничего не понял))
Всё же, ты прав, файл lua должен быть обязательно в папке vscripts... хоть я и ссылаюсь на него напрямую, без указания пути scripts/vsripts/empower.lua, но тянет он его именно оттуда...
Так что я тупой, извини...
 
Реклама: