user4616434

На Пикабу
100 рейтинг 0 подписчиков 1 подписка 1 пост 0 в горячем
1

C# в Dota 2? Да, это реально. Гайд для тех, кому надоел Lua и хочется нормальной типизации

Привет, Пикабу! Сегодня хочу поделиться своим опытом в разработке кастомных игр для Dota 2. Если вы когда-нибудь пробовали писать свои режимы, то знаете, что стандартный путь — это Lua и VScripts. Но что, если я скажу, что можно использовать всю мощь C#, сохраняя при этом совместимость с движком игры?

Да, это про «костыли», но очень изящные. Мы будем использовать проект CSharp.lua, который превращает ваш C# код в читаемый Lua, работающий внутри «песочницы» Доты.

Зачем это нужно?

Lua — это круто для быстрых набросков, но когда проект разрастается, начинаются проблемы:

  • Отсутствие строгой типизации (ошибки в именах переменных вылетают только в рантайме).

  • Скудный инструментарий для работы с коллекциями.

  • Никакого LINQ, нормальных интерфейсов и современных фишек языка.

C# дает нам Roslyn, типизацию и возможность писать чистый, поддерживаемый код.

1. Как это работает?

Магия строится на двух столпах:

  1. CSharp.lua — компилятор, который не просто переводит синтаксис, но и тянет за собой CoreSystem.lua (эмуляция .NET типов: List, Dictionary, Delegates и т.д.).

  2. VScript API — родной API Доты, к которому мы будем обращаться через extern методы.

Важный нюанс: Дота использует обрезанный Lua 5.1. У нас нет доступа к файловой системе (io), библиотеке debug и многим функциям os. Поэтому придется немного «подшаманить».

2. Готовим окружение

Нам понадобятся:

  • .NET SDK 7.0+.

  • Сам компилятор CSharp.lua.

  • Dota 2 Workshop Tools.

Структура проекта обычно выглядит так: в папке src пишем на C#, а в output получаем готовый out.lua, который закидываем в папку аддона.

3. Патчим CoreSystem (Борьба с песочницей)

Так как Valve ограничили os.time и os.clock, стандартный DateTime в C# может «уронить» ваш аддон. Нужно залезть в файлы библиотеки CoreSystem.lua и обернуть вызовы в проверки.

И самое важное: в Core.lua нужно закомментировать assert, который запрещает переопределение классов. В Доте это нужно для работы script_reload (горячая перезагрузка кода без перезапуска игры).

4. Пишем код: Точка входа

Чтобы Дота поняла, что наш код существует, создаем EntryPoint.cs. Здесь мы связываем методы C# с глобальными функциями Lua.

5. Как работать с API Доты?

Чтобы не писать обертки на каждый чих, используем шаблоны. Это позволяет вызывать любые методы VScript API напрямую.

6. Компиляция и запуск

Я использую простой .bat файл для сборки:

CSharp.Lua.Launcher.dll -s src -d output -c -p -include CoreSystem.lua copy /Y "output\out.lua" "C:\...\dota_addons\my_addon\scripts\vscripts\out.lua"

  • -c: Совместимость с Lua 5.1.

  • -p: Отключает debug.setmetatable (в Доте он запрещен).

  • -include: Собирает всё в один файл out.lua.

В самой игре в консоли пишем script_reload — и вуаля, ваша логика на C# работает!

Итог

Да, порог входа чуть выше, чем у обычного Lua-скриптинга. Но для сложных проектов с кучей кастомных механик, способностей и систем — это спасение. Вы получаете автодополнение, поиск ссылок, рефакторинг и нормальную структуру кода.

Репозиторий с реализацией

Если есть вопросы по настройке или конкретным багам — пишите в комментариях, постараюсь помочь. Удачи в модострое!

Показать полностью
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества