mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-08 13:59:55 +01:00
532316f35f
We already get the full info field, so fields will be always be fully totalled. Let's not assume it's zero.
92 lines
3.0 KiB
Plaintext
92 lines
3.0 KiB
Plaintext
/obj/item/weapon/computer_hardware/nano_printer
|
|
name = "nano printer"
|
|
desc = "Small integrated printer with paper recycling module."
|
|
power_usage = 50
|
|
origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
|
|
critical = 0
|
|
icon_state = "printer"
|
|
hardware_size = 1
|
|
var/stored_paper = 5
|
|
var/max_paper = 10
|
|
|
|
/obj/item/weapon/computer_hardware/nano_printer/diagnostics(var/mob/user)
|
|
..()
|
|
to_chat(user, "Paper buffer level: [stored_paper]/[max_paper]")
|
|
|
|
/obj/item/weapon/computer_hardware/nano_printer/proc/print_text(var/text_to_print, var/paper_title = null)
|
|
if(!stored_paper)
|
|
return 0
|
|
if(!enabled)
|
|
return 0
|
|
if(!check_functionality())
|
|
return 0
|
|
|
|
var/obj/item/weapon/paper/P = new/obj/item/weapon/paper(get_turf(holder2))
|
|
|
|
// Damaged printer causes the resulting paper to be somewhat harder to read.
|
|
if(damage > damage_malfunction)
|
|
P.info = stars(text_to_print, 100-malfunction_probability)
|
|
else
|
|
P.info = text_to_print
|
|
if(paper_title)
|
|
P.name = paper_title
|
|
P.update_icon()
|
|
P.fields = count_fields(P.info)
|
|
P.updateinfolinks()
|
|
|
|
stored_paper--
|
|
return 1
|
|
|
|
/obj/item/weapon/computer_hardware/nano_printer/proc/count_fields(var/info)
|
|
//Count the fields. This is taken directly from paper.dm, /obj/item/weapon/paper/proc/parsepencode(). -Hawk_v3
|
|
var/fields = 0
|
|
var/t = info
|
|
var/laststart = 1
|
|
while(1)
|
|
var/i = findtext(t, "<span class=\"paper_field\">", laststart) //</span>
|
|
if(i==0)
|
|
break
|
|
laststart = i+1
|
|
fields++
|
|
return fields
|
|
|
|
/obj/item/weapon/computer_hardware/nano_printer/attackby(obj/item/W as obj, mob/user as mob)
|
|
if(istype(W, /obj/item/weapon/paper))
|
|
if(stored_paper >= max_paper)
|
|
to_chat(user, "You try to add \the [W] into \the [src], but its paper bin is full.")
|
|
return
|
|
|
|
to_chat(user, "You insert \the [W] into [src].")
|
|
qdel(W)
|
|
stored_paper++
|
|
else if(istype(W, /obj/item/weapon/paper_bundle))
|
|
var/obj/item/weapon/paper_bundle/B = W
|
|
var/num_of_pages_added = 0
|
|
if(stored_paper >= max_paper)
|
|
to_chat(user, "You try to add \the [W] into \the [src], but its paper bin is full.")
|
|
return
|
|
for(var/obj/item/weapon/bundleitem in B) //loop through items in bundle
|
|
if(istype(bundleitem, /obj/item/weapon/paper)) //if item is paper (and not photo), add into the bin
|
|
B.pages.Remove(bundleitem)
|
|
qdel(bundleitem)
|
|
num_of_pages_added++
|
|
stored_paper++
|
|
if(stored_paper >= max_paper) //check if the printer is full yet
|
|
to_chat(user, "The printer has been filled to full capacity.")
|
|
break
|
|
if(B.pages.len == 0) //if all its papers have been put into the printer, delete bundle
|
|
qdel(W)
|
|
else if(B.pages.len == 1) //if only one item left, extract item and delete the one-item bundle
|
|
user.drop_from_inventory(B)
|
|
user.put_in_hands(B[1])
|
|
qdel(B)
|
|
else //if at least two items remain, just update the bundle icon
|
|
B.update_icon()
|
|
to_chat(user, "You add [num_of_pages_added] papers from \the [W] into \the [src].")
|
|
return
|
|
|
|
/obj/item/weapon/computer_hardware/nano_printer/Destroy()
|
|
if(holder2 && (holder2.nano_printer == src))
|
|
holder2.nano_printer = null
|
|
holder2 = null
|
|
return ..() |