From 15c65004ca5fae02c930e3f7504a0e6cc6048e15 Mon Sep 17 00:00:00 2001 From: arsserpentarium <32496644+arsserpentarium@users.noreply.github.com> Date: Sat, 18 Nov 2017 21:35:01 +0300 Subject: [PATCH 1/2] Fix for list pin in integrated circuits (#32811) * Update lists.dm * Update pins.dm * Update list_pin.dm * Update power.dm * Update input.dm * Update pins.dm * Update list_pin.dm * Update input.dm * Update lists.dm * Update power.dm * Update input.dm * Update power.dm --- .../integrated_electronics/core/pins.dm | 2 +- .../core/special_pins/list_pin.dm | 2 +- .../integrated_electronics/subtypes/input.dm | 16 ++--- .../integrated_electronics/subtypes/lists.dm | 8 ++- .../integrated_electronics/subtypes/power.dm | 58 +++++++++---------- 5 files changed, 43 insertions(+), 43 deletions(-) diff --git a/code/modules/integrated_electronics/core/pins.dm b/code/modules/integrated_electronics/core/pins.dm index a1ed833f5e..eedba903c2 100644 --- a/code/modules/integrated_electronics/core/pins.dm +++ b/code/modules/integrated_electronics/core/pins.dm @@ -115,7 +115,7 @@ list[]( holder.on_data_written() else if(islist(new_data)) var/list/new_list = new_data - data = new_list.Copy(1,min( IC_MAX_LIST_LENGTH+1, new_list.len )) + data = new_list.Copy(max(1,new_list.len - IC_MAX_LIST_LENGTH+1),0) holder.on_data_written() /datum/integrated_io/proc/push_data() diff --git a/code/modules/integrated_electronics/core/special_pins/list_pin.dm b/code/modules/integrated_electronics/core/special_pins/list_pin.dm index f4ad34f4d7..ddf3a48362 100644 --- a/code/modules/integrated_electronics/core/special_pins/list_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/list_pin.dm @@ -110,7 +110,7 @@ /datum/integrated_io/lists/write_data_to_pin(var/new_data) if(islist(new_data)) var/list/new_list = new_data - data = new_list.Copy(1,min( IC_MAX_LIST_LENGTH+1, new_list.len )) + data = new_list.Copy(max(1,new_list.len - IC_MAX_LIST_LENGTH+1),0) holder.on_data_written() /datum/integrated_io/lists/display_pin_type() diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index d8c77453be..2aa869d7f3 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -794,13 +794,13 @@ set_pin_data(IC_OUTPUT, 2, null) set_pin_data(IC_OUTPUT, 3, null) if(AM) - var/obj/item/stock_parts/cell/cell = get_cell(AM) - if(cell) + var/obj/item/stock_parts/cell/C = AM.get_cell() + if(C) var/turf/A = get_turf(src) - if(AM in view(A)) - push_data() - set_pin_data(IC_OUTPUT, 1, cell.charge) - set_pin_data(IC_OUTPUT, 2, cell.maxcharge) - set_pin_data(IC_OUTPUT, 3, cell.percent()) - push_data() + if(get_turf(AM) in view(A)) + set_pin_data(IC_OUTPUT, 1, C.charge) + set_pin_data(IC_OUTPUT, 2, C.maxcharge) + set_pin_data(IC_OUTPUT, 3, C.percent()) activate_pin(2) + push_data() + return diff --git a/code/modules/integrated_electronics/subtypes/lists.dm b/code/modules/integrated_electronics/subtypes/lists.dm index 00e536c3a9..0d622f58e2 100644 --- a/code/modules/integrated_electronics/subtypes/lists.dm +++ b/code/modules/integrated_electronics/subtypes/lists.dm @@ -138,12 +138,14 @@ var/list/input_list = get_pin_data(IC_INPUT, 1) var/index = get_pin_data(IC_INPUT, 2) var/item = get_pin_data(IC_INPUT, 3) - if(!islist(item)) //crh proof - input_list[index] = item - set_pin_data(IC_OUTPUT, 1, input_list) + if(!islist(item)) + var/list/red_list = input_list.Copy() //crash proof + red_list[index] = item + set_pin_data(IC_OUTPUT, 1, red_list) push_data() activate_pin(2) + obj/item/integrated_circuit/lists/len name = "len circuit" desc = "This circuit will return the length of the list." diff --git a/code/modules/integrated_electronics/subtypes/power.dm b/code/modules/integrated_electronics/subtypes/power.dm index db39e067ad..cd58ac8904 100644 --- a/code/modules/integrated_electronics/subtypes/power.dm +++ b/code/modules/integrated_electronics/subtypes/power.dm @@ -39,38 +39,35 @@ /obj/item/integrated_circuit/power/transmitter/do_work() var/atom/movable/AM = get_pin_data_as_type(IC_INPUT, 1, /atom/movable) - if(AM) - if(!assembly) - return FALSE // Pointless to do everything else if there's no battery to draw from. - - var/obj/item/stock_parts/cell/cell = AM.get_cell() - if(cell) - var/transfer_amount = amount_to_move - var/turf/A = get_turf(src) - var/turf/B = get_turf(AM) - if(A.Adjacent(B)) - if(AM.loc != assembly) - transfer_amount *= 0.8 // Losses due to distance. - - if(cell.charge == cell.maxcharge) - return FALSE - - if(transfer_amount && assembly.draw_power(amount_to_move)) // CELLRATE is already handled in draw_power() - cell.give(transfer_amount * GLOB.CELLRATE) - set_pin_data(IC_OUTPUT, 1, cell.charge) - set_pin_data(IC_OUTPUT, 2, cell.maxcharge) - set_pin_data(IC_OUTPUT, 3, cell.percent()) - activate_pin(2) - push_data() - return TRUE - else - set_pin_data(IC_OUTPUT, 1, null) - set_pin_data(IC_OUTPUT, 2, null) - set_pin_data(IC_OUTPUT, 3, null) + if(!AM) + return FALSE + if(!assembly) + return FALSE // Pointless to do everything else if there's no battery to draw from. + var/obj/item/stock_parts/cell/cell = AM.get_cell() + if(cell) + var/transfer_amount = amount_to_move + var/turf/A = get_turf(src) + var/turf/B = get_turf(AM) + if(A.Adjacent(B)) + if(AM.loc != assembly) + transfer_amount *= 0.8 // Losses due to distance. + set_pin_data(IC_OUTPUT, 1, cell.charge) + set_pin_data(IC_OUTPUT, 2, cell.maxcharge) + set_pin_data(IC_OUTPUT, 3, cell.percent()) activate_pin(2) push_data() - return FALSE - return FALSE + if(cell.charge == cell.maxcharge) + return FALSE + if(transfer_amount && assembly.draw_power(amount_to_move)) // CELLRATE is already handled in draw_power() + cell.give(transfer_amount * GLOB.CELLRATE) + return TRUE + else + set_pin_data(IC_OUTPUT, 1, null) + set_pin_data(IC_OUTPUT, 2, null) + set_pin_data(IC_OUTPUT, 3, null) + activate_pin(2) + push_data() + return FALSE /obj/item/integrated_circuit/power/transmitter/large/do_work() if(..()) // If the above code succeeds, do this below. @@ -79,3 +76,4 @@ s.set_up(12, 1, src) s.start() visible_message("\The [assembly] makes some sparks!") + return TRUE