diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3fa78b9dda1..6fefbb05f7c 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -952,7 +952,9 @@ SIGNAL_HANDLER if(model) - model.respawn_consumable(src, cell.use(cell.charge * 0.005)) + if(cell.charge) + if(model.respawn_consumable(src, cell.charge * 0.005)) + cell.use(cell.charge * 0.005) if(sendmats) model.restock_consumable() if(repairs) diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index a46389e11b2..1721d6ec2c1 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -137,29 +137,43 @@ if(cyborg.hud_used) cyborg.hud_used.update_robot_modules_display() + +///Restocks things that don't take mats, generally at a power cost. Returns True if anything was restocked/replaced, and False otherwise. /obj/item/robot_model/proc/respawn_consumable(mob/living/silicon/robot/cyborg, coeff = 1) SHOULD_CALL_PARENT(TRUE) + ///If anything was actually replaced/refilled/recharged. If not, we won't draw power. + . = FALSE + for(var/datum/robot_energy_storage/storage_datum in storages) if(storage_datum.renewable == FALSE) continue - storage_datum.energy = min(storage_datum.max_energy, storage_datum.energy + coeff * storage_datum.recharge_rate) + if(storage_datum.energy < storage_datum.max_energy) + . = TRUE + storage_datum.energy = min(storage_datum.max_energy, storage_datum.energy + coeff * storage_datum.recharge_rate) for(var/obj/item/module in get_usable_modules()) if(istype(module, /obj/item/assembly/flash)) var/obj/item/assembly/flash/flash = module + if(flash.burnt_out) + . = TRUE flash.times_used = 0 flash.burnt_out = FALSE flash.update_appearance() else if(istype(module, /obj/item/melee/baton/security)) var/obj/item/melee/baton/security/baton = module - baton.cell?.charge = baton.cell.maxcharge + if(baton.cell?.charge < baton.cell.maxcharge) + . = TRUE //if sec borgs ever make a mainstream return, we should probably do this differntly. + baton.cell?.charge = baton.cell.maxcharge else if(istype(module, /obj/item/gun/energy)) var/obj/item/gun/energy/gun = module if(!gun.chambered) + . = TRUE gun.recharge_newshot() //try to reload a new shot. - cyborg.toner = cyborg.tonermax + if(cyborg.toner < cyborg.tonermax) + . = TRUE + cyborg.toner = cyborg.tonermax /** * Refills consumables that require materials, rather than being given for free. @@ -350,6 +364,7 @@ if(!soap) return if(soap.uses < initial(soap.uses)) + . = TRUE soap.uses += ROUND_UP(initial(soap.uses) / 100) * coeff /obj/item/robot_model/engineering @@ -627,20 +642,29 @@ ..() var/obj/item/lightreplacer/light_replacer = locate(/obj/item/lightreplacer) in basic_modules if(light_replacer) - light_replacer.Charge(cyborg, coeff) + if(light_replacer.uses < light_replacer.max_uses) + . = TRUE + light_replacer.Charge(cyborg, coeff) var/obj/item/reagent_containers/spray/cyborg_drying/drying_agent = locate(/obj/item/reagent_containers/spray/cyborg_drying) in basic_modules if(drying_agent) - drying_agent.reagents.add_reagent(/datum/reagent/drying_agent, 5 * coeff) + var/datum/reagents/anti_water = drying_agent.reagents + if(anti_water.total_volume < anti_water.maximum_volume) + . = TRUE + drying_agent.reagents.add_reagent(/datum/reagent/drying_agent, 5 * coeff) var/obj/item/reagent_containers/spray/cyborg_lube/lube = locate(/obj/item/reagent_containers/spray/cyborg_lube) in emag_modules if(lube) - lube.reagents.add_reagent(/datum/reagent/lube, 2 * coeff) + var/datum/reagents/anti_friction = lube.reagents + if(anti_friction.total_volume < anti_friction.maximum_volume) + . = TRUE + lube.reagents.add_reagent(/datum/reagent/lube, 2 * coeff) var/obj/item/soap/nanotrasen/cyborg/soap = locate(/obj/item/soap/nanotrasen/cyborg) in basic_modules if(!soap) return if(soap.uses < initial(soap.uses)) + . = TRUE soap.uses += ROUND_UP(initial(soap.uses) / 100) * coeff /obj/item/robot_model/medical @@ -760,6 +784,7 @@ var/obj/item/gun/energy/e_gun/advtaser/cyborg/taser = locate(/obj/item/gun/energy/e_gun/advtaser/cyborg) in basic_modules if(taser) if(taser.cell.charge < taser.cell.maxcharge) + . = TRUE var/obj/item/ammo_casing/energy/shot = taser.ammo_type[taser.select] taser.cell.give(shot.e_cost * coeff) taser.update_appearance() @@ -811,7 +836,10 @@ ..() var/obj/item/reagent_containers/enzyme = locate(/obj/item/reagent_containers/condiment/enzyme) in basic_modules if(enzyme) - enzyme.reagents.add_reagent(/datum/reagent/consumable/enzyme, 2 * coeff) + var/datum/reagents/spicyketchup = enzyme.reagents + if(spicyketchup.total_volume < spicyketchup.maximum_volume) + . = TRUE + enzyme.reagents.add_reagent(/datum/reagent/consumable/enzyme, 2 * coeff) /obj/item/robot_model/syndicate name = "Syndicate Assault"