Ru/Dota 2 Workshop Tools/Scripting/Creating a Tower Example

== Создание простой кастомной башни ==
=== Подготовка файла ===
Находим в папке с вашим аддоном в директории <FONT COLOR=red>\dota 2 beta\game\dota_addons\your_addon_name\scripts\npc</FONT> файл <FONT COLOR=blue>npc_units_custom.txt</FONT> (если нет таких папок или файла то создаете сами).
== Создаем башню и её свойства ==
Скопируйте пример указанный ниже в файл <FONT COLOR=blue>npc_units_custom.txt .</FONT>
// Кастомные юниты
"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) горячие клавиши () и задаем класс npc_dota_tower.
Откройте свойства объекта горячие клавиши () в поле "Unit name" пропишите имя нашего юнита <FONT COLOR=yellow>npc_dota_custom_tower</FONT>.
Далее находим параметр <FONT COLOR=yellow>"Team number"</FONT> и устанавливаем <FONT COLOR=yellow>Badguys</FONT>
== Проверяем башню в игре ==
Компилируем карту и запускаем ей. Заходим за команду "Свет" и проверяем правильно ли показывает модель башни, частицу(спрей атаки башни).
Если все работает правильно заходим в наш файл <FONT COLOR=blue>npc_units_custom.txt</FONT> и меняем характеристики как вам душе угодно.
== Примечания ==
* Таким же образом копировав код вы можете добавлять больше башен(присваивайте разные имена)
* Вы можете присвоить имя башни на русском языке(отображение в игре) добавив эти строчки в файл в директории вашего аддона <FONT COLOR=red>\resource\addon_russian.txt</FONT>
 "lang"
 {
 	 "Language"		"Russian"
	 "Tokens"
	 {		
		 "npc_dota_custom_tower"							"Башня"
	 }
 }