diff --git a/code/defines/obj/machinery.dm b/code/defines/obj/machinery.dm index 55461e17b09..1280f5182bb 100644 --- a/code/defines/obj/machinery.dm +++ b/code/defines/obj/machinery.dm @@ -361,18 +361,6 @@ idle_power_usage = 20 active_power_usage = 80 -/obj/machinery/cell_charger - name = "cell charger" - desc = "It charges power cells." - icon = 'power.dmi' - icon_state = "ccharger0" - var/obj/item/weapon/cell/charging = null - var/chargelevel = -1 - anchored = 1 - use_power = 1 - idle_power_usage = 5 - active_power_usage = 60 - /obj/machinery/light_switch name = "light switch" desc = "It turns lights on and off. What are you, simple?" diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index d01e0b90887..2f30cd0ff74 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -1,226 +1,3 @@ -/obj/machinery/autolathe - var/busy = 0 - var/max_m_amount = 150000.0 - var/max_g_amount = 75000.0 - -/obj/machinery/autolathe/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (stat) - return 1 - if (busy) - user << "\red The autolathe is busy. Please wait for completion of previous operation." - return 1 - if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - src.opened = 1 - src.icon_state = "autolathe_t" - user << "You open the maintenance hatch of [src]." - else - src.opened = 0 - src.icon_state = "autolathe" - user << "You close the maintenance hatch of [src]." - return 1 - if (opened) - if(istype(O, /obj/item/weapon/crowbar)) - playsound(src.loc, 'Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc - if(m_amount >= 3750) - var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) - G.amount = round(m_amount / 3750) - if(g_amount >= 3750) - var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) - G.amount = round(g_amount / 3750) - del(src) - return 1 - else - user << "\red You can't load the autolathe while it's opened." - return 1 - if (src.m_amount + O.m_amt > max_m_amount) - user << "\red The autolathe is full. Please remove metal from the autolathe in order to insert more." - return 1 - if (src.g_amount + O.g_amt > max_g_amount) - user << "\red The autolathe is full. Please remove glass from the autolathe in order to insert more." - return 1 - if (O.m_amt == 0 && O.g_amt == 0) - user << "\red This object does not contain significant amounts of metal or glass, or cannot be accepted by the autolathe due to size or hazardous materials." - return 1 -/* - if (istype(O, /obj/item/weapon/grab) && src.hacked) - var/obj/item/weapon/grab/G = O - if (prob(25) && G.affecting) - G.affecting.gib() - m_amount += 50000 - return -*/ - - var/amount = 1 - var/obj/item/stack/stack - var/m_amt = O.m_amt - var/g_amt = O.g_amt - if (istype(O, /obj/item/stack)) - stack = O - amount = stack.amount - if (m_amt) - amount = min(amount, round((max_m_amount-src.m_amount)/m_amt)) - flick("autolathe_o",src)//plays metal insertion animation - if (g_amt) - amount = min(amount, round((max_g_amount-src.g_amount)/g_amt)) - flick("autolathe_r",src)//plays glass insertion animation - stack.use(amount) - else - usr.before_take_item(O) - O.loc = src - icon_state = "autolathe" - busy = 1 - use_power(max(1000, (m_amt+g_amt)*amount/10)) - spawn(16) - icon_state = "autolathe" - flick("autolathe_o",src) - src.m_amount += m_amt * amount - src.g_amount += g_amt * amount - if (O && O.loc == src) - del(O) - busy = 0 - src.updateUsrDialog() - -/obj/machinery/autolathe/attack_paw(mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/autolathe/attack_hand(mob/user as mob) - user.machine = src - interact(user) - -/obj/machinery/autolathe/proc/wires_win(mob/user as mob) - var/dat as text - dat += "Autolathe Wires:
" - for(var/wire in src.wires) - dat += text("[wire] Wire: [src.wires[wire] ? "Mend" : "Cut"] Pulse
") - - dat += text("The red light is [src.disabled ? "off" : "on"].
") - dat += text("The green light is [src.shocked ? "off" : "on"].
") - dat += text("The blue light is [src.hacked ? "off" : "on"].
") - user << browse("Autolathe Hacking[dat]","window=autolathe_hack") - onclose(user, "autolathe_hack") - -/obj/machinery/autolathe/proc/regular_win(mob/user as mob) - var/dat as text - dat = text("Metal Amount: [src.m_amount] cm3 (MAX: [max_m_amount])
\nGlass Amount: [src.g_amount] cm3 (MAX: [max_g_amount])
") - var/list/objs = list() - objs += src.L - if (src.hacked) - objs += src.LL - for(var/obj/t in objs) - var/title = "[t.name] ([t.m_amt] m /[t.g_amt] g)" - if (m_amount" - continue - dat += "[title]" - if (istype(t, /obj/item/stack)) - var/obj/item/stack/S = t - var/max_multiplier = min(S.max_amount, S.m_amt?round(m_amount/S.m_amt):INFINITY, S.g_amt?round(g_amount/S.g_amt):INFINITY) - if (max_multiplier>1) - dat += " |" - if (max_multiplier>10) - dat += " x[10]" - if (max_multiplier>25) - dat += " x[25]" - if (max_multiplier>1) - dat += " x[max_multiplier]" - dat += "
" - user << browse("Autolathe Control Panel[dat]", "window=autolathe_regular") - onclose(user, "autolathe_regular") - -/obj/machinery/autolathe/proc/interact(mob/user as mob) - if(..()) - return - if (src.shocked) - src.shock(user,50) - if (src.opened) - wires_win(user,50) - return - if (src.disabled) - user << "\red You press the button, but nothing happens." - return - regular_win(user) - return - -/obj/machinery/autolathe/Topic(href, href_list) - if(..()) - return - usr.machine = src - src.add_fingerprint(usr) - if (!busy) - if(href_list["make"]) - var/turf/T = get_step(src.loc, get_dir(src,usr)) - var/obj/template = locate(href_list["make"]) - var/multiplier = text2num(href_list["multiplier"]) - if (!multiplier) multiplier = 1 - var/power = max(2000, (template.m_amt+template.g_amt)*multiplier/5) - if(src.m_amount >= template.m_amt*multiplier && src.g_amount >= template.g_amt*multiplier) - busy = 1 - use_power(power) - icon_state = "autolathe" - flick("autolathe_n",src) - spawn(16) - use_power(power) - spawn(16) - use_power(power) - spawn(16) - src.m_amount -= template.m_amt*multiplier - src.g_amount -= template.g_amt*multiplier - if(src.m_amount < 0) - src.m_amount = 0 - if(src.g_amount < 0) - src.g_amount = 0 - var/obj/new_item = new template.type(T) - if (multiplier>1) - var/obj/item/stack/S = new_item - S.amount = multiplier - busy = 0 - src.updateUsrDialog() - if(href_list["act"]) - var/temp_wire = href_list["wire"] - if(href_list["act"] == "pulse") - if (!istype(usr.equipped(), /obj/item/device/multitool)) - usr << "You need a multitool!" - else - if(src.wires[temp_wire]) - usr << "You can't pulse a cut wire." - else - if(src.hack_wire == temp_wire) - src.hacked = !src.hacked - spawn(100) src.hacked = !src.hacked - if(src.disable_wire == temp_wire) - src.disabled = !src.disabled - src.shock(usr,50) - spawn(100) src.disabled = !src.disabled - if(src.shock_wire == temp_wire) - src.shocked = !src.shocked - src.shock(usr,50) - spawn(100) src.shocked = !src.shocked - if(href_list["act"] == "wire") - if (!istype(usr.equipped(), /obj/item/weapon/wirecutters)) - usr << "You need wirecutters!" - else - wires[temp_wire] = !wires[temp_wire] - if(src.hack_wire == temp_wire) - src.hacked = !src.hacked - if(src.disable_wire == temp_wire) - src.disabled = !src.disabled - src.shock(usr,50) - if(src.shock_wire == temp_wire) - src.shocked = !src.shocked - src.shock(usr,50) - else - usr << "\red The autolathe is busy. Please wait for completion of previous operation." - src.updateUsrDialog() - return - var/global/list/autolathe_recipes = list( \ /* screwdriver removed*/ \ new /obj/item/weapon/reagent_containers/glass/bucket(), \ @@ -271,55 +48,282 @@ var/global/list/autolathe_recipes_hidden = list( \ /* new /obj/item/weapon/shield/riot(), */ \ ) -/obj/machinery/autolathe/RefreshParts() - ..() - var/tot_rating = 0 - for(var/obj/item/weapon/stock_parts/matter_bin/MB in component_parts) - tot_rating += MB.rating - tot_rating *= 25000 - max_m_amount = tot_rating * 2 - max_g_amount = tot_rating +/obj/machinery/autolathe + var + busy = 0 + max_m_amount = 150000.0 + max_g_amount = 75000.0 + + proc + wires_win(mob/user as mob) + var/dat as text + dat += "Autolathe Wires:
" + for(var/wire in src.wires) + dat += text("[wire] Wire: [src.wires[wire] ? "Mend" : "Cut"] Pulse
") + + dat += text("The red light is [src.disabled ? "off" : "on"].
") + dat += text("The green light is [src.shocked ? "off" : "on"].
") + dat += text("The blue light is [src.hacked ? "off" : "on"].
") + user << browse("Autolathe Hacking[dat]","window=autolathe_hack") + onclose(user, "autolathe_hack") + + regular_win(mob/user as mob) + var/dat as text + dat = text("Metal Amount: [src.m_amount] cm3 (MAX: [max_m_amount])
\nGlass Amount: [src.g_amount] cm3 (MAX: [max_g_amount])
") + var/list/objs = list() + objs += src.L + if (src.hacked) + objs += src.LL + for(var/obj/t in objs) + var/title = "[t.name] ([t.m_amt] m /[t.g_amt] g)" + if (m_amount" + continue + dat += "[title]" + if (istype(t, /obj/item/stack)) + var/obj/item/stack/S = t + var/max_multiplier = min(S.max_amount, S.m_amt?round(m_amount/S.m_amt):INFINITY, S.g_amt?round(g_amount/S.g_amt):INFINITY) + if (max_multiplier>1) + dat += " |" + if (max_multiplier>10) + dat += " x[10]" + if (max_multiplier>25) + dat += " x[25]" + if (max_multiplier>1) + dat += " x[max_multiplier]" + dat += "
" + user << browse("Autolathe Control Panel[dat]", "window=autolathe_regular") + onclose(user, "autolathe_regular") + + interact(mob/user as mob) + if(..()) + return + if (src.shocked) + src.shock(user,50) + if (src.opened) + wires_win(user,50) + return + if (src.disabled) + user << "\red You press the button, but nothing happens." + return + regular_win(user) + return + + shock(mob/user, prb) + if(stat & (BROKEN|NOPOWER)) // unpowered, no shock + return 0 + if(!prob(prb)) + return 0 + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + if (electrocute_mob(user, get_area(src), src, 0.7)) + return 1 + else + return 0 + + attackby(var/obj/item/O as obj, var/mob/user as mob) + if (stat) + return 1 + if (busy) + user << "\red The autolathe is busy. Please wait for completion of previous operation." + return 1 + if (istype(O, /obj/item/weapon/screwdriver)) + if (!opened) + src.opened = 1 + src.icon_state = "autolathe_t" + user << "You open the maintenance hatch of [src]." + else + src.opened = 0 + src.icon_state = "autolathe" + user << "You close the maintenance hatch of [src]." + return 1 + if (opened) + if(istype(O, /obj/item/weapon/crowbar)) + playsound(src.loc, 'Crowbar.ogg', 50, 1) + var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) + M.state = 2 + M.icon_state = "box_1" + for(var/obj/I in component_parts) + if(I.reliability != 100 && crit_fail) + I.crit_fail = 1 + I.loc = src.loc + if(m_amount >= 3750) + var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) + G.amount = round(m_amount / 3750) + if(g_amount >= 3750) + var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) + G.amount = round(g_amount / 3750) + del(src) + return 1 + else + user.machine = src + interact(user) + return 1 + + if (src.m_amount + O.m_amt > max_m_amount) + user << "\red The autolathe is full. Please remove metal from the autolathe in order to insert more." + return 1 + if (src.g_amount + O.g_amt > max_g_amount) + user << "\red The autolathe is full. Please remove glass from the autolathe in order to insert more." + return 1 + if (O.m_amt == 0 && O.g_amt == 0) + user << "\red This object does not contain significant amounts of metal or glass, or cannot be accepted by the autolathe due to size or hazardous materials." + return 1 + /* + if (istype(O, /obj/item/weapon/grab) && src.hacked) + var/obj/item/weapon/grab/G = O + if (prob(25) && G.affecting) + G.affecting.gib() + m_amount += 50000 + return + */ + + var/amount = 1 + var/obj/item/stack/stack + var/m_amt = O.m_amt + var/g_amt = O.g_amt + if (istype(O, /obj/item/stack)) + stack = O + amount = stack.amount + if (m_amt) + amount = min(amount, round((max_m_amount-src.m_amount)/m_amt)) + flick("autolathe_o",src)//plays metal insertion animation + if (g_amt) + amount = min(amount, round((max_g_amount-src.g_amount)/g_amt)) + flick("autolathe_r",src)//plays glass insertion animation + stack.use(amount) + else + usr.before_take_item(O) + O.loc = src + icon_state = "autolathe" + busy = 1 + use_power(max(1000, (m_amt+g_amt)*amount/10)) + src.m_amount += m_amt * amount + src.g_amount += g_amt * amount + user << "You insert [amount] sheet[amount>1 ? "s" : ""] to the autolathe." + if (O && O.loc == src) + del(O) + busy = 0 + src.updateUsrDialog() + + attack_paw(mob/user as mob) + return src.attack_hand(user) + + attack_hand(mob/user as mob) + user.machine = src + interact(user) + + + Topic(href, href_list) + if(..()) + return + usr.machine = src + src.add_fingerprint(usr) + if (!busy) + if(href_list["make"]) + var/turf/T = get_step(src.loc, get_dir(src,usr)) + var/obj/template = locate(href_list["make"]) + var/multiplier = text2num(href_list["multiplier"]) + if (!multiplier) multiplier = 1 + var/power = max(2000, (template.m_amt+template.g_amt)*multiplier/5) + if(src.m_amount >= template.m_amt*multiplier && src.g_amount >= template.g_amt*multiplier) + busy = 1 + use_power(power) + icon_state = "autolathe" + flick("autolathe_n",src) + spawn(16) + use_power(power) + spawn(16) + use_power(power) + spawn(16) + src.m_amount -= template.m_amt*multiplier + src.g_amount -= template.g_amt*multiplier + if(src.m_amount < 0) + src.m_amount = 0 + if(src.g_amount < 0) + src.g_amount = 0 + var/obj/new_item = new template.type(T) + if (multiplier>1) + var/obj/item/stack/S = new_item + S.amount = multiplier + busy = 0 + src.updateUsrDialog() + if(href_list["act"]) + var/temp_wire = href_list["wire"] + if(href_list["act"] == "pulse") + if (!istype(usr.equipped(), /obj/item/device/multitool)) + usr << "You need a multitool!" + else + if(src.wires[temp_wire]) + usr << "You can't pulse a cut wire." + else + if(src.hack_wire == temp_wire) + src.hacked = !src.hacked + spawn(100) src.hacked = !src.hacked + if(src.disable_wire == temp_wire) + src.disabled = !src.disabled + src.shock(usr,50) + spawn(100) src.disabled = !src.disabled + if(src.shock_wire == temp_wire) + src.shocked = !src.shocked + src.shock(usr,50) + spawn(100) src.shocked = !src.shocked + if(href_list["act"] == "wire") + if (!istype(usr.equipped(), /obj/item/weapon/wirecutters)) + usr << "You need wirecutters!" + else + wires[temp_wire] = !wires[temp_wire] + if(src.hack_wire == temp_wire) + src.hacked = !src.hacked + if(src.disable_wire == temp_wire) + src.disabled = !src.disabled + src.shock(usr,50) + if(src.shock_wire == temp_wire) + src.shocked = !src.shocked + src.shock(usr,50) + else + usr << "\red The autolathe is busy. Please wait for completion of previous operation." + src.updateUsrDialog() + return + -/obj/machinery/autolathe/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/autolathe(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/console_screen(src) RefreshParts() + ..() + var/tot_rating = 0 + for(var/obj/item/weapon/stock_parts/matter_bin/MB in component_parts) + tot_rating += MB.rating + tot_rating *= 25000 + max_m_amount = tot_rating * 2 + max_g_amount = tot_rating - src.L = autolathe_recipes - src.LL = autolathe_recipes_hidden - src.wires["Light Red"] = 0 - src.wires["Dark Red"] = 0 - src.wires["Blue"] = 0 - src.wires["Green"] = 0 - src.wires["Yellow"] = 0 - src.wires["Black"] = 0 - src.wires["White"] = 0 - src.wires["Gray"] = 0 - src.wires["Orange"] = 0 - src.wires["Pink"] = 0 - var/list/w = list("Light Red","Dark Red","Blue","Green","Yellow","Black","White","Gray","Orange","Pink") - src.hack_wire = pick(w) - w -= src.hack_wire - src.shock_wire = pick(w) - w -= src.shock_wire - src.disable_wire = pick(w) - w -= src.disable_wire + New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/autolathe(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + RefreshParts() -/obj/machinery/autolathe/proc/shock(mob/user, prb) - if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return 0 - if(!prob(prb)) - return 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if (electrocute_mob(user, get_area(src), src, 0.7)) - return 1 - else - return 0 \ No newline at end of file + src.L = autolathe_recipes + src.LL = autolathe_recipes_hidden + src.wires["Light Red"] = 0 + src.wires["Dark Red"] = 0 + src.wires["Blue"] = 0 + src.wires["Green"] = 0 + src.wires["Yellow"] = 0 + src.wires["Black"] = 0 + src.wires["White"] = 0 + src.wires["Gray"] = 0 + src.wires["Orange"] = 0 + src.wires["Pink"] = 0 + var/list/w = list("Light Red","Dark Red","Blue","Green","Yellow","Black","White","Gray","Orange","Pink") + src.hack_wire = pick(w) + w -= src.hack_wire + src.shock_wire = pick(w) + w -= src.shock_wire + src.disable_wire = pick(w) + w -= src.disable_wire diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index c802fcad1c8..4b5095d19a9 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -1,57 +1,92 @@ -/obj/machinery/cell_charger/attackby(obj/item/weapon/W, mob/user) - if(stat & BROKEN) - return - if(istype(W, /obj/item/weapon/cell)) - if(charging) - user << "There is already a cell in the charger." - return - else - user.drop_item() - W.loc = src - charging = W - user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") - chargelevel = -1 - updateicon() - -/obj/machinery/cell_charger/proc/updateicon() - icon_state = "ccharger[charging ? 1 : 0]" - - if(charging && !(stat & (BROKEN|NOPOWER)) ) - - var/newlevel = round( charging.percent() * 4.0 / 99 ) - //world << "nl: [newlevel]" - - if(chargelevel != newlevel) - - overlays = null - overlays += image('power.dmi', "ccharger-o[newlevel]") - - chargelevel = newlevel - else - overlays = null - -/obj/machinery/cell_charger/attack_hand(mob/user) - - if(charging) - usr.put_in_hand(charging) - charging.add_fingerprint(user) - charging.updateicon() - - src.charging = null - user.visible_message("[user] removes the cell from the charger.", "You remove the cell from the charger.") +/obj/machinery/cell_charger + name = "cell charger" + desc = "It charges power cells." + icon = 'power.dmi' + icon_state = "ccharger0" + anchored = 1 + use_power = 1 + idle_power_usage = 5 + active_power_usage = 60 + power_channel = EQUIP + var + obj/item/weapon/cell/charging = null chargelevel = -1 + proc updateicon() + icon_state = "ccharger[charging ? 1 : 0]" -/obj/machinery/cell_charger/attack_ai(mob/user) - return + if(charging && !(stat & (BROKEN|NOPOWER)) ) -/obj/machinery/cell_charger/process() - //world << "ccpt [charging] [stat]" - if(!charging || (stat & (BROKEN|NOPOWER)) ) + var/newlevel = round( charging.percent() * 4.0 / 99 ) + //world << "nl: [newlevel]" + + if(chargelevel != newlevel) + + overlays = null + overlays += image('power.dmi', "ccharger-o[newlevel]") + + chargelevel = newlevel + else + overlays = null + examine() + set src in oview(5) + ..() + usr << "There's [charging ? "a" : "no"] cell in the charger." + if(charging) + usr << "Current charge: [charging.charge]" + + attackby(obj/item/weapon/W, mob/user) + if(stat & BROKEN) + return + + if(istype(W, /obj/item/weapon/cell) && anchored) + if(charging) + user << "\red There is already a cell in the charger." + return + else + var/area/a = loc.loc // Gets our locations location, like a dream within a dream + if(!isarea(a)) + return + if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! + user << "\red The charger rejects the cell!" + return + + user.drop_item() + W.loc = src + charging = W + user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") + chargelevel = -1 + updateicon() + else if(istype(W, /obj/item/weapon/wrench)) + if(charging) + user << "\red Remove the cell first!" + return + + anchored = !anchored + user << "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground" + playsound(src.loc, 'Ratchet.ogg', 75, 1) + + attack_hand(mob/user) + if(charging) + usr.put_in_hand(charging) + charging.add_fingerprint(user) + charging.updateicon() + + src.charging = null + user.visible_message("[user] removes the cell from the charger.", "You remove the cell from the charger.") + chargelevel = -1 + updateicon() + + attack_ai(mob/user) return - var/added = charging.give(75) - use_power(added / CELLRATE) + process() + //world << "ccpt [charging] [stat]" + if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored) + return - updateicon() + var/added = charging.give(75) + use_power(added / CELLRATE) + + updateicon() diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index d362a2cab71..264619f8377 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -1,5 +1,5 @@ obj/machinery/recharger - anchored = 1.0 + anchored = 1 icon = 'stationobjs.dmi' icon_state = "recharger0" name = "recharger" @@ -11,62 +11,80 @@ obj/machinery/recharger obj/item/weapon/gun/energy/charging = null obj/item/weapon/melee/baton/charging2 = null -/obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) - if (src.charging || src.charging2) - return - if (istype(G, /obj/item/weapon/gun/energy)) - if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow)) - user << "Your gun's recharge port was removed to make room for a miniaturized reactor." - return - if (istype(G, /obj/item/weapon/gun/energy/staff)) - user << "It's a wooden staff, not a gun!" - return - user.drop_item() - G.loc = src - src.charging = G - use_power = 2 - if (istype(G, /obj/item/weapon/melee/baton)) - user.drop_item() - G.loc = src - src.charging2 = G - use_power = 2 + attackby(obj/item/weapon/G as obj, mob/user as mob) + if (istype(G, /obj/item/weapon/gun/energy)) + if (src.charging || src.charging2) + return + if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow)) + user << "Your gun's recharge port was removed to make room for a miniaturized reactor." + return + if (istype(G, /obj/item/weapon/gun/energy/staff)) + user << "It's a wooden staff, not a gun!" + return + var/area/a = loc.loc // Gets our locations location, like a dream within a dream + if(!isarea(a)) + return + if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! + user << "\red The recharger rejects the weapon!" + return + user.drop_item() + G.loc = src + src.charging = G + use_power = 2 + else if (istype(G, /obj/item/weapon/melee/baton)) + if (src.charging || src.charging2) + return + user.drop_item() + G.loc = src + src.charging2 = G + use_power = 2 + else if(istype(G, /obj/item/weapon/wrench)) + if (src.charging || src.charging2) + user << "\red Remove the weapon first!" + return + anchored = !anchored + user << "You [anchored ? "attach" : "detach"] the recharger [anchored ? "to" : "from"] the ground" + playsound(src.loc, 'Ratchet.ogg', 75, 1) -/obj/machinery/recharger/attack_hand(mob/user as mob) - src.add_fingerprint(user) - if(ishuman(user)) - if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining) - call(/obj/item/clothing/gloves/space_ninja/proc/drain)("MACHINERY",src,user:wear_suit) + attack_hand(mob/user as mob) + src.add_fingerprint(user) + if(ishuman(user)) + if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining) + call(/obj/item/clothing/gloves/space_ninja/proc/drain)("MACHINERY",src,user:wear_suit) + return + + if (src.charging) + src.charging.update_icon() + src.charging.loc = src.loc + src.charging = null + use_power = 1 + if(src.charging2) + src.charging2.update_icon() + src.charging2.loc = src.loc + src.charging2 = null + use_power = 1 + + attack_paw(mob/user as mob) + if ((ticker && ticker.mode.name == "monkey")) + return src.attack_hand(user) + + process() + if(stat & (NOPOWER|BROKEN) || !anchored) return - if (src.charging) - src.charging.update_icon() - src.charging.loc = src.loc - src.charging = null - use_power = 1 - if(src.charging2) - src.charging2.update_icon() - src.charging2.loc = src.loc - src.charging2 = null - use_power = 1 - -/obj/machinery/recharger/attack_paw(mob/user as mob) - if ((ticker && ticker.mode.name == "monkey")) - return src.attack_hand(user) - -/obj/machinery/recharger/process() - if ((src.charging) && ! (stat & NOPOWER) ) - if (src.charging.power_supply.charge < src.charging.power_supply.maxcharge) - src.charging.power_supply.give(100) - src.icon_state = "recharger1" - use_power(250) + if (src.charging) + if (src.charging.power_supply.charge < src.charging.power_supply.maxcharge) + src.charging.power_supply.give(100) + src.icon_state = "recharger1" + use_power(250) + else + src.icon_state = "recharger2" + else if (src.charging2) + if (src.charging2.charges < src.charging2.maximum_charges) + src.charging2.charges++ + src.icon_state = "recharger1" + use_power(250) + else + src.icon_state = "recharger2" else - src.icon_state = "recharger2" - if ((src.charging2) && ! (stat & NOPOWER) ) - if (src.charging2.charges < src.charging2.maximum_charges) - src.charging2.charges++ - src.icon_state = "recharger1" - use_power(250) - else - src.icon_state = "recharger2" - else if (!(src.charging || src.charging2)) - src.icon_state = "recharger0" + src.icon_state = "recharger0"