опубликовали  pocarski, stringweasel, Nanogamer7, Conor_, Therenas, Firerazer

На 37-й неделе, когда выходит выпуск Alt-F4, мы представляем: Выпуск №37! Какой сюрприз! В нем pocarski, вернулся с еще более доступными объяснениями того, как можно оживить и оптимизировать свою базу с помощью всего лишь нескольких комбинаторов!

Комбинаторы 2: Расширенная логистика pocarski

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

опубликовали   Ph.X, stringweasel, Nanogamer7, Conor_, Therenas, Firerazer

На этой прекрасной мартовской неделе Ph.X рассказывает об  системе для размещения базы с использованием изолированных модулей и соединения их через сеть LTN. Черпая вдохновение из разработки программного обеспечения и извлеченных из этого уроков, Ph.X использует концепции модульного программирования в своих интересах.

Кроме того, среди других новостей мы предлагаем список рассылки, на который вы можете подписаться! Если вы не просматриваете Reddit, форумы или даже наш Discord регулярно, теперь мы предлагаем вариант популярной концепции списка адресов электронной почты. Просто введите здесь свой адрес электронной почты, и каждую пятницу вы будете получать уведомления о выпуске новейшего выпуска. Мы, конечно, всегда будем использовать это только для сообщений Alt-F4 и не будем спамить вас несущественной чушью.

Рецепто-Ориентированная Факторио Логистика (Recipe-Oriented Factorio Life) Ph.X

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

Что такое «РОФЛ»

Люди с опытом программирования должны были слышать о модульном объектно-ориентированного программировании, теории, которую Рецепто-Ориентированная Факторио Логистика(РОФЛ) / Recipe-Oriented Factorio Life (ROFL) стремится подражать. Модульное программирование — это метод разработки программного обеспечения, который подчеркивает разделение функциональных возможностей программы на независимые, взаимозаменяемые модули, каждый из которых содержит все необходимое для выполнения единственного аспекта желаемой функциональности. В РОФЛ мы делим всю фабрику на независимые, взаимозаменяемые заводские модули, каждый из которых содержит все необходимое для обработки только одного рецепта.
Читать полностью

Всем привет с вами 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) Но думаю это уж желающие сами найдут