/obj/machinery/recharger name = "recharger" icon = 'icons/obj/stationobjs.dmi' icon_state = "recharger0" desc = "A charging dock for energy based weaponry." use_power = IDLE_POWER_USE idle_power_usage = 4 active_power_usage = 250 circuit = /obj/item/circuitboard/machine/recharger pass_flags = PASSTABLE var/obj/item/charging = null var/recharge_coeff = 1 var/static/list/allowed_devices = typecacheof(list( /obj/item/gun/energy, /obj/item/melee/baton, /obj/item/ammo_box/magazine/recharge, /obj/item/modular_computer, /obj/item/gun/ballistic/automatic/magrifle)) /obj/machinery/recharger/RefreshParts() for(var/obj/item/stock_parts/capacitor/C in component_parts) recharge_coeff = C.rating /obj/machinery/recharger/examine(mob/user) . = ..() if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) . += "You're too far away to examine [src]'s contents and display!" return if(charging) . += {"\The [src] contains: - \A [charging]."} if(!(stat & (NOPOWER|BROKEN))) . += "The status display reads:" . += "- Recharging [recharge_coeff*10]% cell charge per cycle." if(charging) var/obj/item/stock_parts/cell/C = charging.get_cell() . += "- \The [charging]'s cell is at [C.percent()]%." /obj/machinery/recharger/proc/setCharging(new_charging) charging = new_charging if (new_charging) START_PROCESSING(SSmachines, src) use_power = ACTIVE_POWER_USE update_icon(scan = TRUE) else use_power = IDLE_POWER_USE update_icon() /obj/machinery/recharger/attackby(obj/item/G, mob/user, params) if(istype(G, /obj/item/wrench)) if(charging) to_chat(user, "Remove the charging item first!") return setAnchored(!anchored) power_change() to_chat(user, "You [anchored ? "attached" : "detached"] [src].") G.play_tool_sound(src) return var/allowed = is_type_in_typecache(G, allowed_devices) if(allowed) if(anchored) if(charging || panel_open) return 1 //Checks to make sure he's not in space doing it, and that the area got proper power. var/area/a = get_area(src) if(!a || !a.powered(EQUIP)) to_chat(user, "[src] blinks red as you try to insert [G].") return 1 if (istype(G, /obj/item/gun/energy)) var/obj/item/gun/energy/E = G if(!E.can_charge) to_chat(user, "Your gun has no external power connector.") return 1 if(!user.transferItemToLoc(G, src)) return 1 setCharging(G) else to_chat(user, "[src] isn't connected to anything!") return 1 if(anchored && !charging) if(default_deconstruction_screwdriver(user, "rechargeropen", "recharger0", G)) return if(panel_open && istype(G, /obj/item/crowbar)) default_deconstruction_crowbar(G) return return ..() /obj/machinery/recharger/attack_hand(mob/user) . = ..() if(.) return add_fingerprint(user) if(charging) charging.update_icon() charging.forceMove(drop_location()) user.put_in_hands(charging) setCharging(null) /obj/machinery/recharger/attack_tk(mob/user) if(charging) charging.update_icon() charging.forceMove(drop_location()) setCharging(null) /obj/machinery/recharger/process() if(stat & (NOPOWER|BROKEN) || !anchored) return PROCESS_KILL var/using_power = 0 if(charging) var/obj/item/stock_parts/cell/C = charging.get_cell() if(C) if(C.charge < C.maxcharge) C.give(C.chargerate * recharge_coeff) use_power(250 * recharge_coeff) using_power = 1 update_icon(using_power) if(istype(charging, /obj/item/ammo_box/magazine/recharge)) var/obj/item/ammo_box/magazine/recharge/R = charging if(R.stored_ammo.len < R.max_ammo) R.stored_ammo += new R.ammo_type(R) use_power(200 * recharge_coeff) using_power = 1 update_icon(using_power) return else return PROCESS_KILL /obj/machinery/recharger/power_change() ..() update_icon() /obj/machinery/recharger/emp_act(severity) . = ..() if (. & EMP_PROTECT_CONTENTS) return if(!(stat & (NOPOWER|BROKEN)) && anchored) if(istype(charging, /obj/item/gun/energy)) var/obj/item/gun/energy/E = charging if(E.cell) E.cell.emp_act(severity) else if(istype(charging, /obj/item/melee/baton)) var/obj/item/melee/baton/B = charging if(B.cell) B.cell.charge = 0 /obj/machinery/recharger/update_icon(using_power = 0, scan) //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. if(stat & (NOPOWER|BROKEN) || !anchored) icon_state = "rechargeroff" return if(scan) icon_state = "rechargeroff" return if(panel_open) icon_state = "rechargeropen" return if(charging) if(using_power) icon_state = "recharger1" else icon_state = "recharger2" return icon_state = "recharger0"