Главная » Гайды » [Гайд] Как сделать свой мод для игры

[Гайд] Как сделать свой мод для игры

Просмотров: 645
Опубликовано:
Обновлено:

Приветствую!

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

Подготовка

Первая вещь — я не являюсь экспертом по обеим Factorio или Lua :)

Кроме того, некоторые основные предупреждения:

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

Некоторые полезные советы, когда вы начнете делать модификацию:

Если что-то написано здесь и не работает, сначала убедитесь, что оно написано именно так, как оно выглядит и если вы используете более позднюю версию, чем последнее обновление этого гайда, проверьте последние заметки по обновлению, чтобы увидеть, что / если что-то изменилось.
Это может быть полезно —  посмотреть через базовый код в ../factorio/data/base каталоге.
Наиболее часто используемые вики-ссылки: (Ниже я выложу остальные гайды по этой теме)
Обзор моддинг
определения Prototype
события Lua
объекты Lua
интерфейсы Script
Все процесс моддинга в Factorio делается на языке программирования Lua.

Теперь, прежде чем мы начнем, вы должны знать, что каждый мод (в том числе ванильная Factorio) добавляет элементы, объекты, технологии и сценарии (в игре код / действия) с использованием Lua.

Вы можете найти учебник на самом языке программирования Lua здесь (на русском), это может быть очень полезно, если вы новичок в Lua или программирования вообще :)
Lua-файлы могут быть созданы и отредактированы в любом текстовом редакторе. Хорошо известные из них, которые предлагают подсветку синтаксиса являются Notepad ++ и TextPad. Популярные программы, используемые для создании изображений и иконок Photoshop и Paint.net.

Глава 1 — настройка

Теперь, чтобы начать работу, сначала вам нужно найти папку установки Factorio. Найти её просто — нажмите  «ПУСК»-«ВЫПОЛНИТЬ»-Введите %appdata%/factorio. И Ok! На новой копии Factorio, нет директорий mods/saves/. Вы должны играть в игру сначала, и сохранить вручную.

Для того, чтобы приступить к созданию этого мода нам нужна идея, я думаю, что я попробую свои силы в создании мода, который добавляет бомбардировщики к игре. Зачем? Потому что кто не хотел просто летать над верхней частью вражеской порождения, сбросить бомбу, и наблюдать за уничтожением :) К тому же, никто не создал его, и он будет включать в себя все шаги, необходимые (в конечном счете) для изготовления даже самый сложного мода в Factorio.

1) В папке модов, создайте новую папку с именем ‘Bomber’.

2) В папке Bomber, создать 3 файла:

— Info.json (информация о моде, производителе и версия)
— Data.lua (это содержит определения того, что другие файлы .lua для загрузки)
— Control.lua (действия, которые мы хотим, чтобы мод выполнялся)
3) Измените файл info.json с помощью текстового редактора, а также тип (или копировать / вставить):

{
"name": "Bomber",
"version": "0.1.1",
"factorio_version": "0.14",
"title": "Bombermod from factorio.xyz",
"author": "factorio.xyz",
"contact": "admin@factorio.xyz",
"homepage": "http://factorio.xyz",
"description": "Add bomber to factorio",
"dependencies": ["base >= 0.14.21"]
}

4) В bomber папке создайте папку с именем «prototypes». Сюда войдут все новые предметы, рецепты и технологии, что мы хотим использовать в нашем моде. В следующих главах мы создадим файлы, которые входят в эту папку.

Мы сейчас (технически) имеем мод! Он ничего не делает, но это мод.

5) Сохраните все файлы и запустите Factorio. Нажмите кнопку Mods в главном меню, и теперь он показывает наш мод! Поскольку мода не делает ничего еще, мы можем закрыть Factorio прямо сейчас.

Глава 2 — предметы

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

1) В папке prototypes, создайте файл:

— Item.lua (это файл, где мы можем добавить новые элементы в игре)

2) отредактировать файл item.lua и добавьте:
data:extend({

{
type = «item»,
name = «bomber»,
icon = «__Bomber__/graphics/icon_bomber.png»,
flags = { «goes-to-quickbar» },
subgroup = «ammo»,
place_result=»bomber»,
stack_size= 1,
},
{
type= «item»,
name= «bomb»,
icon = «__Bomber__/graphics/icon_bomb.png»,
flags= { «goes-to-main-inventory» },
subgroup = «ammo»,
order= «c-d-b»,
stack_size= 5,
}

})

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

— type: показывает то, что мы хотим добавить к Factorio
— name: имя должно соответствовать между пунктами, рецепты, дерево технологий и т.д.
— icon : расположение значка, который показывает в строительной панели. каталог База __modname__, мы добавим папку графики на следующей стадии
— flags: куда поместить элемент после его создания
— subgroup : какая вкладка строительной панели покажет значок. Поскольку не существует ни одна группа пока для Истребители, это установлено в Ammo для самолета. Не установка группы приведет к дополнительной вкладке под названием ‘?’.
— Place_result: какой элемент будет создан. Там может быть несколько элементов.
— order: определяет положение значка в строительной панели. См ‘kovarex пост и ..data \ базы \ \ прототипы элемента \ деталь-groups.lua
— Stack_size: до какого числа делает стек  в вашем инвентаре.
3) В папке Bomber, добавьте папку под названием «graphics». Здесь все изображения, спрайты и иконки.

