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]