nyuuzyou/wikis huggingface dataset:
Ru/Dota 2 Workshop Tools/Scripting/Heroes internal names

Список имен героев для обращения к ним:
 npc_dota_hero_abaddon
 npc_dota_hero_alchemist
 npc_dota_hero_ancient_apparition
 npc_dota_hero_antimage
 npc_dota_hero_axe
 npc_dota_hero_bane
 npc_dota_hero_batrider
 npc_dota_hero_beastmaster
 npc_dota_hero_bloodseeker
 npc_dota_hero_bounty_hunter
 npc_dota_hero_brewmaster
 npc_dota_hero_bristleback
 npc_dota_hero_broodmother
 npc_dota_hero_centaur
 npc_dota_hero_chaos_knight
 npc_dota_hero_chen
 npc_dota_hero_clinkz
 npc_dota_hero_crystal_maiden
 npc_dota_hero_dark_seer
 npc_dota_hero_dazzle
 npc_dota_hero_death_prophet
 npc_dota_hero_disruptor
 npc_dota_hero_doom_bringer
 npc_dota_hero_dragon_knight
 npc_dota_hero_drow_ranger
 npc_dota_hero_earth_spirit
 npc_dota_hero_earthshaker
 npc_dota_hero_elder_titan
 npc_dota_hero_ember_spirit
 npc_dota_hero_enchantress
 npc_dota_hero_enigma
 npc_dota_hero_faceless_void
 npc_dota_hero_furion
 npc_dota_hero_gyrocopter
 npc_dota_hero_huskar
 npc_dota_hero_invoker
 npc_dota_hero_jakiro
 npc_dota_hero_juggernaut
 npc_dota_hero_keeper_of_the_light
 npc_dota_hero_kunkka
 npc_dota_hero_legion_commander
 npc_dota_hero_leshrac
 npc_dota_hero_lich
 npc_dota_hero_life_stealer
 npc_dota_hero_lina
 npc_dota_hero_lion
 npc_dota_hero_lone_druid
 npc_dota_hero_luna
 npc_dota_hero_lycan
 npc_dota_hero_magnataur
 npc_dota_hero_medusa
 npc_dota_hero_meepo
 npc_dota_hero_mirana
 npc_dota_hero_morphling
 npc_dota_hero_naga_siren
 npc_dota_hero_necrolyte
 npc_dota_hero_nevermore
 npc_dota_hero_night_stalker
 npc_dota_hero_nyx_assassin
 npc_dota_hero_obsidian_destroyer
 npc_dota_hero_ogre_magi
 npc_dota_hero_omniknight
 npc_dota_hero_phantom_assassin
 npc_dota_hero_phantom_lancer
 npc_dota_hero_phoenix
 npc_dota_hero_puck
 npc_dota_hero_pudge
 npc_dota_hero_pugna
 npc_dota_hero_queenofpain
 npc_dota_hero_rattletrap
 npc_dota_hero_razor
 npc_dota_hero_riki
 npc_dota_hero_rubick
 npc_dota_hero_sand_king
 npc_dota_hero_shadow_demon
 npc_dota_hero_shadow_shaman
 npc_dota_hero_shredder
 npc_dota_hero_silencer
 npc_dota_hero_skeleton_king
 npc_dota_hero_skywrath_mage
 npc_dota_hero_slardar
 npc_dota_hero_slark
 npc_dota_hero_sniper
 npc_dota_hero_spectre
 npc_dota_hero_spirit_breaker
 npc_dota_hero_storm_spirit
 npc_dota_hero_sven
 npc_dota_hero_templar_assassin
 npc_dota_hero_terrorblade
 npc_dota_hero_tidehunter
 npc_dota_hero_tinker
 npc_dota_hero_tiny
 npc_dota_hero_treant
 npc_dota_hero_troll_warlord
 npc_dota_hero_tusk
 npc_dota_hero_undying
 npc_dota_hero_ursa
 npc_dota_hero_vengefulspirit
 npc_dota_hero_venomancer
 npc_dota_hero_viper
 npc_dota_hero_visage
 npc_dota_hero_warlock
 npc_dota_hero_weaver
 npc_dota_hero_windrunner
 npc_dota_hero_wisp
 npc_dota_hero_witch_doctor
 npc_dota_hero_zuus
