Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions code/datums/ai/monkey/monkey_controller.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ have ways of interacting with a specific mob and control it.
var/pickpocket = FALSE
for(var/mob/living/carbon/human/human in oview(5, living_pawn))
var/obj/item/held_weapon = GetBestWeapon(list(human.get_active_hand(), human.get_inactive_hand()) + weapon, list(living_pawn.get_active_hand(), living_pawn.get_inactive_hand()))
if(istype(held_weapon, /obj/item/gun/energy/vortex_shotgun))
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

🟡 Рекомендация по улучшению поддерживаемости

Ваше исправление корректно решает проблему с кражей вортекс-шотгана. Однако, для улучшения поддерживаемости кода в будущем, я бы рекомендовал использовать систему трейтов (traits) вместо прямого сравнения типа (istype). Это позволит легко добавлять другие предметы, которые обезьяны не должны воровать, не изменяя логику контроллера обезьян.

Например, можно добавить трейт TRAIT_MONKEY_PROOF к вортекс-шотгану и проверять его наличие здесь. Для этого потребуется добавить ADD_TRAIT(src, TRAIT_MONKEY_PROOF, INNATE_TRAIT) в Initialize() для /obj/item/gun/energy/vortex_shotgun.

if(HAS_TRAIT(held_weapon, TRAIT_MONKEY_PROOF))

continue
Comment on lines +102 to +103
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

🟡 Рекомендация по улучшению поддерживаемости

Текущая реализация с istype() решает проблему для вортекс-шотгана, но является жесткой привязкой к конкретному типу. Если в будущем появятся другие предметы, которые обезьяны не должны воровать, придется добавлять новые проверки istype(), что усложнит код.

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

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

		if(HAS_TRAIT(held_weapon, TRAIT_MONKEY_NO_STEAL))
			continue
References
  1. Код должен быть читаемым и легко поддерживаемым для будущих контрибьюторов, что является одним из ключевых принципов проекта. (link)

if(held_weapon == weapon) // It's just the same one, not a held one
continue
pickpocket = TRUE
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/weapons/grenades/atmosgrenade.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
. = ..()
var/turf/simulated/target_turf = get_turf(src)
if(istype(target_turf))
target_turf.atmos_spawn_air(spawn_contents, spawn_amount)
src.release_air(target_turf)

/obj/item/grenade/gas/proc/release_air(turf/simulated/target_turf)
// Any proc that wants MILLA to be synchronous should not sleep.
Expand Down
Loading