I wana be the dev… часть 1

Привет опять, и сразу к сути, сегодня мы поговорим про:

  • Создание своего рецепта
  • Систематизацию предметов внутри игры и свои группы
  • Локализация игры

И в качестве бонуса (Решил опередить время ради одного человека, что написал в вк) :

  • Как отключить элементы обычной игры либо изменить их

Создание своего рецепта

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

Не понятно? (А я уверен что не понятно).

Давайте объясню на примере нашей бочки. Пока у неё нет рецепта, она не видна в списке, Однако если мы откроем список предметов (например в сундуке запроса), то там она будет.

Но как только мы добавим нашей бочке хотя-бы 1 рецепт её получения, то она сразу же появится в списке в инвентаре (За исключением пары моментов, про них я расскажу чуть позднее).

Теперь перейдем к структуре рецептов, прописываются они так-же как и итемы, то есть в data:extend({ }) и в отдельных  { }, { }

 

Начинается рецепт с

type = "recipe",

А далее идут все так-же ключевые слова:

  • name = string — Имя рецепта (Лучше создавать имя рецепта идентичное с именем предмета,так проще )
  • category = string — Категории рецептов. Есть некоторые категории которые ограничивают возможность доступа машин или игрока к крафтам (это может быть категория «smelting», которая разрешает обработку предмета в печи, но запрещает его сборку, либо «oil-processing» которая разрешает крафт только в Нефте-перерабатывающем заводе, остальные стандартные категории можно найти в самих рецептах в  base, либо создать их самому но об этом в другой раз) 
  • energy_required = float — Время в секундах, необходимое для крафта (если пропустить сроку то автоматически будет указано 0,5)
  • ingredients = array of ingredients — Указать ингредиенты можно 2-мя способами, кратким и полным.

При кратком способе достаточно указать список предметов и их количество. Например

 

ingredients = {

{"iron_plate",5},

{"wood",10}

} --Тоесть тут мы требуем 5 Железа и 10 дерева на крафт.

 

Однако при кратком способе нельзя указывать жидкости ( к тому-же для этого нужна специальная категория)

Полный способ требует еще объявление типа ингредиента, то есть наша запись из прошлого примера будет выглядеть так:

 

ingredients = {

{type="item", name="iron_plate", amount=5},

{type="item", name="wood", amount=10}

},

 

 

Далее:

  • enabled = bool — Если эту строку не указывать, то рецепт будет доступен всем и сразу,  если указать false ,то тогда потребуется его разблокировать (например исследование либо скрипт).
  • result = string — Указывает результат после крафта (пример result = "iron_chest" )
  • result_count = int — указывает сколько итемов получится после крафта

Следующие строки работают как на итемы так и на рецепты, но о том зачем рецептам картинки я расскажу позже.

  • icon = string
  • group = string
  • subgroup = string
  • order = string

Теперь перейдем к специальным строкам которые доступны только для жидкостных крафтов:

Строки result и result_count заменяются единой строкой схожей с полной записью ингредиентов,

пример:

results=
{
{type="fluid", name="heavy-oil", amount=3},
{type="fluid", name="light-oil", amount=3},
{type="fluid", name="petroleum-gas", amount=4}
},

 

А теперь я поделюсь с вами одной фишкой: Если вы хотите делать несколько предметов но устройство  позволяет вам делать только 1 на выходе, то можете делать его через категорию oil-procesing, но в ингредиенты и в выход указывать предметы не являющиеся жидкими.

А теперь давайте все проверим на практике:

Помните нашу бочку? Все что мы успели, так это создать её, но по Screenshot_16идее она должна переносить воду в более удобное место. Делать это мы будем так-же, как и разработчики поступали с бочками нефти (2 предмета и 2 крафта).

По этому Быстренько переходим в наш мод и создаем там вторую бочку (к примеру с капелькой на иконке)

Теперь В папке с бочкой создадим файл recipes.lua (Хотя при желании вы можете прям тут прописывать рецепты, как и итемы, но лучше все держать раздельным, это упросит вам ориентирование в моде)