Category: Dota 2 Workshop Tools
Ru/Dota 2 Workshop Tools/Scripting/Simple Trigger that calls Lua

* Шаг 1: Создайте box(коробку) с помощью инструмента block tool (+). Наложите на созданный объект материал "toolstrigger.vmat" для того, чтобы он стал триггером в игре. Таким образом он не будет взаимодействовать с другими объектами в игре, т.е. модель не будет иметь collision и блокировать других юнитов в игре.
* Шаг 2: Выберете box(коробку), нажмите в меню "Tools > Tie To Entity" (+). Таким образом вы привяжете ваш box(коробку) к сущности или объекту, поведение которого уже можно настроить.
* Шаг 3: Выберете созданный триггер и измените его класс на "trigger_hero". Этот триггер запустится когда герой войдет в регион триггера, который мы создали.
* Шаг 4: Задайте имя триггера в поле Name, допустим это будет trigger_example.
* Шаг 5: Задайте путь к файлу скрипта Lua в поле Entity Scripts. Обычно файл находится в папке .../dota_ugc/game/dota_addons/myaddon/scripts/vscripts. Путь к файлу в данном случае будет просто название скрипта example.lua.
Пример кода на Lua:
function OnStartTouch(trigger)
	print(trigger.activator)
	print(trigger.caller)
	
end
function OnEndTouch(trigger)
	print(trigger.activator)
	print(trigger.caller)
	
end
* Шаг 6: Два раза щелкните на триггере или нажмите +, чтобы открыть свойства нашего объекта. Выберете вкладку Outputs.
* Шаг 7: Добавьте событие output с именем "OnStartTouch". В поле "Target entities named" выберете, созданный нами триггер trigger_example. В поле "Via this input" выберет событие "CallScriptFunction". В поле "With a parameter override of" введите имя функции, которое будет вызываться, когда запустится наш триггер.
* Шаг 8: Создайте еще одно событие с такими же параметрами как и в шаге 7. В поле "With a parameter override of" введите имя функции "OnEndTouch". После выполненных действий во вкладке Outputs вы должны получить следующее:
::
	My Output 	Target Entity 	Target Input 	Parameter 	Delay	Only Once
	OnStartTouch	trigger_example	CallScriptFunction	OnStartTouch	0.00 	No
	OnEndTouch 	trigger_example	CallScriptFunction	OnStartTouch	0.00 	No
Готово, теперь запустите игру с помощью и попробуйте зайти в ваш триггер героем. Откройте консоль VConsole и убедитесь, что выводятся сообщения.
Ru/Dota 2 Workshop Tools/Scripting/Простой триггер, вызывающий скрипт Lua

* Шаг 1: Создайте box(коробку) с помощью инструмента block tool (Shift+B). Наложите на созданный объект материал "toolstrigger.vmat" для того, чтобы он стал триггером в игре. Таким образом он не будет взаимодействовать с другими объектами.
* Шаг 2: Выберете box(коробку), нажмите в меню "Tools > Tie To Entity" (Ctrl+T). Таким образом вы привяжете ваш box(коробку) к сущности или объекту, поведение которого уже можно настроить.
* Шаг 3: Выберете созданный триггер и измените его класс на "trigger_hero". Этот триггер запустится когда герой войдет в регион триггера, который мы создали.
* Шаг 4: Задайте имя триггера в поле Name, допустим это будет trigger_example.
* Шаг 5: Задайте путь к файлу скрипта Lua в поле Entity Scripts. Обычно файл находится в папке .../dota_ugc/game/dota_addons/myaddon/scripts/vscripts. Путь к файлу в данном случае будет просто название скрипта example.lua.
Пример кода на Lua:
function OnStartTouch(trigger)
	print(trigger.activator)
	print(trigger.caller)
	
