Как написать dota

Clinkzombie

Пользователь

Регистрация:
03.11.2012

Сообщения: 259

Рейтинг: 102

Clinkzombie

Регистрация:
03.11.2012

Сообщения: 259

Рейтинг: 102

DotA — это 1
а как пишется 2
1)DoTa 2
2)Dota 2
3)DOTA 2
просто вальв изменили название но я не помню на какое ))

nHx2

Пользователь

Регистрация:
25.02.2013

Сообщения: 388

Рейтинг: 208

nHx2

Регистрация:
25.02.2013

Сообщения: 388

Рейтинг: 208

myfreedom

Пользователь

Регистрация:
26.01.2012

Сообщения: 952

Рейтинг: 299

myfreedom

Регистрация:
26.01.2012

Сообщения: 952

Рейтинг: 299

Сложно зайти на оффсайт? Сами Valve пишут Dota 2

112d

Пользователь

Регистрация:
09.12.2012

Сообщения: 526

Рейтинг: 871

112d

Регистрация:
09.12.2012

Сообщения: 526

Рейтинг: 871

В стиме написано — Dota 2, хотя по мне правильнее DOTA 2, аббревиатура же

Monyk

Пользователь

Регистрация:
04.03.2013

Сообщения: 91

Рейтинг: 35

Monyk

Регистрация:
04.03.2013

Сообщения: 91

Рейтинг: 35

Не имеет значения. DotA — это аббревиатура. Соответственно DotA2. Но т.к. сами вальв пишут Dota 2 то значения не имеет.

water DOTA

Пользователь

Регистрация:
16.02.2012

Сообщения: 320

Рейтинг: 167

water DOTA

Регистрация:
16.02.2012

Сообщения: 320

Рейтинг: 167

Так пишеться дифенсе оф зе ансиент

myfreedom

Пользователь

Регистрация:
26.01.2012

Сообщения: 952

Рейтинг: 299

myfreedom

Регистрация:
26.01.2012

Сообщения: 952

Рейтинг: 299

112d сказал(а):↑

В стиме написано — Dota 2, хотя по мне правильнее DOTA 2, абривеатура же

Нажмите, чтобы раскрыть…

Америкосы в аббревиатурах предлоги пишут маленькими, поэтому первая DotA так и пишется

AURО

Пользователь

Регистрация:
12.10.2012

Сообщения: 724

Рейтинг: 472

AURО

Регистрация:
12.10.2012

Сообщения: 724

Рейтинг: 472

DotA 2 думаю. Так же, как и первая.

MDshka

Пользователь

Регистрация:
02.11.2011

Сообщения: 895

Рейтинг: 486

MDshka

Регистрация:
02.11.2011

Сообщения: 895

Рейтинг: 486

DotA
Defense of the Ancients

AttackplaN_

Пользователь

Регистрация:
25.08.2012

Сообщения: 136

Рейтинг: 16

AttackplaN_

Регистрация:
25.08.2012

Сообщения: 136

Рейтинг: 16

Defence of the Ancients 2
т.е. DotA2

Abby

Пользователь

Регистрация:
04.11.2012

Сообщения: 235

Рейтинг: 136

Abby

Регистрация:
04.11.2012

Сообщения: 235

Рейтинг: 136

Дота 2 это уже не аббревиатура…

myfreedom

Пользователь

Регистрация:
26.01.2012

Сообщения: 952

Рейтинг: 299

myfreedom

Регистрация:
26.01.2012

Сообщения: 952

Рейтинг: 299

Monyk сказал(а):↑

Не имеет значения. DotA — это аббревиатура. Соответственно DotA2.

Нажмите, чтобы раскрыть…

Не, тут не соращение, а зарегистрированная торговая марка. Поэтому Dota 2, не DotA и не DOTA

Sliff_zoSSchitan

Регистрация:
08.12.2012

Сообщения: 38

Рейтинг: 22

«Dota 2» — вроде так вторая. Ну, как в стиме.

zxc112233

Пользователь

Регистрация:
17.01.2013

Сообщения: 740

Рейтинг: 244

zxc112233

Регистрация:
17.01.2013

Сообщения: 740

Рейтинг: 244

DotA 2(Defense of the Ancient 2)

runzie

Пользователь

Регистрация:
18.03.2013

Сообщения: 1640

Рейтинг: 389

runzie

Регистрация:
18.03.2013

Сообщения: 1640

Рейтинг: 389

Думаю ответы уже даны, можете закрывать тем, Модераторы.

Rezenbekk

Пользователь

Регистрация:
10.02.2012

Сообщения: 2279

Рейтинг: 424

Rezenbekk

Регистрация:
10.02.2012

Сообщения: 2279

Рейтинг: 424

DotA — это первая.

Вторая — это Dota 2. НЕ Defence of the Ancients 2! А именно Dota 2, курите судебные разборки между валвами и близзами

Frost5L2

Почетный пользователь

Регистрация:
20.10.2010

Сообщения: 917

Рейтинг: 782

Frost5L2

Регистрация:
20.10.2010

Сообщения: 917

Рейтинг: 782

ребят, для многих открою секрет

Спойлер:

Dota2 это не аббревиатура а название игры
в плане что это уже не defence of the ancient, a просто Dota2

Тема закрыта

  • Заголовок

    Ответов Просмотров

    Последнее сообщение

  • DETDOMOVETZ

    Сообщений: 2
    04 Mar 2023 в 05:34

    pralivalka

  • SamBankman-Fried

    Сообщений: 5
    04 Mar 2023 в 05:16

    Сообщений:5

    Просмотров:10

    Jabrano

  • imTheSupremeOne

    Сообщений: 2
    04 Mar 2023 в 05:12

    DETDOMOVETZ

  • Кебаб

    Кебаб

    04 Mar 2023 в 04:49

    Сообщений: 7
    04 Mar 2023 в 04:49

    Сообщений:7

    Просмотров:17

    pralivalka

  • Резкий нюхатель

    Сообщений: 5
    04 Mar 2023 в 03:35

    Сообщений:5

    Просмотров:30

    Василий Яковлев

Всем привет, дорогие читатели. У многих игроков, в том числе и тех, кто играет давно, иногда возникают различные проблемы, связанные с игрой. Решение таких проблем – можно поискать и в интернете, но если ответа вы не найдете – можно обратиться в техподдержку Dota 2, и вы обязательно получите ответ на свой вопрос.

Как написать в техподдержку Дота 2

Это достаточно просто, на самом деле. Ниже – мы оставим для вас подробную инструкцию, которая поможет вам связаться с разработчиками, для решения каких-то индивидуальных вопросов.

Первое, что вам будет нужно – это зайти на свой Steam-профиль.

В самом верху, в левой части экрана, будут 5 пунктов. Вам нужно будет выбрать последний – справку.

Как написать в техподдержку Dota 2

Первый пункт в справке – это служба поддержки Steam. Переходите в этот пункт.

Как написать в техподдержку дота2

Теперь вам нужно будет выбрать игру, с которой произошли проблемы. В нашем случае это Dota 2. Выбираем ее. Если в быстром доступе игры не будет – находите ее в разделе «игры, программы и т.д.».

техподдержка дота 2

Тут вам предоставят список возможных неполадок, которые чаще всего возникают в игре. Кстати, если вы сможете найти ответ на свой вопрос – хорошо, если ответа нет – идете дальше. Допустим, у вас технические неполадки в игре. Выбирайте соответствующий пункт.

техподдержка dota 2

В этом разделе Valve предложат 5 самых часто задаваемых вопросов и решения на них. Опять же, если вы найдете в этих разделах ответы на свои вопросы (что происходит в 90% случаев) – хорошо. Если нет – нужно идти дальше. Выбираете раздел – «у меня другая проблема».

техподдержка стим дота 2

Тут вам пять предложат 2 разновидности проблемы. В первом случае – вы сможете связаться с техподдержкой Steam, и именно по вопросам Dota 2. Во втором случае – вы опишите, за что вам должны вернуть деньги. Допустим, у вас другая проблема. Тогда вы выбираете пункт связаться с техподдержкой Steam.

техподдержка стим dota 2

А теперь – самое главное. Что именно вы должны писать в техподдержку. В идеале начать с характеристик своего компьютера, чтобы ускорить процесс сбора информации. На скрине ниже – вы можете ознакомиться подробнее, что именно нужно указать в этих параметрах.

Далее – вам нужно будет описать подробности вашей ошибки. Тут укажите, когда она появилась, хотя бы примерно, почему и от чего. Не нужно сильно растягивать, пишите подробно, но кратко.

И последнее – вам нужно будет приложить дополнительный файл, к тексту, чтобы техподдержка смогла еще быстрее решить вашу проблему. Если вы пришлете им видео – вообще отлично. Под текстом – будет специальная кнопка «прикрепить», куда вы и должны будете сложить сопутствующие данные.

техподдержка дота 2 steam

Вот и все, дорогие читатели, именно так и нужно писать в техподдержку, по поводу Dota 2. Единственное – помните, чем подробнее вы опишите свою проблему – тем быстрее разработчики смогут ее решить, а значит и вы, так же быстро, получите ответ на свои вопросы. Всем удачи и пока.

( 1 оценка, среднее 5 из 5 )

Перейти к контенту

Dota 2 — соревновательная игра, где пользователи должны активно общаться со своими союзниками, если они желают побеждать в битве. Это обязательное условие. Данный факт отлично осознает и разработчик. Valve предоставляет своим игрокам сразу две возможности, касающиеся общения. Они могут использовать как голосовой, так и текстовой чат. Конечный вариант выбирают только участники сражения.

Многие новички, пришедшие в Доту 2, совершенно не понимают, как использовать текстовой чат. Это становится ощутимой проблемой, которая должна быть исправлена прямо сейчас.

Как использовать чат:

  • Общий чат — это первый вариант общения. Пользователь может активно взаимодействовать со всеми участниками Dota 2, присутствующими на сервере. Это могут быть как союзники, так и соперники. Для активации такого способа общения рекомендуется использовать сочетание клавиш Shift+Enter вместе.
  • Командный чат — второй способ общения. Пользователь может отправлять таким образом сообщения, которые видны исключительно представителям его коллектива. Исключений тут не бывает. Вызвать такой чат удастся легко: достаточно один раз нажать клавишу Enter на своей клавиатуре. Положительный результат не заставит себя ждать.

Как писать в чат в Доте 2

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

Вводная часть

Как писать в общий чат Dota 2

Не каждая онлайн-игра даёт возможность общаться в текстовом или голосовом чате с противниками. Однако есть игры, в которых это можно делать, и Dota 2 — одна из них. Главная проблема, с которой сталкиваются игроки, это различные настройки для открытия чата в разных играх. Например, кнопка чата в Dota 2 – это Enter, а в CS:GO – это «Y». Большую часть информации об игре можно найти в настройках, но иногда быстрее и лучше – спросить в интернете о том, как писать в общий чат в Доте 2.

Пообщаться с противниками можно с помощью сочетания клавиш Shift+Enter, а сообщение, отправленное через один Enter увидят только союзники. Голосовой чат в Dota 2 не доступен для вражеской команды. Стоит понимать, что общение в чате – это важный элемент любой командной соревновательной игры, однако не стоит использовать его не по назначению. Не нужно даже говорить о том, сколько оскорблений и ненужной информации может попасться на глаза во время обычного матча, в том числе и от противников.

Как писать в общий чат Dota 2

Нужно внимательно относиться к тому, как и когда писать в чат, в том числе и своим противникам. В большинстве случаев обращение к ним не оправдано и будет только отвлекать от игры. Во время сражения, когда накал эмоций силён, можно написать что-нибудь сгоряча и затем получить за это наказание. Кого-то это не останавливает, однако это не профессионально и плохо влияет на уровень игры в целом. Если с тем, как писать в общий чат в Доте 2, всё ясно, то с тем, зачем это делать, не всё так однозначно.

Можно поблагодарить своих соперников за отличную игру, однако на практике мало кто делает это искренне и без сарказма. Более интересный вариант использования чата, который видят все, это возможность отвлечь или вывести противников из себя, чтобы они вместо игры занимались перепиской. Не самый честный приём, но если победа важнее всего – то можно рискнуть. Главное, не увлекаться перепиской, делать это в безопасные для своего персонажа моменты и не ставить общение в приоритет над игрой с командой.

В Dota 2 многие игроки испытывают трудности когда пытаются писать сообщения в общий чат. Решить эту проблему достаточно просто — ответ в нашем видео.

Видео как в доте 2 писать в общий чат канала How tv

Показать

В такой игре, как Дота 2, очень важно общение между игроками. Так как это командная игра, то играть в одиночку не получится.

Вам обязательно придется в большей или меньшей мере общаться с напарниками по команде.

Разработчики предусмотрели несколько видов общения: с помощью микрофона, текстовыми сообщениями, отметками на мини-карте или готовыми шаблонами, которые заложены в игру.

Текстовые сообщения занимают одну из главных ролей. Это единственный вид общения, который позволяет взаимодействовать с соперниками. Это тоже требуется.

Чтобы писать сообщение во время игры в Dota 2, необходимо нажать Enter и ввести свое сообщение. Повторное нажатие Enter отправляет сообщение всем союзникам.

Чтобы сообщение увидели все участники матча, используйте комбинацию Shift + Enter для вызова окна ввода и Enter для отправки.

Как рисовать на карте в Dota 2 – InfoDota.com

В игре Dota 2 присутствует очень важная для разработки игровой стратегии функция — возможность рисовать на миникарте, что позволяет буквально на ходу рассказать своим тиммейтам о сложившимся в вашей голове гениальном плане или описать примерное перемещение противников, когда у вас на карте нет ни одного варда.

Наверняка многие новички поначалу и вовсе не замечают этой функции, но бывалые игроки в Dota 2 уже давно используют все открывшиеся им возможности с использованием рисования на миникарте: от известных всем «кораблей» или чего похуже до настоящих военных планов.

Как рисовать на миникарте в Dota 2?

Для этого достаточно лишь зажать Ctrl, после чего левой кнопкой с помощью курсора мыши начертить на миникарте необходимые линии, которые будут видны всем вашим союзникам, но не врагам. Цвет нарисованных линий соответствует цвету игрока в игре и показывается на миникарте в течение нескольких секунд.

Предыдущая статьяБинды на Инвокера/Invoker Dota 2Следующая статьяКак добивать крипов или ластхит в Dota 2

Идейный вдохновитель и главный редактор портала InfoDota.com. Тот самый саппорт, сливающий все деньги в уни… на варды, смоки, дасты и другие «очень важные вещи для своей команды» в Dota 2.

Карта

— Dota 2 Вики

Эта статья о внутриигровой карте. Для локаций в истории Dota 2 см. Категория: Мир.

Карта — игровое поле для всех матчей по Dota 2. Он состоит из двух сторон, одна для фракции Radiant, а другая для фракции Dire. Чтобы победить, игроки должны уничтожить Древний противник, важное здание в центре базы каждой команды. Карта представлена ​​в интерфейсе миникартой .

,

Dota 2 Map Warding — полное руководство (примеры и советы)

Что внутри?
Размещение вардов и часовых в Dota 2 — непростая задача. В этом подробном руководстве вы узнаете, как эффективно расставлять варды, чтобы выигрывать больше матчей!

Глава 1: Основы зрения и защиты

Давайте начнем! 😀

Прежде чем переходить к деталям размещения вардов, давайте уточним основы.

Кто отвечает за расстановку вардов и имеют ли вообще значение варды для победы в играх?

Так ли важны зрение и защита?

Конечно, дружище! Вы думали, что эти желто-синие штуки с глазами только что украшали карту? Наличие видения каждый раз, когда начинается командный бой, или знание того, где вражеский керри фармит, может помочь вам выиграть всю игру.В этом Dota 2 Map Warding Guide вы овладеете искусством защиты и сохраните отличное зрение для своих товарищей!

Итак, давайте начнем с самого начала, чтобы понять реальную важность наличия видения :

Dota 2 Wards: Что это?

Оберег — это предмет , который действительно связан с ролью поддержки , но, честно говоря, любой может получить их с , теперь они совершенно бесплатны . Эти полезные артефакты невидимы для врага, и если вы разместите их правильно, им будет сложно обнаружить.Они не только помогают видеть, но и с их помощью можно блокировать нейтральные лагеря! Мы обсудим это позже. 😉

Есть 2 типа защиты:

Observer Wards:

Если вы играете роль поддержки, позвольте мне сказать вам, что эти желтые друзья станут вашими лучшими друзьями на всю жизнь. Но будьте осторожны, потому что они могут быть уничтожены вражеской командой. Я расскажу, как это сделать, ниже.

Эти варды дадут вам обзор в радиусе 1600 и будут длиться 6 минут .Так что знайте о сроках и продолжайте покупать варды. Не позволяйте Observer Wards оставаться в магазине !

Sentry Wards:

Помните, я говорил вам, что Observer Ward могут быть уничтожены ? Что ж, вот и хочу представить своих истребителей! Sentry Wards — невидимые наблюдатели для противников, которые дают истинное зрение. Они могут видеть невидимых врагов и Observer Ward в радиусе 1000 и длятся 8 минут. В настоящее время в патче 7.24b, , у нас есть ограниченный запас этих синих приятелей, поэтому размещайте их с умом, потому что мы уверены, что вы не хотите, чтобы часовые кончились в командном бою.

Опека и отстранение: кто этим занимается?

Служба поддержки здесь, чтобы спасти день защиты! Эти персонажи играют важную роль в Dota 2 — размещают на карте Observer Ward и Sentry Ward. «Но я же жесткий керри команды, и я тоже хочу вард!», — можете подумать вы. Напоминаем, что каждая роль имеет свои обязанности . Если вы Hard Carry, то ваша задача — фармить как можно быстрее. Это значит, что у вас не будет времени побродить по карте и расставить варды.

С другой стороны, у саппортов достаточно времени, чтобы сосредоточиться на работе по защите и замене. Они могут определить, поставил ли противник оберег, и немедленно перейти в эту область и уничтожить ее. Конечно, если вы находитесь рядом с вражеской стойкой, и ваша поддержка не может ее достать, потому что это, вероятно, слишком рискованно или слишком далеко, то вы можете получить ее, если вокруг нее стоит часовой. 😉

Действительно ли варды влияют на игру?

Совершенно верно! Даже таким лучшим игрокам, как Notail или Miracle, нужны варды, чтобы начать играть по-крупному. Только представьте, что вы плывете. Вся ваша команда находится внутри Рош Ямы, и этот огромный босс вот-вот умрет и отдаст Эгиду Бессмертного, но внезапно … Другая команда удивила вас комбо-ультом вомбо, вы все умираете, и они крадут эгиду! Вы никогда не ожидали этого, потому что у вас, вероятно, не было ни стражи, ни караула в этой области.

А теперь давайте представим идеальную ситуацию, когда ваша поддержка стоит на страже и расставляет часовых вокруг Рош-Ямы, а у вас есть полный обзор этой области .Теперь вы, вероятно, можете увидеть приближение невидимых героев и приближение остальной части вражеской команды.

На этом этапе ваша команда точно знает, что должно произойти, и теперь они готовы к ответным действиям. Вы выигрываете командный бой, возможно, вынудите поддержку выкупить и получите Aegis! Здесь я собираюсь показать вам несколько удивительных мест для защиты Рошана:

Radiant / Dire Roshan Pit Wards:

Этот оберег идеален, когда вы собираетесь на Рошана. Он дает необходимое зрение, чтобы знать, что происходит за пределами Рош-Пит. Если вы поместите его точно в это положение, он даст хороший обзор, но если вы поместите его ближе к яме Рош, тогда область обзора будет уменьшена, поэтому поместите его впереди. 😉

С помощью этого варда вы можете предотвратить ганк на Рошана и получить полное представление о намерениях врагов.

Этот вард действительно хорош против таких героев, как Bat Rider, Snapfire или Storm Spirit , потому что они будут пытаться стратегически позиционировать себя, чтобы схватить Aegis!

То же самое, если вы играете Dire против Radiant, этот вард может очень помочь вам избежать этих инициаторов.

.если ссылка не работает, просто введите в нее свой Steam id
У меня это сработало. Я просто нажал «Отказаться от подписки» на пользовательской карте, поддержка которой прекращена.

Другие вещи, которые я пробовал перед этим:
1. Вручную удалите определенные файлы пользовательских карт из Steam steamapps shops content 570
(publish_data.txt показывает имя пользовательской карты).
2. В текстовом редакторе вручную отредактируйте appworkshop_570.acf в Steam steamapps shops
(я удалил строки, соответствующие идентификатору пользовательской карты в «WorkshopItemsInstalled» и «WorkshopItemDetails», и сохранил файл).
3. В клиенте Steam очистите кеш загрузок, выбрав Steam> Настройки> Загрузки.
4. В клиенте Steam проверьте целостность файлов игры в Dota 2> Свойства> Локальные файлы

Я не уверен, помогли ли они в исправлении. Одно только отказ от подписки могло сработать. Поиграйте и посмотрите, что работает для вас.

.


Практически в любой сетевой игре, а особенно в Доте 2 важно общение между игроками. Игра командная, а поэтому без общения тут не обойтись. Иногда требуется написать врагам, не говоря уже о союзниках. Так вот, в Доте 2 предусмотрено несколько видов общения: через миникарту, с помощью микрофона и традиционные текстовые послания.

Итак, обычно у новичков не возникает вопросов как написать сообщение в командный чат. Достаточно нажать Enter, ввести сообщение и снова жмякнуть по Enter. А вот вопрос как писать в общий чат в игре Дота 2 возникает у многих. Для этого нужно зажать Shift и, не отпуская его, нажать Enter. Тогда сообщения будут доступны всем — и союзникам и врагам. И вы наконец сможете вылить все свои восхищения вражеской игрой, а также донести ваши мысли касательно их родителей.

Многие игроки задумываются над тем, чтобы написать в техническую поддержку игры, когда возникают самые разнообразные проблемы. Решение таких проблем также можно поискать в интернете и получить достойный ответ. Написать в техподдержку игры не составит труда. Сначала нужно зайти в магазин Стим и перейти в свой профиль.

В самом верху слева будет 5 пунктов и нужно выбрать тот который называется Справка. Первый пункт в справке, собственно, и есть техподдержка игры. Достаточно просто перейти в него и выбрать игру с которой произошли проблемы. Далее будут предложены варианты проблемы, и вы можете выбрать наиболее подходящий вариант или же нет ответа и описать свою проблему самостоятельно.

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

Следите за новостями у нас на сайте, если у вас остались вопросы и предложения, пишите в комментариях.

Вторая часть статьи  С чего начать создание мода Dota 2? 

В этом уроке мы попытаемся объяснить основы программирования пользовательских модов (кастомок/аддонов) Dota 2.

Скриптинг

Для начала вам понадобится уже созданная кастомная игра, с которой вы уже провели некоторые опыты. Самое время начать учиться программировать на Lua и вообще разобраться со всем этим дерьмом.

Зайдите в

dota 2 betagamedota_addonsназвание_вашего_модаscripts

 
Две основные папки cо скриптами — это NPC и vscripts. Первая может иметь следующие файлы с расширением .txt (если таковых нет, их можно создать самому):

  • npc_abilities_custom.txt — содержит все измененные и созданные способности в пользовательской игре.
  • npc_heroes_custom.txt — герои со своими способностями и статистикой.
  • npc_items_custom.txt — способности предметов, которые носят в инвентаре.
  • npc_units_custom.txt — все данные для не-героев единиц, здания или существ.
  • npc_abilities_override.txt  — измененные Dota 2 способности / детали с измененными значениями.
  • herolist.txt — список героев, доступных для выбора.

Эти файлы используют систему KeyValues ​​(KV, ключ-значение) и являются ядром в системе DataDriven. Это таблицы, содержащие всевозможные данные и они помогают движку Source 2 понять, что есть что. В этих файлах очень простой синтаксис. Всё что там есть — это таблицы (начинаются и заканчиваются фигурными скобочками), в которых содержатся ключ и его параметр (значение).

KV задают базовые параметры способностей, предметов, юнитов. А вот с Lua, уже будет немного сложней.

Каждый .txt файл содержит свои особые значения key-value, и когда начинается игра, движок Source 2 будет загружать их. Например, чтобы понять, какой юнит с какими параметрами должен заспавниться. Изменения в этих файлах не вступят в силу до тех пор, пока игра не начнется снова (только после перезапуска), так что будьте очень аккуратны с синтаксисом, в случае лишней или отсутствующей скобки: »  {  } , все KeyValues, которые идут после этой ошибки не будут учтены. KV чувствительны к регистру, поэтому также обратите внимание, чтобы вы написали всё правильно, и движок не выдаст ошибку.

На этом подготовку закончим. Сейчас самое время, чтобы попробовать написать Dota 2 скрипт (сценарий). Лучшим редактором я считаю Sublime Text Editor с этими 2 сниппетами (плагинами), которые добавляют дополнения для некоторых часто используемых функций и дают подсветку синтаксиса для KV и Lua.

  • Sublime Text 3
  • Sublime Text KeyValues ​​Пакет
  • Sublime Text Lua Пакет

Это будет просто вводный пример системы DataDriven, чтобы понять, что и как устроено, где что нужно менять.

Создайте новый документ в Sublime Text Editor и убедитесь, что вы используете Dota KV синтаксис (нажмите Ctrl + Shift + P и впишите Dota KV, чтобы выбрать его быстро).

Мы будем делать очень простую способность, которая наносит один урон для одной цели. Начните с написания имени способности между « « и без пробелов. Затем напишите BaseClass… и нажмите Enter, чтобы вставить авто завершение (вот зачем нужны были сниппеты выше). Перемещайтесь с помощью клавиши Tab.

«BaseClass» имеет важное значение для каждого DataDriven определения, заставляет игру интерпретировать, что это способность DataDriven. Предметы, юниты и герои имеют свои собственные базовые классы (BaseClass).

AbilityTextureName — иконка вашей способности или любое внутреннее название способности доты, например lina_laguna_blade.

Другое важное KV — AbilityBehavior, запишите AbilityB и используйте автозаполнение

Теперь нам нужно событие (event) способности — это триггер, когда определенное событие происходит с владельцем способности. Самый основной из них — OnSpellStart, добавьте его с автозаполнением, и вы увидите новый «уровень» созданным в {  }, это называется блок. В [ДЕЙСТВИЯХ], напишите «Damage» действие, какой-нибудь ключ и %AbilityDamage. Знак процента % представляет значение, которое будет принято где-то еще, в этом случае, в ключе-значении AbilityDamage. Добавить этот последний ключ, и первая основа заклинания должна выглядеть так:

"test_ability"
{
        "BaseClass"             "ability_datadriven"
        "AbilityTextureName"    "lina_laguna_blade"
        "MaxLevel"                      "1"

        "AbilityBehavior"       "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
        "AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
        "AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
        "AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"

        “AbilityDamage”         "500"

        "OnSpellStart"
        {
                "Damage"
                {
                        "Target"        "TARGET"
                        "Type"          "DAMAGE_TYPE_MAGICAL"
                        "Damage"        "%AbilityDamage"
                }
        }
}

Теперь, эту способность нужно добавить ​​в npc_abilities_custom.txt файл для героя или юнита, чтобы иметь возможность использовать её.

После добавления test_ability, которую вы только что создали, пора добавить способность и герою. В папке вашего мода есть папка heroes, которая имеет различные файлы с описанием способностей героя. Откройте любого героя и измените стандартную способность на test_ability.

Всякий раз, когда вам необходимо создать «маникен» (в игрострое это dummy unit), используйте в консоли -createhero (unit_name) enemy.

unit_name — имя, доступного для пика, героя или любое имя юнита, который также доступен. Можно использовать сокращенные имена, например «ancient», а не «ancient_apparition». Быстрая команда -createhero kobold enemy создаст противника — нейтрала кобольда. Полное имя юнита «npc_dota_neutral_kobold», но короткая команда будет работать. Вы также можете отключить перезарядки способностей путем написания -wtf (и -unwtf будет включать её).

Обширную документацию и углубленные примеры системы DataDriven можно найти на страницах Dota 2 Workshop Tools Wiki.


Lua скриптинг

Возвращаясь к папке game/scripts, мы увидим папку vscripts. Это как раз то место, где находятся все скрипты Lua. Lua довольно легко изучить и синтаксис очень прост. По-большей степени, программирование в Dota, на Lua — это просто знания готовых функций API, которые необходимо использовать (подробнее об этом позже).

Вот 4 главных разработок на Lua в Dota:

  • Игровая Логика
  • DataDriven RunScript
  • Hammer I/O (ввод / вывод)
  • Кастомный UI (пользовательский интерфейс)

Игровая Логика — Структура

В каждой пользовательской игре, должен обязательно присутствовать файл с именем addon_game_mode.lua . По крайней мере, до тех пор, пока логика игры находится именно в этом файле (и в самом деле, Valve сделали точно также в своём примере holdout), рекомендуется, чтобы вы использовали в этом файле только эти 3 функции:

  • Require (подключение файлов), через нее подключаем все необходимые файлы, которые будут использоваться в игровой логике, располагаются как библиотеки, то есть все функции внутри этих файлов можно использовать в любой точке.
  • Precache (предварительно кэшированные), когда игра начинается и игроки забирают своих героев, движок будет пытаться загрузить связанные модели / частицы / звуки этих героев. Если мы динамически используем ресурсы в Lua, перед предзагрузкой — то скорей всего будет какие-либо ошибки.
  • Activate , создает основу пользовательской игры и вызывает функцию инициализации.

Функция Precache была свёрнута в Sublime Text Editor (там где троеточие).

После того как выполнится Precache и Activate, первая функция, которая выполнится в файле lua — GameMode: InitGameMode ().

И здесь начинается игра с инициализацией всех видов правил и функций, которые зарегистрированы во всех GameRules и GameMode файлах. Для этого, многие переменные определены на начало файла, чтобы нормально организовать параметры, такие как настройки золота, убийства, кастомные уровни, и т.д.

Это синтаксис функции, примененной на GameRules, с одним параметром BOOL:

GameRules: SetHeroRespawnEnabled (ENABLE_HERO_RESPAWN)

Так же, как KV, Lua чувствителен к регистру. Расположение функций в основном файле Lua как правило, не имеет значения. Все строки скрипта внутри вызова функции будет выполняться один за другим, потенциально в том же кадре; один кадр в Dota — 1/30 секунды.

Обратите внимание на использование : двоеточия перед функцией. В Lua, от этого зависит доступ функции API игры. Мы говорим, что GameRules является HScript или handle (дескриптор — число, с помощью которого можно идентифицировать объект) . Дескрипторы в основном огромные таблицы, со всей соответствующей информацией. На странице Scripting API вы увидите много различных типов функций, которые можно использовать различные дескрипторы.

Глобальным функциям не нужны префиксы : в дескрипторах. Герои, юниты, способности и предметы имеют свои различные классы дескрипторов и пытаясь вызвать функцию несовместимого класса вызовет ошибку VScript — розовый текст в консоли и красным текстом на игровом экране.


Консоль

