mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-23 20:17:15 +01:00
Fixes chargers being a magical source of charge
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/obj/machinery/cell_charger
|
||||
name = "cell charger"
|
||||
desc = "It charges power cells."
|
||||
name = "heavy-duty cell charger"
|
||||
desc = "A much more powerful version of the standard recharger that is specially designed for charging power cells."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "ccharger0"
|
||||
anchored = 1
|
||||
@@ -10,7 +10,9 @@
|
||||
power_channel = EQUIP
|
||||
var/obj/item/weapon/cell/charging = null
|
||||
var/chargelevel = -1
|
||||
var/efficiency = 0.875 //<1.0 means some power is lost in the charging process, >1.0 means free energy.
|
||||
var/power_rating = 50000 //50 kW. A measure of how powerful this charger is for charging cells (this the power drawn when charging)
|
||||
|
||||
|
||||
proc
|
||||
updateicon()
|
||||
icon_state = "ccharger[charging ? 1 : 0]"
|
||||
@@ -93,9 +95,8 @@
|
||||
if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored)
|
||||
return
|
||||
|
||||
var/power_used = 100000 //for 200 units of charge. Yes, thats right, 100 kW. Is something wrong with CELLRATE?
|
||||
|
||||
power_used = charging.give(power_used*CELLRATE*efficiency)
|
||||
use_power(power_used)
|
||||
if (!charging.fully_charged())
|
||||
var/charge_used = charging.give(power_rating*CELLRATE)
|
||||
use_power(charge_used/CELLRATE) //It's only while charging something, so I'm going to say use_power() is fine here...
|
||||
|
||||
updateicon()
|
||||
|
||||
@@ -7,13 +7,19 @@ obj/machinery/recharger
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 4
|
||||
active_power_usage = 250
|
||||
var/power_rating = 15000 //15 kW
|
||||
var/obj/item/charging = null
|
||||
var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell)
|
||||
|
||||
obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||
if(istype(user,/mob/living/silicon))
|
||||
return
|
||||
if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton) || istype(G,/obj/item/device/laptop))
|
||||
|
||||
var/allowed = 0
|
||||
for (var/allowed_type in allowed_devices)
|
||||
if (istype(G, allowed_type)) allowed = 1
|
||||
|
||||
if(allowed)
|
||||
if(charging)
|
||||
return
|
||||
|
||||
@@ -39,11 +45,10 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||
user.drop_item()
|
||||
G.loc = src
|
||||
charging = G
|
||||
use_power = 2
|
||||
update_icon()
|
||||
else if(istype(G, /obj/item/weapon/wrench))
|
||||
if(charging)
|
||||
user << "\red Remove the weapon first!"
|
||||
user << "\red Remove [charging] first!"
|
||||
return
|
||||
anchored = !anchored
|
||||
user << "You [anchored ? "attached" : "detached"] the recharger."
|
||||
@@ -56,7 +61,6 @@ obj/machinery/recharger/attack_hand(mob/user as mob)
|
||||
charging.update_icon()
|
||||
charging.loc = loc
|
||||
charging = null
|
||||
use_power = 1
|
||||
update_icon()
|
||||
|
||||
obj/machinery/recharger/attack_paw(mob/user as mob)
|
||||
@@ -69,19 +73,20 @@ obj/machinery/recharger/process()
|
||||
if(charging)
|
||||
if(istype(charging, /obj/item/weapon/gun/energy))
|
||||
var/obj/item/weapon/gun/energy/E = charging
|
||||
if(E.power_supply.charge < E.power_supply.maxcharge)
|
||||
E.power_supply.give(100)
|
||||
if(!E.power_supply.fully_charged())
|
||||
icon_state = "recharger1"
|
||||
use_power(250/CELLRATE)
|
||||
var/charge_used = E.power_supply.give(power_rating*CELLRATE)
|
||||
use_power(charge_used/CELLRATE)
|
||||
else
|
||||
icon_state = "recharger2"
|
||||
return
|
||||
if(istype(charging, /obj/item/weapon/melee/baton))
|
||||
var/obj/item/weapon/melee/baton/B = charging
|
||||
if(B.bcell)
|
||||
if(B.bcell.give(1500)) //Because otherwise it takes two minutes to fully charge due to 15k cells. - Neerti
|
||||
if(!B.bcell.fully_charged())
|
||||
icon_state = "recharger1"
|
||||
use_power(200/CELLRATE)
|
||||
var/charge_used = B.bcell.give(power_rating*CELLRATE)
|
||||
use_power(charge_used/CELLRATE)
|
||||
else
|
||||
icon_state = "recharger2"
|
||||
else
|
||||
@@ -89,14 +94,22 @@ obj/machinery/recharger/process()
|
||||
return
|
||||
if(istype(charging, /obj/item/device/laptop))
|
||||
var/obj/item/device/laptop/L = charging
|
||||
if(L.stored_computer.battery.charge < L.stored_computer.battery.maxcharge)
|
||||
L.stored_computer.battery.give(100)
|
||||
if(!L.stored_computer.battery.fully_charged())
|
||||
icon_state = "recharger1"
|
||||
use_power(250/CELLRATE)
|
||||
var/charge_used = L.stored_computer.battery.give(power_rating*CELLRATE)
|
||||
use_power(charge_used/CELLRATE)
|
||||
else
|
||||
icon_state = "recharger2"
|
||||
return
|
||||
if(istype(charging, /obj/item/weapon/cell))
|
||||
var/obj/item/weapon/cell/C = charging
|
||||
if(!C.fully_charged())
|
||||
icon_state = "recharger1"
|
||||
var/charge_used = C.give(power_rating*CELLRATE)
|
||||
use_power(charge_used/CELLRATE)
|
||||
else
|
||||
icon_state = "recharger2"
|
||||
return
|
||||
|
||||
|
||||
|
||||
obj/machinery/recharger/emp_act(severity)
|
||||
@@ -125,6 +138,8 @@ obj/machinery/recharger/wallcharger
|
||||
name = "wall recharger"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "wrecharger0"
|
||||
power_rating = 25000 //25 kW , It's more specialized than the standalone recharger but more powerful
|
||||
allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton)
|
||||
|
||||
obj/machinery/recharger/wallcharger/process()
|
||||
if(stat & (NOPOWER|BROKEN) || !anchored)
|
||||
@@ -133,19 +148,20 @@ obj/machinery/recharger/wallcharger/process()
|
||||
if(charging)
|
||||
if(istype(charging, /obj/item/weapon/gun/energy))
|
||||
var/obj/item/weapon/gun/energy/E = charging
|
||||
if(E.power_supply.charge < E.power_supply.maxcharge)
|
||||
E.power_supply.give(100)
|
||||
if(!E.power_supply.fully_charged())
|
||||
icon_state = "wrecharger1"
|
||||
use_power(250/CELLRATE)
|
||||
var/charge_used = E.power_supply.give(power_rating*CELLRATE)
|
||||
use_power(charge_used/CELLRATE)
|
||||
else
|
||||
icon_state = "wrecharger2"
|
||||
return
|
||||
if(istype(charging, /obj/item/weapon/melee/baton))
|
||||
var/obj/item/weapon/melee/baton/B = charging
|
||||
if(B.bcell)
|
||||
if(B.bcell.give(1500)) //Because otherwise it takes two minutes to fully charge due to 15k cells. - Neerti
|
||||
if(!B.bcell.fully_charged()) //Because otherwise it takes two minutes to fully charge due to 15k cells. - Neerti
|
||||
icon_state = "wrecharger1"
|
||||
use_power(200/CELLRATE)
|
||||
var/charge_used = B.bcell.give(power_rating*CELLRATE)
|
||||
use_power(charge_used/CELLRATE)
|
||||
else
|
||||
icon_state = "wrecharger2"
|
||||
else
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
return
|
||||
|
||||
// High brute damage or sharp objects may damage internal organs
|
||||
if(internal_organs != null) if( (sharp && brute >= 5) || brute >= 10) if(prob(5))
|
||||
if(internal_organs && ( (sharp && brute >= 5) || brute >= 10) && prob(5))
|
||||
// Damage an internal organ
|
||||
var/datum/organ/internal/I = pick(internal_organs)
|
||||
I.take_damage(brute / 2)
|
||||
@@ -387,7 +387,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
/datum/organ/external/proc/handle_germ_effects()
|
||||
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
|
||||
|
||||
if (germ_level < INFECTION_LEVEL_ONE && prob(60)) //this could be an else clause, but it looks cleaner this way
|
||||
if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE && prob(60)) //this could be an else clause, but it looks cleaner this way
|
||||
germ_level-- //since germ_level increases at a rate of 1 per second with dirty wounds, prob(60) should give us about 5 minutes before level one.
|
||||
|
||||
if(germ_level >= INFECTION_LEVEL_ONE)
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
/obj/item/weapon/cell/proc/percent() // return % charge of cell
|
||||
return 100.0*charge/maxcharge
|
||||
|
||||
/obj/item/weapon/cell/proc/fully_charged()
|
||||
return (charge == maxcharge)
|
||||
|
||||
// use power from a cell
|
||||
/obj/item/weapon/cell/proc/use(var/amount)
|
||||
if(rigged && amount > 0)
|
||||
@@ -39,15 +42,15 @@
|
||||
return 0
|
||||
|
||||
if(maxcharge < amount) return 0
|
||||
var/power_used = min(maxcharge-charge,amount)
|
||||
var/amount_used = min(maxcharge-charge,amount)
|
||||
if(crit_fail) return 0
|
||||
if(!prob(reliability))
|
||||
minor_fault++
|
||||
if(prob(minor_fault))
|
||||
crit_fail = 1
|
||||
return 0
|
||||
charge += power_used
|
||||
return power_used
|
||||
charge += amount_used
|
||||
return amount_used
|
||||
|
||||
|
||||
/obj/item/weapon/cell/examine()
|
||||
|
||||
Reference in New Issue
Block a user