diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 80fd177d84..7b5b234a90 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -27,6 +27,13 @@ return FALSE return TRUE +/* +This proc gets called by upgrades after installing them. Use this for things that for example need to be moved into a specific borg module, +as performing this in action() will cause the module to end up in the borg instead of its intended location due to forceMove() being called afterwards.. +*/ +/obj/item/borg/upgrade/proc/afterInstall(mob/living/silicon/robot/R, user = usr) + return + /obj/item/borg/upgrade/proc/deactivate(mob/living/silicon/robot/R, user = usr) if (!(src in R.upgrades)) return FALSE diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6143bde602..1eb308af00 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -454,10 +454,12 @@ if(U.action(src)) to_chat(user, "You apply the upgrade to [src].") if(U.one_use) + U.afterInstall(src) qdel(U) else U.forceMove(src) upgrades += U + U.afterInstall(src) else to_chat(user, "Upgrade error.") U.forceMove(drop_location()) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index c1f47ccd1a..438c000a1e 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -105,10 +105,20 @@ holds_charge = TRUE unique_frequency = TRUE +/obj/item/gun/energy/kinetic_accelerator/cyborg/Destroy() + for(var/obj/item/borg/upgrade/modkit/M in modkits) + M.uninstall(src) + return ..() + /obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg holds_charge = TRUE unique_frequency = TRUE +/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg/Destroy() + for(var/obj/item/borg/upgrade/modkit/M in modkits) + M.uninstall(src) + return ..() + /obj/item/gun/energy/kinetic_accelerator/minebot trigger_guard = TRIGGER_GUARD_ALLOW_ALL overheat_time = 20 @@ -284,11 +294,11 @@ else ..() -/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R) - . = ..() - if (.) - for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules) - return install(H, usr) +/obj/item/borg/upgrade/modkit/afterInstall(mob/living/silicon/robot/R) + for(var/obj/item/gun/energy/kinetic_accelerator/H in R.module.modules) + if(install(H, R)) //It worked + return + to_chat(R, "Upgrade error - Aborting Kinetic Accelerator linking.") //No applicable KA found, insufficient capacity, or some other problem. /obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user) . = TRUE @@ -323,12 +333,6 @@ to_chat(user, "You don't have room([KA.get_remaining_mod_capacity()]% remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.") . = FALSE -/obj/item/borg/upgrade/modkit/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA in R.module.modules) - uninstall(KA) - /obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/gun/energy/kinetic_accelerator/KA, forcemove = TRUE) KA.modkits -= src if(forcemove)