Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fabricator recycling #12191

Closed

Conversation

AirBlack
Copy link
Contributor

@AirBlack AirBlack commented Sep 28, 2023

Описание изменений

Добавляет переработку фабрикаторами изученных предметов. Разбирает на ресурсы, требуемые для производства такого же предмета, но умноженное на 0.8. В зависимости от размера предмета разное время разбора.

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

Темы обсуждения:

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

Если фича зайдет, могу подобную запилить и на протолат, чтобы разбирать нерабочие прототипы на ресурсы без получения очков исследования(деструктив анализатор дает только стекло и металл)

Почему и что этот ПР улучшит

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

Ну и шахтеры могут разбирать всякое говно по типу ригов.

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

Авторство

AirBlack - код и идея

Чеинжлог

🆑 AirBlack

  • rscadd: Возможность перерабатывать предметы в фабрикаторе.

@TauKitty
Copy link
Contributor

Changelog status: ✔️

@TauKitty TauKitty added the Feature Новая фича label Sep 28, 2023
@AirBlack AirBlack changed the title Mech fabricator recycling Fabricator recycling Sep 28, 2023
@AirBlack

This comment was marked as abuse.

@AirBlack

This comment was marked as abuse.

…ator with item if fabricator cannot disassemble it
@AirBlack

This comment was marked as abuse.

@volas volas added the Test Merge Candidate ПР с этим лэйблом будет или уже находится с тест мерже label Sep 30, 2023
@AirBlack

This comment was marked as abuse.

@AirBlack

This comment was marked as abuse.

@AirBlack

This comment was marked as abuse.

@AirBlack

This comment was marked as abuse.

@Fenriros
Copy link
Contributor

Fenriros commented Oct 2, 2023

Я тебе делаю глубокий поклон за это.

@AirBlack

This comment was marked as abuse.

@AirBlack

This comment was marked as abuse.

@volas volas removed the Test Merge Candidate ПР с этим лэйблом будет или уже находится с тест мерже label Oct 3, 2023
@AirBlack

This comment was marked as abuse.

@AirBlack
Copy link
Contributor Author

а че не так то

@volas
Copy link
Member

volas commented Oct 11, 2023

могу вернуть в тм, мне просто показалось оно еще ворк ин прогресс

@AirBlack
Copy link
Contributor Author

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

@volas
Copy link
Member

volas commented Oct 26, 2023

do it

@AirBlack
Copy link
Contributor Author

а я забыл совсем ща поковыряюсь

@AirBlack
Copy link
Contributor Author

на do_after переделал, ща добавлю исключения по contents и нашел баг с рецуклингом мехов, то что считается только chasis по ресурсам

…ator is recycling, added blocked types, fixed cable layer runtime on destroy
@volas
Copy link
Member

volas commented Dec 8, 2023

Я пока думаю. Хранить такие листы текстом действительно может иметь смысл: initial полезный, и это еще более эффективно с точки зрения памяти. Особенно если обращения к нему редкие и оверхед с чтением такого листа незначительный.

Еще подобным образом и техуровни сделаны, можно сделать стандартом. Попробовать написать красивые макросы для инициализации, может быть для удобства сохранять лист как json (конвертация будет просто через нативные jsonencode/jsondecode для рантайм доступа и редактирования).

Я чуть позже еще вернусь к этому.

@AirBlack
Copy link
Contributor Author

AirBlack commented Dec 8, 2023

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

@AirBlack
Copy link
Contributor Author

зацените мой диагноз

F32.10 – Депрессивный эпизод средней степени без соматических симптомов

@AndroBetel
Copy link
Member

педовка ты

@AirBlack
Copy link
Contributor Author

плевать что пиздят крысы за спиной у кисы, теперь я на антидепрессантах и мне похуй ваще или не похуй хуй знает седня первый день

@volas
Copy link
Member

volas commented Dec 14, 2023

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

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

construction = MAT_METAL+"=200;"+MAT_GLASS+"=50"

на

construction = "[MAT_METAL]=200;[MAT_GLASS]=50"

@AirBlack
Copy link
Contributor Author

Я сначала так попробовал, но интерполяция строк через [penis] не работает в статике даже если внутри статические константы. Ошибка компиляции, ругается на то что динамическое чето там. Только через плюс