Для начала создадим рецепт самой бочке. Не будем выдумывать велосипедов и укажем ей просто 10 железных листовScreenshot_19

data:extend({
{
type = "recipe",
name = "empty-barrel-M",
ingredients ={{"iron-plate",10}},
result="WaterB", --[[ Вобщето я советал вам создавать предмет и рецепт
с одинаковым именем, но кто я такой, что-бы свои советы слушать?]]
},
})

Кстати после появления рецепта наша бочка появилась в списке

Теперь дадим Бочке возможность брать в себя воду и отдавать назад, добавив 2 рецепта:

 

{
type = "recipe",
name = "fill-barrel",
category = "crafting-with-fluid",
subgroup = "barrel",
order = "b",
ingredients =
{
{type="fluid", name="water", amount=30},
{type="item", name="WaterB", amount=1},
},
results=
{
{type="item", name="WaterBF", amount=1}
}
},

{
type = "recipe",
name = "empty-barrel",
category = "crafting-with-fluid",
subgroup = "barrel",
order = "c",
icon = "__base__/graphics/icons/fluid/empty-crude-oil-barrel.png",
ingredients =
{
{type="item", name="WaterBF", amount=1}
},
results=
{
{type="fluid", name=water", amount=30},
{type="item", name="WaterB", amount=1}
}
},

 

Заходим в игру и проверяемScreenshot_20

 

 

 

 

 

 

 

Систематизация (Order, Group, Subgroup)

Чтобы проще представить о чем идет речь, вспомните сетку крафтов, Именно там отмечаются все предметы и их рецепты. Теперь давайте разберемся что и как работает.

У рецептов и предметов есть 3 строки систематизации, Это group, subgroup, order.

Теперь конкретика:

group отвечает за то в какой вкладке находится итем\рецепт.

subgroup говорит в какой строке будет находиться предмет

order отвечает какой он будет по порядку.

Удобно то что  group никто и никогда не использует, так как subgroup уже содержится в некоторой группе (Формально subgroup решает не номер строки а просто подгруппу, но на деле выходит просто разбиение на строки), сортировка выполняется по алфавиту — то есть с начало будет стоять предметы с order’ом » a » потом «aa» потом например «ab» потом «b», и даже если буква пропущена, то ничего страшного, он просто поставит их по алфавиту из возможных.

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

Именно этим сейчас и займемся:

Создаем файл group.lua

Пишем data:extend ({ })

И сразу запоминаем: type = "item-group"   и type = "item-subgroup"

 

Первый создаст вкладку, второй строку.

Давайте начнем с Группы:

{
type = "item-group",
name = "MyModItems",                            --Название для кода
icon = "__base__/graphics/icons/big-biter.png", -- Картинка (можете свою сделать)
inventory_order = "a",                          -- Сортировка в инвентаре (Будут первыми так как А первая буква :] 
order = "d",                                    -- номер вкладки (4-тая )
},

И теперь под группа:

{
type = "item-subgroup",
name = "MyModItems-resourses", -- Имя для кода
group = "MyModItems", -- номер вкладки
order = "c", -- номер строки (3-тья)
},

 

Теперь давайте поменяем сортировку в наших бочкахBVgpqQW

в саб группу рецептов и предметов вписываем

MyModItems-resourses

а в Ордер его порядок (там уж сами как удобнее)

И конечно проверяем в игре (не забудьте подключить этот файл)

 

Локализация игры

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

Переходим в корневую папку Мода и Добавляем там папку locale

В ней создаем папку языка: для русского — ru, для английского — en, более подробно можете посмотреть в папке игры, там много вариантов. В папке создаем locale.cfg

и открываем его нашим ноутпадом.

ВАЖНО: этот файл не нужно подключать, потому-что как мы помним, папка языков зарезервирована под именем locale.

сам же перевод интуитивно понятен, я просто покажу как мы переименуем наши бочки:

в фаил locale.cfg пишем:

 

[item-name]

WaterB=Бочка для воды

WaterBF=Заполненая бочка для воды

[recipe-name]

empty-barrel-M=Бочка для воды

fill-barrel=Заполнить бочку

empty-barrel=Опустошить бочку

 

То-есть в [скобках] прописана категория

До «=» пишется название в коде

После «=» перевод.

ВАЖНО: не ставьте пробелов до и после равно (вообще лучше без лишних пробелов) игра считывает их как символы и на выходе вы  получаете пустые иконки предметов, вместо любого текста.

ТОЖЕ ВАЖНО: в ноутпаде есть кнопка смены кодировки, всегда устанавливайте 8-ми битную кодировку в UTF-8 без BOM

Более подробно название категорий можно найти в base.

А, вот еще фича:

 

[item-description]

WaterBF=На моем рисунке - Капля!!!

Таким образом можно делать подпись для Предметов\рецептов и прочего.

 

 

БОНУСНАЯ СЕКЦИЯ

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

Создаем любой Lua фаqл (я предпочитаю changes.lua)

туда вписываем без всяких скобок

data.raw["string"]["string"].параметр =

В первые скобки вносим type объекта, во второй его имя в коде, в паремтр строку которую хотим изменить, и собственно её новое значение.

Пример

data.raw["ammo"]["flame-thrower-ammo"].magazine_size = 500 Эта строка сделает Обьем магазина для огнемета равным 500 едениц. Или например нам нужно чтобы огнемет лежал в нашей вкладке мода. Тогда делаем так

 

data.raw["ammo"]["flame-thrower-ammo"].subgroup =

data.raw["ammo"]["flame-thrower-ammo"].order =

И так далее.

Теперь по поводу того как можно отключать вообще Итемы.

Если этот итем изначален (например пистолет)

data.raw["gun"]["pistol"].enabled = falseТак как нет ни одной технологии которая его разблокирует, то его не станет.

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

На сегодня все

I wanna be a Dev… часть 0

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

Если точнее, то мы рассмотрим:

  • Общую архитектуру модов
  • Сортировку файлов в моде
  • Подключение файлов
  • Создание простейшего предмета

 

Общая архитектура модов

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

Помимо модов там же лежит файл mod-list.json — этот файл отвечает за то, какие моды включены на данный момент, через него также можно выбрать, какие моды будут включены или выключены (без необходимого входа и перезахода в игру).

RCs9mz2

 

Сами моды могут содержаться как в папках, так и в архивах (первое — удобнее для редактирования, второе — для распространения).

Важно то, что архив или папка мода должна иметь имя составленное из имени мода, подчеркивания, и версии мода. Это корневая папка мода.

Пример: MyMod_0.1.4

 

Версия мода всегда записывается как 3 числа через точки. Разработчики объясняют это так:

Первое — Крупные обновления, Кардинальные изменения.

Второе — мелкие обновы, добавление пары предметов,

Третье — багфиксы

 

Теперь перейдем к архитектуре самого мода:

Существуют  «зарезервированные» и «свободные» файлы и имена, а также единственный обязательный файл.

Давайте, наверное, сразу создадим его, и не будем к этому возвращаться:Screenshot_21

создаем папку нашего мода, а в ней создаем файл «info.json».

Этот файл — лицо мода. Он отвечает за его отображение в списке модов в игре.

В файле прописываем операторные скобки {  } .

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

  • name — имя мода
  • version — версия
  • title — имя мода в списке
  • dependencies — зависимости (например в серии Боб-модов есть зависимости от других модов)Screenshot_22
  • author — имя создателя
  • descriprion — описание мода

 

Вы можете добавить и свои строки, но не забываем: «краткость — сестра таланта».

Теперь можно разобраться со «свободными» и «зарезервированными» именами.

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

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

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

  • campaigns
  • locale
  • Scenarios
  • migration

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

Сортировка файлов в моде

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

     Метод разработчиков3YC0bAt:

В оригинальной игре все предметы, рецепты, и файлы содержаться в папке Prototypes. Графика — в папке Graphics. Звуки — в Sounds. Тем самым разработчики разбивают все файлы по типу.

Внутри папок же они проводят разбиение по подтипу: например, в Prototypes идет рабиение на папки Recipes, Entity, Items, Technologies. Это гарантирует вам быстрое нахождение предмета в папках, но, если у вас будет много всего, будет довольно трудно найти конкретный предмет.

    Метод Naikoraptor’a  (что ник нечитаемый, что текст до правок …)  (re: это читается как: Найко раптор) (Нарко Йаптор ?..)

Мне кажется, что при создании предмета все его компоненты проще держать рядом, поэтому я создаю папку всех «объектов», а в ней под папки для каждого «явления»Screenshot_23

Например, в папке Prototypes лежит папка Carbon, в ней лежат файлы: Item.lua, recipe.lua, technology.lua, Carbon.png, Carbon_Tech.png.

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

 

Подключение файлов.

Первым делом в корне нашего мода создадим файл data.luaScreenshot_24.

Этот файл будет автоматически запускаться при включении мода.

Любые другие файлы lua будут игнорироваться.

Давайте, для примера, создадим в нашем моде папку Items а в ней создадим Items.lua.

 

Теперь открываем вновь наш корневой файл data.lua и запоминаем новую команду:Screenshot_25

require( )

 

Команда прописываеться в начале файла.

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

Названия папок пишутся с учетом регистра и разделяются точками. Сам файл пишется без расширения «.lua».

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

Таким образом осуществляется подключение всех файлов lua (звуки и графику рассмотрим позже).

 

 

Теперь немного от себя: как это можно выгодно использовать?

Помните, я советовал вам объеденять файлы в некоторые объекты и делать сортировку по принадлежности к тому или иному предмету? Так вот, именно тут это очень пригодится.

В каждой папке предмета(тот же «Carbon» из примера) создаем data.lua, а в ней подключаем все компоненты.Screenshot_26

 

А в главном файле подключаем именно этот data.lua файл. Таким образом, объект со своим рецептом будет представлен одним единственным файлом, который можно легко включить или выключить при желанииScreenshot_27.

 

 

 

 

 

Создание своего предмета

И вот, мы плавно перешли к тому, чтобы создавать уже нечто свое.

Самое главное в создании мода — это идея. Если вы не знаете  что делаете — результат будет ущербным. Вам нужна задумка ( желательно оригинальная) чтобы что-то написать.

Для примера, я создам бочки полные воды (по аналогии с бочками нефти). Зачем? А помните, при создании карты можно указать чтобы вода была только в центре карты? А вдруг, нам понадобится вода на нашей «станции» за три-девять земель, и, тянуть туда трубу — не выгодно, а возить поездом — самое то.

Создадим папку отведенную под этот объект (да, я буду использовать свою сортировку, но вы можете делать как считаете нужным), там создаем data.lua и item.lua

Окрываем Фаил item.lua и прописываем туда : data:extend({    })

Внутри таких двойных скобок будет идти перечисление всех объектов. Тем самым мы описываем их базовые свойства.

Каждый объект внутри «data:extend»  прописывается в своих собственных скобках { }, { }, { }.

И не забывайте ставить запятые между  скобками, иначе вас ждет ошибка.

Далее идет заполнение предмета: оно довольно простое, так как вам нужно заполнять не все строки, а только те, которые вам нужны (другими словами вам нужно заполнять то, что вам нужно заполнять 😆 ) .

Сейчас я дам вам список и описание ВСЕХ возможных строк предмета, а после — пример создания нашей «бочки».

  • type = string — Эта строка сообщает игре что перед ней предмет (другие типы будем изучать по мере выхода гайдов, тут сразу не раскажешь).
  • icon = string — Указывает путь к картинке файла (и к файлу картинки. ага).
  • name = string — Задает этому предмету имя  ВНТУРИ МОДА, а не в самой игре. Имено по этому имени мы будем сообщать другим частям кода что мы хотим, но чтобы не запутаться пишите так, как оно есть (только латиницей).
  • localised_name = string — Дает локализованое имя предмету (его видно в игре). Но мы не будем никогда использовать эту строку потому, что есть простой и правильный способ локализации (об этом в след. раз).
  • stack_size = uint — Наверняка, некоторое  испугались типа «Uint» ? Не пугайтесь, это просто длинный 32-bit unsigned integer (32-битный беззнаковый целочисленный тип. числа в пределах от 0 до 4 294 967 295. неплохо, да ?). Данный параметр отвечает за размер стака.
  • fuel_value = float — Если вы укажете эту строку, то сообщите игре что этот обьект — топливо, и его нужно совать в слот для топлива (в печи тоже). Здесь можно указывать сколько объект дает энергии при сжигании. Например, уголь дает 4.0, а твердое топливо — 25.0 Можно писать и дробью. (float — знаковое число с плавающей точкой. минусовое значение — бессмысленно, а число может изменяться в пределах 1.40129846432481707e-45 .. 3.40282346638528860e+38) .
  • order = string — Строка, указывающая в каком порядке сортировать предметы. Об этом в следующем гайде. Пока ставьте «aaa» (латиница).
  • group = string — Строка сортировки по группе. Также оставим на потом (не заполняйте её).
  • subgroup = string — Строка сортировке по полосе. И её оставим на потом (указывайте raw-material)
  • place_result = string — Это указание на то, что будет, если поставить объект на землю. О постройках мы также будем говорить.
  • speed = float — Указывает на скорость предмета, если это оружие или инструмент.
  • magazine_size = float — Указывает количество патронов в обойме, если это оружие.
  • resistance = Resistance — Еще один «волшебный» тип данных. О нем также позже. Эта строка отвечает за сопротивления брони к урону, если предмет — броня.
  • item_to_clear = LuaItemPrototype — Эта строка указывает необходимый ресурс, с помощью которого можно отчистить Чертеж от содержимого.
  • stackable = bool — Если стоит false, то это запрещает предмету стакаться. Однако, проще это делать указывая stack_size = 1.
  • module_effects — Эта строка вовсе не имеет типа. Она отвечает за эффекты если создаваемый предмет — модуль эффектов.
  • flags = string — самая интересная строка. Наделяет предмет свойствами(флагами). Об этом, как и практически о бо всем, я раскажу, но не сейчас.

А теперь создадим нашу бочку:

data:extend({
{

type = "item",

name = "WaterB",

icon = "__MyMod__/Prototypes/WaterT/empty-barrel.png",

flags = { "goes-to-main-inventory" },

subgroup = "raw-material",

order = "aaa",

stack_size= 10,

},
})

 

 

Теперь расскажу вам о двух пропущенных вещах: флаги и картинка.

Для создания простого предмета нужно всего 1 из 2 флагов:  «goes-to-main-inventory» или «goes-to-quickbar».

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

Теперь по поводу картинок: картинка должна иметь формат png и размер 32×32. Иначе игра выдаст ошибку. Если вам лень придумывать и рисовать картинку (или если не умеете рисовать) — вы можете подключить уже готовую из игры.

Идем в папку base, и там в графике в иконках ищем нашу бочку.

вот вам на всякий случай её путь : __base__/graphics/icons/fluid/empty-barrel.png

Копируем себе такую в папку с файлом (можете подрисовать туда что-либо) и прописываем вот так  icon = "__MyMod__/Prototypes/WaterT/empty-barrel.png",

 

Расскажу поподробнее про то, как подключать картинки:

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

после, через «/» указываются названия папок, а после и сам файл с раширением.

 

Теперь подключаем наш итем в data.lua и заходим в игру (проверяем на ошибки). Если их нет и игра Screenshot_28запустилась, то все «ок». Однако, предмет пока что мы сможем видеть только, например, в сундуке запроса, так как он не имеет рецепта.

Ну, вот и все. Мы создали наш первый предмет (и, хотя он не имеет рецепта, его можно найти в списке предметов). О том, как добавлять рецепты раскажу в след раз, иначе будет слишком много информации (и слишком много придётся кому-то редактировать текста… 😥 ).

Factorio 0.12.28 список изменений, скачать игру

Стабильная версия Factorio обновилась до 0.12.28!
Скачать игру можно на нашем сайте.

Список изменений версии 0.12.28(Changelog):

На Английском языке (оригинал)
Changes:
— Added —port to specify which network port the game should use, when hosting with —start-server or —mp-load-game.
This overrides the port specified in the config file.
Bugfixes:
— Explosion sounds are now not deafeningly load, when multiple things explode at once.
— Fixed LuaForce::clear_chart() would crash game if called while chart was refreshing.
— Fixed crash when refreshing chart while Direct3D device is lost.
— Fixed —config option not complaining about nonexistent file.
— Fixed crash when clicking on electric pole that was still in latency state.
— Fixed freeze of server with more than 255 different players in the savegame.
— Fixed crash when exiting the map editor while holding power armor on the cursor.
— Fixed map exchange string not using segmentation or water size correctly.
— Fixed Lua game_view_settings::showentityinfo read/write issues.
— Fixed fog-of-war does not work correctly in New Hope level 1.
— Fixed inconsistent Offshore Pump collision when building.
— Fixed desync reports were not generated.
— Fixed that non destructible entities get attacked, so biters could get stuck while trying to attack rails under train.
— Control settings window is now scrollable when it can’t fit the window.
— Fixed Factorio hanging on exit on Linux after copying or pasting
На Русском языке(отсутствует)

I wanna be a Dev… Часть «-1»

Всем привет с вами Naikoraptor, и это первый Урок по созданию своего мода.

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

(и да, в названии не ошибка, это действительно Минус первая часть)

Итак, начнем:

Шаг первый  «Подготовка рабочего места»

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

Как мы знаем фактория при установке создает 2 папки. Одна — это «Движок» и Базовая игра, а вторая — это «Библиотеки». Библиотеки — это папки с Сохранениями, Модами, Конфигами, и Записями ошибок, Именно в папке модов мы будем ТВОРИТЬ.

Если точнее, то движок находиться в папке data в корне игры. Там есть 2 подпапки:
Screenshot_18

Base (файлы игры)

Core (Движок,ядро,система)

 

А это БиблиотекиScreenshot_19

 

 

 

 

 

Первое, что нам нужно сделать, — это создать «ярлык» на рабочем столе на папку Mods

Существует 2 возможных её расположения. В zip-версии папка Mods (впрочем, как и всё остальное) находится в папке с самой игрой.

Если же папки Mods нет в папке с игрой, то копируем любой ярлык на рабочем столе и в копии пишем в оба поля %appdata%\factorio

 

Либо идем по этому пути и создаем ярлык

Мой компьютер >> C\ >> Пользователи >> Имя вашего пользователя >> AppData >> Roaming >> Factorio

 

 

Теперь переходим в папку самой игры и находим «Base», и кидаем туда Копию ярлыка Библиотек, А в Библиотеки кидаем Ярлык на Base. Тем самым даем себе двух сторонний коридор, Нам придется много бегать туда и обратно, так сделаем это приятнее.

Теперь перейдем к Софту

Шаг Второй: Софт

Тут ничего сложного. (Ссылки открываются в новой вкладке, не благодарите)

Нам Потребуется:

paint net

Notepad++

И прямые руки

Теперь проведем некоторую манипуляцию. Создайте на рабочем столе Любой txt файл. Задайте ему имя как *НаборБукв*.lua ( Пример: jdjdfvdugfwuhvhf.lua)

Теперь нажмите лкм, и выберите свойства. Установите notepad++ как приложение для просмотра

Screenshot_16  Вам нужно установить стандартную Программу как Notepad++. Иначе каждый раз открывать файлы Lua через «ЛКМ —> Открыть с помощью Notepad++» сильно задалбывает

Кстати файл можете удалить, нам нужно было только программу сменить

 

Пожалуй, на этом подготовка рабочего места закончена.