end
function OnEndTouch(trigger)
	print(trigger.activator)
	print(trigger.caller)
	
end
* Шаг 6: Два раза щелкните на триггере или нажмите Alt+Enter, чтобы открыть свойства нашего объекта. Выберете вкладку Outputs.
* Шаг 7: Добавьте событие output с именем "OnStartTouch". В поле "Target entities named" выберете, созданный нами триггер trigger_example. В поле "Via this input" выберет событие "CallScriptFunction". В поле "With a parameter override of" введите имя функции, которое будет вызываться, когда запустится наш триггер.
* Шаг 8: Создайте еще одно событие с такими же параметрами как и в шаге 7. В поле "With a parameter override of" введите имя функции "OnEndTouch". После выполненных действий во вкладке Outputs вы должны получить следующее:
::
	My Output 	Target Entity 	Target Input 	Parameter 	Delay	Only Once
	OnStartTouch	trigger_example	CallScriptFunction	OnStartTouch	0.00 	No
	OnEndTouch 	trigger_example	CallScriptFunction	OnStartTouch	0.00 	No
Готово, теперь запустите игру с помощью F9 и попробуйте зайти в ваш триггер героем. Откройте консоль VConsole и убедитесь, что выводятся сообщения.
Category:Dota 2 Workshop Tools
Ru/Dota 2 Workshop Tools/Unofficial Tools

Category:Dota 2 Workshop Tools
Эти инструменты были созданы сообщестом мододелов и не поддерживаются Valve.
== Файлы KeyValue ==
* DotaCustomFilesJoiner
* KVFilesBuilder
* Syntax highlighting and snippets for Sublime Text 2/3
* KVLib: A C# Key-Value parser and library
* KVLib: A C++ Key-Value parser and library
* dotakv: parse and load KV ingame, save and load files
* UpgradeableItemsKVBuilder
* keyval-mode.el: An Emacs major mode for editing KeyValue files
== Связанное с API ==
* API snippets for Sublime Text 2/3
* Lua API stub classes
* VConsole2 Lib: PoC library for working with the VConsole2 network protocol
== Редакторы ==
* Simple Dota 2 Editor: Open source Dota 2 Mod Editor
* WorldSmith: Open source Dota 2 Mod Editor
== Lua Библиотеки & Фреймворки ==
* Barebones
* Building Helper Library
* Player Say: Scaleform Lua for chat
== Другое ==
* D2 ModKit: A GUI comprised of useful tools to help with Dota 2 modding
* Source 2 Resource Decompiler
* Dota2 Sound Editor Note: This project is dead and is no longer being developed.
* KVUP: Tool for aiding with the porting of WC3 Models to Dota2
* ModDota Lib: A Flash library for Dota 2 custom gamemodes
* Source 2 resource file format parser and decompiler
Есть множество созданных сообществом сайтов, там вы также можете получить помощь.
=== Русскоязычные сайты ===
* customgames.ru | Уроки | Форум
* dota2.ru
* Статьи по Hammer Editor
=== Англоязычные сайты ===
* /r/dota2modding
* moddota
* d2modd.in docs
* Обсуждение Dota 2 Workshop в Steam
== IRC ==
* 
* , the api documentation bot
Ru/Dota Underlords

== Разработка ==
После очень короткого периода разработки, длившегося всего несколько месяцев, была выпущена 13 июня 2019 года в виде закрытой бета-версии для всех владельцев Battle Pass 2019.
== Системные требования ==
Для необходима видеокарта с поддержкой технологии Vulkan в операционной системе, основанной на .
== Внешние ссылки ==
* Официальный сайт
* Официальное сообщение в блоге Dota 2, анонсирующее игру
Ru/Dota Workshop Tools FAQ

;У меня 32-ух битная версия Windows. Почему я не могу играть в любые пользовательские адоны?
:Dota 2 Workshop Tools находится в стадии альфа тестирования и работа над ней продолжается, мы думаем что очень важно дать разработчикам адонов возможность начать работать уже сейчас, а не дожидаться выхода финальной версии.
;Трудно найти игровой мод для игры. Будет ли лучше?
:В текущий момент система лобби, наряду с системой поиска и запуска игр не завершены до конца. Так же как для инструментов, мы будем выпускать больше обновлений для клиента Dota 2, для улучшения играбельности кастомных игровых модов.
;Я работаю над косметической продукции для Dota 2 Могу ли я использовать эти инструменты?
:Не сейчас. При изменении системы контента только игровые режимы в настоящее время поддерживаются. Разработчики контента, желающие создать косметические предметы для Dota 2 должна посетить веб-сайт Dota 2 Workshop. Метод для создания косметических предметов не изменился с этим обновлением.
;Как распространяются пользовательских режимов игры?
:Пользовательские адоны распространяются через специальный раздел в Dota 2 Workshop. После авторизации адоны могут быть загружены с помощью клиента Dota2. После того как адон появится в магазине он станет доступен для скачивания другим пользователям, для этого достаточно просто подписаться.
;Что дает мне подписка на кастомные игровые моды?
:Подписка позволит не только скачать адон, но также получает своевременные обновления для него. Это позволяет авторам постоянно обновлять свои адоны до текущей версии и поддерживать общую актуальную версию для совместной игры.
;Я подписался на игровой режим, как мне его запустить? 
:Пожалуйста обратитесь к разделу для получения информации.
;Некоторые инструменты, кажется, отсутствует. Где редактор звука?
:Не все инструменты доступны в этом альфа-версии. Поскольку мы продолжаем работать над инструментами большинство из них будут не доступны для использования при создании адонов.
;Что-то не работает или работает не как следует. Должен ли я сообщить об этом?
:Да! Пожалуйста посетите Dota 2 Developer форум или страницу Workshop Discussion.
;Мои адоны, которые я разрабатывал долгое время, больше не работаю с последнего обновления, почему?
:Dota Workshop Tools находятся на ранней стадии развития и может возникнуть необходимость в критическом обновлении, например, изменение формата файлов, в таком случае пользовательские адоны будут обновлены и вновь добавлены в Workshop. Как правило это крайне редкое явление​
;Мне нужна помощь, есть ли кто в сообществе Dota 2 также разрабатывающий кастомный режим игры?
: Посетите форум сообщества Dota 2 Workshop, там вы сможете задать вопрос или сообщить о багах.
: #dota2mods это канал созданный модерами сообщества Dota 2 с сайта irc.gamesurge.net
Category:Dota 2 Workshop Tools
Ru/Duplicate Animation Events Fix