@volas
Copy link
Member

volas commented Dec 15, 2023

пипец. Можно тогда деградировать еще дальше, и вместо MAT_METAL писать сразу "metal", прям как в техах. Оно тут нужно было бы только лишь очепятки предотвратить, но можно было бы это сделать отдельной регуляркой в CI-тестах

@AirBlack
Copy link
Contributor Author

Ну CI это не моя проблема, и все-таки лучше мне кажется дефайны использовать

Copy link
Member

@volas volas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну CI это не моя проблема, и все-таки лучше мне кажется дефайны использовать

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

@@ -569,7 +569,7 @@ var/global/list/airlock_overlays = list()
if (isElectrified())
if (isitem(mover))
var/obj/item/i = mover
if (i.m_amt)
if (params2numberlist(i.construction)[MAT_METAL])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это ппц такое делать в CanPass, сделай лучше флаг дверям conductive = FALSE и в atom_init определяй как TRUE при этом условии. Тут останется флаг проверять.

var/temp_list = list()
var/params_list = params2list(params)

for(var/key as anything in params_list)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
for(var/key as anything in params_list)
for(var/key in params_list)

какой-же params неудобный кстати, что из коробки только текстовые параметры поддерживает

/proc/numberlist2params(list/number_list)
var/temp_list = list()

for(var/key as anything in number_list)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
for(var/key as anything in number_list)
for(var/key in number_list)

@@ -1,7 +1,6 @@
/obj
//var/datum/module/mod //not used
var/m_amt = 0 // metal
var/g_amt = 0 // glass
var/construction = "" // Resources used for construction
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я хотел предложить переименовать в materials, но забавный факт - кто-то умудрился уже объявить эту переменную у /obj/item, и кто-то даже умудрился скопипастить массивы материалов с тг в паре мест, которые естественно нигде не используются и ни на что не влияют.

Потому я бы сначала предложил текущие материалы, типо

materials = list(MAT_METAL=150, MAT_SILVER=50)

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

И уже после спокойно переименовать var/construction в более понятный и подходящий тут (на мой взгляд) var/materials

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

да я это видел но не понял нахера оно нужно, там где-то в комментах я отписывал

Comment on lines +52 to +57
/obj/proc/can_be_disassembled()
/*
Returns TRUE if this item can be safely disassembled by recycling.
TODO: Add more implementations and use this proc in RnD deconstruction and autolathe recycling
*/
return contents.len == 0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я бы предпочел, чтоб автолаты и материалы были в разных ПР-ах, так было бы удобнее обсуждать и мержить. Но раз уж закоммитил всё вместе уже, то ладно.

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

Возможно для автоматического разбора по контентсам стоит ориентироваться уже на какие-то существующие флаги объектов, или конкретные пути (всё равно уже есть черный список disallowed_types), или конкретный специфичный контентс (банально проверять, что нет мобов внутри, и всё остальное разбирать).

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

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@@ -263,8 +261,7 @@
icon_state = "floor" //not a slime extract sprite but... something close enough!
item_state = "slime"
w_class = SIZE_MINUSCULE
m_amt = 0
g_amt = 0
construction = MAT_METAL+"=0;"+MAT_GLASS+"=0"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
construction = MAT_METAL+"=0;"+MAT_GLASS+"=0"
construction = null

@@ -3,8 +3,7 @@
desc = "An updated, modular intercom that fits over the head. Takes encryption keys."
icon_state = "headset"
item_state = "headset"
g_amt = 0
m_amt = 75
construction = MAT_METAL+"=75;"+MAT_GLASS+"=0"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
construction = MAT_METAL+"=75;"+MAT_GLASS+"=0"
construction = MAT_METAL+"=75"

@@ -25,7 +25,7 @@
desc = "HOLY SHEET! That is a lot of glass."
singular_name = "glass sheet"
icon_state = "sheet-glass"
g_amt = 0
construction = MAT_GLASS+"=0"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
construction = MAT_GLASS+"=0"
construction = null

@@ -177,8 +176,7 @@
desc = "Glass which seems to have rods or something stuck in them."
singular_name = "reinforced glass sheet"
icon_state = "sheet-rglass"
g_amt = 0
m_amt = 0
construction = MAT_METAL+"=0;"+MAT_GLASS+"=0"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
construction = MAT_METAL+"=0;"+MAT_GLASS+"=0"
construction = null

