diff --git a/_maps/map_files/Event/city.dmm b/_maps/map_files/Event/city.dmm index ea2d47eb2bc5..800ec5e600e0 100644 --- a/_maps/map_files/Event/city.dmm +++ b/_maps/map_files/Event/city.dmm @@ -459,6 +459,11 @@ "fM" = ( /obj/machinery/light, /obj/structure/table/wood, +/obj/item/folder, +/obj/item/folder, +/obj/item/folder, +/obj/item/folder, +/obj/item/folder, /turf/open/floor/facility/white, /area/city/fixers) "fP" = ( @@ -1019,12 +1024,28 @@ /turf/open/floor/plating/beach/sand, /area/city) "mV" = ( -/obj/item/folder, -/obj/item/folder, -/obj/item/folder, -/obj/item/folder, -/obj/item/folder, /obj/structure/table/wood, +/obj/item/toner/large{ + pixel_x = 2; + pixel_y = -8 + }, +/obj/item/toner/large{ + pixel_y = -4; + pixel_x = 1 + }, +/obj/item/toner/large, +/obj/item/toner/large{ + pixel_y = 4; + pixel_x = -1 + }, +/obj/item/toner/large{ + pixel_y = 8; + pixel_x = -2 + }, +/obj/item/toner/large{ + pixel_y = 12; + pixel_x = -3 + }, /turf/open/floor/facility/white, /area/city/fixers) "mW" = ( diff --git a/_maps/map_files/Event/city_fixer.dmm b/_maps/map_files/Event/city_fixer.dmm index 0957070b1173..f2d471ab758b 100644 --- a/_maps/map_files/Event/city_fixer.dmm +++ b/_maps/map_files/Event/city_fixer.dmm @@ -651,6 +651,17 @@ "jP" = ( /obj/structure/table/wood, /obj/item/modular_computer/laptop/preset/civilian, +/obj/item/toner/large{ + pixel_y = 4; + pixel_x = 4 + }, +/obj/item/toner/large{ + pixel_y = 8 + }, +/obj/item/toner/large{ + pixel_y = 12; + pixel_x = -4 + }, /turf/open/floor/facility/white, /area/city/fixers) "ka" = ( diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 42c3a6eb69c7..694fcbc4a488 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -43,6 +43,8 @@ var/color_mode = PHOTO_COLOR /// Indicates whether the printer is currently busy copying or not. var/busy = FALSE + /// Variable needed to determine the selected category of forms on Photocopier.js + var/category /obj/machinery/photocopier/Initialize() . = ..() @@ -60,6 +62,18 @@ data["has_item"] = !copier_empty() data["num_copies"] = num_copies + try + // var/list/blanks = json_decode(file2text("config/blanks.json")) LOBOTOMYCORPORATION EDIT OLD + var/list/blanks = (SSmaptype.maptype in SSmaptype.citymaps) ? json_decode(file2text("config/blanks_city.json")) : json_decode(file2text("config/blanks.json")) // LOBOTOMYCORPORATION EDIT NEW + if (blanks != null) + data["blanks"] = blanks + data["category"] = category + data["forms_exist"] = TRUE + else + data["forms_exist"] = FALSE + catch() + data["forms_exist"] = FALSE + if(photo_copy) data["is_photo"] = TRUE data["color_mode"] = color_mode @@ -156,6 +170,27 @@ if("set_copies") num_copies = clamp(text2num(params["num_copies"]), 1, MAX_COPIES_AT_ONCE) return TRUE + // Changes the forms displayed on Photocopier.js when you switch categories + if("choose_category") + category = params["category"] + return TRUE + // Called when you press print blank + if("print_blank") + if(busy) + to_chat(usr, span_warning("[src] is currently busy copying something. Please wait until it is finished.")) + return FALSE + if (toner_cartridge.charges - PAPER_TONER_USE < 0) + to_chat(usr, span_warning("There is not enough toner in [src] to print the form, please replace the cartridge.")) + return FALSE + do_copy_loop(CALLBACK(src, PROC_REF(make_blank_print)), usr) + var/obj/item/paper/printblank = new /obj/item/paper (loc) + var/printname = params["name"] + var/list/printinfo + for(var/infoline as anything in params["info"]) + printinfo += infoline + printblank.name = printname + printblank.info = printinfo + return printblank /** * Determines if the photocopier has enough toner to create `num_copies` amount of copies of the currently inserted item. @@ -267,6 +302,12 @@ give_pixel_offset(copied_doc) toner_cartridge.charges -= DOCUMENT_TONER_USE +/** + * The procedure is called when printing a blank to write off toner consumption. + */ +/obj/machinery/photocopier/proc/make_blank_print() + toner_cartridge.charges -= PAPER_TONER_USE + /** * Handles the copying of an ass photo. * diff --git a/config/blanks.json b/config/blanks.json new file mode 100644 index 000000000000..24c2d0e8cc1d --- /dev/null +++ b/config/blanks.json @@ -0,0 +1,817 @@ +[ + { + "code": "NT-CMD-JA", + "category": "Command Department", + "name": "Job Application", + "info": [ + "

Job Application

", + "
", + "

Applicant's name (with signature):

", + "

[]

", + "

Desired position

", + "

[]

", + "
", + "

By signing this document, you agree to Nanotrasen's policies on labor protection, occupational health and safety, compensation, and confidentiality.

", + "
", + "

Condemnation Review

", + "

Name of the Head of Personal or deputy head (with signature):

", + "

[]

", + "

Head of Personal Decision:

", + "

[]

", + "

[]

", + "

Review Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "

Name of department head or deputy head (with signature):

", + "

[]

", + "

Department Head's Decision:

", + "

[]

", + "

[]

", + "

Review Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

Appointment decision

", + "

[]

", + "

[]

", + "

[]

", + "

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and stamps of the heads or their deputies, this document has no corporate validity and cannot be considered evidence of the candidate's enrollment in the desired position.

" + ] + }, + { + "code": "NT-CMD-JT", + "category": "Command Department", + "name": "Job termination", + "info": [ + "

Job Termination

", + "
", + "

Name of the dismissed person:

", + "

[]

", + "

Position held

", + "

[]

", + "

Description of the reason for dismissal:

", + "

[]

", + "

[]

", + "

[]

", + "

Name of the Head of Personal or deputy head (with signature):

", + "

[]

", + "

Head of Personal Decision:

", + "

[]

", + "

[]

", + "

Decision Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

The decision of the head of staff or his deputy is sufficient grounds for dismissal. If only the head of personnel or his deputy makes the decision to dismiss, VOID values must be entered in the head of department fields.

", + "
", + "

Name of department head or deputy head (with signature):

", + "

[]

", + "

Department Head's Decision:

", + "

[]

", + "

[]

", + "

Decision Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

" + ] + }, + { + "code": "NT-CMD-JR", + "category": "Command Department", + "name": "Job reassignment", + "info": [ + "

Job Reassignment

", + "
", + "

Name of the person to be reassigned:

", + "

[]

", + "

Position held

", + "

[]

", + "

New position

", + "

[]

", + "

Reason :

", + "

[]

", + "

[]

", + "

[]

", + "

Name of the Head of Personal or deputy head (with signature):

", + "

[]

", + "

Head of Personal Decision:

", + "

[]

", + "

[]

", + "

Decision Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "

Name of department head or deputy head (with signature):

", + "

[]

", + "

Department Head's Decision:

", + "

[]

", + "

[]

", + "

Decision Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

" + ] + }, + { + "code": "NT-CMD-C", + "category": "Command Department", + "name": "Complaint form", + "info": [ + "

Complaint form

", + "
", + "

Complainant's name (with signature):

", + "

[]

", + "

Complaint text:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "
", + "

By writing and signing this complaint, you consent to the processing of your personal data by Nanotrasen Corporation.

", + "
", + "

Name of the person who received the complaint (with signature):

", + "

[]

", + "

Actions taken:

", + "

[]

", + "

[]

", + "

Date the complaint was reviewed:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

" + ] + }, + { + "code": "NT-CMD-O", + "category": "Command Department", + "name": "Order form", + "info": [ + "

Order form

", + "
", + "

The name of the orderer (with signature):

", + "

[]

", + "

Order text:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

An order may be addressed not only to a specific person, but also to a group of people, as well as to a department. This should be indicated in the text of the order. The person responsible for the execution of the order must sign in the name of the person who received the order.

", + "
", + "

Name of the executor (with signature):

", + "

[]

", + "

Other notes:

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-CMD-PH", + "category": "Command Department", + "name": "Permit to perform hazardous work", + "info": [ + "

Permit to perform hazardous work

", + "
", + "

Permission requestor's name (with signature):

", + "

[]

", + "

Work description:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "
", + "

Responsibility for any damage to property or employees of Nanotrasen Corporation during the execution of dangerous work lies with the person requesting the permit and the person issuing the permit.

", + "
", + "

The name of the permittee (with signature):

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

" + ] + }, + { + "code": "NT-SCR-W", + "category": "Security Department", + "name": "Warrant", + "info": [ + "

Warrant

", + "
", + "

Arrestee's name:

", + "

[]

", + "

Reason:

", + "

[]

", + "

[]

", + "

[]

", + "
", + "

The arrest form is legally and corporately valid if stamped and signed by the Head of Security or his/her deputy. Arrest forms should only be used during Green and BLUE threat code of the Nanotrasen facility. In the case of a higher threat code, Nanotrasen Corporation allows security personnel to make arrests with the verbal approval of the Head of Security.

", + "
", + "

Name of the head of security or his deputy (with signature):

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

" + ] + }, + { + "code": "NT-SCR-SW", + "category": "Security Department", + "name": "Search warrant", + "info": [ + "

Search Warrant

", + "
", + "

Name of the person being searched:

", + "

[]

", + "

Reason:

", + "

[]

", + "

[]

", + "

[]

", + "
", + "

The arrest form is legally and corporately valid if stamped and signed by the Head of Security or his/her deputy. Arrest forms should only be used during Green and BLUE threat code of the Nanotrasen facility. In the case of a higher threat code, Nanotrasen Corporation allows security personnel to make arrests with the verbal approval of the Head of Security.

", + "
", + "

Name of the head of security or his deputy (with signature):

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

" + ] + }, + { + "code": "NT-SCR-IR", + "category": "Security Department", + "name": "Interrogation Report", + "info": [ + "

Interrogation Report

", + "
", + "

Name of Interrogated:

", + "

[]

", + "

Reason for interrogation:

", + "

[]

", + "

Start date of the interrogation:

", + "

[].[].[]

", + "

[]:[]

", + "

End date of interrogation:

", + "

[].[].[]

", + "

[]:[]

", + "

The course of the interrogation:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

Other materials (interrogation notes):

", + "

[]

", + "

[]

", + "
", + "

Nanotrasen Corporation recommends the use of interrogation recording tools.

", + "
", + "

Name of the interrogator (with signature):

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

" + ] + }, + { + "code": "NT-SCR-SR", + "category": "Security Department", + "name": "Security Report", + "info": [ + "

Security Report

", + "
", + "

Name of the reporting person (with signature):

", + "

[]

", + "

Report text:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

Other materials (notes):

", + "

[]

", + "

[]

", + "

Report Date:

", + "

[].[].[]

", + "

[]:[]

", + "
", + "

Name of the person who received the report (with signature):

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

" + ] + }, + { + "code": "NT-SCR-EO", + "category": "Security Department", + "name": "Execution order", + "info": [ + "

Execution order

", + "
", + "

The name of the condemned to the execution:

", + "

[]

", + "

Reason for execution:

", + "

[]

", + "

[]

", + "

[]

", + "

Type of execution:

", + "

[]

", + "
", + "

Only the top management of the Nanotrasen facility, the Nanotrasen Central Command or the Nanotrasen Board of Directors can order an execution. Remember that execution is an exceptional punishment. By signing this order, you take full responsibility for any mistakes that may occur. This order must be stapled to form NT-MDC-DC after the execution of the punishment.

", + "
", + "

The name of the orderer (with signature):

", + "

[]

", + "

Other notes:

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-SCR-PP", + "category": "Security Department", + "name": "Permission to possess", + "info": [ + "

Permission to possess

", + "
", + "

Owner's name:

", + "

[]

", + "

List of items:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "
", + "

This permit authorizes the possession, custody, and use of the listed equipment by the person designated on the permit. The Designated Person must present this permit to any Security Officer on first request. The permit may be revoked and withdrawn at any time without cause. When filling out this form, the authorizer should fill in the blank fields with the VOID designation.

", + "
", + "

The name of the permittee (with signature):

", + "

[]

", + "

Other notes:

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-ENG-PW", + "category": "Engineering Department", + "name": "Permission to perform non-standard work", + "info": [ + "

Permission to perform non-standard work

", + "
", + "

Permission requestor's name (with signature):

", + "

[]

", + "

Description of work:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

Responsibility for any damage caused to the Nanotrasen during the execution of the described work lies with the person requesting the permit and the person giving the permit.

", + "
", + "

The name of the permittee (with signature):

", + "

[]

", + "

Other notes:

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-ENG-PE", + "category": "Engineering Department", + "name": "Permit for the issuance of engineering equipment", + "info": [ + "

Permit for the issuance of engineering equipment

", + "
", + "

Name of the requesting equipment (with signature):

", + "

[]

", + "

Purpose of application of the equipment:

", + "

[]

", + "

[]

", + "

[]

", + "

List of equipment:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

Responsibility for improper receipt of equipment lies with the person who signed the permit for the issuance of equipment. The VOID value must be filled in when completing the equipment list.

", + "
", + "

Name of issuing equipment (with signature):

", + "

[]

", + "

The decision to issue:

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-RSH-PR", + "category": "Research Department", + "name": "Permission to perform non-standard research", + "info": [ + "

Permission to perform non-standard research

", + "
", + "

Permission requestor's name (with signature):

", + "

[]

", + "

Description of research:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

Responsibility for any damage caused to the Nanotrasen object during the execution of the research described herein lies with the person requesting the permit and the person giving the permit.

", + "
", + "

The name of the permittee (with signature):

", + "

[]

", + "

Other notes:

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-RSH-PE", + "category": "Research Department", + "name": "Permit for the issuance of research equipment", + "info": [ + "

Permit for the issuance of research equipment

", + "
", + "

Name of the requesting equipment (with signature):

", + "

[]

", + "

Purpose of application of the equipment:

", + "

[]

", + "

[]

", + "

[]

", + "

List of equipment:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

Responsibility for improper receipt of equipment lies with the person who signed the permit for the issuance of equipment. The VOID value must be filled in when completing the equipment list.

", + "
", + "

Name of issuing equipment (with signature):

", + "

[]

", + "

The decision to issue:

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-MDC-MP", + "category": "Medical Department", + "name": "Medical prescription", + "info": [ + "

Medical Prescription

", + "
", + "

Patient name:

", + "

[]

", + "

Diagnosis:

", + "

[]

", + "

[]

", + "

[]

", + "

Recommendations for treatment:

", + "

[]

", + "

[]

", + "

[]

", + "

List of treating drugs:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "
", + "

This document entitles you to receive, store and use the listed medications. Patients should follow their doctor's recommendations when using medications. When filling out this form, the doctor should indicate the VOID value in the blank fields to avoid tampering.

", + "
", + "

The attending doctor (with signature):

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-MDC-AR", + "category": "Medical Department", + "name": "Autopsy report", + "info": [ + "

Autopsy Report

", + "
", + "

Body Name:

", + "

[]

", + "

The reason for the autopsy:

", + "

[]

", + "

[]

", + "

[]

", + "

Autopsy result:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "
", + "

Coroner's Name (with signature):

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-MDC-DC", + "category": "Medical Department", + "name": "Death Certificate", + "info": [ + "

Death Certificate

", + "
", + "

Body Name:

", + "

[]

", + "

Confirmation of Death:

", + "

[]

", + "

[]

", + "

[]

", + "

Cause of death:

", + "

[]

", + "

[]

", + "

[]

", + "
", + "

This is evidence that the designated person is permanently dead and cannot be resurrected. The person signing the certificate is responsible for the wrongful death.

", + "
", + "

Coroner's Name (with signature):

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-SPL-PO", + "category": "Supply Department", + "name": "Permission to execute a non-standard order", + "info": [ + "

Permission to execute a non-standard order

", + "
", + "

The name of the person requesting the delivery (with signature):

", + "

[]

", + "

Purpose of delivery target:

", + "

[]

", + "

[]

", + "

[]

", + "

List of deliveries:

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

The person who signed the permission to receive the package is responsible for the improper receipt of the package. The VOID value must be filled in when completing the equipment list.

", + "
", + "

Name of the person who approved the delivery (with signature):

", + "

[]

", + "

The decision to issue:

", + "

[]

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "

Place for a stamp

", + "
", + "

This document is the property of Nanotrasen Corporation. Without the signatures and seals of the managers or their deputies, this document has no corporate force.

", + "
" + ] + }, + { + "code": "NT-LB", + "category": "Other", + "name": "Lunch bill", + "info": [ + "

Lunch Bill

", + "
", + "

Name of the place:

", + "

[]

", + "

Waiter's name (with signature):

", + "

[]

", + "
", + "

Order

", + "

1. []

", + "

2. []

", + "

3. []

", + "

4. []

", + "

5. []

", + "

6. []

", + "

7. []

", + "

8. []

", + "

9.  []

", + "

Total price (includes the cost of paper)

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "
", + "

This payment document is the property of NanoTrasen. You must deliver this document to the head of the NanoTrasen facility staff within 24 hours of service for independent tax accounting.

", + "
" + ] + }, + { + "code": "NT-PS", + "category": "Other", + "name": "Provision of paid services", + "info": [ + "

Provision of paid services

", + "
", + "

Name of the place:

", + "

[]

", + "

Name of service provider (with signature):

", + "

[]

", + "
", + "

List of services rendered

", + "

1. []

", + "

2. []

", + "

3. []

", + "

4. []

", + "

5. []

", + "

6. []

", + "

7. []

", + "

8. []

", + "

9.  []

", + "

Total price (includes the cost of paper)

", + "

[]

", + "

Date:

", + "

[].[].[]

", + "

[]:[]

", + "
", + "

This payment document is the property of NanoTrasen. You must deliver this document to the head of the NanoTrasen facility staff within 24 hours of service for independent tax accounting.

", + "
" + ] + } +] diff --git a/config/blanks_city.json b/config/blanks_city.json new file mode 100644 index 000000000000..8017b63a72c6 --- /dev/null +++ b/config/blanks_city.json @@ -0,0 +1,167 @@ +[ + { + "code": "COL-FF-FOR", + "category": "Fixer Forms", + "name": "Fixer Office Registration", + "info": [ + "

Hana-Association - Fixer Office Registration form

", + "
", + "

This is a Registration form for the creation of an office. Please fill in the following information properly. This form is meant for the Office Director.

", + "

Registrant Information

", + "", + "
", + "
", + "

========

", + "

STAMP HERE

", + "

========

", + "
", + "
", + "

Office Details

", + "

Office-Name: []

", + "

Office Type (ONLY CHECK 1)

", + "", + "

*Other must be defined for capsule, if definition is not qualified for a specific capsule, your Hana Associate will choose one for you.

", + "

Starting-Number of Fixers: []

", + "

By signing this, you agree to the laws and stipulations that Hana can impose.

", + "

Signature:[]

", + "

Approved By: []

", + "
", + "

Offices approved by the Hana-Association are liable to direct-orders/Emergency Summons in regards to Urban-Myths and above. Please keep in mind the Hana-Association retains the right to Remove your office from the list of Registered offices, if the Hana-Association has in any reason, or any case decided to do so. In which case, the Hana-Association retains the right to termination of this authorization

", + "
" + ] + }, + { + "code": "COL-FF-HGS", + "category": "Fixer Forms", + "name": "Hana Grading Sheet", + "info": [ + "

Hana Grading Sheet

", + "

Fixer information

", + "

Name []

", + "

Office []

", + "

Grade Issued (C denotes Color): []

", + "

Hana Official Name:

", + "

[]

", + "

Stamp Below:

", + "
" + ] + }, + { + "code": "COL-FF-SFL", + "category": "Fixer Forms", + "name": "Solo Fixer License", + "info": [ + "

Hana-Association - Solo Fixer License Form

", + "
", + "

This is a Hana-Association official form stating that you are an official Fixer with no office or association affiliation.

", + "

As of, []Citizen[]has requested to form a fixer under the Hana Association. Within District[] of the City.

", + "

Fixer approval given by [], Official of the Hana-Association

", + "
", + "
", + "

========

", + "

STAMP HERE

", + "

========

", + "
", + "
", + "

Fixers approved by the Hana-Association are liable to direct-orders/Emergency Summons in regards to Urban-Myths and above. Please keep in mind the Hana-Association retains the right to Remove your status from the registry, if the Hana-Association has in any reason, or any case decided to do so. In which case, the Hana-Association retains the right to termination of this authorization

", + "
" + ] + }, + { + "code": "COL-HQ-CQ-GMG", + "category": "Combat Hana Quests", + "name": "Combat Quest - General Meat Gathering", + "info": [ + "

Type - Combat

", + "

There have been reports of the Outskirts being flooded with excess amounts of sweepers, robots, worms, and people with augments that look like bugs.

", + "

The Hana Association requests assistance from fixers in clearing out the Outskirts.

", + "

Rewards:

", + "", + "

(These jobs are repeatable a total of three times per person/office.)

", + "
" + ] + }, + { + "code": "COL-HQ-CQ-PTC", + "category": "Combat Hana Quests", + "name": "Combat Quest - Protecting The City", + "info": [ + "

Type - Combat (Protection)

", + "

There has been reports of hostiles around the city. Hana will give you a lump sum up front,

", + "

so long as you assist in cleaning them out.

", + "

Rewards

", + "", + "

(Failure to assist will result in a breach of contract)

", + "
" + ] + }, + { + "code": "COL-HQ-RQ-BR", + "category": "Retrieval Hana Quests", + "name": "Retrieval Quest - Body Retrieval", + "info": [ + "

Type - Retrieval

", + "

Fixers going in to the Outskirts have proven to have a high chance of not coming back from their expeditions.

", + "

Bringing back the corpse of a registered fixer in a state that is revivable will be eligible for a reward.

", + "

Reward:

", + "", + "
" + ] + }, + { + "code": "COL-HQ-BR", + "category": "Misc Hana Quests", + "name": "Contract Breach", + "info": [ + "

Type - Contract Enforcement

", + "

A Hana-made contract has been breached.

", + "

You are being hired to kill and retrieve their body.

", + "

Target - []

", + "

Rewards

", + "", + "
" + ] + }, + { + "code": "COL-HQ-OI", + "category": "Misc Hana Quests", + "name": "Office Inspection", + "info": [ + "

Type - Office Grading

", + "

This is a lump sum grant given to offices that are graded.

", + "

Office grades are up to the local Hana Representative or Administrator.

", + "

Rewards

", + "", + "

(Only available to offices with a physical office space)

", + "
" + ] + } +] diff --git a/tgui/packages/tgui/interfaces/Photocopier.js b/tgui/packages/tgui/interfaces/Photocopier.js index 583778f51207..e74354d312bb 100644 --- a/tgui/packages/tgui/interfaces/Photocopier.js +++ b/tgui/packages/tgui/interfaces/Photocopier.js @@ -1,5 +1,6 @@ -import { ProgressBar, NumberInput, Button, Section, Box, Flex } from '../components'; +import { sortBy } from 'common/collections'; import { useBackend } from '../backend'; +import { Box, Button, Dropdown, Flex, NumberInput, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; export const Photocopier = (props, context) => { @@ -8,13 +9,14 @@ export const Photocopier = (props, context) => { isAI, has_toner, has_item, + forms_exist, } = data; return ( + width={320} + height={512}> {has_toner ? ( @@ -25,6 +27,15 @@ export const Photocopier = (props, context) => { )} + {forms_exist ? ( + + ) : ( +
+ + No forms found. Please contact your system administrator. + +
+ )} {has_item ? ( ) : ( @@ -162,6 +173,59 @@ const Options = (props, context) => { ); }; +const Blanks = (props, context) => { + const { act, data } = useBackend(context); + const { + blanks, + category, + has_toner, + } = data; + + const sortedBlanks = sortBy( + blank => blanks.category, + )(blanks || []); + + const categories = []; + for (let blank of sortedBlanks) { + if (!categories.includes(blank.category)) { + categories.push(blank.category); + } + } + + const selectedCategory = category ?? categories[0]; + const visibleBlanks = sortedBlanks.filter(blank => ( + blank.category === selectedCategory + )); + + return ( +
+ act("choose_category", { + category: value, + })} + /> + + {visibleBlanks.map(blank => ( + + ))} + +
+ ); +}; + const AIOptions = (props, context) => { const { act, data } = useBackend(context); const { can_AI_print } = data;