== Введение ==
Этот урок не связан с прогнозом дублирования анимации. Этот урок связан с тем, что мы введём новый PlayerAnimState код в проект Orange Box SDK от 15 Июня 2009 года.
Введение PlayerAnimState даст большие изменения в управлении анимации игрока. Проблема заключается в том, что её выбросили и без того "грязного" кода анимаций, который включает в себя сотни вызовов функций в различных уровнях виртуализации...
Несмотря на всё это, в конце функции CaHL2MPPlayerAnimState :: DoAnimationEvent (...) есть небольшой подарок от Valve. Он делает анимацию View модели, совпадающей с моделью от третьего лица. Однако, проблема заключается в том, что Valve определяет сетевую переменную изменений, с помощью этих надоедливых "Parity" переменных, которые вы можете видеть везде, в частности m_nResetEventsParity.
Давайте немного вернемся назад, все оружие вызывают свою собственную анимацию ViewModel с функции SendWeaponAnim (...), а также увеличивает m_nResetEventsParity.
Сейчас анимация не играет дважды, потому что большинство вызовов оружия находятся в одном кадре и оно не посылает m_nNewSequenceParity поскольку последовательность не меняется. Тем не менее, в реальности получается, что m_nResetEventsParity изменилось, и это всё портит. Так как PlayerAnimState вызывается только на стороне клиента, он изменяет события "parity" (Иногда), прежде чем сервер обновлений его изменения, и именно поэтому получаются проблемы с анимацией.
Этот код, фактически, используется для вызова события анимации, на предсказание ViewModels других игроков (т.е. вспышки выстрелов и т.п., т.к. анимация работает правильно в вид от третьего лица). Дело в том, Valve не отфильтровали его для локального игрока, тем самым получается удвоение анимаций.
== Требования ==
*Использовать новый OB SDK код
== Решение проблемы ==
Просто добавьте фильтр для локального игрока в коде файла hl2mp_playeranimstate.cpp:
В функции CHL2MPPlayerAnimState::DoAnimationEvent(...)
#ifdef CLIENT_DLL
	// Воспроизвести анимацию оружия
	if ( iGestureActivity != ACT_INVALID && GetBasePlayer() != C_BasePlayer::GetLocalPlayer() ) // <-- ИЗМЕНЯЕМ ЗДЕСЬ
	{
		CBaseCombatWeapon *pWeapon = GetHL2MPPlayer()->GetActiveWeapon();
		if ( pWeapon )
		{
			pWeapon->EnsureCorrectRenderingModel();
			pWeapon->SendWeaponAnim( iGestureActivity );
			// Force animation events!
			pWeapon->ResetEventsParity();		// Сброс событий "parity" т.к. анимации будут происходить на оружие.
			pWeapon->DoAnimationEvents( pWeapon->GetModelPtr() );
		}
	}
#endif
== Примечания и Дальнейшая работа ==
Будущая версия SDK может решить эту проблему по-другому, а пока остается полагаться на этот код анимации игрока, который настроит анимацию viewmodel, вместо обработки анимаций оружия в определенной части кода (PrimaryAttack, Draw, Holster, и т.д..)
Это изменение уже присутствует в коде, сгенерированном с помощью "Start a Multiplayer mod from a template" в меню "Create a Mod Wizard".
Перевод --Slam12f 20:17, 12 May 2013 (PDT)
Ru/Dust, Fog, & Smoke

Эта статья о добавлении на карту дыма, пыли, тумана и т.д. Они весьма схожи между собой, поэтому их эффекты пересекаются.
__NOTOC__
== Энтити ==
* — добавляет туман по всей карте
* — добавляет дым, сдуваемый ветром
* — добавляет пыль
* — быстро движущаяся версия env_smokestack, без ветра
* — пускает клубы дыма
* — создаёт дым в виде "дымного следа"
* — создание объёмного дыма (использует значительные ресурсы CPU)
== Материалы ==
*effects/fog_d1_trainstation_02 Используется только на расстоянии. Только в играх содержащих исходный код 
*shadertest/volumetricfog — Не работает.
*tools/toolsfog — Работает только с func_smokevolume.
*tools/toolsskyfog (требуется описание)
== Примечания ==
* и для достижения своего эффекта используют многочисленные спрайты , и поэтому очень требовательны к ресурсам (некоторые настройки замедлят вашу карту, особенно на слабых системах).
* есть некоторые модели облаков.
*Лучи света должны быть добавлены вручную. Для этого существует модель (Effects/vol_light.mdl) или вы можете создать не твёрдый браш с материалом models/effects/vol_light001 или vol_light002.
*Чтобы получить туман в 3D скайбоксе, настраивайте параметры тумана в . Для достижения наилучшего результата задайте ему те же параметры, что и в .
== См. также ==
* 
* 
* 
== Ссылки ==
*Fog prefab for Episode One and Two Realistic, non-fps killing fog - tutorial
Category:Russian
Ru/Dynamic assaults