4) Скопировать файлы из этого архива в папку graphics.

Теперь у нас есть наши детали, но мы не можем их скрафтить! Нам нужно создать рецепты, если мы хотим, чтобы игроки имели возможность использовать их!

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

Глава 3 — рецепты

Давайте создадим рецепты, чтобы игроки могли изготовить наш бомбардировщик и бомбы. Рецепт является то, что показывает в строительной панели.

1) В папке prototypes , создайте файл:

— recipe.lua

2) В recipe.lua введите:

data:extend({
{
type = "recipe",
name = "bomber",
enabled = "true",
ingredients =
{
{"iron-stick",50},
{"electronic-circuit",50},
{"iron-gear-wheel",50},
{"iron-plate",200}
},
result = "bomber"
},
{
type = "recipe",
name = "bomb",
enabled = "true",
ingredients =
{
{"electronic-circuit",10},
{"iron-plate",20},
{"explosives",5}
},
result = "bomb"
}
})

Теперь наш бомбардировщик стоит 50 железных палочек, 50 электронных схем (электроники, конечно), 50 железные шестерни (шасси для баллонный двери и т.д.) и 200 железных пластин (тело) и наши бомбы — 10 электронных схем (вы хотят проверки безопасности правильно?), 20 железных пластин (тела) и 5 (взрывчатые вещества для хорошего byebyekaboooom!).

Есть два важных линий:

name : это должно быть то же имя, которую мы использовали в item.lua
enabled: определяет, будет ли элемент виден с самого начала, или нуждается в исследования в первую очередь. Мы сделаем это «истина» на данный момент, поэтому мы можем проверить.

Точные названия ингредиентов могут быть найдены в data\base\prototypes\item\item.lua\item.lua (и другие файлы в этой папке)

Мы до сих пор не можем начать игру, потому что теперь у нас есть и наши детали и их стоимость определяется, пришло время, чтобы сделать бомбардировочное то, что мы можем реально использовать!

Глава 4 — Объекты

Файл сущности описывает поведение бомбардировщика, здоровье, скорость, вес. Давайте начнем с создания файла:

1) В папке prototypes, добавить файл с именем:

— entity.lua

2) Измените файл entity.lua и добавьте:

data:extend({
  {
      type = "car",
      name = "bomber",
      icon = "__BomberTutorial__/graphics/icon_bomber.png",
      flags = {"pushable", "placeable-neutral", "player-creation"},
      minable = {mining_time = 1, result = "bomber"},
      max_health = 2000,
      corpse = "medium-remnants",
      selection_box = {{-0.7, -1.2}, {0.7, 1.2}},
      acceleration_per_energy = 0.15,
      breaking_speed = 0.09,
      burner = 
        {
          effectivity = 0.25,
          emissions = 20,
          fuel_inventory_size = 2,
        },
      consumption = "1J",
      friction = 0.01,
      pictures = {
        filename = "__BomberTutorial__/graphics/sheet_bomber.png",
        priority = "high",
        frame_width = 211,
        frame_height = 211,
        direction_count = 9
      },
      rotation_speed = 0.005,
      weight = 50,
      inventory_size = 12
  }
})

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

Это не все варианты, которые доступны, для более свойств вы можете проверить раздел, который создает машину в ванильной игре (/data/base/prototypes/entity/entities.lua в папке, которую вы установили игру)

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

3) Измените файл data.lua в папке Bomber и добавьте:

require("prototypes.item")
require("prototypes.recipe")
require("prototypes.entity")


Именно эти строки, и ничего больше. Это говорит игре, чтобы загрузить все 3 файла, которые мы только что создали.

4) Сохраните все файлы, запустите Factorio, начните новую игру или загрузить сейв и найдите бомбардировщик и значок бомбы на вкладке Combat. Вы можете построить бомбардировщик, поместите его, загрузить несколько бомб в инвентаре, некоторое количество топлива, и отлетайте! Если у вас нет материала, то можете добавить с помощью команды:

/c game.player.character.insert{name="bomber", count=1}

Глава 5 — технологии

Во-первых, мы должны изменить что  мы сделали раньше: бомбардировщик теперь нельзя скрафтить без исследования. Чтобы изменить это, мы должны вернуться к файлу recipe.lua из главы 3, в папке prototypes.

1) Откройте recipe.lua и найдите следующие строки (для обоих бомбардировщика и бомбы):

enabled = "true"

поменять на

enabled = "false"

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

2) В папке prototypes , создать новый файл:

— technology.lua

3) Откройте файл technology.lua, и добавьте:

data:extend({
  {
      type = "technology",
      name = "bombertech",
      icon = "__BomberTutorial__/graphics/icon_bomber_tech.png",
      effects =
      {
        {
            type = "unlock-recipe",
            recipe = "bomber"
        },
        {
            type = "unlock-recipe",
            recipe = "bomb"
        }
      },
      prerequisites = {"flying"},
      unit =
      {
        count = 10,
        ingredients =
        {
          {"science-pack-1", 2},
          {"science-pack-2", 1},
          {"science-pack-3", 1}
        },
        time = 20
      }
  }
})


Это дает исследование под названием bombertech. Её исследование разблокирует бомбардировщик и бомбу. Обратите внимание на то, что значок изображения уже скопирован в папку графики ранее.

Некоторые важные строки:
4) Открыть data.lua в папке Bomber, и добавьте:

require("prototypes.technology")

так что игра будет загружать technology.lua.

5) Запустите игру, и вы увидите технологию bombertech в списке технологий. Когда вы исследовали его, бомбардировщик и бомбы вновь стали доступны на вкладке Combat экрана Крафт.

При наведении курсора на технологии или иконки на экране Крафт, вы заметите что-то отсутствует: описание. Мы исправим это в следующей главе.

Глава 6 — Нейминг и локализация

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

1) В папке Bomber, создайте новую папку с именем «locale». Внутри этой папки локали создайте новую папку с именем «RU» для русского языка. Внутри этой папки собственной, создать файл с именем:

— locale.cfg

2) Откройте local.cfg, и добавьте:

[item-name]
bomber = Бомбардировщик
bomb = Бомба

[item-description]
--bomber = Stealth Бомбардировщик
bomb = Аммуниция бомбардировщика

[technology-name]
bombertech = Бомбардировщик

[technology-description]
bombertech = Разблокируй бомбардировщика - грозу небес!


3) Сохраните файл и запустите игру снова.

Теперь, если вы посмотрите на экран технологии, и наведите курсор мыши на значок бомбардировщика, вы увидите, что теперь имеет правильное имя на вершине, имя мод (BomberTech) в желтый в середине, и описание в нижней части. Когда вы исследуете бомбардировщик, и проверьте экран Крафт, вы увидите то же самое для бомбардировочных и бомбы иконки. Обратите внимание на то, как бомбардировщик не имеет описания, потому что закомментирован в файле local.cfg.

И с этим мы сделали правильно? Как вы можете заметить, что самолет не может использовать бомбы. Они также не являются частью какого-либо рецепта крафта так бомбы совершенно бесполезны, давайте исправим это!

Глава 7 — Lua код

Настало время, чтобы сделать эти бомбы, которые мы создали ранее.
1) Открыть control.lua в папке Bomber Учебник и вставьте файл следующее:

require "util"
require "defines"

--The code for FreeER's Step By Step Guide to Modding Factorio (Created for Factorio 0.3.x Updated to 0.10.x) AKA Bomber Mod
game.oninit(function()
glob.bomber = 0
end)

game.onevent(defines.events.ontick, function(event)
  if game.player.character and game.player.character.vehicle and game.player.character.vehicle.name == "bomber" 
and game.player.character.vehicle.getinventory(2).getitemcount("bomb") >= 1 and event.tick-glob.bomber >= 180 then
    local bomb = game.findentities{{game.player.character.vehicle.position.x-5,game.player.character.vehicle.position.y-5},
{game.player.character.vehicle.position.x+5,game.player.character.vehicle.position.y+5}}
    local drop = false
    local biters = 0
    for k,v in pairs(bomb) do
      if v.force.equals(game.forces.enemy) then
        drop = true
        if v.name == "small-biter" or v.name == "medium-biter" or v.name == "big-biter" then
          biters = biters + 1
          if biters < 5 then --if five or more will be killed then drop
            drop = false
          end
        end
      end
    end
    if drop then
      glob.bomber = event.tick
      for k,v in pairs(bomb) do
        if v.force.equals(game.forces.enemy) then
          if v.health then
            v.die()
          else
            v.destroy()
          end
        end
      end
      game.player.character.vehicle.getinventory(2).remove{name="bomb", count=1}
    end
  end
end)

Первые две строки «требуют …» говорит игре, что наш скрипт требует util.lua и defines.lua файлы, которые будут загружены. Они предоставляются разработчиками Factorio, Util дает доступ к некоторым полезным функциям (например, расстояние между двумя точками и FormatTime), хотя, честно говоря, это не используется в этом сценарии. И определяет списки, помимо всего прочего, события и материальные запасы (хотя и не все запасы перечислены в это время, поэтому я должен был использовать консоль, чтобы проверить и определить, какой номер для бомбардировщика был дан)

Вот и всё! Теперь у вас есть работающий мод.


comments powered by HyperComments

рек 728х90 single.php
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (1 оценок, среднее: 4,00 из 5)
Понравилось? Поделись в соц сетях!