diff --git a/code/datums/roundstats/roundstats.dm b/code/datums/roundstats/roundstats.dm
index 2fc1950bb6..0c25b83838 100644
--- a/code/datums/roundstats/roundstats.dm
+++ b/code/datums/roundstats/roundstats.dm
@@ -25,6 +25,8 @@ GLOBAL_VAR_INIT(prey_eaten_roundstat, 0) //VOREStation Edit - Obviously
GLOBAL_VAR_INIT(prey_absorbed_roundstat, 0) //VOREStation Edit - Obviously
GLOBAL_VAR_INIT(prey_digested_roundstat, 0) //VOREStation Edit - Obviously
GLOBAL_VAR_INIT(items_digested_roundstat, 0) //VOREStation Edit - Obviously
+var/global/list/security_printer_tickets = list() //VOREStation Edit
+
/hook/roundend/proc/RoundTrivia()//bazinga
var/list/valid_stats_list = list() //This is to be populated with the good shit
@@ -54,6 +56,22 @@ GLOBAL_VAR_INIT(items_digested_roundstat, 0) //VOREStation Edit - Obviously
else if(GLOB.disposals_flush_shift_roundstat > 40)
valid_stats_list.Add("The disposal system flushed a whole [GLOB.disposals_flush_shift_roundstat] times for this shift. We should really invest in waste treatement.")
+ //VOREStation add Start - Ticket time!
+ if(security_printer_tickets.len)
+ valid_stats_list.Add("[security_printer_tickets.len] unique security tickets were issued today!
Examples include:")
+ var/good_num = 5
+ var/ourticket
+ while(good_num > 0)
+ ourticket = null
+ if(security_printer_tickets.len)
+ ourticket = pick(security_printer_tickets)
+ security_printer_tickets -= ourticket
+ if(ourticket)
+ valid_stats_list.Add("-\"[ourticket]\"")
+ good_num--
+ else
+ good_num = 0
+
//VOREStation Add Start - Vore stats lets gooooo
if(GLOB.prey_eaten_roundstat > 0)
valid_stats_list.Add("A total of [GLOB.prey_eaten_roundstat] individuals were eaten today!")
diff --git a/code/game/objects/items/devices/ticket_printer.dm b/code/game/objects/items/devices/ticket_printer.dm
new file mode 100644
index 0000000000..8817c7ec87
--- /dev/null
+++ b/code/game/objects/items/devices/ticket_printer.dm
@@ -0,0 +1,58 @@
+/obj/item/device/ticket_printer
+ name = "ticket printer"
+ desc = "It prints security citations!"
+ icon = 'icons/obj/device_vr.dmi'
+ icon_state = "sec_ticket_printer"
+ var/print_cooldown = 1 MINUTE
+ var/last_print
+
+/obj/item/device/ticket_printer/attack_self(mob/user)
+ . = ..()
+ if(last_print + print_cooldown <= world.time)
+ print_a_ticket(user)
+ else
+ to_chat(user, "\The [src] is not ready to print another ticket yet.")
+
+/obj/item/device/ticket_printer/proc/print_a_ticket(mob/user)
+
+ var/ticket_name = sanitize(tgui_input_text(user, "The Name of the person you are issuing the ticket to.", "Name", max_length = 100))
+ if(length(ticket_name) > 100)
+ tgui_alert_async(usr, "Entered name too long. 100 character limit.","Error")
+ return
+ if(!ticket_name)
+ return
+ var/details = sanitize(tgui_input_text(user, "What is the ticket for? Avoid entering personally identifiable information in this section. This information should not be used to harrass or otherwise make the person feel uncomfortable. (Max length: 200)", "Ticket Details", max_length = 200))
+ if(length(details) > 200)
+ tgui_alert_async(usr, "Entered details too long. 200 character limit.","Error")
+ return
+ if(!details)
+ return
+
+ var/turf/our_turf = get_turf(user)
+
+ var/final = "
Nanotrasen Security Citation
This security citation has been issued to
[capitalize(ticket_name)]Reason:
[details]
See your local representative at Central Command after the shift is over to resolve this issue.
"
+
+ var/obj/item/weapon/paper/sec_ticket/p = new /obj/item/weapon/paper/sec_ticket(our_turf)
+
+ p.info = final
+ p.name = "Security Citation: [ticket_name]"
+ playsound(user, 'sound/items/ticket_printer.ogg', 75, 1)
+
+ security_printer_tickets |= details
+ log_and_message_admins("has issued '[ticket_name]' a security citation: \"[details]\"", user)
+ last_print = world.time
+
+/obj/item/weapon/paper/sec_ticket
+ name = "Security Citation"
+ desc = "A citation issued by security for some kind of infraction!"
+ icon = 'icons/obj/bureaucracy_vr.dmi'
+ icon_state = "sec_ticket"
+
+/obj/item/weapon/paper/sec_ticket/Initialize(mapload, text, title)
+ . = ..()
+ icon = 'icons/obj/bureaucracy_vr.dmi'
+ icon_state = "sec_ticket"
+
+/obj/item/weapon/paper/sec_ticket/update_icon()
+ icon = icon
+ icon_state = icon_state
diff --git a/code/modules/admin/admin_verb_lists_vr.dm b/code/modules/admin/admin_verb_lists_vr.dm
index 1bc2ffbd94..4719c289c1 100644
--- a/code/modules/admin/admin_verb_lists_vr.dm
+++ b/code/modules/admin/admin_verb_lists_vr.dm
@@ -128,7 +128,8 @@ var/list/admin_verbs_admin = list(
/client/proc/despawn_player,
/datum/admins/proc/view_feedback,
/client/proc/make_mentor,
- /client/proc/unmake_mentor
+ /client/proc/unmake_mentor,
+ /client/proc/removetickets
)
var/list/admin_verbs_ban = list(
diff --git a/code/modules/admin/admin_verbs_vr.dm b/code/modules/admin/admin_verbs_vr.dm
index 994d12a4ea..9e86256eaa 100644
--- a/code/modules/admin/admin_verbs_vr.dm
+++ b/code/modules/admin/admin_verbs_vr.dm
@@ -54,3 +54,20 @@
segments = 36
if(tgui_alert(usr, "\The [orbiter] will orbit around [center]. Is this okay?", "Confirm Orbit", list("Yes", "No")) == "Yes")
orbiter.orbit(center, distance, clock, speed, segments)
+
+/client/proc/removetickets()
+ set name = "Security Tickets"
+ set category = "Admin"
+ set desc = "Allows one to remove tickets from the global list."
+
+ if(!check_rights(R_ADMIN))
+ return
+
+ if(security_printer_tickets.len >= 1)
+ var/input = tgui_input_list(usr, "Which message?", "Security Tickets", security_printer_tickets)
+
+ if(tgui_alert(usr, "Do you want to remove the following message from the global list? \"[input]\"", "Remove Ticket", list("Yes", "No")) == "Yes")
+ security_printer_tickets -= input
+
+ else
+ tgui_alert_async(usr, "The ticket list is empty.","Empty")
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
index 76a479a80d..cc0d12c3f0 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -544,6 +544,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/taperoll/police(src)
src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src)
src.modules += new /obj/item/weapon/gripper/security(src)
+ src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add
src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src)
/obj/item/weapon/robot_module/robot/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
@@ -862,6 +863,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src)
src.modules += new /obj/item/borg/combat/shield(src)
src.modules += new /obj/item/borg/combat/mobility(src)
+ src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add
src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
index 8b29d89494..2706cfd3ec 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
@@ -237,6 +237,7 @@
src.modules += new /obj/item/taperoll/police(src) //Block out crime scenes.
src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) //They /are/ a security borg, after all.
src.modules += new /obj/item/weapon/dogborg/pounce(src) //Pounce
+ src.modules += new /obj/item/device/ticket_printer(src)
src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) //Emag. Not a big problem.
var/datum/matter_synth/water = new /datum/matter_synth(500) //Starts full and has a max of 500
diff --git a/icons/obj/bureaucracy_vr.dmi b/icons/obj/bureaucracy_vr.dmi
new file mode 100644
index 0000000000..2b27fee277
Binary files /dev/null and b/icons/obj/bureaucracy_vr.dmi differ
diff --git a/icons/obj/device_vr.dmi b/icons/obj/device_vr.dmi
index 1a1c28af56..43f6610782 100644
Binary files a/icons/obj/device_vr.dmi and b/icons/obj/device_vr.dmi differ
diff --git a/maps/groundbase/gb-z1.dmm b/maps/groundbase/gb-z1.dmm
index c0c8b7a715..5ecfeebc18 100644
--- a/maps/groundbase/gb-z1.dmm
+++ b/maps/groundbase/gb-z1.dmm
@@ -118,6 +118,7 @@ lel
dir = 8;
pixel_x = 30
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/equipment)
"aq" = (
@@ -1343,6 +1344,8 @@ lel
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
+/obj/item/device/ticket_printer,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/briefing)
"dp" = (
@@ -4006,6 +4009,7 @@ lel
/obj/machinery/light{
dir = 8
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/equipment)
"jZ" = (
@@ -6881,6 +6885,7 @@ lel
/obj/machinery/camera/network/security{
dir = 4
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/equipment)
"qR" = (
@@ -8042,6 +8047,7 @@ lel
/obj/item/weapon/book/manual/security_space_law,
/obj/item/gunbox/warden,
/obj/structure/closet/secure_closet/warden,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/warden)
"tx" = (
@@ -11091,6 +11097,7 @@ lel
/obj/machinery/light{
dir = 4
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/equipment)
"Au" = (
@@ -11849,6 +11856,7 @@ lel
/obj/machinery/firealarm{
dir = 4
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/equipment)
"Co" = (
@@ -13938,6 +13946,11 @@ lel
/obj/structure/cable/yellow{
icon_state = "0-4"
},
+<<<<<<< HEAD
+=======
+/obj/random/paicard,
+/obj/item/device/ticket_printer,
+>>>>>>> 58c370688b... Merge pull request #14119 from Very-Soft/ticket_printer
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/hos)
"Hw" = (
@@ -16256,6 +16269,7 @@ lel
/obj/structure/cable/yellow{
icon_state = "0-4"
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/equipment)
"MS" = (
@@ -20986,6 +21000,7 @@ lel
pixel_x = 2;
pixel_y = 3
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/detective)
"YO" = (
diff --git a/maps/stellar_delight/stellar_delight1.dmm b/maps/stellar_delight/stellar_delight1.dmm
index 5eb1f2bfe8..b7bc90fe65 100644
--- a/maps/stellar_delight/stellar_delight1.dmm
+++ b/maps/stellar_delight/stellar_delight1.dmm
@@ -35,6 +35,7 @@
dir = 4
},
/obj/effect/floor_decal/milspec/color/red,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/security/security_lockerroom)
"ag" = (
@@ -8820,6 +8821,7 @@
},
/obj/item/weapon/gun/energy/sizegun,
/obj/item/weapon/storage/box/donut,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/security/warden)
"ss" = (
@@ -9023,6 +9025,7 @@
dir = 8
},
/obj/effect/floor_decal/milspec/color/red,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/security/security_lockerroom)
"sM" = (
@@ -13211,6 +13214,7 @@
"BM" = (
/obj/structure/table/steel_reinforced,
/obj/machinery/recharger,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/security/security_equiptment_storage)
"BN" = (
@@ -13709,6 +13713,7 @@
pixel_y = 7
},
/obj/item/weapon/pen,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/security/lobby)
"CR" = (
@@ -16283,6 +16288,7 @@
dir = 8
},
/obj/effect/floor_decal/milspec/color/red,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/security/security_lockerroom)
"Iu" = (
@@ -22561,6 +22567,7 @@
dir = 4
},
/obj/effect/floor_decal/milspec/color/red,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/security/security_lockerroom)
"VG" = (
@@ -24167,6 +24174,7 @@
dir = 4
},
/obj/effect/floor_decal/milspec/color/red,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/security/security_lockerroom)
"YY" = (
@@ -24214,6 +24222,7 @@
dir = 4
},
/obj/effect/floor_decal/milspec/color/red,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/security/security_lockerroom)
"Zc" = (
diff --git a/maps/stellar_delight/stellar_delight3.dmm b/maps/stellar_delight/stellar_delight3.dmm
index ee0eed2947..858a172317 100644
--- a/maps/stellar_delight/stellar_delight3.dmm
+++ b/maps/stellar_delight/stellar_delight3.dmm
@@ -10713,6 +10713,7 @@
dir = 1
},
/obj/item/device/retail_scanner/security,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/crew_quarters/heads/hos)
"MO" = (
diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm
index 3c03294e49..57ec2b68f8 100644
--- a/maps/tether/tether-02-surface2.dmm
+++ b/maps/tether/tether-02-surface2.dmm
@@ -4747,6 +4747,7 @@
dir = 8
},
/obj/item/device/holowarrant,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/security/outfitting)
"ahp" = (
@@ -4814,6 +4815,7 @@
/obj/effect/floor_decal/corner/red/bordercorner2{
dir = 6
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/security/outfitting)
"ahu" = (
@@ -5122,6 +5124,7 @@
pixel_x = 2;
pixel_y = 3
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/carpet,
/area/tether/surfacebase/security/detective/officea)
"ahU" = (
@@ -5135,6 +5138,7 @@
pixel_x = 2;
pixel_y = 3
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/carpet,
/area/tether/surfacebase/security/detective/officeb)
"ahV" = (
@@ -5209,6 +5213,7 @@
pixel_x = -24
},
/obj/item/device/holowarrant,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/security/outfitting)
"aid" = (
@@ -5274,6 +5279,7 @@
},
/obj/structure/closet/secure_closet/security,
/obj/item/device/holowarrant,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/security/outfitting)
"aii" = (
@@ -6001,6 +6007,7 @@
},
/obj/structure/closet/secure_closet/security,
/obj/item/device/holowarrant,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/security/outfitting)
"ajk" = (
@@ -6090,6 +6097,7 @@
/obj/effect/floor_decal/corner/red/bordercorner2,
/obj/structure/closet/secure_closet/security,
/obj/item/device/holowarrant,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/security/outfitting)
"ajp" = (
@@ -11719,6 +11727,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/security/warden)
"asF" = (
diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm
index 24244fe74e..eb06ecc817 100644
--- a/maps/tether/tether-03-surface3.dmm
+++ b/maps/tether/tether-03-surface3.dmm
@@ -1778,6 +1778,7 @@
},
/obj/effect/floor_decal/borderfloor,
/obj/effect/floor_decal/corner/red/border,
+/obj/item/device/ticket_printer,
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/upperhall)
"acE" = (
@@ -1796,6 +1797,7 @@
/obj/machinery/light{
dir = 8
},
+/obj/item/device/ticket_printer,
/turf/simulated/floor/wood,
/area/tether/surfacebase/security/hos)
"acG" = (
@@ -4795,6 +4797,12 @@
/obj/effect/floor_decal/corner/red/border{
dir = 1
},
+<<<<<<< HEAD
+=======
+/obj/machinery/recharger,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/item/device/ticket_printer,
+>>>>>>> 58c370688b... Merge pull request #14119 from Very-Soft/ticket_printer
/turf/simulated/floor/tiled,
/area/tether/surfacebase/security/lobby)
"agQ" = (
diff --git a/sound/items/ticket_printer.ogg b/sound/items/ticket_printer.ogg
new file mode 100644
index 0000000000..2f2735c238
Binary files /dev/null and b/sound/items/ticket_printer.ogg differ
diff --git a/vorestation.dme b/vorestation.dme
index 781327e701..31f04c782d 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1275,6 +1275,7 @@
#include "code\game\objects\items\devices\t_scanner.dm"
#include "code\game\objects\items\devices\taperecorder.dm"
#include "code\game\objects\items\devices\text_to_speech.dm"
+#include "code\game\objects\items\devices\ticket_printer.dm"
#include "code\game\objects\items\devices\traitordevices.dm"
#include "code\game\objects\items\devices\transfer_valve.dm"
#include "code\game\objects\items\devices\translator.dm"