Когда реализовывал свою идею, столкнулся с проблемой типов урона, в моей кастомке их должно быть много и из классической доты - ничего 
Наткнулся на эту статью: https://moddota.com/forums/discussion/573/custom-damage-resistance-library собственно не нашёл гайда тут и переведу этот, может понадобится кому нибудь(без лишней информации):
1. Качаем архив: https://github.com/Numbers11/damagesystem, из архива кинуть всё в папку со своим аддоном, можно не кидать npc_items_custom.txt, если у вас есть свои кастомные предметы, можно просто скопировать и вставить в свой файл (там немного).
2. Подключаем скрипт, добавляем это в addon_game_mode.lua (главный файл, у вас может называться по другому):
3. Добавляем в функцию InitGameMode()(у меня это файл gamemode.lua):
4. Добавляем В функцию "OnNPCSpawned", у меня это файл events.lua (вроде с barebones идёт):
Готово. Примеры:
Если у Вас есть npc_fireguy и вы хотите, чтобы у него было сопротивление к огню, при этом он должен наносить огненный урон с автоатак и был слаб против воды, Вы должны добавить его в npc_custom_damage_units.txt
Если вы хотите, чтобы урон способности, был стихи X и наносил двойной урон, то добавьте его в npc_custom_damag_abilities.txt
И предмет, который даст Вам сопротивление огню +100 на некоторое время:
Чтобы дать урон определенным уроном с помощью Lua:
Проверил, всё работает
Наткнулся на эту статью: https://moddota.com/forums/discussion/573/custom-damage-resistance-library собственно не нашёл гайда тут и переведу этот, может понадобится кому нибудь(без лишней информации):
1. Качаем архив: https://github.com/Numbers11/damagesystem, из архива кинуть всё в папку со своим аддоном, можно не кидать npc_items_custom.txt, если у вас есть свои кастомные предметы, можно просто скопировать и вставить в свой файл (там немного).
2. Подключаем скрипт, добавляем это в addon_game_mode.lua (главный файл, у вас может называться по другому):
Код:
require('damage_system')
Код:
GameRules:GetGameModeEntity():SetDamageFilter(Dynamic_Wrap( DamageSystem, "DamageFilter" ), self)
Код:
local npc = EntIndexToHScript(keys.entindex)
DamageSystem:CreateResistances(npc)
Готово. Примеры:
Если у Вас есть npc_fireguy и вы хотите, чтобы у него было сопротивление к огню, при этом он должен наносить огненный урон с автоатак и был слаб против воды, Вы должны добавить его в npc_custom_damage_units.txt
Код:
"npc_fireguy"
{
"resistances"
{
"fire" "100"
"water" "-50"
"earth" "0"
"air" "0"
}
//auto attack damage type
"damagetype" "fire"
"amplifier" "1"
}
Если вы хотите, чтобы урон способности, был стихи X и наносил двойной урон, то добавьте его в npc_custom_damag_abilities.txt
Код:
"abaddon_death_coil"
{
"damagetype" "X"
"amplifier" "2"
}
И предмет, который даст Вам сопротивление огню +100 на некоторое время:
Код:
"item_fire_shield"
{
//"ID" "1836"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE"
"BaseClass" "item_datadriven"
"AbilityTextureName" "item_example_item"
//"AbilityCastPoint" "0.2"
"AbilityCooldown" "13.0"
"AbilityManaCost" "100"
"ItemCost" "750"
"ItemInitialCharges" "0"
"ItemDroppable" "1"
"ItemSellable" "1"
"ItemRequiresCharges" "0"
"ItemShareability" "ITEM_NOT_SHAREABLE"
"ItemDeclarations" "DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS"
"MaxUpgradeLevel" "1"
"ItemBaseLevel" "1"
"precache"
{
"particle" "particles/frostivus_herofx/queen_shadow_strike_linear_parent.vpcf"
"particle_folder" "particles/units/heroes/ember_spirit"
"soundfile" "soundevents/game_sounds_heroes/game_sounds_abaddon.vsndevts"
}
"OnSpellStart"
{
"ApplyModifier"
{
"Target" "CASTER"
"ModifierName" "modifier_item_fire_shield"
}
}
"Modifiers"
{
"modifier_item_fire_shield"
{
"EffectName" "particles/test_particle/damage_immunity.vpcf"
"EffectAttachType" "follow_origin"
"Target" "CASTER"
"Duration" "%duration"
"TextureName" "abaddon_aphotic_shield"
"OnCreated"
{
"RunScript"
{
"ScriptFile" "damage_system.lua"
"Function" "AddResistance"
"value" "%resistance_value"
"resistance" "fire"
}
}
"OnDestroy"
{
"RunScript"
{
"ScriptFile" "damage_system.lua"
"Function" "AddResistance"
"value" "%resistance_value * -1"
"resistance" "fire"
}
}
}
}
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_FLOAT"
"duration" "4.0"
}
"02"
{
"var_type" "FIELD_INTEGER"
"resistance_value" "100"
}
}
}
Чтобы дать урон определенным уроном с помощью Lua:
Код:
ApplyCustomDamage(target, caster, 100, DAMAGE_TYPE_PURE, "fire")
Проверил, всё работает
Последнее редактирование модератором: