Показать сообщение отдельно
Непрочитано 15.08.2010, 17:19   #1
Аватар для Casper
Привидение с мотором

Автор темы (Топик Стартер) Как создавать рецепты предметов

Как создавать рецепты предметов

Перевод by С@$p3® по материалу сайта Hiveworkshop
Автор - Toolbox

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

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

Теория «Ручной сборки».

Суть «ручной сборки» состоит в Факторе рецептов и неограниченном количестве Ингредиентных факторов. Например, для создания Магического меча вы используете ингредиенты Меч и Магическая Пыль, наряду с Рецептом Магического Меча.

Ручная сборка используется только тогда, когда рецепт фактически стоит что-либо. Вы покупаете Меч за 500 зол., Магическую пыль за 250 зол., и они все соединяются, чтобы в конечном итоге создать Магический меч. В случае если рецепт не стоит ничего, используют Автоматическую сборку.



Пример ручной сборки из Доты. 2 ингредиента с рецептом производят одно целое: Пояс+Топор+Рецепт=Меч.


Теория «Автоматической сборки»

Суть авто сборки, состоит в том что используется любое число ингредиентных факторов, не имея рецептурного фактора. Было бы лучше если бы все предметы содержали так же рецепты, которые отображаются в магазине и инвентаре, отображая список предметов необходимых для сборки. А при авто-сборке, рецепты в магазине должны быть невозможны для покупки(в Доте рецепты в таких ситуациях покупаются за древесину, которую игроки никогда не получают).

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

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



Пример из Доты: 2 предмета без рецепта, Кольцо + Амулет = Сфера

Ручная сборка против автоматической.

Комбинируемые предметы, могут быть серьезным спором при балансе, но к счастью сейчас есть достаточно путей для настройки этого. Когда вы комбинируете два или больше предметов в один, который содержит такие же показатели, вы по сути, освобождаете слоты. Это довольно весомый аргумент для Героев карты, как например в АоС или РПГ.
Это заставляет вас включать, ценовой тэг, за дополнительное место в инвентаре, и добавлять рецептурный фактор, с довольно высокой стоимостью.

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

(В примере, например, Меч предоставляет +10 атаки, а Магическая Пыль не добавляет ничего. Но при сборке Меча и Пыли, вы получаете Магический Меч который добавляет +10 атаки и Отравленное оружие. Вы не добавляете за пустые слоты освобожденные при комбинировании с Магической пылью, просто устанавливаете цену ингредиента, как бы Отравленное оружие было бесплатным.)

Настройка «ручной сборки»

Для создания рецепта ручной сборки, вам понадобятся: - ингредиентные факторы(еще раз Меч и Волшебная пыль) Рецепт-маска, Свиток рецепт (вы можете использовать любые термины) и в естественно конечный элемент.
Возможно, вы заметили, что в Доте, в магазинах, все рецепты напоминают конечный продукт. Но когда они покупаются сами по себе то напоминают свернутые свитки. Я называю магазинные рецепты «масками» и рецепты в инвентаре «свитками», разница лишь в том что один выглядит как свиток, а второй как итоговый продукт.



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



Триггерно это реализуется, когда вы покупаете рецепт из лавки, то он мнгновенно заменяется рецептом «свитком». Рецепт свиток, это тот который обработан и используется во всех Рецептурных триггерах. Этот способ добавляет больше лишнего на карту, но он эстетичнее, но проще для восприятия и не мешает. (Если вы назначите рецепт только в виде свитка, то это будет гораздо труднее для мгновенного определения его в лавке. Если же только как итоговый продукт, то он будет мешать отличить предмет от рецепта в инвентаре.)
Затем, когда все ингредиенты собраны и Рецепт активирован, удаляют все элементы и помещают итоговый продукт.



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


Настройка «автоматической сборки».


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



На примере Доты авто-комбинирующиеся рецепты не стоят золота, но стоят древесину.



В примере Доты это конечный продукт с авто собираемым рецептом.

Триггеры для ручного комбинирования.
Теперь мы добрались до сути. Как сделать это все работающим? Есть много спецефических методов, техник, вариаций, все зависит от того чего вы хотите. Я не собираюсь исследовать все. Вот один из способов сделать ручную сборку:

Код:
Mask2Scroll: Замена Рецепта Маски на Свиток.
 GoP Mask2Scroll
  События
   Unit - A unit Acquires an item
  Условия
   (Item-type of (Item being manipulated)) равно to Gloves of Power (Mask Recipe)
 Действия
   Item - Удалить (Item being manipulated)
   Hero - Создать Recipe: Gloves of Power and give it to (Hero manipulating item)
Код:
Сборка: Сборка предметов.
 GoP Combine
  События
   Unit - A unit получает предмет
  Условия
   Or - Any (Conditions) are true
   Conditions
     (Item-type of (Item being manipulated)) равно Gauntlets of Ogre Strength +3
     (Item-type of (Item being manipulated)) равно Gloves of Haste
     (Item-type of (Item being manipulated)) равно Recipe: Gloves of Power
   ((Hero manipulating item) has an item of type Gauntlets of Ogre Strength +3) равно Да
   ((Hero manipulating item) has an item of type Gloves of Haste) равно Да
   ((Hero manipulating item) has an item of type Recipe: Gloves of Power) равно Да
 Действия
   Set Ingredients = 3
   Set RecipeFactor[1] = Gauntlets of Ogre Strength +3
   Set RecipeFactor[2] = Gloves of Haste
   Set RecipeFactor[3] = Recipe: Gloves of Power
   For each (Integer A) from 1 to Ingredients, do (Actions)
   Цикл - Actions
     Set FactorCleared[(Integer A)] = Нет
   For each (Integer A) from 1 to 6, do (Actions)
   Цикл - Actions
    For each (Integer B) from 1 to Ingredients, do (Actions)
     Цикл - Actions
      If (All Conditions are True) then do (Then Actions) else do (Else Actions)
         Если - Условия
         (Item-type of (Item carried by (Hero manipulating item) in slot (Integer A))) равно RecipeFactor[(Integer B)]
           FactorCleared[(Integer B)] равно Нет
         То - Действия
         Item - Remove (Item carried by (Hero manipulating item) in slot (Integer A))
         Set FactorCleared[(Integer B)] = Да
         Еще - Actions
   Hero - Create Gloves of Power and give it to (Hero manipulating item)
Здесь у нас есть Gloves of Power с факторами ингредиентов Gauntlets of Ogre Strength +3 & Gloves of Haste и рецепта.
Вероятно вы заметили что я сделал проверку для каждого элемента в начале триггера. Наверное это хороший вариант если вы собираетесь проверять большое количество предметов, чтобы проверять их массивами вместо проверки каждого отдельно. Существует несколько путей, но этот вариант для вас.

Триггеры для автоматического комбинирования.

В этом случае триггеры практически одинаковы; просто не нужен триггер Mask2Scroll.Вот пример:

Код:
 RoIS Combine
  События
   Unit - A unit получает предмет
  Условия
   Or - Any (Conditions) are true
   Условия
     (Item-type of (Item being manipulated)) равно Ring of Protection +2
     (Item-type of (Item being manipulated)) равно Ring of Regeneration
   ((Hero manipulating item) has an item of type Ring of Protection +2) равно Да
   ((Hero manipulating item) has an item of type Ring of Regeneration) равно Да
 Действия
   Set Ingredients = 2
   Set RecipeFactor[1] = Ring of Protection +2
   Set RecipeFactor[2] = Ring of Regeneration
   For each (Integer A) from 1 to Ingredients, do (Actions)
   Цикл - Действия
      Set FactorCleared[(Integer A)] = Нет
   For each (Integer A) from 1 to 6, do (Actions)
   Цикл - Действия
     For each (Integer B) from 1 to Ingredients, do (Actions)
     Цикл - Действия
        Если (All Conditions are True) then do (Then Actions) else do (Else Actions)
          Если - Условия
         (Item-type of (Item carried by (Hero manipulating item) in slot (Integer A))) равно RecipeFactor[(Integer B)]
         FactorCleared[(Integer B)] равно Нет
         Иначе - Действия
         Item - Удалить (Item carried by (Hero manipulating item) in slot (Integer A))
          Set FactorCleared[(Integer B)] = True
         Также - Действия
   Hero - Create Ring of Inner Strength and give it to (Hero manipulating item)
Взгляните сами, они практически идентичны, хотя…
Теперь, когда у нас есть второй триггер, вы можете заметить что я использовал целую переменную Ингредиентов и Фактор Рецепта – переменный массив типа «Тип Предмета», для цикла и увеличения эффективности процесса. Вы можете использовать все это на след. Уровне, так как я сохранил все данные к переменным в триггере Инициализации, и просто читая все, включая условии триггеров.
Примечание переводчика: Лично мне данный тип триггера для сборки вручную не особо по душе посоветую еще такой вариант. Хотя выбирать вам…


Код:
Combination
  События
   Unit - A unit получает предмет
  Условия
   ((Triggering unit) has an item of type Item1) равно Да
   ((Triggering unit) has an item of type Item2) равно Да
   ((Triggering unit) has an item of type Recipe) равно Да
 Actions
   Item - Удалить (Item carried by (Triggering unit) of type Item1)
   Item - Удалить (Item carried by (Triggering unit) of type Item2)
   Item - Удалить (Item carried by (Triggering unit) of type Recipe)
   Hero - Создать Weapon and give it to (Triggering unit)
Casper вне форума Отправить сообщение для Casper с помощью ICQ Отправить сообщение для Casper с помощью Skype™ Ответить с цитированием
Сказали спасибо: