From 1ca0f3aa9be0500a0184d5ace6de569bc0e17f8b Mon Sep 17 00:00:00 2001 From: cacogen <25089914+cacogen@users.noreply.github.com> Date: Sat, 17 Aug 2019 03:14:26 +1200 Subject: [PATCH] One HoP ticket per person, old tickets delete (#45813) * One HoP ticket per person, old tickets deleted * does a lot look at it * Pleases Travis. Doesn't try to sell the nanite paper thing too hard, who cares if the stupes don't get it * Update ticketmachine.dm * it works fine now * adds cooldown to emag_act --- code/modules/paperwork/ticketmachine.dm | 85 +++++++++++++++++-------- 1 file changed, 59 insertions(+), 26 deletions(-) diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index 2fded31edbb..80fc35b6ad8 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -13,11 +13,13 @@ maptext_y = 10 layer = HIGH_OBJ_LAYER var/ticket_number = 0 //Increment the ticket number whenever the HOP presses his button - var/current_number = 0 //What customer are we currently serving? - var/max_number = 999 //To stop the text going fucky. At this point, you need to refill it. - var/cooldown = 50 //Small cooldown, stops the clown from immediately breaking it. + var/current_number = 0 //What ticket number are we currently serving? + var/max_number = 100 //At this point, you need to refill it. + var/cooldown = 50 var/ready = TRUE var/id = "ticket_machine_default" //For buttons + var/list/ticket_holders = list() + var/list/obj/item/ticket_machine_ticket/tickets = list() /obj/machinery/ticket_machine/multitool_act(mob/living/user, obj/item/I) if(!multitool_check_buffer(user, I)) //make sure it has a data buffer @@ -27,12 +29,19 @@ to_chat(user, "You store linkage information in [I]'s buffer.") return TRUE -/obj/machinery/ticket_machine/emag_act(mob/user) //Emag the ticket machine to dispense burning tickets, as well as randomize its customer number to destroy the HOP's mind. +/obj/machinery/ticket_machine/emag_act(mob/user) //Emag the ticket machine to dispense burning tickets, as well as randomize its number to destroy the HoP's mind. if(obj_flags & EMAGGED) return to_chat(user, "You overload [src]'s bureaucratic logic circuitry to its MAXIMUM setting.") - ticket_number = rand(0,999) + ticket_number = rand(0,max_number) + current_number = ticket_number obj_flags |= EMAGGED + if(tickets.len) + for(var/obj/item/ticket_machine_ticket/ticket in tickets) + ticket.visible_message("\the [ticket] disperses!") + qdel(ticket) + tickets.Cut() + update_icon() /obj/machinery/ticket_machine/Initialize() . = ..() @@ -42,13 +51,18 @@ if(current_number >= ticket_number) return playsound(src, 'sound/misc/announce_dig.ogg', 50, 0) - say("Next customer, please!") + if(current_number && !(obj_flags & EMAGGED) && tickets[current_number]) + tickets[current_number].visible_message("\the [tickets[current_number]] disperses!") + qdel(tickets[current_number]) current_number ++ //Increment the one we're serving. + say("Now serving ticket #[current_number]!") + if(!(obj_flags & EMAGGED) && tickets[current_number]) + tickets[current_number].visible_message("\the [tickets[current_number]] vibrates!") update_icon() //Update our icon here rather than when they take a ticket to show the current ticket number being served /obj/machinery/button/ticket_machine name = "increment ticket counter" - desc = "Use this button when you've served a customer to tell the next one to come forward." + desc = "Use this button after you've served someone to tell the next person to come forward." device_type = /obj/item/assembly/control/ticket_machine req_access = list() id = "ticket_machine_default" @@ -73,7 +87,7 @@ /obj/item/assembly/control/ticket_machine name = "ticket machine controller" - desc = "A remote controller for the HOP's ticket machine." + desc = "A remote controller for the HoP's ticket machine." var/obj/machinery/ticket_machine/linked //To whom are we linked? /obj/item/assembly/control/ticket_machine/Initialize() @@ -103,11 +117,11 @@ /obj/machinery/ticket_machine/update_icon() switch(ticket_number) //Gives you an idea of how many tickets are left - if(0 to 200) + if(0 to 49) icon_state = "ticketmachine_100" - if(201 to 800) + if(50 to 99) icon_state = "ticketmachine_50" - if(801 to 999) + if(100) icon_state = "ticketmachine_0" handle_maptext() @@ -117,30 +131,30 @@ maptext_x = 13 if(10 to 99) maptext_x = 10 - if(100 to 999) + if(100) maptext_x = 8 maptext = "[current_number]" //Finally, apply the maptext /obj/machinery/ticket_machine/attackby(obj/item/I, mob/user, params) ..() - if(ticket_number >= max_number) - to_chat(user, "[src] refuses [I]!, perhaps it's already full?.") - return if(istype(I, /obj/item/hand_labeler_refill)) + if(!(ticket_number >= max_number)) + to_chat(user, "[src] refuses [I]! There [max_number-ticket_number==1 ? "is" : "are"] still [max_number-ticket_number] ticket\s left!") + return to_chat(user, "You start to refill [src]'s ticket holder (doing this will reset its ticket count!).") if(do_after(user, 30, target = src)) - to_chat(user, "You insert [I] into [src] as it whirrs nondescriptly.") + to_chat(user, "You insert [I] into [src] as it whirs nondescriptly.") qdel(I) ticket_number = 0 current_number = 0 + if(tickets.len) + for(var/obj/item/ticket_machine_ticket/ticket in tickets) + ticket.visible_message("\the [ticket] disperses!") + qdel(ticket) + tickets.Cut() max_number = initial(max_number) update_icon() return - if(istype(I, /obj/item/ticket_machine_ticket)) - to_chat(user, "You start to cram [I] into [src]'s recycling bin.") - if(do_after(user, 20, target = src)) //Slight delay so they don't accidentally dispose of their ticket and move to the BACK OF THE LINE - qdel(I) - return /obj/machinery/ticket_machine/proc/reset_cooldown() ready = TRUE @@ -148,22 +162,30 @@ /obj/machinery/ticket_machine/attack_hand(mob/living/carbon/user) . = ..() if(!ready) - to_chat(user,"Temporarily unable to dispense ticket, please be patient!") + to_chat(user,"You press the button, but nothing happens...") return if(ticket_number >= max_number) to_chat(user,"Ticket supply depleted, please refill this unit with a hand labeller refill cartridge!") return - ready = FALSE + if((user in ticket_holders) && !(obj_flags & EMAGGED)) + to_chat(user, "You already have a ticket!") + return playsound(src, 'sound/machines/terminal_insert_disc.ogg', 100, 0) - addtimer(CALLBACK(src, .proc/reset_cooldown), cooldown)//Small cooldown to prevent the clown from ripping out every ticket ticket_number ++ - to_chat(user, "You take a ticket from [src], looks like you're customer #[ticket_number]...") + to_chat(user, "You take a ticket from [src], looks like you're ticket number #[ticket_number]...") var/obj/item/ticket_machine_ticket/theirticket = new /obj/item/ticket_machine_ticket(get_turf(src)) theirticket.name = "Ticket #[ticket_number]" theirticket.maptext = "[ticket_number]" theirticket.saved_maptext = "[ticket_number]" + theirticket.ticket_number = ticket_number + theirticket.source = src + theirticket.owner = user user.put_in_hands(theirticket) + ticket_holders += user + tickets += theirticket if(obj_flags & EMAGGED) //Emag the machine to destroy the HOP's life. + ready = FALSE + addtimer(CALLBACK(src, .proc/reset_cooldown), cooldown)//Small cooldown to prevent piles of flaming tickets theirticket.fire_act() user.dropItemToGround(theirticket) user.adjust_fire_stacks(1) @@ -172,7 +194,7 @@ /obj/item/ticket_machine_ticket name = "Ticket" - desc = "A ticket which shows your place in the line, you can put it back into the ticket machine when youre done with it." + desc = "A ticket which shows your place in the Head of Personnel's line. Made from Nanotrasen patented NanoPaper®. Though solid, its form seems to shimmer slightly. Feels (and burns) just like the real thing." icon = 'icons/obj/bureaucracy.dmi' icon_state = "ticket" maptext_x = 7 @@ -181,6 +203,9 @@ resistance_flags = FLAMMABLE max_integrity = 50 var/saved_maptext = null + var/mob/living/carbon/owner + var/obj/machinery/ticket_machine/source + var/ticket_number /obj/item/ticket_machine_ticket/attack_hand(mob/user) . = ..() @@ -202,3 +227,11 @@ /obj/item/paper/extinguish() ..() update_icon() + +/obj/item/ticket_machine_ticket/Destroy() + if(owner && source) + source.ticket_holders -= owner + source.tickets[ticket_number] = null + owner = null + source = null + return ..()