diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 08e0c6cba7..ffa64ce64f 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1369,8 +1369,8 @@ var/data = "" var/obj/item/weapon/paper_bundle/B = fax - for (var/page = 1, page <= B.amount, page++) - var/obj/pageobj = B.contents[page] + for (var/page = 1, page <= B.pages.len, page++) + var/obj/pageobj = B.pages[page] data += "Page [page] - [pageobj.name]
" usr << browse(data, "window=[B.name]") @@ -1383,11 +1383,11 @@ if (!bundle) return - if (istype(bundle.contents[page], /obj/item/weapon/paper)) - var/obj/item/weapon/paper/P = bundle.contents[page] + if (istype(bundle.pages[page], /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = bundle.pages[page] P.show_content(src.owner, 1) - else if (istype(bundle.contents[page], /obj/item/weapon/photo)) - var/obj/item/weapon/photo/H = bundle.contents[page] + else if (istype(bundle.pages[page], /obj/item/weapon/photo)) + var/obj/item/weapon/photo/H = bundle.pages[page] H.show(src.owner) return diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 9598800312..2253e049a5 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -68,14 +68,14 @@ //The topmost paper. I don't think there's any way to organise contents in byond, so this is what we're stuck with. -Pete if(toppaper) var/obj/item/weapon/paper/P = toppaper - dat += "Write Remove - [P.name]

" + dat += "Write Remove Rename - [P.name]

" for(var/obj/item/weapon/paper/P in src) if(P==toppaper) continue - dat += "Remove - [P.name]
" + dat += "Remove Rename - [P.name]
" for(var/obj/item/weapon/photo/Ph in src) - dat += "Remove - [Ph.name]
" + dat += "Remove Rename - [Ph.name]
" user << browse(dat, "window=clipboard") onclose(user, "clipboard") @@ -129,6 +129,18 @@ toppaper = newtop else toppaper = null + + else if(href_list["rename"]) + var/obj/item/weapon/O = locate(href_list["rename"]) + + if(O && (O.loc == src)) + if(istype(O, /obj/item/weapon/paper)) + var/obj/item/weapon/paper/to_rename = O + to_rename.rename() + + else if(istype(O, /obj/item/weapon/photo)) + var/obj/item/weapon/photo/to_rename = O + to_rename.rename() else if(href_list["read"]) var/obj/item/weapon/paper/P = locate(href_list["read"]) diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 33d0bb31c6..7cd104870f 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -189,7 +189,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins else if (istype(copyitem, /obj/item/weapon/photo)) rcvdcopy = photocopy(copyitem) else if (istype(copyitem, /obj/item/weapon/paper_bundle)) - rcvdcopy = bundlecopy(copyitem) + rcvdcopy = bundlecopy(copyitem, 0) else visible_message("[src] beeps, \"Error transmitting message.\"") return diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index ddc211cc7c..c10b940c1e 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -44,11 +44,11 @@ var/dat = "[name]" for(var/obj/item/weapon/paper/P in src) - dat += "Remove - [P.name]
" + dat += "Remove Rename - [P.name]
" for(var/obj/item/weapon/photo/Ph in src) - dat += "Remove - [Ph.name]
" + dat += "Remove Rename - [Ph.name]
" for(var/obj/item/weapon/paper_bundle/Pb in src) - dat += "Remove - [Pb.name]
" + dat += "Remove Rename - [Pb.name]
" user << browse(dat, "window=folder") onclose(user, "folder") add_fingerprint(usr) @@ -85,7 +85,22 @@ if(P && (P.loc == src) && istype(P)) P.attack_self(usr) onclose(usr, "[P.name]") - + else if(href_list["rename"]) + var/obj/item/weapon/O = locate(href_list["rename"]) + + if(O && (O.loc == src)) + if(istype(O, /obj/item/weapon/paper)) + var/obj/item/weapon/paper/to_rename = O + to_rename.rename() + + else if(istype(O, /obj/item/weapon/photo)) + var/obj/item/weapon/photo/to_rename = O + to_rename.rename() + + else if(istype(O, /obj/item/weapon/paper_bundle)) + var/obj/item/weapon/paper_bundle/to_rename = O + to_rename.rename() + //Update everything attack_self(usr) update_icon() diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 31cb465923..2bf4516b7c 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -95,12 +95,15 @@ usr << "You cut yourself on the paper." return var/n_name = sanitizeSafe(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text, MAX_NAME_LEN) - if((loc == usr && usr.stat == 0)) - name = "[(n_name ? text("[n_name]") : initial(name))]" - if(name != "paper") - desc = "This is a paper titled '" + name + "'." - add_fingerprint(usr) - return + + // We check loc one level up, so we can rename in clipboards and such. See also: /obj/item/weapon/photo/rename() + if((loc == usr || loc.loc && loc.loc == usr) && usr.stat == 0 && n_name) + name = n_name + if(n_name != "paper") + desc = "This is a paper titled '" + name + "'." + + add_fingerprint(usr) + return /obj/item/weapon/paper/attack_self(mob/living/user as mob) user.examinate(src) @@ -447,7 +450,9 @@ user << "You clip the [P.name] to [(src.name == "paper") ? "the paper" : src.name]." src.loc = B P.loc = B - B.amount++ + + B.pages.Add(src) + B.pages.Add(P) B.update_icon() else if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 5d9fd9baba..28f535a2ff 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -11,50 +11,35 @@ layer = 4 pressure_resistance = 1 attack_verb = list("bapped") - var/amount = 0 //Amount of items clipped to the paper - var/page = 1 - var/screen = 0 + var/page = 1 // current page + var/list/pages = list() // Ordered list of pages as they are to be displayed. Can be different order than src.contents. /obj/item/weapon/paper_bundle/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() - var/obj/item/weapon/paper/P - if(istype(W, /obj/item/weapon/paper)) - P = W - if (istype(P, /obj/item/weapon/paper/carbon)) - var/obj/item/weapon/paper/carbon/C = P - if (!C.iscopy && !C.copied) - user << "Take off the carbon copy first." - add_fingerprint(user) - return - amount++ - if(screen == 2) - screen = 1 - user << "You add [(P.name == "paper") ? "the paper" : P.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." - user.drop_from_inventory(P) - P.loc = src - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - else if(istype(W, /obj/item/weapon/photo)) - amount++ - if(screen == 2) - screen = 1 - user << "You add [(W.name == "photo") ? "the photo" : W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." - user.drop_from_inventory(W) - W.loc = src + if (istype(W, /obj/item/weapon/paper/carbon)) + var/obj/item/weapon/paper/carbon/C = W + if (!C.iscopy && !C.copied) + user << "Take off the carbon copy first." + add_fingerprint(user) + return + // adding sheets + if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo)) + insert_sheet_at(user, pages.len+1, W) + + // burning else if(istype(W, /obj/item/weapon/flame)) burnpaper(W, user) + + // merging bundles else if(istype(W, /obj/item/weapon/paper_bundle)) user.drop_from_inventory(W) for(var/obj/O in W) O.loc = src O.add_fingerprint(usr) - src.amount++ - if(screen == 2) - screen = 1 + pages.Add(O) + user << "You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." qdel(W) else @@ -62,15 +47,27 @@ return 0 if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/toy/crayon)) usr << browse("", "window=[name]") //Closes the dialog - P = src[page] + var/obj/P = pages[page] P.attackby(W, user) - update_icon() attack_self(usr) //Update the browsed page. add_fingerprint(usr) return +/obj/item/weapon/paper_bundle/proc/insert_sheet_at(mob/user, var/index, obj/item/weapon/sheet) + if(istype(sheet, /obj/item/weapon/paper)) + user << "You add [(sheet.name == "paper") ? "the paper" : sheet.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." + else if(istype(sheet, /obj/item/weapon/photo)) + user << "You add [(sheet.name == "photo") ? "the photo" : sheet.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]." + + user.drop_from_inventory(sheet) + sheet.loc = src + + pages.Insert(index, sheet) + + if(index <= page) + page++ /obj/item/weapon/paper_bundle/proc/burnpaper(obj/item/weapon/flame/P, mob/user) var/class = "" @@ -105,28 +102,32 @@ /obj/item/weapon/paper_bundle/proc/show_content(mob/user as mob) var/dat - var/obj/item/weapon/W = src[page] - switch(screen) - if(0) - dat+= "
" - dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" - dat+= "
Next Page


" - if(1) - dat+= "
Previous Page
" - dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" - dat+= "
Next Page


" - if(2) - dat+= "
Previous Page
" - dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]


" - dat+= "
" - if(istype(src[page], /obj/item/weapon/paper)) + var/obj/item/weapon/W = pages[page] + + // first + if(page == 1) + dat+= "
Front
" + dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" + dat+= "
Next Page


" + // last + else if(page == pages.len) + dat+= "
Previous Page
" + dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" + dat+= "
Back


" + // middle pages + else + dat+= "
Previous Page
" + dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" + dat+= "
Next Page


" + + if(istype(pages[page], /obj/item/weapon/paper)) var/obj/item/weapon/paper/P = W if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) dat+= "[P.name][stars(P.info)][P.stamps]" else dat+= "[P.name][P.info][P.stamps]" user << browse(dat, "window=[name]") - else if(istype(src[page], /obj/item/weapon/photo)) + else if(istype(pages[page], /obj/item/weapon/photo)) var/obj/item/weapon/photo/P = W user << browse_rsc(P.img, "tmp_photo.png") user << browse(dat + "[P.name]" \ @@ -145,55 +146,51 @@ ..() if((src in usr.contents) || (istype(src.loc, /obj/item/weapon/folder) && (src.loc in usr.contents))) usr.set_machine(src) + var/obj/item/weapon/in_hand = usr.get_active_hand() if(href_list["next_page"]) - if(page == amount) - screen = 2 - else if(page == 1) - screen = 1 - else if(page == amount+1) - return - page++ - playsound(src.loc, "pageturn", 50, 1) + if(in_hand && (istype(in_hand, /obj/item/weapon/paper) || istype(in_hand, /obj/item/weapon/photo))) + insert_sheet_at(usr, page+1, in_hand) + else if(page != pages.len) + page++ + playsound(src.loc, "pageturn", 50, 1) if(href_list["prev_page"]) - if(page == 1) - return - else if(page == 2) - screen = 0 - else if(page == amount+1) - screen = 1 - page-- - playsound(src.loc, "pageturn", 50, 1) + if(in_hand && (istype(in_hand, /obj/item/weapon/paper) || istype(in_hand, /obj/item/weapon/photo))) + insert_sheet_at(usr, page, in_hand) + else if(page > 1) + page-- + playsound(src.loc, "pageturn", 50, 1) if(href_list["remove"]) - var/obj/item/weapon/W = src[page] + var/obj/item/weapon/W = pages[page] usr.put_in_hands(W) + pages.Remove(pages[page]) + usr << "You remove the [W.name] from the bundle." - if(amount == 1) + + if(pages.len <= 1) var/obj/item/weapon/paper/P = src[1] usr.drop_from_inventory(src) usr.put_in_hands(P) qdel(src) - else if(page == amount) - screen = 2 - else if(page == amount+1) - page-- - - amount-- + + return + + if(page > pages.len) + page = pages.len + update_icon() else usr << "You need to hold it in hands!" if (istype(src.loc, /mob) ||istype(src.loc.loc, /mob)) - src.attack_self(src.loc) + src.attack_self(usr) updateUsrDialog() - - /obj/item/weapon/paper_bundle/verb/rename() set name = "Rename bundle" set category = "Object" set src in usr var/n_name = sanitizeSafe(input(usr, "What would you like to label the bundle?", "Bundle Labelling", null) as text, MAX_NAME_LEN) - if((loc == usr && usr.stat == 0)) + if((loc == usr || loc.loc && loc.loc == usr) && usr.stat == 0) name = "[(n_name ? text("[n_name]") : "paper")]" add_fingerprint(usr) return @@ -215,7 +212,7 @@ /obj/item/weapon/paper_bundle/update_icon() - var/obj/item/weapon/paper/P = src[1] + var/obj/item/weapon/paper/P = pages[1] icon_state = P.icon_state overlays = P.overlays underlays = 0 diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 0aea8aa0f4..2ae10e1c35 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -56,7 +56,7 @@ sleep(15) else if (istype(copyitem, /obj/item/weapon/paper_bundle)) var/obj/item/weapon/paper_bundle/B = bundlecopy(copyitem) - sleep(15*B.amount) + sleep(15*B.pages.len) else usr << "\The [copyitem] can't be copied by \the [src]." break @@ -216,7 +216,7 @@ //If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner /obj/machinery/photocopier/proc/bundlecopy(var/obj/item/weapon/paper_bundle/bundle, var/need_toner=1) var/obj/item/weapon/paper_bundle/p = new /obj/item/weapon/paper_bundle (src) - for(var/obj/item/weapon/W in bundle) + for(var/obj/item/weapon/W in bundle.pages) if(toner <= 0 && need_toner) toner = 0 visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") @@ -227,8 +227,8 @@ else if(istype(W, /obj/item/weapon/photo)) W = photocopy(W) W.loc = p - p.amount++ - //p.amount-- + p.pages += W + p.loc = src.loc p.update_icon() p.icon_state = "paper_words" diff --git a/html/changelogs/Daranz-paper_functionality.yml b/html/changelogs/Daranz-paper_functionality.yml new file mode 100644 index 0000000000..5bdb81041e --- /dev/null +++ b/html/changelogs/Daranz-paper_functionality.yml @@ -0,0 +1,5 @@ +author: Daranz +delete-after: True + +changes: + - rscadd: "Paper bundles can now have papers inserted at arbitrary points. This can be done by clicking the previous/next page links with a sheet of paper in hand." \ No newline at end of file