@@ -107,7 +107,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list (
desc = "Sheets made out off metal. It has been dubbed Metal Sheets."
singular_name = "metal sheet"
icon_state = "sheet-metal"
m_amt = 0
construction = MAT_METAL+"=0"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
construction = MAT_METAL+"=0"
construction = null

Copy link

github-actions bot commented Jan 4, 2024

Данный ПР автоматически отмечен как застоявшийся по причине длительного отсутствия обновлений. Он будет закрыт через 7 дней, если никакой активности не будет проявлено. Если вы считаете, что ПР еще актуален, или что я (злобный робот) пристаю к вам зря - просто напишите любой комментарий. Спасибо за ваш вклад.

Copy link

ПР закрыт из-за длительного отсуствия активности. Для переоткрытия ПРа, пожалуйста, обратитесь к кому-либо из мейнтейнеров. Вы можете призвать их в комментарии слапнув @TauCetiStation/maintainers.

@github-actions github-actions bot closed this Jan 11, 2024
@AirBlack
Copy link
Contributor Author

@TauCetiStation/maintainers переоткройте я на выхах поковыряю

@Chip11-n Chip11-n reopened this Jan 23, 2024
@@ -1429,7 +1428,7 @@
force = 5.0
throwforce = 7.0
w_class = SIZE_TINY
m_amt = 2550
construction = MAT_METAL+"=2550"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@volas Точно не лучше было бы иметь отдельный список var/list/construction_materials и var/list/materials которые сейчас есть в штучке?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

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

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

в 515 через :: можно получать листы по типу объекта

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

докажи

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:: просто шорткат для init, он не поможет. Списки инициализируются вместе с объектом, на своём скрытом шаге инициализации (типо New), и до инициализации объекта не доступны.

Хорошие новости - Люммокс согласен, что это проблема, и рассматривает варианты как это можно решить https://www.byond.com/forum/post/2904278#comment26636169

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это позже случилось, я видел. Лучше на листы тогда переделать.

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

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тогда ПР ждет 515? если да отметьте там чтоб пр не закрывался там хз

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

мы уже на 515, делай

Copy link
Contributor

@NinjaPikachuska NinjaPikachuska Jan 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If A::B isn't a static var, then it's equivalent to initial(A:B). If A is a constant type path, the compiler will go even
further by compiling this expression as the actual initial value instead of doing a runtime lookup.

оказывается, это не работает так, как нужно 😔
image
image

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

skill issue

@LudwigVonChesterfield LudwigVonChesterfield added the Pinned ПРы с этим лэйблом будут игнорироваться Stale-ботом label Jan 30, 2024
@LudwigVonChesterfield
Copy link
Contributor

@AirBlack Закрепил ПР, в ожидании 515.

Я бы предложил заранее выкатить ПР с списком, теперь когда всё будет на списках думаю могу взять ревью на себя.

@LudwigVonChesterfield
Copy link
Contributor

меня обманули со списками.

@LudwigVonChesterfield LudwigVonChesterfield removed the Pinned ПРы с этим лэйблом будут игнорироваться Stale-ботом label Jan 31, 2024
@AirBlack
Copy link
Contributor Author

AirBlack commented Feb 1, 2024

У меня есть идея как оставить списки и воспольщоватьсся :: в генерации автолатов, я попробую, если не получится, то хуйова

@AirBlack
Copy link
Contributor Author

AirBlack commented Feb 5, 2024

немного занят был на днях простите

Copy link

Данный ПР автоматически отмечен как застоявшийся по причине длительного отсутствия обновлений. Он будет закрыт через 7 дней, если никакой активности не будет проявлено. Если вы считаете, что ПР еще актуален, или что я (злобный робот) пристаю к вам зря - просто напишите любой комментарий. Спасибо за ваш вклад.

@AirBlack
Copy link
Contributor Author

меня разбанили друзья

@AirBlack
Copy link
Contributor Author

ладно мне лень и посрать как-то и я перестал играть, если вернусь, может закончу, хз

@AirBlack AirBlack closed this Feb 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature Новая фича
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants