[#2] Создание модов для RimWorld — Шаг 2 — Состав мода. События. - RimWorld гайд

Автор: KOLAMBUS

Описание видео гайда

Написание модов для RimWorld.

Ссылка на мой проект: RimOverhaul.

Ссылка на мод из видео: MyMod.

Ссылки на программы:

Полезные материалы:

Текстовая версия гайда (автоматически созданные субтитры)

Всем привет мы продолжаем заниматься моддингом по rimworld.

Прошлом видео мы с вами установили все необходимые программы.

В этом видео мы с вами разберем из чего состоит папка нашего мода как происходит загрузка мода и начнем писать нашу duele el que а именно разберем то как работают события папка вашего могут может содержать до 7 попав это about которая содержит информацию о вашей моде assemblies вниз находится библиотеки devs содержит div и longue часа держите за к вы и файлы подчас содержит патчи соус звуки а текстуры текстуры начнем с about здесь может находиться до 3 файлов это publish it felt который содержит айди мода в стиме если вы не публикуйте в стиме или вы собираетесь покупать то в принципе вам об этом знать не обязательно к тому же он создается автоматически при публикации превью эта картинка которая отображается мелким планом в стиме когда вы смотрите моды либо же когда вы заходите в раздел mods в игре.

Здесь важно отметить что картинка должна быть 640 на 405 начинаний будет работать вместо него будет крестик файл about содержит информацию о моде 10 на им это ими мода автор description описание и поддерживая версии здесь стоит отметить что пишется первая часть версии то есть вы знаете выходит множество подчищать нам 10 команде in и тому подобное и чтобы покрыть все эти патчи пишется просто 10 то есть любые версии 10 плюс будут работать если игрок скачает ваш мод и у него не будет совпадать версия которая написана здесь не мог будет подсвечен красным цветом затем идет папка сэм близ в ней содержатся библиотеки.

Здесь стоит отметить что помимо того что вы можете выставить приоритет загрузки модов в папке assemblies также может содержаться несколько d-link для чего это нужно если вы будете разбивать свой мод на несколько под модов а именно под деле лик то некоторые для ляльки могут быть.

Зависимых друг от друга тогда важно чтобы в проводнике вот прямо здесь они находились в порядке чтобы зависимые были ниже чем те от которых они зависят простой пример гармония когда вы качаете — гармоний там всегда есть 2d или лефке 0 гармония и имя мода 0 гармония сделаю для того что именно начинающий с цифр у windows.

Имеет приоритет поэтому не будут находиться выше следовательно гармония будет загружено 1 а потом будет загружен мог случае если у вас будет парень и порядок the brood ошибки с кем идет папка devs.

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

Когда вы запускаете игру reworld шуршит все моды и все пап и все папки devs и собирает оттуда div и а где они лежат и могут особо не важно up call on beach папка ландыш содержит себе языке формат простой папка с языком их можно также посмотреть зайдя в папку с игрой в папку core и здесь нажав лан вич здесь есть список в основном использующих языков вы можете просто скопировать вы взять за основу мы же пса рассмотрим с вами русский а внутри может находиться множество папок но часто использована этот div injected и кейт объясняю когда вы создаете какой-то предмет у него в дефе.

Есть какие-то поля например лейбл который отражает его имя дискрипшн которая описывает его описания для того чтобы их перевести используется div injected здесь иерархия довольно простая создается папка которая именуется как называется класса дефо например предметы описываются passing дав тогда чтобы перевести все предметы мы создаем папку tkinter.

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

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

Которая произойдет например если убьют какую-то пешку вам нужно вывести информацию про вашу пешку имя убили чтобы в это перевести на многие языки используется кейт создается ключ который описывается в этой папке в xml и которая содержит в этой папке простите затем в зависимости от языка будут использовать та или иная версия явным пример несколько ключ они и существуют то будут такие кракозябры аду многие с этим сталкивались и того как раз таки когда нет перевода для вашего языка в случае если в дефе нет перевода то будет использован стандартный период езды фанаток и правила английский out с ключами будет полезно как раз таки кракозябры по типу ключ то есть там обычно какой-нибудь слитное слова затем идет папка почи почи позволяют манипулировать значениями дефов не на уровне кода то есть например вы хотите перенести все оружие в какую-то другую категорию вам нет необходимости изменять core и давать каждому игроку core вы просто пишете патч который по имени дефо находит нужные предметы и меняет у них например категорию тогда человек просто ставит ваш мод и у него все работает там есть множество патч операции мы с вами это тоже все разберем вкратце там можно как добавлять изменять удалять есть сложные структуры например проверки что если какой-то другой мод изменил то нам например не изменять это позволит расширить диапазон.

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

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

Рейд и тому подобное но само событие на уровне программы перестает существовать то есть она выкинула какое-то действие произошел какой-то кусок кода и на этом событие завершилось.

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

Длительное например как радиация в ванильки когда в течение там энного количества времени все пешки находящиеся на улице будут получать какой-то урон мы с вами разберём это это я расскажу о методах как они работают и как вообще в принципе устроен внутренний механизм ремки.

Начнём мы с вами создания проекта открываем ранее созданную visual studio если у вас визуалу studio 2017 это ничего страшного везде принцип один и тот же нажимаем создание проекта нам понадобится библиотека классов язык си sharp здесь важно выбрать библиотек атласов net framework не нет стандарт и не нет core нажимаем далее вводим имя нашего моду и выбираем ему любое расположение например рабочий стол платформа а здесь по хорошему нужно 35 но здесь нужно net framework 350 клиент профиль которого здесь нет и в 2017 насколько я помню тоже поэтому в принципе здесь не принципиально нажимаем создать и ждем пока у нас создастся наш проект с вами и так.

Стандартный проект включает себя класс 1 удаляем он нам не нужен первым делом нажимаем двойным щелчком на properties и выбираем рабочую среду 35 клиент профиль сохраняемся все этом базовая подготовка завершена теперь нам нужно подключить библиотеки для того чтобы взаимодействовать с игру для этого нажимаем ссылке добавить ссылку обзор находим нашу с вами игру или world win64 data manager нам.

Понадобится assembly к из sharp и unity engine но так как вы можете игру переместить в любое место и чтобы за собой ти библиотеки не таскать давайте сделаем проще найдем наш проект который мы создали.

И создадим здесь папочку разъеме lips теперь зайдем в папку с игрой rimworld win64 data manager и скопируем assembly к с шарф и unity engine.

В эту папку теперь.

Откроем visual studio зайдем на рабочий стол.

Откроем наш мод папку lips и выберем эти две библиотеки нажмем добавить белки для чего это нужно в папке вас m black s shop содержится весь исходный код игры чтобы взаимодействие с ним рано нам разумеется нужно подключить эту библиотеку так мы сможем использовать абсолютно все что есть в игре методы и классы и тому подобное unity engine содержит вторую часть этих данных на которой построен игра например виктора некоторые полезные функции такие как выбор минимального значения из там из двух предложенных и тому подобное а без этого ничего работать у нас вообще не будет и так пусто как мы подключили откроем наши библиотеки также был свои для этого откроем нашел своих откроем папку lips свежесозданного и перетащим сюда сэм блэка с sharp он у нас появится мы его можем открыть и здесь уже видно весь исходный код игры то что введите называются пространствами он я еще попозже об этом расскажу как мы начнем непосредственно делать здесь есть а и verses rimworld в принципе где что находится можно.

Просто потыкав узнать в основном reworld содержит информацию по игре планет о планетах.

То есть взаимодействие с планет аверс все что там о предметах и вообще все-все-все.

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

Там сверху вниз то есть есть там раз оба имеют от его вызывать 77 этот еще вызвать тем самым добраться до самой верхушки чтоб понять общем механизм работы итак но перейдем к нашему моду а как я уже упомянул пространство имен для удобства если у вас мод будет разрастаться да и вообще в принципе я советую создавать внутри папки чтобы разбить ваш вот на какие-то части например события везем папку events конкретно на уровне оптимизации прочих это не играет абсолютно никакой роли только для удобства программируют программиста вы о пространстве имен можете почитать на том же метре нет которую я ставлю ссылку чтобы вникнуть но я походу в принципе покажу и объясню как это все работает не так папочку мы с вами создали теперь нам нужно будет создать не посредством класс события для этого нажимаем правой кнопкой по events а папки где мы хотим создать и класс.

Конкретно каких-то правил в именований классов нет но можно следовать примеру разработчиков и первую часть класса помечать то что он делать например если это событие назвать инцидент если это кондишен называть game кадиша и так как мы начнем с вами с инцидентов поэтому напишем инцидент worker и имя сделаем его публичным а напомню что чтобы понимать в принципе что здесь происходит лучше обзавестись базовыми понятиями шарпа опять же ссылку я оставлял в прошлом видео оставлю в этом поэтому если вы затем совсем плохо плохо смыслить и лучше остановите видео или чуть-чуть почитайте итак первый скелет готов теперь нам нужно будет наследоваться от главного класса который отвечает за инцидент этой инцидент worker изначально он подсвете там что его нету но достаточно навести на него и он нам предложит его сделать а теперь покажу как пользуется своим и так вот вы нашли какой-то класс вы хотите его взаимо 10 но не понимаете что он себе содержит.

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

Чтобы они не мешались у нас и так что здесь есть.

Инцидентов переменной df после того как сработала события содержит div нашего события например если вам нужно вывести какое-то.

Оповещение которое уже есть в самом деле и так далее шанс это базовый шанс с которым может произойти то или иное событие в принципе оно равняется bass шанс которая содержится в дефе но как видно она помеченный virtual мы можем его пик переопределить затем есть два основных метода которая используется в событиях и так on fire сноу sap и троен squid варки can фарсом mouseup вызывается перед тем как события вообще будет сразу did вызвано до некая проверка а можно ли сейчас вызвать события чтобы понять для чего это вернемся ним.

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

Несколько их можно посмотреть нажав на инцидентов инцидент торги так div и дефов почему помечено дефов я тоже сейчас этого позже объясню мы с вами с этим со всем разберёмся значит существует в асану 5 таргет of the world это событие которые могут произойти в принципе хоть когда то есть они распространяются на весь мир затем идет караван это то что может произойти конкретно на караван и.

Map miss a player home i’m up right back.

On.

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

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

События происходит вызывается true этикет worker если фолз события пропускается для чего это нужно когда ваше событие а для каждого для каждого таргета внутри есть специально stories tight мы можем это также найти историю здесь есть такое такая dictionary как last fair tecna отвечает когда последний раз было вызвано то или иное событие каждое событие имеет минимальный такой скажем кулдаун и чтобы все это сохранить вот используется как раз это dictionary если can fire of sap вернул фолз в эту гексы мире коллекция ничего не будет записано следовательно в следующий раз события может произойти там через минуту через пять минут или вообще следом если же она вернула true и событие уже было вызвано то туда будет записано значение для чего это нужно в конверт но sap обычно выставляются проверки то есть например.

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

И в следующий раз она будет произойдет только тогда когда пройдет его кулдаун троек забьют используется если вы хотите вызвать то или иное событие непосредственно в прям здесь сейчас например у вас есть события которые что-то делают и по окончанию нужно вызывать событие b.

Вы можете использовать 3d kid здесь также есть два встроенных метода сын стандарт литр это небольшой такой удобный метод для того чтобы послать а вот это вот сообщение сбоку игры о том что такое то какое-то событие произошло и вы видите вылезти в описании конечно никто не запрещает использовать свое но если в вас там нет какой-то дополнительной логике то логичнее вызывать сын стандарт литр ну а теперь по порядку.

Первым делом определим.

Кан fires of.

Входной параметр является инцидент по rooms мы также можем посмотреть из чего он состоит.

Открыв нашел спать в один инцидент парус и мы увидим здесь множество параметров эти параметры генерируются раз таки нашим рассказчиком на основе дефо здесь есть star нет над которым было вызвано поинты фракция была ли она вызвана центр и еще много различных параметров которые вы можете сами посмотреть важно отметить что не все параметры являются скажем так маст хэвом то есть некоторые параметры не актуальны для некоторых событиях от слова вовсе к тому же даже больше некоторые параметры вообще внедренных для конкретных событий например мы сейчас будем с вами также разбираться game кондишен их там есть параметр который определяет насколько сильным будет психо зонт только проблема в том что психо зонт это одно событие в игре то есть она по факту в других местах не будет использовать столько сам разработчики разработают какой-то второе событие здесь есть некоторые еще такие параметры как.

Генерит fight for only это также для событий связанных с рейдами из дополнительных.

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

Ип of arrival мода это ток как будут события.

Пешки которые сгенерированы например будут заспавнены мы с вами тоже с этим со всем разберёмся потому что это все очень локально и разбираться с этим надо будет долго-долго-долго и так но вернёмся к нашему событию сразу делаем труб то есть событие хорошо и начнем с вами работу предположим наше событие должно срабатывать только тогда когда у игрока есть пять и больше пешек для этого создал переменную map ее по дефолту нет поэтому мы добавляем birds.

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

Смысла особого нет все равно все забудете но пока что нам достаточно того что мы переведем его непосредственно из star не то чтобы проверить количество пешек у map есть такая переменная как баланс mopoуз.

Которая содержит себе такие поля как все пешки то есть это абсолютно вообще все-все-все.

Напомню что pawn это любая сущность желая в игре то есть животное не животное не важно тому же насколько помню он возвращает также еще и мертвых поэтому тут нужно еще доставить кучу проверок нас интересует такая переменная как колонист каунт есть также колонистам аккаунт и мы наверное вы возьмем добавим их и проверим что и должно быть больше или равно в 5.

Тогда возвращаем тут но лучше давайте сделаем наоборот если 5 больше то и сделаем лог.

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

То событий не сработают вернет фолз и будет показано количество колонистов переопределим второй метод и сделаем здесь тоже самое объясняю для чего это нужно разумеется ждать когда произойдет то или иное событие мы не можем то есть это может придать через две минуты через пять минут когда вы будете запускать ваше событий через гей мод то есть нажимать true if you get worker непосредственно там а там проверка вот это игнорируется то есть там сразу вызывается троек dicked worker поэтому если мы хотим действительно узнать работает ли наш алгоритм вам придется поместить это сюда и добавим еще мог том что.

То есть когда событие произойдет если у нас будет 5 и больше колонистов нужно вывести крикет что будет сигнализировать о том что то или иное событие произошло мы с вами немножко клубе к усложним сделаем какие-то более сложные вещи но сейчас важно понять общем вот этот скелет на этом создание событий в принципе завершено теперь нам остается только сделать из него непосредственно df чтобы игра лего увидела и мы могли его вызвать все примеры дефов можно посмотреть непосредственно в игре заходим в папку mods core devs.

И здесь принципе все примеры есть нам же нас же интересует события они находятся в папке storyteller возьмём отсюда любой можно в принципе вниз взять чтобы меньше редактировать зайдем в наш мод зайдем в папку devs удалим эти временные папки и добавим сюда нашу.

Xml откроем минуты подам 10 множество всяких всяких всяких событий нас это не интересует мы удаляем все кроме одного.

Задним смотрим как формируется как символ к любой акция малька начинается со слов devs.

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

Каждый div имеет одно главное олег а то без которого ничего работать не будет это дисней по факту это уникальный индикатор нашего события точнее вообще в принципе дефо оно должно быть уникально в рамках дефо то есть если мы создаем с вами события инцидентов что мне нужно быть еще одного события sdf name альфа beavis если есть какое-то строение с такими нем ничего страшного не произойдет мы с вами назовем тесты винт также важно чтобы она не заканчивалась на цифры игра также выдаст предупреждение лейбл это текст назовем его тест.

Категория а здесь стоит остановиться так же зайдем.

Инцидентов и найдем категории категория если вы не собираетесь и модифицировать какие-то стандартные.

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

Здесь важно отметить что многие проверки которые вы указывайте в дефе они не актуальны для кан fair способ то есть здесь не надо указывать какие биомы могут использованы потому что это сделает еще система до вызова conference а если написать снова.

Инцидент квартир и найти его то видно что по факту он всегда возвращает true то есть никакой логики здесь писать не надо.

Проверка набьем будет автоматическое вернемся к инцидентов а здесь также есть торги tags.

О которых я только что рассказывал в нашем случае мы хотим чтобы это было конкретно на карте игрока поэтому указываем a player full.

Затем здесь есть переменная b с шанс она имеет диапазон от 0 до 100.

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

Рейдов а так как рейды в принципе имеют большой куда он ту.

Шанс что произойдет ваше событие просто нереально затем есть хор le stelle это количество минимальное количество дней которое должно пройти для вашего события например указав 50 должно пройти 50 дней чтобы это событие не просто произошло а могло произойти это важно так как если вы укажете 50 дней то это не значит на песчаном дне но обязательно произойдет все зависит от шансы еще других переменных мин population это минимальное количество людей которые должно быть мы в принципе сделали с вами примерно такую же логику чисто для примера.

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

Пройти.

Между событиями то есть скажем вы указали что ваши событий может произойти с 50 дня а в мире fire dance.

Указали еще 100 дней предположим на 50 мне ваше события произошло следующий раз она может только произойти то есть вообще будет актуальна только через 100 дней то есть на 150 дней здесь важно увидеть что на флоп они то есть не целое дело в том что вы можете указывать там небольшую дробь то есть три пять и тридцать пять и пять например почему так вкратце пока что достаточно будет знать что весь день игровой в ринке состоит из 60 тысяч киков поэтому указав 35 например и 5 вы сделаете ну грубо говоря тридцать пять с половиной дней минимальная сложность а поискала был это для рейдов то есть например как вы знаете рейды зависит у нас от различных параметров в том числе 20 богатство колонии и например вы хотите чтобы red всегда был в два раза лучше чем богатство колоний то есть которая может быть то просто витязь 20 и у вас будет зараза любой рейдж хлеб points это минимальное количество поинтов которая может быть у событие в принципе это похоже на point scalable.

Здесь также прошу извинить я не уверен что это bull она не указывается об заставлять сканировать allowed by омс это я уже сказал что это бид’а мы в которых может произойти то или иное событие теги.

Это массив string в принципе она больше для служебной информации и здесь идет куча всякой служебной дополнительной информации в том числе например фиксированный гендер для кого может это произойти это не актуально для обычных событий актуально как я уже сказал что некоторые переменные разработчик дел под себя одним из примеров я приводил психо зонт сейчас я его найду own game кондициях.

А смысл в том что он делал это по тебя то еще он указывает здесь перемену а потом у себя в событие это проверять в принципе если вы делаете какую-то свою логику то это вообще никак вас не коснется.

Здесь есть еще дуришь ндс из важных но он актуален для game кондишен а то есть непосредственно для условий мы к этому еще вернемся на идем к нашей xml и здесь есть шанс который можно указать на давайте укажем 44 можно указывать нолика можно без на люка и минимальное количество не пусть будет 30 а чтобы привязать.

Класс нашего события к инциденту нам нужно указать его worker класс для этого открываем visual studio копируем вставляем если мы сейчас запустим такой вариант мы получим ошибку что класс keep с таким именем не найден почему потому что наша библиотека находится в другом пространстве имен чтобы это устранить открываем снова наше видео студия и здесь есть namespace у копируем и вставляем здесь то есть по факту это полный путь до нашего типа не более этом в принципе все закончено мы можем сохранить выбираем место дэбак релиз также откроем ссылки ножом нажмем на земле sharp свойства и уберем копировать локально чтобы в папку скомпилирован им наши модом она не помещалась так как это лишний мусор и он нам не нужен после чего нажмем мой мод и либо собрать либо пересобрать принципе особой роли не будет играть ждем показ компилируется наш мод заходим в папку с ним бен релиз и вот она наша дрелей pdb это отладочной информации она позволяет более четко отлавливать ошибки но в ринге это не работает поэтому нам на щетину же мы копируем только да и ляльку.

Заходим в нашем с вами.

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

Не забываем включить наш моду на стройках и если все правильно включили то мы можем нажать первую шестеренку так как мы выбирали maple и верхом то есть это на конкретную карту то в инцидентах она будет содержаться в ду инцидент map мы можем воспользоваться по поиску взятом тест мой тест и увидим наш тест and now.

Означает что сейчас события по факту на уровне игры произойти не может в принципе.

Причины две это во первых не прошло 30 дней которые мы установили а во-вторых у нас еще и пишет не хватать если мы сейчас нажмем на него то мы увидим что нам выведется колонист к unde3 почему так открываем наш проект и видим что мы вводим количество в только в том случае если колонистов меньше пяти заспавним парочку колонистов 6 штук снова попробуем вызвать и увидим что у нас работал риски то есть колонистов 6 это больше 5 ну или равно 5 и событие произошло в принципе прогресс удачен вернемся к нашему моду и чуть-чуть доработаем логику во-первых оставим для дебага информацию и попробуем сделать с вами что нибудь интересное например вы видели имена всех колонистов которые попали под действие события для этого воспользуемся опять же нашей картой а именно переменным а pawns free colonies.

Сделаем цикл.

Взаимо вот пару.

И но на pawns free колонист.

Белым ног месяц и сделаем тов умный.

Предсказан разработать события у нас сделается цикл по всем пешком которые есть и выведется и химия и воспользуемся стандартной функцией стенд sensor to standard литр для того чтобы появилась с нами наш с вами уведомления просто вызываем его здесь и на этом тоже в принципе можно сказать все слова компилируем и заходим в папку копируем заменяем вас m + a visual studio можно устроить выходной путь для адель или поэтому если вы не хотите уток от копировать вы можете указать папку assembled где у вас лежит игра и у вас будет при компиляции заменяться на мне просто это не особо удобно и я пользуюсь конкретно вот таким способом я создал новый мир обновили мод теперь попробуем вызвать наше событие слова видео в консоли что у нас показывается что колонистов 3 заспавним парочку колонистов.

И слова вызове наше событие стоит.

Смысл.

И так я создал новый мир попробуем вызвать с вами на.

Колонистах события я уже затонувший штук чтобы наши условия с вами сработало и попробуем вызвать как мы видим именно выявились но мы видим ошибки и сообщение справа у нас не появился связано с тем что мы не указали с вами текст сообщения и его категорию давайте это исправим выходим из игры заходим в нашу xml q возьмем а любой стандартный дев который находится в папке коры dev story trailer например фриц и мы здесь заметим что если лотар лабу.

Но этот текст bellator дев скопируем а для удобства я советую также установить в notepad.

Xml тулс это позволит тут как вы видите легко форматировать xml и а также проверять ошибки если вы например что-то не закрыли вот так он сразу укажет ошибку но вернёмся к нашему латур у la terre de la perla burn.

Это текст который будет написан назовем executed тест пдд текст это.

Непосредственно текст который будет показан.

Давайте здесь напишем просто текст текст текст или тортов это скажем так тип нашего сообщения он влияет на цвет сообщения и звук который произойдет хлеб big это когда приходит рейд посмотреть литр дев и мы можем зайдя в лс пай написав было этот авт и здесь есть хоть big or small.

Негативный нейтральный позитивны и смерть разумеется открыт это что-то рядом то есть просто по звуку будет отличаться и по цвету негативно это когда что-то произошло негативно нейтральный позитивный и смерть оставлю doom открыт миг теперь сохраним и снова попробуем запустить нашу и ну и так я вновь создал новый мир попробуем вызвать наши события и увидим что сообщение появилось описается то что было показано написали мы и внутри текст сообщения красная и производится звук соответствующий код big.

Теперь мы попробуем перевести наши события.

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

Внутри нам нужно будет создать xml для удобства зайдем в оригинальную игру корм plan which рашен defender ted здесь также есть папка инцидентов возьмем здесь любой поместим наш мод откроем удалим здесь все не нужен комментарий нам также не понадобится теперь как это работает указывается df найм и поле перемен на которую мы хотим перевести заходим в наш тест avent копируем тефны расставляем лейбл назовем например наши события в принципе это не важно а надпись переведено запись а здесь мы укажем мой кекс.

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

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

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

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

Он их можно видеть в правом углу куда там пишется тактичные сотки например это все игровые.

Условия чтобы создать класс егорова условия достаточно создать новый класс и назовем game кондишен и то есть лишь сделаем публичным сохраним чтобы наш кондишен заработал на нужно наследоваться от ким кондишен и снова копируем его заходим толстой делаем серж и находим его здесь есть game кондишен manager это класс который для каждой карты уникален позволяет управлять событиями для карты откроем его здесь есть активное событие в данный момент карта над которой он так скажем пластилин здесь есть возможность зарегистрировать свой кондишен к если это делает событие происходит непосредственно игрой то это делается автоматически но иногда бывает так что например у вас должен произойти взрыв какого-то строения и вдруг должно все потемней кейтом токсичные сотки появится то вы воспользуетесь именно регистр кондишен создав новый а кондишен а здесь есть экспонаты это сохранение и еще несколько методов которые нам сейчас не нужны это непосредственно для того чтобы вообще все в принципе работала частности game can тишинке к тату как раз таки позволяет обрабатывать все наши события и и много много много еще всего но нам это сейчас просто не нужно иначе это будет просто лишний информация аналогично с инцидентов мдф событие которое сейчас крутится для чего это опять же нужно если например вы хотите взять какую-нибудь информацию например надпись события и поместите и там над кем-нибудь например когда он начался тег как я уже сказал игра рассчитана на тиках.

И это может быть полезно при каких-то обработках длительность а является ленина на навсегда affected maps вот здесь как раз таки стоит остановиться непосредственно на орбитах когда мы делали с вами map player home made or get приводили непосредственно к map то есть так как в ней хранилось конкретно текущая карта если будет указан world то разумеется событие произойдет не только над нашей карты она например множеством других если например они активны в событии ли у вас две карты тогда вы не можете торговать привести к map у вас просо появится ошибка в таком случае взаимодействие со всеми попавшими картами под эффект можно с помощью как раз таки эффект от maps здесь a single если разумеется она была про из событий нужно было произойти опять же для конкретной карты и различные надписи из важного здесь есть а xps дата в игре сохранение происходит посредством записи каких-то значений в сейф с помощью метода эксплу за то чтобы его реализовать вам понадобится наследоваться от интерфейса аек способу который реализован один местный метод export data мы еще сохранением с вами разберемся там вообще 4 класса важных которые позволяют сохранять каждую свой тип данных и сейчас это также об этом не будем заострять внимание потому что это не тема нашего урока game кандель кондишен тег это метод вызывается каждый тег пока события актуально вот здесь так как раз таки происходит вся основная логика например нанесение урона пешком находящемся по улице то есть спешка вышла.

Он каждый тег обрабатывает об видит что пешка вышла на улицу и начинает ее наносить урон game кондишен drove это нужно если вы например хотите туман какой-то повесить на карту и нет вызывается один раз когда событие происходит.

And.

Здесь важно отметить ее не то есть конструктор который вызывается когда класс был создан а есть и нет какого-то но все создано и вот уже сейчас вызывается в принципе для инициализации переменных подойдёт этот этот вариант но все-таки жизненно важные перемены лучше инициализировать непосредственно в классе в конструктор извините а здесь оставить какую-то такую вторичную информацию затем есть and который автоматически реализует вывод сообщения которое появляется слева сверху когда событие заканчивается я думаю вы знакомы с этим это характерный такой пик и надпись что такое то событие завершилось.

Затем идут такие методы как работа с небом опять же температура то есть это максимальная температура изменения опять же изменения с небом связаны это все возможные методы для того чтобы изменять тени подсветку то есть например как это работать токсичные осадки карта сильнее и немножко меняется температура здесь также можно указать количество животных лент и еще из 43.

Прошу прощения класса переменных было методов простите которые отвечают опять жить и небо.

И здесь есть два метода которые показывают взаимодействие с ячейками и есть метод post мейк он вызывается еще по моему да и нет когда.

Кондишен он был сформирован но еще не был вызван нам понадобится воспользуемся game кондишен тиком и не там и думаю эндом остальные вы можете посмотреть по усмотрению либо взять любой другой game кондишен вот здесь есть колдснап климатический цикла солнечное затмение flash шторм это молнии и можно посмотреть нажав на них как они там устроено вот например heatwave а тепловая волна здесь возвращается температура все тпереь определяется где значение текущей температуры терпится это почитайте лучше в интернете там гораздо проще будет описано у значение грубо говоря.

Смазывается на основе 3 значения но вернёмся к нашему событию переопределим метод init.

Во избежание казусов оставляйте вызов стандартного метода если только вы точно не видите что этого не нужно просто иногда бывает например в созданиях ну куда вы делаете какой-то предмет там есть метод который вызывается когда предмет устанавливается и вот если там не вызвать стандартный предмет просто не поставится потому что логика установки описано вот с базовым и давайте опять же вы видим сообщение о том что вот так а это событие инициализировал ась добавим значок df найти должны все джек youtube и проверим когда это будет вызван теперь вы завел game connection kit.

Сделаем здесь вывод.

Единички посмотрим как это происходит возьмем and.

Где также выведем сообщение о том что событие завершилось.

И потом напичкан это немножко какой-то информации.

Теперь можно скомпилировать положить нашу библиотеку опять же басом близ и теперь нам нужно опять привязать события класс события непосредственно к нашему делу для этого зайдем в оригинал q найдем здесь инцидент world кондишен и от кроме его а признаюсь этом языке нам нужно зайти в кор.

Dfa100 ритейлер кондишен возьмем здесь какое-нибудь событие простенькая так как не давать ему шестами сразу объясню и так здесь.

Как вы видите все называется энди инцидент с это немного вводится увлажнение потому что события работают могут быть вызваны двумя типами первый это с помощью базового класса инциндент worker мэй game кондишен который принимает в себе переменную game кондишен вы указываете там верхней кондишен и которая хотите вызвать и вызовы и указывайте этот worker класс и вот это событие которое будет описано будет вызвана второй вариант вы можете описать вот эту логику вызова скопировав и и ценить силен им кондишен давайте откроем его здесь также есть все наши знакомые методы конформизм sap ядро юзают worker который также все проверяет и если здесь посмотреть здесь как раз таки идет моей кондишен и регистр кондишен которую мы с вами разбирались то есть все используются базовые методы не какой-то магии нет просто это как бы сделано уже за вас и если у вас нет какой-то супер супер логике то в принципе можно воспользоваться этим удалим 2 назовем его тест кондишен здесь важно отметить что это инцидентов то есть как мы помним с вами два одинаковых инцидентов а не может быть с духовной тест эдишен.

Оставим также мисс торги так составим world заднем разберемся как он работает какой game кондиций может произвести для этого заходим в папку devs и находимся 7 кондишен devs скопируем эту xml крупном и снова откроем ее.

Ну ты подам здесь описывается непосредственно уже game кондишен здесь мы можем написать тест кондишен потому что это game кондишн и такого для фрейма еще нету написать здесь.

Тест кондишен г game кондишен чтобы видеть description это описание м в месяц это сообщение которое как раз таки будет вы видно слева сверху когда событие завершится нет 123 флаг can be turned указывать может ли событие быть навсегда.

Также откроем game кондишен div и посмотрим что же мы можем указать еще здесь есть вот как я уже рассказывал дрон level это насколько уровень дронов будет но если у вас нет в классе логики для этого это ничего не даст то есть вы хоть какой указываете вы никак это не используете это разработчик делать больше под себя и в принципе здесь больше ничего нет.

Сохраняем копируем дафний заходим обратно в инцидент в conditions опять же папке xml и могут называться как угодно я просто их не меня потому что ну в принципе сейчас это не так важно game кондишен указываем здесь укажем говорим индики например и здесь давайте укажем 1234.

Поставим все то же самое шанс количество дней за исключением того что у событий еще есть такая штука как дуришь indis это количество дней диапазон которая в котором могут работать те или иные события то есть нашем случае здесь указывается примерно от двух часов мы укажем от одного дня до ну давайте 350 дней то есть случайно выберется число и столько событий будет работать например вы хотите устроить песчаную бурю разумеется она должна идти не там один день а там пять шесть дней делать там каждый день обновлять ее заново это глупо вы просто устанавливаете здесь например 5050 и она у вас работа точно 50 дней на этом в принципе все теперь попробуем запустить игру и проверить непосредственно как наш с вами события работает итак я загрузил прошлое сохранения теперь мы можем вызвать наш с вами события как я уже сказал события вызывается.

Условия вызывать как события мы указали world поэтому заходим ду инцидент world пишем тест и вот он у нас от с кондишен и вызываем и мы видим вызывается наше сообщение которую мы указали вот здесь вот 123 game дебют затем здесь указывается тест кондишен from джем и пишется a game кондишен это уже берется непосредственно вот здесь то есть это пишется лейбл и and missed.

И дискрипшн вы также можете купить информацию вести если хотите так как вы выставили длительность от одного до пяти дней то в принципе происходить это будет довольно долго как мы видим сообщение нет потому что мы не указали наш класс давайте это исправим выйдем из игры зайдем сюда здесь game кондишен если мы наберем здесь есть кондишен класс копируем его открываем это и делаем это здесь мы также копируем имя и нам понадобится еще namespace копируем и снова пробуем запустить нашу игру итак попробуем запустить наш с вами события и сразу установим игру как видно вызывая сначала тест кондишен их дебют первым которую мы указали в инет затем мы видим что каждый тип флуди ца order к это то что вызывается каждый тег если мы увеличим скорость разумеется скорость тоже здесь поднимется когда событие закончится произойдет непосредственно and мы можем завершить событиям вызванная нами мы к сожалению не можем а если только оно было вызвано игрой тогда только можно завершить событие поэтому мы можем поставить меньше времени тогда только проверить у нас сейчас волнует совершенно нет попробуем наполнить наше события контентом заднем посмотрим как же работает непосредственно world для того чтобы взаимодействие со всеми картами используется метод который есть game кондишен а называющийся affected maps зайдем game кондишен здесь есть эффекты мы можем получить эффект на пс это вернет список всех карт на которые game кондишен действует собственно что нами нужно первым делом давайте попробуем поставить небольшую проверочку которая будет вызывать обработку всех вот этих карт с небольшим через небольшой интервал времени сделать это можно двумя способами такой простой способ это fine тег менеджер kids game поделить на интервал но яйцо нулю и какой-то 10 объясняя а как я уже сказал игра изменяется в тиках когда пройдет 100 киков.

Результат будет 0 и действие произойдет этот способ позволяет делать интервалы между вызываем каких-то методов если скажем так преждевременный вызов этого интервала не сильно важен ярким примером будет если вы например а у вас стоит каждый стойте-ка вызывать метод событие произошло на 90-м тикет тогда кусок кода сработает не через 100 киков а через 10 потому что через 10 тиков будет 100 и результат будет 0 так обычно делается если вам просто нужно скажем каждые там две секунды что-то производить и то что если там вдруг после сразу события у вас что-то произойдет ну один раз быстро не это не страшно то в принципе это самый оптимальный способ есть еще возможность хэшировать но мы пока это рассматривать не будем второй способ мой враг же пока рассматривать не будем это создать небольшой таймер который будет убавляться каждый тег и когда он будет равен нулю обновить его и что-то вызвать.

Сделай небольшой метод назовем эффект вызовет здесь делаем небольшой нет завоеватель сделаем цикл по всем картам эффект от maps.

Затем переберём всех пешек которые находятся на этой карте у павлов есть такой метод коктейль демейдж который указывает что нужно получить урон он принимает демич info создаем демич info здесь есть множество параметров на самом деле первый это обычно тип урона его можно взять написал ddf of a здесь есть стрелы укусы м п и все-все-все возьмем какой-нибудь став amount.

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

Переберет все карты на которые действует это событие.

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

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

Дефолтный метод поэтому от него была вероятность непосредственного вернуться что сделала например одна пешка в этом нет ничего такого если вы хотите нанести более урон там нужно вам было указать пробитие брони и прочее прочее прочее если нажмем еще раз дождемся то увидим что сработает это 2 3 4 и прочее прочее прочее рады нанося нанося пс lenovo в этом случае одна пешка вообще уже свалилась а так как мы не указали куда будет наноситься урон то он выбирается рандомно поэтому кому-то могло в тело в ногу попасть к тому же вы видите что мы указали 5 урона но наносится сразу по четырём почему так когда мы не указали непосредственно часть то урон как бы распределяется по всем то есть сейчас он попал ему фтор столько то кому то он попадает в желудок и и тому подобное если бы мы указали конкретную часть конкретно урон в нее бы все и вливалась я думаю это и так понятно на этом в принципе все следующих видео мы сами будем тихонечко изучать устройств всех остальных методов как я уже сказал нельзя просто взять и пройтись как бы по нарастающей потому что каждая часть она хоть и связано с какой-то другой но не в том смысле.

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

Я попытался рассказать вам непосредственно саму суть то есть как вообще происходит процесс что создается класс.

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

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

Ссылка на дискорд есть и оставлю под видео также вы можете попробовать мой проект который я разрабатываю называется рим overhaul и на этом в принципе я хочу закончить.

Всем спасибо пока.

Другие гайды автора - KOLAMBUS

Другие гайды, похожие на "[#2] Создание модов для RimWorld — Шаг 2 — Состав мода. События."

При каждом нажатии на ниже представленную кнопку, будут выводиться похожие гайды на "[#2] Создание модов для RimWorld — Шаг 2 — Состав мода. События.". Также для удобства поиска используйте ссылки на теги, которые расположены выше (в конце описания гайда).

Чтобы приступить к поиску, введите ваш запрос и нажмите клавишу «ENTER»