IdealIndustrial / GT5Unofficial

38 stars 28 forks source link

[BUG]Нет сохранения инвентаря машины при перезаходе в одиночной игре. #281

Closed Pilad closed 4 months ago

Pilad commented 11 months ago

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

Воспроизведение Берем дробитель, помещаем батарейку и стак руды. Дробим хотя бы 1 блок руды. Выходим из игры и в масераторе ничего нет, пропадает батарейка и руда вся.

Ожидаемое поведение Должно сохранять инвентарь машины.

Дополнительная информация Скриншоты/Логи/Краши/Видеоролики относящиеся к багу

Среда опишите среду в которой произошла ошибка

Pilad commented 11 months ago

На гтнх фикс : https://github.com/GTNewHorizons/GT5-Unofficial/commit/2ed0d164315810c0c03e92d30e52225a8228ac99

Pilad commented 11 months ago

Работает , но проблема появляется при работе с машинами. Берем ассемблер на 128. Закидываем пыльки галлия и тонкую платиновую проволочку стак. И болты никель-цинк-феррита стак. Заливаем 4 слитка полиэтилена. После начала работы меха по изготовлению смд диодов закидываем 20 тонких отоженных проволочек из меди. Ассемблер заканчивает работу по изготовлению диодов как только кончится жидкий полиэтилен, после начинает делать катушки из феррита и проволочки. делает 2 операции и останется 4 отожженых медных проволочки. Опять заливаем полиэтилен на одну операцию, 288л/2слитка. Появляется конфликт рецептов. Ассемблер может сделать как смд диоды , так и обычные диоды из галлия и 4 отожженых медных проволочек. Но не делает не первое не второе. И продолжает стоять и думать. Чтоб отвис нужно дать 4 медных проволочки, начнет делать катушки и вернется после к смд диодам. изображение изображение изображение

Pilad commented 11 months ago

Можно запустить операцию если феррит болты забрать и вернуть. Если в процессе опять подлить полиэтилен мех продолжит делать смд диоды. Но если встал мех и подлить полиэтилен, то мех продолжит висеть.

Pilad commented 11 months ago

Хотя сразу можно поместить два конфликтующих рецепта ,залить два слитка полиэтилена и машина зависнет. изображение

Pilad commented 11 months ago

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

Pilad commented 11 months ago

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

Pilad commented 11 months ago

Проверил на гтнх, там центрифуга берет и выполняет рецепт который возможен и не циклится на невозможном.

SapientMC commented 9 months ago

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

DinCraft commented 9 months ago

Можно отлавливать события изменения инвентаря механизмов. При добавлении\удалении компонентов нужно подобрать подходящий рецепт и создать переменную, которая будет показывать кол-во раз, когда рецепт сможет быть выполнен от момента изменения состояния инвентаря. То есть, если залить охл. лаву в центрифугу, а после положить 64 латекса, майнкрафт сделает проверку рецептов 2 раза, при этом во второй раз в механизме обнаружатся компоненты для ещё одного рецепта, появится переменная: recipesLeft = componentAmount/componentAmountForRecipe (64=64/1, т.к. для рецепта центрифугирования латекса уходит ровно 1ед. латекса). И после каждого выполнения рецепта, в случае, если новых компонентов не было добавлено, нужно будет лишь уменьшать значение счётчика: recipesLeft = recipesLeft-1.

WiseProjects commented 4 months ago

duplicate #267