From bd0a431623f8f3c3c63ec4f09c142cad4436e56d Mon Sep 17 00:00:00 2001 From: AbsFree Date: Tue, 24 Dec 2024 11:42:45 +0100 Subject: [PATCH 01/13] started making the energy harvester --- .../code/modules/power/energy_harvester.dm | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 GainStation13/code/modules/power/energy_harvester.dm diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm new file mode 100644 index 0000000000..142c19d714 --- /dev/null +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -0,0 +1,41 @@ + +/obj/machinery/power/energy_harvester + desc = "A Device which upon connection to a node, will harvest the energy and send it to engineerless stations in return for credits, derived from a syndicate powersink model. The instructions say to never use more than 4 harvesters at a time." + name = "Energy Harvesting Module" + density = FALSE + use_power = NO_POWER_USE + anchored = FALSE + circuit = /obj/item/circuitboard/machine/energy_harvester + + var/maximum_net_drain_percentage = 0.05 + var/credit_conversion_rate = 0.00002 + +/obj/machinery/power/rad_collector/anchored + anchored = TRUE + +/obj/machinery/power/energy_harvester/Initialize(mapload) + . = ..() + RefreshParts() + if(anchored) + connect_to_network() + +/obj/machinery/power/emitter/RefreshParts() + var/drain_modifier = 0.0125 + var/credit_conversion_efficiency = 0.0000025 + var/capacitor_rating = 0 + var/manipulator_rating = 0 + + for(var/obj/item/stock_parts/capacitor/capacitor in component_parts) + capacitor_rating += capacitor.rating + maximum_net_drain_percentage = capacitor_rating * drain_modifier + + for(var/obj/item/stock_parts/manipulator/manipulator in component_parts) + manipulator_rating += manipulator.rating + credit_conversion_rate = credit_conversion_efficiency * manipulator_rating + +/obj/item/circuitboard/machine/energy_harvester + name = "Energy Harvester (Machine Board)" + build_path = /obj/machinery/adipoelectric_transformer + req_components = list( + /obj/item/stock_parts/capacitor = 4, + /obj/item/stock_parts/manipulator = 2) From 3c2da809018dc2ccc18af9757bf6bb1004964b73 Mon Sep 17 00:00:00 2001 From: AbsFree Date: Fri, 21 Feb 2025 09:22:52 +0100 Subject: [PATCH 02/13] added test functionalities --- .../code/modules/power/energy_harvester.dm | 44 +++++++++++++++++-- tgstation.dme | 1 + 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index 142c19d714..f84d4abdda 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -1,3 +1,6 @@ +#define DRAIN_MODIFIER 0.0125 +#define CREDIT_CONVERSION_EFFICIENCY 0.0000025 + /obj/machinery/power/energy_harvester desc = "A Device which upon connection to a node, will harvest the energy and send it to engineerless stations in return for credits, derived from a syndicate powersink model. The instructions say to never use more than 4 harvesters at a time." @@ -5,13 +8,18 @@ density = FALSE use_power = NO_POWER_USE anchored = FALSE + icon = 'GainStation13/icons/obj/adipoelectric_transformer.dmi' + icon_state = "state_off" circuit = /obj/item/circuitboard/machine/energy_harvester var/maximum_net_drain_percentage = 0.05 + var/set_power_drain = 0.05 var/credit_conversion_rate = 0.00002 + var/power_avaliable = 0 + var/obj/structure/cable/attached -/obj/machinery/power/rad_collector/anchored - anchored = TRUE +// /obj/machinery/power/rad_collector/anchored +// anchored = TRUE /obj/machinery/power/energy_harvester/Initialize(mapload) . = ..() @@ -19,7 +27,7 @@ if(anchored) connect_to_network() -/obj/machinery/power/emitter/RefreshParts() +/obj/machinery/power/energy_harvester/RefreshParts() var/drain_modifier = 0.0125 var/credit_conversion_efficiency = 0.0000025 var/capacitor_rating = 0 @@ -33,9 +41,37 @@ manipulator_rating += manipulator.rating credit_conversion_rate = credit_conversion_efficiency * manipulator_rating +/obj/machinery/power/energy_harvester/process() + if(!is_operational()) + return + if(!attached) + src.visible_message("[src] buzzes. Seems like it's not attached to a working power net.") + playsound(src, 'sound/machines/buzz-two.ogg', 50) + return PROCESS_KILL + + if(!powernet) + return + + power_avaliable = powernet.avail + if(power_avaliable <= 0) + return + + var/power_drain = power_avaliable * set_power_drain + powernet.add_load(power_drain) + +/obj/machinery/power/energy_harvester/default_unfasten_wrench(mob/user, obj/item/I, time = 20) + . = ..() + if(. == SUCCESSFUL_UNFASTEN) + if(anchored) + connect_to_network() + /obj/item/circuitboard/machine/energy_harvester name = "Energy Harvester (Machine Board)" - build_path = /obj/machinery/adipoelectric_transformer + build_path = /obj/machinery/power/energy_harvester req_components = list( /obj/item/stock_parts/capacitor = 4, /obj/item/stock_parts/manipulator = 2) + + +#undef DRAIN_MODIFIER +#undef CREDIT_CONVERSION_EFFICIENCY diff --git a/tgstation.dme b/tgstation.dme index 3478a43ce9..64f968cfc0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4087,6 +4087,7 @@ #include "GainStation13\code\obj\items\reskinable_floor_tile.dm" #include "GainStation13\code\obj\items\sensors\weight_infared.dm" #include "GainStation13\code\obj\structure\airlock.dm" +#include "GainStation13\code\modules\power\energy_harvester.dm" #include "GainStation13\code\obj\structure\calorite_doors.dm" #include "GainStation13\code\obj\structure\candylight.dm" #include "GainStation13\code\obj\structure\fountain.dm" From a82e41921d8af03cbd989070c8dca031742859a2 Mon Sep 17 00:00:00 2001 From: AbsFree Date: Fri, 21 Feb 2025 10:39:11 +0100 Subject: [PATCH 03/13] it sucks power (I think?) and turns it into credits, beginning of maintenance functions --- .../code/modules/power/energy_harvester.dm | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index f84d4abdda..7677f46b55 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -7,19 +7,17 @@ name = "Energy Harvesting Module" density = FALSE use_power = NO_POWER_USE - anchored = FALSE + // anchored = FALSE icon = 'GainStation13/icons/obj/adipoelectric_transformer.dmi' icon_state = "state_off" circuit = /obj/item/circuitboard/machine/energy_harvester + var/maximum_net_drain_percentage = 0.05 var/set_power_drain = 0.05 var/credit_conversion_rate = 0.00002 var/power_avaliable = 0 - var/obj/structure/cable/attached - -// /obj/machinery/power/rad_collector/anchored -// anchored = TRUE + // var/obj/structure/cable/attached /obj/machinery/power/energy_harvester/Initialize(mapload) . = ..() @@ -28,36 +26,41 @@ connect_to_network() /obj/machinery/power/energy_harvester/RefreshParts() - var/drain_modifier = 0.0125 - var/credit_conversion_efficiency = 0.0000025 var/capacitor_rating = 0 var/manipulator_rating = 0 for(var/obj/item/stock_parts/capacitor/capacitor in component_parts) capacitor_rating += capacitor.rating - maximum_net_drain_percentage = capacitor_rating * drain_modifier + maximum_net_drain_percentage = capacitor_rating * DRAIN_MODIFIER for(var/obj/item/stock_parts/manipulator/manipulator in component_parts) manipulator_rating += manipulator.rating - credit_conversion_rate = credit_conversion_efficiency * manipulator_rating + credit_conversion_rate = manipulator_rating * CREDIT_CONVERSION_EFFICIENCY /obj/machinery/power/energy_harvester/process() if(!is_operational()) return - if(!attached) - src.visible_message("[src] buzzes. Seems like it's not attached to a working power net.") - playsound(src, 'sound/machines/buzz-two.ogg', 50) - return PROCESS_KILL - + if(!powernet) return - power_avaliable = powernet.avail + power_avaliable = avail() if(power_avaliable <= 0) return - + var/power_drain = power_avaliable * set_power_drain - powernet.add_load(power_drain) + add_load(power_drain) + var/credits_earned = credit_conversion_rate * power_drain + + var/datum/bank_account/engineering_budget = SSeconomy.get_dep_account(ACCOUNT_ENG) + if(engineering_budget) + engineering_budget.adjust_money(credits_earned / 2) + + var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR) + if(cargo_budget) + cargo_budget.adjust_money(credits_earned / 2) + + /obj/machinery/power/energy_harvester/default_unfasten_wrench(mob/user, obj/item/I, time = 20) . = ..() @@ -65,6 +68,12 @@ if(anchored) connect_to_network() +/obj/machinery/power/energy_harvester/screwdriver_act(mob/living/user, obj/item/I) + if(..()) + return TRUE + default_deconstruction_screwdriver(user, "state_open", "state_off", I) + return TRUE + /obj/item/circuitboard/machine/energy_harvester name = "Energy Harvester (Machine Board)" build_path = /obj/machinery/power/energy_harvester From 2f4f5a0b6a9b478c42b44f69f39a509de0cf3381 Mon Sep 17 00:00:00 2001 From: AbsFree Date: Fri, 21 Feb 2025 18:03:44 +0100 Subject: [PATCH 04/13] functionality implemented, but the UI is suspiciously slow --- .../code/modules/power/energy_harvester.dm | 74 +++++++++++++++++-- tgstation.dme | 2 +- .../tgui/interfaces/EnergyHarvester.js | 57 ++++++++++++++ 3 files changed, 124 insertions(+), 9 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/EnergyHarvester.js diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index 7677f46b55..e8ae7bae70 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -15,15 +15,16 @@ var/maximum_net_drain_percentage = 0.05 var/set_power_drain = 0.05 - var/credit_conversion_rate = 0.00002 - var/power_avaliable = 0 - // var/obj/structure/cable/attached + var/credit_conversion_rate = 0.000005 + var/power_available = 0 + var/active = FALSE /obj/machinery/power/energy_harvester/Initialize(mapload) . = ..() RefreshParts() if(anchored) connect_to_network() + power_available = avail() /obj/machinery/power/energy_harvester/RefreshParts() var/capacitor_rating = 0 @@ -38,17 +39,20 @@ credit_conversion_rate = manipulator_rating * CREDIT_CONVERSION_EFFICIENCY /obj/machinery/power/energy_harvester/process() + if(!active) + return + if(!is_operational()) return if(!powernet) return - power_avaliable = avail() - if(power_avaliable <= 0) + power_available = avail() + if(power_available <= 0) return - var/power_drain = power_avaliable * set_power_drain + var/power_drain = power_available * set_power_drain add_load(power_drain) var/credits_earned = credit_conversion_rate * power_drain @@ -67,12 +71,66 @@ if(. == SUCCESSFUL_UNFASTEN) if(anchored) connect_to_network() + power_available = avail() + else + disconnect_from_network() + power_available = 0 /obj/machinery/power/energy_harvester/screwdriver_act(mob/living/user, obj/item/I) if(..()) return TRUE - default_deconstruction_screwdriver(user, "state_open", "state_off", I) - return TRUE + if(!active) + default_deconstruction_screwdriver(user, "state_open", "state_off", I) + return TRUE + return FALSE + +/obj/machinery/power/energy_harvester/wrench_act(mob/living/user, obj/item/I) + if(panel_open) + default_unfasten_wrench(user, I) + return TRUE + + return FALSE + +/obj/machinery/power/energy_harvester/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "EnergyHarvester", name) + ui.open() + +/obj/machinery/power/energy_harvester/ui_data(mob/user) + var/list/data = list() + data["active"] = active + + data["power_available"] = power_available + data["set_power_drain"] = set_power_drain * 100 + data["power_drain"] = power_available * set_power_drain * active + data["credit_conversion_rate"] = credit_conversion_rate + data["maximum_drain"] = maximum_net_drain_percentage * 100 + + return data + +/obj/machinery/power/energy_harvester/ui_act(action, params) + if(..()) + return + + switch(action) + if("power") + if(panel_open) + return + if(!anchored) + return + if(!powernet) + return + active = !active + if("drain_percentage") + var/target = params["target"] + // var/adjust = text2num(params["adjust"]) + if(text2num(target) != null) + target = text2num(target) + . = TRUE + if(.) + set_power_drain = clamp(target, 1, maximum_net_drain_percentage * 100) + set_power_drain /= 100 /obj/item/circuitboard/machine/energy_harvester name = "Energy Harvester (Machine Board)" diff --git a/tgstation.dme b/tgstation.dme index 52c6e69151..ae19121abb 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4062,6 +4062,7 @@ #include "GainStation13\code\modules\mob\living\species.dm" #include "GainStation13\code\modules\mob\living\vore\eating\trasheat_lists.dm" #include "GainStation13\code\modules\mod\modules\modules_fat.dm" +#include "GainStation13\code\modules\power\energy_harvester.dm" #include "GainStation13\code\modules\reagents\chemistry\reagents\consumable_reagents.dm" #include "GainStation13\code\modules\reagents\chemistry\reagents\dwarverndrinks.dm" #include "GainStation13\code\modules\reagents\chemistry\reagents\fatty_drinks.dm" @@ -4097,7 +4098,6 @@ #include "GainStation13\code\obj\items\reskinable_floor_tile.dm" #include "GainStation13\code\obj\items\sensors\weight_infared.dm" #include "GainStation13\code\obj\structure\airlock.dm" -#include "GainStation13\code\modules\power\energy_harvester.dm" #include "GainStation13\code\obj\structure\calorite_doors.dm" #include "GainStation13\code\obj\structure\candylight.dm" #include "GainStation13\code\obj\structure\fountain.dm" diff --git a/tgui/packages/tgui/interfaces/EnergyHarvester.js b/tgui/packages/tgui/interfaces/EnergyHarvester.js new file mode 100644 index 0000000000..4c990e48e7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/EnergyHarvester.js @@ -0,0 +1,57 @@ +import { round, toFixed } from 'common/math'; +import { formatPower } from '../format'; +import { useBackend } from '../backend'; +import { AnimatedNumber, Button, LabeledList, Slider, Section } from '../components'; +import { Window } from '../layouts'; + +const POWER_MUL = 1e3; + +export const EnergyHarvester = (props, context) => { + const { act, data } = useBackend(context); + return( + + +
+ + + {formatPower(data.power_available)} + + + {formatPower(data.power_drain)} + + + round(value, 0)} + /> + + +
+
act('power')} + />) + } + > + + + act('drain_percentage', { + target: value, + })} + /> + + +
+
+
+ ); +}; \ No newline at end of file From 6b2b5b8f78329d986178a037f760d5717f20da9d Mon Sep 17 00:00:00 2001 From: AbsFree Date: Fri, 21 Feb 2025 18:15:42 +0100 Subject: [PATCH 05/13] fixed UI being slow --- GainStation13/code/modules/power/energy_harvester.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index e8ae7bae70..13140aac73 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -19,7 +19,7 @@ var/power_available = 0 var/active = FALSE -/obj/machinery/power/energy_harvester/Initialize(mapload) +/obj/machinery/power/energy_harvester/Initialize(mapload) // TODO: make sure we can only place 4 of those . = ..() RefreshParts() if(anchored) @@ -122,6 +122,7 @@ if(!powernet) return active = !active + . = TRUE if("drain_percentage") var/target = params["target"] // var/adjust = text2num(params["adjust"]) From caee10c015917531ce45918a4b0c10fa79e38caf Mon Sep 17 00:00:00 2001 From: AbsFree Date: Sat, 22 Feb 2025 11:21:52 +0100 Subject: [PATCH 06/13] can be ordered in cargo and limited to 4 per grid --- GainStation13/code/modules/cargo/packs.dm | 7 ++++ .../code/modules/power/energy_harvester.dm | 32 +++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/GainStation13/code/modules/cargo/packs.dm b/GainStation13/code/modules/cargo/packs.dm index b9e3bcd9fc..3836cb713a 100644 --- a/GainStation13/code/modules/cargo/packs.dm +++ b/GainStation13/code/modules/cargo/packs.dm @@ -4,3 +4,10 @@ cost = 10000 contains = list(/obj/item/vending_refill/mealdor) crate_name = "meal vendor supply crate" + +/datum/supply_pack/engineering/energy_harvester_board + name = "Energy Harvester Board" + desc = "Engineering made some crazy power device that seems to be creating massive amounts of energy out of thin air? With the parts found in this crate, you'll be able to make some sweet cash out of the engineers hard labor. Half of the credits made by this machine go to the engineering budget." + cost = 5000 + contains = list(/obj/item/circuitboard/machine/energy_harvester) + crate_name = "Energy Harvester Board supply crate" diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index 13140aac73..54af763bb1 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -19,11 +19,16 @@ var/power_available = 0 var/active = FALSE -/obj/machinery/power/energy_harvester/Initialize(mapload) // TODO: make sure we can only place 4 of those +/obj/machinery/power/energy_harvester/Initialize(mapload) . = ..() RefreshParts() if(anchored) connect_to_network() + if(too_many_harvesters_in_network()) + src.visible_message("[src] buzzes. Seems like there are too many energy harvesters connected to this powernet.") + playsound(src, 'sound/machines/buzz-two.ogg', 50) + disconnect_from_network() + return power_available = avail() /obj/machinery/power/energy_harvester/RefreshParts() @@ -46,10 +51,14 @@ return if(!powernet) + src.visible_message("[src] buzzes. Seems like it's not connected to a powernet.") + playsound(src, 'sound/machines/buzz-two.ogg', 50) return power_available = avail() if(power_available <= 0) + src.visible_message("[src] buzzes. Seems like there is no energy in the connected powernet.") + playsound(src, 'sound/machines/buzz-two.ogg', 50) return var/power_drain = power_available * set_power_drain @@ -71,6 +80,11 @@ if(. == SUCCESSFUL_UNFASTEN) if(anchored) connect_to_network() + if(too_many_harvesters_in_network()) + src.visible_message("[src] buzzes. Seems like there are too many energy harvesters connected to this powernet.") + playsound(src, 'sound/machines/buzz-two.ogg', 50) + disconnect_from_network() + return power_available = avail() else disconnect_from_network() @@ -79,9 +93,11 @@ /obj/machinery/power/energy_harvester/screwdriver_act(mob/living/user, obj/item/I) if(..()) return TRUE + if(!active) default_deconstruction_screwdriver(user, "state_open", "state_off", I) return TRUE + return FALSE /obj/machinery/power/energy_harvester/wrench_act(mob/living/user, obj/item/I) @@ -91,6 +107,16 @@ return FALSE +/obj/machinery/power/energy_harvester/proc/too_many_harvesters_in_network() + var/counter = 0 + for(var/machine in powernet.nodes) + if(istype(machine, /obj/machinery/power/energy_harvester)) + counter += 1 + if(counter > 4) + return TRUE + + return FALSE + /obj/machinery/power/energy_harvester/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) @@ -119,7 +145,9 @@ return if(!anchored) return - if(!powernet) + if(!active && !powernet) + src.visible_message("[src] buzzes. Seems like it's not connected to a powernet.") + playsound(src, 'sound/machines/buzz-two.ogg', 50) return active = !active . = TRUE From 3d433aa7e57ef9114b8f8ebc1b26d74cdc7b3e32 Mon Sep 17 00:00:00 2001 From: AbsFree Date: Sat, 22 Feb 2025 19:24:54 +0100 Subject: [PATCH 07/13] added icons (by AlManiak), lighting and sound, as well as made it dense --- .../code/modules/power/energy_harvester.dm | 23 ++++++++++++++---- GainStation13/icons/obj/energy_harvester.dmi | Bin 0 -> 1775 bytes 2 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 GainStation13/icons/obj/energy_harvester.dmi diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index 54af763bb1..74ccf93a82 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -5,12 +5,12 @@ /obj/machinery/power/energy_harvester desc = "A Device which upon connection to a node, will harvest the energy and send it to engineerless stations in return for credits, derived from a syndicate powersink model. The instructions say to never use more than 4 harvesters at a time." name = "Energy Harvesting Module" - density = FALSE + density = TRUE use_power = NO_POWER_USE - // anchored = FALSE - icon = 'GainStation13/icons/obj/adipoelectric_transformer.dmi' - icon_state = "state_off" + icon = 'GainStation13/icons/obj/energy_harvester.dmi' // by AlManiak + icon_state = "off" circuit = /obj/item/circuitboard/machine/energy_harvester + var/datum/looping_sound/generator/soundloop var/maximum_net_drain_percentage = 0.05 @@ -21,6 +21,7 @@ /obj/machinery/power/energy_harvester/Initialize(mapload) . = ..() + soundloop = new(src, active) RefreshParts() if(anchored) connect_to_network() @@ -31,6 +32,10 @@ return power_available = avail() +/obj/machinery/power/energy_harvester/Destroy() + QDEL_NULL(soundloop) + return ..() + /obj/machinery/power/energy_harvester/RefreshParts() var/capacitor_rating = 0 var/manipulator_rating = 0 @@ -95,7 +100,7 @@ return TRUE if(!active) - default_deconstruction_screwdriver(user, "state_open", "state_off", I) + default_deconstruction_screwdriver(user, "open", "off", I) return TRUE return FALSE @@ -150,6 +155,14 @@ playsound(src, 'sound/machines/buzz-two.ogg', 50) return active = !active + if(active) + icon_state = "on" + set_light(1, 1, "#9999FF") + soundloop.start() + else + icon_state = "off" + set_light(0) + soundloop.stop() . = TRUE if("drain_percentage") var/target = params["target"] diff --git a/GainStation13/icons/obj/energy_harvester.dmi b/GainStation13/icons/obj/energy_harvester.dmi new file mode 100644 index 0000000000000000000000000000000000000000..07ca91a822ba918cd992ead064d27fa573a6016d GIT binary patch literal 1775 zcmVK@nE;o;$P(b0X}-2D9fis|Wt;^K_!>zSFE zhK7d0!NG1d4Kp({YRJf;p`nyU5>ZW4X=-XPFE8Y59M_6fdv$e`l$2gxUfG>=->;70 z&AvN3JAr|LadB}~R91w3hmeYttf#KZ$IOf?D{ew0ytOAXSr@D_GOT1W`|>twzA*m) z0842v6a;oPOCZ)68UJYj*3#LrcpG2K=Xc%fUd-uf&);9o<&L0KmY&4@$JV00001bW%=J06^y0W&i*He0o$^bVOxy zV{&P5bZKvH004NLQ&wG2rI&tr+nv+-w z64rr2E@cH*KNqlj0l=>@S%@gs)c^nl^+`lQRA_@;2X{XfQZK_D)YFyh&>KX#r3E4(`ApaVF+0|2C~(KHMo zF%@s!`^=R3w>$Sgmqbu;%iOVAU&s=48eiU*B~b8guhr`9$PzRf@)am}&+PTAT}guK z=fJkf#{+xsq0ApVY8sEKaGU%f-s?;K4bU{e{`TCCHU>Db9Erc{x=q8~Z&c$p=H{;Z zRfF4=u?{{$S9}C=ZX@39gMm1{0ftRuD6UZnZdzW+H z4!|W4*FeP|qdQ@TavNQ@b~Zj*Ar2s{ftq{3v|?`Cb~-+-fVc)_xaUPRDl}99QUXy8 z%J5zvIF5kh#ghPn8kFK)3jnY9ULzGi-)5)=`$cOk!3W-GG(t5h;N$sBDS1i|UE`SHow+1WSWqRq+i{Mjkm zIje_*5ZSpuM@A>$k$;Z&*2Bp`T%7xh%gZ^j%gcp-evvMsCTA0tSI?hcEyV$@>suSFhi^eH{w<@|Sl7 z{s51IF!cQ;TH>!)%cbv!A=#Pbi?=vKDCEWdHF*7<-B$8kClwe^gTqsdn>vA$NtxUN)p&&eGdVIP{N6k{@}eN!Oe=-_b~c^kd4#& ze;s|S*KCiZKiF)@$Ahlb=MFj^!DxKI^K~*}IZ~WAHaDg3A)lgvCkf(lQGb9Bj!n(z zdq|HiiJ#%??5M~;N9+?oeP1~t7#>=Ej0(*Q>_1Ux(;&w!xiN)?HyMDsaHP24E_hMi`P-@H%hwhx>;O#3Hc;{jH$rsc32Y&P`fSPOXS0P!i!@@$DC{V&w_ ztUnmw8l+Al{flzG#@P%+-{VGItpA;xhfc)#OAN;TH+|keeJv4vZ(B0`?-2b@c`gC= zce-MKvci#E|MUF;ccnn)?@9UxS^=59&+7m9UWKtgxa0Vm`OAtT*m%L}viLZJ;pc_AWKOlYnuNR-{d-?N!T~oau&^6Wj0WDMY z2fESa`d&M}O5f{R8GWy7N_}5b0-^rb4X@Dm+VK_d5426G?{)1zrSG@4e*h0F$2kD3 RZM^^h002ovPDHLkV1gveqnQ8z literal 0 HcmV?d00001 From 886a7c99bd92d6f1d4fa9c6d452a73d044a4367c Mon Sep 17 00:00:00 2001 From: AbsFree Date: Sat, 22 Feb 2025 20:01:13 +0100 Subject: [PATCH 08/13] moved the file to dedicated folder --- .../tgui/interfaces/{ => GainStation13}/EnergyHarvester.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tgui/packages/tgui/interfaces/{ => GainStation13}/EnergyHarvester.js (100%) diff --git a/tgui/packages/tgui/interfaces/EnergyHarvester.js b/tgui/packages/tgui/interfaces/GainStation13/EnergyHarvester.js similarity index 100% rename from tgui/packages/tgui/interfaces/EnergyHarvester.js rename to tgui/packages/tgui/interfaces/GainStation13/EnergyHarvester.js From 9c487d90e7b1b4239a5f6644b17e4800addbd3fa Mon Sep 17 00:00:00 2001 From: AbsFree Date: Sun, 23 Feb 2025 16:35:13 +0100 Subject: [PATCH 09/13] minor tweaks, interface should work properly now --- .../code/modules/power/energy_harvester.dm | 39 ++++++++++--------- .../{GainStation13 => }/EnergyHarvester.js | 0 2 files changed, 21 insertions(+), 18 deletions(-) rename tgui/packages/tgui/interfaces/{GainStation13 => }/EnergyHarvester.js (100%) diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index 74ccf93a82..24d53f0ea3 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -11,7 +11,7 @@ icon_state = "off" circuit = /obj/item/circuitboard/machine/energy_harvester var/datum/looping_sound/generator/soundloop - + var/maximum_net_drain_percentage = 0.05 var/set_power_drain = 0.05 @@ -24,15 +24,16 @@ soundloop = new(src, active) RefreshParts() if(anchored) - connect_to_network() - if(too_many_harvesters_in_network()) - src.visible_message("[src] buzzes. Seems like there are too many energy harvesters connected to this powernet.") - playsound(src, 'sound/machines/buzz-two.ogg', 50) - disconnect_from_network() - return - power_available = avail() + if(connect_to_network()) + if(too_many_harvesters_in_network()) + src.visible_message("[src] buzzes. Seems like there are too many energy harvesters connected to this powernet.") + playsound(src, 'sound/machines/buzz-two.ogg', 50) + disconnect_from_network() + return + power_available = avail() /obj/machinery/power/energy_harvester/Destroy() + disconnect_from_network() QDEL_NULL(soundloop) return ..() @@ -58,12 +59,14 @@ if(!powernet) src.visible_message("[src] buzzes. Seems like it's not connected to a powernet.") playsound(src, 'sound/machines/buzz-two.ogg', 50) + active = FALSE return power_available = avail() if(power_available <= 0) src.visible_message("[src] buzzes. Seems like there is no energy in the connected powernet.") playsound(src, 'sound/machines/buzz-two.ogg', 50) + active = FALSE return var/power_drain = power_available * set_power_drain @@ -77,20 +80,20 @@ var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR) if(cargo_budget) cargo_budget.adjust_money(credits_earned / 2) - + /obj/machinery/power/energy_harvester/default_unfasten_wrench(mob/user, obj/item/I, time = 20) . = ..() if(. == SUCCESSFUL_UNFASTEN) if(anchored) - connect_to_network() - if(too_many_harvesters_in_network()) - src.visible_message("[src] buzzes. Seems like there are too many energy harvesters connected to this powernet.") - playsound(src, 'sound/machines/buzz-two.ogg', 50) - disconnect_from_network() - return - power_available = avail() + if(connect_to_network()) + if(too_many_harvesters_in_network()) + src.visible_message("[src] buzzes. Seems like there are too many energy harvesters connected to this powernet.") + playsound(src, 'sound/machines/buzz-two.ogg', 50) + disconnect_from_network() + return + power_available = avail() else disconnect_from_network() power_available = 0 @@ -109,7 +112,7 @@ if(panel_open) default_unfasten_wrench(user, I) return TRUE - + return FALSE /obj/machinery/power/energy_harvester/proc/too_many_harvesters_in_network() @@ -143,7 +146,7 @@ /obj/machinery/power/energy_harvester/ui_act(action, params) if(..()) return - + switch(action) if("power") if(panel_open) diff --git a/tgui/packages/tgui/interfaces/GainStation13/EnergyHarvester.js b/tgui/packages/tgui/interfaces/EnergyHarvester.js similarity index 100% rename from tgui/packages/tgui/interfaces/GainStation13/EnergyHarvester.js rename to tgui/packages/tgui/interfaces/EnergyHarvester.js From 5a10708c31f876378c433b7cdc5fa16626934019 Mon Sep 17 00:00:00 2001 From: AbsFree Date: Sun, 23 Feb 2025 17:11:10 +0100 Subject: [PATCH 10/13] makes sure it actually turns itself off --- GainStation13/code/modules/power/energy_harvester.dm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index 24d53f0ea3..e451c4010d 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -60,6 +60,9 @@ src.visible_message("[src] buzzes. Seems like it's not connected to a powernet.") playsound(src, 'sound/machines/buzz-two.ogg', 50) active = FALSE + icon_state = "off" + set_light(0) + soundloop.stop() return power_available = avail() @@ -67,6 +70,9 @@ src.visible_message("[src] buzzes. Seems like there is no energy in the connected powernet.") playsound(src, 'sound/machines/buzz-two.ogg', 50) active = FALSE + icon_state = "off" + set_light(0) + soundloop.stop() return var/power_drain = power_available * set_power_drain @@ -157,19 +163,21 @@ src.visible_message("[src] buzzes. Seems like it's not connected to a powernet.") playsound(src, 'sound/machines/buzz-two.ogg', 50) return - active = !active + if(active) + active = FALSE icon_state = "on" set_light(1, 1, "#9999FF") soundloop.start() else + active = TRUE icon_state = "off" set_light(0) soundloop.stop() . = TRUE + if("drain_percentage") var/target = params["target"] - // var/adjust = text2num(params["adjust"]) if(text2num(target) != null) target = text2num(target) . = TRUE From e066495631372afe0014757bfe3c33ab7ba4b880 Mon Sep 17 00:00:00 2001 From: AbsFree Date: Sun, 23 Feb 2025 17:57:57 +0100 Subject: [PATCH 11/13] now it works --- .../code/modules/power/energy_harvester.dm | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index e451c4010d..63c90b962c 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -121,6 +121,13 @@ return FALSE +/obj/machinery/power/energy_harvester/crowbar_act(mob/living/user, obj/item/I) + if(panel_open) + default_deconstruction_crowbar(I) + return TRUE + + return FALSE + /obj/machinery/power/energy_harvester/proc/too_many_harvesters_in_network() var/counter = 0 for(var/machine in powernet.nodes) @@ -166,14 +173,14 @@ if(active) active = FALSE - icon_state = "on" - set_light(1, 1, "#9999FF") - soundloop.start() - else - active = TRUE icon_state = "off" set_light(0) soundloop.stop() + else + active = TRUE + icon_state = "on" + set_light(1, 1, "#9999FF") + soundloop.start() . = TRUE if("drain_percentage") From 75c84daaebd4ce124fafbdd9c763874d04433d79 Mon Sep 17 00:00:00 2001 From: AbsFree Date: Sun, 23 Feb 2025 18:20:59 +0100 Subject: [PATCH 12/13] last of the minor tweaks. It's done --- GainStation13/code/modules/power/energy_harvester.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index 63c90b962c..d6881328d6 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -177,6 +177,9 @@ set_light(0) soundloop.stop() else + power_available = avail() + if(power_available <= 0) + return active = TRUE icon_state = "on" set_light(1, 1, "#9999FF") @@ -195,6 +198,7 @@ /obj/item/circuitboard/machine/energy_harvester name = "Energy Harvester (Machine Board)" build_path = /obj/machinery/power/energy_harvester + needs_anchored = FALSE req_components = list( /obj/item/stock_parts/capacitor = 4, /obj/item/stock_parts/manipulator = 2) From a27000b34ed48c5a49f41d24bdf988bf4f293127 Mon Sep 17 00:00:00 2001 From: AbsFree Date: Sun, 23 Feb 2025 19:34:17 +0100 Subject: [PATCH 13/13] don't you love how everytime you think it's done something else pops up? wanna bet I'll find another bug after this commit... --- .../code/modules/power/energy_harvester.dm | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/GainStation13/code/modules/power/energy_harvester.dm b/GainStation13/code/modules/power/energy_harvester.dm index d6881328d6..4f1ebfbafe 100644 --- a/GainStation13/code/modules/power/energy_harvester.dm +++ b/GainStation13/code/modules/power/energy_harvester.dm @@ -25,11 +25,6 @@ RefreshParts() if(anchored) if(connect_to_network()) - if(too_many_harvesters_in_network()) - src.visible_message("[src] buzzes. Seems like there are too many energy harvesters connected to this powernet.") - playsound(src, 'sound/machines/buzz-two.ogg', 50) - disconnect_from_network() - return power_available = avail() /obj/machinery/power/energy_harvester/Destroy() @@ -94,11 +89,6 @@ if(. == SUCCESSFUL_UNFASTEN) if(anchored) if(connect_to_network()) - if(too_many_harvesters_in_network()) - src.visible_message("[src] buzzes. Seems like there are too many energy harvesters connected to this powernet.") - playsound(src, 'sound/machines/buzz-two.ogg', 50) - disconnect_from_network() - return power_available = avail() else disconnect_from_network() @@ -128,6 +118,20 @@ return FALSE +/obj/machinery/power/energy_harvester/connect_to_network() + . = ..() + + if(!.) + return FALSE + + if(too_many_harvesters_in_network()) + src.visible_message("[src] buzzes. Seems like there are too many energy harvesters connected to this powernet.") + playsound(src, 'sound/machines/buzz-two.ogg', 50) + disconnect_from_network() + return FALSE + + return TRUE + /obj/machinery/power/energy_harvester/proc/too_many_harvesters_in_network() var/counter = 0 for(var/machine in powernet.nodes)