[#3] Создание модов для RimWorld — Шаг 3 — HediffDef. Атрибут DefOf, Сложный перевод. - RimWorld гайд

Автор: KOLAMBUS

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

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

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

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

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

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

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

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

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

Ходи в класс это класс обработчик он дефолтный hedef виском с если вы используете camps и либо его можно убрать если вы компании используете начальное.

Severity это значение которое будет установлено когда человек пешка получит болезнь тэн темпл.

Это может ли ваша болезнь или какое-то состояние.

Быть перевязана например вы можете сделать какую-то.

Болезнь которую нельзя будет вылечит ирис она будет прогрессировать но ее нельзя будет перерезать вообще теперь обратимся в hi-def дев его можно будет эти просто написав iv дав и вот он значит оконцах я расскажу попозже начальная severity я выше сказал стадии севере тихо div вообще в принципе работает по станем каждая стадия привносит какое-то изменение то есть чем дольше например болезнь а тем хуже и хуже и хуже становится вашей пешки или например вас попала пуля по и происходят кровотечение она увеличивается и от этого становится все хуже и хуже и хуже а стадиях я расскажу чуть чуть попозже тнт был я уже сказал is bad это является ли она плохой это влияет на различные внутреигровые процессы то есть то как игра определяет вашу болезнь является ли на плохой или каким-то например алкогольным опьянением что по факту ну скажем так не является совсем плохим spawn финку андре могут это здесь указывается тхи дэн дев предметы которые будет заставлен когда часть тела на которой висит вашей dbf будет удален пример это протеза когда вы ставите протез например на левую ногу она в состоянии здоровья отображается там протез такой-то и левая нога когда вы делаете операцию удалить протез состоянии пропадает и появляется вот это собственно протеста что указывает в этой переменной.

Делает ли она уведомление нужно лечение амин severity я уже сказал а может ли быть добавлена сценария хе-ге vgevery это скажем так.

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

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

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

Как ванильные болезни или какие-то предметы такие собственно другие мода вы а я вам расскажу о самых основных это hi def con properties стенду решен это штука которая указывает работать только вместе с этим параметрам точнее ошибок вы не получите просто по факту работать а сам механизм не будет если не будет перевязан возможность перевязки вашего состояния она указывает различные изменения когда ваша болезнь непосредственно перевязана здесь есть сколько держится вот эта перевязка то есть тридцать восемь часов затем есть насколько будет падать severity каждый день здесь как раз таки собственно отображается уже непосредственно сам процесс работы то есть мы делаем начальную например 01 летально указываем один каждый этом например день у нас будет повышаться на 5 но если пешку перевяжут каждый день будет падать там на 10 например и пока он перевязан этот эффект работает собственно это можно посмотреть в той же например кровотечение вы перевязали по факту эффекторов в течение больше не работает да вы можете заразиться много кровь бы само по себе больше не теряете эта переменная указывает а если будет какой порог требуется лечение качество чтобы болезнь исчезла вообще то есть например здесь указано 80 если качество лечения будет 80 и больше полезнейший.

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

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

Имеем severity 0300 30 по факту.

Предположим ваша болезнь имеет значение 020 будет выбрана tastes 015.

025 также с 015 как только будет например 030 и 035.

Будет выбран этаж 0 3 я думаю в принципе понятно но стоит это все-таки отметить так может быть кому то это будет совсем лейбл это надпись которая будет показана здесь также есть 1 day one сик у нас есть лейбл самого hi-def а.

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

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

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

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

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

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

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

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

Следующий месяц посад это опять же в процентах измени например вы хотите чтобы дыхание было на 50 процентов хуже вы пишете 0,5.

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

Asset макс он конкретно устанавливает максимальное значение например это сделала как в операциях когда вы делаете операцию наркоз сознанием максимум 10 и не что это не может изменить на этом в кампусах в принципе все в статусе все в принципе тоже самое здесь из стендов и well you start of и можем найти стад дефов.

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

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

И теперь я бы хотел немножко заострить внимание на непосредственно переводе перевод здесь немножечко делается по-другому лейбл переводится как мы с вами привыкли то есть пишется df name и лейбл затем пишется написать само значение а вот стадии переводится немножко по-другому я немножко отклонюсь и забегу в тему переводов которые мы тоже будем с вами разбирать а иногда есть вещи которые не могут быть ну скажем так не имеют своего ключа как таковых то есть например вкладка с тысяч мы хотим перевести лейбл но как система должна понять какой элемент списка нам переводить конечно вы можете сказать ну для же вижу 1 2 там 3 да круто но на уровне ну скажем так кода это немножко по-другому работа для этого существуют так называемые ключи них мы можем посмотреть здесь я уже вам показывал они помечаются как translation in high ну то есть это непосредственно ключ по которому будет найден тот или иной список разработчик как правило записывает если есть такая вот перемена то есть она указана пример не у лейбла а у какой-то другой вообще переменах правило в каком-нибудь послать ее меняет в нашем случае мы посмотрим что хиди встреч ключом у нее является непосредственно вот этот лейбл то есть чтобы нам перевести например вот этот элемент нам нужно указать либо минора.

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

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

То есть вот например у нас есть лейбл виз space чтобы перевести ее мы пишем виз нижние подчеркиваем space и так чтобы перевести наш hi-def.

Мы пишем daf daf name is he give лейбл такой перевели название чтобы перевести нам первую надпись минор мы пишем df name стоишь затем лейбл.

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

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

Дефолте вот этот ваш dfm как раз таки является этим самым ключом принципе теперь можно уже поставить болезнь и посмотреть супса как она работает для тестов я советую поставить здесь побольше значения чтобы не ждать полчаса пока ну там накрутиться единстве что я сделалa давайте еще поставим вот здесь become весь был чтобы увидеть это закидываем вашу игру и запускаем итак я запустил новую колонию чтобы выдать наш с вами сидим заходим в режиме разработчиков первых шестеренку пишем от hedef находим наш к div и выбираем фишечку здесь вам предложат выбрать часть тела так как мы особо с этим не заморачивались ну выбери например мозг нажмем здоровье и не увидим ничего включен к галочки и увидим нашу болезнь разумеется если у человека нет режим разработчики он эту болезнь наш увидеть не будет собственно на что и влияет вот этот параметр become visible.

Я поставил специально на две стадии что так и куда стоит пятерочка будет пополняться очень быстро включил опять наши галочки и направим здесь собственно наши severity то что она скрыта 10 процентов отображается информация о нашем компетентный шин так как он у нас не перевязан разумеется она не работает и иммунные и последний наш с вами комп который указывает что будет добавляться 5 каждый день сделаем третью скорость и посмотрим что вот анонсами наполняется она нас начальная и так вот она у нас дошло до 0 3 чтобы это посмотреть снова направляем и видим 30 процентов здесь параметра become виде был уже нет следовательно вот она сами spa является так как мы перевели его как с пробелом появляется непосредственно надпись пробелом и опять же сначала идет лейбл а потом непосредственно стадия и собственно как и влияют на наши с вами параметры.

Дождемся пока она дойдет до 100 процентов или хотя бы до 70 80 и собственно так как у нас было указано летал severity один наша пешком было ровно как только достигло 100 процентов 1 из 100 процентов на этом.

Редактирование конкретно дефо в принципе можно завершить.

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

Мы с вами сразу знакомимся как работают камсы концы работают вообще так скажем так в два этапа.

У них есть скажем properties это скажем так класс который позволяет указывать какие-то динамические настройки например чтобы вам постоянно не менять это внутри вы можете тут вынести такой параметр сделать его себе и не пытается сам обработчик как это реализовывается возьмем любой откроем посмотрим а класс должен наследоваться от hedef ком properties также сразу желательно соблюдать непосредственно правило выведенный разработчикам график сделать ходи в ком properties шум с вами сделаем как gif оставим его public.

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

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

Именуются просить о опять же кивком и потом непосредственно название делаем отличную.

Рублях сборку.

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

Делаю переменную типа этого называемые картечь props.

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

Покажу обратиться какой-нибудь переменной нашем случае props и вот здесь наш как раз таки тест парам и например это может быть отвечать на проводится какой-нибудь скорость например болезни или там урон от болезни какому-то человеку а то не понравилось вам не понравилось и чтобы вам легче это например тестировать вы просто меня чуть параметр без перекомпиляции всего мода и быстренько заходите в игру и проверяете так теперь касаясь что касается непосредственно методов а здесь есть parent это указывает на класс непосредственно главный который указывается в секунду вот здесь фиги в класс в принципе это hi-def и scams ну или если вы какой-то свой бочек сделать им разумеется это будет ваш обработчик мы к нему еще нужно будет перевести бобу это на ком висит это болезнь df это непосредственно сами настройки болезни ну например это полезно если вы захотите что-нибудь сбрасывать например болезнь но начало через какой то промежуток времени или при каких-то условиях вы можете у себя внутри там сделать какой-нибудь начальное severity либо обращаться просто дев выбрать это поле оттуда что собственно гораздо удобней здесь есть кучу виртуальных методов которые можно переопределить это может быть удалено компом то есть вообще в принципе удалена иконка ну текстура и цвет непосредственно вашей болезни есть две переменные дополнительный инфе компостный вызывается когда болезнь была выдана то есть главный класс инициализируется и для каждого компа вызывает вот этот метод а комп постиг вызывается каждый кадр и передает а severity которая собирается из всех компов объясняя как это работает вот у нас есть здесь стенду решением — был и наш то сходив смысл в том что когда происходит тег делается по всем вот этим компом цикл и вот это вот severity которая будет на которой будет увеличена изменена лучше сказать ваш родив собирается вот как раз таки из этих корпусов она передается по рифу здесь немножечко программирования риф эта передача по ссылке то есть изменяя вот эту перемену она меняется но грубо говоря на корневом уровне то есть во всех остальных тоже в базовой реализации здесь ничего не меняется но например в нашем случае.

Так как здесь вот указывал 35 то будет как раз таки вот меня как раз таки на 5 то есть делается цикл он заходит в него этот указывать свое значение и на собственно это значение увеличивается сейчас мы с этим тоже разберёмся комплекс по ул дата это метод для сохранения каких-то данных внутри вашей болезни ну например если вы хотите делать что-то энное количество времени лили энное количество раз то есть болезнь выпадает он примерно должна ударить вашу пешку 10 раз вы запомнили из то есть ударили в 10 раз остановились но разумеется после перезагрузки сейфа перемена сбросится ее 5 удариться вы можете здесь сделать сохранение сохранения тоже сегодня расскажу итак окампо спас от это непосредственно когда она была добавлена здесь передаться damage in фидами чин сохранить кучу информации о уроне ну или о том что ну скажем так.

Проще показать здесь есть различный урон кто сыне civil то есть а такер кто это сделал и еще куча всяких категорий в какую часть тела попало и прочее прочее прочее.

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

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

Интервал мы можем указать с помощью пары sentir из хэш интервал кик мы с вами по я показывал вам что можно сделать вот так kids game.

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

Интервалами если посмотреть как это реализовывается то здесь под капотом как раз таки все тоже самое здесь есть хорошо все который собирается istick game то есть то что вы сами показывать затем идет здесь посмотри у них king есть одышка своя уникальная в рамках sayfa.

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

Просто она идет как перемена чтобы создать взрыв есть один какой большущий метод точнее с 34 класс просите ginex плаксив и здесь один единственный метод это дуэт клушин который позволяет создать взрыв всех возможностей всех всевозможных настроек давайте попробуем это сделать напишем делать 100 шин дует сложно то есть создать взрыв первый параметр это центр то есть где будет взрыв так как наша пешка то мы пишем palm упал на есть такая переменная как позициям то есть где он сейчас находится что нами нужна карта где будет проведена карта здесь тоже небольшое отклонение о собственном скажем так грубо говоря карта спавнится в одних и тех же координатах то есть скажем у вас есть карта 100 на 100 одна и другая карта 100 на 100 координаты например 33 33 03 будет одинаково находиться в обеих картах но разумеется так и карты по своим из генерировались сама наполнение чтобы нам определить на какой разумеется о карте было мы пишем не птица саму карту нашем случае эта карта полна то есть ползунок радиус мы будем брать его из проб ce n’est па рам затем идет думаешь тип а здесь сразу скажу что при создании взрывов все типы кроме взрыва могут внести некоторые проблемы в частности у них нету звука взрыва который будет производить либо мы указываем sound сами либо мы указываем взрыв a damage типы можно посмотреть occur if i’ll спай пишем ddf и здесь принципе все основные есть это и повреждение стрелой гуляй бомба сгорела что-то отмороженная mps стан и прочее прочее прочее ну мы возьмем с вами взрыв он будет ругаться добавляем индикатор.

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

Ну например 10 радиус и попробуем вновь запустить игру.

И так теперь проверим наш параметр работы 10 миллионов чьи работы поставим всех пешек плату.

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

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

Заходим в наш этот пишем те сходив и вроде бы круто мы находим наших и div div и все у нас все в шоколаде вот только проблема в том что если посмотреть как реализуется как немец сейчас депутата база давайте найдем он перебирает использует как называется dictionary эта коллекция уже говорил где первое значение является hашему ключом another является хишам второе это значение это довольно быстро но в любом случае медленнее чем получать не к конкретной посылки каждый раз для этого используется а второй способ это статичный класс помеченный hi-def тифом как он реализовывается создается переменное неважно где вот здесь вообще не имеет значения мы создадим в папке hi-def так как мы будем создавать общую переменную х дефов дефов именуется она как и div div of это так делает разработчик имя класса ни на что не влияет просто так гораздо понятней а я заметил у некоторых ударов такую тенденцию рой сам этим пользуюсь что они место вот hi-def div-ов дописывает еще local ну указывает что это конкретно в моем моде создаем важно пометить его стати com и последний шаг это будет добавить ему атрибут львов добавляем чтобы поместить сюда ссылку на определенный hi-def.

Или это любой другой объект мы пишем public static.

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

Дафна мтс и div то есть после запуска игры вот в эту переменную будет записан единственный экземпляр х дефо 5d в игре они являются синглтон ими то есть они ищут в единственном экземпляре поэтому здесь сразу отмечу что если вы например захотите изменить ходи в дев в игре ну например после какого-нибудь события то все предметы.

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

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

Овну.

Позиция ветров и здесь рушит затем указываем карту.

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

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

Либо можно пойти посмотрим help здесь вот есть отходить но он принимает также здесь d.

Какая часть была заражена урон если нужен дополнительный worker и это нам пока все не нужно в таком случае мы можем сделать так но тогда если будет повторная выдача непосредственно наш с вами hi-def а может она будет затерто то есть будет выдан новое разработчика нас позаботился и сделал небольшой такой класс hold utility и здесь есть метод аджусси берите где есть.

Пешка которую выдаем что выдаем и насколько выдаем.

И вроде бы все тоже самое но если посмотреть наполнение этого метода мы заметим что здесь он сначала получает уже болезнь на пешке то есть вы ее ранее выдали и пробуйте выдать снова он видит что об болезнь уже есть и к этой болезни которая есть добавляет наш с вами о все то есть этот severity сколько мы указали в противном случае создает новую вы можете это сделать сами то есть просто скопировать по факту этот код и сделать но собственно началом заворачиваться если разработчик за вас уже сделал небольшой метод чтобы выдать передаем пешку которую выдаем и вот здесь нам нужно указать df h дефо как я уже сказал мы могли бы сделать вот так div div div.

Dvd то база.

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

Поэтому это просто умираю пишем give them of local разумеется он не идет потому что это другое пространство имен добавляем.

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

Дав of local.

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

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

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

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

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

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

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

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

Не начнут взрываться.

Можно устроить куда больше тотальный взрыв если убрать home online тогда и животные также начнут получать он но животным довольно страшновато выдавать это потому что есть шанс что будут ошибки так какие-то живут и могут не поддерживать какие-то могут поддерживать но в принципе это вы можете сами поэкспериментировать а есть еще класс обработчик это с непосредст вас обходить то есть когда вы делали ходи в виском вы на следователь на след наследовались от него возьмем его скорость по факту наследуется от того же he give a просто он поддержит у как растет с вами вот эти вот camps и писать свой hedef мы не будем здесь в принципе так все понятно я вам немножко расскажу об этом чтобы создать вы наследуете просто лучше всего от хиди песком со.

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

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

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

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

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

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

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

Devs это сохранение полей которые содержат ссылку на тв.

Сейчас я вам покажу как это работает возьмем наш с вами hi-def comb переопределим expanse да тут предположим у нас здесь будет переменная которая указывает на какой-нибудь предмет например там мой этим что то произошло например в конструкторе или по умер вы в мае teams там что-то занесли ну давайте я не знаю handy for local of извиняюсь ну например батарея то есть человек умирает вы заносите в переменную вашего батарей вы хотите это сохранить то есть например вы хотели задумать чтобы с этой пешки можно будет залатать эту батареи вот только незадача пешка умерла.

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

Null reference потому что здесь будет ту чтобы это сделать вы можете написать skydex.

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

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

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

Это как она будет отображаться в сохранении ну например моим там напруга сейчас мы с вами все это разберемся вам покажу затем идут reference и того как раз таки по ссылке devs по факсу это тоже самое но там немножко реализация отличается но мы-то особо знать не надо как узнать можно ли сохранить какой-то объект по reference вы должны найти этот объект в иерархии например pawn у него должно быть.

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

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

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

Как способов он реализован один лишь метод x + дата идем в котором вы также пишите у дойдем skype дескать блю и прочее прочее причем это работать рекурсивно то есть если здесь есть какой-нибудь.

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

Удалим наш с вами тех и создадим здесь переменную.

Сделаем ее il-2 тишинков скал и маечка во сколько раз.

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

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

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

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

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

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

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

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

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