[MIRROR] Refactors anomanly neutralizer to use the effect remover component [MDB IGNORE] (#11563)

* Refactors anomanly neutralizer to use the effect remover component

* skyrat edit

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com>
This commit is contained in:
SkyratBot
2022-02-20 03:20:19 +01:00
committed by GitHub
parent 8d7fc1058a
commit f6b117ccbe
5 changed files with 44 additions and 28 deletions
+6 -3
View File
@@ -3,6 +3,7 @@
* certain effects (such as cult runes) in one attack.
*/
/datum/component/effect_remover
dupe_mode = COMPONENT_DUPE_ALLOWED
/// Line sent to the user on successful removal.
var/success_feedback
/// Line forcesaid by the user on successful removal.
@@ -59,8 +60,10 @@
if(success_forcesay)
user.say(success_forcesay, forced = item_parent.name)
if(success_feedback)
var/real_feedback = replacetext(success_feedback, "%THEEFFECT", "[target]")
real_feedback = replacetext(real_feedback, "%THEWEAPON", "[item_parent]")
var/real_feedback = replacetext(success_feedback, "%THEEFFECT", "\the [target]")
real_feedback = replacetext(real_feedback, "%THEWEAPON", "\the [item_parent]")
to_chat(user, span_notice(real_feedback))
on_clear_callback?.Invoke(target, user)
qdel(target)
if(!QDELETED(target))
qdel(target)
+5 -2
View File
@@ -89,9 +89,12 @@
qdel(src)
/obj/effect/anomaly/attackby(obj/item/I, mob/user, params)
if(I.tool_behaviour == TOOL_ANALYZER)
/obj/effect/anomaly/attackby(obj/item/weapon, mob/user, params)
if(weapon.tool_behaviour == TOOL_ANALYZER)
to_chat(user, span_notice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code]."))
return TRUE
return ..()
///////////////////////
@@ -14,35 +14,27 @@
/obj/item/anomaly_neutralizer/Initialize(mapload)
. = ..()
// Can be used to delete drained heretic influences
// Primarily used to delete and neutralize anomalies.
AddComponent(/datum/component/effect_remover, \
success_feedback = "You neutralize %THEEFFECT with %THEWEAPON, frying its circuitry in the process.", \
on_clear_callback = CALLBACK(src, .proc/on_anomaly_neutralized), \
effects_we_clear = list(/obj/effect/anomaly))
// Can also be used to delete drained heretic influences, to stop fools from losing arms.
AddComponent(/datum/component/effect_remover, \
success_feedback = "You close %THEEFFECT with %THEWEAPON, frying its circuitry in the process.", \
on_clear_callback = CALLBACK(src, .proc/on_use), \
effects_we_clear = list(/obj/effect/visible_heretic_influence))
/obj/item/anomaly_neutralizer/afterattack(atom/target, mob/living/user, proximity) //SKYRAT EDIT - MOB/LIVING
..()
if(!proximity || !target)
return
if(istype(target, /obj/effect/anomaly))
var/obj/effect/anomaly/A = target
to_chat(user, span_notice("The circuitry of [src] fries from the strain of neutralizing [A]!"))
A.anomalyNeutralize()
qdel(src)
//SKYRAT EDIT ADDITON START - CME
if(istype(target, /obj/effect/cme))
var/obj/effect/cme/C = target
if(C.neutralized)
return
to_chat(user, "<span class='danger'>The circuitry of [src] fries from the strain of neutralizing [C] causing you to absorb the shock!</span>")
do_sparks(5, FALSE, src)
electrocute_mob(user, get_area(src), src, 1, TRUE)
C.anomalyNeutralize()
qdel(src)
//SKYRAT EDIT END
/**
* Callback for the effect remover component to handle neutralizing anomalies.
*/
/obj/item/anomaly_neutralizer/proc/on_anomaly_neutralized(obj/effect/anomaly/target, mob/living/user)
target.anomalyNeutralize()
on_use(target, user)
/*
* Callback for the effect remover component to delete after use.
/**
* Use up the anomaly neutralizer. Cause some sparks and delete it.
*/
/obj/item/anomaly_neutralizer/proc/on_use(obj/effect/target, mob/living/user)
do_sparks(3, FALSE, user)
@@ -0,0 +1,17 @@
/obj/item/anomaly_neutralizer/Initialize(mapload)
. = ..()
AddComponent(/datum/component/effect_remover, \
success_feedback = "You neutralize %THEEFFECT with %THEWEAPON, frying its circuitry in the process.", \
on_clear_callback = CALLBACK(src, .proc/on_use_cme), \
effects_we_clear = list(/obj/effect/cme))
/**
* Callback for the effect remover component to handle neutralizing CMEs.
*/
/obj/item/anomaly_neutralizer/proc/on_use_cme(obj/effect/target, mob/living/user)
var/obj/effect/cme/cme_target = target
if(cme_target.neutralized)
return
electrocute_mob(user, get_area(src), src, 1, TRUE)
cme_target.anomalyNeutralize()
on_use(target, user)
+1
View File
@@ -4396,6 +4396,7 @@
#include "modular_skyrat\master_files\code\game\objects\items\oxygen_candle.dm"
#include "modular_skyrat\master_files\code\game\objects\items\RCD.dm"
#include "modular_skyrat\master_files\code\game\objects\items\religion.dm"
#include "modular_skyrat\master_files\code\game\objects\items\devices\anomaly_neutralizer.dm"
#include "modular_skyrat\master_files\code\game\objects\items\devices\radio\encryption_key.dm"
#include "modular_skyrat\master_files\code\game\objects\items\devices\radio\headset.dm"
#include "modular_skyrat\master_files\code\game\objects\items\storage\boxes.dm"