Всем привет с вами 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_energy = double — Сколько времени на 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 -- время одного исследования }
Технология работает, рецепты за ранее не доступны.
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) Но думаю это уж желающие сами найдут