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

From Valve Developer Community
Jump to navigation Jump to search
Dead End - Icon.png
This article has no Wikipedia icon links to other VDC articles. Please help improve this article by adding links Wikipedia icon that are relevant to the context within the existing text.
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"		// В ночное время
		}
}

Сохраняем файл

Note.pngПримечание:Если у вас был такой файл нужно его на время переместить в другое место оставить только этот для тестирования или же в конце файла добавить только текст указанный ниже. Т.к. вы можете нарушить синтаксис строения кода, если новичок в этом деле

Пример синтаксиса

"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 заходим в редактор и открываем вашу карту

Note.pngПримечание:Выбираем тот аддон, в котором вы добавили юнита

Создаем на пустом месте сущность(Entity) горячие клавиши (Shift+E) и задаем класс npc_dota_tower. Откройте свойства объекта горячие клавиши (Alt + Enter) в поле "Unit name" пропишите имя нашего юнита npc_dota_custom_tower. Далее находим параметр "Team number" и устанавливаем Badguys

Note.pngПримечание:Не волнуйтесь что модель не показывается в редакторе, после компиляции в игре все появится

Проверяем башню в игре

Компилируем карту и запускаем ей. Заходим за команду "Свет" и проверяем правильно ли показывает модель башни, частицу(спрей атаки башни). Если все работает правильно заходим в наш файл npc_units_custom.txt и меняем характеристики как вам душе угодно.

Примечания

  • Таким же образом копировав код вы можете добавлять больше башен(присваивайте разные имена)
  • Вы можете присвоить имя башни на русском языке(отображение в игре) добавив эти строчки в файл в директории вашего аддона \resource\addon_russian.txt
Note.pngПримечание:Если нет? Создайте
      "lang"
    {
    	    "Language"		"Russian"
	    "Tokens"
	    {		
		    "npc_dota_custom_tower"							"Башня"
	    }
    }
Wikipedia - Letter.png
This article has not been added to any content Wikipedia icon categories. Please help out by Wikipedia icon adding categories.
January 2024