Вы можете получить доступ к игровой консоли, нажав клавишу `.

Это обеспечит тонну полезной информации для отладки. Различные цвета представляют различные «каналы» информации. По умолчанию все каналы находятся в том же журнале: вкладка по умолчанию. Очень рекомендуется делать свои собственные вкладки, чтобы разделять просмотр журнала.

В основном для Lua скриптинга, нам понадобится вкладка VScript. Сообщения о системе DataDriven в General Channel, в желтом канале что-то ещё, сделайте отдельный просмотр для него тоже.

img

Новые вкладки:

Консоль будет уведомлять, когда происходит ошибка в скрипте Lua, либо когда игра загружается (ошибка синтаксиса компиляции) или во время выполнения. В этой ошибке, я написал GameRules.SetHeroRespawnEnabled с   .   вместо   :   

img

Вы можете проследить ошибку и попытаться ее решить, прописать script_reload в консоли, чтобы перезагрузить скрипт (подгрузить пересохраненный файл) и проверить, была ли она исправлена.

Синтаксическая ошибка DataDriven, как правило, выглядит следующим образом:

img


События в пользовательской игре Source 2

Вторым сегментом функции InitGameMode являются Слушатели:

ListenToGameEvent('dota_player_gained_level', Dynamic_Wrap(GameMode, 'OnPlayerLevelUp'), self)

Структура этого ListenToGameEvent читается так:

Всякий раз, когда событие dota_player_gained_level срабатывает, выполнить функцию OnPlayerLevelUp (всё то что описано в ней).

OnPlayerLevelUp и GameMode просто имена функций и основного класса, как правило, вам не нужно беспокоиться о них, это просто слушатели. Dynamic_Wrap — функция для того, чтобы script_reload команда также перезагружала слушателей. script_reload перезагружает Lua скрипты во время игры, в отличие от DataDriven файлов, которые требуют, чтобы игра была полностью перезапущена заново.

3-й и последний главный элемент в InitGameMode, который сам определяет переменные для отслеживания информации. Они используют приставку self., которая является локальной ссылкой на GameMode, сквозь все функции внутри основного файла Lua. Добавление информации к объекту entity. называется «индексация» и в основном добавляет еще одну запись к большой таблице этого объекта. Это очень полезно, потому что эта информация хранится в дескрипторе объекта и видны повсюду (можно использовать везде), и ничего не поменяется, пока мы не переназначим или уничтожим его.

Достаточно теории, давайте посмотрим, как все это приходит. Мы добавим несколько простых строк сценария в OnNPCSpawned функции, которая является слушателем к npc_spawned и вызывается каждый раз когда спавнится юнит или герой на карте.

Давайте проанализируем содержание OnNPCSpawned функции по умолчанию:

-- NPCшка заспавнилась где-то на карте. Это также работает и для героев
function GameMode:OnNPCSpawned(keys)
        print(" NPC Spawned")
        DeepPrintTable(keys)
        local npc = EntIndexToHScript(keys.entindex)

        if npc:IsRealHero() and npc.bFirstSpawned == nil then
                npc.bFirstSpawned = true
                GameMode:OnHeroInGame(npc)
        end
end

Первая команда print будет печатать всё что находится » « в VConsole. Функция print родная в Lua, и принимает несколько параметров, разделенных запятыми, и конкатенацию (взаимную связь) строк с «..» , как это:

print("[BAREBONES]".."NPC","Spawned")

DeepPrintTable является глобальной Valve-игр функцией, которая будет отображать информацию с таблицей произошедшего. Для ключей в данном случае, это будет .entindex и .splitscreenplayerИндекс объекта является очень важным номером для ссылки на объект. Игнорируйте splitscreenplayer, это просто остатки старого движка Source, они никогда не использовались в Dota 2.

img

Следующая строка определяет локальную переменную. В Lua объем локальных переменных в блоке, в котором они были объявлены, ограничивается. Это хороший стиль программирования, использовать локальные переменные, только тогда, когда нужно. Локальные переменные помогут вам избежать загромождения глобальной окружающей среды с ненужными переменными и значениями. Кроме того, доступ к локальным переменным быстрее, чем к глобальным.

local npc = EntIndexToHScript(keys.entindex)

Это в основном чтение информации, которая предоставляется в событиях, и хранится в локальной переменной внутри этого вызова функции. В этом примере все Слушатели и их функции уже были обработаны, но для справки, вы всегда можете проверить In_Engine_Events вики-страницу, чтобы точно знать, какие параметры каждого события переносятся.

Локальная переменная npc HScript, типа дескриптора. Все изменения, сделанные в переменной NPC будет отражать на заспавненном юните.

Следующая строка сначала проверяет, если npc герой true (это исключает иллюзии и других юнитов), а также проверяет, если индекс.bFirstSpawned не назначен. Если оба условия выполняются, изменяется логическое значение = true и вызывается функция OnHeroInGame.

Чтобы закончить этот базовый урок Dota Lua, давайте изменим OnNPCSpawned функцию, так, что, если юнит с именем npc_dota_neutral_kobold заспавнится, подождать 1 секунду, а затем он умрёт сам по-себе:

function GameMode:OnNPCSpawned(keys)
   local npc = EntIndexToHScript(keys.entindex)

   if npc:IsRealHero() and npc.bFirstSpawned == nil then
       npc.bFirstSpawned = true
       GameMode:OnHeroInGame(npc)
   elseif npc:GetUnitName() == "npc_dota_neutral_kobold" then
       Timers:CreateTimer( 1.0 , function()
           npc:ForceKill(true)
       end)
    end
end

Здесь мы воспользуемся библиотекой Таймеров для простой односекундной задержки. Есть много различных функций таймера и их объяснения в timers.lua. BOOL на ForceKill это для того, чтобы воспроизвести анимацию смерти.


Таблицы

Таблицы наиболее важная структура, которую мы должны использовать. Как упоминалось ранее, все данные на объекты можно рассматривать как таблицу (хотя это технически указатель C ++ объекта), тем самым, вы сможете получить и установить значения по различным функциям API игры.

Есть некоторые функции в API, которые возвращают таблицу дескрипторов объектов.

Предположим, вы хотите найти все единицы порожденных (заспавненных) вблизи кобольдов и убить их. Функция FindUnitsInRadius может быть использована для этой цели, и включает в себя много параметров с разными типами, которые стоит объяснить:

table FindUnitsInRadius(int teamNumber, Vector position, handle cacheUnit, float radius, int teamFilter, int typeFilter, int flagFilter, int order, bool canGrowCache)

Параметры должны быть в таком порядке. Эта функция глобальная, поэтому не нужен handle: (дескриптор), но мы должны держать в таблице в переменные, такие как:

local units = FindUnitsInRadius(...)

Выяснить teamNumber — какая команда объекта находится в радиусе можно сделать с помощью GetTeamNumber () с помощью информации от дескриптора NPC. Что касается других параметров фильтра, вместо реальных чисел мы используем кучу констант, которые представляют различные числовые значения. Полный список констант на этой странице вики.

Вектор представляется в виде вектора (х, у, z) координат. Функция, чтобы получить позицию конкретного блока под названием GetAbsOrigin и принимает дескриптор (handle) NPC.

Что касается параметров кэша, просто поставьте ноль и false, от них не много пользы в целом.

Завершенная функция вызывающая героя в радиусе 500 от родившегося (заспавненого) кобольда будет выглядеть так:

local units = FindUnitsInRadius( npc:GetTeamNumber(), npc:GetAbsOrigin(), nil, 500, 
                                 DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, 
                     DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false)

Используйте дополнительные строки разрыва, чтобы сделать его более читабельным. Теперь мы хотим сделать итерацию (цикл, перебор) объектов в этой таблице, это осуществляется следующим образом:

for key,unit in pairs(units) do
    print(key,value)
    unit:ForceKill(true)
end

Ключ, юнита с выбранным именем относится к позиции и переопределяется его ценность внутри блоков таблицы, которые будут читать в парах (не пар из чайника). Использование ‘_’, как имя ключа поможет вам, если вы хотите, чтобы было ясно, что первый параметр не будете использоваться. Второй параметр — юниты, используется для итерации дескрипторов (handle) найденных юнитов.

Существует еще одна вещь, на которую стоит обратить внимание: проблема «подождите один кадр». Потому что все юниты фактически родились в (0,0,0) координатах, а затем переехали в нужное положение. Во многих случаях вы должны будете создать второй таймер с задержкой 0.03 сек (1 кадр) для некоторых сценариев, чтобы всё работало.

Теперь, OnNPCSpawned выглядит так:

function GameMode:OnNPCSpawned(keys)
    local npc = EntIndexToHScript(keys.entindex)

    if npc:IsRealHero() and npc.bFirstSpawned == nil then
        npc.bFirstSpawned = true
        GameMode:OnHeroInGame(npc)
    elseif npc:GetUnitName() == "npc_dota_neutral_kobold" then
        Timers:CreateTimer(0.03, function() 
            local units = FindUnitsInRadius( npc:GetTeamNumber(), npc:GetAbsOrigin(), nil, 500, 
                        DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, 
                    DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false)

        for key,value in pairs(units) do
            print(key,value)
            value:ForceKill(true)
            end
        end)
    end
end

DataDriven RunScript

Вторым по важности для скриптинга на Lua в Dota 2 моддинге — это «RunScript». С помощью RunScript мы выполняем код способности в виде файла .lua. Для RunScript нужно создать новый экземпляр lua-файла, поэтому глобальные переменные не стоит применять, все переменные должны быть локальными и / или назначены дескриптору.

Разделение файлов lua под каждую способность — хорошая идея, так как это также помогает разделить скрипты способностей, как с файлами txt.

Давайте вернемся к первой супер простой способности, которая будет наносить урон единичной цели (target damage), и добавим этот блок в событие способности OnSpellStart:

Синтаксис выглядит так:img

ScriptFile направляет относительно в папку /vscripts/. AbilityName — это название функции lua внутри этого файла.

Давайте вернемся к нашей простой способности (которую мы написали выше в статье), и добавим блок RunScript, а также создадим файл с кодом, чтобы подключение произошло успешно. Рекомендуется разделить все файлы Lua для каждой функции отдельно, а также создать отдельные папки для героев, юнитов, предметов и т.д. Это не обязательный пункт — на ваше усмотрение.

Добавьте блок RunScript в DD-событие — OnSpellStart. Теперь, при нажатии способности — будет подгружен файл example_script и выполнятся все строки, определенные в функции ScriptedAbility.

"RunScript"
{
    "ScriptFile"    "heroes/example_script.lua"
    "Function"      "ScriptedAbility"
}

В папке vscripts создайте папку heroes и в ней файл example_script с расширением .lua. Я рекомендую настроить эти файлы для автоматического открытия с помощью Sublime и в нем установить синтаксис Dota Lua.

Скрипт в этом примере, при срабатывании события передаст некоторую информацию первому параметру функции, который называться как угодно, но обычно это просто keys или event.

img

Внутри функции большинство скриптов возможностей начинаются с определения локальных переменных для целевых игровых объектов, которые выполнили определенные события. Основные целевые переменные, видимые на любом скрипте:

  • .caster, объект, который использовал спелл (способность, абилку).
  • .target, цель способности (в некоторых случаях может быть такой же, как и кастер)
    Пример
function ScriptedAbility( event )
    local caster = event.caster
    local target = event.target

    if target:GetHealthPercent() < 50 then
        target:Kill(nil, caster) -- Убивает этого NPC, с некоторыми параметрами
    end
end

Этот скрипт убьет юнита, на которого направлена способность, если процент здоровья составляет менее половины, и приписывает убийство тому, кто использовал эту способность (заклинателю).

Примеры скриптинга и Исходники

Существует множество примеров, расположенных в виде репозиториев на GitHub. С помощью этого руководства, теперь, вы должны понимать как скриптить логику вашей пользовательской игры. Исходников стандартных возможностей из Dota нет. Лучшим репозиторием на GitHub для поиска скриптов стандартных переписанных абиллок на lua — SpellLibrary. Это проект сообщества, в котором переписана каждая способность Dota с использованием KV и Lua.

Если вы хотите посмотреть как работают скрипты определенной кастомки, но автор не открыл исходники, выполните следующие действия:

  1. Подпишитесь на кастомную игру. Скачайте GCFScape, если у вас до сих пор нет его. Скачать GCFScape можно здесь — http://nemesis.thewavelength.net/?p=26
  2. Посмотрите на ссылку кастомной игры, исходники которой вам нужны. steamcommunity.com/sharedfiles/filedetails/?id=скопируйте_этот_номер
  3. Зайдите  папку Steam -> SteamApps -> workshop -> content -> 570 (это папка с контентом воркшопа доты)
  4. Найдите скопированный номер
  5. Откройте .vpk файл с помощью GCFScape и разархивируйте содержимое куда угодно. Теперь у вас есть доступ к папке со скриптами и закомпилинными моделями/частицами/звуками.

img

Whenever you have a doubt about how to use a particular GameAPI function, its possible to find examples all over GitHub by just writing the name of it, additionally filtering by lua like this:

Всякий раз, когда вы сомневаетесь в том, как использовать определенную функцию GameAPI, можно найти примеры по всему GitHub, просто записав имя этой функции, а также фильтруя lua следующим образом:

Главное убедиться, что это нужные файлы и они для Dota, а не другой игры 🙂 Дело в том, что названия функций API могут иметь одинаковые названия, хоть и относиться будут совсем не к Dota 2.

На этом с основами скриптинга можно завершить. Если у вас есть какие-то вопросы — вы всегда можете уточнить информацию в комментариях или на нашем форуме.

Источник: ModDota


Понравилась статья? Поделить с друзьями:
  • Как написать docker compose yml
  • Как написать dns сервер
  • Как написать dnb драмку
  • Как написать dll на python
  • Как написать discord bot