Ru/Dota 2 Workshop Tools/Scripting/Creating a Tower Example
January 2024
Создание простой кастомной башни
Подготовка файла
Находим в папке с вашим аддоном в директории \dota 2 beta\game\dota_addons\your_addon_name\scripts\npc файл npc_units_custom.txt (если нет таких папок или файла то создаете сами).
Создаем башню и её свойства
Скопируйте пример указанный ниже в файл npc_units_custom.txt .
// Кастомные юниты
"DOTAUnits"
{
"Version" "1"
"npc_dota_custom_tower" // имя нашего юнита
{
// General
//
"BaseClass" "npc_dota_tower" // Класс юнита
"Model" "models/props_structures/tower_good.mdl"// Модель
"SoundSet" "Tower.Water" // Название набора эффектов
"MinimapIcon" "" // Иконка на мини-карте (по желанию)
"MinimapIconSize" "0"
"Level" "1"
// Abilities
//----------------------------------------------------------------
"Ability1" "" // 1 способность
"Ability2" "" // 2 способность
"Ability3" "" // 3 способность
"Ability4" "" // 4 способность
"Ability5" "" // 5 способность
"Ability6" "" // 6 способность (Экстра)
"Ability7" "" // 7 способность (Экстра)
"Ability8" "" // 8 способность (Экстра)
// Защита
//----------------------------------------------------------------
"ArmorPhysical" "322" // физическая защита
"MagicalResistance" "0" // Магическая защита
// Атака
//----------------------------------------------------------------
"AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK"
"AttackDamageMin" "200" // Минимальный урон
"AttackDamageMax" "250" // Максимальный урон
"AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" // Тип наносимого урона урона(в данном случае физический)
"AttackRate" "0.25" // Скорость атаки
"AttackAnimationPoint" "0.0" // Нормальное время анимации между атаками
"AttackAcquisitionRange" "800" //
"AttackRange" "800" // Дальность атаки
"ProjectileModel" "particles/base_attacks/ranged_tower_good.vpcf" // Используемый эффект снаряда(атаки)
"ProjectileSpeed" "1250" // скорость снаряда
// Характеристики(атрибуты, статы как вам угодно)
//----------------------------------------------------------------
"AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" //Основная характеристика
"AttributeBaseStrength" "0" // Базовое значение силы
"AttributeStrengthGain" "0" // Бонус силы за каждый лвл
"AttributeBaseIntelligence" "0" // Базовое значение интеллекта
"AttributeIntelligenceGain" "0" // Бонус интеллекта за каждый лвл
"AttributeBaseAgility" "0" // Базовое значение ловкости
"AttributeAgilityGain" "0" // Бонус ловкости за каждый лвл
// Руна богатсво(в нашем случае бесполезно)
//----------------------------------------------------------------
"BountyXP" "0" // опыт за руну
"BountyGoldMin" "0" // минимальное зололо за руну
"BountyGoldMax" "0" // максимальное золото за руну
// Bounds
//----------------------------------------------------------------
"BoundsHullName" "DOTA_HULL_SIZE_TOWER" // Hull type used for navigation/locomotion.
"ProjectileCollisionSize" "50"
"RingRadius" "130"
"HealthBarOffset" "260"
// Передвижение
//----------------------------------------------------------------
"MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Тип юнита (наземный или воздушный)
"MovementSpeed" "0" // скорость передвижения
"MovementTurnRate" "1.0" // Turning rate.
// Status
//----------------------------------------------------------------
"StatusHealth" "1337" // Базовое здоровье
"StatusHealthRegen" "0" // Регенерация в сек.
"StatusMana" "0" // Базовая мана
"StatusManaRegen" "0" // Регенерация в сек.
// Команда
//----------------------------------------------------------------
"TeamName" "DOTA_TEAM_GOODGUYS" // Имя команды
"CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE"
"CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE"
"UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING"
// Дальность обзора
//----------------------------------------------------------------
"VisionDaytimeRange" "1000" // В дневное время
"VisionNighttimeRange" "1000" // В ночное время
}
}
Сохраняем файл
Пример синтаксиса
"DOTAUnits"
{
"Version" "1"
"юнит 1"
{
параметры
}
"юнит 2"
{
параметры
}
}
Главное добавить юнита между первыми и последними скобками
Ниже сам пример для добавления в готовый файл
"npc_dota_custom_tower" // имя нашего юнита
{
// General
//
"BaseClass" "npc_dota_tower" // Класс юнита
"Model" "models/props_structures/tower_good.mdl"// Модель
"SoundSet" "Tower.Water" // Название набора эффектов
"MinimapIcon" "" // Иконка на мини-карте (по желанию)
"MinimapIconSize" "0"
"Level" "1"
// Abilities
//----------------------------------------------------------------
"Ability1" "" // 1 способность
"Ability2" "" // 2 способность
"Ability3" "" // 3 способность
"Ability4" "" // 4 способность
"Ability5" "" // 5 способность
"Ability6" "" // 6 способность (Экстра)
"Ability7" "" // 7 способность (Экстра)
"Ability8" "" // 8 способность (Экстра)
// Защита
//----------------------------------------------------------------
"ArmorPhysical" "322" // физическая защита
"MagicalResistance" "0" // Магическая защита
// Атака
//----------------------------------------------------------------
"AttackCapabilities" "DOTA_UNIT_CAP_RANGED_ATTACK"
"AttackDamageMin" "200" // Минимальный урон
"AttackDamageMax" "250" // Максимальный урон
"AttackDamageType" "DAMAGE_TYPE_ArmorPhysical" // Тип наносимого урона урона(в данном случае физический)
"AttackRate" "0.25" // Скорость атаки
"AttackAnimationPoint" "0.0" // Нормальное время анимации между атаками
"AttackAcquisitionRange" "800" //
"AttackRange" "800" // Дальность атаки
"ProjectileModel" "particles/base_attacks/ranged_tower_good.vpcf" // Используемый эффект снаряда(атаки)
"ProjectileSpeed" "1250" // скорость снаряда
// Характеристики(атрибуты, статы как вам угодно)
//----------------------------------------------------------------
"AttributePrimary" "DOTA_ATTRIBUTE_STRENGTH" //Основная характеристика
"AttributeBaseStrength" "0" // Базовое значение силы
"AttributeStrengthGain" "0" // Бонус силы за каждый лвл
"AttributeBaseIntelligence" "0" // Базовое значение интеллекта
"AttributeIntelligenceGain" "0" // Бонус интеллекта за каждый лвл
"AttributeBaseAgility" "0" // Базовое значение ловкости
"AttributeAgilityGain" "0" // Бонус ловкости за каждый лвл
// Точно не знаю как работает параметр, но возможно =>
//----------------------------------------------------------------
"BountyXP" "0" // "опыт за убийство юнита"
"BountyGoldMin" "0" // минимальное золото
"BountyGoldMax" "0" // максимальное золото
// Bounds
//----------------------------------------------------------------
"BoundsHullName" "DOTA_HULL_SIZE_TOWER" // Hull type used for navigation/locomotion.
"ProjectileCollisionSize" "50"
"RingRadius" "130"
"HealthBarOffset" "260"
// Передвижение
//----------------------------------------------------------------
"MovementCapabilities" "DOTA_UNIT_CAP_MOVE_NONE" // Тип юнита (наземный или воздушный)
"MovementSpeed" "0" // скорость передвижения
"MovementTurnRate" "1.0" // Turning rate.
// Status
//----------------------------------------------------------------
"StatusHealth" "1337" // Базовое здоровье
"StatusHealthRegen" "0" // Регенерация в сек.
"StatusMana" "0" // Базовая мана
"StatusManaRegen" "0" // Регенерация в сек.
// Команда
//----------------------------------------------------------------
"TeamName" "DOTA_TEAM_GOODGUYS" // Имя команды
"CombatClassAttack" "DOTA_COMBAT_CLASS_ATTACK_SIEGE"
"CombatClassDefend" "DOTA_COMBAT_CLASS_DEFEND_STRUCTURE"
"UnitRelationshipClass" "DOTA_NPC_UNIT_RELATIONSHIP_TYPE_BUILDING"
// Дальность обзора
//----------------------------------------------------------------
"VisionDaytimeRange" "1000" // В дневное время
"VisionNighttimeRange" "1000" // В ночное время
}
Добавление башни на карту
Теперь открываем Workshop tools заходим в редактор и открываем вашу карту
Создаем на пустом месте сущность(Entity) горячие клавиши (Shift+E) и задаем класс npc_dota_tower. Откройте свойства объекта горячие клавиши (Alt + Enter) в поле "Unit name" пропишите имя нашего юнита npc_dota_custom_tower. Далее находим параметр "Team number" и устанавливаем Badguys
Проверяем башню в игре
Компилируем карту и запускаем ей. Заходим за команду "Свет" и проверяем правильно ли показывает модель башни, частицу(спрей атаки башни). Если все работает правильно заходим в наш файл npc_units_custom.txt и меняем характеристики как вам душе угодно.
Примечания
- Таким же образом копировав код вы можете добавлять больше башен(присваивайте разные имена)
- Вы можете присвоить имя башни на русском языке(отображение в игре) добавив эти строчки в файл в директории вашего аддона \resource\addon_russian.txt
"lang"
{
"Language" "Russian"
"Tokens"
{
"npc_dota_custom_tower" "Башня"
}
}
January 2024