-
-
Notifications
You must be signed in to change notification settings - Fork 423
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
Fabricator recycling #12191
Conversation
Changelog status: ✔️ |
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
…ator with item if fabricator cannot disassemble it
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
Я тебе делаю глубокий поклон за это. |
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
а че не так то |
могу вернуть в тм, мне просто показалось оно еще ворк ин прогресс |
ща попробую в ду афтер и добавлю списочек с тем что можно разбирать даже с contents, в который потом можно будет добавлять чего да. |
do it |
а я забыл совсем ща поковыряюсь |
на do_after переделал, ща добавлю исключения по contents и нашел баг с рецуклингом мехов, то что считается только chasis по ресурсам |
…ator is recycling, added blocked types, fixed cable layer runtime on destroy
Я пока думаю. Хранить такие листы текстом действительно может иметь смысл: initial полезный, и это еще более эффективно с точки зрения памяти. Особенно если обращения к нему редкие и оверхед с чтением такого листа незначительный. Еще подобным образом и техуровни сделаны, можно сделать стандартом. Попробовать написать красивые макросы для инициализации, может быть для удобства сохранять лист как json (конвертация будет просто через нативные jsonencode/jsondecode для рантайм доступа и редактирования). Я чуть позже еще вернусь к этому. |
идея с таким подходом кстати не моя, я ее спиздил из дизайнов где писались уровни исследования, они так же записаны но без убогих плюсов так как там нету дефайнов |
зацените мой диагноз F32.10 – Депрессивный эпизод средней степени без соматических симптомов |
педовка ты |
плевать что пиздят крысы за спиной у кисы, теперь я на антидепрессантах и мне похуй ваще или не похуй хуй знает седня первый день |
Макрос тут хороший не сделать, так как мы не можем запихать динамический код в объявлении переменной и всё пришлось бы делать на уровне препроцессора. А итерация силами препроцессора даже просто по динамическому набору параметров уже какое-то извращение, в определенном формате вообще не возможно. Так что я бы просто предложил изменить
на
|
Я сначала так попробовал, но интерполяция строк через [penis] не работает в статике даже если внутри статические константы. Ошибка компиляции, ругается на то что динамическое чето там. Только через плюс |
пипец. Можно тогда деградировать еще дальше, и вместо MAT_METAL писать сразу "metal", прям как в техах. Оно тут нужно было бы только лишь очепятки предотвратить, но можно было бы это сделать отдельной регуляркой в CI-тестах |
Ну CI это не моя проблема, и все-таки лучше мне кажется дефайны использовать |
There was a problem hiding this 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]) |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
да я это видел но не понял нахера оно нужно, там где-то в комментах я отписывал
/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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я бы предпочел, чтоб автолаты и материалы были в разных ПР-ах, так было бы удобнее обсуждать и мержить. Но раз уж закоммитил всё вместе уже, то ладно.
Мне не нравится этот новый метод у объектов - он очень специфичный, и название не отражает полностью смысл, и не очевидно по какой логике его вообще применять к объектам. И подозреваю, что его никто не будет специально развешивать по билду, и это путь в никуда.
Возможно для автоматического разбора по контентсам стоит ориентироваться уже на какие-то существующие флаги объектов, или конкретные пути (всё равно уже есть черный список disallowed_types), или конкретный специфичный контентс (банально проверять, что нет мобов внутри, и всё остальное разбирать).
Если распишешь, для каких ситуаций он нужен был, я может еще подумаю как лучше сделать.
There was a problem hiding this comment.
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" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
construction = MAT_METAL+"=0" | |
construction = null |
Данный ПР автоматически отмечен как застоявшийся по причине длительного отсутствия обновлений. Он будет закрыт через 7 дней, если никакой активности не будет проявлено. Если вы считаете, что ПР еще актуален, или что я (злобный робот) пристаю к вам зря - просто напишите любой комментарий. Спасибо за ваш вклад. |
ПР закрыт из-за длительного отсуствия активности. Для переоткрытия ПРа, пожалуйста, обратитесь к кому-либо из мейнтейнеров. Вы можете призвать их в комментарии слапнув |
@TauCetiStation/maintainers переоткройте я на выхах поковыряю |
@@ -1429,7 +1428,7 @@ | |||
force = 5.0 | |||
throwforce = 7.0 | |||
w_class = SIZE_TINY | |||
m_amt = 2550 | |||
construction = MAT_METAL+"=2550" |
There was a problem hiding this comment.
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
которые сейчас есть в штучке?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
у атомов он должен быть выпилен в пользу этого общего формата, эти списки непонятно как в билд занесло и они нигде не используются.
И текстовый формат лучше в том плане, что мы можем через init() его достать (ну и меньше памяти занимает). Он выглядит жутко, но лучше это хоть убейся сейчас не оформить.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
в 515 через :: можно получать листы по типу объекта
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
докажи
There was a problem hiding this comment.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
это позже случилось, я видел. Лучше на листы тогда переделать.
Но нужно будет еще замерить встроенным профайлером память до и после чисто из интереса.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
тогда ПР ждет 515? если да отметьте там чтоб пр не закрывался там хз
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
мы уже на 515, делай
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
skill issue
@AirBlack Закрепил ПР, в ожидании 515. Я бы предложил заранее выкатить ПР с списком, теперь когда всё будет на списках думаю могу взять ревью на себя. |
меня обманули со списками. |
У меня есть идея как оставить списки и воспольщоватьсся :: в генерации автолатов, я попробую, если не получится, то хуйова |
немного занят был на днях простите |
Данный ПР автоматически отмечен как застоявшийся по причине длительного отсутствия обновлений. Он будет закрыт через 7 дней, если никакой активности не будет проявлено. Если вы считаете, что ПР еще актуален, или что я (злобный робот) пристаю к вам зря - просто напишите любой комментарий. Спасибо за ваш вклад. |
меня разбанили друзья |
ладно мне лень и посрать как-то и я перестал играть, если вернусь, может закончу, хз |
Описание изменений
Добавляет переработку фабрикаторами изученных предметов. Разбирает на ресурсы, требуемые для производства такого же предмета, но умноженное на 0.8. В зависимости от размера предмета разное время разбора.
Есть пара вопросов-недочетов, которые хотелось бы решить, но мержить можно и так. Нужен тест мерж так как что-то может пойти не так, не тестил все возможные для печати в фабрикаторах предметы.
Темы обсуждения:
Если фича зайдет, могу подобную запилить и на протолат, чтобы разбирать нерабочие прототипы на ресурсы без получения очков исследования(деструктив анализатор дает только стекло и металл)
Почему и что этот ПР улучшит
Можно вернуть часть ресурсов при разборе всяких робо штук. Учитывая постоянную нехватку ресурсов в робототехнике, мне кажется, что данная фича даст больше геймплея робототехникам.
Ну и шахтеры могут разбирать всякое говно по типу ригов.
Так же можно полностью разобрать невключающихся боргов на ресурсы, т.к. по ресурсам они довольно жирные.
Авторство
AirBlack - код и идея
Чеинжлог
🆑 AirBlack