diff --git a/mods/global_modpacks.dm b/mods/global_modpacks.dm
index c489044b7a97c..28bd9ef885946 100644
--- a/mods/global_modpacks.dm
+++ b/mods/global_modpacks.dm
@@ -45,5 +45,6 @@
#include "chemtweaks/_chemtweaks.dme"
#include "diona/_diona.dme"
#include "simplangs/simplangs.dme"
+#include "item_identification/_item_identification.dme"
#include "../packs/sierra-tweaks/_pack.dm"
diff --git a/mods/item_identification/README.md b/mods/item_identification/README.md
new file mode 100644
index 0000000000000..8bcdae05b15dc
--- /dev/null
+++ b/mods/item_identification/README.md
@@ -0,0 +1,39 @@
+
+#### Список PRов:
+
+- https://github.com/SierraBay/SierraBay12/pull/2986
+
+
+## Идентификация предметов
+
+ID мода: ITEM_IDENTIFICATION
+
+
+### Описание мода
+
+Добавляет верб Inspect к предметам для идентификации предметов антага прямо через функционал.
+
+
+### Изменения *кор кода*
+
+- Отсутствуют
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы:
+
+Builder13
diff --git a/mods/item_identification/_item_identification.dm b/mods/item_identification/_item_identification.dm
new file mode 100644
index 0000000000000..720711ac63f37
--- /dev/null
+++ b/mods/item_identification/_item_identification.dm
@@ -0,0 +1,4 @@
+/singleton/modpack/item_identification
+ name = "Идентификация предметов"
+ desc = "Добавляет верб Inspect к предметам для идентификации предметов антага прямо через функционал."
+ author = "Builder13"
diff --git a/mods/item_identification/_item_identification.dme b/mods/item_identification/_item_identification.dme
new file mode 100644
index 0000000000000..9115d32646792
--- /dev/null
+++ b/mods/item_identification/_item_identification.dme
@@ -0,0 +1,10 @@
+#ifndef MODPACK_ITEM_IDENTIFICATION
+#define MODPACK_ITEM_IDENTIFICATION
+
+#include "_item_identification.dm"
+
+
+#include "code/item_identification.dm"
+#include "code/items/traitor.dm"
+
+#endif
diff --git a/mods/item_identification/code/item_identification.dm b/mods/item_identification/code/item_identification.dm
new file mode 100644
index 0000000000000..8adc78fe78238
--- /dev/null
+++ b/mods/item_identification/code/item_identification.dm
@@ -0,0 +1,298 @@
+/obj/item
+ var/list/mod_skill_identification = list()
+
+/obj/item/proc/update_mod_identification()
+ return
+
+/mob/verb/mod_skill_examine(obj/item/I as obj in view())
+ set name = "Inspect"
+ set category = "IC"
+
+ mod_skill_examinate(usr, I)
+
+/proc/mod_skill_examinate(mob/user, atom/A)
+ if ((is_blind(user) || user.stat) && !isobserver(user))
+ to_chat(user, SPAN_NOTICE("Something is there but you can't see it."))
+ return
+ user.face_atom(A)
+ if (user.simulated)
+ if (A.loc != user || user.IsHolding(A))
+ for (var/mob/M in viewers(4, user))
+ if (M == user)
+ continue
+ if (M.client && M.client.get_preference_value(/datum/client_preference/examine_messages) == GLOB.PREF_SHOW)
+ if (M.is_blind() || user.is_invisible_to(M))
+ continue
+ to_chat(M, SPAN_SUBTLE("\The [user] looks at \the [A]."))
+
+ var/is_adjacent = FALSE
+ if (!isghost(user) && user.stat != DEAD)
+ is_adjacent = user.Adjacent(A)
+
+ if(is_adjacent && !user.incapacitated())
+ var/obj/item/I = A
+ if(istype(I))
+ var/datum/extension/interactive/mod_inspect/MI = get_or_create_extension(user, /datum/extension/interactive/mod_inspect)
+ MI.examine_item(user, I)
+
+/datum/extension/interactive/mod_inspect
+ var/list/additional_users = list()
+ var/obj/item/identify_item
+ var/list/request_timeouts = list()
+
+/datum/extension/interactive/mod_inspect/proc/examine_item(mob/user, obj/item/I)
+ var/w_width = 350
+ var/w_height = 400
+
+ if(identify_item && I != identify_item)
+ additional_users = list()
+
+ identify_item = I
+
+ var/list/HTML = list()
+ HTML += "
[identify_item.name]"
+
+ HTML += "\[Refresh\]
"
+ HTML += "Инспектируют предмет:
"
+ HTML += "[user.name]
"
+ for(var/user_ref in additional_users)
+ var/user_name = additional_users[user_ref]["name"]
+ HTML += "[user_name] \[-\]
"
+
+ HTML += "\[Добавить человека\]
"
+
+ HTML += "\[Инспектировать предмет\]"
+
+ HTML += "
"
+ HTML += "Вместо этого вы можете солгать при инспекции предмета, тогда ваши навыки не будут задействованы для осмотра. Но при этом добавленные вами люди все еще могут задействовать свои навыки для инспекции.
"
+ HTML += "\[Солгать\]"
+
+ if(user.mind && player_is_antag(user.mind))
+ HTML += "
"
+ HTML += "Так как вы антагонист, то можете произвести проверку предмета, как если бы у вас были максимальные навыки в каждой области.
"
+ HTML += "\[Гарантированно инспектировать предмет\]"
+ w_height += 100
+
+ HTML += ""
+
+ var/datum/browser/popup = new(user, "mod_examine_item", "[I.name]", w_width, w_height)
+ popup.set_content(jointext(HTML,null))
+ popup.open()
+
+/datum/extension/interactive/mod_inspect/proc/identify_item(mob/user, inspect_intent = 0)
+ var/list/all_users = additional_users.Copy()
+
+ var/orig_intention = 1
+
+ if(inspect_intent == 1)
+ orig_intention = 0
+
+ if(inspect_intent == 2)
+ orig_intention = 2
+
+ all_users[user] = list("name" = user.name, "intention" = orig_intention)
+ var/list/max_skills = list()
+
+ for(var/key in all_users)
+ var/intention = all_users[key]["intention"]
+ if(intention > 0)
+ var/mob/M = key
+ if (istype(M) && M.skillset)
+ for(var/singleton/hierarchy/skill/S in GLOB.skills)
+ var/skill_val = M.get_skill_value(S.type)
+
+ if(intention == 2)
+ skill_val = SKILL_MAX
+
+ if(!max_skills[S.type] || max_skills[S.type] < skill_val)
+ max_skills[S.type] = skill_val
+
+ var/starting_message = "[user] начал детальный осмотр [identify_item.name]"
+
+ if(LAZYLEN(additional_users))
+ starting_message += " вместе с:"
+ for(var/auser in additional_users)
+ var/auser_name = additional_users[auser]["name"]
+ starting_message += " [auser_name]"
+ starting_message += "."
+
+ user.visible_message(starting_message)
+
+ var/done = do_after(user, 10 SECONDS, identify_item, DO_PUBLIC_UNIQUE)
+
+ if(done)
+ if(user.incapacitated())
+ to_chat(user, SPAN_WARNING("Вы не смогли произвести осмотр."))
+ return
+
+ if(!identify_item || !user.Adjacent(identify_item))
+ to_chat(user, SPAN_WARNING("Предмет для осмотра не рядом."))
+ return
+
+ if(additional_users)
+ for(var/auser in additional_users)
+ var/mob/living/A = auser
+ var/auser_name = additional_users[auser]["name"]
+ if(!user.Adjacent(auser))
+ to_chat(user, SPAN_WARNING("[auser_name] не рядом."))
+ return
+ if(A.incapacitated() || A.stat == DEAD || !A.client)
+ to_chat(user, SPAN_WARNING("[auser_name] недоступен для участия в осмотре."))
+ return
+
+ identify_item.update_mod_identification()
+ if(identify_item && LAZYLEN(identify_item.mod_skill_identification))
+ for(var/index in identify_item.mod_skill_identification)
+ var/success_text = identify_item.mod_skill_identification[index]["success"]
+ var/failure_text = identify_item.mod_skill_identification[index]["failure"]
+ var/logic = identify_item.mod_skill_identification[index]["LOGIC"]
+
+ var/success = 0
+ var/prevent_success = 0
+
+ for(var/skill in identify_item.mod_skill_identification[index]["skillcheck"])
+ var/skill_level = identify_item.mod_skill_identification[index]["skillcheck"][skill]
+
+ if(max_skills[skill] >= skill_level)
+ success = 1
+
+ if(logic && logic == "AND" && max_skills[skill] < skill_level)
+ prevent_success = 1
+
+
+ if(success && !prevent_success)
+ if(success_text)
+ for(var/U in all_users)
+ to_chat(U, success_text)
+ else
+ if(failure_text)
+ for(var/U in all_users)
+ to_chat(U, failure_text)
+ else
+ for(var/U in all_users)
+ to_chat(U, SPAN_NOTICE("Вы не смогли что-либо обнаружить."))
+
+ else
+ for(var/U in all_users)
+ to_chat(U, SPAN_NOTICE("Вы не смогли что-либо обнаружить."))
+
+/datum/extension/interactive/mod_inspect/proc/add_person(mob/user)
+ var/list/possible_targets = list()
+ var/list/starting_targets
+
+ starting_targets = view_or_range(1, user, "view")
+
+ for(var/mob/living/M in starting_targets)
+ if(M == user)
+ continue
+ possible_targets += M
+
+ if(length(possible_targets))
+ var/choice = input("Choose a mob", "Mob") as null | mob in possible_targets
+
+ if(choice)
+ var/mob/living/chosen = choice
+ if(chosen == user)
+ to_chat(user, SPAN_WARNING("Нельзя выбирать себя."))
+ return
+
+ if(additional_users[chosen])
+ to_chat(user, SPAN_WARNING("[chosen.name] уже участвует в осмотре."))
+ return
+
+ if(!user.Adjacent(chosen))
+ to_chat(user, SPAN_WARNING("[chosen.name] слишком далеко."))
+ return
+
+ if(user.incapacitated() || chosen.incapacitated())
+ to_chat(user, SPAN_WARNING("[chosen.name] недоступен для осмотра."))
+ return
+
+ request_player(chosen, 30 SECONDS)
+
+/datum/extension/interactive/mod_inspect/proc/request_player(mob/target, request_timeout)
+ if(request_timeouts[target] && world.time < request_timeouts[target])
+ to_chat(usr, SPAN_WARNING("Обращение уже недавно отправлялось."))
+ return
+
+ request_timeouts[target] = world.time + request_timeout
+ if(target.client)
+ to_chat(target, SPAN_BOLD("Вас запрашивают помочь с инспекцией предмета. В случае, если вы решите солгать, вы будете принимать участие в осмотре, но ваши навыки не будут задействованы для осмотра. (Помочь)(Солгать)"))
+
+ if(target.mind && player_is_antag(target.mind))
+ to_chat(target, SPAN_BOLD("Так как вы антагонист, то можете помочь с проверкой предмета, как если бы у вас были максимальные навыки в каждой области. (Гарантированная помощь)"))
+
+/datum/extension/interactive/mod_inspect/Topic(href, href_list)
+ . = ..()
+ if(href_list["add_person"])
+ if(usr.stat == DEAD)
+ return
+
+ add_person(usr)
+ return TRUE
+
+ if(href_list["inspect"])
+ if(usr.incapacitated() || usr.stat == DEAD)
+ return
+
+ if(!identify_item || !usr.Adjacent(identify_item))
+ to_chat(usr, SPAN_WARNING("Предмет для осмотра не рядом."))
+ return
+
+ if(additional_users)
+ for(var/auser in additional_users)
+ var/mob/living/A = auser
+ var/auser_name = additional_users[auser]["name"]
+ if(!usr.Adjacent(auser))
+ to_chat(usr, SPAN_WARNING("[auser_name] не рядом."))
+ return
+ if(A.incapacitated() || A.stat == DEAD || !A.client)
+ to_chat(usr, SPAN_WARNING("[auser_name] недоступен для участия в осмотре."))
+ return
+
+ var/inspect_intent = text2num(href_list["inspect_intent"])
+
+ if(inspect_intent == 2)
+ if(!usr.mind || !player_is_antag(usr.mind))
+ to_chat(usr, SPAN_WARNING("Вы не антагонист."))
+ return
+
+ identify_item(usr, inspect_intent)
+ return TRUE
+
+ if(href_list["candidate"])
+ var/mob/living/candidate = locate(href_list["candidate"])
+
+ if(additional_users[candidate])
+ to_chat(usr, SPAN_WARNING("Вы уже участвуете в осмотре [identify_item.name]."))
+ return
+
+ if(candidate.incapacitated())
+ return
+
+ if(request_timeouts[candidate] && world.time > request_timeouts[candidate])
+ to_chat(usr, SPAN_WARNING("Срок обращения истечен."))
+ return
+
+ var/inspect_intent = text2num(href_list["intention"])
+
+ if(inspect_intent == 2)
+ if(!usr.mind || !player_is_antag(usr.mind))
+ to_chat(usr, SPAN_WARNING("Вы не антагонист."))
+ return
+
+ to_chat(holder, SPAN_WARNING("[candidate.name] соглашается участвовать в осмотре [identify_item.name]."))
+ additional_users[usr] = list("name" = candidate.name, "intention" = inspect_intent)
+ return TRUE
+
+ if(href_list["remove_person"])
+ var/mob/living/P = locate(href_list["remove_person"])
+
+ if(istype(P) && additional_users[P])
+ additional_users.Remove(P)
+ examine_item(usr, identify_item)
+ return TRUE
+
+ if(href_list["refresh"])
+ examine_item(usr, identify_item)
+ return TRUE
diff --git a/mods/item_identification/code/items/traitor.dm b/mods/item_identification/code/items/traitor.dm
new file mode 100644
index 0000000000000..75fcba80d9671
--- /dev/null
+++ b/mods/item_identification/code/items/traitor.dm
@@ -0,0 +1,668 @@
+/obj/item/device/augment_implanter/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Благодаря обширным знаниям комплексных устройств, вы идентифицируете эту коробочку как имплантер аугментаций."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_EXPERIENCED,
+ )
+ )
+ )
+
+/obj/item/grenade/supermatter/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в области оружия или сложных устройств достаточно, чтобы определить, что в этой гранате находится небольшой кусочек суперматерии"),
+ "failure" = SPAN_BAD("Выглядит как светошумовая граната с очень яркой раскраской."),
+ "skillcheck" = list(
+ SKILL_WEAPONS = SKILL_MASTER,
+ SKILL_DEVICES = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/grenade/anti_photon/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в области оружия или сложных устройств достаточно, чтобы определить, что эта граната способна рассеивать фотоны, и тем самым гасить видимый свет в области своего использования."),
+ "failure" = SPAN_BAD("Выглядит как ЭМИ граната."),
+ "skillcheck" = list(
+ SKILL_WEAPONS = SKILL_EXPERIENCED,
+ SKILL_DEVICES = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/rig_module/electrowarfare_suite/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний сложных устройств или оружия достаточно, чтобы понять, что модификации предоставляемые этим модулем усложняют слежку со стороны ИИ."),
+ "failure" = SPAN_BAD("Вы не можете определить назначение модуля."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_BASIC,
+ SKILL_WEAPONS = SKILL_BASIC
+ )
+ )
+ )
+
+/obj/item/rig_module/voice/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний сложных устройств или оружия достаточно, чтобы понять, что этот модуль предоставляет возможность синтеза голоса по заданным параметрам."),
+ "failure" = SPAN_BAD("Вы не можете определить назначение модуля."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_BASIC,
+ SKILL_WEAPONS = SKILL_BASIC
+ )
+ )
+ )
+
+/obj/item/rig_module/power_sink/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний сложных устройств или оружия достаточно, чтобы понять, что этот модуль может быть задействован для подпитки энергетических резервов костюма напрямую через выкачивание энергии из внешних источников."),
+ "failure" = SPAN_BAD("Вы не можете определить назначение модуля."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_BASIC,
+ SKILL_WEAPONS = SKILL_BASIC
+ )
+ )
+ )
+
+/obj/item/rig_module/fabricator/energy_net/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний сложных устройств или оружия достаточно, чтобы понять, что это комплексный энергетический проектор, способный создавать энергетическую сеть для захвата цели."),
+ "failure" = SPAN_BAD("Вы не можете определить назначение модуля."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED,
+ SKILL_WEAPONS = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/material/harpoon/bomb/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний сложных устройств или оружия достаточно, чтобы понять, что на конце гарпуна установлена взрывчатка, которая предположительно должна сработать при броске в цель."),
+ "failure" = SPAN_BAD("Очевидно, выглядит как гарпун, но вы не можете понять что за устройство находится на его конце."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED,
+ SKILL_WEAPONS = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/melee/energy/sword/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний сложных устройств или ближнего боя достаточно, чтобы понять, что это рукоять энергетического клинка. При активации рукояти из нее проецируется поток энергии, который может быть мощной разрезающей силой."),
+ "skillcheck" = list(
+ SKILL_COMBAT = SKILL_BASIC,
+ SKILL_DEVICES = SKILL_BASIC
+ )
+ )
+ )
+
+/obj/item/clothing/head/helmet/space/psi_amp/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших обширных знаний в медицине и сложных устройствах достаточно, для того чтобы определить, что это устройство используется для значительного сильного усиления латентных пси способностей путем прямого вмешательства в работу мозга. Подключение к мозгу возможно после выбора мозговой карты на устройстве. При активации короны, будет просверлено несколько отверстий к мозгу с применением анестезии."),
+ "failure" = SPAN_BAD("Выглядит как несуразная диадема. Даже если принять это за головной убор, то вам абсолютно ничего неизвестно про установку его в мозг, лишь исходя из этого осмотра."),
+ "skillcheck" = list(
+ SKILL_MEDICAL = SKILL_MASTER,
+ SKILL_DEVICES = SKILL_MASTER
+ ),
+ "LOGIC" = "AND"
+ )
+ )
+
+
+/obj/item/device/encryptionkey/syndicate/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний информационных технологий достаточно, чтобы понять, что данный ключ использует незнакомый вам шифрключ и ссылается на незнакомую частоту."),
+ "skillcheck" = list(
+ SKILL_COMPUTER = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/plastique/update_mod_identification()
+ mod_skill_identification = list(
+ "device_usage" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в различном оружии было бы достаточно для использования этой взрывчатки."),
+ "failure" = SPAN_BAD("Вы понимаете, что не смогли бы использовать эту взрывчатку при необходимости."),
+ "skillcheck" = list(
+ SKILL_WEAPONS = SKILL_TRAINED
+ )
+ ),
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вы определяете, что это C-4."),
+ "failure" = SPAN_BAD("Вы понимаете что это взрывчатка, но не можете определить ее тип."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_TRAINED
+ )
+ )
+ )
+
+/*
+/obj/item/reagent_containers/glass/bottle/dye/polychromic/strong/update_mod_identification()
+ var/reagent_is_there = "содержит"
+ if(!reagents.has_reagent(/datum/reagent/dye/strong))
+ reagent_is_there = "содержала"
+
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в области химии или готовки достаточно, чтобы понять, что данная емкость [reagent_is_there] краситель."),
+ "skillcheck" = list(
+ SKILL_CHEMISTRY = SKILL_TRAINED,
+ SKILL_COOKING = SKILL_EXPERIENCED
+ )
+ )
+ )
+*/
+
+/obj/item/device/encryptionkey/syndie_full/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний информационных технологий достаточно, чтобы понять, что данный ключ использует множество шифрключей и частот для возможности прослушки всего радио эфира. Должно быть наподобие того, как устроен ключ шифрования у Капитана. Но дополнительно еще есть доступ к незнакомой частоте."),
+ "skillcheck" = list(
+ SKILL_COMPUTER = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/door_charge/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших оружейных знаний хватает, чтобы понять, что это растяжка для шлюзов."),
+ "failure" = SPAN_BAD("Выглядит действительно подозрительно, но вы не можете понять что это за устройство."),
+ "skillcheck" = list(
+ SKILL_WEAPONS = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/shield_diffuser/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний криминалистики или сложных устройств достаточно, чтобы понять, что это миниатюрный рассеиватель энергощитов"),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED,
+ SKILL_FORENSICS = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/stamp/chameleon/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших обширных знаний криминалистики достаточно, чтобы понять, что это изменяемая печать для подделки документов."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/pen/chameleon/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших обширных знаний криминалистики достаточно, чтобы понять, что это специальная ручка для подмены стиля написания."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/device/scanner/health/syndie/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Базовых знаний сложных устройств вам достаточно для того чтобы найти посторонний микролазер на корпусе анализатора. Он способен облучать сканируемую цель."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_BASIC
+ )
+ )
+ )
+
+/obj/item/device/encryptionkey/binary/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний информационных технологий достаточно, чтобы понять, что данный ключ перенастраивает наушник для возможности работы с протоколом связи синтетических единиц. Посредством данного ключа информация из канала синтетических единиц может преобразовываться в звуковой формат и обратно в формат данных."),
+ "skillcheck" = list(
+ SKILL_COMPUTER = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/device/suit_sensor_jammer/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний криминалистики или сложных устройств достаточно, чтобы понять, что данное устройство способно глушить или подменять сигнал датчиков костюма в определенном радиусе."),
+ "failure" = SPAN_BAD("Выглядит как странная круглая штучка. Не можете определить для чего она нужна."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_MASTER,
+ SKILL_DEVICES = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/device/blackout/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний электротехники и информационных технологий достаточно, чтобы понять, что данное устройство способно создать перегрузку сети питания при подключении к терминалу. Например через терминал под любым АПЦ."),
+ "failure" = SPAN_BAD("Выглядит как одно из множества устройств из НИО."),
+ "skillcheck" = list(
+ SKILL_ELECTRICAL = SKILL_EXPERIENCED,
+ SKILL_COMPUTER = SKILL_TRAINED
+ ),
+ "LOGIC" = "AND"
+ )
+ )
+
+/obj/item/clothing/glasses/thermal/syndi/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("При помощи оружейных знаний и при детальном осмотре, вы находите переключатель термального режима у этих очков."),
+ "skillcheck" = list(
+ SKILL_WEAPONS = SKILL_BASIC
+ )
+ )
+ )
+
+ if(active)
+ mod_skill_identification["device_info"]["failure"] = "Вам не пришлось даже особо детально осматривать эти очки, чтобы понять что у них сейчас активен термальный режим. Но вы все еще не знаете, переключается ли этот режим каким-либо образом."
+
+/obj/item/device/multitool/hacktool/update_mod_identification()
+ var/additional_good_descr = ""
+
+ if(in_hack_mode)
+ additional_good_descr = " Он уже сейчас переведен в этот скрытый режим."
+
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("На вид и по функционалу как обычный мультитул, но вашей экспертизы в электротехнике и сложных устройствах достаточно, чтобы понять, что у этого мультитула есть скрытый режим для взаимодействия с дверьми, который активируется при модификации отверткой.[additional_good_descr]"),
+ "skillcheck" = list(
+ SKILL_ELECTRICITY = SKILL_EXPERIENCED,
+ SKILL_DEVICES = SKILL_TRAINED
+ ),
+ "LOGIC" = "AND"
+ )
+ )
+
+/obj/item/card/emag/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в электротехнике и криминалистике достаточно, для того чтобы определить, что это устройство используется для взлома широкого спектра вещей, где могут применяться ID карты."),
+ "failure" = SPAN_BAD("Выглядит как пустая идентификационная карта с кучей проводов, которых там точно не должно быть."),
+ "skillcheck" = list(
+ SKILL_ELECTRICAL = SKILL_EXPERIENCED,
+ SKILL_FORENSICS = SKILL_EXPERIENCED
+ ),
+ "LOGIC" = "AND",
+ )
+ )
+
+/obj/item/device/radio_jammer/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в криминалистике достаточно, для того чтобы определить, что это устройство используется для подавления радио сигналов в определенном радиусе действия."),
+ "failure" = SPAN_BAD("С виду выглядит как обычное радио с каким-то странным меню выбора частот."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/device/flashlight/flashdark/update_mod_identification()
+ var/additional_bad_descr = ""
+
+ if(on)
+ additional_bad_descr = " Но так как он уже включен, вы видите что от его работы становится только темнее."
+
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в криминалистике или сложных устройствах достаточно, для того чтобы определить, что это устройство способно поглощать свет в активном состоянии."),
+ "failure" = SPAN_BAD("Выглядит, как необычный, но непримечательный фонарик.[additional_bad_descr]"),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_TRAINED,
+ SKILL_DEVICES = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/device/powersink/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в электротехнике достаточно, для того чтобы определить, что это устройство способно вызывать перепады питания за счет очень быстрого поглащения энергии из подключенной сети."),
+ "failure" = SPAN_BAD("Вы не знаете что это такое. Если вы видели это устройство где-то в близи проводки, то понимаете, что это явно что-то лишнее."),
+ "skillcheck" = list(
+ SKILL_ELECTRICITY = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/device/syndietele/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в сложных устройствах достаточно, для того чтобы определить, что это замаскированный маяк телепортации."),
+ "failure" = SPAN_BAD("Выглядит достаточно подозрительно. Вы не знаете что это."),
+ "skillcheck" = list(
+ SKILL_DEVICE = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/device/syndietele/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в сложных устройствах достаточно, для того чтобы определить, что это замаскированный маяк телепортации."),
+ "failure" = SPAN_BAD("Выглядит достаточно подозрительно. Вы не знаете что это."),
+ "skillcheck" = list(
+ SKILL_DEVICE = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/device/syndiejaunter/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в сложных устройствах достаточно, для того чтобы определить, что это ручное устройство телепортации. Устройство должно по идее работать в связке со специальным маяком."),
+ "failure" = SPAN_BAD("Выглядит достаточно подозрительно. Вы не знаете что это."),
+ "skillcheck" = list(
+ SKILL_DEVICE = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/supply_beacon/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вы без проблем определяете, что это маяк снабжения."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_UNSKILLED
+ )
+ )
+ )
+
+/obj/item/aiModule/syndicate/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в информационных технологиях достаточно, для того чтобы определить, что это взломанная версия платы смены законов для ИИ. Модификации платы позволяют проставить законы в максимальном приоритете и с усложнением отслеживания со стороны ИИ."),
+ "failure" = SPAN_BAD("Обыкновенная плата, используемая во многих машинах."),
+ "skillcheck" = list(
+ SKILL_COMPUTER = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/clothing/mask/ai/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в криминалистике и в сложных устройствах достаточно, для того чтобы определить, что через эту маску можно напрямую подключаться к сети камер."),
+ "failure" = SPAN_BAD("Странная маска в виде черепа, через которую всё хорошо видно в выключенном состоянии."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_MASTER,
+ SKILL_DEVICES = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/device/personal_shield/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших обширных знаний в криминалистике или в оружии хватает для того чтобы определить, что это переносной персональный энергощит."),
+ "failure" = SPAN_BAD("Выглядит как дымарь."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_MASTER,
+ SKILL_WEAPONS = SKILL_MASTER
+ )
+ )
+ )
+
+/obj/item/gun/launcher/syringe/disguised/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("(!Невозможно опознать, если нет свидетелей стрельбы из этой сигареты!) Ваших знаний в криминалистике хватает для того чтобы определить, что это скрытый дротикомет."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/clothing/head/bowlerhat/razor/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("При детальном осмотре вы сразу понимаете, что котелок сильно заострен."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_UNSKILLED
+ )
+ )
+ )
+
+/obj/item/stack/telecrystal/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Благодаря обширным научным знаниям вы понимаете, что это телекристал."),
+ "skillcheck" = list(
+ SKILL_SCIENCE = SKILL_MASTER
+ )
+ )
+ )
+
+/obj/item/device/spy_bug/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в криминалистике или в сложных устройствах достаточно, для того чтобы определить, что это жучок передающий изображение и звук на неизвестный монитор."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_TRAINED,
+ SKILL_DEVICES = SKILL_BASIC
+ )
+ )
+ )
+
+/obj/item/device/spy_monitor/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в криминалистике или в сложных устройствах достаточно, для того чтобы определить, что это скрытый под ПДА монитор, который может получать изображение и звук из неизвестных источников."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_TRAINED,
+ SKILL_DEVICES = SKILL_BASIC
+ )
+ )
+ )
+
+/obj/item/card/id/syndicate/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в криминалистике и в сложных устройствах достаточно, для того чтобы определить, что это карта со сменяемыми полями и со встроенными средстами предотвращения слежки. Также вы обнаружили, что эта карта может копировать доступ других карт."),
+ "skillcheck" = list(
+ SKILL_FORENSICS = SKILL_MASTER,
+ SKILL_DEVICES = SKILL_EXPERIENCED
+ ),
+ "LOGIC" = "AND"
+ )
+ )
+
+/obj/item/clothing/mask/chameleon/voice/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Благодаря знаниям сложных устройств, вы обнаруживаете встроенный модулятор голоса в обследуемой маске."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/device/chameleon/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Благодаря знаниям сложных устройств, вы понимаете, что это устройство может сканировать небольшие объекты и при активации маскировать владельца устройства под просканированный предмет."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/implanter/imprinting/update_mod_identification()
+ if(!imp || !istype(imp, /obj/item/implant/imprinting))
+ mod_skill_identification = list()
+ else
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы медицины и знаний сложных устройств достаточно, для того чтобы определить, что данный имплант способен внушить определенную инструкцию при дополнительном воздействии сильных наркотиков, влияющих на разум."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_BASIC,
+ SKILL_MEDICAL = SKILL_EXPERIENCED
+ ),
+ "LOGIC" = "AND"
+ )
+ )
+
+/obj/item/implant/imprinting/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы медицины и знаний сложных устройств достаточно, для того чтобы определить, что данный имплант способен внушить определенную инструкцию при дополнительном воздействии сильных наркотиков, влияющих на разум."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_BASIC,
+ SKILL_MEDICAL = SKILL_EXPERIENCED
+ ),
+ "LOGIC" = "AND"
+ )
+ )
+
+/obj/item/implanter/freedom/update_mod_identification()
+ if(!imp || !istype(imp, /obj/item/implant/freedom))
+ mod_skill_identification = list()
+ else
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в области сложных устройств достаточно, для того чтобы определить, что данный имплант позволяет владельцу вырываться из оков через применение заданного эмоционального триггера."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/implant/freedom/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в области сложных устройств достаточно, для того чтобы определить, что данный имплант позволяет владельцу вырываться из оков через применение заданного эмоционального триггера."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/implanter/compressed/update_mod_identification()
+ if(!imp || !istype(imp, /obj/item/implant/compressed))
+ mod_skill_identification = list()
+ else
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в области сложных устройств достаточно, для того чтобы определить, что данный имплант в своей основе использует технологию сжатии материи, для возможности имплантации предметов в тело. Предмет может быть вновь развернут на заданный эмоциональный триггер."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/implant/compressed/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в области сложных устройств достаточно, для того чтобы определить, что данный имплант в своей основе использует технологию сжатии материи, для возможности имплантации предметов в тело. Предмет может быть вновь развернут на заданный эмоциональный триггер."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/implanter/adrenalin/update_mod_identification()
+ if(!imp || !istype(imp, /obj/item/implant/adrenalin))
+ mod_skill_identification = list()
+ else
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в области сложных устройств достаточно, для того чтобы определить, что данный имплант содержит в себе наноботов, способных стимулировать тело на массовое производство адреналина. Активируется на заданный эмоциональный триггер."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/implant/adrenalin/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей экспертизы в области сложных устройств достаточно, для того чтобы определить, что данный имплант содержит в себе наноботов, способных стимулировать тело на массовое производство адреналина. Активируется на заданный эмоциональный триггер."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/implanter/explosive/update_mod_identification()
+ if(!imp || !istype(imp, /obj/item/implant/explosive))
+ mod_skill_identification = list()
+ else
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в области сложных устройств достаточно, для того чтобы определить, что это имплантируемая микровзрывчатка, которая может быть активирована по сигналу или по заданной фразе.."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/implant/explosive/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Вашей обширной экспертизы в области сложных устройств достаточно, для того чтобы определить, что это имплантируемая микровзрывчатка, которая может быть активирована по сигналу или по заданной фразе."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/reagent_containers/food/snacks/corpse_cube/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний в медицине достаточно, чтобы понять, что этот куб способен клонировать тело того, чьё ДНК в него будет введено."),
+ "failure" = SPAN_BAD("Выглядит как обычный куб для быстрого выращивания животного."),
+ "skillcheck" = list(
+ SKILL_MEDICAL = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/device/dna_sampler/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний в медицине достаточно, чтобы понять, что этот предмет способен взять образец чужого ДНК."),
+ "failure" = SPAN_BAD("Выглядит как необычный шприц."),
+ "skillcheck" = list(
+ SKILL_MEDICAL = SKILL_EXPERIENCED
+ )
+ )
+ )
+
+/obj/item/device/cosmetic_surgery_kit/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Ваших знаний сложных устройств достаточно, чтобы опознать данный предмет как набор для проведения автоматической косметической хирургии."),
+ "failure" = SPAN_BAD("Выглядит как таймер с кучей проводов."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_TRAINED
+ )
+ )
+ )
+
+/obj/item/pen/reagent/sleepy/update_mod_identification()
+ mod_skill_identification = list(
+ "device_info" = list(
+ "success" = SPAN_GOOD("Используя свои знания сложных устройств, вы смогли обнаружить небольшую ёмкость для реагентов внутри ручки."),
+ "skillcheck" = list(
+ SKILL_DEVICES = SKILL_BASIC,
+ SKILL_MEDICAL = SKILL_BASIC
+ ),
+ "LOGIC" = "AND"
+ )
+ )
\ No newline at end of file