I wana be a dev … часть 2


Всем привет с вами Naikoraptor.

Сегодня мы поговорим о

  • Создании своей технологии
  • Системе migrations
  • О  слоях игры ( Collision )

(я специально затягиваю и откладываю entities на потом, ибо свои постройки имеют столько свойств что я боюсь что-либо попросту забыть, под них я выделю отдельный урок)

И так начнем:

Создании своей технологии

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

вот вам коды из API.

  • reload() — Эта функция позволяет перезагрузить изученную технологию на картах, полезно если вы внесли правки, а новую карту вам создавать не хочется.
  • forse = LuaForse — Какая сила применяет эту технологию (Игрок, строение, поротивник) эту строку пропускаем всегда, пока еще никто не нашел ей применения, да и впрочем бесполезна она, но любезный разработчик на всякий случай дал нам её.
  • name = string — Имя технологии
  • localised_name = string — Локализованное имя (Но ведь мы помним, что мы все делаем через locale.cfg?)
  • enabled = bool —  Строки блокировки на подобие строки в рецептах, в принципе ей не пользуются. Разве что разблокировать через скрипт
  • upgrade = bool — Является указание на то, улучшение это или нет
  • prerequisites = dictionary string → LuaTechnology  — Таблица технологий которые должны быть исследованы чтобы эта технология стала доступной для исследования
  • research_unit_count = uint — Какие и сколько баночек на 1 исследование
  • research_unit_energydouble — Сколько времени на 1 исследование.
  • order = string строка сортировки технологий

Теперь давайте сами попробуем сделать технологию нашим бочкам из прошлых примеров.

Для начала нужно «заблокирвоать» все наши рецепты у бочек, тоесть каждому рецепту добавляем строку: enabled = false либо enabled = "false" разницы никакой.

После этого создаем файл Tehnology.lua

В нем прописываем  data:extend({ })

Технологии как и все остальное прописываются в отдельных { },{ }, { }.

type = "technology",

name = "Bochka",

icon = "__base__/graphics/icons/fluid/empty-crude-oil-barrel.png", --[[ картинка технологии, и хоть в api про них ничего не сказано, но в игре их обязательно нужно указывать ]]

icon_size = 32, --[[ НЕ обязательно, но если картинку обрезает, указываем её размер (картинка всегда квадрат) ]]

effects = --[[Что будет делать Технология после исследования]]
{
{
type = "unlock-recipe",
recipe = "empty-barrel-M"
},

{
type = "unlock-recipe",
recipe = "fill-barrel"
},

{
type = "unlock-recipe",
recipe = "empty-barrel"
},
},

prerequisites = {},

unit =
{
count = 35, --Количество исследований
ingredients =
{
{"science-pack-1", 1} --[[ ресурс и количество, кстати чтобы не было ошибок я вам напомню что есть:

science-pack-1, science-pack-2,science-pack-3, alien-science-pack]]
},
time = 30 -- время одного исследования
}

И заходим в игру.1drGYQE

 

 

 

 

 

Технология работает, рецепты за ранее не доступны.

 

 

 

Migrations

По другому этот раздел можно назвать: «Обновления мода».

Ведь с первого раза не возможно сделать так, как хочется в итоге, верно? Поэтому часто может получаться так, что рецепты предметов будут меняться. Но как быть с теми картами где рецепты уже исследованы? Ведь там они останутся прежними хоть ты тресни (Игра исследованные технологии и рецепты сохраняет отдельно, для упрощения загрузки и экономии памяти).

 

Рассмотрим вполне реальную ситуацию: Когда мы поняли что баланс нарушен.

Допустим крафтить бочку для воды из 10 железа это дорого. Поэтому мы меняем в её рецепте на 9. Но зайдя на нашу карту на которой мы играем уже несколько Зилионов или бромилионов часов мы обнаруживаем что бочка все так-же крафтится из 10 железа. Мы думаем может мы что-то не так увидели, и открываем список технологий. Но там тоже указано то рецепт будет давать из 10 листов. Что-же нам делать?

Создаем в корне мода папку migrations.

Там создаем файл с «именем новой версии мода»

К примеру у меня сейчас он называется MyMod_0.1.1 Значит я создаю в папке файл MyMod_0.1.2.lua

Этот файл подключать не нужно!

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

Чаще всего в нем будем прописывать вот это:

for i, player in ipairs(game.players) do
player.force.reset_technologies()
player.force.reset_recipes()
end

Это обновляет все рецепты и все технологии.

Теперь заходим в info.json и там меняем с 0.1.1 на 0.1.2 и переименовываем папку мода таким же образом

Готово! Мод обновлен!

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

 

Слои игры ( Collision )

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

Например Слой воды и слой Строений. Ведь ни одно здание не может быть поставлено на воду верно?

Вот список слоев:

  • "ground-tile" - Слой перемещения персонажа (1-й слой)
  • "water-tile"  - Слой не доступный ля перемещения персонажа (0-й слой)
  • "resource-layer" - Слой Руд (3-й слой)
  • "floor-layer"    - Слой Бетона либо кирпичей (2-й слой)
  • "object-layer"   - Слой объектов (Высший 4-тый слой)
  • "player-layer"   - Слой персонажа (Высший 4-тый слой)

Заметили что 2 слоя находятся на 1-м уровне?  Слой персонажа не используется ничем кроме персонажа, Хотя он и эквивалентен слоям объектов.

Все это хотя и не особо важно, но дает простор для создания интересных штук для некоторых. Например когда я баловался с этими параметрами я создал нечто вроде Блоков «моста» которые ставяться на воду, но позволяют ставить поверх них что угодно. Или напрмиер я создал » рыбную ферму» которая ставиться только на воду.

Строки слоев есть у всех объектов и поверхностей (entities и tiles) Но думаю это уж желающие сами найдут

Comments:

Добавить комментарий