diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 2603529dec2..60647332acb 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -1,14 +1,5 @@ /obj/machinery/reagentgrinder name = "\improper All-In-One Grinder" - desc = "Измельчает, дробит, разжижает и извлекает вещества из предметов, помещённых внутрь. Ради всего святого, не суйте туда свои пальцы." - ru_names = list( - NOMINATIVE = "универсальный блендер", - GENITIVE = "универсального блендера", - DATIVE = "универсальному блендеру", - ACCUSATIVE = "универсальный блендер", - INSTRUMENTAL = "универсальным блендером", - PREPOSITIONAL = "универсальном блендере" - ) icon = 'icons/obj/kitchen.dmi' icon_state = "juicer1" layer = 2.9 @@ -105,13 +96,6 @@ var/list/holdingitems = list() -/obj/machinery/reagentgrinder/examine(mob/user) - . = ..() - if(panel_open) - . += span_notice("Панель техобслуживания открыта.") - if(Adjacent(user)) - . += span_info("Используйте Alt + ЛКМ, чтобы извлечь ёмкость.") - /obj/machinery/reagentgrinder/empty icon_state = "juicer0" beaker = null @@ -159,7 +143,6 @@ if(!anchored || beaker) return if(!panel_open) - balloon_alert(user, "панель закрыта!") return if(!I.tool_use_check(user, 0)) return @@ -179,7 +162,6 @@ return default_unfasten_wrench(user, I) - /obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params) if(user.a_intent == INTENT_HARM) return ..() @@ -190,15 +172,15 @@ if(istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER)) add_fingerprint(user) if(panel_open) - balloon_alert(user, "панель открыта!") + to_chat(user, span_warning("Close the maintenance panel first.")) return ATTACK_CHAIN_PROCEED if(beaker) - balloon_alert(user, "слот для ёмкости занят!") + to_chat(user, span_warning("The [name] already has [beaker] loaded.")) return ATTACK_CHAIN_PROCEED if(!user.drop_transfer_item_to_loc(I, src)) return ..() beaker = I - balloon_alert(user, "ёмкость установлена") + to_chat(user, span_notice("You have inserted [I] into [src].")) updateUsrDialog() update_icon(UPDATE_ICON_STATE) return ATTACK_CHAIN_BLOCKED_ALL @@ -207,11 +189,11 @@ if(is_type_in_list(I, dried_items) && istype(I, /obj/item/reagent_containers/food/snacks/grown)) var/obj/item/reagent_containers/food/snacks/grown/grown = I if(!grown.dry) - balloon_alert(user, "сначала высушите!") + to_chat(user, span_warning("You must dry that first.")) return ATTACK_CHAIN_PROCEED if(length(holdingitems) >= limit) - balloon_alert(user, "нет места!") + to_chat(user, span_warning("The [name] cannot hold anymore items.")) return ATTACK_CHAIN_PROCEED //Fill machine with a bag! @@ -219,7 +201,7 @@ var/obj/item/storage/bag/bag = I var/original_contents_len = length(bag.contents) if(!length(bag.contents)) - balloon_alert(user, "нечего загружать!") + to_chat(user, span_warning("The [bag.name] is empty.")) return ATTACK_CHAIN_PROCEED for(var/obj/item/thing as anything in bag.contents) @@ -231,31 +213,54 @@ var/new_contents_len = length(bag.contents) if(new_contents_len == original_contents_len) - balloon_alert(user, "нечего загружать!") + to_chat(user, span_warning("Nothing in [bag] can be put into [src].")) return ATTACK_CHAIN_PROCEED - user.visible_message( - span_notice("[user] загрузил[pluralize_ru(user.gender, "", "а", "о", "и")] содержимое [bag.declent_ru(GENITIVE)] в [declent_ru(ACCUSATIVE)]."), - span_notice("Вы загрузили содержимое [bag.declent_ru(GENITIVE)] в [declent_ru(ACCUSATIVE)].")) - balloon_alert(user, "содержимое загружено") + + to_chat(user, span_notice("You have emptied [new_contents_len ? "some" : "all"] of [bag]'s contents into [src].")) updateUsrDialog() return ATTACK_CHAIN_PROCEED_SUCCESS if(!is_type_in_list(I, blend_items) && !is_type_in_list(I, juice_items)) - balloon_alert(user, "не подходит!") + to_chat(user, span_warning("Cannot refine [I] into a reagent.")) return ATTACK_CHAIN_PROCEED if(!user.drop_transfer_item_to_loc(I, src)) return ..() holdingitems += I - user.visible_message( - span_notice("[user] загрузил[pluralize_ru(user.gender, "", "а", "о", "и")] [I.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]."), - span_notice("Вы загрузили [I.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)].")) - balloon_alert(user, "загружено в камеру") updateUsrDialog() return ATTACK_CHAIN_BLOCKED_ALL +/obj/machinery/reagentgrinder/examine(mob/user) + . = ..() + if(in_range(src, user)) + . += "Alt-click to activate it.
Ctrl-Shift-click to dispose content.
" + +/obj/machinery/reagentgrinder/AltClick(mob/living/carbon/human/human) + if(!istype(human) || !human.Adjacent(src)) + return + + if(human.incapacitated() || HAS_TRAIT(human, TRAIT_HANDS_BLOCKED)) + return + + if(operating) + return + + add_fingerprint(human) + grind() + +/obj/machinery/reagentgrinder/CtrlShiftClick(mob/living/carbon/human/human) + if(!istype(human) || !human.Adjacent(src)) + return + + if(human.incapacitated() || HAS_TRAIT(human, TRAIT_HANDS_BLOCKED)) + return + + if(operating) + return + add_fingerprint(human) + detach(human) /obj/machinery/reagentgrinder/attack_ai(mob/user) return FALSE @@ -275,40 +280,40 @@ if(!operating) for (var/obj/item/O in holdingitems) - processing_chamber += "\A [O.declent_ru(NOMINATIVE)]
" + processing_chamber += "\A [O.name]
" if (!processing_chamber) is_chamber_empty = 1 - processing_chamber = "Ничего." + processing_chamber = "Nothing." if (!beaker) - beaker_contents = "Ёмкость не установлена.
" + beaker_contents = "No beaker attached.
" else is_beaker_ready = 1 - beaker_contents = "Содержимое ёмкости:
" + beaker_contents = "The beaker contains:
" var/anything = 0 for(var/datum/reagent/R in beaker.reagents.reagent_list) anything = 1 beaker_contents += "[R.volume] - [R.name]
" if(!anything) - beaker_contents += "Ничего
" + beaker_contents += "Nothing
" dat += {" - Содержимое камеры:
+ Processing chamber contains:
[processing_chamber]
[beaker_contents]
"} if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "Измельчить
" - dat += "Выжать

" + dat += "Grind the reagents
" + dat += "Juice the reagents

" if(holdingitems && holdingitems.len > 0) - dat += "Вынуть содержимое камеры
" + dat += "Eject the reagents
" if (beaker) - dat += "Извлечь ёмкость
" + dat += "Detach the beaker
" else - dat += "Пожалуйста, подождите..." + dat += "Please wait..." - var/datum/browser/popup = new(user, "reagentgrinder", "Универсальный блендер") + var/datum/browser/popup = new(user, "reagentgrinder", "All-In-One Grinder") popup.set_content(dat) popup.open(1) return @@ -328,33 +333,23 @@ if("eject") eject() if ("detach") - detach() + detach(usr) + +/obj/machinery/reagentgrinder/proc/detach(mob/user) + if(user.stat) + return -/obj/machinery/reagentgrinder/AltClick(mob/living/user) if(!beaker) return - beaker.forceMove(loc) - if(Adjacent(user) && !issilicon(user)) - user.put_in_hands(beaker, ignore_anim = FALSE) - balloon_alert(user, "ёмкость извлечена") + + beaker.forceMove(get_turf(src)) beaker = null - add_fingerprint(user) + update_icon(UPDATE_ICON_STATE) updateUsrDialog() -/obj/machinery/reagentgrinder/proc/detach() - if (usr.stat != 0) - return - if (!beaker) - return - beaker.loc = src.loc - if(Adjacent(usr) && !issilicon(usr)) - usr.put_in_hands(beaker, ignore_anim = FALSE) - beaker = null - update_icon(UPDATE_ICON_STATE) - updateUsrDialog() - /obj/machinery/reagentgrinder/proc/eject() + if (usr.stat != 0) return if (holdingitems && holdingitems.len == 0)