mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
* wall and floor and overlay icons * HOLY SHIT PLANEMASTERS ARE AMAZING <3 LUMMOX * nevermind shit is fucked i hate byond * apc hackin tweaks start now * attack_ai is overridden almost everywhere for zero reason * more attack_ai shit * more shit * FORCEDISABLE pt. 1 * FORCEDISABLE pt 2 * more forcedisable 3 * 3.1 * end of forcedisable * remove all hackview shit, cleanup * better apc hacking, lots of fixes, and UI! * more machine ability, lots of cleanup, radial lock updating, modules and active modules * movable ui elements * ADVANCED hologrmas * more SHIT * SHUNTSHUNTSHUNT * fig congflgighgsa * more testing * fuck * commit 2 * holo fixes * fake APC images! * lots of stuff * fixes and cleanup and vomit * More abilities. AI Control fixes and cleanup * fixes * fix * clear another warning * remove comment fix numbers * raise price * raise price * fix * 1 autoborger limit * remove undocumented change * handle at bot level * order of operations * dont call ert * decrease * fix unit test * icon check please work * remove unused icons, comment out chem dispenser drain * comment out firewall, add disable to turrets * remove unused wall icons * Sort mob list, humans appear at the top * fix sorting, fix hologram bug * hologram tweaks, stupid fucking alert APC name * qdel * raise ever so slightly * revert * Delete broken_hand_icons.txt * Update setup.dm * Create setup.dm * attack_self * fix filter icon, delete unused file, remove forcedisable from magtape deck * accidental change * mousedropfrom recharge station * oh rite * fixo * remove useless code * aaahhh * remove rig meal, made obsolete by emag * fffffshhhhhhwooooop * typo!
266 lines
7.1 KiB
Plaintext
266 lines
7.1 KiB
Plaintext
/**********************Mineral stacking unit console**************************/
|
|
|
|
/obj/machinery/computer/stacking_unit
|
|
name = "stacking machine console"
|
|
icon = 'icons/obj/computer.dmi'
|
|
icon_state = "stacking_machine_console"
|
|
light_color = LIGHT_COLOR_BLUE
|
|
circuit = "/obj/item/weapon/circuitboard/stacking_machine_console"
|
|
|
|
var/stacker_tag//The ID of the stacker this console should control
|
|
var/frequency = FREQ_DISPOSAL
|
|
var/datum/radio_frequency/radio_connection
|
|
|
|
var/list/stacker_data
|
|
|
|
/obj/machinery/computer/stacking_unit/New()
|
|
. = ..()
|
|
if(ticker)
|
|
initialize()
|
|
|
|
/obj/machinery/computer/stacking_unit/attack_hand(mob/user)
|
|
add_fingerprint(user)
|
|
interact(user)
|
|
|
|
/obj/machinery/computer/stacking_unit/interact(mob/user)
|
|
if(stat & (FORCEDISABLE | NOPOWER | BROKEN))
|
|
return
|
|
|
|
if(!stacker_data)
|
|
request_status()
|
|
if(!stacker_data) //Still no data.
|
|
to_chat(user, "<span class='warning'>Unable to find a stacking machine.</span>")
|
|
user.unset_machine(src)
|
|
return
|
|
|
|
user.set_machine(src)
|
|
|
|
var/dat = ""
|
|
|
|
for(var/typepath in stacker_data["stacks"])
|
|
var/list/stack = stacker_data["stacks"][typepath]
|
|
if(stack && stack["amount"])
|
|
dat += "[stack["name"]]: [stack["amount"]] <A href='?src=\ref[src];release=[typepath]'>Release</A><br>"
|
|
|
|
dat += text("<br>Stacking: []", stacker_data["stack_amt"])
|
|
|
|
var/datum/browser/popup = new(user, "stacking_machine_console", name, 200, 200, src)
|
|
popup.set_content(dat)
|
|
popup.open()
|
|
|
|
/obj/machinery/computer/stacking_unit/Topic(href, href_list)
|
|
if(href_list["close"])
|
|
if(usr.machine == src)
|
|
usr.unset_machine(src)
|
|
return 1
|
|
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
|
|
usr.set_machine(src)
|
|
add_fingerprint(usr)
|
|
|
|
if(href_list["release"])
|
|
var/list/signal_data = list("release" = href_list["release"])
|
|
send_signal(signal_data)
|
|
|
|
updateUsrDialog()
|
|
return 1
|
|
|
|
/obj/machinery/computer/stacking_unit/proc/send_signal(var/list/data)
|
|
if(!radio_connection)
|
|
return
|
|
|
|
var/datum/signal/signal = new /datum/signal
|
|
signal.source = src
|
|
signal.transmission_method = 1 //radio signal
|
|
signal.data["tag"] = stacker_tag
|
|
signal.data += data
|
|
|
|
radio_connection.post_signal(src, signal)
|
|
|
|
/obj/machinery/computer/stacking_unit/initialize()
|
|
if(frequency)
|
|
set_frequency(frequency)
|
|
|
|
/obj/machinery/computer/stacking_unit/proc/set_frequency(var/new_frequency)
|
|
radio_controller.remove_object(src, frequency)
|
|
frequency = new_frequency
|
|
radio_connection = radio_controller.add_object(src, frequency)
|
|
|
|
/obj/machinery/computer/stacking_unit/receive_signal(datum/signal/signal)
|
|
if(stat & (FORCEDISABLE | NOPOWER|BROKEN))
|
|
return
|
|
|
|
if(!signal.data["tag"] || signal.data["tag"] != stacker_tag)
|
|
return
|
|
|
|
stacker_data = signal.data //Get dat data
|
|
updateUsrDialog()
|
|
|
|
/obj/machinery/computer/stacking_unit/multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
|
|
return {"
|
|
<ul>
|
|
<li><b>Frequency: </b><a href='?src=\ref[src];set_freq=-1'>[format_frequency(frequency)]</a></li>
|
|
<li>[format_tag("Stacker ID Tag","stacker_tag")]</li>
|
|
</ul>
|
|
"}
|
|
|
|
/obj/machinery/computer/stacking_unit/proc/request_status()
|
|
stacker_data = null
|
|
send_signal(list("sigtype" = "status"))
|
|
|
|
/**********************Mineral stacking unit**************************/
|
|
|
|
|
|
/obj/machinery/mineral/stacking_machine
|
|
name = "stacking machine"
|
|
desc = "Takes smaller piles of sheets to make bigger ones"
|
|
icon = 'icons/obj/machines/mining_machines.dmi'
|
|
icon_state = "stacker"
|
|
density = 1
|
|
anchored = 1
|
|
|
|
machine_flags = SCREWTOGGLE | CROWDESTROY | MULTITOOL_MENU | EJECTNOTDEL
|
|
|
|
//What were these even, they were unused.
|
|
// var/stk_types = list()
|
|
// var/stk_amt = list()
|
|
|
|
allowed_types = list(/obj/item/stack)
|
|
max_moved = 100
|
|
|
|
var/list/stacks = list()
|
|
|
|
var/obj/item/stack/stack
|
|
var/stack_amt = 50 //amount to stack before releassing.
|
|
|
|
var/datum/radio_frequency/radio_connection
|
|
|
|
/obj/machinery/mineral/stacking_machine/RefreshParts()
|
|
var/T = 0
|
|
for(var/obj/item/weapon/stock_parts/matter_bin/bin in component_parts)
|
|
T += bin.rating
|
|
max_moved = initial(max_moved) * (T / 3)
|
|
|
|
T = 0 //reusing T here because muh RAM.
|
|
for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
|
|
T += C.rating - 1
|
|
idle_power_usage = initial(idle_power_usage) - (T * (initial(idle_power_usage) / 4))//25% power usage reduction for an advanced capacitor, 50% for a super one.
|
|
|
|
/obj/machinery/mineral/stacking_machine/New()
|
|
. = ..()
|
|
|
|
component_parts = newlist(
|
|
/obj/item/weapon/circuitboard/stacking_unit,
|
|
/obj/item/weapon/stock_parts/matter_bin,
|
|
/obj/item/weapon/stock_parts/matter_bin,
|
|
/obj/item/weapon/stock_parts/matter_bin,
|
|
/obj/item/weapon/stock_parts/capacitor
|
|
)
|
|
|
|
RefreshParts()
|
|
|
|
/obj/machinery/mineral/stacking_machine/update_icon()
|
|
if(stat & (FORCEDISABLE | NOPOWER | BROKEN))
|
|
icon_state = "stacker_o"
|
|
else
|
|
icon_state = "stacker"
|
|
|
|
/obj/machinery/mineral/stacking_machine/power_change()
|
|
. = ..()
|
|
|
|
update_icon()
|
|
|
|
/obj/machinery/mineral/stacking_machine/process()
|
|
..()
|
|
for(var/typepath in stacks)
|
|
stack = stacks[typepath]
|
|
if(stack.amount >= stack_amt)
|
|
release_stack(typepath)
|
|
|
|
broadcast_status()
|
|
|
|
/obj/machinery/mineral/stacking_machine/process_inside(atom/movable/A)
|
|
if(istype(A, /obj/item/stack))
|
|
var/obj/item/stack/stackA = A
|
|
|
|
if(!("[stackA.type]" in stacks))
|
|
stack = new stackA.type(src)
|
|
stack.amount = stackA.amount
|
|
else
|
|
stack = stacks["[stackA.type]"]
|
|
stack.amount += stackA.amount
|
|
|
|
stacks["[stackA.type]"] = stack
|
|
qdel(stackA)
|
|
|
|
/obj/machinery/mineral/stacking_machine/proc/release_stack(var/typepath, var/forced = 0)
|
|
if(!(typepath in stacks)) //What, we don't even have this stack
|
|
return
|
|
|
|
var/turf/out_T = get_step(src, out_dir)
|
|
|
|
if(out_T.density && !forced)//forced is here so we can eject the stacks during decon
|
|
return
|
|
|
|
var/obj/item/stack/stack = stacks[typepath]
|
|
var/obj/item/stack/stacked = new stack.type
|
|
|
|
var/release_amount = min(stack.amount, stack_amt)
|
|
|
|
stacked.amount = release_amount
|
|
stacked.update_materials()
|
|
stacked.forceMove(out_T)
|
|
stack.amount -= release_amount
|
|
|
|
if(stack.amount == 0)
|
|
stacks.Remove(typepath)
|
|
qdel(stack)
|
|
|
|
/obj/machinery/mineral/stacking_machine/proc/send_signal(list/data)
|
|
if(!radio_connection)
|
|
return
|
|
|
|
var/datum/signal/signal = new /datum/signal
|
|
signal.source = src
|
|
signal.transmission_method = 1 //radio signal
|
|
signal.data["tag"] = id_tag
|
|
signal.data += data
|
|
|
|
radio_connection.post_signal(src, signal)
|
|
|
|
/obj/machinery/mineral/stacking_machine/proc/broadcast_status()
|
|
var/list/data = list()
|
|
var/list/stack_data[stacks.len]
|
|
|
|
for(var/stack_id in stacks)
|
|
var/obj/item/stack/stack = stacks[stack_id]
|
|
stack_data[stack_id] = list(
|
|
"amount" = stack.amount,
|
|
"name" = stack.name
|
|
)
|
|
|
|
data["stacks"] = stack_data
|
|
data["stack_amt"] = stack_amt
|
|
|
|
send_signal(data)
|
|
|
|
/obj/machinery/mineral/stacking_machine/proc/set_frequency(var/new_frequency)
|
|
radio_controller.remove_object(src, frequency)
|
|
frequency = new_frequency
|
|
radio_connection = radio_controller.add_object(src, frequency)
|
|
|
|
/obj/machinery/mineral/stacking_machine/receive_signal(var/datum/signal/signal)
|
|
if(stat & (FORCEDISABLE | NOPOWER|BROKEN))
|
|
return
|
|
|
|
if(!signal.data["tag"] || signal.data["tag"] != id_tag)
|
|
return
|
|
|
|
if(signal.data["release"])
|
|
release_stack(signal.data["release"])
|
|
broadcast_status()
|
|
return 1
|