Перейти к содержимому
Бунтовые биты

Бунтовые биты

  • Дом
  • Новости
  • Путеводители
  • Видео-гиды
  • Примечания к патчу
  • Сообщить о нарушении
  • Переключить форму поиска
Планета Крафтер

Инвентарь Planet Crafter и другие модификации (dnSpy)

Опубликовано 03/25/2022 К корневой кивок Без комментариев на Инвентарь Planet Crafter и другие модификации (dnSpy)
  • Заголовок: Планета Крафтер
  • Дата выпуска:
  • Разработчик: Игры Миджу
  • Издатель: Игры Миджу
Информация о The Planet Crafter пока неполная.. Пожалуйста, помогите нам заполнить детали игры, используя это контактная форма.

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

Игра написана на Unity и C#, что позволяет относительно легко исследовать ее с помощью инструмента dnSpy..

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

Препараты

  • Загрузите последнюю доступную версию dnSpy.
  • Распакуйте его в подходящее место и запустите dnSpy.exe.
  • В файле > Открыть, найдите Сборка-CSharp.dll в
    %{паровой реж.}\commonThe Planet Crafter ПрологPlanet Crafter_DataManaged

    каталог.

Я рекомендую использовать “Редактировать метод” вместо “Редактировать класс” чтобы избежать радикальной перекомпиляции несвязанных частей кода, которые могут сломать что-то еще. Также, В dnSpy есть ошибки, поэтому не нужно его искушать.

Изменить сортировку

По умолчанию игра сортирует предметы по названию, но мне нравится, когда воздух и еда находятся в начале списка.. Сортировка осуществляется в SpaceCraft.Инвентарь::Автосортировка() метод. В настоящее время метод имеет выражение LINQ для сортировки, которое мы заменим прямым вызовом Список::Сортировать().

this.worldObjectsInInventory.Sort(делегат(МирОбъект a, МирОбъект б)
{
    идентификатор строки = a.GetGroup().GetId();
    строка id2 = b.GetGroup().GetId();
    если (id.StartsWith("КислородКапсула") && !id2.StartsWith("КислородКапсула"))
    {
        возвращаться -1;
    }
    если (!id.StartsWith("КислородКапсула") && id2.StartsWith("КислородКапсула"))
    {
        возвращаться 1;
    }
    если (id.StartsWith("ВодаБутылка") && !id2.StartsWith("ВодаБутылка"))
    {
        возвращаться -1;
    }
    если (!id.StartsWith("ВодаБутылка") && id2.StartsWith("ВодаБутылка"))
    {
        возвращаться 1;
    }
    вернуть идентификатор.CompareTo(идентификатор2);
});

Я не знаю всех идентификаторов элементов, но их можно сбросить в файл из этого метода через StreamWriter..

Переместить предметы одного типа в/из инвентаря

По умолчанию, можно перемещать предметы один за другим, что может быть утомительно. Нажатие на изображение инвентаря обрабатывается SpaceCraft.InventoryDisplayer::OnImageClicked() метод. По умолчанию, у него есть действие для щелчка левой и правой кнопкой мыши. Поскольку я не смог найти способ проверить наличие модификаторов, таких как клавиши Shift или Ctrl., Я решил использовать среднюю кнопку мыши..

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

если (_eventTriggerCallbackData.pointerEventData.button == PointerEventData.InputButton.Middle)
{
    DataConfig.UiType opensUi = MijuTools.Managers.GetManager().GetOpenedUi();
    если (openUi == DataConfig.UiType.Container)
    {
        Инвентарь ((UiWindowContainer)MijuTools.Managers.GetManager().GetWindowViaUiId(открылсяUi)).ПолучитьДругойИнвентарь(этот.инвентарь);
        если (этот.инвентарь != ноль && другоеИнвентарь != ноль)
        {
            идентификатор строки = _eventTriggerCallbackData.worldObject.GetGroup().GetId();
            Список списка = новый список();
            foreach (WorldObject worldObject2 в this.inventory.GetInsideWorldObjects())
            {
                если (worldObject2.GetGroup().GetId() == идентификатор)
                {
                    список.Добавить(мирОбъект2);
                }
            }
            foreach (WorldObject worldObject3 в списке)
            {
                если (другойInventory.AddItem(мирОбъект3))
                {
                    this.inventory.RemoveItem(мирОбъект3, ЛОЖЬ);
                }
            }
        }
    }
}

Емкость инвентаря (Обман)

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

Инвентарь управляется вышеупомянутым SpaceCraft.Инвентарь класс и его емкость обрабатываются в инвентарьРазмер личное поле. К сожалению, все, что я мог сделать, это перезаписать это поле в 3 локации: конструктор, геттер и сеттер, чтобы не сильно нарушать структуру сборки:

публичный инвентарь(int _inventoryId, int _inventorySize, Список _worldObjectsInInventory = ноль)
{
    this.inventoryId = _inventoryId;
    this.inventorySize = _inventorySize;
    this.inventorySize = 250; // <----------------------------------
    this.worldObjectsInInventory = ((_worldObjectsInInventory != ноль) ? _worldObjectsInInventory : новый список());
    this.authorizedGroups = новый список();
}
общедоступный int GetSize()
{
    this.inventorySize = 250; // <----------------------------------
    верните этот.inventorySize;
}


общественная пустота SetSize(int _inventorySize)
{
    если (_inventorySize == this.inventorySize)
    {
        возвращаться;
    }
    this.inventorySize = _inventorySize;
    this.inventorySize = 250; // <----------------------------------
    this.RefreshDisplayerContent();
}

Однако, это имеет некоторые последствия для пользовательского интерфейса:

  • Экран инвентаря игрока выйдет за пределы экрана, и вы не сможете ни с чем взаимодействовать за его пределами..
  • Это влияет на оборудование “инвентарь”
  • Это влияет на все контейнеры, включая основной майнер.
  • Поднятые предметы добавляются в конец инвентаря и могут быть не видны., включая воздух, вода и продукты питания.
  • Слишком много кликов при помещении инвентаря в контейнеры.
  • Задержка экрана при просмотре и перемещении предметов в контейнерах.

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

Местоположение астероида (Обман)

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

Астероиды обрабатываются в SpaceCraft.AsteroidHandler и целевой выбор находится в СпаунАстероид() метод. Найдите петлю и в ней, вектор, рассчитанный с помощью случайного числа Unity и радиуса. Измените его на что-то вроде этого:

Вектор Vector2 = UnityEngine.Random.insideUnitCircle * Матем.мин.((плавать)_asteroidEvent.distanceFromPlayer, 20ж);

Причина, по которой я использую Math.Min, заключается в том, чтобы избежать нежелательной повторной оптимизации метода при его перекомпиляции.. 20f довольно узкий, поэтому я рекомендую выйти на открытое поле или на возвышенность.. Эта концентрация имеет тот недостаток, что локация игрока затоплена обломками, которые могут похоронить игрока, и эти камни остаются на несколько минут, прежде чем исчезнуть..

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

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

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

Навигация по публикациям

Предыдущий пост: Потерянное желание: В отчаянном мире: руководство по достижениям
Следующий пост: Руководство по прохождению достижения A Memoir Blue

Оставить ответ Отменить ответ

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

  • Заголовок: Планета Крафтер
  • Дата выпуска:
  • Разработчик: Игры Миджу
  • Издатель: Игры Миджу
Информация о The Planet Crafter пока неполная.. Пожалуйста, помогите нам заполнить детали игры, используя это контактная форма.

Отказ от ответственности

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

Авторское право © 2025 Бунтовые биты.

Питаться от Пресс-книга новостей Тема WordPress