Настраивание используя энтити наступления (, etc.) может быть нудным и сложным, и в результат может получиться запутанная система, которая ломает ИИ НИПов. Если смысл наступления это просто атака натуральных врагов (как игрок), настройка энтити наступлений обычно тотальная бессмыслица. Вот урок, как настраивать наступление которое построено только на командной работе ИИ:
Ключ системы это НИПы с одинаковым значением squadname, которое делится и укрепляет разведданные между этими НИПами. ( особенно могут делится разведданными в группах на разных локациях используя радио). Достаточно попасться одному члену отряда на глаза, так уже сразу весь отряд будет идти к вам (так долго, как пути врага будут доступны через ), идя на последнюю известную позицию врага без надобности или . Просто удостоверьтесь, что сетка навигации создана и работает.
== Дополнительные волны ==
Вы можете контролировать волны поддержки двумя способами:
Обычный способ это просто ставя дополнительные группы членов отряда дальше на карте. Эти дополнительные группы будут созданы после волны атакующих. Недостаток данной системы в том, что она будет вовлекать, двигать и координировать большое количество НИПов за раз, что будет стоить немало ресурсов машины, и что нападающие смогут накапливать силу, которая со временем будет убивать игровой баланс.
Другой способ это создавать новых НИПов через 'ы, давая значение NPCSquadname одинаковое названию отряда. Если все члены отряда умерли и создался новый член отряда то, для предотвращения остановки наступления нужно поместить в отряд для поддержки отряда в живых. Вы также можете использовать энтити для поддержки плохих отношений с игроком, даже если один из членов умер.
== Улучшение системы ==
Вы можете улучшать эту систему разными способами, вот немного примеров:
* Солдаты Альянса могу использовать , и/или для нахождения игрока. (Просто включите их в состав отряда.) Если они не в вашем распоряжении, вы можете "считерить" включая в отряд. Настроив их FieldOfView значение на -1, так они будут смотреть во все стороны.
* Создать несколько путей на вышей карте, чтобы удивить игрока при многократном переигрыше.
Ru/Editor text

Объект Hammer, который отображает ориентированное текстовое сообщение непосредственно в точке его установки.
Аналогичен , однако его основное назначение - добавлять 3D-комментарии к карте.
== Keyvalues ==
==Внешние ресурсы==
* Русский шрифт для editor_text Hammer++
Ru/Elevators

Для лифта не предусмотрен отдельный объект мира, поэтому его нужно собирать из нескольких объектов мира.
==Статьи==
*
*
* — дополнительные функции лифтов, такие как противовесы и многостворчатые сдвигаемые двери.
==Объекты мира==
* — движется вдоль оси между двумя точками; в основном полезна для вертикальных(прямолинейных) лифтов
* — движется между несколькими точками (См. ); самый подходящий объект мира для многоэтажных лифтов или непрямолинейных фуникулёров
* — перемещается между двумя положениями и не может остановиться на полпути; применима только для двухэтажных лифтов
* и — требуют установки .
==Примечания==
*Двери могут быть прикреплены к лифту как потомки к предку.
*Могут потребоваться логические объекты мира, особенно для многоэтажных лифтов.
== См. также ==
* 
==Внешние ссылки==
*Creating a Working Elevator Tutorial: Adding Sounds Archived from the original on 2008-04-24.
*Creating a Working Elevator Tutorial: Adding Doors Archived from the original on 2008-04-24.
*Creating a Working Elevator Tutorial: The Basics Archived from the original on 2008-04-24.
*HL2 4-floor Elevator Tutorial (sdknuts) Archived from the original on 2008-08-04.
*TUTORIAL: The Elevator Trifecta (TF2Maps.net)
*Valve Editing Resource Community: +2 stop elevator (Down) Archived version
Ru/Embedding Lua in the Source Engine

Andrew C. P. McWatters (me@andrewmcwatters.com), 2010
Software Development Engineer
== Что такое Lua? ==
Lua это мощный, быстрый, легкий, встраиваемый скриптовый язык.
Lua сочетает в себе простой процедурный синтаксис с мощными конструкциями описания данных на основе ассоциативных массивов и расширяемой семантики. Lua динамически типизируется, выполняется путем интерпретации байт-кода для виртуальной машины на основе регистра и имеет автоматическое управление памятью с инкрементной сборкой мусора, что делает его идеальным для конфигурации, сценариев и быстрого прототипирования.
Вы можете узнать больше о Lua на официальном сайте.
== Обзор ==
Lua в настоящее время является ведущим скриптовым языком в играх, а у пользователей Steam ассоциируется с . К сожалению, исходный код игры Garry's Mod не распространяется, и, как результат, мы не можем использовать реализацию языка Lua из этой игры для своего мода. Тем не менее, мой проект Half-Life 2: Sandbox в настоящее время является ведущим проектом с открытым исходным кодом, предназначенным для обеспечения сообщества разработчиков методом внедрения Lua в их мод практически без проблем, и в этой статье я объясню, как это сделать.
В используется чистый Lua, отличающийся от реализации языка в моде Гарри, который имеет ограничения на многие библиотеки и модифицированный синтаксис для комментариев в стиле C++. Цель Sandbox - обеспечить нейтральную, чистую, стандартизированную и хорошо документированную базу кода для взаимодействия с Lua, в отличие от статей, увиденных в сообществе разработчиков Valve, таких как учебник LuaBind по языку Lua или просто .
== Внедрение ==
=== Файлы ===
* luamanager.cpp
* luamanager.h
* lua51.dll
=== Установка ===
Сценарии менеджера Lua, найденные в исходном коде Half-Life 2: Sandbox, были написаны обобщённо, чтобы их можно было добавить в любой мод.
* Если вы работаете с исходным кодом мода, а не с плагином, указанные выше файлы должны быть помещены в src/game/shared
* В файлах вашего проекта поместите и luamanager.cpp, и luamanager.h в Source Files filter
* Скомпилируйте ваши двоичные файлы
* Просто добавьте заранее скомпилированный файл lua51.dll в папку bin вашего мода, и теперь ваш мод интегрирован с Lua!
Обновление: Half-Life 2: Sandbox прошел несколько ревизий, значительно расширив его Lua API, включая множество классов и библиотек для его возможного использования с Source. В результате этих расширений вы заметите, что для использования этих классов вам необходимо добавить отдельные файлы классов .cpp и .h, которые перечислены в luamanager.cpp заголовками, соответствующими .cpp файлам.
== External links ==
* Lua: about
* lua-users wiki: Binding Code To Lua
Category:Scripting
Ru/Ending a Portal map

== Вступление ==
С помощью этого тутора вы сможете сделать конец уровня как в бонусных картах.
== Шаг первый. Создание ентити ==
Для начала создайте два ентити с помощью Entity Tool (Shift + E). Создайте "point_clientcommand" и назовите его "end_disconnect". Создайте "env_fade" и назовите его "end_fade".
== Шаг второй. Создание триггера ==
Создайте браш с тем размером который вам нужен. Но чтобы он покрывал всю проходимую игроком поверхность, так как проходя через него уровень будет заканчиваться. Задайте ему "tools\toolstrigger" текстуру . Далее нажав Ctrl + T задайте ему класс "trigger_once". (Для удобства поместите ентити рядом с триггером)
== Шаг третий. Заключительный ==
Далее пропишите следующие строки для триггера во вкладку Outputs.
	Output named	Target entities	Via this input	Parameter 	Delay
	OnTrigger 	end_fade 	Fade 	 	0.00
	OnTrigger 	end_disconnect 	Command 	disconnect	2.00
== Конец уровня в теории ==
Проходя через ваш триггер, экран начнет темнеть благодаря ентити "env_fade". Через 2 секунды включится ентити "point_clientcommand" и уровень закончится и вы вернётесь в меню.
Category:Russian